RFR: 8268553: [lworld] CI must return secondary mirror when accessing CONSTANT_Class with Q-signature
Tobias Hartmann
thartmann at openjdk.java.net
Fri Jul 9 08:54:17 UTC 2021
On Thu, 10 Jun 2021 13:01:41 GMT, Frederic Parain <fparain at openjdk.org> wrote:
> Please review this small change in CI to return the secondary mirror when accessing a CONSTANT_Class_info entry containing a Q-signature.
> This change fixes all compiler tests failures in the lqagain branch but the ones depending on intrinsics (Class::getSuperclass intrinsic and Class::isAssignableFrom intrinsics need to be fixed in a separate changeset).
>
> Thank you,
>
> Fred
src/hotspot/share/ci/ciEnv.cpp line 700:
> 698: assert (klass->is_instance_klass() || klass->is_array_klass(),
> 699: "must be an instance or array klass ");
> 700: if (tag.is_unresolved_klass()) {
This is too strict because `klass->is_loaded()` can be true even if `tag.is_unresolved_klass()`. This leads to C2 adding uncommon traps to trigger resolution in the interpreter. However, I've observed cases were the interpreter never resolved the constant and `tag.is_unresolved_klass()` remained true, leading to continuous deoptimizations in C2 compiled code. I'm not sure if that is expected behavior or if there is a bug in the interpreter but the CI code should be fixed in any case. I'll do that with [JDK-8267932](https://bugs.openjdk.java.net/browse/JDK-8267932).
-------------
PR: https://git.openjdk.java.net/valhalla/pull/442
More information about the valhalla-dev
mailing list