JDK 25 |
---|
25 b19Fixed |
Causes :
|
|
Causes :
|
|
Relates :
|
|
Relates :
|
# Failure analysis After the changes for JDK-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)
|