[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