Clean up ARM PEI code.
[oota-llvm.git] / lib / Target / ARM / ARMMachineFunctionInfo.h
1 //====- ARMMachineFuctionInfo.h - ARM machine function info -----*- C++ -*-===//
2 // 
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by the Evan Cheng and is distributed under
6 // the University of Illinois Open Source License. See LICENSE.TXT for details.
7 // 
8 //===----------------------------------------------------------------------===//
9 //
10 // This file declares ARM-specific per-machine-function information.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #ifndef ARMMACHINEFUNCTIONINFO_H
15 #define ARMMACHINEFUNCTIONINFO_H
16
17 #include "ARMSubtarget.h"
18 #include "llvm/CodeGen/MachineFunction.h"
19 #include "llvm/Target/TargetMachine.h"
20
21 namespace llvm {
22
23 /// ARMFunctionInfo - This class is derived from MachineFunction private
24 /// ARM target-specific information for each MachineFunction.
25 class ARMFunctionInfo : public MachineFunctionInfo {
26
27   /// isThumb - True if this function is compiled under Thumb mode.
28   ///
29   bool isThumb;
30
31   /// VarArgsRegSaveSize - Size of the register save area for vararg functions.
32   ///
33   unsigned VarArgsRegSaveSize;
34
35   /// HasStackFrame - True if this function has a stack frame. Set by
36   /// processFunctionBeforeCalleeSavedScan().
37   bool HasStackFrame;
38
39   /// FramePtrSpillOffset - If HasStackFrame, this records the frame pointer
40   /// spill stack offset.
41   unsigned FramePtrSpillOffset;
42
43   /// GPRCS1Offset, GPRCS2Offset, DPRCSOffset - Starting offset of callee saved
44   /// register spills areas. For Mac OS X:
45   ///
46   /// GPR callee-saved (1) : r4, r5, r6, r7, lr
47   /// --------------------------------------------
48   /// GPR callee-saved (2) : r8, r10, r11
49   /// --------------------------------------------
50   /// DPR callee-saved : d8 - d15
51   unsigned GPRCS1Offset;
52   unsigned GPRCS2Offset;
53   unsigned DPRCSOffset;
54
55   /// GPRCS1Size, GPRCS2Size, DPRCSSize - Sizes of callee saved register spills
56   /// areas.
57   unsigned GPRCS1Size;
58   unsigned GPRCS2Size;
59   unsigned DPRCSSize;
60
61   /// GPRCS1Frames, GPRCS2Frames, DPRCSFrames - Keeps track of frame indices
62   /// which belong to these spill areas.
63   std::set<int> GPRCS1Frames;
64   std::set<int> GPRCS2Frames;
65   std::set<int> DPRCSFrames;
66
67   /// JumpTableUId - Unique id for jumptables.
68   ///
69   unsigned JumpTableUId;
70
71 public:
72   ARMFunctionInfo() :
73     isThumb(false),
74     VarArgsRegSaveSize(0), HasStackFrame(false), FramePtrSpillOffset(0),
75     GPRCS1Offset(0), GPRCS2Offset(0), DPRCSOffset(0),
76     GPRCS1Size(0), GPRCS2Size(0), DPRCSSize(0), JumpTableUId(0) {}
77
78   ARMFunctionInfo(MachineFunction &MF) :
79     isThumb(MF.getTarget().getSubtarget<ARMSubtarget>().isThumb()),
80     VarArgsRegSaveSize(0), HasStackFrame(false), FramePtrSpillOffset(0),
81     GPRCS1Offset(0), GPRCS2Offset(0), DPRCSOffset(0),
82     GPRCS1Size(0), GPRCS2Size(0), DPRCSSize(0), JumpTableUId(0) {}
83
84   bool isThumbFunction() const { return isThumb; }
85
86   unsigned getVarArgsRegSaveSize() const { return VarArgsRegSaveSize; }
87   void setVarArgsRegSaveSize(unsigned s) { VarArgsRegSaveSize = s; }
88
89   bool hasStackFrame() const { return HasStackFrame; }
90   void setHasStackFrame(bool s) { HasStackFrame = s; }
91   unsigned getFramePtrSpillOffset() const { return FramePtrSpillOffset; }
92   void setFramePtrSpillOffset(unsigned o) { FramePtrSpillOffset = o; }
93   
94   unsigned getGPRCalleeSavedArea1Offset() const { return GPRCS1Offset; }
95   unsigned getGPRCalleeSavedArea2Offset() const { return GPRCS2Offset; }
96   unsigned getDPRCalleeSavedAreaOffset()  const { return DPRCSOffset; }
97
98   void setGPRCalleeSavedArea1Offset(unsigned o) { GPRCS1Offset = o; }
99   void setGPRCalleeSavedArea2Offset(unsigned o) { GPRCS2Offset = o; }
100   void setDPRCalleeSavedAreaOffset(unsigned o)  { DPRCSOffset = o; }
101
102   unsigned getGPRCalleeSavedArea1Size() const { return GPRCS1Size; }
103   unsigned getGPRCalleeSavedArea2Size() const { return GPRCS2Size; }
104   unsigned getDPRCalleeSavedAreaSize()  const { return DPRCSSize; }
105
106   void setGPRCalleeSavedArea1Size(unsigned s) { GPRCS1Size = s; }
107   void setGPRCalleeSavedArea2Size(unsigned s) { GPRCS2Size = s; }
108   void setDPRCalleeSavedAreaSize(unsigned s)  { DPRCSSize = s; }
109
110   bool isGPRCalleeSavedArea1Frame(unsigned fi) const {
111     return GPRCS1Frames.count(fi);
112   }
113   bool isGPRCalleeSavedArea2Frame(unsigned fi) const {
114     return GPRCS2Frames.count(fi);
115   }
116   bool isDPRCalleeSavedAreaFrame(unsigned fi) const {
117     return DPRCSFrames.count(fi);
118   }
119
120   void addGPRCalleeSavedArea1Frame(unsigned fi) {
121     GPRCS1Frames.insert(fi);
122   }
123   void addGPRCalleeSavedArea2Frame(unsigned fi) {
124     GPRCS2Frames.insert(fi);
125   }
126   void addDPRCalleeSavedAreaFrame(unsigned fi) {
127     DPRCSFrames.insert(fi);
128   }
129
130   unsigned createJumpTableUId() {
131     return JumpTableUId++;
132   }
133 };
134 } // End llvm namespace
135
136 #endif // ARMMACHINEFUNCTIONINFO_H