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

C testcase:
```c
char a;
unsigned b = 221;
short c = 35;
char d[6];
int main() {
 d[0] = 4079751220931503459;
  for (short e = 3; e; e += 3)
    for (short f = 0; f < 1; f += -1832)
      for (long g = ({
 __typeof__(0) h = !d[f * 1];
             h;
           });
 g < c - 3; g += b - 219)
        a -= 8;
}
```
`/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 -w`

LLVM IR:
```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.body14.preheader48

for.cond.cleanup: ; preds = %for.body14.preheader48
  store i8 %1, ptr null, align 1
  ret i32 0

for.body14.preheader48: ; preds = %for.body14.preheader48, %entry
  %e.047 = phi i16 [ 0, %entry ], [ %add27, %for.body14.preheader48 ]
  %tobool6.not = icmp eq i8 0, 0
  %conv7 = zext i1 %tobool6.not to i64
  %0 = lshr i64 %conv7, 1
 %1 = trunc i64 %0 to i8
  %add27 = add i16 %e.047, 1
  %tobool.not = icmp eq i16 %add27, 0
  br i1 %tobool.not, label %for.cond.cleanup, label %for.body14.preheader48
}

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-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,-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:7389: 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 -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 0x000061eac73d9f50 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x3010f50)
 #1 0x000061eac73d735f llvm::sys::RunSignalHandlers() (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x300e35f)
 #2 0x000061eac73d74b5 SignalHandler(int) Signals.cpp:0:0
 #3 0x00007496e1242520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007496e12969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x00007496e12969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #6 0x00007496e12969fc pthread_kill ./nptl/pthread_kill.c:89:10
 #7 0x00007496e1242476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #8 0x00007496e12287f3 abort ./stdlib/abort.c:81:7
 #9 0x00007496e122871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x00007496e1239e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#11 0x000061eac63ad810 llvm::LoopVectorizationPlanner::computeBestVF() (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x1fe4810)
#12 0x000061eac63c45bb llvm::LoopVectorizePass::processLoop(llvm::Loop*) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x1ffb5bb)
#13 0x000061eac63c75d1 llvm::LoopVectorizePass::runImpl(llvm::Function&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x1ffe5d1)
#14 0x000061eac63c7c47 llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x1ffec47)
#15 0x000061eac5222626 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+0xe59626)
#16 0x000061eac71e5cef 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+0x2e1ccef)
#17 0x000061eac52257b6 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+0xe5c7b6)
#18 0x000061eac71e4a6b llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x2e1ba6b)
#19 0x000061eac5221a56 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+0xe58a56)
#20 0x000061eac71e2aad 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+0x2e19aad)
#21 0x000061eac4a4fde6 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+0x686de6)
#22 0x000061eac4a41b71 optMain (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x678b71)
#23 0x00007496e1229d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#24 0x00007496e1229e40 call_init ./csu/../csu/libc-start.c:128:20
#25 0x00007496e1229e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#26 0x000061eac4a37f25 _start (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt+0x66ef25)
zsh: IOT instruction (core dumped) /scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/opt
```
https://godbolt.org/z/x316voG8q

Found via fuzzer

Related/prior issue: https://github.com/llvm/llvm-project/issues/106780

