RFR: 8256056: Deoptimization stub doesn't save vector registers on x86

Vladimir Ivanov vlivanov at openjdk.java.net
Mon Nov 9 19:17:02 UTC 2020


Deoptimization stub doesn't save vector registers on x86 and it may break vector rematerialization when a vector value (produced through Vector API) ends up in a register (and not spilled on stack).

The fix unconditionally saves all wide vector registers when going through deopt stub. If there are any performance concerns with that, it's possible to introduce a dedicated variant and choose between 2 versions when patching nmethods (like what happens with safepoint stubs). But deoptimization is already quite expensive to save much on that, so I decided to keep things as is.   

As a cleanup, I made `save_vectors` parameter explicit to make the intentions clearer.

Testing (with some other relevant patches):
- [x] jdk/incubator/vector w/ -XX:+DeoptimizeALot and -XX:UseAVX=3 on AVX512-capable hardware
- [x] hs-precheckin-comp, hs-tier1, hs-tier2

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

Commit messages:
 - Save save vector registers in deopt stub.

Changes: https://git.openjdk.java.net/jdk/pull/1134/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=1134&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8256056
  Stats: 16 lines in 1 file changed: 5 ins; 1 del; 10 mod
  Patch: https://git.openjdk.java.net/jdk/pull/1134.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/1134/head:pull/1134

PR: https://git.openjdk.java.net/jdk/pull/1134


More information about the hotspot-compiler-dev mailing list