Integrated: 8271600: C2: CheckCastPP which should closely follow Allocate is sunk of a loop
Vladimir Ivanov
vlivanov at openjdk.java.net
Mon Aug 23 20:27:31 UTC 2021
On Fri, 20 Aug 2021 12:02:25 GMT, Vladimir Ivanov <vlivanov at openjdk.org> wrote:
> `PhaseIdealLoop::try_sink_out_of_loop()` tries to move nodes outside a loop. It doesn't work well for cast nodes which accompany `Allocate` nodes: the cast reifies the effect instance initialization and turns a raw pointer into an oop. Once the cast node doesn't immediately follow the corresponding `Initialize`, it creates a window where the raw pointer is observed. And it can become so wide that the raw pointer crosses a safepoint and has to be recorded in the oop map (that's the case when the reported assertion failure happens).
>
> Proposed fix is to keep such cast nodes intact. Moreover, I propose to disable the optimization for all flavors of cast nodes.
> Cast nodes usually accompany runtime checks and I don't see much benefit in moving the cast node away while leaving the runtime check inside the loop.
>
> Testing: hs-tier1 - hs-tier6
This pull request has now been integrated.
Changeset: 2ff4c01d
Author: Vladimir Ivanov <vlivanov at openjdk.org>
URL: https://git.openjdk.java.net/jdk/commit/2ff4c01d42f1afcc53abd48e074356fb4a700754
Stats: 4 lines in 1 file changed: 4 ins; 0 del; 0 mod
8271600: C2: CheckCastPP which should closely follow Allocate is sunk of a loop
Reviewed-by: chagedorn, roland
-------------
PR: https://git.openjdk.java.net/jdk/pull/5199
More information about the hotspot-compiler-dev
mailing list