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