Revert r173342 temporarily. It appears to cause a very late miscompile
of stage2 in a bootstrap. Still investigating....

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@173343 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/Utils/SimplifyCFG.cpp b/lib/Transforms/Utils/SimplifyCFG.cpp
index 9f3464d..11cb25d 100644
--- a/lib/Transforms/Utils/SimplifyCFG.cpp
+++ b/lib/Transforms/Utils/SimplifyCFG.cpp
@@ -1369,8 +1369,7 @@
 /// \endcode
 ///
 /// \returns true if the conditional block is removed.
-static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *ThenBB,
-                                   const TargetTransformInfo &TTI) {
+static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *ThenBB) {
   // Be conservative for now. FP select instruction can often be expensive.
   Value *BrCond = BI->getCondition();
   if (isa<FCmpInst>(BrCond))
@@ -1399,22 +1398,15 @@
 
     // Only speculatively execution a single instruction (not counting the
     // terminator) for now.
-    SpeculationCost += TTI.getUserCost(I);
-    if (SpeculationCost > TargetTransformInfo::TCC_Basic)
+    ++SpeculationCost;
+    if (SpeculationCost > 1)
       return false;
 
     // Don't hoist the instruction if it's unsafe or expensive.
     if (!isSafeToSpeculativelyExecute(I))
       return false;
-    // FIXME: This should really be a cost metric, but our cost model doesn't
-    // accurately model the expense of select.
-    if (isa<SelectInst>(I))
+    if (ComputeSpeculationCost(I) > PHINodeFoldingThreshold)
       return false;
-    // FIXME: The cost metric currently doesn't reason accurately about simple
-    // versus complex GEPs, take a conservative approach here.
-    if (GEPOperator *GEP = dyn_cast<GEPOperator>(I))
-      if (!GEP->hasAllConstantIndices())
-        return false;
 
     // Do not hoist the instruction if any of its operands are defined but not
     // used in this BB. The transformation will prevent the operand from
@@ -1457,10 +1449,9 @@
     // Account for the cost of an unfolded ConstantExpr which could end up
     // getting expanded into Instructions.
     // FIXME: This doesn't account for how many operations are combined in the
-    // constant expression. The cost functions in TTI don't yet correctly model
-    // constant expression costs.
-    SpeculationCost += TargetTransformInfo::TCC_Basic;
-    if (SpeculationCost > TargetTransformInfo::TCC_Basic)
+    // constant expression.
+    ++SpeculationCost;
+    if (SpeculationCost > 1)
       return false;
   }
 
@@ -3877,7 +3868,7 @@
       TerminatorInst *Succ0TI = BI->getSuccessor(0)->getTerminator();
       if (Succ0TI->getNumSuccessors() == 1 &&
           Succ0TI->getSuccessor(0) == BI->getSuccessor(1))
-        if (SpeculativelyExecuteBB(BI, BI->getSuccessor(0), TTI))
+        if (SpeculativelyExecuteBB(BI, BI->getSuccessor(0)))
           return SimplifyCFG(BB, TTI, TD) | true;
     }
   } else if (BI->getSuccessor(1)->getSinglePredecessor() != 0) {
@@ -3886,7 +3877,7 @@
     TerminatorInst *Succ1TI = BI->getSuccessor(1)->getTerminator();
     if (Succ1TI->getNumSuccessors() == 1 &&
         Succ1TI->getSuccessor(0) == BI->getSuccessor(0))
-      if (SpeculativelyExecuteBB(BI, BI->getSuccessor(1), TTI))
+      if (SpeculativelyExecuteBB(BI, BI->getSuccessor(1)))
         return SimplifyCFG(BB, TTI, TD) | true;
   }