RFR (M): 8039298: assert(base == NULL || t_adr->isa_rawptr() || ...
Christian Thalinger
christian.thalinger at oracle.com
Fri May 2 19:09:47 UTC 2014
On May 1, 2014, at 6:25 PM, Vladimir Kozlov <vladimir.kozlov at oracle.com> wrote:
> On 5/1/14 8:59 PM, Christian Thalinger wrote:
>> *+ use->is_Loop() && !use->is_Root() && // Root is also Loop*
>>
>> Is that correct?
>
> What do you mean?
>
> class RootNode : public LoopNode {
Ah, got it. I was confused by the comment. It actually says that RootNode extends LoopNode. Then it looks good.
>
> And I don't want to kill Root.
>
> Vladimir
>
>>
>> On May 1, 2014, at 7:52 AM, Vladimir Kozlov <vladimir.kozlov at oracle.com <mailto:vladimir.kozlov at oracle.com>> wrote:
>>
>>> http://cr.openjdk.java.net/~kvn/8039298/webrev
>>> https://bugs.openjdk.java.net/browse/JDK-8039298
>>>
>>> This assert was added for 6711117 when we observed "NULL+off" non-raw address type. It was fixed by delaying a memory
>>> node processing if its inputs are on IGVN worklist or address types do not match.
>>>
>>> Recently we start hitting this assert for big graphs when control path become dead but due to the nodes order in IGVN
>>> worklist data nodes on dead path were processed first. As result we get TOP or NULL dead address base for memory nodes.
>>>
>>> I am suggesting 2 ways solution.
>>> First, convert the assert into the runtime check to skip IGVN optimizations for such memory nodes. I ran performance
>>> tests and did not see regression.
>>> Second, eliminate dead nodes more aggressively. The method kill_dead_code() will eliminate dead loops (except
>>> irreducible), dead regions and nodes which have only TOP or NULL inputs. I have to add the code to mark presence of
>>> irreducible loops for that.
>>>
>>> Test ctw, jtreg, jprt.
>>>
>>> Thanks,
>>> Vladimir
>>
More information about the hotspot-compiler-dev
mailing list