LLVM  9.0.0svn
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
int createLRSpillSlot(MachineFunction &MF)
This class represents lattice values for constants.
Definition: AllocatorList.h:23
~XCoreFunctionInfo() override=default
std::vector< std::pair< MachineBasicBlock::iterator, CalleeSavedInfo > > & getSpillLabels()
MachineFunctionInfo - This class can be derived from and used by targets to hold private target-speci...
void setReturnStackOffset(unsigned value)
int createFPSpillSlot(MachineFunction &MF)
const int * createEHSpillSlot(MachineFunction &MF)
XCoreFunctionInfo - This class is derived from MachineFunction private XCore target-specific informat...
XCoreFunctionInfo(MachineFunction &MF)
const int * getEHSpillSlot() const
bool isLargeFrame(const MachineFunction &MF) const
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())