cc @fhahn
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWl9z3Kiy_zTyC6UpCf1_8MPY3rk3dZPaVJLKfZxCgGa4RqAAku359LcASSONx3s2uyeuOrUpRzRN94_upkGABmnNDoLS2yC7C7KHG9Sbo1S3HTKK4cdQsUHqm1qSl9tvVBsmDqDX9pnUJM5jWpWkrEgS51UeRbCq0qKI66LI4ybGRVpmVRA9BNHWP--BodpgpGmQjKwgj_wf9nV8RAqgILnz1V446wioQZA8AAjjuUkfpTIAO36SzWwHQILsLg-yh5nLhAEtYiKAZQArEBQj30lGQfbgYNKoqIoshjCqkjiLkjSrZgQAGqlAAEvfL_X9BskdoO4BAnjnWbCaNC50GqcTWXFL3oN4JL1mGJcJXGnP-lyKAzg4devBbP1-b146Kpv9PoBlZD07jkKxdcxCb0G8DARY_jteYwfFgzVibjk4UzEIvbeHydwahADG1YXBACAQ2uZyRrCA67E-V-FOY4UMPgZwZ3BofIr5CpZtxzhVYdOfTqFRvXgM4K7uGSfhAQ8zzfnQhpyJ_tmy7BjvMEfiAMIPb-OvwTGzLN0ycwwdaAB3TGDeEwrCxqdg6DIrbIQMtZ0bJkScITcXwuZJoW4AYYsUPgbJgxry9IAHEDbcSBD-noCw6TUNOQmSB84JUJRsMAglGCU3sjcgfDrHxj0_fvz-CXz48nqyWJcBUyM3uQOfJOk5_fAwjn6hKOkxJZsaB7DwYgapAzWAIIM4erH9eVlIwzZItjTsgmSbp-4RspmIYRkk2xiWoUig5321PAhXsEaxjtMJUjGNhzwNe_Eo5JPwoxMeRD-r-SehDRMUsASCII2WExQm0XmWUmHUyxwFUCvAUU05CGDWSLWxq1OcbjpFjxQRqtJy2YeVwFKQDeYUid56CWzIOkWJHg3-QxgAtJGKAlZayTiA96AzCoiec0sjzg4CxJOsosb5E13acAX-JyyB97bRB2LsydY3UVo4ze7IAItzEGR3IFpKAzv7bT27szxECCzG9utdOYVzF0bWUvJ8I6RPGIbbDtAfNhqun2ghi6UYvDkn-mwAiy8BjAQ2s84akZPm-qhsw4xhgaeI2pg7KbsC4EkscljlAsp55gQRIT4WY4CWaGeLXnvkVeYIzZ7VauWKVbTtqxxcZdhl45sJOq-M7omMUazuDdVj_tuMKOywQT_LwoYi0yuq7TRKHuwT3uVpzaw9AbxDvsC-IL5ofNH6QlGOnj05-OLEsFYT2VCBKRtrbdvzkRxoApsF_TzTeUoWdLOgZxkew7KeKwk803lq6dA9qHs8d1SxlgqDeKhbbNQVbtu1V7jiGldfRdDXZa8x-yvME8JIX-FypF93dmK4Yby7ztdXYIYaJ_B1ME7D48FJH-1DH7HshaGKiidfPyDTIU-aAfGRHPSZPehVgxkoJq7SIua5LSaU08NIa8XEKEC7tvOUNshQKlxFT3oa4-YwUZ2PuNZYNl3bTPTKWr0A1z-kZiO5QvdvWU8bPJazBwv7dZ-nz9yRAyJ0InpP1EiNLCYGNIoJ1EkPPXR166hnPCDej1TNZsK0SLBurFL-NFItwhNF25HSrHUWPesGU7vL9fSAu4lqhMKcdc_Nj2ZmPbUI4x8_fkyMH7ZOJFnVf8ixnTXMOs40RooQLgVd8hve6-OZa-x6U6MFXS9ofaZxKxcVKUgrhzOjaWnLyPOZMTnvK5eNtO0QU2eGfhEL8YH4yD8PNrEFsr3JztvyhI9O8oRiWCrtyTydKOStPKH6iDzBlR4VWhTntSefRnnv-Mn7fKq9YP04Vh-n-rMvvQ72OtgL-QQ7YeqLxhet7EZiKp1DJ8KEx2o8SFM3LROePI7FzJhkj0tiamV4XBlPDNeynalupk4jhVEr0USzZqK4npSw8nl4Ylj4mXliNuSeOjJhhOHnSof6Sf7YjRiTv4_-KcaCjCUdS-_io-_jUY8FHcX02OxDZbQfyWEcnGEcnWERM0s_tWikj1M5N48DOTwexnLiCzwRY-fDo5hlxsyx1KSvp3LS07OenvRG84fR_oHHERyHaOBxnpRzBUZpOdNZPpEJLPKZn0bV3JDFcCLzLEtmfhlXtgGCN89P_kwt2xbZsdjVCD8ahfCVw_W8lfo1xy3ZGRB2SGuq7flGyi4cKDZSsRMF01GEcxB-9YbIzri978-bYztfFKwO4O6bQkI3UrU6gLvvU78B3H2UspvrG9zZrX-RlJXt2yEk2yDZThLIMCl2yFYWrUsMJ_GZIyGo8q3WyN7QO6rN950_uljwrdZUWWHgzrilbffIm_9lxLgzut3cfaQHhF--7yZucR8U96DjSNxLYRATeksIs0CIf2Vtx1nDsLNCB7A8UGON2Ul1pQtrCbwH91Kbe2MXGPC7YgfrjWuxJ6w8gHbDC8F3CwOw1Aa0klAOkCCAO9uWXMI0Oihq5wYMYAEaxDglGz-knz_-tv36G9B93TIDEKj7A1C0k8pt-o_GdNqGDO4CuDswc-zrDZbtekTDTsn_o_aVv2Na93abu3O2TEdxc6QAK6SPYM71sfuvBuFHQPq2m5M_2vj7iM9KHhRqAVKH3u6l9F9MvV8yE-LRyC-9EEwcgFW1Y9L0Attxdnc_S5AguRcyZHYzxSkaaNhIhSkJpeAvQXIn5Fn0oilIfnNDD4EUdkR7e1yH8GzUfDaHbxj1b7XEmTG5adH96R_OS1USgeg5iqIojynCRUKqJosWM1O_aE98VkwYlwDf3OoHy7OQQk97qY2iqHUJfw-YMD79y1-YAwG8i56TKI6aLDpfkAUwiS98KpKsuebTl158ZQeB-H8jQTi1G5ry3cyOaJI1K7PhpdlpnYGVgQEsx8h6th7X28j9n4GSEahIq5zGMIUZjEan_GL-XOb7PF1eGNkGvNFykzvznMrKuHSNWeVVg8F-35mjoojsHxnne7t4UneScum2CeBOdHbfs1uKbXCQbNPUvibyM372Z_DtNBCI_yFy4W7SFtHIryEv1f4Qzr3IlnDFZXDTIgcH7cbDIXkygLuNq71oQu3Ge9dJzWwiKMQ0ddiwCJLtIgblGhqWRZMAVNvl3UEZ4ofPsbx1sfX4jFC9QohrsBd8zyUieyLt9HdYzO1Hd5bd6gNGHi6OC2vS9DkBJnG0BkwqWuU_l0pOZU4li7mannmCSBlHf2cz8B7zNW5oWsbRyg-49gOnWV2_4Qf9jPS46HRKYqq13ySUa_EAbt_Nn6bO7LFg4U9y4U-Rkfhf-6N68aHt-MqX3fxizd_PH5qReOVPeukPTos_5c_bvtwv9LcC8RfN9Cck0MGm5_0VJfsSfs8Y4LRYxSBbxiCDEOYwX_hAqEGMj294pPUnuwe97snK99ex-0uhsX__2TGnWZXD9fKWr17jMc0wXe4-XJj_yPx_aCQhjTGmzSqUxUX2ZkX978jeXzYE_9Choxku6vUkKC8mQYry5bvRf0n9Jidz7YhsCeqMVNeD4RV-KhSjyjvncI3y9Vu1usjhGGU_l8OT6_d_Mn5_IUBvpeB_RtRpVqJslX4wukg_iBD5EwvAtVD_EyIIaVwhRFYhXO3SU5Q2hC7zVvUu6T6zjnIm1vcBX41i4vDFLuavk_ZVLL65r66fED46nO211o-sVki9fBCN9JvNSykp-e-96XqzY_wKyN9qfsOdrVLoxXKXg-diwvsDE6_fB2d5bYjnzTdQyf0gGQGrMFqsOzt09uDv8vvKW0Z2Zm-kHFcQ78X_-K9-b0p9p4o1jKpJrrYtP12-S2bmZU7oem7Di8SM6yIGsjOf7Nn2PUwqyrpYnTTgxYULrEgVgf3eHoT32iBl9hhxvp9P31j3r-8HxhuIa0qbY5BsM3exkZ97TS97pWkEnA4TzFx25EmLHjp0f-B3vzuC0Rk0uwa6cuWaF1fBk6KyZp-x8_XIJUUDM-BR32XgctrAbB64k7ZRBR9-_waY0Eb10yVpiaWi7pqbEp_mv86ua1-QLu7xJaklNxupbI-nAO6ekzgf5H-VP5ZfqHayFwQMDAFrCFXLti-UI2N92XWKSQXcvb_1_a9_MYijvChXn8gwBkEaNUd0FDfkNiFVUqEbehsXMEujKoXpzfE2IQjHFa7zEpMSZrSKy5QkOEtrWpawRjfsFkYwjaoojSKYpOmmqUkCqyrCsEhRjesgjWiLGN9Yw2xMbpxJt3FUxEV8434QpN2vbCEU9Gl0FcIge7hRt86buj_oII0400afYQwz3P08132nCbKH5felv_355qZX_PbvRNt5N9zC_w8AAP__ZSK6cA">