RFR(S): 8237007: Shenandoah: assert(_base == Tuple) failure during C2 compilation
Tobias Hartmann
tobias.hartmann at oracle.com
Tue Jan 14 16:13:52 UTC 2020
Hi Roland,
as we've discussed off-thread, considering the CMove as unpinned seems reasonable because it does
not have any (side-)effects that would not be explicit in the graph.
Still wondering why the CMove then has a control input in the first place but your change looks good
to me. I'll run some testing.
Best regards,
Tobias
On 13.01.20 11:20, Roland Westrelin wrote:
>
> http://cr.openjdk.java.net/~roland/8237007/webrev.00/
>
> The assert fails because C2 expands a barrier between a membar and its
> control projection. That happens because the gc barrier is assigned the
> membar as control by loop optimizations (and not its control
> projection). The gc barrier has a load as input which itself depends on
> the memory state produced by the membar so the barrier has to be below
> the membar. The gc barrier has a CMove as use. That CMove has a control
> input that's above the membar and because it's considered pinned by loop
> opts, it's assigned earliest possible control: the membar. Considering
> the CMove as pinned is overly conservative AFAICT. My fix consists in
> excluding CMove nodes from being pinned.
>
> Roland.
>
More information about the hotspot-compiler-dev
mailing list