diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2013-01-24 13:24:24 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2013-01-24 13:24:24 +0000 |
commit | eacef325c6412820a377fe4f853eb9c7c23db9ee (patch) | |
tree | 8fb86bb7c603213b018a7ab3f22f128ffb5820fd /lib/Transforms | |
parent | 1f255419d424c85bc5dbb77f530561d46e5197cc (diff) | |
download | external_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.cpp | 27 |
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; } |