OLD | NEW |
1 //===- subzero/src/IceDefs.h - Common Subzero declarations ------*- C++ -*-===// | 1 //===- subzero/src/IceDefs.h - Common Subzero declarations ------*- 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 /// \file | 10 /// \file |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 } // end of namespace Internal | 131 } // end of namespace Internal |
132 | 132 |
133 template <class T, class... Args> | 133 template <class T, class... Args> |
134 static std::unique_ptr<T> makeUnique(Args &&... TheArgs) { | 134 static std::unique_ptr<T> makeUnique(Args &&... TheArgs) { |
135 return ::Ice::Internal::MakeUniqueEnabler::create<T>( | 135 return ::Ice::Internal::MakeUniqueEnabler::create<T>( |
136 std::forward<Args>(TheArgs)...); | 136 std::forward<Args>(TheArgs)...); |
137 } | 137 } |
138 | 138 |
139 #define ENABLE_MAKE_UNIQUE friend struct ::Ice::Internal::MakeUniqueEnabler | 139 #define ENABLE_MAKE_UNIQUE friend struct ::Ice::Internal::MakeUniqueEnabler |
140 | 140 |
141 typedef std::string IceString; | 141 using IceString = std::string; |
142 typedef llvm::ilist<Inst> InstList; | 142 using InstList = llvm::ilist<Inst>; |
143 // Ideally PhiList would be llvm::ilist<InstPhi>, and similar for | 143 // Ideally PhiList would be llvm::ilist<InstPhi>, and similar for |
144 // AssignList, but this runs into issues with SFINAE. | 144 // AssignList, but this runs into issues with SFINAE. |
145 typedef InstList PhiList; | 145 using PhiList = InstList; |
146 typedef InstList AssignList; | 146 using AssignList = InstList; |
147 | 147 |
148 // Containers that are arena-allocated from the Cfg's allocator. | 148 // Containers that are arena-allocated from the Cfg's allocator. |
149 typedef std::vector<Operand *, CfgLocalAllocator<Operand *>> OperandList; | 149 using OperandList = std::vector<Operand *, CfgLocalAllocator<Operand *>>; |
150 typedef std::vector<Variable *, CfgLocalAllocator<Variable *>> VarList; | 150 using VarList = std::vector<Variable *, CfgLocalAllocator<Variable *>>; |
151 typedef std::vector<CfgNode *, CfgLocalAllocator<CfgNode *>> NodeList; | 151 using NodeList = std::vector<CfgNode *, CfgLocalAllocator<CfgNode *>>; |
152 | 152 |
153 // Contains that use the default (global) allocator. | 153 // Contains that use the default (global) allocator. |
154 typedef std::vector<Constant *> ConstantList; | 154 using ConstantList = std::vector<Constant *>; |
155 typedef std::vector<FunctionDeclaration *> FunctionDeclarationList; | 155 using FunctionDeclarationList = std::vector<FunctionDeclaration *>; |
156 typedef std::vector<VariableDeclaration *> VariableDeclarationList; | 156 using VariableDeclarationList = std::vector<VariableDeclaration *>; |
157 | 157 |
158 /// SizeT is for holding small-ish limits like number of source | 158 /// SizeT is for holding small-ish limits like number of source |
159 /// operands in an instruction. It is used instead of size_t (which | 159 /// operands in an instruction. It is used instead of size_t (which |
160 /// may be 64-bits wide) when we want to save space. | 160 /// may be 64-bits wide) when we want to save space. |
161 typedef uint32_t SizeT; | 161 using SizeT = uint32_t; |
162 | 162 |
163 /// InstNumberT is for holding an instruction number. Instruction | 163 /// InstNumberT is for holding an instruction number. Instruction |
164 /// numbers are used for representing Variable live ranges. | 164 /// numbers are used for representing Variable live ranges. |
165 typedef int32_t InstNumberT; | 165 using InstNumberT = int32_t; |
166 | 166 |
167 /// A LiveBeginEndMapEntry maps a Variable::Number value to an | 167 /// A LiveBeginEndMapEntry maps a Variable::Number value to an |
168 /// Inst::Number value, giving the instruction number that begins or | 168 /// Inst::Number value, giving the instruction number that begins or |
169 /// ends a variable's live range. | 169 /// ends a variable's live range. |
170 typedef std::pair<SizeT, InstNumberT> LiveBeginEndMapEntry; | 170 using LiveBeginEndMapEntry = std::pair<SizeT, InstNumberT>; |
171 typedef std::vector<LiveBeginEndMapEntry, | 171 using LiveBeginEndMap = |
172 CfgLocalAllocator<LiveBeginEndMapEntry>> LiveBeginEndMap; | 172 std::vector<LiveBeginEndMapEntry, CfgLocalAllocator<LiveBeginEndMapEntry>>; |
173 typedef llvm::BitVector LivenessBV; | 173 using LivenessBV = llvm::BitVector; |
174 | 174 |
175 typedef uint32_t TimerStackIdT; | 175 using TimerStackIdT = uint32_t; |
176 typedef uint32_t TimerIdT; | 176 using TimerIdT = uint32_t; |
177 | 177 |
178 /// Use alignas(MaxCacheLineSize) to isolate variables/fields that | 178 /// Use alignas(MaxCacheLineSize) to isolate variables/fields that |
179 /// might be contended while multithreading. Assumes the maximum cache | 179 /// might be contended while multithreading. Assumes the maximum cache |
180 /// line size is 64. | 180 /// line size is 64. |
181 enum { MaxCacheLineSize = 64 }; | 181 enum { MaxCacheLineSize = 64 }; |
182 // Use ICE_CACHELINE_BOUNDARY to force the next field in a declaration | 182 // Use ICE_CACHELINE_BOUNDARY to force the next field in a declaration |
183 // list to be aligned to the next cache line. | 183 // list to be aligned to the next cache line. |
184 // Note: zero is added to work around the following GCC 4.8 bug (fixed in 4.9): | 184 // Note: zero is added to work around the following GCC 4.8 bug (fixed in 4.9): |
185 // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55382 | 185 // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55382 |
186 #define ICE_CACHELINE_BOUNDARY \ | 186 #define ICE_CACHELINE_BOUNDARY \ |
187 __attribute__((aligned(MaxCacheLineSize + 0))) int : 0 | 187 __attribute__((aligned(MaxCacheLineSize + 0))) int : 0 |
188 | 188 |
189 /// PNaCl is ILP32, so theoretically we should only need 32-bit offsets. | 189 /// PNaCl is ILP32, so theoretically we should only need 32-bit offsets. |
190 typedef int32_t RelocOffsetT; | 190 using RelocOffsetT = int32_t; |
191 enum { RelocAddrSize = 4 }; | 191 enum { RelocAddrSize = 4 }; |
192 | 192 |
193 enum LivenessMode { | 193 enum LivenessMode { |
194 /// Basic version of live-range-end calculation. Marks the last uses | 194 /// Basic version of live-range-end calculation. Marks the last uses |
195 /// of variables based on dataflow analysis. Records the set of | 195 /// of variables based on dataflow analysis. Records the set of |
196 /// live-in and live-out variables for each block. Identifies and | 196 /// live-in and live-out variables for each block. Identifies and |
197 /// deletes dead instructions (primarily stores). | 197 /// deletes dead instructions (primarily stores). |
198 Liveness_Basic, | 198 Liveness_Basic, |
199 | 199 |
200 /// In addition to Liveness_Basic, also calculate the complete | 200 /// In addition to Liveness_Basic, also calculate the complete |
(...skipping 21 matching lines...) Expand all Loading... |
222 IceV_LinearScan = 1 << 7, | 222 IceV_LinearScan = 1 << 7, |
223 IceV_Frame = 1 << 8, | 223 IceV_Frame = 1 << 8, |
224 IceV_AddrOpt = 1 << 9, | 224 IceV_AddrOpt = 1 << 9, |
225 IceV_Random = 1 << 10, | 225 IceV_Random = 1 << 10, |
226 IceV_Folding = 1 << 11, | 226 IceV_Folding = 1 << 11, |
227 IceV_RMW = 1 << 12, | 227 IceV_RMW = 1 << 12, |
228 IceV_Loop = 1 << 13, | 228 IceV_Loop = 1 << 13, |
229 IceV_All = ~IceV_None, | 229 IceV_All = ~IceV_None, |
230 IceV_Most = IceV_All & ~IceV_LinearScan | 230 IceV_Most = IceV_All & ~IceV_LinearScan |
231 }; | 231 }; |
232 typedef uint32_t VerboseMask; | 232 using VerboseMask = uint32_t; |
233 | 233 |
234 enum FileType { | 234 enum FileType { |
235 FT_Elf, /// ELF .o file | 235 FT_Elf, /// ELF .o file |
236 FT_Asm, /// Assembly .s file | 236 FT_Asm, /// Assembly .s file |
237 FT_Iasm /// "Integrated assembler" .byte-style .s file | 237 FT_Iasm /// "Integrated assembler" .byte-style .s file |
238 }; | 238 }; |
239 | 239 |
240 typedef llvm::raw_ostream Ostream; | 240 using Ostream = llvm::raw_ostream; |
241 typedef llvm::raw_fd_ostream Fdstream; | 241 using Fdstream = llvm::raw_fd_ostream; |
242 | 242 |
243 typedef std::mutex GlobalLockType; | 243 using GlobalLockType = std::mutex; |
244 | 244 |
245 enum ErrorCodes { EC_None = 0, EC_Args, EC_Bitcode, EC_Translation }; | 245 enum ErrorCodes { EC_None = 0, EC_Args, EC_Bitcode, EC_Translation }; |
246 | 246 |
247 /// Wrapper around std::error_code for allowing multiple errors to be | 247 /// Wrapper around std::error_code for allowing multiple errors to be |
248 /// folded into one. The current implementation keeps track of the | 248 /// folded into one. The current implementation keeps track of the |
249 /// first error, which is likely to be the most useful one, and this | 249 /// first error, which is likely to be the most useful one, and this |
250 /// could be extended to e.g. collect a vector of errors. | 250 /// could be extended to e.g. collect a vector of errors. |
251 class ErrorCode : public std::error_code { | 251 class ErrorCode : public std::error_code { |
252 ErrorCode(const ErrorCode &) = delete; | 252 ErrorCode(const ErrorCode &) = delete; |
253 ErrorCode &operator=(const ErrorCode &) = delete; | 253 ErrorCode &operator=(const ErrorCode &) = delete; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 RPE_GlobalVariableReordering, | 288 RPE_GlobalVariableReordering, |
289 RPE_NopInsertion, | 289 RPE_NopInsertion, |
290 RPE_PooledConstantReordering, | 290 RPE_PooledConstantReordering, |
291 RPE_RegAllocRandomization, | 291 RPE_RegAllocRandomization, |
292 RPE_num | 292 RPE_num |
293 }; | 293 }; |
294 | 294 |
295 } // end of namespace Ice | 295 } // end of namespace Ice |
296 | 296 |
297 #endif // SUBZERO_SRC_ICEDEFS_H | 297 #endif // SUBZERO_SRC_ICEDEFS_H |
OLD | NEW |