LLVM  16.0.0git
M68kMachineFunction.h
Go to the documentation of this file.
1 //===-- M68kMachineFunctionInfo.h - M68k private data -----------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 ///
9 /// \file
10 /// This file declares the M68k specific subclass of MachineFunctionInfo.
11 ///
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_LIB_TARGET_M68K_M68KMACHINEFUNCTION_H
15 #define LLVM_LIB_TARGET_M68K_M68KMACHINEFUNCTION_H
16 
20 
21 namespace llvm {
22 
24  /// Non-zero if the function has base pointer and makes call to
25  /// llvm.eh.sjlj.setjmp. When non-zero, the value is a displacement from the
26  /// frame pointer to a slot where the base pointer is stashed.
27  signed char RestoreBasePointerOffset = 0;
28 
29  /// Size of the callee-saved register portion of the stack frame in bytes.
30  unsigned CalleeSavedFrameSize = 0;
31 
32  /// Number of bytes function pops on return (in addition to the space used by
33  /// the return address). Used on windows platform for stdcall & fastcall
34  /// name decoration
35  unsigned BytesToPopOnReturn = 0;
36 
37  /// FrameIndex for return slot.
38  int ReturnAddrIndex = 0;
39 
40  /// The number of bytes by which return address stack slot is moved as the
41  /// result of tail call optimization.
42  int TailCallReturnAddrDelta = 0;
43 
44  /// keeps track of the virtual register initialized for use as the global
45  /// base register. This is used for PIC in some PIC relocation models.
46  unsigned GlobalBaseReg = 0;
47 
48  /// FrameIndex for start of varargs area.
49  int VarArgsFrameIndex = 0;
50 
51  /// Keeps track of whether this function uses sequences of pushes to pass
52  /// function parameters.
53  bool HasPushSequences = false;
54 
55  /// Some subtargets require that sret lowering includes
56  /// returning the value of the returned struct in a register. This field
57  /// holds the virtual register into which the sret argument is passed.
58  unsigned SRetReturnReg = 0;
59 
60  /// A list of virtual and physical registers that must be forwarded to every
61  /// musttail call.
62  SmallVector<ForwardedRegister, 1> ForwardedMustTailRegParms;
63 
64  /// The number of bytes on stack consumed by the arguments being passed on
65  /// the stack.
66  unsigned ArgumentStackSize = 0;
67 
68 public:
70 
74  const override;
75 
76  bool getRestoreBasePointer() const { return RestoreBasePointerOffset != 0; }
77  void setRestoreBasePointer(const MachineFunction *MF);
78  int getRestoreBasePointerOffset() const { return RestoreBasePointerOffset; }
79 
80  unsigned getCalleeSavedFrameSize() const { return CalleeSavedFrameSize; }
81  void setCalleeSavedFrameSize(unsigned bytes) { CalleeSavedFrameSize = bytes; }
82 
83  unsigned getBytesToPopOnReturn() const { return BytesToPopOnReturn; }
84  void setBytesToPopOnReturn(unsigned bytes) { BytesToPopOnReturn = bytes; }
85 
86  int getRAIndex() const { return ReturnAddrIndex; }
87  void setRAIndex(int Index) { ReturnAddrIndex = Index; }
88 
89  int getTCReturnAddrDelta() const { return TailCallReturnAddrDelta; }
90  void setTCReturnAddrDelta(int delta) { TailCallReturnAddrDelta = delta; }
91 
92  unsigned getGlobalBaseReg() const { return GlobalBaseReg; }
93  void setGlobalBaseReg(unsigned Reg) { GlobalBaseReg = Reg; }
94 
95  int getVarArgsFrameIndex() const { return VarArgsFrameIndex; }
96  void setVarArgsFrameIndex(int Index) { VarArgsFrameIndex = Index; }
97 
98  bool getHasPushSequences() const { return HasPushSequences; }
99  void setHasPushSequences(bool HasPush) { HasPushSequences = HasPush; }
100 
101  unsigned getSRetReturnReg() const { return SRetReturnReg; }
102  void setSRetReturnReg(unsigned Reg) { SRetReturnReg = Reg; }
103 
104  unsigned getArgumentStackSize() const { return ArgumentStackSize; }
105  void setArgumentStackSize(unsigned size) { ArgumentStackSize = size; }
106 
108  return ForwardedMustTailRegParms;
109  }
110 
111 private:
112  virtual void anchor();
113 };
114 
115 } // end of namespace llvm
116 
117 #endif // LLVM_LIB_TARGET_M68K_M68KMACHINEFUNCTION_H
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
llvm::M68kMachineFunctionInfo::setArgumentStackSize
void setArgumentStackSize(unsigned size)
Definition: M68kMachineFunction.h:105
llvm::M68kMachineFunctionInfo::getHasPushSequences
bool getHasPushSequences() const
Definition: M68kMachineFunction.h:98
llvm::M68kMachineFunctionInfo::clone
MachineFunctionInfo * clone(BumpPtrAllocator &Allocator, MachineFunction &DestMF, const DenseMap< MachineBasicBlock *, MachineBasicBlock * > &Src2DstMBB) const override
Make a functionally equivalent copy of this MachineFunctionInfo in MF.
Definition: M68kMachineFunction.cpp:22
llvm::SmallVector
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Definition: SmallVector.h:1199
llvm::X86Disassembler::Reg
Reg
All possible values of the reg field in the ModR/M byte.
Definition: X86DisassemblerDecoder.h:462
llvm::M68kMachineFunctionInfo::getTCReturnAddrDelta
int getTCReturnAddrDelta() const
Definition: M68kMachineFunction.h:89
llvm::M68kMachineFunctionInfo::getRestoreBasePointerOffset
int getRestoreBasePointerOffset() const
Definition: M68kMachineFunction.h:78
llvm::M68kMachineFunctionInfo::getArgumentStackSize
unsigned getArgumentStackSize() const
Definition: M68kMachineFunction.h:104
llvm::M68kMachineFunctionInfo::getForwardedMustTailRegParms
SmallVectorImpl< ForwardedRegister > & getForwardedMustTailRegParms()
Definition: M68kMachineFunction.h:107
llvm::M68kMachineFunctionInfo::M68kMachineFunctionInfo
M68kMachineFunctionInfo(const MachineFunction &MF)
Definition: M68kMachineFunction.h:69
MachineValueType.h
llvm::M68kMachineFunctionInfo::setSRetReturnReg
void setSRetReturnReg(unsigned Reg)
Definition: M68kMachineFunction.h:102
llvm::dwarf::Index
Index
Definition: Dwarf.h:472
llvm::M68kMachineFunctionInfo::setTCReturnAddrDelta
void setTCReturnAddrDelta(int delta)
Definition: M68kMachineFunction.h:90
llvm::M68kMachineFunctionInfo::getSRetReturnReg
unsigned getSRetReturnReg() const
Definition: M68kMachineFunction.h:101
llvm::M68kMachineFunctionInfo::getCalleeSavedFrameSize
unsigned getCalleeSavedFrameSize() const
Definition: M68kMachineFunction.h:80
llvm::M68kMachineFunctionInfo::setGlobalBaseReg
void setGlobalBaseReg(unsigned Reg)
Definition: M68kMachineFunction.h:93
Index
uint32_t Index
Definition: ELFObjHandler.cpp:83
llvm::M68kMachineFunctionInfo::getRAIndex
int getRAIndex() const
Definition: M68kMachineFunction.h:86
llvm::BumpPtrAllocatorImpl
Allocate memory in an ever growing pool, as if by bump-pointer.
Definition: Allocator.h:63
llvm::DenseMap
Definition: DenseMap.h:714
llvm::M68kMachineFunctionInfo::setHasPushSequences
void setHasPushSequences(bool HasPush)
Definition: M68kMachineFunction.h:99
llvm::MachineFunction
Definition: MachineFunction.h:257
llvm::size
auto size(R &&Range, std::enable_if_t< std::is_base_of< std::random_access_iterator_tag, typename std::iterator_traits< decltype(Range.begin())>::iterator_category >::value, void > *=nullptr)
Get the size of a range.
Definition: STLExtras.h:1715
llvm::M68kMachineFunctionInfo::setVarArgsFrameIndex
void setVarArgsFrameIndex(int Index)
Definition: M68kMachineFunction.h:96
llvm::M68kMachineFunctionInfo::getRestoreBasePointer
bool getRestoreBasePointer() const
Definition: M68kMachineFunction.h:76
llvm::M68kMachineFunctionInfo
Definition: M68kMachineFunction.h:23
llvm::M68kMachineFunctionInfo::setBytesToPopOnReturn
void setBytesToPopOnReturn(unsigned bytes)
Definition: M68kMachineFunction.h:84
llvm::M68kMachineFunctionInfo::setCalleeSavedFrameSize
void setCalleeSavedFrameSize(unsigned bytes)
Definition: M68kMachineFunction.h:81
CallingConvLower.h
llvm::M68kMachineFunctionInfo::setRAIndex
void setRAIndex(int Index)
Definition: M68kMachineFunction.h:87
llvm::M68kMachineFunctionInfo::getBytesToPopOnReturn
unsigned getBytesToPopOnReturn() const
Definition: M68kMachineFunction.h:83
llvm::M68kMachineFunctionInfo::setRestoreBasePointer
void setRestoreBasePointer(const MachineFunction *MF)
Allocator
Basic Register Allocator
Definition: RegAllocBasic.cpp:143
llvm::M68kMachineFunctionInfo::getGlobalBaseReg
unsigned getGlobalBaseReg() const
Definition: M68kMachineFunction.h:92
llvm::SmallVectorImpl
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
Definition: APFloat.h:42
llvm::M68kMachineFunctionInfo::getVarArgsFrameIndex
int getVarArgsFrameIndex() const
Definition: M68kMachineFunction.h:95
MachineFunction.h
llvm::MachineFunctionInfo
MachineFunctionInfo - This class can be derived from and used by targets to hold private target-speci...
Definition: MachineFunction.h:95