OLD | NEW |
1 //===- subzero/src/IceTargetLowering.h - Lowering interface -----*- C++ -*-===// | 1 //===- subzero/src/IceTargetLowering.h - Lowering interface -----*- C++ -*-===// |
2 // | 2 // |
3 // The Subzero Code Generator | 3 // The Subzero Code Generator |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 // | 9 // |
10 // This file declares the TargetLowering and LoweringContext | 10 // This file declares the TargetLowering and LoweringContext |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 // Lowers a list of "parallel" assignment instructions representing | 146 // Lowers a list of "parallel" assignment instructions representing |
147 // a topological sort of the Phi instructions. | 147 // a topological sort of the Phi instructions. |
148 virtual void lowerPhiAssignments(CfgNode *Node, | 148 virtual void lowerPhiAssignments(CfgNode *Node, |
149 const AssignList &Assignments) = 0; | 149 const AssignList &Assignments) = 0; |
150 // Tries to do branch optimization on a single instruction. Returns | 150 // Tries to do branch optimization on a single instruction. Returns |
151 // true if some optimization was done. | 151 // true if some optimization was done. |
152 virtual bool doBranchOpt(Inst * /*I*/, const CfgNode * /*NextNode*/) { | 152 virtual bool doBranchOpt(Inst * /*I*/, const CfgNode * /*NextNode*/) { |
153 return false; | 153 return false; |
154 } | 154 } |
155 | 155 |
| 156 virtual SizeT getNumRegisters() const = 0; |
156 // Returns a variable pre-colored to the specified physical | 157 // Returns a variable pre-colored to the specified physical |
157 // register. This is generally used to get very direct access to | 158 // register. This is generally used to get very direct access to |
158 // the register such as in the prolog or epilog or for marking | 159 // the register such as in the prolog or epilog or for marking |
159 // scratch registers as killed by a call. If a Type is not | 160 // scratch registers as killed by a call. If a Type is not |
160 // provided, a target-specific default type is used. | 161 // provided, a target-specific default type is used. |
161 virtual Variable *getPhysicalRegister(SizeT RegNum, | 162 virtual Variable *getPhysicalRegister(SizeT RegNum, |
162 Type Ty = IceType_void) = 0; | 163 Type Ty = IceType_void) = 0; |
163 // Returns a printable name for the register. | 164 // Returns a printable name for the register. |
164 virtual IceString getRegName(SizeT RegNum, Type Ty) const = 0; | 165 virtual IceString getRegName(SizeT RegNum, Type Ty) const = 0; |
165 | 166 |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
268 virtual void lower(const VariableDeclaration &Var) = 0; | 269 virtual void lower(const VariableDeclaration &Var) = 0; |
269 | 270 |
270 protected: | 271 protected: |
271 TargetGlobalInitLowering(GlobalContext *Ctx) : Ctx(Ctx) {} | 272 TargetGlobalInitLowering(GlobalContext *Ctx) : Ctx(Ctx) {} |
272 GlobalContext *Ctx; | 273 GlobalContext *Ctx; |
273 }; | 274 }; |
274 | 275 |
275 } // end of namespace Ice | 276 } // end of namespace Ice |
276 | 277 |
277 #endif // SUBZERO_SRC_ICETARGETLOWERING_H | 278 #endif // SUBZERO_SRC_ICETARGETLOWERING_H |
OLD | NEW |