Request for reviews (S): 7017746: Regression : C2 compiler crash due to SIGSEGV in PhaseCFG::schedule_early()
tom.rodriguez at oracle.com
Wed Feb 9 17:02:00 PST 2011
On Feb 9, 2011, at 4:35 PM, Vladimir Kozlov wrote:
> Fixed 7017746: Regression : C2 compiler crash due to SIGSEGV in PhaseCFG::schedule_early()
> ADLC generates incorrect Expand() for mach nodes which
> have duplicated operands and TEMP. The Expand() moves
> TEMP edge before it is added. As result last edge will look
> like prec edge and corresponding Ideal node is not mapped
> to mach node:
> the failed node on the entry to Expand() (_cnt==6):
> 870 cadd_cmpLTMask_1 === _ o1388 o1357 o1388 o1357 o64 []
> after duplicated operands are removed (_cnt==4):
> 870 cadd_cmpLTMask_1 === _ o1388 o1357 o64 |o64 []
> VM dies in schedule_early() when tries to place o64 Ideal node.
> Add TEMP edges (and KILL projections) before duplicated
> operands are removed (the code was simple moved).
> Also we don't need new operand for TEMP since it is
> already constructed during a mach node construction.
> Added asserts to Node::del_req() to catch such situation
> (asserts are copied from set_req() method).
> Remove cadd_cmpLTMask2() since ADLC already generates
> clones of cadd_cmpLTMask() with swapped inputs.
> Added cmpLTMask0 missed on sparc.
> cadd_cmpLTMask originaly was added to optimize code
> in jvm98 compress benchmark. But currently it is not
> matching since transformation
> (Bool [lt] CmpI (SubI(a, b), #0)) --> (Bool [lt] CmpI (a, b))
> was removed long ago as incorrect in case of integer
> overflow in SubI. Adding cmpLTMask0 helps to reduce
> the code size.
> Addred regression test. Tested with CTW and JPRT.
More information about the hotspot-compiler-dev