[PATCH] D72519: [LoopInfo] Support multi edge in getLoopLatch()

Nikita Popov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 10 09:37:07 PST 2020


nikic created this revision.
nikic added reviewers: efriedma, reames, sanjoy.google.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Change split out from D72420 <https://reviews.llvm.org/D72420>, because I noticed it causes an unrelated test change. If the loop latch is a switch, then there can be multiple edges from the latch to the header. The LoopSimplify test changes because it's no longer necessary to split of an extra block in this case.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D72519

Files:
  llvm/include/llvm/Analysis/LoopInfoImpl.h
  llvm/test/Transforms/LoopSimplify/basictest.ll


Index: llvm/test/Transforms/LoopSimplify/basictest.ll
===================================================================
--- llvm/test/Transforms/LoopSimplify/basictest.ll
+++ llvm/test/Transforms/LoopSimplify/basictest.ll
@@ -44,17 +44,15 @@
 ; CHECK-NEXT:    br label [[LOOP:%.*]]
 ; CHECK:       loop:
 ; CHECK-NEXT:    [[B:%.*]] = load volatile i8, i8* [[B_PTR:%.*]]
-; CHECK-NEXT:    switch i8 [[B]], label [[LOOP_BACKEDGE:%.*]] [
+; CHECK-NEXT:    switch i8 [[B]], label [[LOOP]] [
 ; CHECK-NEXT:    i8 0, label [[EXIT_A_LOOPEXIT:%.*]]
 ; CHECK-NEXT:    i8 1, label [[EXIT_B_LOOPEXIT:%.*]]
-; CHECK-NEXT:    i8 2, label [[LOOP_BACKEDGE]]
+; CHECK-NEXT:    i8 2, label [[LOOP]]
 ; CHECK-NEXT:    i8 3, label [[EXIT_A_LOOPEXIT]]
-; CHECK-NEXT:    i8 4, label [[LOOP_BACKEDGE]]
+; CHECK-NEXT:    i8 4, label [[LOOP]]
 ; CHECK-NEXT:    i8 5, label [[EXIT_A_LOOPEXIT]]
-; CHECK-NEXT:    i8 6, label [[LOOP_BACKEDGE]]
+; CHECK-NEXT:    i8 6, label [[LOOP]]
 ; CHECK-NEXT:    ]
-; CHECK:       loop.backedge:
-; CHECK-NEXT:    br label [[LOOP]]
 ; CHECK:       exit.a.loopexit:
 ; CHECK-NEXT:    br label [[EXIT_A]]
 ; CHECK:       exit.a:
Index: llvm/include/llvm/Analysis/LoopInfoImpl.h
===================================================================
--- llvm/include/llvm/Analysis/LoopInfoImpl.h
+++ llvm/include/llvm/Analysis/LoopInfoImpl.h
@@ -211,7 +211,7 @@
   BlockT *Header = getHeader();
   BlockT *Latch = nullptr;
   for (const auto Pred : children<Inverse<BlockT *>>(Header)) {
-    if (contains(Pred)) {
+    if (Latch != Pred && contains(Pred)) {
       if (Latch)
         return nullptr;
       Latch = Pred;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D72519.237361.patch
Type: text/x-patch
Size: 1630 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200110/6f82bc4a/attachment.bin>


More information about the llvm-commits mailing list