<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/100464>100464</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[VPlan] VPlan cost model and legacy cost model disagreed
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
patrick-rivos
</td>
</tr>
</table>
<pre>
Related: #99701. @fhahn Please let me know if you'd prefer these assert triggering testcases to be all in the same issue or prefer a new issue when a new testcase is found.
Tested using llvm f719a339a89b
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 i32 @main(ptr %0) #0 {
entry:
br label %for.body
for.cond.cleanup: ; preds = %for.body
%.lcssa = phi i8 [ %1, %for.body ]
ret i32 0
for.body: ; preds = %for.body, %entry
%l.011 = phi i32 [ 0, %entry ], [ %add, %for.body ]
%idxprom = sext i32 %l.011 to i64
%arrayidx1 = getelementptr [15 x i8], ptr %0, i64 0, i64 %idxprom
%1 = load i8, ptr %arrayidx1, align 1
%arrayidx3 = getelementptr [0 x i8], ptr null, i64 0, i64 %idxprom
store i8 0, ptr %arrayidx3, align 1
%add = add i32 %l.011, 4
%cmp = icmp ult i32 %l.011, -9
br i1 %cmp, label %for.body, label %for.cond.cleanup
}
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" }
```
Command/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:10098: 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 "main"
#0 0x0000647de5790dd0 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x2f1ddd0)
#1 0x0000647de578e1ef llvm::sys::RunSignalHandlers() (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x2f1b1ef)
#2 0x0000647de578e345 SignalHandler(int) Signals.cpp:0:0
#3 0x00007b2a02842520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007b2a028969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x00007b2a028969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#6 0x00007b2a028969fc pthread_kill ./nptl/pthread_kill.c:89:10
#7 0x00007b2a02842476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
#8 0x00007b2a028287f3 abort ./stdlib/abort.c:81:7
#9 0x00007b2a0282871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x00007b2a02839e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#11 0x0000647de47acc98 llvm::LoopVectorizePass::processLoop(llvm::Loop*) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x1f39c98)
#12 0x0000647de47af851 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+0x1f3c851)
#13 0x0000647de47affd0 llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x1f3cfd0)
#14 0x0000647de3621ff6 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+0xdaeff6)
#15 0x0000647de55a8e7e 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+0x2d35e7e)
#16 0x0000647de3625186 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+0xdb2186)
#17 0x0000647de55a7c0b llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x2d34c0b)
#18 0x0000647de36214d6 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+0xdae4d6)
#19 0x0000647de55a5d5d 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+0x2d32d5d)
#20 0x0000647de2e6b5d6 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+0x5f85d6)
#21 0x0000647de2e5d211 optMain (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x5ea211)
#22 0x00007b2a02829d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#23 0x00007b2a02829e40 call_init ./csu/../csu/libc-start.c:128:20
#24 0x00007b2a02829e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#25 0x0000647de2e530a5 _start (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x5e00a5)
zsh: IOT instruction (core dumped) /scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt
```
Godbolt: https://godbolt.org/z/z7ee8hWWP
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWltv27iX_zTKC2FDoi6WHvLgJPXuYKeYoClmHgOKpGxuKFIhKcfxp1_wIllynP7b7jTAYIpG_PHw8PDcKPFIRlqzraD0OspvovzuCvVmJ9V1h4xi-Gmh2F7qq1qS1-svlCNDSZSuQQTTqlrFyRJEWdzs0E6Ae06RpoBTA1oKnoR8AawBr7KP4IqATtGGKmB2VFOAtKbKAKPYdksVE1tgqDYYaaqBkaCmAHEOmLDsQKOWAqZ1T4FUgxwEBH0J1JcdFYEwiAFMg0b2giyj-C6K1_76lWpDCei1XZHzfQuaVVKhNK1QWdXnnFZOlAZCVMT-v5vGlKcapLbUAIIM4uhV9gZE6R2IIKSLNkrXdNFF6brI3GXBRpDAMkrXCSwXIoWe9mBpEM7EGsU6TgeRimm8L7JFL6xrxYIz0R8WW9GP0_yV0IYJClgKbWhaxEQEy84oEME8jmBlQxeDaHXj2akw6nU0E4BaAY5qyi17I9XSBn4q3tKwFGSJOUWi71wypDc2LkQHXc8mAktacqw1cgzdjgFWgii_sQNJBG-nc0CU3w3zFDXOkPhcAyc8XYPv_fe-hn5x74WTtnwZJ8lJWevL_AbEU26np-17MxAh3zAkgjkjh07J1gnV9OANG5cyEtj8OLEjpdArIwevxZYaymlLhXGRzG-SHBwAK4MOp_DeWjFgBKd1J6K9SC4RsRJO08clLQ1xthUguaBRelmj-Fwh0XP-HQppIxW1-RBfUCV9RxVCnBK2nbrRck-diNvO8TELem7eMC-qSd6zJMyxI283wTlxtgt8fq7upomKjFGs7g3VYc_Z1FvZbIF-hy8aikyvqLZbOL2zV3hTZDUzEbyN4A3yDfYN8U3jm9Y3inJ08HDvmyPDWg2woQJTFnpt2_MA9zSFzQQfRlxkZIKbCR55eALLeuyk8ISLzOKFu1B3OXRUMZsliC9023btBaq4RNWXqReJz1Iz8pbeX2A-Ioz0BSpHzmlnZIYbxrvLdO3E7OxF77DshaGKihff3yLTIQ_NHvEA9_pE3uvZgNlT7EzQLWKe2mJCOd0GrBUTgYF2LkUXutUGGUqF6-hhnsa42Q6oMypA2XRtM-CZtnoiXM9EansEMB4bHNpR7YnSui-yA3dwjwgdQO9BjVQgMbFHgU2gTnrR-65uHTrgPeJ9QDUbgWmRYF3oUv4SUIvwgGgbkGat0-igG2yPIwHvcTegRijMWXdonpuR9NIijJ-fnwfCs-0TSWb9ZxnGWcOs4UxjpAjhUtApveG93p2oZkcRqdEE1xOsTxi3ctKRgrRyfyI0LW0ZOZwIg_G-cz5I2w4xdSLoVzFh3xPv-cPe5rNAdjXZeV1e8M5xHlECS6U9LLIBIa_lEdU75AFXOkxoUVLUHr4Efm_40dt8rD1j_RS6T0P_4Fs_B_s52DP5BDti6pvGN63sAhhaZ9CRMOFlNV5IUzctEx7uQjMSBt7dFAyjDIeb2ZHhWrYj6kZ0DAijVqIBs2ZAXA-TsPJ5eGRY-O14ZNblHu2YMMLwU6dD_cC_64KMwd4nfxWhIaGlofUmPvk1nnRoaGDTYdi7ymgfyX0Izj5EZz_xmcUvLQp4N7TjcAjk_mkb2oEu8ADC4vsnMfKEzLFomK-Hdpinx3l6mBfU3wf99zyJYQjRnidFWo4dGGfliPNigClcFSM9i6txIE_gAIs8T0d6mVR2AILTg30oA6bP-VvZtsjGYlMj_GQUwhfqhtBNP4EIbjRWyOBdBDcGL2zNwqx3bAfLtmOcqkXTH48Lo3rxZOX2jJPFFu9HbMsQXwJYko3HRnYGLDpbWmnApewWe4qNVOxIgaKkx5QsOQeLB6-J7Iyv435YGbv0pGF1BDdfFRK6karVEdz8Oawbwc3vUnZjf4k7Wy8kcVzZAgjUUnJXh1l3pesZ7z3S2pM7JTHV2o5GsJyzR3AdwcrKWruSkkkBoiL-c7P8ixGzs0cue-oKHVhEsLDHrz_vORIAS21AKwnlAAkCON0i_DqlEqbRVlGbijCCK9AgxulQUt7__mn98Anovm6ZAQjU_RYo2klb10qwM6Zz-sNNBDdbZnZ9vcSynftv0Sn5v9Q-YTeulLXec7owgXlPqKt_sUJ6B8bUCss_GISfAOnbbsy1eOmLnXsltwq1AKltb08s-icD_QuyLgkqfumFsEW4nWgD0vQC2-DZAM-EROmtkAtmjyucoj1dNFJhShZS8NcovRHyxHo2FKWfbGpACKSw8extKQ3hSamxbobvKPW3auLUGMy00n1lHlTwBUJ8iOM4LrIVofmqigmJJ7tDv4b9cK-YMC78X92tZronFHp5lNooilqX7beACeOL_vIXZkAEb-IDbBJCSGydPtqUzG0qaUKbSzZ96cUD2wrE_xsJwqk9PZQfp3ad0GamNjxXO81yMFMwgmXwrCfrcG-L3d8oKA2CVjVEMSwzmMM4GOVvnIeyeCyy6cscO4CXWi4Lp56bMlMum8usiqrB4PGxMztFEXl8Ypw_srbzxTly6baM4EZ09pCxmbItcZSusyxK16viJD__Hvl2GwjEvyl55d5yTbxRXJI8nfZNcWV1Jm517txsVYCtdvFwkjyM4Gbpeq-aUHvK3XRSM5sICjFNnWy4itL1xAflXDQsV00KUG1v7k6UIT58juS1S6zFJwnVGwlJDR4Ff-QSkUci7fZ3spg7_G0sudVbjLy4JFlZlULY7U6K5wLTilbFj6WSmzKmkpU5257ZCmFclX_HA_kj9m3SpBWuypk98MyepsyT_2yP6sVvbcdntmzGB5K7i54GHjDiSH3aS95fHLdr_CYa-Wbgq3vlMx6ULvLcyZYJZKT6qih9M3rDJX7aKPrcU4FfvYD1pUV-Z7VC6jLHHbVnVUpumNFvVlhr3bedtesW4d1bDaxxa2yDb2V_RgJt7a3wjOuPzrCWHd2t5wttkXr61DJjLnDeK9kwTh_6tp3q-1H5g8s8meVPep4_zewR_H7-fF_urAXir5rpwXHp7YVJ9rBQfKAPmskj2_ogm_ogLWDSNMXEBkINYjyED2n92Z6UL1vyJnXmvvsp19j__2yfE0SbZn4bzmfHjRyVdEWnu8S6-Vvq_0s9CUma0xWdubI4y948Kf-O7P1lIfiXho7UMCnnm2B1tglWOK4nJnx2FdxXOahrI7ImqDNSXXaGn_BDrghTPjiHMxzXM0-U53fgjPxYDg-m336n_37CQe-l4D_D6wTRjMzTrzpLv5zk5DtuAJdc_W_wICQpJDmZuhDOXmBAWtT5LG9V75LunnWUMzF_b_FgFBPbL7YMf5u07xylPyO8c3L-0xnYH-7PuaTkf_Sm682G8QtC_l_D75izVgq9Wuo0eM4nvN8y8fZ5cOLXhnja-KYsvd1LRsDMjVbWjQ1dOGtXl54ysjOPRspwB_FW_I___vcu159UsYZRNfDVduSH2w_JzLwp8_nehsk8MXMCkwTIzny2NfhHqEQRTGaVBoRnrwcqUsXg8dEW7I_aIGUeMeL8cXxLgHX_9j1GeFNyadJyF6Xr3L2AKU6rpuer0iwGbg4TzJwv5KGVvnDS_YsJ99slGJ-EZpeEzky5ZMVF4emqsmqfZOdnkUtjlAMv9WMCF8coHwN31Nar4Lc_vgImtFH98DK3xFJR9zKeEp_mv06v979D_ZckteTus87Z5wc_sJTKqnC0fytKy91ff91fkeuUVGmFruh1soJJmadZCa921xkhMSExynBcIoSrguAiI1UFkwoVeYqv2DWMYRavYAbjtIzhsiqSjJAypmVZwSbHURbTFjG-tIbYta_cN47rJI6zIrtyv6XRw48O1bUzt-63OspizrTRp3mGGe5-nui-20T5HfjRDzhXveLXP_9NJqi8v4b_FwAA___MGdz6">