RFR: 8294715: Add IR checks to the reduction vectorization tests [v3]

Emanuel Peter epeter at openjdk.org
Wed Mar 1 12:42:10 UTC 2023


On Tue, 28 Feb 2023 08:03:20 GMT, Daniel Skantz <duke at openjdk.org> wrote:

>> We are lifting some loopopts/superword tests to use the IR framework, and add IR annotations to check that vector reductions take place on x86_64. This can be useful to prevent issues such as JDK-8300865.
>> 
>> Approach: lift the more general tests in loopopts/superword, mainly using matching rules in cpu/x86/x86.ad, but leave tests mostly unchanged otherwise. Some reductions are considered non-profitable (superword.cpp), so we might need to raise sse/avx value pre-conditions from what would be a strict reading of x86.ad (as noted by @eme64).
>> 
>> Testing: Local testing (x86_64) using UseSSE={2,3,4}, UseAVX={0,1,2,3}. Tested running all jtreg compiler tests. Tier1-tier5 runs to my knowledge never showed any compiler-related regression in other tests as a result from this work. GHA. Validation: all tests fail if we put unreasonable counts for the respective reduction node, such as counts = {IRNode.ADD_REDUCTION_VI, ">= 10000000"}).
>> 
>> Thanks @robcasloz  and @eme64 for advice.
>> 
>> Notes: ProdRed_Double does not vectorize (JDK-8300865). SumRed_Long does not vectorize on 32-bit, according to my reading of source, test on GHA and cross-compiled JDK on 32-bit Linux, so removed these platforms from @requires. Lifted the AbsNeg tests too but added no checks, as these are currently not run on x86_64.
>
> Daniel Skantz has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Address further review comments (edits)

@danielogh Good work! I think we are getting there now. If this passes on `sve` I'd approve this.
Well, it would be nice if you could also remove some of the unnecessary stores in the reduction tests, that would be a nice improvement.

@danielogh You should merge from master, because it seems your state still is broken for ARM (see github actions).

test/hotspot/jtreg/compiler/loopopts/superword/RedTest_int.java line 149:

> 147:     @IR(applyIfCPUFeature = {"sse4.1", "true"},
> 148:         applyIfAnd = {"SuperWordReductions", "true", "LoopMaxUnroll", ">= 8"},
> 149:         counts = {IRNode.ADD_REDUCTION_VI, ">= 1"})

We could also remove the store to `d` here. I think it should still vectorize.
I think that applies to all examples in this test. And also for `RedTest_long.java`.

test/hotspot/jtreg/compiler/loopopts/superword/SumRedSqrt_Double.java line 100:

> 98:     @IR(applyIfCPUFeature = {"avx", "true"},
> 99:         applyIfAnd = {"SuperWordReductions", "true", "LoopMaxUnroll", ">= 8"},
> 100:         counts = {IRNode.ADD_REDUCTION_VD, ">= 1", IRNode.SQRT_V, ">= 1"})

We could also remove the store to `d` here.

-------------

PR: https://git.openjdk.org/jdk/pull/12683


More information about the hotspot-compiler-dev mailing list