-
Bug
-
Resolution: Fixed
-
P4
-
17, 20
-
b27
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8298861 | 17.0.7-oracle | Tobias Hartmann | P4 | Resolved | Fixed | b01 |
JDK-8300219 | 17.0.7 | Goetz Lindenmaier | P4 | Resolved | Fixed | b01 |
When I last debugged the test, it seemed to create an infinite irreducible loop, that did not have a NeverBranch node inserted. That was also against my assumption at the time. But I was able to work around that. Now it seems to be triggered in maiinline already.
Reproduce it:
java -jar ~/Documents/asmtools-7.0-build/release/lib/asmtools.jar jasm TestIrreducibleInfiniteNoNeverBranch.jasm
java -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:CompileCommand=compileonly,TestIrreducibleInfiniteNoNeverBranch::test* -XX:-TieredCompilation -XX:-RenumberLiveNodes -Xbatch -Xcomp -XX:PerMethodTrapLimit=0 -XX:+TraceLoopOpts TestIrreducibleInfiniteNoNeverBranch
I vaguely remember that -XX:PerMethodTrapLimit=0 was required to create this graph.
# To suppress the following error report, specify this argument
# after -XX: or in .hotspotrc: SuppressErrorAt=/loopnode.cpp:4300
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (/home/emanuel/Documents/fork2-jdk/open/src/hotspot/share/opto/loopnode.cpp:4300), pid=1154129, tid=1154142
# assert(_ltree_root->_child == __null || C->has_loops() || only_has_infinite_loops() || C->has_exception_backedge()) failed: parsing found no loops but there are some
#
# JRE version: Java(TM) SE Runtime Environment (20.0) (slowdebug build 20-internal-2022-11-25-1142101.emanuel...)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (slowdebug 20-internal-2022-11-25-1142101.emanuel..., compiled mode, compressed oops, compressed class ptrs, g1 gc, linux-amd64)
# Problematic frame:
# V [libjvm.so+0xf685e3] PhaseIdealLoop::build_and_optimize()+0x353
#
# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /home/emanuel/Documents/debug-tools/bytecode-fuzzer/core.1154129)
#
# An error report file with more information is saved as:
# /home/emanuel/Documents/debug-tools/bytecode-fuzzer/hs_err_pid1154129.log
#
# Compiler replay data is saved as:
# /home/emanuel/Documents/debug-tools/bytecode-fuzzer/replay_pid1154129.log
#
# If you would like to submit a bug report, please visit:
# https://bugreport.java.com/bugreport/crash.jsp
#
Current CompileTask:
C2:36803 100 % b 4 Test::test @ 2 (27 bytes)
Stack: [0x00007f4fc436f000,0x00007f4fc4470000], sp=0x00007f4fc446ad80, free space=1007k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x12a2718] PhaseIdealLoop::place_outside_loop(Node*, IdealLoopTree*) const+0x348 (loopopts.cpp:1266)
V [libjvm.so+0x12a5bd6] PhaseIdealLoop::try_sink_out_of_loop(Node*)+0x376 (loopopts.cpp:1753)
V [libjvm.so+0x12a6603] PhaseIdealLoop::split_if_with_blocks_post(Node*)+0x83 (loopopts.cpp:1531)
V [libjvm.so+0x12a6ec6] PhaseIdealLoop::split_if_with_blocks(VectorSet&, Node_Stack&)+0x96 (loopopts.cpp:1964)
V [libjvm.so+0x1299519] PhaseIdealLoop::build_and_optimize()+0xee9 (loopnode.cpp:4815)
V [libjvm.so+0x9e4770] PhaseIdealLoop::optimize(PhaseIterGVN&, LoopOptsMode)+0x390 (loopnode.hpp:1117)
V [libjvm.so+0x9df283] Compile::Optimize()+0x4c3 (compile.cpp:2366)
V [libjvm.so+0x9e3326] Compile::Compile(ciEnv*, ciMethod*, int, Options, DirectiveSet*)+0x1b06 (compile.cpp:852)
V [libjvm.so+0x835575] C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)+0x1d5 (c2compiler.cpp:142)
V [libjvm.so+0x9eef68] CompileBroker::invoke_compiler_on_method(CompileTask*)+0x928 (compileBroker.cpp:2303)
V [libjvm.so+0x9efbf8] CompileBroker::compiler_thread_loop()+0x478 (compileBroker.cpp:1961)
V [libjvm.so+0xe994dc] JavaThread::thread_main_inner()+0xcc (javaThread.cpp:757)
V [libjvm.so+0x17b9076] Thread::call_run()+0xb6 (thread.cpp:225)
V [libjvm.so+0x14a1717] thread_native_entry(Thread*)+0x127 (os_linux.cpp:858)
- backported by
-
JDK-8298861 PhaseIdealLoop::only_has_infinite_loops must detect all loops that never lead to termination
-
- Resolved
-
-
JDK-8300219 PhaseIdealLoop::only_has_infinite_loops must detect all loops that never lead to termination
-
- Resolved
-
- relates to
-
JDK-8294217 Assertion failure: parsing found no loops but there are some
-
- Resolved
-
-
JDK-8280126 C2: detect and remove dead irreducible loops
-
- Resolved
-
-
JDK-8296318 use-def assert: special case undetected loops nested in infinite loops
-
- Resolved
-
-
JDK-8299214 Bytecode Fuzzer for irreducible/infinite loops and more
-
- Open
-
- links to
-
Commit openjdk/jdk17u-dev/1d6db443
-
Commit openjdk/jdk/d562d3fc
-
Review openjdk/jdk17u-dev/1058
-
Review openjdk/jdk/11473