<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/106417>106417</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>
    Tested using 190449a5d2a9ddfc2180dce11714a4443f0f29f0

Testcase:
```c
char a;
extern short b[][6][6];
short c;
long d;
long *e, *f;
void g(char h[][6]) {
  for (short i = d + 9; i < 4; i += 3) {
    a = ({ f[i]; }) < f[i - 1];
    for (int j = c; j; j = ({ h[5][i + 2]; }) ? e[i - 1] : 0)
      ;
    b[i][i][i] = 0;
 }
}
```
https://godbolt.org/z/EGdEPbKad

IR 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 void @g(i16 %0, i64 %indvars.iv52) #0 {
entry:
  %conv146 = sext i16 %0 to i32
  %1 = sext i16 %0 to i64
  %invariant.gep = getelementptr i8, ptr null, i64 -8
  br label %for.body.us

for.body.us: ; preds = %for.body.us, %entry
  %indvars.iv521 = phi i64 [ %1, %entry ], [ %indvars.iv.next53, %for.body.us ]
  %conv149.us = phi i32 [ %conv146, %entry ], [ %5, %for.body.us ]
  %arrayidx.us = getelementptr i64, ptr null, i64 %indvars.iv521
  %2 = load i64, ptr %arrayidx.us, align 8
  %3 = sext i32 %conv149.us to i64
  %gep = getelementptr i64, ptr %invariant.gep, i64 %3
  %4 = load i64, ptr %gep, align 8
 %arrayidx31.us = getelementptr [0 x [6 x [6 x i16]]], ptr null, i64 0, i64 %indvars.iv521, i64 %indvars.iv52, i64 %indvars.iv52
  store i16 0, ptr %arrayidx31.us, align 2
  %indvars.iv.next53 = add i64 %indvars.iv521, 3
  %5 = trunc i64 %indvars.iv.next53 to i32
  %cmp.us = icmp slt i64 %indvars.iv521, 0
  br i1 %cmp.us, label %for.body.us, label %for.cond.for.cond.cleanup_crit_edge.split.us

for.cond.for.cond.cleanup_crit_edge.split.us: ; preds = %for.body.us
  ret void
}

attributes #0 = { "target-features"="+64bit,+a,+c,+d,+f,+m,+relax,+v,+zicsr,+zifencei,+zmmul,+zve32f,+zve32x,+zve64d,+zve64f,+zve64x,+zvl128b,+zvl256b,+zvl32b,+zvl64b,-b,-e,-experimental-smctr,-experimental-smmpm,-experimental-smnpm,-experimental-ssctr,-experimental-ssnpm,-experimental-sspm,-experimental-supm,-experimental-zacas,-experimental-zalasr,-experimental-zicfilp,-experimental-zicfiss,-experimental-zvbc32e,-experimental-zvkgs,-h,-shcounterenw,-shgatpa,-shtvala,-shvsatpa,-shvstvala,-shvstvecd,-smaia,-smcdeleg,-smcsrind,-smepmp,-smstateen,-ssaia,-ssccfg,-ssccptr,-sscofpmf,-sscounterenw,-sscsrind,-ssqosid,-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,-zvl32768b,-zvl4096b,-zvl512b,-zvl65536b,-zvl8192b" }
```

Command/backtrace:
```
> /scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt -passes=loop-vectorize -S reduced.ll
opt: /scratch/tc-testing/tc-compiler-fuzz-trunk/llvm/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:7359: llvm::VectorizationFactor llvm::LoopVectorizationPlanner::computeBestVF(): Assertion `(BestFactor.Width == LegacyVF.Width || planContainsAdditionalSimplifications(getPlanFor(BestFactor.Width), BestFactor.Width, CostCtx, OrigLoop, CM)) && " 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 -S reduced.ll
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 "g"
 #0 0x0000640a195798f0 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x30178f0)
 #1 0x0000640a19576d0f llvm::sys::RunSignalHandlers() (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x3014d0f)
 #2 0x0000640a19576e65 SignalHandler(int) Signals.cpp:0:0
 #3 0x00007aac19442520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007aac194969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x00007aac194969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #6 0x00007aac194969fc pthread_kill ./nptl/pthread_kill.c:89:10
 #7 0x00007aac19442476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #8 0x00007aac194287f3 abort ./stdlib/abort.c:81:7
 #9 0x00007aac1942871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x00007aac19439e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#11 0x0000640a18546ac9 llvm::LoopVectorizationPlanner::computeBestVF() (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x1fe4ac9)
#12 0x0000640a1855cedb llvm::LoopVectorizePass::processLoop(llvm::Loop*) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x1ffaedb)
#13 0x0000640a1855fef1 llvm::LoopVectorizePass::runImpl(llvm::Function&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x1ffdef1)
#14 0x0000640a18560567 llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x1ffe567)
#15 0x0000640a173c0a96 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+0xe5ea96)
#16 0x0000640a19384d4f 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+0x2e22d4f)
#17 0x0000640a173c3c26 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+0xe61c26)
#18 0x0000640a19383acb llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x2e21acb)
#19 0x0000640a173bfec6 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+0xe5dec6)
#20 0x0000640a19381b0d 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+0x2e1fb0d)
#21 0x0000640a16be9da6 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+0x687da6)
#22 0x0000640a16bdbb31 optMain (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x679b31)
#23 0x00007aac19429d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#24 0x00007aac19429e40 call_init ./csu/../csu/libc-start.c:128:20
#25 0x00007aac19429e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#26 0x0000640a16bd1ee5 _start (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x66fee5)
zsh: IOT instruction (core dumped) /scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt
```
https://godbolt.org/z/W3KqbcKrb

