Request for reviews (M): 7128355: assert(!nocreate) failed: Cannot build a phi for a block already parsed

Tom Rodriguez tom.rodriguez at oracle.com
Tue Jan 10 16:08:54 PST 2012


On Jan 10, 2012, at 3:36 PM, Vladimir Kozlov wrote:

> http://cr.openjdk.java.net/~kvn/7128355/webrev
> 
> 7128355: assert(!nocreate) failed: Cannot build a phi for a block already parsed
> 
> Regression after 7125896 changes. Merge Phi was not created for BoxLockNode.
> Other problems showed up after fixing this:
> - EA did not recognize BoxLock phis. EA should ignore them.
> - Matcher and RA does not expect box phis in debug info. Next assert was hit:
>    assert((op == Op_BoxLock) == jvms->is_monitor_use(i), "boxes only at monitor sites");
> - Lock elimination code may miss some safepoints (because they separated by additional phi nodes) when replacing old box (which could be Phi) with new "eliminated" Box. As result debug info could be incorrect.
> 
> Do commoning of merged Box nodes (which has Phi uses) before locks elimination to resolve these problems.

Doesn't that break nested lock elimination?  Two unrelated boxes that happened to participate in different Phis could end up commoned together wouldn't they?  Don't you want to perform explicit Phi simplification instead, replacing the Phi and all other boxes with one of the boxes feeding the Phi?

tom

> 
> Tested with full CTW and compiler regression tests.
> 
> Thanks,
> Vladimir



More information about the hotspot-compiler-dev mailing list