Issue 131696
Summary [SLPVectorizer] Assertion `!empty()' failed. using opt with --passes=slp-vectorizer
Labels new issue
Assignees
Reporter ewlu
    Full error message:
```
Error: clang-21: /scratch/ewlu/daily-upstream-build/llvm/llvm/include/llvm/ADT/SmallVector.h:300: T& llvm::SmallVectorTemplateCommon<T, <template-parameter-1-2> >::front() [with T = std::unique_ptr<llvm::slpvectorizer::BoUpSLP::TreeEntry>; <template-parameter-1-2> = void; reference = std::unique_ptr<llvm::slpvectorizer::BoUpSLP::TreeEntry>&]: Assertion `!empty()' failed.
```

Testcase:
```llvm ir
target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
target triple = "riscv64-unknown-linux-gnu"

define void @b(ptr %e, i64 %arrayidx13.us.us.3.offs, i64 %0, i64 %1) #0 {
entry:
  %2 = add i64 %arrayidx13.us.us.3.offs, 0
  %3 = getelementptr i8, ptr %e, i64 %2
  %4 = sub i64 0, %0
  %scevgep39 = getelementptr i8, ptr %e, i64 %4
  %5 = add i64 %0, 0
  %6 = getelementptr i8, ptr %e, i64 %5
  %7 = sub i64 %0, %arrayidx13.us.us.3.offs
  %scevgep44 = getelementptr i8, ptr %e, i64 %7
 %8 = add i64 0, 0
  %9 = getelementptr i8, ptr %e, i64 %8
  %10 = sub i64 0, %arrayidx13.us.us.3.offs
  %scevgep65 = getelementptr i8, ptr %e, i64 %10
  %11 = add i64 %1, 0
  %12 = getelementptr i8, ptr %e, i64 %11
  %13 = sub i64 %1, %arrayidx13.us.us.3.offs
  %scevgep86 = getelementptr i8, ptr %e, i64 %13
  ret void
}

attributes #0 = { "target-features"="+64bit,+a,+c,+d,+f,+m,+relax,+v,+zaamo,+zalrsc,+zicsr,+zifencei,+zmmul,+zve32f,+zve32x,+zve64d,+zve64f,+zve64x,+zvl128b,+zvl256b,+zvl32b,+zvl64b,-b,-e,-experimental-p,-experimental-sdext,-experimental-sdtrig,-experimental-smctr,-experimental-ssctr,-experimental-svukte,-experimental-xqccmp,-experimental-xqcia,-experimental-xqciac,-experimental-xqcibm,-experimental-xqcicli,-experimental-xqcicm,-experimental-xqcics,-experimental-xqcicsr,-experimental-xqciint,-experimental-xqcili,-experimental-xqcilia,-experimental-xqcilo,-experimental-xqcilsm,-experimental-xqcisls,-experimental-xrivosvisni,-experimental-xrivosvizip,-experimental-zalasr,-experimental-zicfilp,-experimental-zicfiss,-experimental-zvbc32e,-experimental-zvkgs,-h,-sha,-shcounterenw,-shgatpa,-shtvala,-shvsatpa,-shvstvala,-shvstvecd,-smaia,-smcdeleg,-smcsrind,-smdbltrp,-smepmp,-smmpm,-smnpm,-smrnmi,-smstateen,-ssaia,-ssccfg,-ssccptr,-sscofpmf,-sscounterenw,-sscsrind,-ssdbltrp,-ssnpm,-sspm,-ssqosid,-ssstateen,-ssstrict,-sstc,-sstvala,-sstvecd,-ssu64xl,-supm,-svade,-svadu,-svbare,-svinval,-svnapot,-svpbmt,-svvptc,-xcvalu,-xcvbi,-xcvbitmanip,-xcvelw,-xcvmac,-xcvmem,-xcvsimd,-xmipscmove,-xmipslsp,-xsfcease,-xsfvcp,-xsfvfnrclipxfqf,-xsfvfwmaccqqq,-xsfvqmaccdod,-xsfvqmaccqoq,-xsifivecdiscarddlone,-xsifivecflushdlone,-xtheadba,-xtheadbb,-xtheadbs,-xtheadcmo,-xtheadcondmov,-xtheadfmemidx,-xtheadmac,-xtheadmemidx,-xtheadmempair,-xtheadsync,-xtheadvdot,-xventanacondops,-xwchc,-za128rs,-za64rs,-zabha,-zacas,-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,-zvl32768b,-zvl4096b,-zvl512b,-zvl65536b,-zvl8192b" }
```

Command/backtrace:
```
$ /scratch/ewlu/daily-upstream-build/build-gcv/build-llvm-linux/bin/opt reduced.ll --passes=slp-vectorizer
WARNING: You're attempting to print out a bitcode file.
This is inadvisable as it may cause display problems. If
you REALLY want to taste LLVM bitcode first-hand, you
can force output with the `-f' option.

