mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-26 23:29:22 +00:00
Add TargetLowering::isLegalICmpImmediate. It tells LSR what immediate can be folded into target icmp instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86858 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f4997e87e3
commit
77e4751011
@ -1514,6 +1514,14 @@ public:
|
|||||||
return false;
|
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
|
// Div utility functions
|
||||||
//
|
//
|
||||||
|
@ -3706,6 +3706,18 @@ bool ARMTargetLowering::isLegalAddressingMode(const AddrMode &AM,
|
|||||||
return true;
|
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,
|
static bool getARMIndexedAddressParts(SDNode *Ptr, EVT VT,
|
||||||
bool isSEXTLoad, SDValue &Base,
|
bool isSEXTLoad, SDValue &Base,
|
||||||
SDValue &Offset, bool &isInc,
|
SDValue &Offset, bool &isInc,
|
||||||
|
@ -180,6 +180,12 @@ namespace llvm {
|
|||||||
virtual bool isLegalAddressingMode(const AddrMode &AM, const Type *Ty)const;
|
virtual bool isLegalAddressingMode(const AddrMode &AM, const Type *Ty)const;
|
||||||
bool isLegalT2ScaledAddressingMode(const AddrMode &AM, EVT VT) 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
|
/// getPreIndexedAddressParts - returns true by value, base pointer and
|
||||||
/// offset pointer and addressing mode by reference if the node's address
|
/// offset pointer and addressing mode by reference if the node's address
|
||||||
/// can be legally represented as pre-indexed load / store address.
|
/// can be legally represented as pre-indexed load / store address.
|
||||||
|
Loading…
Reference in New Issue
Block a user