Skip to content

[AArch64] llc crashed at -O1/O2/O3: Detected cycle in SelectionDAG #169380

@XChy

Description

@XChy

Reproducer: https://godbolt.org/z/3jeTWxYdr
Testcase:

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"
target triple = "aarch64-unknown-linux-musl"

define <32 x i64> @backsmith_pure_3(<32 x i32> %shuffle.i71, i8 %call19, ptr %BS_VAR_7.i69) {
entry:
  %conv.i72 = sext <32 x i32> %shuffle.i71 to <32 x i64>
  %vecext.i = sext i8 %call19 to i64
  %0 = insertelement <32 x i64> zeroinitializer, i64 %vecext.i, i64 0
  %mul.i76 = mul <32 x i64> %0, %conv.i72
  %vecext38.i79 = extractelement <32 x i64> %mul.i76, i64 0
  %arrayidx39.i80 = getelementptr i16, ptr %BS_VAR_7.i69, i64 %vecext38.i79
  store i16 0, ptr %arrayidx39.i80, align 2
  %call3410 = tail call <2 x i8> @backsmith_snippet_1081()
  %1 = load i16, ptr null, align 2
  %conv4.i87 = zext i16 %1 to i64
  %vecinit34.i88 = insertelement <32 x i64> %0, i64 %conv4.i87, i64 2
  %mul.i89 = mul <32 x i64> %vecinit34.i88, %conv.i72
  ret <32 x i64> %mul.i89
}

declare <2 x i8> @backsmith_snippet_1081(...)

llc dumps:

Overran sorted position:
t36: i64 = add t22, t35
  t22: i64,ch = CopyFromReg t0, Register:i64 %10
  t35: i64 = shl t33, Constant:i64<1>
    t33: i64 = extract_vector_elt t272, Constant:i64<0>
      t272: v2i64 = AArch64ISD::SMULL t280, t118
        t280: v2i32 = extract_subvector t278, Constant:i64<0>
          t278: v4i32 = AArch64ISD::UZP1 t277, t276
            t277: v4i32 = bitcast t157
              t157: v2i64 = BUILD_VECTOR t68, Constant:i64<0>
                t68: i64 = sign_extend_inreg t66, ValueType:ch:i8
                  t66: i64 = any_extend t20

            t276: v4i32 = bitcast t233
              t233: v2i64 = BUILD_VECTOR t63, Constant:i64<0>
                t63: i64,ch = load<(load (s16) from `ptr null`), zext from i16> t48, Constant:i64<0>, undef:i64
        t118: v2i32 = extract_subvector t4, Constant:i64<0>
          t4: v4i32,ch = CopyFromReg t0, Register:v4i32 %1
Checking if this is due to cycles
Detected cycle in SelectionDAG
Offending node:
t48: ch,glue = callseq_end t47, TargetConstant:i64<0>, TargetConstant:i64<0>, t47:1
  t47: ch,glue = AArch64ISD::CALL t42, TargetGlobalAddress:i64<ptr @backsmith_snippet_1081> 0, RegisterMask:Untyped
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and instructions to reproduce the bug.
Stack dump:
0.	Program arguments: /opt/compiler-explorer/clang-assertions-trunk/bin/llc -o /app/output.s -x86-asm-syntax=intel -O1 <source>
1.	Running pass 'Function Pass Manager' on module '<source>'.
2.	Running pass 'AArch64 Instruction Selection' on function '@backsmith_pure_3'
 #0 0x00000000041ba738 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x41ba738)
 #1 0x00000000041b75e4 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #2 0x00007cb182a42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #3 0x00007cb182a969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #4 0x00007cb182a42476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #5 0x00007cb182a287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #6 0x0000000003ec234f (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3ec234f)
 #7 0x0000000003ec2171 checkForCyclesHelper(llvm::SDNode const*, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SelectionDAG const*) SelectionDAG.cpp:0:0
 #8 0x0000000003ec2171 checkForCyclesHelper(llvm::SDNode const*, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SelectionDAG const*) SelectionDAG.cpp:0:0
 #9 0x0000000003ec2171 checkForCyclesHelper(llvm::SDNode const*, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SelectionDAG const*) SelectionDAG.cpp:0:0
#10 0x0000000003ec2171 checkForCyclesHelper(llvm::SDNode const*, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SelectionDAG const*) SelectionDAG.cpp:0:0
#11 0x0000000003ec2171 checkForCyclesHelper(llvm::SDNode const*, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SelectionDAG const*) SelectionDAG.cpp:0:0
#12 0x0000000003ec2171 checkForCyclesHelper(llvm::SDNode const*, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SelectionDAG const*) SelectionDAG.cpp:0:0
#13 0x0000000003ec2171 checkForCyclesHelper(llvm::SDNode const*, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SelectionDAG const*) SelectionDAG.cpp:0:0
#14 0x0000000003ec2171 checkForCyclesHelper(llvm::SDNode const*, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SelectionDAG const*) SelectionDAG.cpp:0:0
#15 0x0000000003ec2171 checkForCyclesHelper(llvm::SDNode const*, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SelectionDAG const*) SelectionDAG.cpp:0:0
#16 0x0000000003ec2171 checkForCyclesHelper(llvm::SDNode const*, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SelectionDAG const*) SelectionDAG.cpp:0:0
#17 0x0000000003ec2171 checkForCyclesHelper(llvm::SDNode const*, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SelectionDAG const*) SelectionDAG.cpp:0:0
#18 0x0000000003ec2171 checkForCyclesHelper(llvm::SDNode const*, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SelectionDAG const*) SelectionDAG.cpp:0:0
#19 0x0000000003ec2171 checkForCyclesHelper(llvm::SDNode const*, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SelectionDAG const*) SelectionDAG.cpp:0:0
#20 0x0000000003ec2171 checkForCyclesHelper(llvm::SDNode const*, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SelectionDAG const*) SelectionDAG.cpp:0:0
#21 0x0000000003ec2171 checkForCyclesHelper(llvm::SDNode const*, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SelectionDAG const*) SelectionDAG.cpp:0:0
#22 0x0000000003ec2171 checkForCyclesHelper(llvm::SDNode const*, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SmallPtrSetImpl<llvm::SDNode const*>&, llvm::SelectionDAG const*) SelectionDAG.cpp:0:0
#23 0x0000000003ed3f6e llvm::checkForCycles(llvm::SDNode const*, llvm::SelectionDAG const*, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3ed3f6e)
#24 0x0000000003ed4239 llvm::SelectionDAG::AssignTopologicalOrder() (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3ed4239)
#25 0x0000000003e302d9 llvm::SelectionDAG::Legalize() (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3e302d9)
#26 0x0000000003f4f992 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3f4f992)
#27 0x0000000003f52d18 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3f52d18)
#28 0x0000000003f5479c llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3f5479c)
#29 0x0000000003f3ff0f llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3f3ff0f)
#30 0x00000000030a6f09 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#31 0x00000000036f18f6 llvm::FPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x36f18f6)
#32 0x00000000036f1ca1 llvm::FPPassManager::runOnModule(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x36f1ca1)
#33 0x00000000036f250f llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x36f250f)
#34 0x00000000008f8d1f compileModule(char**, llvm::LLVMContext&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&) llc.cpp:0:0
#35 0x00000000007c5ec9 main (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x7c5ec9)
#36 0x00007cb182a29d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#37 0x00007cb182a29e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#38 0x00000000008edfc5 _start (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x8edfc5)
Program terminated with signal: SIGSEGV
Compiler returned: 139

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions