RFR: 8277417: C1 LIR instruction for load-klass

Roman Kennke rkennke at openjdk.java.net
Fri Nov 19 14:43:59 UTC 2021


In C1, the load of a Klass* out of an object is currently identified by a load of type T_ADDRESS with offset oopDest::klass_offset_in_bytes(). When encountering such load, this may be decoded when +CompressedClassPointers. This is problematic and ugly: if we ever emit a T_ADDRESS load with offset 8 or 4 (== klass_offset_in_bytes) that is not a Klass*, we would attempt to decode the result. We have been lucky so far.

Also, in Lilliput, we want to do something entirely different there, and need to be able to emit more complex code, possibly including runtime call.

The change introduces a new C1 LIR opcode OpLoadKlass, and refactors the implementations in c1_LIRAssembler_xyz.cpp to emit the code there, instead of mem2reg(). Notice that I could not test anything but x86, all other platforms only received very basic testing via GHA. It would be nice if respective maintainers could give it a try.

Testing:
 - [x] tier1 (x86_64)
 - [ ] tier2 (x86_64)
 - [ ] tier3 (x86_64)

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

Commit messages:
 - Add debug info for null checks
 - 8277417: C1 LIR instruction for load-klass

Changes: https://git.openjdk.java.net/jdk/pull/6464/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=6464&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8277417
  Stats: 183 lines in 11 files changed: 134 ins; 37 del; 12 mod
  Patch: https://git.openjdk.java.net/jdk/pull/6464.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/6464/head:pull/6464

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


More information about the hotspot-dev mailing list