Issue 176538
Summary [AMDGPU] Assertion `BI.FirstInstr >= Start' failed.
Labels backend:AMDGPU, crash-on-valid, generated by fuzzer
Assignees
Reporter XChy
    Reproducer: https://godbolt.org/z/aosqsnz4K
Testcase:
```llvm
target datalayout = "e-m:e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32-p6:32:32-p7:160:256:256:32-p8:128:128:128:48-p9:192:256:256:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-S32-A5-G1-ni:7:8:9"
target triple = "amdgcn-amd-amdhsa"

%struct.S1 = type { i8, %struct.S0 }
%struct.S0 = type { i64 }

define i16 @backsmith_pure_2(ptr addrspace(5) %BS_VAR_0, i1 %tobool.not, i64 %add919, <32 x i8> %shuffle57, <32 x i8> %vecinit827, <16 x i16> %0) #0 {
entry:
  %BS_VAR_01 = alloca [8 x <32 x i8>], align 32, addrspace(5)
  %call2 = call i8 @backsmith_snippet_44()
 br i1 %tobool.not, label %if.end, label %if.then, !prof !0

if.then: ; preds = %entry
  br i1 %tobool.not, label %for.cond.cleanup, label %for.body

for.cond.cleanup: ; preds = %for.body, %if.then
  %call976 = call <4 x i64> @backsmith_pure_0(<16 x i16> zeroinitializer)
  br label %if.end

for.body:                                         ; preds = %for.body, %if.then
  store <32 x i8> %shuffle57, ptr addrspace(5) %BS_VAR_0, align 32
  %call394 = call <4 x i16> @backsmith_snippet_679()
 %call393 = call <4 x i16> @backsmith_snippet_679()
  %cmp104 = icmp ne <32 x i8> %vecinit827, zeroinitializer
  %sext = sext <32 x i1> %cmp104 to <32 x i8>
  %vecext347 = extractelement <32 x i8> %sext, i64 29
  %cond893.v = select i1 %tobool.not, i8 0, i8 %vecext347
  %vecinit895 = insertelement <32 x i8> %vecinit827, i8 %cond893.v, i64 29
  store <32 x i8> %vecinit895, ptr addrspace(5) null, align 32
  %exitcond.not = icmp eq i64 0, %add919
  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body

if.end: ; preds = %for.cond.cleanup, %entry
 %call1066 = call <4 x i64> @backsmith_pure_0(<16 x i16> %0)
  ret i16 0
}

declare i8 @backsmith_snippet_44()

declare <4 x i16> @backsmith_snippet_679()

declare <4 x i64> @backsmith_pure_0(<16 x i16>)

define %struct.S1 @func_103(i8 %0, i1 %tobool2.not30) #0 {
entry:
 %add = shufflevector <4 x i16> splat (i16 1), <4 x i16> zeroinitializer, <4 x i32> zeroinitializer
  br label %for.cond1.preheader

for.cond.loopexit: ; preds = %for.end, %for.cond1.preheader
 %tobool.not = icmp eq i8 %0, 0
  br i1 %tobool.not, label %for.end25, label %for.cond1.preheader

for.cond1.preheader:                              ; preds = %for.cond.loopexit, %entry
  br i1 %tobool2.not30, label %for.cond.loopexit, label %for.body3

for.body3: ; preds = %for.end, %for.cond1.preheader
  br label %for.cond4

for.cond4:                                        ; preds = %for.cond4, %for.body3
  %tobool7.not = icmp eq i64 0, 0
  br i1 %tobool7.not, label %for.end, label %for.cond4

