Fix the assertion error in collectLoopUniforms caused by empty Worklist before expanding.

Contributed-by: David Callahan

Differential Revision: https://reviews.llvm.org/D22886


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@276943 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Wei Mi 2016-07-27 23:53:58 +00:00
parent 6d9563a0bc
commit 8d876fcdcd
2 changed files with 21 additions and 2 deletions

View File

@ -4859,7 +4859,7 @@ void LoopVectorizationLegality::collectLoopUniforms() {
// out of scope. It ensures a uniform instruction will only be used // out of scope. It ensures a uniform instruction will only be used
// by uniform instructions or out of scope instructions. // by uniform instructions or out of scope instructions.
unsigned idx = 0; unsigned idx = 0;
do { while (idx != Worklist.size()) {
Instruction *I = Worklist[idx++]; Instruction *I = Worklist[idx++];
for (auto OV : I->operand_values()) { for (auto OV : I->operand_values()) {
@ -4873,7 +4873,7 @@ void LoopVectorizationLegality::collectLoopUniforms() {
DEBUG(dbgs() << "LV: Found uniform instruction: " << *OI << "\n"); 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 // For an instruction to be added into Worklist above, all its users inside
// the current loop should be already added into Worklist. This condition // the current loop should be already added into Worklist. This condition

View File

@ -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}