opt: /scratch/ewlu/daily-upstream-build/llvm/llvm/include/llvm/ADT/SmallVector.h:300: T& llvm::SmallVectorTemplateCommon<T, <template-parameter-1-2> >::front() [with T = std::unique_ptr<llvm::slpvectorizer::BoUpSLP::TreeEntry>; <template-parameter-1-2> = void; reference = std::unique_ptr<llvm::slpvectorizer::BoUpSLP::TreeEntry>&]: Assertion `!empty()' 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/ewlu/daily-upstream-build/build-gcv/build-llvm-linux/bin/opt reduced.ll --passes=slp-vectorizer
1.      Running pass "function(slp-vectorizer)" on module "reduced.ll"
2.      Running pass "slp-vectorizer" on function "b"
 #0 0x0000587ea0b3b5b2 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/scratch/ewlu/daily-upstream-build/build-gcv/build-llvm-linux/bin/opt+0x34795b2)
 #1 0x0000587ea0b3861f llvm::sys::RunSignalHandlers() (/scratch/ewlu/daily-upstream-build/build-gcv/build-llvm-linux/bin/opt+0x347661f)
 #2 0x0000587ea0b38764 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x0000725789245330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
 #4 0x000072578929eb2c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x000072578929eb2c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #6 0x000072578929eb2c pthread_kill ./nptl/pthread_kill.c:89:10
 #7 0x000072578924527e raise ./signal/../sysdeps/posix/raise.c:27:6
 #8 0x00007257892288ff abort ./stdlib/abort.c:81:7
 #9 0x000072578922881b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x000072578923b517 (/lib/x86_64-linux-gnu/libc.so.6+0x3b517)
#11 0x0000587e9fa88fc0 llvm::slpvectorizer::BoUpSLP::buildTree_rec(llvm::ArrayRef<llvm::Value*>, unsigned int, llvm::slpvectorizer::BoUpSLP::EdgeInfo const&, unsigned int)::'lambda'(unsigned int, (anonymous namespace)::InstructionsState const&)::operator()(unsigned int, (anonymous namespace)::InstructionsState const&) const (.part.0) SLPVectorizer.cpp:0:0
#12 0x0000587e9fa84dce llvm::slpvectorizer::BoUpSLP::buildTree_rec(llvm::ArrayRef<llvm::Value*>, unsigned int, llvm::slpvectorizer::BoUpSLP::EdgeInfo const&, unsigned int) (/scratch/ewlu/daily-upstream-build/build-gcv/build-llvm-linux/bin/opt+0x23c2dce)
#13 0x0000587e9fab29e4 llvm::SLPVectorizerPass::tryToVectorizeList(llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP&, bool) (/scratch/ewlu/daily-upstream-build/build-gcv/build-llvm-linux/bin/opt+0x23f09e4)
#14 0x0000587e9fab4e27 llvm::SLPVectorizerPass::vectorizeGEPIndices(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (/scratch/ewlu/daily-upstream-build/build-gcv/build-llvm-linux/bin/opt+0x23f2e27)
#15 0x0000587e9fac1fb6 llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) (/scratch/ewlu/daily-upstream-build/build-gcv/build-llvm-linux/bin/opt+0x23fffb6)
#16 0x0000587e9fac2d36 llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/scratch/ewlu/daily-upstream-build/build-gcv/build-llvm-linux/bin/opt+0x2400d36)
#17 0x0000587e9e67b5e5 llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/scratch/ewlu/daily-upstream-build/build-gcv/build-llvm-linux/bin/opt+0xfb95e5)
#18 0x0000587ea09290da llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/scratch/ewlu/daily-upstream-build/build-gcv/build-llvm-linux/bin/opt+0x32670da)
#19 0x0000587e9e67d435 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/scratch/ewlu/daily-upstream-build/build-gcv/build-llvm-linux/bin/opt+0xfbb435)
#20 0x0000587ea09279b4 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/scratch/ewlu/daily-upstream-build/build-gcv/build-llvm-linux/bin/opt+0x32659b4)
#21 0x0000587e9e6794a5 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/scratch/ewlu/daily-upstream-build/build-gcv/build-llvm-linux/bin/opt+0xfb74a5)
#22 0x0000587ea0927fcd llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/scratch/ewlu/daily-upstream-build/build-gcv/build-llvm-linux/bin/opt+0x3265fcd)
#23 0x0000587e9de19c78 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::ArrayRef<std::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) (/scratch/ewlu/daily-upstream-build/build-gcv/build-llvm-linux/bin/opt+0x757c78)
#24 0x0000587e9de0b4ac optMain (/scratch/ewlu/daily-upstream-build/build-gcv/build-llvm-linux/bin/opt+0x7494ac)
#25 0x000072578922a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#26 0x000072578922a28b call_init ./csu/../csu/libc-start.c:128:20
#27 0x000072578922a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#28 0x0000587e9de01af5 _start (/scratch/ewlu/daily-upstream-build/build-gcv/build-llvm-linux/bin/opt+0x73faf5)
Aborted (core dumped)
```

Godbolt:
https://godbolt.org/z/vzxzKT6eM

Found via Fuzzer (C program before reduction)
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to