-
Bug
-
Resolution: Fixed
-
P1
-
17
-
b26
-
aarch32
-
linux
ARM32: vector intrinsics reaches ShouldNotReachHere
On 32-bit ARM, the vector intrinsics in C2 reach ShouldNotReachHere:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (arm.ad:1023), pid=623, tid=631
# Error: ShouldNotReachHere()
#
# JRE version: OpenJDK Runtime Environment (17.0+22) (build 17-internal+22-ahead-408--dd34a4c28da73c798e021c7473ac57ead56c9903)
# Java VM: OpenJDK Server VM (17-internal+22-ahead-408--dd34a4c28da73c798e021c7473ac57ead56c9903, mixed mode, serial gc, linux-arm)
# Problematic frame:
# V [libjvm.so+0xc3fb0] Matcher::vector_ideal_reg(int)+0x44
#
# Core dump will be written. Default location: Core dumps may be processed with "/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h" (or dumping to /home/microdoc/cgo/core.623)
#
# An error report file with more information is saved as:
# /home/microdoc/cgo/hs_err_pid623.log
#
# Compiler replay data is saved as:
# /home/microdoc/cgo/replay_pid623.log
#
# If you would like to submit a bug report, please visit:
# https://bugreport.java.com/bugreport/crash.jsp
#
This is due to the fact, that on ARM32, "Matcher::match_rule_supported_vector" does not check for the supported length of vector operations, hence vector operations are created, even if the size is not supported. All other architectures are performing this check.
In a debug VM, this is situation is caught a bit earlier, by an assert in TypeVect::make
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (/home/cgo/dev/openjdk/jdk/src/hotspot/share/opto/type.cpp:2351), pid=506, tid=517
# assert(Matcher::vector_size_supported(elem_bt, length)) failed: length in range
#
# JRE version: OpenJDK Runtime Environment (17.0+22) (slowdebug build 17-internal+22-ahead-408--dd34a4c28da73c798e021c7473ac57ead56c9903)
# Java VM: OpenJDK Server VM (slowdebug 17-internal+22-ahead-408--dd34a4c28da73c798e021c7473ac57ead56c9903, mixed mode, serial gc, linux-arm)
# Problematic frame:
# V [libjvm.so+0xf2c274] TypeVect::make(Type const*, unsigned int)+0xb0
#
# Core dump will be written. Default location: Core dumps may be processed with "/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h" (or dumping to /home/microdoc/cgo/core.506)
#
# If you would like to submit a bug report, please visit:
# https://bugreport.java.com/bugreport/crash.jsp
#
This happens for many jdk_vector jtreg test cases.
On 32-bit ARM, the vector intrinsics in C2 reach ShouldNotReachHere:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (arm.ad:1023), pid=623, tid=631
# Error: ShouldNotReachHere()
#
# JRE version: OpenJDK Runtime Environment (17.0+22) (build 17-internal+22-ahead-408--dd34a4c28da73c798e021c7473ac57ead56c9903)
# Java VM: OpenJDK Server VM (17-internal+22-ahead-408--dd34a4c28da73c798e021c7473ac57ead56c9903, mixed mode, serial gc, linux-arm)
# Problematic frame:
# V [libjvm.so+0xc3fb0] Matcher::vector_ideal_reg(int)+0x44
#
# Core dump will be written. Default location: Core dumps may be processed with "/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h" (or dumping to /home/microdoc/cgo/core.623)
#
# An error report file with more information is saved as:
# /home/microdoc/cgo/hs_err_pid623.log
#
# Compiler replay data is saved as:
# /home/microdoc/cgo/replay_pid623.log
#
# If you would like to submit a bug report, please visit:
# https://bugreport.java.com/bugreport/crash.jsp
#
This is due to the fact, that on ARM32, "Matcher::match_rule_supported_vector" does not check for the supported length of vector operations, hence vector operations are created, even if the size is not supported. All other architectures are performing this check.
In a debug VM, this is situation is caught a bit earlier, by an assert in TypeVect::make
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (/home/cgo/dev/openjdk/jdk/src/hotspot/share/opto/type.cpp:2351), pid=506, tid=517
# assert(Matcher::vector_size_supported(elem_bt, length)) failed: length in range
#
# JRE version: OpenJDK Runtime Environment (17.0+22) (slowdebug build 17-internal+22-ahead-408--dd34a4c28da73c798e021c7473ac57ead56c9903)
# Java VM: OpenJDK Server VM (slowdebug 17-internal+22-ahead-408--dd34a4c28da73c798e021c7473ac57ead56c9903, mixed mode, serial gc, linux-arm)
# Problematic frame:
# V [libjvm.so+0xf2c274] TypeVect::make(Type const*, unsigned int)+0xb0
#
# Core dump will be written. Default location: Core dumps may be processed with "/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h" (or dumping to /home/microdoc/cgo/core.506)
#
# If you would like to submit a bug report, please visit:
# https://bugreport.java.com/bugreport/crash.jsp
#
This happens for many jdk_vector jtreg test cases.