OLD | NEW |
1 //===- subzero/src/IceGlobalContext.h - Global context defs -----*- C++ -*-===// | 1 //===- subzero/src/IceGlobalContext.h - Global context defs -----*- 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 aspects of the compilation that persist across | 10 // This file declares aspects of the compilation that persist across |
(...skipping 15 matching lines...) Expand all Loading... |
26 #include "IceTypes.h" | 26 #include "IceTypes.h" |
27 | 27 |
28 namespace Ice { | 28 namespace Ice { |
29 | 29 |
30 class ClFlags; | 30 class ClFlags; |
31 class FuncSigType; | 31 class FuncSigType; |
32 | 32 |
33 // This class collects rudimentary statistics during translation. | 33 // This class collects rudimentary statistics during translation. |
34 class CodeStats { | 34 class CodeStats { |
35 CodeStats(const CodeStats &) = delete; | 35 CodeStats(const CodeStats &) = delete; |
36 // CodeStats &operator=(const CodeStats &) = delete; | 36 CodeStats &operator=(const CodeStats &) = default; |
37 | 37 |
38 public: | 38 public: |
39 CodeStats() | 39 CodeStats() |
40 : InstructionsEmitted(0), RegistersSaved(0), FrameBytes(0), Spills(0), | 40 : InstructionsEmitted(0), RegistersSaved(0), FrameBytes(0), Spills(0), |
41 Fills(0) {} | 41 Fills(0) {} |
42 void reset() { *this = CodeStats(); } | 42 void reset() { *this = CodeStats(); } |
43 void updateEmitted(uint32_t InstCount) { InstructionsEmitted += InstCount; } | 43 void updateEmitted(uint32_t InstCount) { InstructionsEmitted += InstCount; } |
44 void updateRegistersSaved(uint32_t Num) { RegistersSaved += Num; } | 44 void updateRegistersSaved(uint32_t Num) { RegistersSaved += Num; } |
45 void updateFrameBytes(uint32_t Bytes) { FrameBytes += Bytes; } | 45 void updateFrameBytes(uint32_t Bytes) { FrameBytes += Bytes; } |
46 void updateSpills() { ++Spills; } | 46 void updateSpills() { ++Spills; } |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 TargetArch getTargetArch() const { return Arch; } | 83 TargetArch getTargetArch() const { return Arch; } |
84 OptLevel getOptLevel() const { return Opt; } | 84 OptLevel getOptLevel() const { return Opt; } |
85 | 85 |
86 // When emitting assembly, we allow a string to be prepended to | 86 // When emitting assembly, we allow a string to be prepended to |
87 // names of translated functions. This makes it easier to create an | 87 // names of translated functions. This makes it easier to create an |
88 // execution test against a reference translator like llc, with both | 88 // execution test against a reference translator like llc, with both |
89 // translators using the same bitcode as input. | 89 // translators using the same bitcode as input. |
90 IceString getTestPrefix() const { return TestPrefix; } | 90 IceString getTestPrefix() const { return TestPrefix; } |
91 IceString mangleName(const IceString &Name) const; | 91 IceString mangleName(const IceString &Name) const; |
92 | 92 |
93 // The purpose of HasEmitted is to add a header comment at the | |
94 // beginning of assembly code emission, doing it once per file | |
95 // rather than once per function. | |
96 bool testAndSetHasEmittedFirstMethod() { | |
97 bool HasEmitted = HasEmittedFirstMethod; | |
98 HasEmittedFirstMethod = true; | |
99 return HasEmitted; | |
100 } | |
101 | |
102 // Manage Constants. | 93 // Manage Constants. |
103 // getConstant*() functions are not const because they might add | 94 // getConstant*() functions are not const because they might add |
104 // something to the constant pool. | 95 // something to the constant pool. |
105 Constant *getConstantInt(Type Ty, int64_t Value); | 96 Constant *getConstantInt(Type Ty, int64_t Value); |
106 Constant *getConstantInt1(int8_t ConstantInt1); | 97 Constant *getConstantInt1(int8_t ConstantInt1); |
107 Constant *getConstantInt8(int8_t ConstantInt8); | 98 Constant *getConstantInt8(int8_t ConstantInt8); |
108 Constant *getConstantInt16(int16_t ConstantInt16); | 99 Constant *getConstantInt16(int16_t ConstantInt16); |
109 Constant *getConstantInt32(int32_t ConstantInt32); | 100 Constant *getConstantInt32(int32_t ConstantInt32); |
110 Constant *getConstantInt64(int64_t ConstantInt64); | 101 Constant *getConstantInt64(int64_t ConstantInt64); |
111 Constant *getConstantFloat(float Value); | 102 Constant *getConstantFloat(float Value); |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
207 Ostream *StrEmit; // Stream for code emission | 198 Ostream *StrEmit; // Stream for code emission |
208 | 199 |
209 ArenaAllocator Allocator; | 200 ArenaAllocator Allocator; |
210 VerboseMask VMask; | 201 VerboseMask VMask; |
211 std::unique_ptr<class ConstantPool> ConstPool; | 202 std::unique_ptr<class ConstantPool> ConstPool; |
212 Intrinsics IntrinsicsInfo; | 203 Intrinsics IntrinsicsInfo; |
213 const TargetArch Arch; | 204 const TargetArch Arch; |
214 const OptLevel Opt; | 205 const OptLevel Opt; |
215 const IceString TestPrefix; | 206 const IceString TestPrefix; |
216 const ClFlags &Flags; | 207 const ClFlags &Flags; |
217 bool HasEmittedFirstMethod; | |
218 RandomNumberGenerator RNG; | 208 RandomNumberGenerator RNG; |
219 std::unique_ptr<ELFObjectWriter> ObjectWriter; | 209 std::unique_ptr<ELFObjectWriter> ObjectWriter; |
220 CodeStats StatsFunction; | 210 CodeStats StatsFunction; |
221 CodeStats StatsCumulative; | 211 CodeStats StatsCumulative; |
222 std::vector<TimerStack> Timers; | 212 std::vector<TimerStack> Timers; |
223 std::vector<GlobalDeclaration *> GlobalDeclarations; | 213 std::vector<GlobalDeclaration *> GlobalDeclarations; |
224 | 214 |
225 // Private helpers for mangleName() | 215 // Private helpers for mangleName() |
226 typedef llvm::SmallVector<char, 32> ManglerVector; | 216 typedef llvm::SmallVector<char, 32> ManglerVector; |
227 void incrementSubstitutions(ManglerVector &OldName) const; | 217 void incrementSubstitutions(ManglerVector &OldName) const; |
(...skipping 24 matching lines...) Expand all Loading... |
252 | 242 |
253 private: | 243 private: |
254 TimerIdT ID; | 244 TimerIdT ID; |
255 GlobalContext *const Ctx; | 245 GlobalContext *const Ctx; |
256 bool Active; | 246 bool Active; |
257 }; | 247 }; |
258 | 248 |
259 } // end of namespace Ice | 249 } // end of namespace Ice |
260 | 250 |
261 #endif // SUBZERO_SRC_ICEGLOBALCONTEXT_H | 251 #endif // SUBZERO_SRC_ICEGLOBALCONTEXT_H |
OLD | NEW |