<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/168709>168709</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [LoopVectorize] opt crashed at -O2/O3: Assertion "VPlan cost model and legacy cost model disagreed" failed.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            loopoptim,
            vectorizers,
            crash
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          XChy
      </td>
    </tr>
</table>

<pre>
    Reproducer: https://godbolt.org/z/E3jq9MPsc
Testcase:
```llvm
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

define <8 x i64> @backsmith_pure_0(ptr %0) {
entry:
  %BS_VAR_2 = alloca [6 x i16], align 2
  %BS_VAR_3 = alloca [7 x i16], align 2
  %BS_ARG_01 = load <64 x i8>, ptr %0, align 64
  store i8 0, ptr %BS_VAR_2, align 2
  %conv = extractelement <64 x i8> %BS_ARG_01, i64 44
  %cmp = icmp ult i8 %conv, 60
 %narrow = select i1 %cmp, i8 %conv, i8 0
  %cond = zext i8 %narrow to i32
 br label %for.cond

for.cond:                                         ; preds = %for.body, %entry
  %BS_INC_0.0 = phi i32 [ 0, %entry ], [ %add, %for.body ]
  %cmp7 = icmp ult i32 %BS_INC_0.0, %cond
  br i1 %cmp7, label %for.body, label %for.cond.cleanup

for.cond.cleanup: ; preds = %for.cond
  ret <8 x i64> zeroinitializer

for.body: ; preds = %for.cond
  %div2 = lshr i32 %BS_INC_0.0, 2
  %idxprom = zext i32 %div2 to i64
  %arrayidx = getelementptr i16, ptr %BS_VAR_2, i64 %idxprom
  %1 = load i16, ptr %arrayidx, align 2
  %mul = shl i32 %BS_INC_0.0, 1
  %idxprom12 = zext i32 %mul to i64
  %arrayidx13 = getelementptr nusw i16, ptr %BS_VAR_3, i64 %idxprom12
  %2 = load i16, ptr %arrayidx13, align 2
  %sub = or i16 %2, %1
  store i16 %sub, ptr %arrayidx13, align 2
  %add = add i32 %BS_INC_0.0, 1
  br label %for.cond
}

define <8 x i64> @backsmith_pure_6(i32 %vecext, ptr %byval-temp11) #0 {
entry:
  %vecinit9 = insertelement <16 x i32> zeroinitializer, i32 %vecext, i64 11
  store <16 x i32> %vecinit9, ptr %byval-temp11, align 64
  %call13 = call <8 x i64> @backsmith_pure_0(ptr %byval-temp11)
  ret <8 x i64> %call13
}

attributes #0 = { "target-features"="+avx2" "tune-cpu"="alderlake" }
```

