Request for reviews (XS): 6866651: Regression: simple int sum crashes jvm (build 1.6.0_14-b08 and 1.7.0-ea-b59)

Tom Rodriguez Thomas.Rodriguez at Sun.COM
Mon Aug 17 10:31:11 PDT 2009


Looks good.

tom

On Aug 17, 2009, at 10:16 AM, Vladimir Kozlov wrote:

> Looks good.
>
> Vladimir
>
> changpeng fang - Sun Microsystems - Santa Clara United States wrote:
>> http://cr.openjdk.java.net/~cfang/6866651/webrev.01/
>> Ok, updated with  the short cut transformation part removed. Also,
>> for the regression test, we just use "@run main Test" to simplify
>> the Test.
>> Thanks,
>> Changpeng
>> On 08/15/09 11:31, Vladimir Kozlov wrote:
>>> OK. You convinced me.
>>>
>>> Vladimir
>>>
>>> Tom Rodriguez wrote:
>>>>
>>>> On Aug 14, 2009, at 5:10 PM, Vladimir Kozlov wrote:
>>>>
>>>>>
>>>>>
>>>>> Tom Rodriguez wrote:
>>>>>> I don't really like this code.  My understanding is that this  
>>>>>> would only occur for nodes that are dead because of CCP.  A  
>>>>>> dead node can only have
>>>>>
>>>>> It is not true. I thought the same before, then I added the  
>>>>> check and hit
>>>>> immediately several cases when the node is alive and its type is  
>>>>> constant:
>>>>
>>>> I saw that those were being handled as well but ignored them for  
>>>> this discussion since they don't seem to motivate this change.   
>>>> They would work just fine without this change.  I don't think  
>>>> short circuiting the transforms of those nodes is worth  
>>>> duplicating the logic.
>>>>
>>>> tom
>>>>
>>>>> - CastII #int:1 after Parse because _gvn.set_type_bottom(ccast) in
>>>>> Parse::adjust_map_after_if().
>>>>> - ConvI2L #long:1 in ConvI2LNode::Ideal() during next transform
>>>>> phase->transform( new (phase->C, 2) ConvI2LNode(y,  
>>>>> TypeLong::make(rylo, ryhi, widen)) )
>>>>> because y = #int:1
>>>>>
>>>>> Vladimir
>>>>>
>>>>>> dead users so doesn't calling add_users_to worklist on a dead  
>>>>>> node seem like a bad idea?  If we want dead nodes from CCP to  
>>>>>> be cleaned up then shouldn't CCP be doing it?
>>>>>> tom
>>>>>> On Aug 14, 2009, at 3:46 PM, Vladimir Kozlov wrote:
>>>>>>> I asked for it to short cut transformations when node's type  
>>>>>>> is known
>>>>>>> const or top. Yes, it is not needed for the bug fix but it could
>>>>>>> reduce time spent in igvn.optimize().
>>>>>>>
>>>>>>> Vladimir
>>>>>>>
>>>>>>> Tom Rodriguez wrote:
>>>>>>>> Why are you including the first part in this fix?  I don't  
>>>>>>>> see the motivation for that change.
>>>>>>>> tom
>>>>>>>> On Aug 14, 2009, at 2:50 PM, changpeng fang - Sun  
>>>>>>>> Microsystems - Santa Clara United States wrote:
>>>>>>>>> http://cr.openjdk.java.net/~cfang/6866651/webrev.00/
>>>>>>>>>
>>>>>>>>> Fixed 6866651: Regression: simple int sum crashes jvm (build  
>>>>>>>>> 1.6.0_14-b08 and 1.7.0-ea-b59)
>>>>>>>>>
>>>>>>>>> Problem:
>>>>>>>>> set_req_X will do dead code elimination if the original  
>>>>>>>>> input has no other use. However, it is possible to
>>>>>>>>> have the current node (this) removed if a dead loop exists.   
>>>>>>>>> So,  dead code elimination in set_req_X is not
>>>>>>>>> safe, and may  cause undesired consequences (like the  
>>>>>>>>> segfault in 6866651)
>>>>>>>>>
>>>>>>>>> Solution:
>>>>>>>>> Instead of doing dead code elimination immediately in  
>>>>>>>>> set_req_X, we put the dead node (original input) into
>>>>>>>>> the worklist, and the dead node will eventually be  
>>>>>>>>> eliminated when it is its turn to be processed.
>>>>>>>>>
>>>>>>>>> In addition,  before ideal transformations, we replace a  
>>>>>>>>> node with a constant if we know it computes a constant
>>>>>>>>> to skip unneeded optimizations on this node. Tests: JPRT,  
>>>>>>>>> CompileTheWorld, Test case in bug report (Test.java in webrev)
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>>
>>>>>>>>> Changpeng
>>>>




More information about the hotspot-compiler-dev mailing list