RFR(S): 8209639: assert failure in coalesce.cpp: attempted to spill a non-spillable item
Roland Westrelin
rwestrel at redhat.com
Fri Aug 17 15:26:02 UTC 2018
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