RFR: 8317121: vector_masked_load instruction is moved too early after JDK-8286941
David Schlosnagle
duke at openjdk.org
Tue Oct 3 05:41:21 UTC 2023
On Mon, 2 Oct 2023 19:17:40 GMT, Vladimir Kozlov <kvn at openjdk.org> wrote:
> [JDK-8286941](https://bugs.openjdk.org/browse/JDK-8286941) changed how masked vector operations are created and processed. It calls `LoadNode::Ideal()` which tries to find best place in code for it.
> Unfortunately some places do not expect to have vector access to modified memory.
> In `LoadNode::find_previous_arraycopy()` the call to `ArrayCopyNode::modifies()` assumes that it access only one element and did not take into account that a vector may access wider memory.
> The same issue exists with Unsafe mismatching (bigger size) access.
>
> The fix is to take into account size of memory access.
>
> New regression test is added which show the issue.
>
> Tested tier1-5. xcomp, stress. Testing tier6-7 in progress.
test/hotspot/jtreg/compiler/vectorization/TestMaskedVectors.java line 31:
> 29: * @modules java.base/jdk.internal.misc
> 30: * @library /test/lib /
> 31: * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -Xbatch -XX:CompileCommand=quiet -XX:CompileCommand=compileonly,TestMaskedVectors::test* -XX:+StressLCM -XX:+StressGCM -XX:StressSeed=2210259638 TestMaskedVectors
Does this need to enable diagnostic VM options the `Stress*` flags?
https://github.com/openjdk/jdk/blob/6e1aacdfba5a32f7b071eea8039888d275827e83/src/hotspot/share/opto/c2_globals.hpp#L44-L60
Suggestion:
* @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -Xbatch -XX:CompileCommand=quiet -XX:CompileCommand=compileonly,TestMaskedVectors::test* -XX:+UnlockDiagnosticVMOptions -XX:+StressLCM -XX:+StressGCM -XX:StressSeed=2210259638 TestMaskedVectors
test/hotspot/jtreg/compiler/vectorization/TestMaskedVectors.java line 31:
> 29: * @modules java.base/jdk.internal.misc
> 30: * @library /test/lib /
> 31: * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockDiagnosticVMOptions -XX:-TieredCompilation -Xbatch -XX:CompileCommand=quiet -XX:CompileCommand=compileonly,TestMaskedVectors::test* -XX:+StressLCM -XX:+StressGCM -XX:StressSeed=2210259638 TestMaskedVectors
Should this also test the different AVX and SVE levels where feasible?
Suggestion:
* @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockDiagnosticVMOptions -XX:-TieredCompilation -Xbatch -XX:CompileCommand=quiet -XX:CompileCommand=compileonly,TestMaskedVectors::test* -XX:+StressLCM -XX:+StressGCM -XX:StressSeed=2210259638 TestMaskedVectors
* @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockDiagnosticVMOptions -XX:UseAVX=3 -XX:-TieredCompilation -Xbatch -XX:CompileCommand=quiet -XX:CompileCommand=compileonly,TestMaskedVectors::test* -XX:+StressLCM -XX:+StressGCM -XX:StressSeed=2210259638 TestMaskedVectors
* @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockDiagnosticVMOptions -XX:UseAVX=2 -XX:UseSVE=2 -XX:-TieredCompilation -Xbatch -XX:CompileCommand=quiet -XX:CompileCommand=compileonly,TestMaskedVectors::test* -XX:+StressLCM -XX:+StressGCM -XX:StressSeed=2210259638 TestMaskedVectors
* @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockDiagnosticVMOptions -XX:UseAVX=1 -XX:UseSVE=1 -XX:-TieredCompilation -Xbatch -XX:CompileCommand=quiet -XX:CompileCommand=compileonly,TestMaskedVectors::test* -XX:+StressLCM -XX:+StressGCM -XX:StressSeed=2210259638 TestMaskedVectors
* @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockDiagnosticVMOptions -XX:UseAVX=0 -XX:UseSVE=0 -XX:-TieredCompilation -Xbatch -XX:CompileCommand=quiet -XX:CompileCommand=compileonly,TestMaskedVectors::test* -XX:+StressLCM -XX:+StressGCM -XX:StressSeed=2210259638 TestMaskedVectors
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/16015#discussion_r1343270042
PR Review Comment: https://git.openjdk.org/jdk/pull/16015#discussion_r1343437965
More information about the hotspot-compiler-dev
mailing list