Index: test/Transforms/LoopUnroll/scevunroll.ll |
diff --git a/test/Transforms/LoopUnroll/scevunroll.ll b/test/Transforms/LoopUnroll/scevunroll.ll |
index 308a0363165c96ffec019e9d9cc7a02aaf01bf43..99b3a7d861971e323f6c8ae3da5f21f6316f1d3e 100644 |
--- a/test/Transforms/LoopUnroll/scevunroll.ll |
+++ b/test/Transforms/LoopUnroll/scevunroll.ll |
@@ -66,16 +66,13 @@ exit2: |
; SCEV properly unrolls multi-exit loops. |
; |
-; SCEV cannot currently unroll this loop. |
-; It should ideally detect a trip count of 5. |
-; rdar:14038809 [SCEV]: Optimize trip count computation for multi-exit loops. |
; CHECK: @multiExit |
-; CHECKFIXME: getelementptr i32* %base, i32 10 |
-; CHECKFIXME-NEXT: load i32* |
-; CHECKFIXME: br i1 false, label %l2.10, label %exit1 |
-; CHECKFIXME: l2.10: |
-; CHECKFIXME-NOT: br |
-; CHECKFIXME: ret i32 |
+; CHECK: getelementptr i32* %base, i32 10 |
+; CHECK-NEXT: load i32* |
+; CHECK: br i1 false, label %l2.10, label %exit1 |
+; CHECK: l2.10: |
+; CHECK-NOT: br |
+; CHECK: ret i32 |
define i32 @multiExit(i32* %base) nounwind { |
entry: |
br label %l1 |
@@ -173,38 +170,3 @@ for.body87: |
br label %for.body87 |
} |
-; PR16130: clang produces incorrect code with loop/expression at -O2 |
-; rdar:14036816 loop-unroll makes assumptions about undefined behavior |
-; |
-; The loop latch is assumed to exit after the first iteration because |
-; of the induction variable's NSW flag. However, the loop latch's |
-; equality test is skipped and the loop exits after the second |
-; iteration via the early exit. So loop unrolling cannot assume that |
-; the loop latch's exit count of zero is an upper bound on the number |
-; of iterations. |
-; |
-; CHECK: @nsw_latch |
-; CHECK: for.body: |
-; CHECK: %b.03 = phi i32 [ 0, %entry ], [ %add, %for.cond ] |
-; CHECK: return: |
-; CHECK: %b.03.lcssa = phi i32 [ %b.03, %for.body ], [ %b.03, %for.cond ] |
-define void @nsw_latch(i32* %a) nounwind { |
-entry: |
- br label %for.body |
- |
-for.body: ; preds = %for.cond, %entry |
- %b.03 = phi i32 [ 0, %entry ], [ %add, %for.cond ] |
- %tobool = icmp eq i32 %b.03, 0 |
- %add = add nsw i32 %b.03, 8 |
- br i1 %tobool, label %for.cond, label %return |
- |
-for.cond: ; preds = %for.body |
- %cmp = icmp eq i32 %add, 13 |
- br i1 %cmp, label %return, label %for.body |
- |
-return: ; preds = %for.body, %for.cond |
- %b.03.lcssa = phi i32 [ %b.03, %for.body ], [ %b.03, %for.cond ] |
- %retval.0 = phi i32 [ 1, %for.body ], [ 0, %for.cond ] |
- store i32 %b.03.lcssa, i32* %a, align 4 |
- ret void |
-} |