RFR: 8340010: Fix vectorization tests with compact headers
Emanuel Peter
epeter at openjdk.org
Thu Nov 21 07:41:46 UTC 2024
This is a followup to:
https://github.com/openjdk/jdk/pull/20677 / [JDK-8305895](https://bugs.openjdk.org/browse/JDK-8305895) Implement JEP 450: Compact Object Headers (Experimental)
@rkennke fixed the vectorization tests in a very rudamentary way. I now took some time to see what exactly is affected. At the time I reviewed the JEP, I thought only very minor cases were affected, like hand-unrolling etc. But it turns out that there are some more important cases that are affected, like **mixed-type loops**, such as **conversion** between types. Another class of affected loops is **hand-unrolled loops**.
**The problem is this:**
Since the offset from array-base to payload has changed (16 -> 12), some vector loads/stores can now no longer be aligned. This means vectorization under `+AlignVector` is not possible.
--------------------------------
First: only platforms that require strict-alignment are affected (i.e. `+AlignVector` or `Matcher::misaligned_vectors_ok=false`). I filed [JDK-8344424](https://bugs.openjdk.org/browse/JDK-8344424) for this, so the impact can be discussed. **The affected platforms seem to be exceptions**.
-------------------
Now on to fixing the tests, which we need to do now anyway. Some actually were currently failing.
I once ran over `tier1,tier2,tier3,tier4` plus our internal stress testing with `+-AlignVector` and `+-UseCompactObjectHeaders`, collected all failing tests. I also looked at all tests that were already guarding IR rules on `UseCompactObjectHeaders`.
To almost all tests I added runs with `+-AlignVector` and `+-UseCompactObjectHeaders`. We could leave this also to global runs with these flag combinations. But it is rare that we ever run this, so I thought I want to directly run the "interesting" tests with all combinations. This requires extra test runtime, but I think it is warranted.
In a few cases I also added stronger IR rules, in tests that were already affected - just to make sure we have the behavior we want. Some cases would not vectorize for other cases, and I put comments there for future reference.
-------------
Commit messages:
- fix LoopCombinedOpTest.java
- same case again
- fixup for Christian
- manual merge
- fix sizes for LoopCombinedOpTest.java
- fix IRExample.java
- fix TestFloatConversionsVector.java
- fix TestUnorderedReductionPartialVectorization.java
- fix TestSplitPacks.java
- fix 2 more tests
- ... and 17 more: https://git.openjdk.org/jdk/compare/75420e93...b56c88cb
Changes: https://git.openjdk.org/jdk/pull/22199/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=22199&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8340010
Stats: 922 lines in 15 files changed: 782 ins; 23 del; 117 mod
Patch: https://git.openjdk.org/jdk/pull/22199.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/22199/head:pull/22199
PR: https://git.openjdk.org/jdk/pull/22199
More information about the hotspot-compiler-dev
mailing list