-
Notifications
You must be signed in to change notification settings - Fork 14.5k
Open
Description
Testcase:
target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
target triple = "riscv64-unknown-linux-gnu"
; Function Attrs: vscale_range(2,2)
define i32 @main(i64 %0, i64 %conv16.us.1.9, i32 %1, i32 %2) #0 {
for.body.us.preheader:
%3 = insertelement <4 x i64> zeroinitializer, i64 %0, i64 1
%4 = shufflevector <4 x i64> %3, <4 x i64> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 1, i32 1>
%5 = call <4 x i64> @llvm.smax.v4i64(<4 x i64> %4, <4 x i64> zeroinitializer)
%6 = trunc <4 x i64> %5 to <4 x i32>
%7 = and <4 x i32> %6, <i32 1, i32 1, i32 1, i32 1>
%.conv16.us.1.9 = tail call i64 @llvm.smax.i64(i64 1, i64 %conv16.us.1.9)
%conv28.us.1.9 = trunc i64 %.conv16.us.1.9 to i32
%.conv16.us.2.9 = tail call i64 @llvm.smax.i64(i64 %0, i64 1)
%conv28.us.2.9 = trunc i64 %.conv16.us.2.9 to i32
%8 = call i32 @llvm.umin.i32(i32 %1, i32 %2)
%9 = call i32 @llvm.umin.i32(i32 %8, i32 %1)
%10 = call i32 @llvm.umin.i32(i32 %9, i32 %1)
%11 = call i32 @llvm.vector.reduce.umin.v4i32(<4 x i32> %7)
%12 = call i32 @llvm.umin.i32(i32 %10, i32 %11)
%13 = call i32 @llvm.umin.i32(i32 %12, i32 %conv28.us.1.9)
%14 = call i32 @llvm.umin.i32(i32 %13, i32 %conv28.us.2.9)
%conv39.us.2.9 = trunc i32 %14 to i8
store i8 %conv39.us.2.9, ptr null, align 1
ret i32 0
}
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smax.i64(i64, i64) #1
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umin.i32(i32, i32) #1
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x i64> @llvm.smax.v4i64(<4 x i64>, <4 x i64>) #1
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.umin.v4i32(<4 x i32>) #1
; uselistorder directives
uselistorder ptr @llvm.smax.i64, { 1, 0 }
uselistorder ptr @llvm.umin.i32, { 5, 4, 3, 2, 1, 0 }
attributes #0 = { vscale_range(2,2) "target-features"="+64bit,+a,+c,+d,+f,+m,+relax,+v,+zicsr,+zifencei,+zmmul,+zve32f,+zve32x,+zve64d,+zve64f,+zve64x,+zvl128b,+zvl32b,+zvl64b,-b,-e,-experimental-smctr,-experimental-smmpm,-experimental-smnpm,-experimental-ssctr,-experimental-ssnpm,-experimental-sspm,-experimental-supm,-experimental-zalasr,-experimental-zicfilp,-experimental-zicfiss,-experimental-zvbc32e,-experimental-zvkgs,-h,-shcounterenw,-shgatpa,-shtvala,-shvsatpa,-shvstvala,-shvstvecd,-smaia,-smcdeleg,-smcsrind,-smepmp,-smstateen,-ssaia,-ssccfg,-ssccptr,-sscofpmf,-sscounterenw,-sscsrind,-ssqosid,-ssstateen,-ssstrict,-sstc,-sstvala,-sstvecd,-ssu64xl,-svade,-svadu,-svbare,-svinval,-svnapot,-svpbmt,-xcvalu,-xcvbi,-xcvbitmanip,-xcvelw,-xcvmac,-xcvmem,-xcvsimd,-xsfcease,-xsfvcp,-xsfvfnrclipxfqf,-xsfvfwmaccqqq,-xsfvqmaccdod,-xsfvqmaccqoq,-xsifivecdiscarddlone,-xsifivecflushdlone,-xtheadba,-xtheadbb,-xtheadbs,-xtheadcmo,-xtheadcondmov,-xtheadfmemidx,-xtheadmac,-xtheadmemidx,-xtheadmempair,-xtheadsync,-xtheadvdot,-xventanacondops,-xwchc,-za128rs,-za64rs,-zaamo,-zabha,-zacas,-zalrsc,-zama16b,-zawrs,-zba,-zbb,-zbc,-zbkb,-zbkc,-zbkx,-zbs,-zca,-zcb,-zcd,-zce,-zcf,-zcmop,-zcmp,-zcmt,-zdinx,-zfa,-zfbfmin,-zfh,-zfhmin,-zfinx,-zhinx,-zhinxmin,-zic64b,-zicbom,-zicbop,-zicboz,-ziccamoa,-ziccif,-zicclsm,-ziccrse,-zicntr,-zicond,-zihintntl,-zihintpause,-zihpm,-zimop,-zk,-zkn,-zknd,-zkne,-zknh,-zkr,-zks,-zksed,-zksh,-zkt,-ztso,-zvbb,-zvbc,-zvfbfmin,-zvfbfwma,-zvfh,-zvfhmin,-zvkb,-zvkg,-zvkn,-zvknc,-zvkned,-zvkng,-zvknha,-zvknhb,-zvks,-zvksc,-zvksed,-zvksg,-zvksh,-zvkt,-zvl1024b,-zvl16384b,-zvl2048b,-zvl256b,-zvl32768b,-zvl4096b,-zvl512b,-zvl65536b,-zvl8192b" }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
Command/Backtrace:
> /scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc reduced.ll
llc: /scratch/tc-testing/tc-compiler-fuzz-trunk/llvm/llvm/lib/CodeGen/LiveInterval.cpp:1186: bool coalescable(const llvm::LiveRange::Segment&, const llvm::LiveRange::Segment&): Assertion `A.valno == B.valno && "Cannot overlap different values"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc reduced.ll
1. Running pass 'Function Pass Manager' on module 'reduced.ll'.
2. Running pass 'Register Coalescer' on function '@main'
#0 0x00005ba2e3da4500 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x1ede500)
#1 0x00005ba2e3da190f llvm::sys::RunSignalHandlers() (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x1edb90f)
#2 0x00005ba2e3da1a65 SignalHandler(int) Signals.cpp:0:0
#3 0x0000797452642520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007974526969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x00007974526969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#6 0x00007974526969fc pthread_kill ./nptl/pthread_kill.c:89:10
#7 0x0000797452642476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
#8 0x00007974526287f3 abort ./stdlib/abort.c:81:7
#9 0x000079745262871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x0000797452639e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#11 0x00005ba2e2bbd0b5 (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0xcf70b5)
#12 0x00005ba2e2bc6d60 llvm::LiveRangeUpdater::add(llvm::LiveRange::Segment) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0xd00d60)
#13 0x00005ba2e2bc73f9 llvm::LiveRange::join(llvm::LiveRange&, int const*, int const*, llvm::SmallVectorImpl<llvm::VNInfo*>&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0xd013f9)
#14 0x00005ba2e2e9dfb3 (anonymous namespace)::RegisterCoalescer::joinVirtRegs(llvm::CoalescerPair&) (.constprop.0) RegisterCoalescer.cpp:0:0
#15 0x00005ba2e2ea2e59 (anonymous namespace)::RegisterCoalescer::joinCopy(llvm::MachineInstr*, bool&, llvm::SmallPtrSetImpl<llvm::MachineInstr*>&) (.constprop.0) RegisterCoalescer.cpp:0:0
#16 0x00005ba2e2ea50c7 (anonymous namespace)::RegisterCoalescer::copyCoalesceWorkList(llvm::MutableArrayRef<llvm::MachineInstr*>) RegisterCoalescer.cpp:0:0
#17 0x00005ba2e2ea8d18 (anonymous namespace)::RegisterCoalescer::runOnMachineFunction(llvm::MachineFunction&) RegisterCoalescer.cpp:0:0
#18 0x00005ba2e2c91477 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#19 0x00005ba2e32bdc57 llvm::FPPassManager::runOnFunction(llvm::Function&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x13f7c57)
#20 0x00005ba2e32be0a9 llvm::FPPassManager::runOnModule(llvm::Module&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x13f80a9)
#21 0x00005ba2e32bea61 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x13f8a61)
#22 0x00005ba2e2581cb6 compileModule(char**, llvm::LLVMContext&) llc.cpp:0:0
#23 0x00005ba2e24c5b26 main (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x5ffb26)
#24 0x0000797452629d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#25 0x0000797452629e40 call_init ./csu/../csu/libc-start.c:128:20
#26 0x0000797452629e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#27 0x00005ba2e2578755 _start (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x6b2755)
zsh: IOT instruction (core dumped) /scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc
Godbolt: https://godbolt.org/z/c8rf6WxrP
-opt-bisect-limit
points at (19) Machine code sinking on function (main)
Found via fuzzer.