forked from OSchip/llvm-project
Add TargetLowering::isLegalICmpImmediate. It tells LSR what immediate can be folded into target icmp instructions.
llvm-svn: 86858
This commit is contained in:
parent
d576d66d91
commit
3d3c24a82c
|
@ -1514,6 +1514,14 @@ public:
|
|||
return false;
|
||||
}
|
||||
|
||||
/// isLegalICmpImmediate - Return true if the specified immediate is legal
|
||||
/// icmp immediate, that is the target has icmp instructions which can compare
|
||||
/// a register against the immediate without having to materialize the
|
||||
/// immediate into a register.
|
||||
virtual bool isLegalICmpImmediate(uint64_t Imm) const {
|
||||
return true;
|
||||
}
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
// Div utility functions
|
||||
//
|
||||
|
|
|
@ -3706,6 +3706,18 @@ bool ARMTargetLowering::isLegalAddressingMode(const AddrMode &AM,
|
|||
return true;
|
||||
}
|
||||
|
||||
/// isLegalICmpImmediate - Return true if the specified immediate is legal
|
||||
/// icmp immediate, that is the target has icmp instructions which can compare
|
||||
/// a register against the immediate without having to materialize the
|
||||
/// immediate into a register.
|
||||
bool ARMTargetLowering::isLegalICmpImmediate(uint64_t Imm) const {
|
||||
if (!Subtarget->isThumb())
|
||||
return ARM_AM::getSOImmVal(Imm) != -1;
|
||||
if (Subtarget->isThumb2())
|
||||
return ARM_AM::getT2SOImmVal(Imm) != -1;
|
||||
return Imm < 256;
|
||||
}
|
||||
|
||||
static bool getARMIndexedAddressParts(SDNode *Ptr, EVT VT,
|
||||
bool isSEXTLoad, SDValue &Base,
|
||||
SDValue &Offset, bool &isInc,
|
||||
|
|
|
@ -180,6 +180,12 @@ namespace llvm {
|
|||
virtual bool isLegalAddressingMode(const AddrMode &AM, const Type *Ty)const;
|
||||
bool isLegalT2ScaledAddressingMode(const AddrMode &AM, EVT VT) const;
|
||||
|
||||
/// isLegalICmpImmediate - Return true if the specified immediate is legal
|
||||
/// icmp immediate, that is the target has icmp instructions which can compare
|
||||
/// a register against the immediate without having to materialize the
|
||||
/// immediate into a register.
|
||||
virtual bool isLegalICmpImmediate(uint64_t Imm) const;
|
||||
|
||||
/// getPreIndexedAddressParts - returns true by value, base pointer and
|
||||
/// offset pointer and addressing mode by reference if the node's address
|
||||
/// can be legally represented as pre-indexed load / store address.
|
||||
|
|
Loading…
Reference in New Issue