1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 11:42:57 +01:00

- Use O(1) check of basic block size limit.

- Avoid speculatively execute vector ops.

llvm-svn: 52703
This commit is contained in:
Evan Cheng 2008-06-25 07:50:12 +00:00
parent 73b52018e9
commit 9a3db8fb91

View File

@ -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.
}