Skip to content

unhandled opcode in isAArch64FrameOffsetLegal #142314

Open
@TatyanaDoubts

Description

@TatyanaDoubts

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    backend:AArch64crashPrefer [crash-on-valid] or [crash-on-invalid]

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions