RFR: 8294715: Add IR checks to the reduction vectorization tests

Emanuel Peter epeter at openjdk.org
Wed Feb 22 08:13:46 UTC 2023


On Tue, 21 Feb 2023 08:08:31 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.

Here a list of things that come to mind when reviewing this:
1. Does it make sense to run the tests with `-XX:LoopMaxUnroll=2`, if we also run it with `-XX:LoopMaxUnroll=4`, and it only vectorizes with `-XX:LoopMaxUnroll=8` and `-XX:LoopMaxUnroll=16`?
2. Does it make sense that we have require statements like this: `@requires os.arch=="x86" | os.arch=="i386" | os.arch=="amd64" | os.arch=="x86_64" | os.arch=="aarch64" | os.arch=="riscv64"`? Would it not be better to just require the cpu features at each IR rule? That way, the tests can also run on other platforms, that may or may not implement the reductions, but at least we would check the results for them.
3. TODO continue list

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

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


More information about the hotspot-compiler-dev mailing list