1
0
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:
Matthias Braun 2017-03-16 20:02:30 +00:00
parent 5e338819c0
commit df0cc24783
7 changed files with 4 additions and 54 deletions

View File

@ -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

View File

@ -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 {

View File

@ -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:

View File

@ -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;

View File

@ -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;

View File

@ -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.

View File

@ -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;