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
Fri Aug 14 17:48:39 PDT 2009
CCP does two passes. The first, analyze, is figuring out the type of
a Node and the second, do_transform, is walking over the graph
reachable from root and changing reachable nodes with constant types
into constants. The second part can cause nodes to become
unreachable. So you can end up with unreachable nodes with constant
types and they still might be on the worklist.
tom
On Aug 14, 2009, at 5:18 PM, changpeng fang - Sun Microsystems - Santa
Clara United States wrote:
> On 08/14/09 16:19, Tom Rodriguez wrote:
>> My understanding is that this would only occur for nodes that are
>> dead because of CCP. A dead node can only have dead users so
>> doesn't calling add_users_to worklist on a dead node seem like a
>> bad idea?
> Do you mean we should not see a LIVE singleton (but !n->is_Con())
> there?
> If it is the case, then we should not add the code.
>
> Thanks,
>
> Changpeng
>
>
>>
>> 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