LLVM  14.0.0git
XCoreMachineFunctionInfo.h
Go to the documentation of this file.
1 //===- XCoreMachineFunctionInfo.h - XCore machine function info -*- 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 // This file declares XCore-specific per-machine-function information.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef LLVM_LIB_TARGET_XCORE_XCOREMACHINEFUNCTIONINFO_H
14 #define LLVM_LIB_TARGET_XCORE_XCOREMACHINEFUNCTIONINFO_H
15 
19 #include <cassert>
20 #include <utility>
21 #include <vector>
22 
23 namespace llvm {
24 
25 /// XCoreFunctionInfo - This class is derived from MachineFunction private
26 /// XCore target-specific information for each MachineFunction.
28  bool LRSpillSlotSet = false;
29  int LRSpillSlot;
30  bool FPSpillSlotSet = false;
31  int FPSpillSlot;
32  bool EHSpillSlotSet = false;
33  int EHSpillSlot[2];
34  unsigned ReturnStackOffset;
35  bool ReturnStackOffsetSet = false;
36  int VarArgsFrameIndex = 0;
37  mutable int CachedEStackSize = -1;
38  std::vector<std::pair<MachineBasicBlock::iterator, CalleeSavedInfo>>
39  SpillLabels;
40 
41  virtual void anchor();
42 
43 public:
44  XCoreFunctionInfo() = default;
45 
47 
48  ~XCoreFunctionInfo() override = default;
49 
50  void setVarArgsFrameIndex(int off) { VarArgsFrameIndex = off; }
51  int getVarArgsFrameIndex() const { return VarArgsFrameIndex; }
52 
54  bool hasLRSpillSlot() { return LRSpillSlotSet; }
55  int getLRSpillSlot() const {
56  assert(LRSpillSlotSet && "LR Spill slot not set");
57  return LRSpillSlot;
58  }
59 
61  bool hasFPSpillSlot() { return FPSpillSlotSet; }
62  int getFPSpillSlot() const {
63  assert(FPSpillSlotSet && "FP Spill slot not set");
64  return FPSpillSlot;
65  }
66 
67  const int* createEHSpillSlot(MachineFunction &MF);
68  bool hasEHSpillSlot() { return EHSpillSlotSet; }
69  const int* getEHSpillSlot() const {
70  assert(EHSpillSlotSet && "EH Spill slot not set");
71  return EHSpillSlot;
72  }
73 
74  void setReturnStackOffset(unsigned value) {
75  assert(!ReturnStackOffsetSet && "Return stack offset set twice");
76  ReturnStackOffset = value;
77  ReturnStackOffsetSet = true;
78  }
79 
80  unsigned getReturnStackOffset() const {
81  assert(ReturnStackOffsetSet && "Return stack offset not set");
82  return ReturnStackOffset;
83  }
84 
85  bool isLargeFrame(const MachineFunction &MF) const;
86 
87  std::vector<std::pair<MachineBasicBlock::iterator, CalleeSavedInfo>> &
89  return SpillLabels;
90  }
91 };
92 
93 } // end namespace llvm
94 
95 #endif // LLVM_LIB_TARGET_XCORE_XCOREMACHINEFUNCTIONINFO_H
llvm
This file implements support for optimizing divisions by a constant.
Definition: AllocatorList.h:23
llvm::XCoreFunctionInfo::createLRSpillSlot
int createLRSpillSlot(MachineFunction &MF)
Definition: XCoreMachineFunctionInfo.cpp:34
llvm::XCoreFunctionInfo::hasFPSpillSlot
bool hasFPSpillSlot()
Definition: XCoreMachineFunctionInfo.h:61
llvm::XCoreFunctionInfo::hasEHSpillSlot
bool hasEHSpillSlot()
Definition: XCoreMachineFunctionInfo.h:68
MachineBasicBlock.h
llvm::XCoreFunctionInfo::createFPSpillSlot
int createFPSpillSlot(MachineFunction &MF)
Definition: XCoreMachineFunctionInfo.cpp:52
llvm::XCoreFunctionInfo::getLRSpillSlot
int getLRSpillSlot() const
Definition: XCoreMachineFunctionInfo.h:55
llvm::XCoreFunctionInfo::getFPSpillSlot
int getFPSpillSlot() const
Definition: XCoreMachineFunctionInfo.h:62
llvm::XCoreFunctionInfo::setVarArgsFrameIndex
void setVarArgsFrameIndex(int off)
Definition: XCoreMachineFunctionInfo.h:50
llvm::XCoreFunctionInfo::XCoreFunctionInfo
XCoreFunctionInfo(MachineFunction &MF)
Definition: XCoreMachineFunctionInfo.h:46
llvm::XCoreFunctionInfo::getSpillLabels
std::vector< std::pair< MachineBasicBlock::iterator, CalleeSavedInfo > > & getSpillLabels()
Definition: XCoreMachineFunctionInfo.h:88
assert
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
llvm::XCoreFunctionInfo::XCoreFunctionInfo
XCoreFunctionInfo()=default
llvm::XCoreFunctionInfo::isLargeFrame
bool isLargeFrame(const MachineFunction &MF) const
Definition: XCoreMachineFunctionInfo.cpp:18
llvm::XCoreFunctionInfo::~XCoreFunctionInfo
~XCoreFunctionInfo() override=default
llvm::MachineFunction
Definition: MachineFunction.h:234
llvm::XCoreFunctionInfo
XCoreFunctionInfo - This class is derived from MachineFunction private XCore target-specific informat...
Definition: XCoreMachineFunctionInfo.h:27
llvm::XCoreFunctionInfo::hasLRSpillSlot
bool hasLRSpillSlot()
Definition: XCoreMachineFunctionInfo.h:54
llvm::XCoreFunctionInfo::setReturnStackOffset
void setReturnStackOffset(unsigned value)
Definition: XCoreMachineFunctionInfo.h:74
llvm::XCoreFunctionInfo::getVarArgsFrameIndex
int getVarArgsFrameIndex() const
Definition: XCoreMachineFunctionInfo.h:51
MachineFrameInfo.h
llvm::XCoreFunctionInfo::getReturnStackOffset
unsigned getReturnStackOffset() const
Definition: XCoreMachineFunctionInfo.h:80
llvm::XCoreFunctionInfo::createEHSpillSlot
const int * createEHSpillSlot(MachineFunction &MF)
Definition: XCoreMachineFunctionInfo.cpp:65
MachineFunction.h
llvm::MachineFunctionInfo
MachineFunctionInfo - This class can be derived from and used by targets to hold private target-speci...
Definition: MachineFunction.h:95
llvm::XCoreFunctionInfo::getEHSpillSlot
const int * getEHSpillSlot() const
Definition: XCoreMachineFunctionInfo.h:69