Integrated: 8277417: C1 LIR instruction for load-klass

Roman Kennke rkennke at openjdk.java.net
Fri Nov 26 09:49:15 UTC 2021


On Thu, 18 Nov 2021 20:16:27 GMT, Roman Kennke <rkennke at openjdk.org> wrote:

> 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)
>  - [x] tier2 (x86_64)
>  - [x] tier3 (x86_64)

This pull request has now been integrated.

Changeset: 99e4bda3
Author:    Roman Kennke <rkennke at openjdk.org>
URL:       https://git.openjdk.java.net/jdk/commit/99e4bda303f2c71972a125d0ecaf4cf986c8614a
Stats:     189 lines in 11 files changed: 140 ins; 37 del; 12 mod

8277417: C1 LIR instruction for load-klass

Reviewed-by: iveresov, mdoerr, ngasson, aph

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

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


More information about the hotspot-dev mailing list