diff options
author | Evan Cheng <evan.cheng@apple.com> | 2007-03-16 08:43:56 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2007-03-16 08:43:56 +0000 |
commit | 277074721680253b151efd49d0263a07fafbec3d (patch) | |
tree | 0bbc9df6abcbd81508194ba49d5ade06c8e681bc /lib/Target/ARM/ARMISelLowering.cpp | |
parent | 14245a9d62d9a785a5d6590516380b300bab4957 (diff) | |
download | llvm-277074721680253b151efd49d0263a07fafbec3d.tar.gz llvm-277074721680253b151efd49d0263a07fafbec3d.tar.bz2 llvm-277074721680253b151efd49d0263a07fafbec3d.tar.xz |
Added isLegalAddressExpression(). Only allows X +/- C for now.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35122 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/ARMISelLowering.cpp')
-rw-r--r-- | lib/Target/ARM/ARMISelLowering.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/Target/ARM/ARMISelLowering.cpp b/lib/Target/ARM/ARMISelLowering.cpp index f23d8aeb37..40ede7409a 100644 --- a/lib/Target/ARM/ARMISelLowering.cpp +++ b/lib/Target/ARM/ARMISelLowering.cpp @@ -22,6 +22,7 @@ #include "ARMTargetMachine.h" #include "llvm/CallingConv.h" #include "llvm/Constants.h" +#include "llvm/Instruction.h" #include "llvm/CodeGen/MachineBasicBlock.h" #include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/MachineFunction.h" @@ -1269,6 +1270,20 @@ ARMTargetLowering::InsertAtEndOfBasicBlock(MachineInstr *MI, // ARM Optimization Hooks //===----------------------------------------------------------------------===// +/// isLegalAddressExpression - Return true if the binary expression made up of +/// specified opcode, operands, and type can be folded into target addressing +/// mode for load / store of the given type. +bool ARMTargetLowering::isLegalAddressExpression(unsigned Opc, Value *Op0, + Value *Op1, const Type *Ty) const { + if (ConstantInt *Op1C = dyn_cast<ConstantInt>(Op1)) { + if (Opc == Instruction::Add) + return isLegalAddressImmediate(Op1C->getSExtValue(), Ty); + if (Opc == Instruction::Sub) + return isLegalAddressImmediate(-Op1C->getSExtValue(), Ty); + } + return false; +} + /// isLegalAddressImmediate - Return true if the integer value can be used /// as the offset of the target addressing mode for load / store of the /// given type. |