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