summaryrefslogtreecommitdiff
path: root/lib/Transforms
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2008-06-25 07:50:12 +0000
committerEvan Cheng <evan.cheng@apple.com>2008-06-25 07:50:12 +0000
commite5334ea518e3dffec4037ede97433eb700fa1d26 (patch)
tree116744e793c7fe5d51d9434862e91db3f86b1570 /lib/Transforms
parentaa0bf52625447ec3ce29c94393f946c58475aa60 (diff)
downloadllvm-e5334ea518e3dffec4037ede97433eb700fa1d26.tar.gz
llvm-e5334ea518e3dffec4037ede97433eb700fa1d26.tar.bz2
llvm-e5334ea518e3dffec4037ede97433eb700fa1d26.tar.xz
- 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')
-rw-r--r--lib/Transforms/Utils/SimplifyCFG.cpp12
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.
}