United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: JDK-6682236 C2 hits ideal nodes limit during IGVN optimization with EA
JDK-6682236 : C2 hits ideal nodes limit during IGVN optimization with EA

Details
Type:
Bug
Submit Date:
2008-03-31
Status:
Closed
Updated Date:
2011-04-20
Project Name:
JDK
Resolved Date:
2011-04-20
Component:
hotspot
OS:
solaris_10
Sub-Component:
compiler
CPU:
x86
Priority:
P4
Resolution:
Fixed
Affected Versions:
hs12
Fixed Versions:
hs12 (b02)

Related Reports
Backport:
Backport:

Sub Tasks

Description
C2 can reach ideal nodes limit during IGVN optimization with Escape Analysis
since new nodes are added in LoadNode::Ideal() and PhiNode::Ideal() methods
without removing old nodes.

# 
# An unexpected error has been detected by Java Runtime Environment: 
# 
#  Internal Error (/net/jaberwocky/export/home2/work/6259129/src/share/vm/opto/node.cpp:60), pid=25960, tid=23 
#  Error: assert(Compile::current()->unique() < (uint)MaxNodeLimit,"Node limit exceeded") 
# 
# Java VM: Java HotSpot(TM) Server VM (12.0-b01-internal-jvmg compiled mode solaris-x86) 
# If you would like to submit a bug report, please visit: 
#   http://java.sun.com/webapps/bugreport/crash.jsp 
# The crash happened outside the Java Virtual Machine in native code. 
# See problematic frame for where to report the bug. 
# 
 
---------------  T H R E A D  --------------- 
 
Current thread (0x0827d800):  JavaThread "CompilerThread1" daemon [_thread_in_native, id=23, stack(0xb5a65000,0xb5aa5000)] 
 
Stack: [0xb5a65000,0xb5aa5000],  sp=0xb5aa2130,  free space=244k 
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) 
V  [libjvm.so+0x9bb124] void VMError::report(outputStream*) + 0xa64
V  [libjvm.so+0x9bc16b] void VMError::report_and_die() + 0x62b
V  [libjvm.so+0x4c5899] void report_assertion_failure(const char*,int,const char*) + 0x79
V  [libjvm.so+0x7ec28c] void Node::verify_construction() + 0xfc
V  [libjvm.so+0x7ee36a] Node*Node::clone()const + 0x16a
V  [libjvm.so+0x7aa8dd] Node*LoadNode::Ideal(PhaseGVN*,bool) + 0x56d
V  [libjvm.so+0x8606a9] Node*PhaseIterGVN::transform_old(Node*) + 0x299
V  [libjvm.so+0x85fea1] void PhaseIterGVN::optimize() + 0x171
V  [libjvm.so+0x473d11] void Compile::Optimize() + 0x101
V  [libjvm.so+0x4703da] Compile::Compile(ciEnv*,C2Compiler*,ciMethod*,int,bool,bool) + 0xd6a
V  [libjvm.so+0x3ac1bf] void C2Compiler::compile_method(ciEnv*,ciMethod*,int) + 0xaf

                                    

Comments
EVALUATION

I thought I could relay on LoadNode::Identity() call during
IGVN optimization to avoid infinite generation of value Phi
for an instance field load. But in the failed case it does
not happen since the new Load node (from spit through phi)
is replaced with a new value Phi again during next invocation
of LoadNode::Ideal().
                                     
2008-04-01



Hardware and Software, Engineered to Work Together