<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/114860>114860</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[VPlan] Assertion " 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>
Testcase:
```c
extern char a[];
char *b;
int c = 40502824327348188;
long d[9][9];
int main() {
for (long e = 0; e < 9; ++e)
for (long f = 0; f < 9; ++f)
d[e][f] = 6032102684657866;
for (unsigned char f = b[4]; f < 18; f += c - 216)
a[f] = f % 2 ? d[f][f] : d[f][f] + 2036854775807 > 0;
}
```
```
/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/clang -I/scratch/tc-testing/compiler-fuzz-ci/csmith-build/include -fsigned-char -fno-strict-aliasing -fwrapv -march=rv64gcv -flto -O3 -fuse-ld=lld red.c -o rv64gcv.out
```
Reduced testcase:
```llvm ir
; ModuleID = 'reduced.bc'
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.body15
for.cond.cleanup14.loopexit: ; preds = %for.body15
ret i32 0
for.body15: ; preds = %for.body15, %entry
%indvars.iv1 = phi i64 [ %indvars.iv.next, %for.body15 ], [ 0, %entry ]
%tobool.not = icmp eq i8 0, 0
%cmp24 = icmp sgt i64 %indvars.iv1, 0
%conv26 = zext i1 %cmp24 to i64
%cond = select i1 %tobool.not, i64 %conv26, i64 0
%conv27 = trunc i64 %cond to i8
store i8 %conv27, ptr null, align 1
%indvars.iv.next = add i64 %indvars.iv1, 4
%cmp12 = icmp ult i64 %indvars.iv1, 14
br i1 %cmp12, label %for.body15, label %for.cond.cleanup14.loopexit
}
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-smctr,-experimental-ssctr,-experimental-zalasr,-experimental-zicfilp,-experimental-zicfiss,-experimental-zvbc32e,-experimental-zvkgs,-h,-sha,-shcounterenw,-shgatpa,-shtvala,-shvsatpa,-shvstvala,-shvstvecd,-smaia,-smcdeleg,-smcsrind,-smepmp,-smmpm,-smnpm,-smrnmi,-smstateen,-ssaia,-ssccfg,-ssccptr,-sscofpmf,-sscounterenw,-sscsrind,-ssnpm,-sspm,-ssqosid,-ssstateen,-ssstrict,-sstc,-sstvala,-sstvecd,-ssu64xl,-supm,-svade,-svadu,-svbare,-svinval,-svnapot,-svpbmt,-svvptc,-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,-zacas,-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 -f
opt: /scratch/tc-testing/tc-compiler-fuzz-trunk/llvm/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:7519: llvm::VectorizationFactor llvm::LoopVectorizationPlanner::computeBestVF(): Assertion `(BestFactor.Width == LegacyVF.Width || planContainsAdditionalSimplifications(getPlanFor(BestFactor.Width), CostCtx, OrigLoop)) && " 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 -f
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 0x00005f3d9fc9dc00 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x3169c00)
#1 0x00005f3d9fc9b00f llvm::sys::RunSignalHandlers() (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x316700f)
#2 0x00005f3d9fc9b165 SignalHandler(int) Signals.cpp:0:0
#3 0x00007abb28242520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007abb282969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x00007abb282969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#6 0x00007abb282969fc pthread_kill ./nptl/pthread_kill.c:89:10
#7 0x00007abb28242476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
#8 0x00007abb282287f3 abort ./stdlib/abort.c:81:7
#9 0x00007abb2822871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x00007abb28239e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#11 0x00005f3d9ebfb878 llvm::LoopVectorizationPlanner::computeBestVF() (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x20c7878)
#12 0x00005f3d9ec12dec llvm::LoopVectorizePass::processLoop(llvm::Loop*) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x20dedec)
#13 0x00005f3d9ec15f01 llvm::LoopVectorizePass::runImpl(llvm::Function&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x20e1f01)
#14 0x00005f3d9ec16577 llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x20e2577)
#15 0x00005f3d9da0cba6 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+0xed8ba6)
#16 0x00005f3d9faa518f 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+0x2f7118f)
#17 0x00005f3d9da0fdd6 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+0xedbdd6)
#18 0x00005f3d9faa351b llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x2f6f51b)
#19 0x00005f3d9da0bc66 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+0xed7c66)
#20 0x00005f3d9faa407d 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+0x2f7007d)
#21 0x00005f3d9d20ca8d 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+0x6d8a8d)
#22 0x00005f3d9d1fe911 optMain (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x6ca911)
#23 0x00007abb28229d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#24 0x00007abb28229e40 call_init ./csu/../csu/libc-start.c:128:20
#25 0x00007abb28229e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#26 0x00005f3d9d1f4e65 _start (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x6c0e65)
zsh: IOT instruction (core dumped) /scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt
```
Found via fuzzer on Oct 24th
cc @fhahn
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWl9v46q2_zTuC3Jk47956EPSTnRHd49mtGc097HCgBNuMbiA3TSf_giwHTtN95mZfabS0ZZas1is9WP9wwY7SGu2F5TeBtk2yO5vUGcOUt22yCiGH0PFeqlvKklebr9RbTDSNEg2QXQfRJsgj_wf9n16NFQJgA9IAeThgmTrxxwzgJtq4jBhAAZBcg_SKItgCdMEFklaxmU5yXAp9oAE2XZtsYZmDtAgJgJYBnANgmLgA1BLO1fptKmbIgqSrSPvwNqSAdwGcEsDuB51llr1Wau-1KoXWsDZR719dZDdO808SmAcwbxM86wo83wyepqmEy7uxIfLz1cF2Tb1Lg7TxuVAw60VwCAEMM4XBqD5vFYyAxAEyc7ZVS_s2rzmwS2AUZKXWVoUWRkVIEg-OL-HFBf3F7m-3oU7jRUy-BDAncGhodowsfcdLJuWcarCujudQqM68RjAXdUxTsI97iea874JORPd0bJsXneYI7EH4ce38ZfgmFmWbpg5hA40gDsmMO8IBWHtAx66gIe1kKG2NW5CxBnSzE5UPyvU9iBskMKHILlXfZ7ucQ_CmhsJws8JCOtO05CTILnnnABFyQqDUIJBciU7cz1Cs-uflHSYEmDeXFA2FICpgZtswSdJOk4_-iQHsFAeYlXhABZezCC1pwYQZBBHL7IzgyykYRMkGxq2QbLJU3cJ2UTEsAySTQzLUCTQ875aHoQLWKNYy-kIqZjGfZ6GnXgU8ln4rIV70U1q_kpozQQFLIEgSKP5YoVJdF6xVBj1MkUBVApwVFFua7mWamXvPnE2x7VcLAVZYU6R6No4XXEpW3pkxla5jVirKNGDva9QAFDUOLOiS9hB7N-gwDvL8HYPiAHMmCA9UnrF-tjptAcGWJ6CINsuh1eCHs0AckYFdmFaZrYF0XwKN3CexshKSr4S0qeY4aYF9Amw0mtFM1HctDA9S-m98QYtbH2lJEUPc6d1okcDWHyGMtICLIWJE9WUUzwKn0204MOUHndkvJqxcDD2_oBnGsRNWY7C2khFrauTlsVrjQKi49zSiLO9APGg8DrsbhZEyBuBSJfRi-E5eh1_K3rxpFWpc7hiaMeulfIl-61avrgHuysyRrGqM1QPq8gWZ2ELDPq1GtYUmU5RbRdjcm-vcJunFbO5COAW-Qb7hvim9k3jG0U5Onqy982JYa1GsqYCUzb0mqbjA9nTBNYz-jjReUpmdD2jJxkew7KaOgk803lq6dBdqLscW6pYQ4VBPNQNNuo1V1_jnhBH-gqb4Zrx9jpf69f8vsIJfG3KqX_cO-mDvegD8g2WnTBUUfHs-3tk2mHI9IgPZK_P7F4vBkxPMXGdBjHPbTChnO4HWismBgHaNq2nmrbxhBgJJRrmKW2QoVS4jh4xNcb1fqRaHz6tsazbph7phSd6NrEeZ9Fj-yQ1G8YW0_mnrqcNHtrJ3ZmzusvTI3dkN4D2iNCR6DxRITWwmOiRF-8FaqWfom-rZqD61k93xD3i3UBVbCJMgwRrhy7lzwPVoFGroc1AadY4G4-6xtQ-wj3d43akaqEwZ-2xfqon1nODMH56ehoZT7ZPJFn0n-QwzmpmQ8E0RooQLgWd82ve6cOZaw4UkQrN6GpG6zONGznrSEEa2Z8ZdUMbRo5nxui871wO0qZFTJ0Z-kXMxHvic3Ds7fIQyM4mW2_LMz44yROKYam0J_N0pJC38oQqv4hOCKNhiCs9aDYozitPPg-KPgIn7_yp8oLV49B9HPtH33od7HWwF_K1d8LUN7VvGtkOxNg6z06ECY9Ve5C6qhsmPHkYmokxyh7mxDjK8HCbOzFcyWai2ok6DRRGjUQjzeqR4npUwsoX5Ilh4VfxidnYe-rAhBGGnzst6kb5QztgjP4--qsYGjK0dGi9i49-jkc9NHQQ08OwD5XRPqX9kJx-yE4_i5mlnxs00IexnYaHRPaP-6Ed-QKPxDB5_ygmmaGELDXq67Ed9fSkp0e9wfx-sL_ncQSHFPU8zpNy6sAoLSc6y0cygUU-8dNoPQ1kMRzJPMuSiV_GazsAwZvHLne9k02DbC52FcKPRiF85Qgxnh0-gN91OJOtAWHYIq3dVgTaXUvYU2ykYidq3RhPKZyDsPYGydbv0H_eJmvBrGFVAHffFBK6lqrRAdx9P0-9-0PKduqvcGvPPkUWr-3cDiHZBMlmlECGSbFDtjMbnWM4iS8cCUGVH7VGdoZuqTbfd_5UY8E3WlNlhYHNASztuEde_R8j5mC3a3bH9gfdI_zyfTdyi7uguAMtR-JOCoOY0BtCmAVC_CtrWs5qhp0VOoDlnhprzE6qK1NYS-AduJPa3Bl7owGfFdtbb9yIPXzlgd3fQwi-WxiApTagkYRygAQB3Nk25xKm0V5Ru0ZgAAtQI8YpWfmUfvnjw-brB6C7qmEGIFB1e6BoK5WxW_eDMa22IYO7AO72zBy6aoVls8xo2Cr5_9TuCnZM687uXXfOlvH0bg4UYIX0AUw1P0z_1SD8CEjXtNMiiFb-zcwXJfcKNQCpfWe3aPoXS-_nl8NyLVxbCPFg45-dEEzsgVW0Kak7gW2a3ZuoxYJK7oQMmd1_cYp6GtZSYUpCKfhLkGyFPIteDAXJB5d5CKSwCe3sQR7Cs1HTqR2-YdR_1BJnxuimRffvBeB0YksiEB2jKIqyOiHrGq8JjqLZwtQv2hNfFBPG5f-buwnC8iyk0POD1EZR1ATDoVMYX_3lbyyBAG6jYxLnaxxF59d0AUziC5-qKKqv-fRnJ76yvUD8f5AgnNp9Tfl-ZhdRVC_Mhpdmx3kGFgYGsBwi69l6uN1G7n8CSgagAlUVLGEKMxgNTvl7-bHMH_J0_irJDuCVlqvcmedUFsalS8x1vq4xeHhozUFRRB4eGecP9t5J3fnMldsqgDvR2u3Pbi62wkGySVP7lMjP-NmP4NtlIBD_S-TCvWObRSO_hjxX-0u4cn0BV1wGNy1ysNcuHw7JkwHcrVzvRRNqN-K7VmpmC0EhpqnDhkWQbGYxKJfQsCzqBKDK3t0dlCE-fY7lrYutx2eE9SuEuAIPgj9wicgDkXb5OyzmtqU7y270HiMPF8eFNWk9vmlO4mgJmKzpOv-5UnIqUylZzMXypFVdlUX5d_YC77FeYYSLsigXfizWK8UxJBS_4Qf9gvRw02mVxFRrv0col-IB3LybP4QSihf-JBf-ZHUU_3t_VCc-Ni1f-LKbHqz5u_lD4zqKF_6kF_7kWVH8kD9v-3I3098IxF8005-QQHtbnndXlOxD-B1jALOiWMQgm8eAoAhXKJ_5QKhBjA9PeKT1J7sFve7JwvfXsful0Ni__-6YU1JWaHl7yxePcYSyuJzvPlyY_8r8f2gkYV3EcVkvQllcVG9NyH-ien9bCv6hqaOkImS5CMqLRZBkcTVzwX9j_SZHc21GNgS1RqrrwfAKPxWKQeV9azivs7haRGJ9UcMVzn-uhkfX734wfr8QoLdK8L8j6pQUOF-UH4wuyi-NCvIDN4Brof4nRBDWRRQVZBHCxS6dwAijch5C1bmi-8JayplYvg_4ahQT-z9pfa1oX8Xim_uS-gnhg8PZXBv9g1UKqZePopZ-s3kpJSX_3Jm2MzvGr4D8reE33NkohV4sd548FxPe7Zl4_Tw4y2tDPG96A5Xc9ZIRsAijxdra1NmDv6vvK08Z2ZoHI-VwB_Fe_K__UPim1HeqWM2oGuUqO_LT7btUZk5KVC4Lc3HsInFN13EMZGs-2bPte5iE0TpenDTgxQsXuCbrCDw82IPwgzZImQeMOH-YTt9Yd6_fDwxvIK4prQ5Bssnci438PGt6OStNI-B0mGDmciJPWvTQofsDv_tFEozOoNk10IUr17y4Cp4Ua2v2GTu_yFxK8wx41PdJXETzbErcSduogo-fvwEmtFHd-JK0xFJR95abEl_mv8-ut7887WQnCOgZAhaZKiAF-IwNgKk5zOUwBkEa1Qd0EOCG3CZknazRDb2NiyQqsjjOspvDbZzHpKjLbJ1FUU7WhMZxVtYojpIE57gmN-wWRjCN4yiFUQyTdBWXWQRRjMooLmGGkiCNaIMYX1lHVlLtb9zHg9s4Tss8unE_sdHuh60QCvoM3GgAYZDd36hb533V7XWQRpxpo88whhnufhHrvo8E2f38u87f_mxy0yl---vfRQbv-lv4rwAAAP__IsaN6g">