-
Bug
-
Resolution: Unresolved
-
P4
-
25
# Failure analysis
After the changes forJDK-8333393, we apply a Phi idealization, involving splitting Phis through MergeMems, a lot more frequently. This idealization internally applies further idealizations for new Phi nodes generated during the idealization. In certain cases, these internal idealizations result in a large increase of live nodes within a single iteration of the main IGVN loop in PhaseIterGVN::optimize. In particular, when we are close to the MaxNodeLimit (80 000 by default), it can happen that we go from below MaxNodeLimit - NodeLimitFudgeFactor * 2 (= 76 000 by default) to more than 80 000 nodes in a single iteration. In such cases, the node count bailout at the top of the PhaseIterGVN::optimize loop does not trigger as expected and we instead crash at an assert in node creation as we surpass MaxNodeLimit nodes.
# Original description
Since 11th March 2025 we saw a number of the assertions on x86_64 and aarch64, they were triggered by jtreg test javax/xml/crypto/dsig/GenerationTests.java :
#
# Internal Error (/priv/jenkins/client-home/workspace/openjdk-jdk-dev-linux_x86_64-dbg/jdk/src/hotspot/share/opto/node.cpp:78), pid=70273, tid=70300
# assert(C->live_nodes() <= C->max_node_limit()) failed: Live Node limit exceeded limit
#
V [libjvm.so+0x157d75b] Node::verify_construction()+0x12b (node.cpp:78)
V [libjvm.so+0x158caa7] Node::clone() const+0x277 (node.cpp:520)
V [libjvm.so+0x91a191] PhiNode::split_out_instance(TypePtr const*, PhaseIterGVN*) const+0xda1 (cfgnode.cpp:1092)
V [libjvm.so+0x924e0b] PhiNode::Ideal(PhaseGVN*, bool)+0x279b (cfgnode.cpp:2592)
V [libjvm.so+0x1682e5d] PhaseIterGVN::transform_old(Node*)+0xbd (phaseX.cpp:668)
V [libjvm.so+0x926398] PhiNode::Ideal(PhaseGVN*, bool)+0x3d28 (cfgnode.cpp:2579)
V [libjvm.so+0x1682e5d] PhaseIterGVN::transform_old(Node*)+0xbd (phaseX.cpp:668)
V [libjvm.so+0x926398] PhiNode::Ideal(PhaseGVN*, bool)+0x3d28 (cfgnode.cpp:2579)
V [libjvm.so+0x1682e5d] PhaseIterGVN::transform_old(Node*)+0xbd (phaseX.cpp:668)
V [libjvm.so+0x1678834] PhaseIterGVN::optimize()+0x94 (phaseX.cpp:1046)
V [libjvm.so+0xa81132] Compile::Optimize()+0xad2 (compile.cpp:2335)
V [libjvm.so+0xa8430f] Compile::Compile(ciEnv*, ciMethod*, int, Options, DirectiveSet*)+0x1dff (compile.cpp:852)
V [libjvm.so+0x8c3e40] C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)+0x430 (c2compiler.cpp:141)
V [libjvm.so+0xa91e4c] CompileBroker::invoke_compiler_on_method(CompileTask*)+0xbfc (compileBroker.cpp:2331)
V [libjvm.so+0xa92d88] CompileBroker::compiler_thread_loop()+0x598 (compileBroker.cpp:1975)
V [libjvm.so+0xf7ecef] JavaThread::thread_main_inner()+0x12f (javaThread.cpp:776)
V [libjvm.so+0x19473b6] Thread::call_run()+0xb6 (thread.cpp:231)
V [libjvm.so+0x15f95b8] thread_native_entry(Thread*)+0x128 (os_linux.cpp:877)
After the changes for
# Original description
Since 11th March 2025 we saw a number of the assertions on x86_64 and aarch64, they were triggered by jtreg test javax/xml/crypto/dsig/GenerationTests.java :
#
# Internal Error (/priv/jenkins/client-home/workspace/openjdk-jdk-dev-linux_x86_64-dbg/jdk/src/hotspot/share/opto/node.cpp:78), pid=70273, tid=70300
# assert(C->live_nodes() <= C->max_node_limit()) failed: Live Node limit exceeded limit
#
V [libjvm.so+0x157d75b] Node::verify_construction()+0x12b (node.cpp:78)
V [libjvm.so+0x158caa7] Node::clone() const+0x277 (node.cpp:520)
V [libjvm.so+0x91a191] PhiNode::split_out_instance(TypePtr const*, PhaseIterGVN*) const+0xda1 (cfgnode.cpp:1092)
V [libjvm.so+0x924e0b] PhiNode::Ideal(PhaseGVN*, bool)+0x279b (cfgnode.cpp:2592)
V [libjvm.so+0x1682e5d] PhaseIterGVN::transform_old(Node*)+0xbd (phaseX.cpp:668)
V [libjvm.so+0x926398] PhiNode::Ideal(PhaseGVN*, bool)+0x3d28 (cfgnode.cpp:2579)
V [libjvm.so+0x1682e5d] PhaseIterGVN::transform_old(Node*)+0xbd (phaseX.cpp:668)
V [libjvm.so+0x926398] PhiNode::Ideal(PhaseGVN*, bool)+0x3d28 (cfgnode.cpp:2579)
V [libjvm.so+0x1682e5d] PhaseIterGVN::transform_old(Node*)+0xbd (phaseX.cpp:668)
V [libjvm.so+0x1678834] PhaseIterGVN::optimize()+0x94 (phaseX.cpp:1046)
V [libjvm.so+0xa81132] Compile::Optimize()+0xad2 (compile.cpp:2335)
V [libjvm.so+0xa8430f] Compile::Compile(ciEnv*, ciMethod*, int, Options, DirectiveSet*)+0x1dff (compile.cpp:852)
V [libjvm.so+0x8c3e40] C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)+0x430 (c2compiler.cpp:141)
V [libjvm.so+0xa91e4c] CompileBroker::invoke_compiler_on_method(CompileTask*)+0xbfc (compileBroker.cpp:2331)
V [libjvm.so+0xa92d88] CompileBroker::compiler_thread_loop()+0x598 (compileBroker.cpp:1975)
V [libjvm.so+0xf7ecef] JavaThread::thread_main_inner()+0x12f (javaThread.cpp:776)
V [libjvm.so+0x19473b6] Thread::call_run()+0xb6 (thread.cpp:231)
V [libjvm.so+0x15f95b8] thread_native_entry(Thread*)+0x128 (os_linux.cpp:877)
- caused by
-
JDK-8333393 PhaseCFG::insert_anti_dependences can fail to raise LCAs and to add necessary anti-dependence edges
-
- Resolved
-