OLD | NEW |
1 //===- subzero/src/IceCfg.h - Control flow graph ----------------*- C++ -*-===// | 1 //===- subzero/src/IceCfg.h - Control flow graph ----------------*- 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 Cfg class, which represents the control flow | 10 // This file declares the Cfg class, which represents the control flow |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 void addImplicitArg(Variable *Arg); | 87 void addImplicitArg(Variable *Arg); |
88 const VarList &getImplicitArgs() const { return ImplicitArgs; } | 88 const VarList &getImplicitArgs() const { return ImplicitArgs; } |
89 | 89 |
90 // Miscellaneous accessors. | 90 // Miscellaneous accessors. |
91 TargetLowering *getTarget() const { return Target.get(); } | 91 TargetLowering *getTarget() const { return Target.get(); } |
92 VariablesMetadata *getVMetadata() const { return VMetadata.get(); } | 92 VariablesMetadata *getVMetadata() const { return VMetadata.get(); } |
93 Liveness *getLiveness() const { return Live.get(); } | 93 Liveness *getLiveness() const { return Live.get(); } |
94 template <typename T> T *getAssembler() const { | 94 template <typename T> T *getAssembler() const { |
95 return static_cast<T *>(TargetAssembler.get()); | 95 return static_cast<T *>(TargetAssembler.get()); |
96 } | 96 } |
97 bool useIntegratedAssembler() const { | |
98 return getContext()->getFlags().UseIntegratedAssembler; | |
99 } | |
100 bool hasComputedFrame() const; | 97 bool hasComputedFrame() const; |
101 bool getFocusedTiming() const { return FocusedTiming; } | 98 bool getFocusedTiming() const { return FocusedTiming; } |
102 void setFocusedTiming() { FocusedTiming = true; } | 99 void setFocusedTiming() { FocusedTiming = true; } |
103 | 100 |
104 // Passes over the CFG. | 101 // Passes over the CFG. |
105 void translate(); | 102 void translate(); |
106 // After the CFG is fully constructed, iterate over the nodes and | 103 // After the CFG is fully constructed, iterate over the nodes and |
107 // compute the predecessor edges, in the form of | 104 // compute the predecessor edges, in the form of |
108 // CfgNode::InEdges[]. | 105 // CfgNode::InEdges[]. |
109 void computePredecessors(); | 106 void computePredecessors(); |
(...skipping 14 matching lines...) Expand all Loading... |
124 void contractEmptyNodes(); | 121 void contractEmptyNodes(); |
125 void doBranchOpt(); | 122 void doBranchOpt(); |
126 | 123 |
127 // Manage the CurrentNode field, which is used for validating the | 124 // Manage the CurrentNode field, which is used for validating the |
128 // Variable::DefNode field during dumping/emitting. | 125 // Variable::DefNode field during dumping/emitting. |
129 void setCurrentNode(const CfgNode *Node) { CurrentNode = Node; } | 126 void setCurrentNode(const CfgNode *Node) { CurrentNode = Node; } |
130 void resetCurrentNode() { setCurrentNode(NULL); } | 127 void resetCurrentNode() { setCurrentNode(NULL); } |
131 const CfgNode *getCurrentNode() const { return CurrentNode; } | 128 const CfgNode *getCurrentNode() const { return CurrentNode; } |
132 | 129 |
133 void emit(); | 130 void emit(); |
| 131 void emitIAS(); |
| 132 void emitTextHeader(const IceString &MangledName); |
134 void dump(const IceString &Message = ""); | 133 void dump(const IceString &Message = ""); |
135 | 134 |
136 // Allocate data of type T using the per-Cfg allocator. | 135 // Allocate data of type T using the per-Cfg allocator. |
137 template <typename T> T *allocate() { return Allocator.Allocate<T>(); } | 136 template <typename T> T *allocate() { return Allocator.Allocate<T>(); } |
138 | 137 |
139 // Allocate an instruction of type T using the per-Cfg instruction allocator. | 138 // Allocate an instruction of type T using the per-Cfg instruction allocator. |
140 template <typename T> T *allocateInst() { return Allocator.Allocate<T>(); } | 139 template <typename T> T *allocateInst() { return Allocator.Allocate<T>(); } |
141 | 140 |
142 // Allocate an array of data of type T using the per-Cfg allocator. | 141 // Allocate an array of data of type T using the per-Cfg allocator. |
143 template <typename T> T *allocateArrayOf(size_t NumElems) { | 142 template <typename T> T *allocateArrayOf(size_t NumElems) { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 // validating Variable::DefNode. Normally, a traversal over | 188 // validating Variable::DefNode. Normally, a traversal over |
190 // CfgNodes maintains this, but before global operations like | 189 // CfgNodes maintains this, but before global operations like |
191 // register allocation, resetCurrentNode() should be called to avoid | 190 // register allocation, resetCurrentNode() should be called to avoid |
192 // spurious validation failures. | 191 // spurious validation failures. |
193 const CfgNode *CurrentNode; | 192 const CfgNode *CurrentNode; |
194 }; | 193 }; |
195 | 194 |
196 } // end of namespace Ice | 195 } // end of namespace Ice |
197 | 196 |
198 #endif // SUBZERO_SRC_ICECFG_H | 197 #endif // SUBZERO_SRC_ICECFG_H |
OLD | NEW |