<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/87394>87394</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[LoopVectorize][VPlan] Unreachable executed "Unhandled opcode!"
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
patrick-rivos
</td>
</tr>
</table>
<pre>
Reduced LLVM IR:
```llvm ir
target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
target triple = "riscv64-unknown-linux-gnu"
define i32 @main() #0 {
entry:
br label %for.body
for.cond.cleanup.loopexit: ; preds = %cond.end
ret i32 0
for.body: ; preds = %cond.end, %entry
%indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %cond.end ]
%conv3 = zext i1 false to i64
%conv4 = trunc i64 %conv3 to i16
br i1 false, label %cond.false, label %cond.end
cond.false: ; preds = %for.body
br label %cond.end
cond.end: ; preds = %cond.false, %for.body
%indvars.iv.next = add i64 %indvars.iv, 1
%cmp = icmp ult i64 %indvars.iv, 1
br i1 %cmp, label %for.body, label %for.cond.cleanup.loopexit
}
attributes #0 = { "target-features"="+64bit,+v" }
```
Backtrace:
```
Unhandled opcode!
UNREACHABLE executed at /scratch/tc-testing/tc-apr-2/llvm/llvm/lib/Transforms/Vectorize/VPlanAnalysis.cpp:58!
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-apr-2/build-rv64gcv/build-llvm-linux/bin/opt --passes=loop-vectorize reduced.ll
#0 0x00005f05c836eb60 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/scratch/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt+0x2d84b60)
#1 0x00005f05c836bf6f llvm::sys::RunSignalHandlers() (/scratch/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt+0x2d81f6f)
#2 0x00005f05c836c0c5 SignalHandler(int) Signals.cpp:0:0
#3 0x000071a702442520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x000071a7024969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x000071a7024969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#6 0x000071a7024969fc pthread_kill ./nptl/pthread_kill.c:89:10
#7 0x000071a702442476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
#8 0x000071a7024287f3 abort ./stdlib/abort.c:81:7
#9 0x00005f05c82a2afe (/scratch/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt+0x2cb8afe)
#10 0x00005f05c74dfe67 llvm::VPTypeAnalysis::inferScalarTypeForRecipe(llvm::VPInstruction const*) (/scratch/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt+0x1ef5e67)
#11 0x00005f05c74dc88c llvm::VPTypeAnalysis::inferScalarType(llvm::VPValue const*) (/scratch/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt+0x1ef288c)
#12 0x00005f05c750790e simplifyRecipes(llvm::VPlan&, llvm::LLVMContext&) VPlanTransforms.cpp:0:0
#13 0x00005f05c750e606 llvm::VPlanTransforms::optimize(llvm::VPlan&, llvm::ScalarEvolution&) (/scratch/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt+0x1f24606)
#14 0x00005f05c73ded66 llvm::LoopVectorizationPlanner::buildVPlansWithVPRecipes(llvm::ElementCount, llvm::ElementCount) (/scratch/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt+0x1df4d66)
#15 0x00005f05c73e5319 llvm::LoopVectorizationPlanner::plan(llvm::ElementCount, unsigned int) (/scratch/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt+0x1dfb319)
#16 0x00005f05c73e88a9 llvm::LoopVectorizePass::processLoop(llvm::Loop*) (/scratch/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt+0x1dfe8a9)
#17 0x00005f05c73eb73e llvm::LoopVectorizePass::runImpl(llvm::Function&, llvm::ScalarEvolution&, llvm::LoopInfo&, llvm::TargetTransformInfo&, llvm::DominatorTree&, llvm::BlockFrequencyInfo*, llvm::TargetLibraryInfo*, llvm::DemandedBits&, llvm::AssumptionCache&, llvm::LoopAccessInfoManager&, llvm::OptimizationRemarkEmitter&, llvm::ProfileSummaryInfo*) (/scratch/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt+0x1e0173e)
#18 0x00005f05c73ec88d llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/scratch/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt+0x1e0288d)
#19 0x00005f05c62f3276 llvm::detail::PassModel<llvm::Function, llvm::LoopVectorizePass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/scratch/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt+0xd09276)
#20 0x00005f05c8195141 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/scratch/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt+0x2bab141)
#21 0x00005f05c62eabd6 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/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt+0xd00bd6)
#22 0x00005f05c8193e3b llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/scratch/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt+0x2ba9e3b)
#23 0x00005f05c62f2dc6 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/scratch/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt+0xd08dc6)
#24 0x00005f05c8191cb1 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/scratch/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt+0x2ba7cb1)
#25 0x00005f05c5b6cce5 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/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt+0x582ce5)
#26 0x00005f05c5b5f316 optMain (/scratch/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt+0x575316)
#27 0x000071a702429d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#28 0x000071a702429e40 call_init ./csu/../csu/libc-start.c:128:20
#29 0x000071a702429e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#30 0x00005f05c5b54f95 _start (/scratch/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt+0x56af95)
zsh: IOT instruction (core dumped) /scratch/tc-testing/tc-apr-2/build-rv64gcv/build-llvm-linux/bin/opt
```
Godbolt: https://godbolt.org/z/bvY138WfG
Triggered assertion: https://github.com/llvm/llvm-project/blob/f5991161529511ca6ebc058da2a0507c2fc5283e/llvm/lib/Transforms/Vectorize/VPlanAnalysis.cpp#L58
Found via fuzzer
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWl1z4ygW_TXkhbJLQt8PebDjeKZr0zupJJOpfXIhuLLZyKAF5En612-B_CXZ6U73jqd2d7rSigSXwz2HywWJUGPEUgJco2SKktkVbe1K6euGWi3Yy0iLjTJXpeJv1w_AWwYc3909f8afHlA0QcEMBROUBt1PXW_WWOiu1FK9BIs5tbSmb6q1GEUzjAiB0RpFExg1KJqksb-MxP4mJDmKJiHJRzIiXdmjKyOkB2u1aGrYQWph2CaNR618kep3OaqFbF9HS9num3VXDpWQgEVEMIqDNRUSOegCIxIFGGXTzgyk1W97erjUuKYl1BiRpFJ67MQ4RnVlTEk-ZjVQ2TbjWqkGXoVF0QS_8w9FU9xo4GZLIfEAIPm2T6zBej-DYU--92jyFQRy4x47Els0RBIh-YZqMxYb36BZCSzSGKNkioPjJhglM_-cTPvNxhJe7dZy15c3PvTBlNxEHv4LvFosQlzR2gC2yvU1MIy9odWtZJ0nu_bOOkx31qXe47jO9yPhXXineK9jdz0yPSdcf0xxb7zfhXNl747C3q1T9FNJfUvK-U6EQ7VDCI9VWzfeWLibtrbfaNEp17XrabR3aVh4Poo76tnsWANqrRZla8Fs545jn7mIId0MHVVAbavBuCkYzdyVTNO4FC6EEJluECH4ALpLIcd9TCl7sZoyOM003eOvckUlr4Fj1TDFAZEt91___nA7ufl5Mr27xfAKrLXAMbUYkblhmlq2QmRu2ciCsUIuuwfa6BFBZO6y2NEvUSIyf9JUmkrptUFk_gzMKi2-gLu_r6mcSFq_GWHGrHFJLcn3jtzf3U4eb7Fpy7WwmOKyXWINjdLWRfnK2sY4cmSOyHwp7Kotx0yt-06MGq3-CcwiMhfGtE7ROaaSYyFZ3XLAdgWYaWpWuNwpNu66f7SUvWDerpu9hMG4S0D3Wi01XWOql-0apDU-mj-iT9mKmo_0Jo2XbLN_9p76vOuKXGKdq8bi0aihxoBB0czF02iz0w7rbjUZ1_V-ZkQBDl6DIAiSKkhYHqVQpgH2UkQTFE3Mm-lu7rWQ1pN78vFB8oORpr8vlLEa6BqR1IW4kLbL8fkfzg-RafBKeB6XaYBIcWASDpiUVVqdY_LQykexlLT-2UeyNvsF6XLOhlVa9ZwlA2dZwBLccwuRfKtiV7wL9cD_3wNFW6AspFlA4pgkJNhS6ebRa54u0vh4fXYVbGzUOPXu-SY95-I-ZpEWFcOLRWNXGihfvIi6Xoh1U4OLYmqFkniMyFw2tkZkfmw2ZiiaxG6jkaUH_OQj-NKClrT-KnLmNy5HaqTnkI-bfRUuLwZw2VDcOEvx0vjx8EjdLSLzsX96MxwalywaZYQLBE2FAY9NMrezOkDnfWiSZ1WEaenSlIeyvBs-X9R5FzrGB4SiF0KEElrBBYOYlTmtYB8nbsL1ckcW8wrS7GjGPd8_vTWwy9RdmZAV6EdGa6pd5VzpB2Ci6eeT5_tP0ljdMh9aTEljEZlcdI6GUCWQZj164YAey3P2ffQGrJ5p3cKfxofkOevx6eWcLAmyIgBs3EQW1Vs3DGbgcU3lNqMfSt27yI2S1m9NU8fC2x3W69NE5XqPBr1DGqR40NfRmu8LVWPF2q_63_SqE_12o-rWRc3Ws8vpW5E4DdKevnGPYcSBp8cM75RqdvsYnzQdDwm6q_U9emrmN2FXz_fnBuS2S7k3qpW2T79fc0nivIp52iee9IlDEoXFh4k3fjS_QrKV_m2ZX3xTEfKqjMKiRy0dUMtz-h41uKdmG7eNVgyMcbU9al3BhWc-ryCnfRbZgEWZRfBtFrqVn9ZN3WMwbyXbz69vzb-bQR-fZKVOKp78u8t-5p-1mam1kNQq_aQBTmqntWIvcw3_akGytw5gcq6TO1Fqqs9bzGBNJQc-Fdac9DAxpl03jtcNZatTDxy5CXND7rA_U0mXbgM3sPqly2Z-CjzAmuqX27Ww9ozlvVaVqOGxXa-P_b3oehGEWdRf3vNB1LA85x-Kmo9FzG7l3MkV3ZxpFN1ePJNDQPKc95j3tlYpqSKSHWdyDpaKejtU1JjPikN93v-TMOkr9kOCuJ__RaV5UJCst3KQ_ttnWCRhHB7PAyfu15z-S-lHSlqGcdgTMOxHKtCS_xGRejHh_1IDxoOg5P2AJ4OAjyAqjxz_rHhbw5PaOenGYcJpY5U-L0HX4LsE2Db5U-K1gKjs8Y8GmZVw9n3xuiN880HVfkCW98Ltv1lrHuSc9UMtHoRayMqP5NZzAv__6kZKmrGyn1N7rzNJmTIGyZHfuvUBdi8aqIXsv5s-Wi3k8gGqcwH6ztb3M2Urj_OtPWu3GR9aKVX_0tqmtXNRnwH5j6rfoTPRmr650uMh85rU7VLI0zx_sDeWd2XVPg3fbJTguCejw5q6odvujYtzq4dq7MIqtc0WHYu_ie4w7j2rZ9CiEqB3dqWr-e7fF4zHJCcMkl44pv1wTCr3Vqoa-5kKeUFHsiQK-wll8DWUFLwI8GJRi5ItjKXaLhit68Xa-TVGZM5Me_pldPvt9Vyj8ao7yYkmu6NI1-vwQ2kBcYB9GyGFHXbU3Tr0kUf3X067A25y-BhFinOgPSrnWJwFj7LCub3H7p-oJGUSV0WCO9QLDldKq-IQN1-M0xJ_-uUJi6NPqYjkTGnwx1PAu0D-o705d2r4k-Klqv3h_OAArqsYK-26_OKANv8Io_y36qfjY8knLZZL0MAxNQZ0lzdOsL59mFfWqkRkXiVFEYZpmJAiCUNGUyhZkOScEhokQcZIxRKSu7fhHz6SJNFdkh9TmKtWcrwRFFftly-gr_h1xIuooFdwHWYhCfIoi4ur1TVJAhYRSMKYBSEEEUvjKMlJyIMyDdMovxLXJCBxEAckzOMiyMZlUSV5ROKClUVahCGKA1hTUY-d807aK3-IeZ1nURFf-dNn4__0hBAJv2NfiQhByexKX3vFynZpUBzUwlhzQLHC1v5vVnrvsSiZoWTafZRNZvhXqYGyFS1rOJwDI0LOHRwTctXq-vrHz2Q9o38HAAD__4QgyPk">