diff options
author | Evan Cheng <evan.cheng@apple.com> | 2008-06-25 07:50:12 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2008-06-25 07:50:12 +0000 |
commit | e5334ea518e3dffec4037ede97433eb700fa1d26 (patch) | |
tree | 116744e793c7fe5d51d9434862e91db3f86b1570 /lib/Transforms/Utils/SimplifyCFG.cpp | |
parent | aa0bf52625447ec3ce29c94393f946c58475aa60 (diff) |
- Use O(1) check of basic block size limit.
- Avoid speculatively execute vector ops.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52703 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Utils/SimplifyCFG.cpp')
-rw-r--r-- | lib/Transforms/Utils/SimplifyCFG.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/Transforms/Utils/SimplifyCFG.cpp b/lib/Transforms/Utils/SimplifyCFG.cpp index a993784cd2..c215b91259 100644 --- a/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/lib/Transforms/Utils/SimplifyCFG.cpp @@ -965,8 +965,11 @@ HoistTerminator: static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *BB1) { // Only speculatively execution a single instruction (not counting the // terminator) for now. - if (BB1->size() != 2) - return false; + BasicBlock::iterator BBI = BB1->begin(); + ++BBI; // must have at least a terminator + if (BBI == BB1->end()) return false; // only one inst + ++BBI; + if (BBI != BB1->end()) return false; // more than 2 insts. // Be conservative for now. FP select instruction can often be expensive. Value *BrCond = BI->getCondition(); @@ -1006,8 +1009,9 @@ static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *BB1) { case Instruction::Shl: case Instruction::LShr: case Instruction::AShr: - if (I->getOperand(0)->getType()->isFPOrFPVector()) - return false; // FP arithmetic might trap. + if (!I->getOperand(0)->getType()->isInteger()) + // FP arithmetic might trap. Not worth doing for vector ops. + return false; break; // These are all cheap and non-trapping instructions. } |