]> granicus.if.org Git - llvm/commitdiff
[LoopSimplifyCFG] Do not count dead exit blocks twice, make CFG simpler
authorMax Kazantsev <max.kazantsev@azul.com>
Wed, 6 Feb 2019 07:49:17 +0000 (07:49 +0000)
committerMax Kazantsev <max.kazantsev@azul.com>
Wed, 6 Feb 2019 07:49:17 +0000 (07:49 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@353276 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/LoopSimplifyCFG.cpp
test/Transforms/LoopSimplifyCFG/constant-fold-branch.ll

index 3bb25b0f570bf74fbcb4fd30712fd25c3adca01a..dbe68d00c50866f22175e5e1384a9fdd108a910b 100644 (file)
@@ -229,8 +229,10 @@ private:
     // Now, all exit blocks that are not marked as live are dead.
     SmallVector<BasicBlock *, 8> ExitBlocks;
     L.getExitBlocks(ExitBlocks);
+    SmallPtrSet<BasicBlock *, 8> UniqueDeadExits;
     for (auto *ExitBlock : ExitBlocks)
-      if (!LiveExitBlocks.count(ExitBlock))
+      if (!LiveExitBlocks.count(ExitBlock) &&
+          UniqueDeadExits.insert(ExitBlock).second)
         DeadExitBlocks.push_back(ExitBlock);
 
     // Whether or not the edge From->To will still be present in graph after the
index 353a1c0e818ab49c3ecb6b81b98ca236d43a4bf8..4e75910b4332c227144861ad5ce6514e51d359cf 100644 (file)
@@ -288,8 +288,6 @@ define i32 @dead_exit_test_switch_loop(i32 %end) {
 ; CHECK-NEXT:  preheader:
 ; CHECK-NEXT:    switch i32 0, label [[PREHEADER_SPLIT:%.*]] [
 ; CHECK-NEXT:    i32 1, label [[DEAD:%.*]]
-; CHECK-NEXT:    i32 2, label [[DEAD]]
-; CHECK-NEXT:    i32 3, label [[DEAD]]
 ; CHECK-NEXT:    ]
 ; CHECK:       preheader-split:
 ; CHECK-NEXT:    br label [[HEADER:%.*]]