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 17:01:22 PST 2011


Thank you, Tom

Vladimir

Tom Rodriguez wrote:
> 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