[llvm] [SLP] Make getSameOpcode support interchangeable instructions. (PR #133888)

Mikael Holmén via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 15 00:49:16 PDT 2025


mikaelholmen wrote:

@HanKuanChen and @alexey-bataev :
The following starts crashing with this patch:
```
opt -passes=slp-vectorizer bbi-106161.ll -o /dev/null
```
Result:
```
opt: ../include/llvm/ADT/APInt.h:1331: void llvm::APInt::setBit(unsigned int): Assertion `BitPosition < BitWidth && "BitPosition out of range"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.	Program arguments: build-all/bin/opt -passes=slp-vectorizer bbi-106161.ll -o /dev/null
1.	Running pass "function(slp-vectorizer)" on module "bbi-106161.ll"
2.	Running pass "slp-vectorizer" on function "f_768_3162"
 #0 0x0000560032c2ed06 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (build-all/bin/opt+0x45e9d06)
 #1 0x0000560032c2c74e llvm::sys::RunSignalHandlers() (build-all/bin/opt+0x45e774e)
 #2 0x0000560032c2f589 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x00007f9d0a3c8d10 __restore_rt (/lib64/libpthread.so.0+0x12d10)
 #4 0x00007f9d07d6852f raise (/lib64/libc.so.6+0x4e52f)
 #5 0x00007f9d07d3be65 abort (/lib64/libc.so.6+0x21e65)
 #6 0x00007f9d07d3bd39 _nl_load_domain.cold.0 (/lib64/libc.so.6+0x21d39)
 #7 0x00007f9d07d60e86 (/lib64/libc.so.6+0x46e86)
 #8 0x000056003469d911 llvm::slpvectorizer::BoUpSLP::VLOperands::VLOperands(llvm::ArrayRef<llvm::Value*>, (anonymous namespace)::InstructionsState const&, llvm::slpvectorizer::BoUpSLP const&) SLPVectorizer.cpp:0:0
 #9 0x000056003469b0f1 llvm::slpvectorizer::BoUpSLP::TreeEntry::setOperand(llvm::slpvectorizer::BoUpSLP const&, bool) SLPVectorizer.cpp:0:0
#10 0x000056003468cdfd llvm::slpvectorizer::BoUpSLP::buildTree_rec(llvm::ArrayRef<llvm::Value*>, unsigned int, llvm::slpvectorizer::BoUpSLP::EdgeInfo const&, unsigned int) (build-all/bin/opt+0x6047dfd)
#11 0x00005600346f02cc llvm::SLPVectorizerPass::tryToVectorizeList(llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP&, bool) (build-all/bin/opt+0x60ab2cc)
#12 0x00005600346f1440 llvm::SLPVectorizerPass::tryToVectorize(llvm::Instruction*, llvm::slpvectorizer::BoUpSLP&) (build-all/bin/opt+0x60ac440)
#13 0x00005600346f45bc llvm::SLPVectorizerPass::vectorizeRootInstruction(llvm::PHINode*, llvm::Instruction*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (build-all/bin/opt+0x60af5bc)
#14 0x00005600346e92ec llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (build-all/bin/opt+0x60a42ec)
#15 0x00005600346e6204 llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) (build-all/bin/opt+0x60a1204)
#16 0x00005600346e5787 llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build-all/bin/opt+0x60a0787)
#17 0x00005600340c17dd llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilderPipelines.cpp:0:0
#18 0x0000560032e653e7 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build-all/bin/opt+0x48203e7)
#19 0x00005600340bd9ed llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilderPipelines.cpp:0:0
#20 0x0000560032e69fbe llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (build-all/bin/opt+0x4824fbe)
#21 0x00005600340b99cd llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) PassBuilderPipelines.cpp:0:0
#22 0x0000560032e640d7 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (build-all/bin/opt+0x481f0d7)
#23 0x000056003404631c 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) (build-all/bin/opt+0x5a0131c)
#24 0x0000560032bf10fe optMain (build-all/bin/opt+0x45ac0fe)
#25 0x00007f9d07d547e5 __libc_start_main (/lib64/libc.so.6+0x3a7e5)
#26 0x0000560032beebee _start (build-all/bin/opt+0x45a9bee)
Abort (core dumped)
```
[bbi-106161.ll.gz](https://github.com/user-attachments/files/19753544/bbi-106161.ll.gz)



https://github.com/llvm/llvm-project/pull/133888


More information about the llvm-commits mailing list