forked from OSchip/llvm-project
Fix the assertion error in collectLoopUniforms caused by empty Worklist before expanding.
Contributed-by: David Callahan Differential Revision: https://reviews.llvm.org/D22886 llvm-svn: 276943
This commit is contained in:
parent
45bcdcbefb
commit
315bb33f27
|
@ -4859,7 +4859,7 @@ void LoopVectorizationLegality::collectLoopUniforms() {
|
|||
// out of scope. It ensures a uniform instruction will only be used
|
||||
// by uniform instructions or out of scope instructions.
|
||||
unsigned idx = 0;
|
||||
do {
|
||||
while (idx != Worklist.size()) {
|
||||
Instruction *I = Worklist[idx++];
|
||||
|
||||
for (auto OV : I->operand_values()) {
|
||||
|
@ -4873,7 +4873,7 @@ void LoopVectorizationLegality::collectLoopUniforms() {
|
|||
DEBUG(dbgs() << "LV: Found uniform instruction: " << *OI << "\n");
|
||||
}
|
||||
}
|
||||
} while (idx != Worklist.size());
|
||||
}
|
||||
|
||||
// For an instruction to be added into Worklist above, all its users inside
|
||||
// the current loop should be already added into Worklist. This condition
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
; RUN: opt < %s -loop-vectorize -S
|
||||
|
||||
define void @foo() local_unnamed_addr {
|
||||
entry:
|
||||
%exitcond = icmp eq i64 3, 3
|
||||
br label %for.body
|
||||
|
||||
for.body: ; preds = %entry
|
||||
%i.05 = phi i64 [ %inc, %for.body ], [ 0, %entry ]
|
||||
%total1 = add nsw i64 %i.05, 3
|
||||
%inc = add nuw nsw i64 %i.05, 1
|
||||
br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !0
|
||||
|
||||
for.end: ; preds = %for.body
|
||||
ret void
|
||||
}
|
||||
|
||||
!0 = distinct !{!0, !1}
|
||||
!1 = !{!"llvm.loop.vectorize.enable", i1 true}
|
Loading…
Reference in New Issue