diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Target/M68k/M68kMachineFunction.h')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/Target/M68k/M68kMachineFunction.h | 114 | 
1 files changed, 114 insertions, 0 deletions
diff --git a/contrib/llvm-project/llvm/lib/Target/M68k/M68kMachineFunction.h b/contrib/llvm-project/llvm/lib/Target/M68k/M68kMachineFunction.h new file mode 100644 index 000000000000..5760bdd4b9e3 --- /dev/null +++ b/contrib/llvm-project/llvm/lib/Target/M68k/M68kMachineFunction.h @@ -0,0 +1,114 @@ +//===-- M68kMachineFunctionInfo.h - M68k private data ---------*- C++ -*-=// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +/// +/// \file +/// This file declares the M68k specific subclass of MachineFunctionInfo. +/// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_LIB_TARGET_M68K_M68KMACHINEFUNCTION_H +#define LLVM_LIB_TARGET_M68K_M68KMACHINEFUNCTION_H + +#include "llvm/CodeGen/CallingConvLower.h" +#include "llvm/CodeGen/MachineFunction.h" +#include "llvm/Support/MachineValueType.h" + +namespace llvm { + +class M68kMachineFunctionInfo : public MachineFunctionInfo { +  MachineFunction &MF; + +  /// Non-zero if the function has base pointer and makes call to +  /// llvm.eh.sjlj.setjmp. When non-zero, the value is a displacement from the +  /// frame pointer to a slot where the base pointer is stashed. +  signed char RestoreBasePointerOffset = 0; + +  /// Size of the callee-saved register portion of the stack frame in bytes. +  unsigned CalleeSavedFrameSize = 0; + +  /// Number of bytes function pops on return (in addition to the space used by +  /// the return address).  Used on windows platform for stdcall & fastcall +  /// name decoration +  unsigned BytesToPopOnReturn = 0; + +  /// FrameIndex for return slot. +  int ReturnAddrIndex = 0; + +  /// The number of bytes by which return address stack slot is moved as the +  /// result of tail call optimization. +  int TailCallReturnAddrDelta = 0; + +  /// keeps track of the virtual register initialized for use as the global +  /// base register. This is used for PIC in some PIC relocation models. +  unsigned GlobalBaseReg = 0; + +  /// FrameIndex for start of varargs area. +  int VarArgsFrameIndex = 0; + +  /// Keeps track of whether this function uses sequences of pushes to pass +  /// function parameters. +  bool HasPushSequences = false; + +  /// Some subtargets require that sret lowering includes +  /// returning the value of the returned struct in a register. This field +  /// holds the virtual register into which the sret argument is passed. +  unsigned SRetReturnReg = 0; + +  /// A list of virtual and physical registers that must be forwarded to every +  /// musttail call. +  SmallVector<ForwardedRegister, 1> ForwardedMustTailRegParms; + +  /// The number of bytes on stack consumed by the arguments being passed on +  /// the stack. +  unsigned ArgumentStackSize = 0; + +public: +  explicit M68kMachineFunctionInfo(MachineFunction &MF) : MF(MF) {} + +  bool getRestoreBasePointer() const { return RestoreBasePointerOffset != 0; } +  void setRestoreBasePointer(const MachineFunction *MF); +  int getRestoreBasePointerOffset() const { return RestoreBasePointerOffset; } + +  unsigned getCalleeSavedFrameSize() const { return CalleeSavedFrameSize; } +  void setCalleeSavedFrameSize(unsigned bytes) { CalleeSavedFrameSize = bytes; } + +  unsigned getBytesToPopOnReturn() const { return BytesToPopOnReturn; } +  void setBytesToPopOnReturn(unsigned bytes) { BytesToPopOnReturn = bytes; } + +  int getRAIndex() const { return ReturnAddrIndex; } +  void setRAIndex(int Index) { ReturnAddrIndex = Index; } + +  int getTCReturnAddrDelta() const { return TailCallReturnAddrDelta; } +  void setTCReturnAddrDelta(int delta) { TailCallReturnAddrDelta = delta; } + +  unsigned getGlobalBaseReg() const { return GlobalBaseReg; } +  void setGlobalBaseReg(unsigned Reg) { GlobalBaseReg = Reg; } + +  int getVarArgsFrameIndex() const { return VarArgsFrameIndex; } +  void setVarArgsFrameIndex(int Index) { VarArgsFrameIndex = Index; } + +  bool getHasPushSequences() const { return HasPushSequences; } +  void setHasPushSequences(bool HasPush) { HasPushSequences = HasPush; } + +  unsigned getSRetReturnReg() const { return SRetReturnReg; } +  void setSRetReturnReg(unsigned Reg) { SRetReturnReg = Reg; } + +  unsigned getArgumentStackSize() const { return ArgumentStackSize; } +  void setArgumentStackSize(unsigned size) { ArgumentStackSize = size; } + +  SmallVectorImpl<ForwardedRegister> &getForwardedMustTailRegParms() { +    return ForwardedMustTailRegParms; +  } + +private: +  virtual void anchor(); +}; + +} // end of namespace llvm + +#endif // M68K_MACHINE_FUNCTION_INFO_H  | 
