[llvm] r280331 - [XRay][NFC] Promote isTailCall() as virtual in TargetInstrInfo.

Matthias Braun via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 7 17:59:29 PST 2017


Just came accross this function, are you sure we need it? Shouldn't MachineInstr::isReturn() && MachineInstr::isCall() be the same as isTailCall()?

- Matthias

> On Aug 31, 2016, at 6:03 PM, Dean Michael Berris via llvm-commits <llvm-commits at lists.llvm.org> wrote:
> 
> Author: dberris
> Date: Wed Aug 31 20:03:22 2016
> New Revision: 280331
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=280331&view=rev
> Log:
> [XRay][NFC] Promote isTailCall() as virtual in TargetInstrInfo.
> 
> This change is broken out from D23986, where XRay detects tail call
> exits.
> 
> Modified:
>    llvm/trunk/include/llvm/Target/TargetInstrInfo.h
>    llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.h
>    llvm/trunk/lib/Target/X86/X86InstrInfo.cpp
>    llvm/trunk/lib/Target/X86/X86InstrInfo.h
> 
> Modified: llvm/trunk/include/llvm/Target/TargetInstrInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetInstrInfo.h?rev=280331&r1=280330&r2=280331&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Target/TargetInstrInfo.h (original)
> +++ llvm/trunk/include/llvm/Target/TargetInstrInfo.h Wed Aug 31 20:03:22 2016
> @@ -1481,6 +1481,11 @@ public:
>     return None;
>   }
> 
> +  /// Determines whether |Inst| is a tail call instruction.
> +  virtual bool isTailCall(const MachineInstr &Inst) const {
> +    return false;
> +  }
> +
> private:
>   unsigned CallFrameSetupOpcode, CallFrameDestroyOpcode;
>   unsigned CatchRetOpcode;
> 
> Modified: llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.h?rev=280331&r1=280330&r2=280331&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.h (original)
> +++ llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.h Wed Aug 31 20:03:22 2016
> @@ -340,7 +340,10 @@ public:
>   bool isSignExtendingLoad(const MachineInstr &MI) const;
>   bool isSolo(const MachineInstr &MI) const;
>   bool isSpillPredRegOp(const MachineInstr &MI) const;
> -  bool isTailCall(const MachineInstr &MI) const;
> +
> +  // Defined in Target.h.
> +  bool isTailCall(const MachineInstr &MI) const override;
> +
>   bool isTC1(const MachineInstr &MI) const;
>   bool isTC2(const MachineInstr &MI) const;
>   bool isTC2Early(const MachineInstr &MI) const;
> 
> Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.cpp?rev=280331&r1=280330&r2=280331&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86InstrInfo.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Wed Aug 31 20:03:22 2016
> @@ -8061,6 +8061,29 @@ X86InstrInfo::getSerializableDirectMachi
>   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::TAILJMPd64_REX:
> +    case X86::TAILJMPm64_REX:
> +    case X86::TAILJMPr64_REX:
> +      return true;
> +    default:
> +      return false;
> +  }
> +}
> +
> namespace {
>   /// Create Global Base Reg pass. This initializes the PIC
>   /// global base register for x86-32.
> 
> Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.h?rev=280331&r1=280330&r2=280331&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86InstrInfo.h (original)
> +++ llvm/trunk/lib/Target/X86/X86InstrInfo.h Wed Aug 31 20:03:22 2016
> @@ -541,6 +541,8 @@ public:
>   ArrayRef<std::pair<unsigned, const char *>>
>   getSerializableDirectMachineOperandTargetFlags() const override;
> 
> +  bool isTailCall(const MachineInstr &Inst) const override;
> +
> protected:
>   /// Commutes the operands in the given instruction by changing the operands
>   /// order and/or changing the instruction's opcode and/or the immediate value
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list