[InstCombine] Signed saturation patterns
[llvm-complete.git] / lib / Target / XCore / XCoreMachineFunctionInfo.h
blobaebe11b15b5490565d1dd4ba347610d093f8c684
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.
11 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_LIB_TARGET_XCORE_XCOREMACHINEFUNCTIONINFO_H
14 #define LLVM_LIB_TARGET_XCORE_XCOREMACHINEFUNCTIONINFO_H
16 #include "llvm/CodeGen/MachineBasicBlock.h"
17 #include "llvm/CodeGen/MachineFrameInfo.h"
18 #include "llvm/CodeGen/MachineFunction.h"
19 #include <cassert>
20 #include <utility>
21 #include <vector>
23 namespace llvm {
25 /// XCoreFunctionInfo - This class is derived from MachineFunction private
26 /// XCore target-specific information for each MachineFunction.
27 class XCoreFunctionInfo : public MachineFunctionInfo {
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;
41 virtual void anchor();
43 public:
44 XCoreFunctionInfo() = default;
46 explicit XCoreFunctionInfo(MachineFunction &MF) {}
48 ~XCoreFunctionInfo() override = default;
50 void setVarArgsFrameIndex(int off) { VarArgsFrameIndex = off; }
51 int getVarArgsFrameIndex() const { return VarArgsFrameIndex; }
53 int createLRSpillSlot(MachineFunction &MF);
54 bool hasLRSpillSlot() { return LRSpillSlotSet; }
55 int getLRSpillSlot() const {
56 assert(LRSpillSlotSet && "LR Spill slot not set");
57 return LRSpillSlot;
60 int createFPSpillSlot(MachineFunction &MF);
61 bool hasFPSpillSlot() { return FPSpillSlotSet; }
62 int getFPSpillSlot() const {
63 assert(FPSpillSlotSet && "FP Spill slot not set");
64 return FPSpillSlot;
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;
74 void setReturnStackOffset(unsigned value) {
75 assert(!ReturnStackOffsetSet && "Return stack offset set twice");
76 ReturnStackOffset = value;
77 ReturnStackOffsetSet = true;
80 unsigned getReturnStackOffset() const {
81 assert(ReturnStackOffsetSet && "Return stack offset not set");
82 return ReturnStackOffset;
85 bool isLargeFrame(const MachineFunction &MF) const;
87 std::vector<std::pair<MachineBasicBlock::iterator, CalleeSavedInfo>> &
88 getSpillLabels() {
89 return SpillLabels;
93 } // end namespace llvm
95 #endif // LLVM_LIB_TARGET_XCORE_XCOREMACHINEFUNCTIONINFO_H