<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/95883>95883</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
SLPVectorizer pass raised exception with reproducible IR
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
BruceDai003
</td>
</tr>
</table>
<pre>
I used llvm-reduce tool to simplify the test case:
```
define void @any_kernel_2_0d1d2de() {
%1 = extractelement <4 x i8> zeroinitializer, i64 0
%2 = extractelement <4 x i8> zeroinitializer, i64 0
%3 = extractelement <4 x i8> zeroinitializer, i64 0
%4 = extractelement <4 x i8> zeroinitializer, i64 0
br label %5
5: ; preds = %0
%6 = or i8 %1, %2
%7 = or i8 %6, %3
%8 = or i8 %7, %4
%9 = icmp ne i8 %8, 0
ret void
}
```
This input IR will crash when going through the slp-vectorizer pass with command:
`./opt -S --passes=slp-vectorizer reduced.ll`
The raised exception is:
opt: /home/xx/tests/llvm/llvm-project/llvm/include/llvm/Support/Casting.h:662: decltype(auto) llvm::dyn_cast(From*) [with To = llvm::Instruction; From = llvm::Value]: Assertion `detail::isPresent(Val) && "dyn_cast on a non-existent value"' failed.
and the crash backtrace is:
```
Stack dump:
0. Program arguments: ./opt -S --passes=slp-vectorizer ../../reduced.ll
#0 0x0000559a45781650 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (./opt+0x2264650)
#1 0x0000559a4577ef6f llvm::sys::RunSignalHandlers() (./opt+0x2261f6f)
#2 0x0000559a4577f0c5 SignalHandler(int) Signals.cpp:0:0
#3 0x00007f1f8589a520 (/usr/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007f1f858ee9fc pthread_kill (/usr/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
#5 0x00007f1f8589a476 gsignal (/usr/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#6 0x00007f1f858807f3 abort (/usr/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#7 0x00007f1f8588071b (/usr/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
#8 0x00007f1f85891e96 (/usr/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#9 0x0000559a445b6694 (./opt+0x1099694)
#10 0x0000559a45d6f920 llvm::slpvectorizer::BoUpSLP::BlockScheduling::getScheduleData(llvm::Value*) (./opt+0x2852920)
#11 0x0000559a45dbce8e llvm::slpvectorizer::BoUpSLP::getLastInstructionInBundle(llvm::slpvectorizer::BoUpSLP::TreeEntry const*) (./opt+0x289fe8e)
#12 0x0000559a45de2b39 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::MapVector<llvm::Value*, llvm::SmallVector<llvm::Instruction*, 2u>, llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, unsigned int>>, std::vector<std::pair<llvm::Value*, llvm::SmallVector<llvm::Instruction*, 2u>>, std::allocator<std::pair<llvm::Value*, llvm::SmallVector<llvm::Instruction*, 2u>>>>> const&, llvm::SmallVectorImpl<std::pair<llvm::Value*, llvm::Value*>>&, llvm::Instruction*) (./opt+0x28c5b39)
#13 0x0000559a45ded84e (anonymous namespace)::HorizontalReduction::tryToReduce(llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo const&) SLPVectorizer.cpp:0:0
#14 0x0000559a45defc82 llvm::SLPVectorizerPass::vectorizeHorReduction(llvm::PHINode*, llvm::Instruction*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&) (./opt+0x28d2c82)
#15 0x0000559a45df3a92 llvm::SLPVectorizerPass::vectorizeRootInstruction(llvm::PHINode*, llvm::Instruction*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*) (.constprop.0) SLPVectorizer.cpp:0:0
#16 0x0000559a45df3cd5 llvm::SLPVectorizerPass::vectorizeCmpInsts(llvm::ArrayRef<llvm::CmpInst*>, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (./opt+0x28d6cd5)
#17 0x0000559a45df47ae llvm::SLPVectorizerPass::vectorizeSimpleInstructions(llvm::SmallSetVector<llvm::Instruction*, 8u>&, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, bool) (./opt+0x28d77ae)
#18 0x0000559a45df7008 llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (./opt+0x28da008)
#19 0x0000559a45dfa325 llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) (.part.0) SLPVectorizer.cpp:0:0
#20 0x0000559a45dfac82 llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (./opt+0x28ddc82)
#21 0x0000559a45996f16 llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (./opt+0x2479f16)
#22 0x0000559a43f4917a llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (./opt+0xa2c17a)
#23 0x0000559a4508670b llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (./opt+0x1b6970b)
#24 0x0000559a43f31a96 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (./opt+0xa14a96)
#25 0x0000559a450844f1 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (./opt+0x1b674f1)
#26 0x0000559a43ae98f5 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool) (./opt+0x5cc8f5)
#27 0x0000559a43a3c772 main (./opt+0x51f772)
#28 0x00007f1f85881d90 (/usr/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#29 0x00007f1f85881e40 __libc_start_main (/usr/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#30 0x0000559a43adc875 _start (./opt+0x5bf875)
Aborted (core dumped)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUWV9T4zgS_zTmRUXKlv8_5CGQSQ11M7cUcHOPKdlqJzpkySXJDNlPfyU5IZYTZoHltvamMgGkVv_5df-ktkW0ZhsBMA_SqyBdXpDebKWaX6m-hiVhYRhfVJLu5jeo10AR50_tpQLa14CMlBwZiTRrO86aHTJbQAa0QTXREMSLIFwG4SLIwv3H_UmhYQLQk2QUBUlIxG79CEoAX-N1SCOKKQS4CHCJgvxqWIJQgNMIBfESwbNRpDbAoQVhUBBfJ-gZsSKIv6DfQUkmmGGEs99BBfgasSxB4UgJ_gwl8WcoSf60kkohTirgVlu6h9p9p0G8QO_8F8RXqFNAtXMrwOnBTIDTzI1JhVjhEmE9sViOosl9kWwvEo9ECl8k34skI5HSibC67ZCAvVxh5V5iVmBc5ezDzZdnS-xhyzRiousNurlDPxnnqFZEb9HPLQi0kUxskNkq2W-2rmY17y6foDZSWaBRR7RGP5nZolq2LRF0XMqzAK9kZ9DlPbq8tJKgg3g50TAQhM44H_kESBFmOQTPNXSGSYGYflEtO2PTFuDVVrYQ4NXzc4BXlk06wCtLu_2Py07J_0BtjqNM1Ly3rDkM3PddJ5WVuCbaMLGZbYN4kWXYWqBQc7PrLMlIb6QlmlsWL4J4QXdiXRNtAlyslGwDvHBETK8cHA_SJegofiO0UX1tY7EFZJdMJH4Q3kOQLq3lhdagXNxBFlIwhPFBiOlbBRqENfuDcGcSZwHOUIDxwSUkBSJISHEJz0wbS5cnpxzjAOeoIYwDnY15QAR16R1yX5H60ZINxqhPCufekPoR0b7tXiTC2UCQWyU3irSIqE1vuWp1oDcVw8xKua9RWRzIFYcofA7DMEzTkiRpXkRZGo7w0zs9_HKrmDDOvwcbRICLo5AiP9dSGwWkdbhdI2axtCgWexcDfBU-Y5wlWRoGuDzaj3z7OTRZc87-XS_u2UYQ_pUIykHpwyZ9YiJqssYzgScmmrBOkacswMXe42FYz-rOpiB0_18UxXtFeRM1RVqUJMUhcn6seq1s_bPKMqfI1llyyZnony83oh8m6pmWs8w5meAU-ygkvmaAsqlRZ7YKCF0_2g3kA2bKrGxqz0w6DSDJM7TRLuaPBZLkmWch8y0UYd7EiFRSmY_ox0XexJ7-_ER_VH1Qc1R5mosJNhGU2Uc0xyWUPibluP6StMqyMpnWbRSWZVYmL-ssM3xq0qwpsUdN3h1ZPgxdyX91999u939wWT_e11ugPWdiMwxuwOyHYEkM8Wg87JX7LXdCqyLF5ahmrXs-c2lVQwHvcG8D5hvRZrSF34ir3tLRc-qP1DwogC_CqB2qpbAHx3n3ywYK8Nz3dwUKuIrLd7j_Mmkd8Dz-TrofbjKIr8-Bez2yct8Szs9Ijw-2YQ3ug_iLv3gJQsN30r1qpxeut6bDdnxu6Y1o5KvLXaMzNTo-Nw9abgl7PVjPifjLXqE2dIxjEF-_jHS_0vZx6CZ2CeeyJn-Z6cPnUKXZqxpv2o5_wKeX0X2oEwNT185QpE6ruPQoEk8oQosE7DoipNi1stdIkBZ05_qBcjD01ZJCCkP4ne02htbMThi1e5Bu7M0EnwbxQNQGzIMiQjdSta54pzgMMt9YpYjaWYkR4iW6_3b748XY6SFvg04mQTd1gceZGmu4JVpPtoOvUh0DH8d5-_Xmn5KeJu60aI5zV0Sz2u3jJ1OfDNtpAR7n_g3ENX2PTGx-fD1U15kKorgusFdBqQ9mE5PyPWDeSWk8fP7WeA6IuHLrlOxm4RsrLpuCVNP0HSBdt52NWXvoLJQiuztovETuJfe7xCchc64OspqmXh3kkxCTnMA7QrxnbcdhlFk_WFe892DetCUX_bn98c9URiUlP49DnhO_6SgmOORhWLwn1VvChL4Re0eL_1X-SBgWnt_lxG8S4zeUqOqF20zGjq56sc_G9AisCSfqy5Pk_VnufmjzP5FYLO5A99yyZTLzTcru7JKlbJmwncLQ6U0Vat237m3KNam3p_NLaImgQK_YGZu_dYa17Hdil99BS9Tjl5YZYx9IX_aTjijz1q0Eh9M8venwUr14W44WgvCdZvo7EWQDPtNeFv3ifKCT8wH7zxBlmTVR9kqzad39Linw81b9WjqJ05t2b3vUE9AhHtAfi9J-_kL4krxsosyDz3uGiZukjHLyCfA52V_5-FG4_v-zQHAd5cRLgt8lh0WWh9XI3HdpH7Yf5EG1BXdBSedOqnOODwve5fZ-yWtOR1VW5mHleZ34pRNHpHwf8w5uXr8x1s_K_THW1zL_-QCSKCGlT710kvUkaaI3UOgcan-3aKMqy5Mm8sL1etSYQFk04wZA9S7Xt6wDzoT_gHdvFBMb24ueqZVXmuvvpN46PX90wA_9xVRKSv5bb7rerBg_o-RPTb8SztmG22HC-w0TJ7uf7Mza2MZxaAScvX8wQX8l9QMUaxiog9zQeL7150me07ouGq9Px7mf5rjOc4xawsTJ2qjJc_8sn7xALSJafujtOC5p6b1pxOVUMyQhWq_tsrU2RJn1wcX324LEs-Xfh8SE1kWeosHKCQZVU-RH_BaVVAaolaqlAneNA_So_HDVc0HnMS3jklzAPMqjIivKMk8vtvM0SzDkuInKoqgSChGkYZ4lJLbflJILNschTsIsKsI0xWk6KwHHTVgnUDRxEVU0SEJoCeMzW0EzqTYXTOse5mVaFPGFu63V7qIdYwE_kZsMMA7S5YWa2zWXVb_RQRJypo0-ajHMcJh7XdVwS3lyo-ju6RR0StK-ZhUHdHN30Ss-3xrTuXYTrwK82jCz7atZLdtXLxedczrAq8H5pzn-bwAAAP__PSmUNQ">