diff options
author | Misha Brukman <brukman+llvm@gmail.com> | 2004-07-21 20:22:06 +0000 |
---|---|---|
committer | Misha Brukman <brukman+llvm@gmail.com> | 2004-07-21 20:22:06 +0000 |
commit | 17a9000ac81de110eabe222aa6f93a4f14fbfbfe (patch) | |
tree | b7932a1c9e047ab4cfd3ffe2bd3317436be68eda /lib/Target/PowerPC/PowerPCISelSimple.cpp | |
parent | f0cacc0ae7f5be5aed9d4c1eb36be0d686ad8880 (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.cpp | 38 |
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); |