for.end: ; preds = %for.cond4
  %call121 = call i16 @backsmith_pure_2(ptr addrspace(5) null, i1 false, i64 0, <32 x i8> zeroinitializer, <32 x i8> zeroinitializer, <16 x i16> zeroinitializer)
 store <4 x i16> %add, ptr addrspace(5) null, align 8
  tail call void @backsmith_pure_7(<16 x i64> zeroinitializer, i32 -352674805, <2 x i32> splat (i32 -247168742))
  tail call void @backsmith_pure_7(<16 x i64> zeroinitializer, i32 -352674805, <2 x i32> splat (i32 -247168742))
 %tobool2.not = icmp eq ptr addrspace(5) null, null
  br i1 %tobool2.not, label %for.cond.loopexit, label %for.body3

for.end25: ; preds = %for.cond.loopexit
  ret %struct.S1 zeroinitializer
}

declare void @backsmith_pure_7(<16 x i64>, i32, <2 x i32>)

; uselistorder directives
uselistorder ptr @backsmith_snippet_679, { 1, 0 }
uselistorder ptr @backsmith_pure_0, { 1, 0 }
uselistorder ptr @backsmith_pure_7, { 1, 0 }

attributes #0 = { "target-cpu"="gfx1201" }

!0 = !{!"branch_weights", !"expected", i32 2000, i32 1}
```

Dump:
```
llc: /root/llvm-project/llvm/lib/CodeGen/SplitKit.cpp:233: void llvm::SplitAnalysis::calcLiveBlockInfo(): Assertion `BI.FirstInstr >= Start' failed.
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 'CallGraph Pass Manager' on module '<source>'.
2.	Running pass 'Greedy Register Allocator' on function '@func_103'
 #0 0x0000000004252608 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x4252608)
 #1 0x000000000424f4e4 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #2 0x000075cf6e242520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #3 0x000075cf6e2969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #4 0x000075cf6e242476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #5 0x000075cf6e2287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #6 0x000075cf6e22871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
 #7 0x000075cf6e239e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
 #8 0x000000000340f8a0 llvm::SplitAnalysis::analyzeUses() (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x340f8a0)
 #9 0x000000000340fab8 llvm::SplitAnalysis::analyzeUses() (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x340fab8)
#10 0x000000000334da8f llvm::RAGreedy::tryAssignCSRFirstTime(llvm::LiveInterval const&, llvm::AllocationOrder&, llvm::MCRegister, unsigned char&, llvm::SmallVectorImpl<llvm::Register>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x334da8f)
#11 0x00000000033552db llvm::RAGreedy::selectOrSplitImpl(llvm::LiveInterval const&, llvm::SmallVectorImpl<llvm::Register>&, llvm::SmallSet<llvm::Register, 16u, std::less<llvm::Register>>&, llvm::SmallVector<std::pair<llvm::LiveInterval const*, llvm::MCRegister>, 8u>&, unsigned int) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x33552db)
#12 0x0000000003356017 llvm::RAGreedy::selectOrSplit(llvm::LiveInterval const&, llvm::SmallVectorImpl<llvm::Register>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3356017)
#13 0x00000000035bdfd0 llvm::RegAllocBase::allocatePhysRegs() (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x35bdfd0)
#14 0x0000000003351c1b llvm::RAGreedy::run(llvm::MachineFunction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3351c1b)
#15 0x000000000335286a (anonymous namespace)::RAGreedyLegacy::runOnMachineFunction(llvm::MachineFunction&) RegAllocGreedy.cpp:0:0
#16 0x000000000311d0e9 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#17 0x0000000003773256 llvm::FPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3773256)
#18 0x0000000002b690c8 (anonymous namespace)::CGPassManager::runOnModule(llvm::Module&) CallGraphSCCPass.cpp:0:0
#19 0x0000000003773e6f llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3773e6f)
#20 0x00000000008eb34d compileModule(char**, llvm::SmallVectorImpl<llvm::PassPlugin>&, llvm::LLVMContext&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&) llc.cpp:0:0
#21 0x00000000007c6f8c main (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x7c6f8c)
#22 0x000075cf6e229d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#23 0x000075cf6e229e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#24 0x00000000008e03f5 _start (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x8e03f5)
Program terminated with signal: SIGSEGV
Compiler returned: 139
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to