Open
Description
To reproduce run llc with the test below:
; ModuleID = 'reduced.ll'
source_filename = "/nfs/build-cache/zvm-dev-4830/jdk21/aarch64/fastdebug/lib/server/boilerplate.ll"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32-ni:1-p2:32:8:8:32-ni:2"
target triple = "aarch64-none-linux-gnu"
; Function Attrs: uwtable
define noundef i32 @widget(i1 %arg) #0 gc "statepoint-example" {
bb:
%icmp = icmp eq ptr addrspace(1) null, null
br i1 %arg, label %bb1, label %bb2
bb1: ; preds = %bb
%call = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(i32 (ptr addrspace(1), ptr addrspace(1), double)) null, i32 3, i32 0, ptr addrspace(1) nonnull null, ptr addrspace(1) nonnull null, double 0.000000e+00, i32 0, i32 0) #5 [ "deopt"([71 x i32] zeroinitializer, i32 0, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, i64 0, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, i32 0, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, float 0.000000e+00, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, i32 0, i64 0, ptr addrspace(1) null, ptr addrspace(1) null), "gc-live"(ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, <2 x ptr addrspace(1)> zeroinitializer, <2 x ptr addrspace(1)> zeroinitializer, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, <2 x ptr addrspace(1)> zeroinitializer, ptr addrspace(1) null) ]
br label %bb5
bb2: ; preds = %bb
%call3 = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(i32 (ptr addrspace(1), ptr addrspace(1), double)) null, i32 3, i32 0, ptr addrspace(1) nonnull null, ptr addrspace(1) nonnull null, double 0.000000e+00, i32 0, i32 0) #6 [ "deopt"([73 x i32] zeroinitializer, i32 0, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, i64 0, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, i32 0, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, float 0.000000e+00, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, i32 0, i64 0, ptr addrspace(1) null, ptr addrspace(1) null), "gc-live"(ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, <2 x ptr addrspace(1)> zeroinitializer, <2 x ptr addrspace(1)> zeroinitializer, <2 x ptr addrspace(1)> zeroinitializer, ptr addrspace(1) null, <2 x ptr addrspace(1)> zeroinitializer, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, <2 x ptr addrspace(1)> zeroinitializer, ptr addrspace(1) null) ]
%call4 = call coldcc <2 x ptr addrspace(1)> @llvm.experimental.gc.relocate.v2p1(token %call3, i32 0, i32 24) ; (null, zeroinitializer)
%shufflevector = shufflevector <2 x ptr addrspace(1)> zeroinitializer, <2 x ptr addrspace(1)> %call4, <2 x i32> <i32 0, i32 3>
br label %bb5
bb5: ; preds = %bb2, %bb1
%phi = phi <2 x ptr addrspace(1)> [ zeroinitializer, %bb1 ], [ %shufflevector, %bb2 ]
%extractelement = extractelement <2 x ptr addrspace(1)> %phi, i64 0
%call6 = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(void (i32)) null, i32 1, i32 0, i32 0, i32 0, i32 0) #7 [ "deopt"([73 x i32] zeroinitializer, i32 0, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, i64 0, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, i32 0, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, float 0.000000e+00, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, ptr addrspace(1) null, i32 0, i64 0, ptr addrspace(1) %extractelement, ptr addrspace(1) null), "gc-live"() ]
unreachable
}
Reproducer: https://godbolt.org/z/YG7cW3shP
Stack dump:
unhandled opcode in isAArch64FrameOffsetLegal
UNREACHABLE executed at /root/llvm-project/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp:6286!
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /opt/compiler-explorer/clang-assertions-trunk/bin/llc -o /app/output.s -x86-asm-syntax=intel <source>
1. Running pass 'Function Pass Manager' on module '<source>'.
2. Running pass 'Prologue/Epilogue Insertion & Frame Finalization' on function '@widget'
#0 0x0000000003f00ab8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3f00ab8)
#1 0x0000000003efe444 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#2 0x0000747fc7442520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#3 0x0000747fc74969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
#4 0x0000747fc7442476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#5 0x0000747fc74287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#6 0x0000000003e4adda (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3e4adda)
#7 0x0000000000ac2080 llvm::isAArch64FrameOffsetLegal(llvm::MachineInstr const&, llvm::StackOffset&, bool*, unsigned int*, long*) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0xac2080)
#8 0x0000000000c7f000 llvm::AArch64FrameLowering::determineCalleeSaves(llvm::MachineFunction&, llvm::BitVector&, llvm::RegScavenger*) const (.part.0) AArch64FrameLowering.cpp:0:0
#9 0x0000000002ffeb86 (anonymous namespace)::PEIImpl::run(llvm::MachineFunction&) (.constprop.0) PrologEpilogInserter.cpp:0:0
#10 0x0000000003001a7b (anonymous namespace)::PEILegacy::runOnMachineFunction(llvm::MachineFunction&) PrologEpilogInserter.cpp:0:0
#11 0x0000000002e4955a llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#12 0x00000000034759cf llvm::FPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x34759cf)
#13 0x0000000003475d81 llvm::FPPassManager::runOnModule(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3475d81)
#14 0x0000000003476621 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3476621)
#15 0x00000000008c3548 compileModule(char**, llvm::LLVMContext&) llc.cpp:0:0
#16 0x00000000007a160e main (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x7a160e)
#17 0x0000747fc7429d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#18 0x0000747fc7429e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#19 0x00000000008b9c25 _start (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x8b9c25)
Program terminated with signal: SIGSEGV
Compiler returned: 139