Request for reviews (S): 7017746: Regression : C2 compiler crash due to SIGSEGV in PhaseCFG::schedule_early()
vladimir.kozlov at oracle.com
Wed Feb 9 17:01:22 PST 2011
Thank you, Tom
Tom Rodriguez wrote:
> Looks good.
> 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