mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 11:42:57 +01:00
TargetInstrInfo: Provide default implementation of isTailCall().
In fact this default implementation should be the only implementation, keep it virtual for now to accomodate targets that don't model flags correctly. Differential Revision: https://reviews.llvm.org/D30747 llvm-svn: 297980
This commit is contained in:
parent
5e338819c0
commit
df0cc24783
@ -1503,9 +1503,11 @@ public:
|
|||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Determines whether |Inst| is a tail call instruction.
|
/// Determines whether \p Inst is a tail call instruction. Override this
|
||||||
|
/// method on targets that do not properly set MCID::Return and MCID::Call on
|
||||||
|
/// tail call instructions."
|
||||||
virtual bool isTailCall(const MachineInstr &Inst) const {
|
virtual bool isTailCall(const MachineInstr &Inst) const {
|
||||||
return false;
|
return Inst.isReturn() && Inst.isCall();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// True if the instruction is bound to the top of its basic block and no
|
/// True if the instruction is bound to the top of its basic block and no
|
||||||
|
@ -1619,17 +1619,6 @@ bool AArch64InstrInfo::isUnscaledLdSt(MachineInstr &MI) const {
|
|||||||
return isUnscaledLdSt(MI.getOpcode());
|
return isUnscaledLdSt(MI.getOpcode());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AArch64InstrInfo::isTailCall(const MachineInstr &Inst) const
|
|
||||||
{
|
|
||||||
switch (Inst.getOpcode()) {
|
|
||||||
case AArch64::TCRETURNdi:
|
|
||||||
case AArch64::TCRETURNri:
|
|
||||||
return true;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Is this a candidate for ld/st merging or pairing? For example, we don't
|
// Is this a candidate for ld/st merging or pairing? For example, we don't
|
||||||
// touch volatiles or load/stores that have a hint to avoid pair formation.
|
// touch volatiles or load/stores that have a hint to avoid pair formation.
|
||||||
bool AArch64InstrInfo::isCandidateToMergeOrPair(MachineInstr &MI) const {
|
bool AArch64InstrInfo::isCandidateToMergeOrPair(MachineInstr &MI) const {
|
||||||
|
@ -87,8 +87,6 @@ public:
|
|||||||
/// Return true if this is an unscaled load/store.
|
/// Return true if this is an unscaled load/store.
|
||||||
bool isUnscaledLdSt(MachineInstr &MI) const;
|
bool isUnscaledLdSt(MachineInstr &MI) const;
|
||||||
|
|
||||||
bool isTailCall(const MachineInstr &Inst) const override;
|
|
||||||
|
|
||||||
static bool isPairableLdStInst(const MachineInstr &MI) {
|
static bool isPairableLdStInst(const MachineInstr &MI) {
|
||||||
switch (MI.getOpcode()) {
|
switch (MI.getOpcode()) {
|
||||||
default:
|
default:
|
||||||
|
@ -4711,19 +4711,6 @@ bool ARMBaseInstrInfo::hasNOP() const {
|
|||||||
return Subtarget.getFeatureBits()[ARM::HasV6KOps];
|
return Subtarget.getFeatureBits()[ARM::HasV6KOps];
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ARMBaseInstrInfo::isTailCall(const MachineInstr &Inst) const
|
|
||||||
{
|
|
||||||
switch (Inst.getOpcode()) {
|
|
||||||
case ARM::TAILJMPd:
|
|
||||||
case ARM::TAILJMPr:
|
|
||||||
case ARM::TCRETURNdi:
|
|
||||||
case ARM::TCRETURNri:
|
|
||||||
return true;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ARMBaseInstrInfo::isSwiftFastImmShift(const MachineInstr *MI) const {
|
bool ARMBaseInstrInfo::isSwiftFastImmShift(const MachineInstr *MI) const {
|
||||||
if (MI->getNumOperands() < 4)
|
if (MI->getNumOperands() < 4)
|
||||||
return true;
|
return true;
|
||||||
|
@ -109,8 +109,6 @@ public:
|
|||||||
getNoopForMachoTarget(NopInst);
|
getNoopForMachoTarget(NopInst);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isTailCall(const MachineInstr &Inst) const override;
|
|
||||||
|
|
||||||
// Return the non-pre/post incrementing version of 'Opc'. Return 0
|
// Return the non-pre/post incrementing version of 'Opc'. Return 0
|
||||||
// if there is not such an opcode.
|
// if there is not such an opcode.
|
||||||
virtual unsigned getUnindexedOpcode(unsigned Opc) const = 0;
|
virtual unsigned getUnindexedOpcode(unsigned Opc) const = 0;
|
||||||
|
@ -10177,28 +10177,6 @@ X86InstrInfo::getSerializableDirectMachineOperandTargetFlags() const {
|
|||||||
return makeArrayRef(TargetFlags);
|
return makeArrayRef(TargetFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool X86InstrInfo::isTailCall(const MachineInstr &Inst) const {
|
|
||||||
switch (Inst.getOpcode()) {
|
|
||||||
case X86::TCRETURNdi:
|
|
||||||
case X86::TCRETURNmi:
|
|
||||||
case X86::TCRETURNri:
|
|
||||||
case X86::TCRETURNdi64:
|
|
||||||
case X86::TCRETURNmi64:
|
|
||||||
case X86::TCRETURNri64:
|
|
||||||
case X86::TAILJMPd:
|
|
||||||
case X86::TAILJMPm:
|
|
||||||
case X86::TAILJMPr:
|
|
||||||
case X86::TAILJMPd64:
|
|
||||||
case X86::TAILJMPm64:
|
|
||||||
case X86::TAILJMPr64:
|
|
||||||
case X86::TAILJMPm64_REX:
|
|
||||||
case X86::TAILJMPr64_REX:
|
|
||||||
return true;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
/// Create Global Base Reg pass. This initializes the PIC
|
/// Create Global Base Reg pass. This initializes the PIC
|
||||||
/// global base register for x86-32.
|
/// global base register for x86-32.
|
||||||
|
@ -543,8 +543,6 @@ public:
|
|||||||
ArrayRef<std::pair<unsigned, const char *>>
|
ArrayRef<std::pair<unsigned, const char *>>
|
||||||
getSerializableDirectMachineOperandTargetFlags() const override;
|
getSerializableDirectMachineOperandTargetFlags() const override;
|
||||||
|
|
||||||
bool isTailCall(const MachineInstr &Inst) const override;
|
|
||||||
|
|
||||||
unsigned getOutliningBenefit(size_t SequenceSize,
|
unsigned getOutliningBenefit(size_t SequenceSize,
|
||||||
size_t Occurrences,
|
size_t Occurrences,
|
||||||
bool CanBeTailCall) const override;
|
bool CanBeTailCall) const override;
|
||||||
|
Loading…
Reference in New Issue
Block a user