[llvm] r280239 - Revert "[SimplifyCFG] Improve FoldValueComparisonIntoPredecessors to handle more cases"

James Molloy via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 31 06:32:28 PDT 2016


Author: jamesm
Date: Wed Aug 31 08:32:28 2016
New Revision: 280239

URL: http://llvm.org/viewvc/llvm-project?rev=280239&view=rev
Log:
Revert "[SimplifyCFG] Improve FoldValueComparisonIntoPredecessors to handle more cases"

This reverts commit r280218. This *also* causes buildbot errors. Sigh. Not a successful day all around!

Modified:
    llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp

Modified: llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp?rev=280239&r1=280238&r2=280239&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp Wed Aug 31 08:32:28 2016
@@ -174,8 +174,7 @@ public:
 
 /// Return true if it is safe to merge these two
 /// terminator instructions together.
-static bool SafeToMergeTerminators(TerminatorInst *SI1, TerminatorInst *SI2,
-                                   std::vector<BasicBlock*> *FailBlocks = nullptr) {
+static bool SafeToMergeTerminators(TerminatorInst *SI1, TerminatorInst *SI2) {
   if (SI1 == SI2)
     return false; // Can't merge with self!
 
@@ -184,22 +183,18 @@ static bool SafeToMergeTerminators(Termi
   // conflicting incoming values from the two switch blocks.
   BasicBlock *SI1BB = SI1->getParent();
   BasicBlock *SI2BB = SI2->getParent();
-
   SmallPtrSet<BasicBlock *, 16> SI1Succs(succ_begin(SI1BB), succ_end(SI1BB));
-  bool Fail = false;
+
   for (BasicBlock *Succ : successors(SI2BB))
     if (SI1Succs.count(Succ))
       for (BasicBlock::iterator BBI = Succ->begin(); isa<PHINode>(BBI); ++BBI) {
         PHINode *PN = cast<PHINode>(BBI);
         if (PN->getIncomingValueForBlock(SI1BB) !=
-            PN->getIncomingValueForBlock(SI2BB)) {
-          if (FailBlocks)
-            FailBlocks->push_back(Succ);
-          Fail = true;
-        }
+            PN->getIncomingValueForBlock(SI2BB))
+          return false;
       }
 
-  return !Fail;
+  return true;
 }
 
 /// Return true if it is safe and profitable to merge these two terminator
@@ -959,16 +954,7 @@ bool SimplifyCFGOpt::FoldValueComparison
     TerminatorInst *PTI = Pred->getTerminator();
     Value *PCV = isValueEqualityComparison(PTI); // PredCondVal
 
-    if (PCV == CV && TI != PTI) {
-      std::vector<BasicBlock*> FailBlocks;
-      if (!SafeToMergeTerminators(TI, PTI, &FailBlocks)) {
-        for (auto *Succ : FailBlocks) {
-          std::vector<BasicBlock*> Blocks = { TI->getParent() };
-          if (!SplitBlockPredecessors(Succ, Blocks, ".fold.split"))
-            return false;
-        }
-      }
-
+    if (PCV == CV && SafeToMergeTerminators(TI, PTI)) {
       // Figure out which 'cases' to copy from SI to PSI.
       std::vector<ValueEqualityComparisonCase> BBCases;
       BasicBlock *BBDefault = GetValueEqualityComparisonCases(TI, BBCases);




More information about the llvm-commits mailing list