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

    <tr>
        <th>Summary</th>
        <td>
            [RISCV][LV] LoopVectorize crashed with assertion failure when enabling EVL vectorization
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    The EVL LoopVectorizer currently crashes on multiple SPEC2006INT benchmarks with the same assertion failures:
```
lib/Transforms/Vectorize/LoopVectorize.cpp:2501: void llvm::InnerLoopVectorizer::emitIterationCountCheck(BasicBlock *): Assertion `!isIndvarOverflowCheckKnownFalse(Cost, VF * UF) && !SE.isKnownPredicate(CmpInst::getInversePredicate(ICmpInst::ICMP_ULT), TC2OverflowSCEV, SE.getSCEV(Step)) && "unexpectedly proved overflow check to be known"' failed.
```

Here is a reproducer from 401.bzip2:
``` llvm
; ModuleID = 'reduced.bc'
target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
target triple = "riscv64-unknown-linux-gnu"

; Function Attrs: vscale_range(2,2)
define i32 @BZ2_decompress(ptr %s, i32 %0) #0 {
entry:
  br label %for.cond1443

for.cond1443: ; preds = %for.body1447, %entry
  %v1442.08 = phi i8 [ %inc1451, %for.body1447 ], [ 0, %entry ]
  %conv1444 = zext i8 %v1442.08 to i32
  %cmp1445 = icmp sgt i32 %0, %conv1444
  br i1 %cmp1445, label %for.body1447, label %while.cond1462

for.body1447: ; preds = %for.cond1443
  store i8 0, ptr %s, align 1
 %inc1451 = add i8 %v1442.08, 1
  br label %for.cond1443

while.cond1462:                                   ; preds = %while.cond1462, %for.cond1443
  br label %while.cond1462
}

attributes #0 = { vscale_range(2,2) }
```
And here is the reproducing command:
```
opt -mcpu=sifive-p670 -O3 -prefer-predicate-over-epilogue=predicate-dont-vectorize input.ll
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVk-Po7gT_TTOpUQEBQT6kEP-dPSLfj07o-2ePuxlZEwleBtsZJv09Hz6lU06IT0zWi2KINhVz69emXJxa-VRES1Zvmb5dsYH12iz7GyjxcsrP9Gs0vXb8qkhuH9-gAet-2cSThv5gwyIwRhSrn0DYbhtyIJW0A2tk31L8PjlfoNxvNj_8QQVKdF03LxYeJWuAdcQWN4RcGvJOKkVHLhsB0OWpSsWb1m8Yov4_AuvrawY7p4MV_agTWcZ7i5UGO5uqM1F37N0hXmcsHQFJy1raNtT57HT1V4pMrehjBPUSbd3ZLgntNGDcpuGxAvDcs2tFOtWixdguGJ452FXF-6eJCbS7lV94ubzicyh1a_B-f9Kv6odby0xLDfaOoYbeN55GPi6Y3gHDBcMF8AwebyfSxscvhiqpeAuOHX9Xlk3UjyS26sTGUtTk_2NzX7z6cu3rw9PniZu4GmD74weN_fPfujxfn4kN76Vj476YDqhgoOi7z0JR3X7Br3RJ6pBn1FA-MDAaagIXjxdhsiwCCmkev7L9I33_5EhkBY4GOqNrgdBBg5Gd5DFybz6IXv8Of9j6saxdA2fdD20tN8CS7fAsDDkYep5JRgWo5nj5kgOau54y9_04M62SJHfAxT53bHIwi2Slz8JlixdJVhGKsVx7NGPId7AOhP29xnSSCtOiywaVJAiaqUavkdHNVzcrtR3gxJhw6ycMzZsTSt4S98MV0efSGS4QZ-M4FLTQSoCmSKwLF7_hd9qErrrDVnLsOydAYa59RkNNpjHYxbTGFixHkFIOfN2ERWgMtDyilpvftBmLrSqkyxLp1xvxtMVeO69odqegw6OvjIkWVb45Rnm4zrnRRjmpyTLcB6XwaVvJMgSWL72U1KJJMuTs-MUC1i-DcP5GuIpcJi4ggutPH4WwH_QdxfQJ4s67SWZenR9kmV5cJCi68Ee3US1zRR1IpVMJs7e7Ea7qQSXiddGtnSWb4EfZb24_E7W23wAWKf9N1OOekxzzlt5VJCcDa-6BjRe1x808S7Jf9kFHwJJV_Dv108hfQC5pvxjnFNGv5Sw2E7JceeMrAZH9rzf_XLF-ncfFFzdb-vSStXQnKuSP5Xe65JURxC667iqf3ci6d5B1Il-YOnWyoM8UdQvihiizylEvaEDGf8Yq3Tkq2dEvWz1cSCWbq8ztVYuOr2fRSBVP7h5235Yc1Yv0_ouveMzWiZFmqR5nObFrFkmdRJXJY9zFEVaplVdZjllRRynWVxWOc7kEmPMEn-V6V1SzDNx4ItCpDyhepESsiymjst27gvtXJvjTFo70DJJ8iLPZyEtNrQIiIpeIcz68pZvZ2bpnaJqOFqWxa20zl5hnHRt6C3-3D9unv0nnK8f_PO2kzi3D_XYG_zUEsBrQwpI8ar1WfGNyLta4aSeDaZdNs71oXfAHcPdUbpmqOZCdwx34fgYH1Fv9N8kHMNdCMJ3EecoT0v8JwAA__8OUqoJ">