Request for reviews (S): 7017746: Regression : C2 compiler crash due to SIGSEGV in PhaseCFG::schedule_early()

Tom Rodriguez tom.rodriguez at oracle.com
Wed Feb 9 17:02:00 PST 2011


Looks good.

tom

On Feb 9, 2011, at 4:35 PM, Vladimir Kozlov wrote:

> 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