RFR(S): 8209639: assert failure in coalesce.cpp: attempted to spill a non-spillable item

Vladimir Kozlov vladimir.kozlov at oracle.com
Fri Aug 17 21:34:33 UTC 2018


"Hammer approach" ;)

Did we forgot to mark testN_mem_reg0 as node producing flag? We do restrict some RA optimizations when nodes produce flags.

thanks,
Vladimir

On 8/17/18 8:26 AM, Roland Westrelin wrote:
> 
> http://cr.openjdk.java.net/~roland/8209639/webrev.00/
> 
> There are 2 loads for the same field in the test() method of the test
> case, one in an exception handler, one in the normal code path. The 2
> loads are commoned and the resulting load is between the call and the
> catch node. The only use for the load is a test against null. The test +
> load is matched as a testN_mem_reg0 and is later cloned by
> PhaseCFG::call_catch_cleanup() and the 2 clones are merged by a Phi
> causing a spill of a flag register.
> 
> The straightforward fix I suggest here is to bailout and re-attempt
> compilation with load subsuming disabled.
> 
> The test fails with 8 (with a SIGSEGV) 12 and I suppose 11 as well but I
> haven't tried. I'm fine with fixing this for 12 and backporting the fix
> later.
> 
> Roland.
> 


More information about the hotspot-compiler-dev mailing list