Skip to content

[RISCV] Assertion `A.valno == B.valno && "Cannot overlap different values"' failed. #111881

@patrick-rivos

Description

@patrick-rivos

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions