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 | d19b614ac7463bdecaa1fcef7295c1b771b3cd51 (patch) | |
tree | 116744e793c7fe5d51d9434862e91db3f86b1570 /lib/Transforms/Utils | |
parent | a6b477c6ad25b6d7712cb4fafc75e434f31fff53 (diff) | |
download | external_llvm-d19b614ac7463bdecaa1fcef7295c1b771b3cd51.zip external_llvm-d19b614ac7463bdecaa1fcef7295c1b771b3cd51.tar.gz external_llvm-d19b614ac7463bdecaa1fcef7295c1b771b3cd51.tar.bz2 |
- 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')
-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 a993784..c215b91 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. } |