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