opt output:
```
opt: /root/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:7181: llvm::VectorizationFactor llvm::LoopVectorizationPlanner::computeBestVF(): Assertion `(BestFactor.Width == LegacyVF.Width || BestPlan.hasEarlyExit() || !Legal->getLAI()->getSymbolicStrides().empty() || planContainsAdditionalSimplifications(getPlanFor(BestFactor.Width), CostCtx, OrigLoop, BestFactor.Width) || planContainsAdditionalSimplifications( getPlanFor(LegacyVF.Width), CostCtx, OrigLoop, LegacyVF.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 and instructions to reproduce the bug.
Stack dump:
0.      Program arguments: /opt/compiler-explorer/clang-assertions-trunk/bin/opt -o /app/output.s -S -O2 <source>
1.      Running pass "function<eager-inv>(drop-unnecessary-assumes,float2int,lower-constant-intrinsics,loop(loop-rotate<header-duplication;no-prepare-for-lto>,loop-deletion),loop-distribute,inject-tli-mappings,loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>,drop-unnecessary-assumes,infer-alignment,loop-load-elim,instcombine<max-iterations=1;no-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-arithmetic;switch-to-lookup;no-keep-loops;hoist-common-insts;no-hoist-loads-stores-with-cond-faulting;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,slp-vectorizer,vector-combine,instcombine<max-iterations=1;no-verify-fixpoint>,loop-unroll<O2>,transform-warning,sroa<preserve-cfg>,infer-alignment,instcombine<max-iterations=1;no-verify-fixpoint>,loop-mssa(licm<allowspeculation>),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;switch-to-arithmetic;no-switch-to-lookup;keep-loops;no-hoist-common-insts;hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;speculate-unpredictables>)" on module "<source>"
2.      Running pass "loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>" on function "backsmith_pure_6"
 #0 0x0000000005970698 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x5970698)
 #1 0x000000000596d544 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #2 0x0000772001e42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #3 0x0000772001e969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #4 0x0000772001e42476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #5 0x0000772001e287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #6 0x0000772001e2871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
 #7 0x0000772001e39e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
 #8 0x00000000036b434a (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x36b434a)
 #9 0x00000000036b664e llvm::LoopVectorizePass::processLoop(llvm::Loop*) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x36b664e)
#10 0x00000000036b9470 llvm::LoopVectorizePass::runImpl(llvm::Function&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x36b9470)
#11 0x00000000036b9b9b llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x36b9b9b)
#12 0x0000000002fa0f6e llvm::detail::PassModel<llvm::Function, llvm::LoopVectorizePass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x2fa0f6e)
#13 0x000000000574fbd1 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x574fbd1)
#14 0x0000000000efd90e llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xefd90e)
#15 0x000000000574e29a llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x574e29a)
#16 0x0000000000973bfe llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x973bfe)
#17 0x000000000574dc51 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x574dc51)
#18 0x000000000097de2a llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::RTLIB::RuntimeLibcallsInfo&, 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, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x97de2a)
#19 0x0000000000971ea8 optMain (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x971ea8)
#20 0x0000772001e29d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#21 0x0000772001e29e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#22 0x00000000009690b5 _start (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x9690b5)
Program terminated with signal: SIGSEGV
Compiler returned: 139
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzcWt9ym7rWfxrlRoMHBAZzkQvixPvrfOlpp-n0nLuMAIG1IySOJBK7T39mCTDYcdqkzZ7ZszupDdL6r99aWiBTY3gtGbtEyyu0vL6gnd0qffmf9XZ_katyf_mFtVqVXcE0CjO8tbY1KMwQ2SCyqVWZK2EXSteIbL4jsrkJ__xv-vGzKZCffWXGFtQwIPczFPv9nxCPDfIzS3XNLC6ppYLuVWcxCq8xIoR5DQoz5rUk8VGYhcR9wG1wfAtXceQ-PH64CMgKhVlAVl618ocr6YbikT2OvDsgI2Syw2reCjbasFvF93HkdfJBqifpCS67nVfLrmdBflayiksgX6_wDjvtNxhFfk6LB9Nwu71vO83ufURWrdUYkaWPSIpRcoX8jEmr931UMExd3d1_y77cE6edCqEKitHyKgbJQYyW14isMRW8lpic8IQnPMlPeLIvf9z7gWMSipbgQBwBzwqFN8AyWTuyx5HjN1ZphvkK-zOy0fIzygolH50etrOaFpYJ1jBpjzUeWQVCeBzhKDrIaFongsNFJyyoH0QDcewDISJLSbVWT47UMMEKi3kw8DuhR1zOhcnI0rF9Z7tR-iDMKsxD502usaA5EzBZKb0Aph4Fh7sww6_9h8Ir3GpWmgFrTiRkGtiGyLIHx7RiH_61vvcXvqNutxyMgoXul2Gkx8OCwwQiS1qWw-wo3BFMUU1Owgoy59oG7sFTDCE4RDSByaOAjNY_i9KiEIzKrj2O1mE0zM5H46BWM3uSYt-ZVlxyy6ng35meBDsbfioQkWXJH_tEE2arz3t-wDAvd61WzQwhPbmTAQCJD1ClWtM9L3eOtmYj3CFPIB_PpwygfVIzipql5zHrqONMtjWd6OG_Fed9Ck58Csgzr0DGeaeC8IxbsjNP530Ln_sWHCwlP_MuCM_4Z7rc8SkXTidnwGgwr079lOny18qlZZ__8P2DuL1UApLrN20HMSKrQcsjK9jOzszM949UeJY1bRC4rYKE_gv7xSMrIAfSPomlYXpeXQO3b8BG9zxdYF1O9cNCBfMonsiYKXzR3JO9AgoFFWKADVy-Zac8icQLleCgY74O1FrN884yM8QPakACNZH0-7xXMWo7zQzs5OE1fJIr-rgjiBBH1UnmFW13mKaiZFrQB-YIej1jJ9PrVK3FqrNtZ08anX7OFSWy0UpZRDbQ_HitVn-yYryFL54jsvmqqTSV0o1BZPONFVZp_p0hsrlVqj3cL4oWKmcSrKAdwk5CmKEwGymo5UpuKNzMZucyHMVnQaV0TR0Ks0I1bWfZFTP22wZBa5SC8MwAtriSGNwhK5jvJS_-zUu7hfhCiG9ZTYv9t804mqxRssZADVoWW2puqBb7mx23vfCRBJEAeIWHwpua2dvsQz8_3N_tm1wJXtxZzUtYM5hbsKa1-2M5raByraSlXJqsLDnYTMUdb1rBK144h4G9Zs6ijdJnvAGnyRqvlbFr64rsJ81rCBxcn6F-q3Z8pP44aD9WfoYWKkSMCBQ8gr-BWFwoY3GjSiYwlSUWjmk-WnJDa81Y6XCf4IpywcoF8rPPtzfZ3Q02Xd5wiynOuxpr1iptYUs46fq53Xb5olDNDMHHuObGdLBeG2cIl4XoSobtluFCU7PFkPzQFbJh3ljdFS5MoE6PjxyOI-9qsPDO0uIBl13T9mnmL5Cfftaq1rTBVNcd1D8zZBvkHdkAqrlg2mO7VigN9W9TCCprj47ANp7VnXxAZJNz2TNiT4EI2rZw7xJ7YbB3h71PsHetjep0waBd9rMAjPjSSclljVtqoOyQqpPOFxSuGa2Z9rh8dN31qtSq9TopWcGMoXoPdnQNBGpdCUUt4RJKslBPTHuFksZSaT0urebS8MK4OUDECr48rSy1DIXrLaMl017ZtWKAGwqvpPJazVqqmVcp7Qmr-hbfsZZMMEfnYNcPcTMUT0TWXMJKelZwr6Fty2U9KvceD5UpXEsF1jEtGH10agpWekqKfa__QHoy1Rvyg2hwWTHtuT0FlnVUDV2DxwRvHImxhWpyLsGQhu48bpkeci28DkYLNK_2XsV3rYLgOsWmz8x9UdUoXOdKdsYDcZ7dama2SpSDgErpJ6pLzzxxW2y9vtW_Gu40lTXzrPKgjZ6GrfKo5nbbMMuLo2Gh1AN0vWDXA2PgjoK0utoqbqxXqKZR0hlieqJ-HJw2ntuajffEbW-HV9FOWC5rUMHlwym7aVnRCWqZlwtVPLihwe2eP9dUFtte0UTcSWieeWFpLpgZwiVmiw49RH_jjdH_rbVw69pJrYRA4foT6UftuBV6T1RDcoEZWlEUrlvNDNOPzHOrd3MWLL9rT2MMhSTjRYPCNTxdP40hcrl106fNQaVXadX08G2HYt8LgpUZ7BmjD8Dnj55mjddSroHUUi6glxmQ_Wp4SuW9B0IBAM9BeoTQAxhPUPZahIKK3wLpDxGawhaoJGxynWDY9W6zMu3e2ZBzlfpd65kzYaz9IP1580_69xWhj_2dP_5bpokfp6tZr2b2pr_4rLm0buP7CpslQPJApOnTvTJWM9q4RmCN3eYBbcHqN3dARK783WDW0IAjEgbHRsflMorwHa8lFf9HZSlA-KrfwLDhNZeVureIZHD_qHjpLtOBwwxtrO_-9wrIoCBJiO8HLCJL4g_e9A3y8FZu9jYOJoqFUYvY2exYJovDY4FpnFYFbiGLaHn_wOGp5C3SHf8kPTo1N0piXBvn3lvNjpJ4Erw8FkxWSRVimkMv9iaxjnESGz8TG-RvFhjkk8DkWGCYsjR-m0DHMglczREWxnkURvS94DyIm5SlJ8riOGIvPC-xz9QMGdlqBd3K7dCFHZEPAH8_g8Gk3mBIP__E4DRK_J8brDv5oWnFkbGbsUGFuvGeBoNJk8HBqcF5mr_K4JeNXc_4M0nF3nDzkUroslG4PsMEhfm9nczTfHKSzJ0kFfWreA6jksHmPlRzasxHeA47b-qRc8-D80u-w9_fP6hD2KaghkdbTRJVeRnMjHSB_JGB_-BYDdGYYhXNY-Wzqkz99wDgXxbjf_Da9MGflmZ5AmNGUjqz8aNrV7-q0R4IeVbS1ip93tue4U2-Dix_AQrBmcnV-AiFaRLm1dtQOPq2fmWAfiECL4Ho7xPWPm5TVJMTAJXF8jV18Fws_ykhGqIwxWh1grySkXmS6c7B5jNvmXAvK2Ze3VnNZf2FVedg98zZr-4A4SMttk5Odm72luea6v0HWam-6zqh-vL19sPVcNlJyxt2y3N49DfA8lylUuKTewO54eKMzt-afsH7TGu6h9H5YroQiq7m8nkJn-iNLfux2RtQePLDR1EHWVcdFyUsu-v-z2wMqrX3VqmhZPRe_D-X5Y-ovjHNK870SJfDzC9_v2NSAyQnwKYngA0YXWHV2o-Uy_fTCVIPOol_8uyXlukbH60dyyQwOBXIIh_f3wPPvbFU2_tmcufVKlg0U0GO4xSnfr7EvfB3C5MT2qscjxIs0w2X1LISP3G7xf0DPQozfPfhj7ubP74hP1sPKrFmttOSuR-ABGE6P_27KC_DMg1TesEugyQOl7G_XJGL7WUU0DBZERYWS-bHQe5HSUTLNElXUV6uwuiCXxKfLIMgSINwGROyKJYhZXFKE5KUfhhUKPJZQ7lYQCYslK4v3HnLZRCvEj-9cCfVxv2gq3_FpVrLG3fks0aETK9yzWHMncrA3fL6Ql-6w5y8qw2KfMGNNZMiy61wvxU7ekBBy2tAcH-4w0pMLfY-EUQ2n8KTY0RCfuGoajynuui0uPz1s6ghPI-X5H8BAAD__1f1Fcw">