[llvm] r268407 - Use all_of instead of a raw loop; NFC
Sanjoy Das via llvm-commits
llvm-commits at lists.llvm.org
Tue May 3 10:50:06 PDT 2016
Author: sanjoy
Date: Tue May 3 12:50:06 2016
New Revision: 268407
URL: http://llvm.org/viewvc/llvm-project?rev=268407&view=rev
Log:
Use all_of instead of a raw loop; NFC
Added some tests despite being NFC, since it looks like nothing was
exercising the "all incoming values to exit PHIs are same" logic.
Modified:
llvm/trunk/lib/Transforms/Scalar/LoopDeletion.cpp
llvm/trunk/test/Transforms/LoopDeletion/multiple-exits.ll
Modified: llvm/trunk/lib/Transforms/Scalar/LoopDeletion.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopDeletion.cpp?rev=268407&r1=268406&r2=268407&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/LoopDeletion.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/LoopDeletion.cpp Tue May 3 12:50:06 2016
@@ -86,12 +86,10 @@ bool LoopDeletion::isLoopDead(Loop *L, S
// block. If there are different incoming values for different exiting
// blocks, then it is impossible to statically determine which value should
// be used.
- for (unsigned i = 1, e = exitingBlocks.size(); i < e; ++i) {
- if (incoming != P->getIncomingValueForBlock(exitingBlocks[i])) {
- AllOutgoingValuesSame = false;
- break;
- }
- }
+ AllOutgoingValuesSame =
+ all_of(makeArrayRef(exitingBlocks).slice(1), [&](BasicBlock *BB) {
+ return incoming == P->getIncomingValueForBlock(BB);
+ });
if (!AllOutgoingValuesSame)
break;
Modified: llvm/trunk/test/Transforms/LoopDeletion/multiple-exits.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopDeletion/multiple-exits.ll?rev=268407&r1=268406&r2=268407&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/LoopDeletion/multiple-exits.ll (original)
+++ llvm/trunk/test/Transforms/LoopDeletion/multiple-exits.ll Tue May 3 12:50:06 2016
@@ -2,13 +2,13 @@
; Checks whether dead loops with multiple exits can be eliminated
+define void @foo(i64 %n, i64 %m) nounwind {
+; CHECK-LABEL: @foo(
; CHECK: entry:
; CHECK-NEXT: br label %return
; CHECK: return:
; CHECK-NEXT: ret void
-
-define void @foo(i64 %n, i64 %m) nounwind {
entry:
br label %bb
@@ -24,3 +24,57 @@ bb2:
return:
ret void
}
+
+define i64 @bar(i64 %n, i64 %m) nounwind {
+; CHECK-LABEL: @bar(
+; CHECK: entry:
+; CHECK-NEXT: br label %return
+
+; CHECK: return:
+; CHECK-NEXT: ret i64 10
+
+entry:
+ br label %bb
+
+bb:
+ %x.0 = phi i64 [ 0, %entry ], [ %t0, %bb3 ]
+ %t0 = add i64 %x.0, 1
+ %t1 = icmp slt i64 %x.0, %n
+ br i1 %t1, label %bb2, label %return
+bb2:
+ %t2 = icmp slt i64 %x.0, %m
+ br i1 %t2, label %bb3, label %return
+bb3:
+ %t3 = icmp slt i64 %x.0, %m
+ br i1 %t3, label %bb, label %return
+
+return:
+ %x.lcssa = phi i64 [ 10, %bb ], [ 10, %bb2 ], [ 10, %bb3 ]
+ ret i64 %x.lcssa
+}
+
+define i64 @baz(i64 %n, i64 %m) nounwind {
+; CHECK-LABEL: @baz(
+; CHECK: return:
+; CHECK-NEXT: %x.lcssa = phi i64 [ 12, %bb ], [ 10, %bb2 ]
+; CHECK-NEXT: ret i64 %x.lcssa
+
+entry:
+ br label %bb
+
+bb:
+ %x.0 = phi i64 [ 0, %entry ], [ %t0, %bb3 ]
+ %t0 = add i64 %x.0, 1
+ %t1 = icmp slt i64 %x.0, %n
+ br i1 %t1, label %bb2, label %return
+bb2:
+ %t2 = icmp slt i64 %x.0, %m
+ br i1 %t2, label %bb3, label %return
+bb3:
+ %t3 = icmp slt i64 %x.0, %m
+ br i1 %t3, label %bb, label %return
+
+return:
+ %x.lcssa = phi i64 [ 12, %bb ], [ 10, %bb2 ], [ 10, %bb3 ]
+ ret i64 %x.lcssa
+}
More information about the llvm-commits
mailing list