aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Transforms
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2013-01-24 13:24:24 +0000
committerChandler Carruth <chandlerc@gmail.com>2013-01-24 13:24:24 +0000
commiteacef325c6412820a377fe4f853eb9c7c23db9ee (patch)
tree8fb86bb7c603213b018a7ab3f22f128ffb5820fd /lib/Transforms
parent1f255419d424c85bc5dbb77f530561d46e5197cc (diff)
downloadexternal_llvm-eacef325c6412820a377fe4f853eb9c7c23db9ee.zip
external_llvm-eacef325c6412820a377fe4f853eb9c7c23db9ee.tar.gz
external_llvm-eacef325c6412820a377fe4f853eb9c7c23db9ee.tar.bz2
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
Diffstat (limited to 'lib/Transforms')
-rw-r--r--lib/Transforms/Utils/SimplifyCFG.cpp27
1 files changed, 9 insertions, 18 deletions
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 @@ static bool SinkThenElseCodeToEnd(BranchInst *BI1) {
/// \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 @@ static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *ThenBB,
// 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 @@ static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *ThenBB,
// 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 @@ bool SimplifyCFGOpt::SimplifyCondBranch(BranchInst *BI, IRBuilder<> &Builder) {
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 @@ bool SimplifyCFGOpt::SimplifyCondBranch(BranchInst *BI, IRBuilder<> &Builder) {
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;
}