<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/100591>100591</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[VPlan] Assertion `VF.Width == Width && "VPlan cost model and legacy cost model disagreed"' failed.
</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>
Tested using 51d4980a133db12888207698e39c469cb7055cac
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 @f() #0 {
entry:
br label %for.body
for.cond.cleanup: ; preds = %cond.end7
ret void
for.body: ; preds = %cond.end7, %entry
%indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %cond.end7 ]
%xor1315 = phi i32 [ 0, %entry ], [ %xor, %cond.end7 ]
%xor = xor i32 0, 0
%arrayidx = getelementptr [1 x i16], ptr null, i64 0, i64 %indvars.iv
%0 = load i16, ptr %arrayidx, align 2
%tobool1.not = icmp eq i16 %0, 0
br i1 %tobool1.not, label %cond.false, label %cond.end7
cond.false: ; preds = %for.body
%arrayidx3 = getelementptr [1 x i64], ptr null, i64 0, i64 %indvars.iv
br label %cond.end7
cond.end7: ; preds = %cond.false, %for.body
%indvars.iv.next = add nsw i64 %indvars.iv, 3
%1 = icmp eq i64 %indvars.iv.next, 0
br i1 %1, label %for.cond.cleanup, label %for.body
}
attributes #0 = { "target-features"="+64bit,+a,+c,+d,+f,+m,+relax,+v,+zicsr,+zifencei,+zmmul,+zve32f,+zve32x,+zve64d,+zve64f,+zve64x,+zvl128b,+zvl32b,+zvl64b,-b,-e,-experimental-smmpm,-experimental-smnpm,-experimental-ssnpm,-experimental-sspm,-experimental-ssqosid,-experimental-supm,-experimental-zacas,-experimental-zalasr,-experimental-zicfilp,-experimental-zicfiss,-h,-shcounterenw,-shgatpa,-shtvala,-shvsatpa,-shvstvala,-shvstvecd,-smaia,-smcdeleg,-smcsrind,-smepmp,-smstateen,-ssaia,-ssccfg,-ssccptr,-sscofpmf,-sscounterenw,-sscsrind,-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,-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" }
```
Backtrace:
```
> /scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt -passes loop-vectorize reduced.ll -S
opt: /scratch/tc-testing/tc-compiler-fuzz-trunk/llvm/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:10123: bool llvm::LoopVectorizePass::processLoop(llvm::Loop*): Assertion `VF.Width == Width && "VPlan cost model and legacy cost model disagreed"' 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/opt -passes loop-vectorize reduced.ll -S
1. Running pass "function(loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>)" on module "reduced.ll"
2. Running pass "loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>" on function "f"
#0 0x00005e0a0dd8f3b0 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x2f1f3b0)
#1 0x00005e0a0dd8c7cf llvm::sys::RunSignalHandlers() (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x2f1c7cf)
#2 0x00005e0a0dd8c925 SignalHandler(int) Signals.cpp:0:0
#3 0x000073a243a42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x000073a243a969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x000073a243a969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#6 0x000073a243a969fc pthread_kill ./nptl/pthread_kill.c:89:10
#7 0x000073a243a42476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
#8 0x000073a243a287f3 abort ./stdlib/abort.c:81:7
#9 0x000073a243a2871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x000073a243a39e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#11 0x00005e0a0cdaadd8 llvm::LoopVectorizePass::processLoop(llvm::Loop*) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x1f3add8)
#12 0x00005e0a0cdad991 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-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x1f3d991)
#13 0x00005e0a0cdae110 llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x1f3e110)
#14 0x00005e0a0bc1fda6 llvm::detail::PassModel<llvm::Function, llvm::LoopVectorizePass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0xdafda6)
#15 0x00005e0a0dba750e llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x2d3750e)
#16 0x00005e0a0bc22f36 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-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0xdb2f36)
#17 0x00005e0a0dba629b llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x2d3629b)
#18 0x00005e0a0bc1f286 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0xdaf286)
#19 0x00005e0a0dba43ed llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x2d343ed)
#20 0x00005e0a0b4686b6 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-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x5f86b6)
#21 0x00005e0a0b45a2f1 optMain (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x5ea2f1)
#22 0x000073a243a29d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#23 0x000073a243a29e40 call_init ./csu/../csu/libc-start.c:128:20
#24 0x000073a243a29e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#25 0x00005e0a0b450185 _start (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x5e0185)
zsh: IOT instruction (core dumped) /scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt
```
Godbolt: https://godbolt.org/z/TnYreKbqn
@fhahn
Found via fuzzer.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWltv47iS_jXKC2FDoi62H_LgJO3dwZnGNDpBL_bJoEjK5poiFZJSHP_6BS-SJcd9PdMBDqaRFovFqo91E0VRRlqznaD0NsrvovzhBrVmL9Vtg4xi-DBTrJP6ppTk9faJakMJaDUTO5AnJFstY5SkKSkTuFwuYbwoVkuarnBWrHC5iPMcIxzFD1G89lcLgJGmURoYURH7P867GjDluQapHTWAIIM4epWtAVH6ACII6ayO0jWdNVG6LjJ3mbGBSOAyStcJXM5ECj3v0fIgnMAaxRpOe0jFNO6KbNaKg5AvYsaZaI-znWgHNX8ltGKCgk4yAqIsriILvAIRTGMQLe68EBVGvQ7OAVAqwFFJOYhgXkk1t1Ecg1oeloLMMadItNYt8L1_UXoHGkWJDh7kDoAKsuhnVdQ4Oy9ncrOn628hwHvb924EtAjmTJAOKT1nndNo9gywIgNRfgfisQqI8gfXz--manNBjyZIDpM56fMkR6mSNMnPM6TwuzMcpfo-qkO0rUV0aPFIACmFXhk5OqkdNZTTmgrTGGUnScARsKQIs1qmaDm3tA1A3BMTZ0fgsUPlEhGHEiBGs1oW4mwnABypGVlKyZO5kL7yGa4bQJ8thkOd-FAqwJILLSswFJ4LTYW4pm_Z57Lx15HstUKZ1vAkfuk3AlhkvxTA8d3zdWsd8wfum2_ePkN4rjt5UclOFREChH65Yj68B2lQjmCeTFN4KT3cGm8Tmkzy9WatuBwcLS6Lh3GYkDGKla2hOixX1vGFvYGgXxJnFUWmVVTbNS99sFd4V2Qls4ZF8A75BvuG-KbyTe0bRTk6erLzzYlhrXqyogJTFnp13fJAdjSF1Yg-DnSRkRFdjehBhidwWQ6dFJ7pIrP0zF2ouxwbqpitS8Rnuq6b-gpXXOPq69yrzGepGXnLb68InxBG-gqXIxe0CzbDFePNdb52MHt70XssW2GoouLF93fINMiTpkM8kJ0-szs9GTAdxc4FXSPmuTUmlNNdoLViIgjQpm48pQ0ylArX0b2exrja9VRjVCBl1dRVT0-s1SNwPYHUditiPG1waAezR0brtsiO3JEdIrQnWk-USAUWEx0KYgI10kN3TVk76og7xNtAlWwgTI0Ea0KX8pdA1Qj3FK0DpVntLDrqClPk1hZLd7jpqUoozFlzrJ6rgfVSI4yfn597xrPtE0km_WcZxlnFrONMY6QI4VLQMb_ird6fuWZPESnRiC5HtD7TuJajjhSklt2ZUdW09s-twOid953LQVo3iKkzQ7-KkXhHfOSPna1ngexssvG2vOC9kzyhBC6V9mSR9RTyVp5QuUee4EoHhRolRenJlyDvHT95n0-lFywPoXvo-0ffeh3sdbAX8gV2wtQ3lW9q2QSib51DJ8KEx6o8SFVWNROe3IdmYPSy-zHRjzIcFrMTw6WsB6oZqFOgMKol6mlW9RTXvRJWvg5PDAt_O56YDbmn9kwYYfi506C2l983AaP39-CvIjQktDS03sWDn-OgQ0ODmA7DPlRG-0x2ITldyE43ipmlX2oU6H3fDsMhkd1hF9qeL3BPhMm7gxhkQuVYqtfXfdvr6UFP93rB_C7Y3_EkhiFFHU-KdDl0YJwtBzovejKFi2LgZ_FqGMgT2JNFnqcDf5ms7AAE5wd7_940fs7fIXwwCuErr1ehm34AEdxorJDB-whuDJ4Zqg2zMbEdLOuGcapmVXs6zYxqxSGCm7JlnMx2uBto-7bm35Qsy2ZhIxsDZg3SmmrApWxmHcVGKnaiQFHSYkrmnIPZo7dENsZtMH_eGDv1qGFlBDdPCgldSVXrCG6-9PNGcPOnlM3Qn-PGvmAlcQJTO7ndLQOHk66jdD2R_YS09uxGSUy1tqMRXE7FI7iO4MpirbWmyjApQFTEXzbz_2HE7O1Gy-61QgcWEbT7d_jlE0cCYKkNqCWhHCBBAKc7hF_HXMI02ilqCxBGcAEqxDglcx_AT39-WD9-ALota2YAAmW7A4o2UhlgJNgb0zj74SaCmx0z-7acY1lP4zdrlPw_ap-rG6Z1a7d_G2cLE5i3hAKzpwArpPeg7EsrTP9oED4A0tbNUGvx3G-wPym5U6gGSO1au0_Rv5jo31B1STDxcysEEztgFW1CqlZgmzyb4AlIlN4LOWN2k8Ip6uiskgpTMpOCv0bpnZBn0YuhKP1gSwNCIIXNZ8upO20YjBqOF-BXjPpbLXFm9G46l4f5_TtBfIzjOM5pjGJCllVaxqNbQ7-Gm-GTYsK43D-5dWZ8Qyj0spXaKIpqV-r3gAnjj0iWvzH9EbyLj7BKrMk24oNPyYVPeIGraz59bsUj2wnE_xsJwqndMCzfz2xr1cRseGn2CuZgYmAElyGynq3Dwha7_wNQGoAWKYJZijKYwzg45VfN47LYFtn4wMsO4LmW88KZ51QmxmVTzFWxqjDYbhuzVxSR7YFxvmV1408AkKu1eQQ3orH7is1YbI6jdJ1lUbpeFGf8_Efw7T0gEP8m8sKdBI6iUVxDHqt9E265uoBbXAY3WxRgp10-HJInI7iZu96rJtRubDeN1MwWgkJMU4cNF1G6HsVgOYWGy0WVAlTald1BGeLT51jeusR6fEZYvUFISrAVfMslIlsia8R8Xpjb720su9Y7jDxckiysSSHt9k6Kp4Dpiq6KnyslpzKUksWc3J6YIETI8u94Gr_HfZtUqTV34g-88IesVsn3_VGt-KNu-MSXzfA0cqvoeeARI47Uh07y9uq4neMPUck3A0_ulGfYJV2VeZA1E8hI9aQofTN6xyU-bBR9bqnArx5gfW2SP1mpkLou8UBrJAgld8zoNzOstW7rxvp1j_D-rQXWuTW2ybfYH5FAO7sUXkj91RhWs5Nbej7TGqnDh5oZc0Xyk5IV4_Sxreuxve9VP7Y8JvWTXtQPTZL4h-rnx2pnLRB_1Uz3gUvvryjZnULxfjGwLk5ikI1jUOKkIqgY-UCoQYyH9CGtP9pt8nVP3pTONHa_FBr7958dc4JsRCchzyfbjRIt8piO7xIb5m-Z_w-NJCSpjdQklMW0eiGs0r-jen9bCv6hqSOlTcwkc4uLm6CAq3Lkwkf3-vYke3NtRtYENUaq68HwCj8ViqDyzjVsHZ1EYnm5AsPlz9Vw7_r9D8bvFwL0tRL8z4g6QTamk6CvLsovSyn5gQXgWqj_CRGEJLURGocQTg4wyqxYFuW4blXriu4TayhnYnpu8WgUE7vPtLpWtF_ZSn9EeO9wvrcH9pv7Sykp-V-taVqzYfwKyL81_BV31kqhV8sdJ8_FhLc7Jt4-D87y2hDPG47J0nv_M5hxGC3WnU1d2Guvrj1lZGO2Rsqwgngv_uU_-X1V6gtVrGJU9XKlHfnp9l0qM69s3U0KM5kWZo5glQDZmI_2Hfw9TKJ2xolJ8OJ4YEVWMdhu7Qv7VhukzBYjzrfDKQHW7dtzjHBSck1pvo_Sde4OYIrzrOnlrDSLgdNhgpnLiTxp0WcO3R9MuN93wfgMml0DnbhyzYur4OliZc0-Y-cXmYuTZQ486vskzk44JO6kbVTBH389ASa0UW1_krvEUlF3Eu-WxN950v6NT0__JUkpufumc_HtwQ_MpbImnCK4eRL_q-i_ymcx1o-yuNqjvQBj5ka2goCOIWDNpWp-Q25TskpX6IbeJguYrGCeJMub_W2e01UOs4zSgpYQVSXGsKIJXmawiqssv2G3MIZZvIB5UqRJvpiXcZktaBqnRVKWpCiiLKY1YnxuXbfW3rhPIrdJHOer5Mb90Ea7X0hCKOgLcKMRhFH-cKNuXbzKdqejLOZMG32GMcxw99NK99Unyh_e81vRTav47a9_DArOd7fw_wMAAP__eYAcVQ">