Found via fuzzer

cc @fhahn 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkOl1v4yjXv8a9QYls_H3RizSdvO9od7SjndE8lxUG7LDF4AHspvn1jwA7sdN0d2b2mUqrlVpzOJzvc8CAg7RmjaD0NkjvgvT-BvVmL9Vth4xi-HGl2CD1TSXJ8-1nqg0loNdMNCAqwyQpUUogKgmpMYyKkGAaRXmUoCRJ4jqsYVmHQXgfhBv_tAIw0jSIR0SQhf4P-z7eIwVQEN_5Lj0YqgTQe6kMqLx9QXqXzZqJ1NPgU59L0QCy7AZwQwO4tW19GhkkI6AJYOF075dKYAmCfCQEoJYKBLDwqhgI4ntAQADvQBnEdw6xBckIwjs7HF9IAAA5tgAWQX4H6iC9Y94LEOReXbz1aLAC0dxByzwawIQBfzg51l_wh3vM5VovUu-GMwXASyU7QGdKQBBvQBjA8qwKgIXmarJ00Tid4ZnQivd5PQFTgn13b0ynbfbhLoC7RpJKcrOWqgng7hjA3bv_I-8-Vr8gMq-a978D82rhcD60gKkRG9-BD5L0nL6_H-ORK0p6TMm6wgHMPZlBqqEGEGQQR8-yNyMtpKs2iDd01QXxJkvcY8VOQASLIN5EsFiJGHrcJ4uDcCHWKNZxOolUTOMhS1a9eBTySaw4E_1h1Yj-xOafhNZMUOCqMUhCW5AsykAA09CWLMsSCzNBBqT0mg0pdImEcXiuLyqMej6FCFgGLMUQJZmzRtODAZNQYCRgMZyRRq8QZcmMiIkBKYaEWTe0cwwNNZTTlgrTGQVYYa21kOg5nyxfFZOISgGOKsqtrFqqtV1X1r2eR2KOjje2DEGnKNFjRBdsbjKn3u-5kecoea-6PfMhTO-cq3NG4Cb6dho7M68FPZg0Hmlnah3HZYxLNzDpiuEkb8zAn2hM_1IDUgo9M3KYVFzEPEuuBf0yEDN50EnhEpE581KRxSLOGgGKGWc8KxLr48L7F9XySo0sVC4qamZ7PJOTvGbvyLK0c-ZHHF0PWZDeheBgm-zcsMi_WO7H9FwG9LWJGL06Qa-jR7-0kYq6qRZeyYCz_OwbvFreY4U6BxEhrxo3j2XqqI3qBX5JPwl8sTjgtpsiyXDbAc3Nq9rC2WRn0Znbjl2d_Jd4LAVZnwDMKRJ994AVMw-UNHStO87MlVXjm_n-alkZ7VfUuAX58p3mnsgYxareUD2uwlZMbic09C-CVU2R6RXVdqWP7-0T3mVJxUwAtwG8Q77BviG-qX3T-kZRjg4eHHxzZFirCaypwJSNvbbt-QgONIb1DD6c4CwhM7iewScaHsGiOnVgmp07MTzDWWLhlXtQ9zh0VDE7wRBf6RYbdQXbdu0VrLiG1Vcl6Ou015D9FeQRYaSvYDnSL5UdGa4Z767j9RUxQ4Vj-DIYx-GxcdR7-9B7LHthqKLiyfcbZDrkQTMgPoKDPqMHvRgwA8XEdVrEPLbFhHLajLBWTIwEtGs7D2mDDKXCdfTEpzGumwnqfMS1xrLu2nqCF9bqmXD9VWo2ggvp2h4djIcNHtuTBzP7dZ8lB-7AARE6Ab0HKqRGlH1JjGQCddKLHrqqddABD4j3I1SxE2BaJFg3dil_GqEW4Qmi7Qhp1jqLDrrG1G40PTzgboJqoTBn3aH-Wp9QTy3C-OvXrxPiq-0TSRb9r3IcZzWzjjONkSKES0Hn-Jr3en_Gmj1FpEIzuJrB-gzjVs46UpBWDmdE3dKWkcMZMTnvO5eDtO0QU2eEfhYz8oH4yB8GW9gCWW2y87Y84b2jPKIIFkp7MEsmCHkrj6jaIw9wpUeGFkVukVkd0dNI7x0_ep-PlSesHsfu49Q_-NbzYM-DPZEvsCOmvql908puBKbWOXQkTHhZtRdSV3XLhAf3Y3NCTLT7OTCNMjyujEeGK9meoO4EHUcIo1aiCWb1BHE9MWHl6_DIsPAz88hsyD20Z8IIw8-dDvUT_b4bZUz-PvqnGBsytnRsvYuPXsejHhs6kulx2IfKaJ_JYUzOMGZnmMXMwk8tGuH91J6Gx0QOj83YTniBJ2BUPjyKE81YORaa-PXUTnz6xKcnvtH8YbR_4FEIxxQNPMri4tSBYVJMcAzz7NRJwjKb4DSCE5ilaXzCF1FpByB47ezrn1vZtsgmYFch_GgUwlcOtdNp9h0I4E5jhQzeB3Bn8MoehJkNie1g2XaMU7Wq--NxZbd0j1ZuzzhZNXg4wfaM7A-eFmWTsJOdAasOaU11EN9zKbvVQLGRih0pWH0C06mZc2-L7IzbNX2_OVb5rGFVAHefFRK6lqrVAdx9mfQGcPerlN2pv8adPYjncVpa3U5CvAnizUSBDJNih2xnNjqX4Sg-ciQEVX7UGtkbeke1-bIL7OndCd9oTZUlBjb8sLDjXvL6P4yYvd3e2R3er7RB-PnLbsLm2yDfgo4jsZXCICb0hhBmBSH-ibUdZzXDzgodwKKhxhqzk-qKCmsJ3IKX6C3YSm22xi424DfFGuuhQ39wPCUIYBZAe2SH4ItVALDUBrSSUA6QIIA7q-dYwjRqFLWzBQYwBzVinJK1T_bHX99tPr0Duq9aZgACVd8ARTupjD0YXNzhMLPvqzWW7TLXq07JP6jdBOyY1r3dBe-cLUxg3hMKzJ4CrJDeg9NEGNV_Mgg_AtK33WlmhGt_J_VRyUahFiDV9HZ3pX-wKH_KHIlGI3_vhWCiAZbV5qTuBbYVEMBiKSSIt0KumN1ecYoGuqqlwpSspODPQXwn5Jn0YiiI37nUQyCFzWjPqbtsOls03S7BV4z6n1rizJjctNKbk35_OAoPYRiGWRKiqEzzsqjD2YTVz9oDHxUTxmX_s1sXYXEmUujpQWqjKGpdtW8BE8bXfvETCyCAd-EhDqO8qGf3owGMowufMhLW13z6vRefWCMQ_38kCKd2f1O8ndkJCeuF2fDSbJqlYGGgv1-2Jnq0Hpfh0P2fBMWjoBwhHJVJAlMYjk75Nf5QZA9ZMr_vtAN4reU6c-Y5loVxyVJmmZU1Bg8PndkrisjDI-P8wa6p7hrHLapgHcCd6Ow2aDcnW-Mg3iSJfXtkZ_npt8i3c0Ag_qeSc3cRPItGdk3ynO1PxRXlhbj8MrhJnoFGu3w4SR4M4G7tes-aULsP33VSM1sICjFNnWyYB_FmFoNiKRoWeR0DVNm13YkyxKfPobx1kfX4LKF8ISGqwIPgD1wi8kBki5jPC3Pb051Ft7rByIuLotyaNKbdzqRwKTAuaZl9Xyk5llMpWZmL6VmkSYZw-Xf2CG8xX6OaJgiXCz_g0o8UU1K94gf9iPS46HRKYqq13ycUS_IAbt7MnxpRUi38iS_8qWkd_bU_qhfv244vfNmd3qrZ2_lDaB0t_EmW_mRhmuXf5M_rvmxn_BuB-LNm-gMSqLHlub3CZN_AbxgDmmb5IgbpPAZ5jENUZjMfCDWI8fENj7T-YDeg1z1Z-P4ydj8UGvv3z445TSm6WN6yxWs8LhKSzHcfLsx_Zv6_NJKQQkiSehHK_KJ6Ywz_F9X701LwL00dzSIMl5OguJgEMcLzd6P_IcBnOZlrM7IhqDNSXQ-GZ_iuUIwsb1zDEcLLt2q5rOGqpvj7anhyffuN8fuBAL1Wgv-MqNOUULwoPxhelF9UheQbFoBrof43RBDSqK5CsgjhYpeeVbQkaF63qndF95F1lDOxvA_4ZBQTze-0vla0L2Lx2X2R_YDw3snZXBv9lVUKqef3opZ-s3lJJSX_rTddb3aMXxHyt4ZfcWejFHq22HnyXEx43zDx8n1wpteGeNzp-ine-l8XzcNoZd3Z1NmDv6vvK28Z2ZkHI-W4gngvfvEfAV-l-kIVqxlVE11lR767fZPKzIqcoOXchsvCJFUVR0B25oM9276FSXlZxYuTBry4cIElKUPw8GAPwg_aIGUeMOL84XT6xrp_eT8w3kBcY1rvg3iTuouN7Kw1udRKkxA4HiaYuVTkQSt95aT7A7_72RwMz0LTa0IXrlzz4qrwOC-t2WfZ2UXmIkpT4KW-SeKymtL0lLijtlEF73_7DJjQRvXTDWmBpaLujpsSX-Y_z64f-SHmf-Jfvlb4F1XNv13tZC8IGBgC1hCq5mMYgyAJ6z3aC3BDbmNSxiW6obdRDpMig1FU3Oxv6zyPwprmdRgVNKQ5oRSirMpgDcsEleUNu4UhTMICFlEGo7RY1zUpEU1xXoUlrqo4SELaIsbX1ldr7437unAbhVkS5TfuZ0Ta_ZIZQkGfgBsNIAzS-xt16wJU9Y0OkpAzbfRZjGGGu59Auw8oQXo__yT0t7-r3PSK3_74h5PRu-EW_jcAAP__DA0ZlQ">