-
Bug
-
Resolution: Fixed
-
P3
-
26
-
master
-
x86_64
I have seen 3 manifestations of this bug:
1.
# Internal Error (.../src/hotspot/cpu/x86/x86.ad:7640), pid=84140, tid=28419
# assert(UseAVX > 2 && VM_Version::supports_avx512dq()) failed: required
2.
# Internal Error (.../src/hotspot/share/opto/vectornode.cpp:1601), pid=4022154, tid=4022168
# Error: assert(bt == T_FLOAT) failed
3. Wrong result
When the feature was available but we used the wrong CastVector
It seems thatJDK-8346236 introduced reinterpret nodes to SuperWord:
} else if (VectorNode::is_reinterpret_opcode(opc)) {
assert(first->req() == 2 && req() == 2, "only one input expected");
const TypeVect* vt = TypeVect::make(bt, vlen);
vn = new VectorReinterpretNode(in1, vt, in1->bottom_type()->is_vect());
Sandly, the src and dst type are swapped. For JDK25JDK-8346236 this had no bad effect yet, since we only cast between HF and short, which are both based on short.
But withJDK-8329077 we can now do reinterpret between I/F and between D/L. Here swapping has an effect, especially if it is followed by a cast:
The cast deterines its input type from the output type of the input node. If that was a reinterpret node with the wrong output type, we would get a cast with the wrong src type. We might do a double -> int cast instead of a long -> int cast. That leads to all sorts of issues.
The fuzzer test was only just recently added withJDK-8324751. It uses MemorySegment, where unaligned float/double access gets handled with long/int memory access and then reinterpret (eg MoveI2F). But I was able to find examples that just work with Float.intBitsToFloat etc.
-------------------------- ORIGINAL REPORT ----------------------------
Test: compiler/loopopts/superword/TestAliasingFuzzer.java#vanilla
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (/System/Volumes/Data/mesos/work_dir/slaves/f7f8bd65-a387-4a2b-b519-702f2fefaf87-S168313/frameworks/1735e8a2-a1db-478c-8104-60c8b0af87dd-0196/executors/2e223971-59eb-4ff2-b885-5f2f25e941b2/runs/a784d7c0-ede9-4ff5-af8c-35fe679d2c2b/workspace/open/src/hotspot/cpu/x86/x86.ad:7640), pid=84140, tid=28419
# assert(UseAVX > 2 && VM_Version::supports_avx512dq()) failed: required
#
# JRE version: Java(TM) SE Runtime Environment (26.0+14) (fastdebug build 26-ea+14-1424)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (fastdebug 26-ea+14-1424, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, bsd-amd64)
# Core dump will be written. Default location: core.84140
#
# If you would like to submit a bug report, please visit:
# https://bugreport.java.com/bugreport/crash.jsp
#
--------------- S U M M A R Y ------------
Command Line: -Djava.library.path=/System/Volumes/Data/mesos/work_dir/jib-master/install/jdk-26+14-1424/macosx-x64-debug.test/hotspot/jtreg/native -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:MaxRAMPercentage=4.16667 -Dtest.boot.jdk=/System/Volumes/Data/mesos/work_dir/jib-master/install/jdk/24/36/bundles/macos-x64/jdk-24_macos-x64_bin.tar.gz/jdk-24.jdk/Contents/Home -Djava.io.tmpdir=/System/Volumes/Data/mesos/work_dir/slaves/f7f8bd65-a387-4a2b-b519-702f2fefaf87-S168299/frameworks/1735e8a2-a1db-478c-8104-60c8b0af87dd-0196/executors/ffeecce3-f54d-43db-867b-fee88f68d77e/runs/699d015b-1320-4cf5-8184-c78c7476666f/testoutput/test-support/jtreg_open_test_hotspot_jtreg_tier1_compiler_3/tmp -Dir.framework.server.port=58166 -XX:+PrintCompilation -XX:+UnlockDiagnosticVMOptions -XX:+LogCompilation -XX:CompilerDirectivesFile=test-vm-compile-commands-pid-84137.log -XX:CompilerDirectivesLimit=101 -XX:-OmitStackTraceInFastThrow -DShouldDoIRVerification=true -XX:-BackgroundCompilation -XX:CompileCommand=quiet compiler.lib.ir_framework.test.TestVM compiler.loopopts.superword.templated.AliasingFuzzer
Host: "Macmini8,1" x86_64 3200 MHz, 12 cores, 32G, Darwin 22.6.0, macOS 13.6.3 (22G436)
Time: Wed Sep 3 20:06:14 2025 GMT elapsed time: 26.874742 seconds (0d 0h 0m 26s)
--------------- T H R E A D ---------------
Current thread (0x00007fafa481b210): JavaThread "C2 CompilerThread0" daemon [_thread_in_native, id=28419, stack(0x000070000ee3e000,0x000070000ef3e000) (1024K)]
Current CompileTask:
C2:26874 1248 b 4 compiler.loopopts.superword.templated.AliasingFuzzer::test_989 (133 bytes)
Stack: [0x000070000ee3e000,0x000070000ef3e000], sp=0x000070000ef3a870, free space=1010k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.dylib+0x1423474] VMError::report(outputStream*, bool)+0x1f14 (x86.ad:7640)
V [libjvm.dylib+0x142742b] VMError::report_and_die(int, char const*, char const*, __va_list_tag*, Thread*, unsigned char*, void const*, void const*, char const*, int, unsigned long)+0x60b
V [libjvm.dylib+0x72d188] report_vm_error(char const*, int, char const*, char const*, ...)+0xd8
V [libjvm.dylib+0xbd038] vcastLtoX_evexNode::emit(C2_MacroAssembler*, PhaseRegAlloc*) const+0x7d8
V [libjvm.dylib+0x10945e3] PhaseOutput::scratch_emit_size(Node const*)+0x2a3
V [libjvm.dylib+0x1086d25] PhaseOutput::shorten_branches(unsigned int*)+0x445
V [libjvm.dylib+0x10863ad] PhaseOutput::Output()+0x7ad
V [libjvm.dylib+0x677e38] Compile::Code_Gen()+0x958
V [libjvm.dylib+0x674b4a] Compile::Compile(ciEnv*, ciMethod*, int, Options, DirectiveSet*)+0x1d1a
V [libjvm.dylib+0x52e5d0] C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)+0x200
V [libjvm.dylib+0x6974b2] CompileBroker::invoke_compiler_on_method(CompileTask*)+0xc42
V [libjvm.dylib+0x696447] CompileBroker::compiler_thread_loop()+0x3f7
V [libjvm.dylib+0xab4c98] JavaThread::thread_main_inner()+0x1b8
V [libjvm.dylib+0x136150c] Thread::call_run()+0xbc
V [libjvm.dylib+0x1075c57] thread_native_entry(Thread*)+0x137
C [libsystem_pthread.dylib+0x61d3] _pthread_start+0x7d
C [libsystem_pthread.dylib+0x1bd3] thread_start+0xf
Lock stack of current Java thread (top to bottom):
1.
# Internal Error (.../src/hotspot/cpu/x86/x86.ad:7640), pid=84140, tid=28419
# assert(UseAVX > 2 && VM_Version::supports_avx512dq()) failed: required
2.
# Internal Error (.../src/hotspot/share/opto/vectornode.cpp:1601), pid=4022154, tid=4022168
# Error: assert(bt == T_FLOAT) failed
3. Wrong result
When the feature was available but we used the wrong CastVector
It seems that
} else if (VectorNode::is_reinterpret_opcode(opc)) {
assert(first->req() == 2 && req() == 2, "only one input expected");
const TypeVect* vt = TypeVect::make(bt, vlen);
vn = new VectorReinterpretNode(in1, vt, in1->bottom_type()->is_vect());
Sandly, the src and dst type are swapped. For JDK25
But with
The cast deterines its input type from the output type of the input node. If that was a reinterpret node with the wrong output type, we would get a cast with the wrong src type. We might do a double -> int cast instead of a long -> int cast. That leads to all sorts of issues.
The fuzzer test was only just recently added with
-------------------------- ORIGINAL REPORT ----------------------------
Test: compiler/loopopts/superword/TestAliasingFuzzer.java#vanilla
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (/System/Volumes/Data/mesos/work_dir/slaves/f7f8bd65-a387-4a2b-b519-702f2fefaf87-S168313/frameworks/1735e8a2-a1db-478c-8104-60c8b0af87dd-0196/executors/2e223971-59eb-4ff2-b885-5f2f25e941b2/runs/a784d7c0-ede9-4ff5-af8c-35fe679d2c2b/workspace/open/src/hotspot/cpu/x86/x86.ad:7640), pid=84140, tid=28419
# assert(UseAVX > 2 && VM_Version::supports_avx512dq()) failed: required
#
# JRE version: Java(TM) SE Runtime Environment (26.0+14) (fastdebug build 26-ea+14-1424)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (fastdebug 26-ea+14-1424, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, bsd-amd64)
# Core dump will be written. Default location: core.84140
#
# If you would like to submit a bug report, please visit:
# https://bugreport.java.com/bugreport/crash.jsp
#
--------------- S U M M A R Y ------------
Command Line: -Djava.library.path=/System/Volumes/Data/mesos/work_dir/jib-master/install/jdk-26+14-1424/macosx-x64-debug.test/hotspot/jtreg/native -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:MaxRAMPercentage=4.16667 -Dtest.boot.jdk=/System/Volumes/Data/mesos/work_dir/jib-master/install/jdk/24/36/bundles/macos-x64/jdk-24_macos-x64_bin.tar.gz/jdk-24.jdk/Contents/Home -Djava.io.tmpdir=/System/Volumes/Data/mesos/work_dir/slaves/f7f8bd65-a387-4a2b-b519-702f2fefaf87-S168299/frameworks/1735e8a2-a1db-478c-8104-60c8b0af87dd-0196/executors/ffeecce3-f54d-43db-867b-fee88f68d77e/runs/699d015b-1320-4cf5-8184-c78c7476666f/testoutput/test-support/jtreg_open_test_hotspot_jtreg_tier1_compiler_3/tmp -Dir.framework.server.port=58166 -XX:+PrintCompilation -XX:+UnlockDiagnosticVMOptions -XX:+LogCompilation -XX:CompilerDirectivesFile=test-vm-compile-commands-pid-84137.log -XX:CompilerDirectivesLimit=101 -XX:-OmitStackTraceInFastThrow -DShouldDoIRVerification=true -XX:-BackgroundCompilation -XX:CompileCommand=quiet compiler.lib.ir_framework.test.TestVM compiler.loopopts.superword.templated.AliasingFuzzer
Host: "Macmini8,1" x86_64 3200 MHz, 12 cores, 32G, Darwin 22.6.0, macOS 13.6.3 (22G436)
Time: Wed Sep 3 20:06:14 2025 GMT elapsed time: 26.874742 seconds (0d 0h 0m 26s)
--------------- T H R E A D ---------------
Current thread (0x00007fafa481b210): JavaThread "C2 CompilerThread0" daemon [_thread_in_native, id=28419, stack(0x000070000ee3e000,0x000070000ef3e000) (1024K)]
Current CompileTask:
C2:26874 1248 b 4 compiler.loopopts.superword.templated.AliasingFuzzer::test_989 (133 bytes)
Stack: [0x000070000ee3e000,0x000070000ef3e000], sp=0x000070000ef3a870, free space=1010k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.dylib+0x1423474] VMError::report(outputStream*, bool)+0x1f14 (x86.ad:7640)
V [libjvm.dylib+0x142742b] VMError::report_and_die(int, char const*, char const*, __va_list_tag*, Thread*, unsigned char*, void const*, void const*, char const*, int, unsigned long)+0x60b
V [libjvm.dylib+0x72d188] report_vm_error(char const*, int, char const*, char const*, ...)+0xd8
V [libjvm.dylib+0xbd038] vcastLtoX_evexNode::emit(C2_MacroAssembler*, PhaseRegAlloc*) const+0x7d8
V [libjvm.dylib+0x10945e3] PhaseOutput::scratch_emit_size(Node const*)+0x2a3
V [libjvm.dylib+0x1086d25] PhaseOutput::shorten_branches(unsigned int*)+0x445
V [libjvm.dylib+0x10863ad] PhaseOutput::Output()+0x7ad
V [libjvm.dylib+0x677e38] Compile::Code_Gen()+0x958
V [libjvm.dylib+0x674b4a] Compile::Compile(ciEnv*, ciMethod*, int, Options, DirectiveSet*)+0x1d1a
V [libjvm.dylib+0x52e5d0] C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)+0x200
V [libjvm.dylib+0x6974b2] CompileBroker::invoke_compiler_on_method(CompileTask*)+0xc42
V [libjvm.dylib+0x696447] CompileBroker::compiler_thread_loop()+0x3f7
V [libjvm.dylib+0xab4c98] JavaThread::thread_main_inner()+0x1b8
V [libjvm.dylib+0x136150c] Thread::call_run()+0xbc
V [libjvm.dylib+0x1075c57] thread_native_entry(Thread*)+0x137
C [libsystem_pthread.dylib+0x61d3] _pthread_start+0x7d
C [libsystem_pthread.dylib+0x1bd3] thread_start+0xf
Lock stack of current Java thread (top to bottom):
- caused by
-
JDK-8329077 C2 SuperWord: Add MoveD2L, MoveL2D, MoveF2I, MoveI2F
-
- Resolved
-
- relates to
-
JDK-8346236 Auto vectorization support for various Float16 operations
-
- Resolved
-
-
JDK-8366965 C2 SuperWord: add more tests for MoveF2I / Float.floatToRawIntBits and friends
-
- Open
-
-
JDK-8324751 C2 SuperWord: Aliasing Analysis runtime check
-
- Resolved
-
-
JDK-8366940 Test compiler/loopopts/superword/TestAliasingFuzzer.java timed out
-
- Open
-
- links to
-
Commit(master) openjdk/jdk/e6fa8aae
-
Review(master) openjdk/jdk/27100
(2 links to)