Index: lib/Target/ARM/ARMAsmPrinter.cpp =================================================================== --- lib/Target/ARM/ARMAsmPrinter.cpp +++ lib/Target/ARM/ARMAsmPrinter.cpp @@ -164,6 +164,9 @@ // Emit the rest of the function body. EmitFunctionBody(); + // Emit the XRay table for this function. + emitXRayTable(); + // If we need V4T thumb mode Register Indirect Jump pads, emit them. // These are created per function, rather than per TU, since it's // relatively easy to exceed the thumb branch range within a TU. Index: lib/Target/ARM/ARMBaseInstrInfo.h =================================================================== --- lib/Target/ARM/ARMBaseInstrInfo.h +++ lib/Target/ARM/ARMBaseInstrInfo.h @@ -104,6 +104,8 @@ getNoopForMachoTarget(NopInst); } + bool isTailCall(const MachineInstr &Inst) const override; + // Return the non-pre/post incrementing version of 'Opc'. Return 0 // if there is not such an opcode. virtual unsigned getUnindexedOpcode(unsigned Opc) const =0; Index: lib/Target/ARM/ARMBaseInstrInfo.cpp =================================================================== --- lib/Target/ARM/ARMBaseInstrInfo.cpp +++ lib/Target/ARM/ARMBaseInstrInfo.cpp @@ -4623,6 +4623,19 @@ 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 { if (MI->getNumOperands() < 4) return true;