| Issue |
115755
|
| Summary |
[RISCV][LV] LoopVectorize crashed with assertion failure when enabling EVL vectorization
|
| Labels |
new issue
|
| Assignees |
|
| Reporter |
mshockwave
|
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
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs