Request for reviews (S): 7017746: Regression : C2 compiler crash due to SIGSEGV in PhaseCFG::schedule_early()
Vladimir Kozlov
vladimir.kozlov at oracle.com
Wed Feb 9 16:35:34 PST 2011
http://cr.openjdk.java.net/~kvn/7017746/webrev
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
mailing list