RFR: 8275201: C2: hide klass() accessor from TypeOopPtr and typeKlassPtr subclasses
Roland Westrelin
roland at openjdk.java.net
Mon Dec 6 11:55:34 UTC 2021
Outside the type system code itself, c2 usually assumes that a
TypeOopPtr or a TypeKlassPtr's java type is fully represented by its
klass(). To have proper support for interfaces, that can't be true as
a type needs to be represented by an instance class and a set of
interfaces. This patch hides the klass() accessor of
TypeOopPtr/TypeKlassPtr and reworks c2 code that relies on it in a way
that makes that code suitable for proper interface support in a
subsequent change. This patch doesn't add proper interface support yet
and is mostly refactoring. "Mostly" because there are cases where the
previous logic would use a ciKlass but the new one works with a
TypeKlassPtr/TypeInstPtr which carries the ciKlass and whether the
klass is exact or not. That extra bit of information can sometimes
help and so could result in slightly different decisions.
To remove the klass() accessors, the new logic either relies on:
- new methods of TypeKlassPtr/TypeInstPtr. For instance, instead of:
toop->klass()->is_subtype_of(other_toop->klass())
the new code is:
toop->is_java_subtype_of(other_toop)
- variants of the klass() accessors for narrower cases like
TypeInstPtr::instance_klass() (returns _klass except if _klass is an
interface in which case it returns Object),
TypeOopPtr::unloaded_klass() (returns _klass but only when the klass
is unloaed), TypeOopPtr::exact_klass() (returns _klass but only when
the type is exact).
When I tested this patch, for most changes in this patch, I had the
previous logic, the new logic and a check that verified that they
return the same result. I ran as much testing as I could that way.
-------------
Commit messages:
- whitespaces
- remove klass accessor
Changes: https://git.openjdk.java.net/jdk/pull/6717/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=6717&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8275201
Stats: 1216 lines in 33 files changed: 556 ins; 175 del; 485 mod
Patch: https://git.openjdk.java.net/jdk/pull/6717.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/6717/head:pull/6717
PR: https://git.openjdk.java.net/jdk/pull/6717
More information about the hotspot-compiler-dev
mailing list