aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/PowerPC/PowerPCISelSimple.cpp
diff options
context:
space:
mode:
authorMisha Brukman <brukman+llvm@gmail.com>2004-07-21 20:22:06 +0000
committerMisha Brukman <brukman+llvm@gmail.com>2004-07-21 20:22:06 +0000
commit17a9000ac81de110eabe222aa6f93a4f14fbfbfe (patch)
treeb7932a1c9e047ab4cfd3ffe2bd3317436be68eda /lib/Target/PowerPC/PowerPCISelSimple.cpp
parentf0cacc0ae7f5be5aed9d4c1eb36be0d686ad8880 (diff)
* Speed up canUseAsImmediateForOpcode() by comparing Operand before
dyn_cast<>ing and checking Constant's value * Convert tabs to spaces git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15086 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/PowerPC/PowerPCISelSimple.cpp')
-rw-r--r--lib/Target/PowerPC/PowerPCISelSimple.cpp38
1 files changed, 19 insertions, 19 deletions
diff --git a/lib/Target/PowerPC/PowerPCISelSimple.cpp b/lib/Target/PowerPC/PowerPCISelSimple.cpp
index 339cbda481..0ce018df32 100644
--- a/lib/Target/PowerPC/PowerPCISelSimple.cpp
+++ b/lib/Target/PowerPC/PowerPCISelSimple.cpp
@@ -431,31 +431,31 @@ bool ISel::canUseAsImmediateForOpcode(ConstantInt *CI, unsigned Operator)
ConstantUInt *Op1Cu;
// ADDI, Compare, and non-indexed Load take SIMM
- bool cond1 = (Op1Cs = dyn_cast<ConstantSInt>(CI))
+ bool cond1 = (Operator == 0)
+ && (Op1Cs = dyn_cast<ConstantSInt>(CI))
&& (Op1Cs->getValue() <= 32767)
- && (Op1Cs->getValue() >= -32768)
- && (Operator == 0);
+ && (Op1Cs->getValue() >= -32768);
// SUBI takes -SIMM since it is a mnemonic for ADDI
- bool cond2 = (Op1Cs = dyn_cast<ConstantSInt>(CI))
+ bool cond2 = (Operator == 1)
+ && (Op1Cs = dyn_cast<ConstantSInt>(CI))
&& (Op1Cs->getValue() <= 32768)
- && (Op1Cs->getValue() >= -32767)
- && (Operator == 1);
+ && (Op1Cs->getValue() >= -32767);
// ANDIo, ORI, and XORI take unsigned values
- bool cond3 = (Op1Cs = dyn_cast<ConstantSInt>(CI))
- && (Op1Cs->getValue() <= 32767)
- && (Operator >= 2);
+ bool cond3 = (Operator >= 2)
+ && (Op1Cs = dyn_cast<ConstantSInt>(CI))
+ && (Op1Cs->getValue() <= 32767);
// ADDI and SUBI take SIMMs, so we have to make sure the UInt would fit
- bool cond4 = (Op1Cu = dyn_cast<ConstantUInt>(CI))
- && (Op1Cu->getValue() <= 32767)
- && (Operator < 2);
+ bool cond4 = (Operator < 2)
+ && (Op1Cu = dyn_cast<ConstantUInt>(CI))
+ && (Op1Cu->getValue() <= 32767);
// ANDIo, ORI, and XORI take UIMMs, so they can be larger
- bool cond5 = (Op1Cu = dyn_cast<ConstantUInt>(CI))
- && (Op1Cu->getValue() <= 65535)
- && (Operator >= 2);
+ bool cond5 = (Operator >= 2)
+ && (Op1Cu = dyn_cast<ConstantUInt>(CI))
+ && (Op1Cu->getValue() <= 65535);
if (cond1 || cond2 || cond3 || cond4 || cond5)
return true;
@@ -2699,10 +2699,10 @@ void ISel::visitGetElementPtrInst(GetElementPtrInst &I) {
/// emitGEPOperation - Common code shared between visitGetElementPtrInst and
/// constant expression GEP support.
///
-void ISel::emitGEPOperation (MachineBasicBlock *MBB,
- MachineBasicBlock::iterator IP,
- Value *Src, User::op_iterator IdxBegin,
- User::op_iterator IdxEnd, unsigned TargetReg) {
+void ISel::emitGEPOperation(MachineBasicBlock *MBB,
+ MachineBasicBlock::iterator IP,
+ Value *Src, User::op_iterator IdxBegin,
+ User::op_iterator IdxEnd, unsigned TargetReg) {
const TargetData &TD = TM.getTargetData ();
const Type *Ty = Src->getType ();
unsigned basePtrReg = getReg (Src, MBB, IP);