Closed
Description
Loop vectorizer crash for the following reproducer:
target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
target triple = "riscv64-unknown-linux-gnu"
define void @init_dependence_analysis(ptr %iiv_used.i.i.i.sroa.0, i64 %indvars.iv71.i.i.i, i1 %cmp104.not.i.i.i, i1 %tobool108.not.i.i.i) #0 {
entry:
br label %for.cond101.preheader.i.i.i
for.cond101.preheader.i.i.i: ; preds = %for.inc121.i.i.i, %entry
%separability.0.i.i = phi i32 [ 0, %entry ], [ %separability.2.i.i, %for.inc121.i.i.i ]
br label %for.body103.i.i.i
for.body103.i.i.i: ; preds = %for.inc121.i.i.i, %for.cond101.preheader.i.i.i
%separability.1.i.i = phi i32 [ %separability.0.i.i, %for.cond101.preheader.i.i.i ], [ %separability.2.i.i, %for.inc121.i.i.i ]
%indvars.iv71.i.i.i5 = phi i64 [ 0, %for.cond101.preheader.i.i.i ], [ %indvars.iv.next72.i.i.i, %for.inc121.i.i.i ]
br i1 %cmp104.not.i.i.i, label %for.inc121.i.i.i, label %land.lhs.true105.i.i.i
land.lhs.true105.i.i.i: ; preds = %for.body103.i.i.i
br i1 %tobool108.not.i.i.i, label %for.inc121.i.i.i, label %land.lhs.true109.i.i.i
land.lhs.true109.i.i.i: ; preds = %land.lhs.true105.i.i.i
%0 = load ptr, ptr %iiv_used.i.i.i.sroa.0, align 8
%cmp118.i.i.i = icmp eq ptr %0, null
%spec.select209.i.i = select i1 %cmp118.i.i.i, i32 0, i32 %separability.1.i.i
br label %for.inc121.i.i.i
for.inc121.i.i.i: ; preds = %land.lhs.true109.i.i.i, %land.lhs.true105.i.i.i, %for.body103.i.i.i
%separability.2.i.i = phi i32 [ %separability.1.i.i, %for.body103.i.i.i ], [ %separability.1.i.i, %land.lhs.true105.i.i.i ], [ %spec.select209.i.i, %land.lhs.true109.i.i.i ]
%indvars.iv.next72.i.i.i = add i64 %indvars.iv71.i.i.i5, 1
%exitcond74.not.i.i.i = icmp eq i64 %indvars.iv71.i.i.i5, %indvars.iv71.i.i.i
br i1 %exitcond74.not.i.i.i, label %for.cond101.preheader.i.i.i, label %for.body103.i.i.i
; uselistorder directives
uselistorder i32 %separability.2.i.i, { 1, 0 }
}
attributes #0 = { "target-cpu"="sifive-p670" }
opt -S --passes=loop-vectorize ./reduced.ll
LoopVectorize.cpp:7430: VectorizationFactor llvm::LoopVectorizationPlanner::computeBestVF(): Assertion `(BestFactor.Width == LegacyVF.Width || planContainsAdditionalSimplifications(getPlanFor(BestFactor.Width), CostCtx, OrigLoop)) && " VPlan cost model and legacy cost model disagreed"' failed.