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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
62 // the output streams. | 62 // the output streams. |
63 class GlobalContext { | 63 class GlobalContext { |
64 public: | 64 public: |
65 GlobalContext(llvm::raw_ostream *OsDump, llvm::raw_ostream *OsEmit, | 65 GlobalContext(llvm::raw_ostream *OsDump, llvm::raw_ostream *OsEmit, |
66 VerboseMask Mask, TargetArch Arch, OptLevel Opt, | 66 VerboseMask Mask, TargetArch Arch, OptLevel Opt, |
67 IceString TestPrefix, const ClFlags &Flags); | 67 IceString TestPrefix, const ClFlags &Flags); |
68 ~GlobalContext(); | 68 ~GlobalContext(); |
69 | 69 |
70 // Returns true if any of the specified options in the verbose mask | 70 // Returns true if any of the specified options in the verbose mask |
71 // are set. If the argument is omitted, it checks if any verbose | 71 // are set. If the argument is omitted, it checks if any verbose |
72 // options at all are set. IceV_Timing is treated specially, so | 72 // options at all are set. |
73 // that running with just IceV_Timing verbosity doesn't trigger an | 73 bool isVerbose(VerboseMask Mask = IceV_All) const { return VMask & Mask; } |
74 // avalanche of extra output. | |
75 bool isVerbose(VerboseMask Mask = (IceV_All & ~IceV_Timing)) const { | |
76 return VMask & Mask; | |
77 } | |
78 void setVerbose(VerboseMask Mask) { VMask = Mask; } | 74 void setVerbose(VerboseMask Mask) { VMask = Mask; } |
79 void addVerbose(VerboseMask Mask) { VMask |= Mask; } | 75 void addVerbose(VerboseMask Mask) { VMask |= Mask; } |
80 void subVerbose(VerboseMask Mask) { VMask &= ~Mask; } | 76 void subVerbose(VerboseMask Mask) { VMask &= ~Mask; } |
81 | 77 |
82 Ostream &getStrDump() { return *StrDump; } | 78 Ostream &getStrDump() { return *StrDump; } |
83 Ostream &getStrEmit() { return *StrEmit; } | 79 Ostream &getStrEmit() { return *StrEmit; } |
84 | 80 |
85 TargetArch getTargetArch() const { return Arch; } | 81 TargetArch getTargetArch() const { return Arch; } |
86 OptLevel getOptLevel() const { return Opt; } | 82 OptLevel getOptLevel() const { return Opt; } |
87 | 83 |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
147 } | 143 } |
148 void statsUpdateSpills() { | 144 void statsUpdateSpills() { |
149 StatsFunction.updateSpills(); | 145 StatsFunction.updateSpills(); |
150 StatsCumulative.updateSpills(); | 146 StatsCumulative.updateSpills(); |
151 } | 147 } |
152 void statsUpdateFills() { | 148 void statsUpdateFills() { |
153 StatsFunction.updateFills(); | 149 StatsFunction.updateFills(); |
154 StatsCumulative.updateFills(); | 150 StatsCumulative.updateFills(); |
155 } | 151 } |
156 | 152 |
153 static TimerIdT getTimerID(const IceString &Name); | |
154 void pushTimer(TimerIdT ID); | |
155 void popTimer(TimerIdT ID); | |
156 void dumpTimers(); | |
jvoung (off chromium)
2014/09/30 20:19:04
Can dumpTimers() be const? N/M, looks like no sinc
Jim Stichnoth
2014/09/30 22:45:59
Right - we must track that last iota of runtime!
| |
157 | |
157 private: | 158 private: |
158 Ostream *StrDump; // Stream for dumping / diagnostics | 159 Ostream *StrDump; // Stream for dumping / diagnostics |
159 Ostream *StrEmit; // Stream for code emission | 160 Ostream *StrEmit; // Stream for code emission |
160 | 161 |
161 llvm::BumpPtrAllocator Allocator; | 162 llvm::BumpPtrAllocator Allocator; |
162 VerboseMask VMask; | 163 VerboseMask VMask; |
163 llvm::OwningPtr<class ConstantPool> ConstPool; | 164 llvm::OwningPtr<class ConstantPool> ConstPool; |
164 Intrinsics IntrinsicsInfo; | 165 Intrinsics IntrinsicsInfo; |
165 const TargetArch Arch; | 166 const TargetArch Arch; |
166 const OptLevel Opt; | 167 const OptLevel Opt; |
167 const IceString TestPrefix; | 168 const IceString TestPrefix; |
168 const ClFlags &Flags; | 169 const ClFlags &Flags; |
169 bool HasEmittedFirstMethod; | 170 bool HasEmittedFirstMethod; |
170 RandomNumberGenerator RNG; | 171 RandomNumberGenerator RNG; |
171 CodeStats StatsFunction; | 172 CodeStats StatsFunction; |
172 CodeStats StatsCumulative; | 173 CodeStats StatsCumulative; |
174 llvm::OwningPtr<class TimerStack> Timers; | |
173 GlobalContext(const GlobalContext &) LLVM_DELETED_FUNCTION; | 175 GlobalContext(const GlobalContext &) LLVM_DELETED_FUNCTION; |
174 GlobalContext &operator=(const GlobalContext &) LLVM_DELETED_FUNCTION; | 176 GlobalContext &operator=(const GlobalContext &) LLVM_DELETED_FUNCTION; |
175 | 177 |
176 // Private helpers for mangleName() | 178 // Private helpers for mangleName() |
177 typedef llvm::SmallVector<char, 32> ManglerVector; | 179 typedef llvm::SmallVector<char, 32> ManglerVector; |
178 void incrementSubstitutions(ManglerVector &OldName) const; | 180 void incrementSubstitutions(ManglerVector &OldName) const; |
179 }; | 181 }; |
180 | 182 |
183 // Helper class to push and pop a timer marker. The constructor | |
184 // pushes a marker, and the destructor pops it. This is for | |
185 // convenient timing of regions of code. | |
186 class TimerMarker { | |
187 TimerMarker(const TimerMarker &) LLVM_DELETED_FUNCTION; | |
188 TimerMarker &operator=(const TimerMarker &) LLVM_DELETED_FUNCTION; | |
189 | |
190 public: | |
191 TimerMarker(TimerIdT ID, GlobalContext *Ctx) | |
192 : ID(ID), Ctx(Ctx), Active(Ctx->getFlags().SubzeroTimingEnabled) { | |
193 if (Active) | |
194 Ctx->pushTimer(ID); | |
195 } | |
196 ~TimerMarker() { | |
197 if (Active) | |
198 Ctx->popTimer(ID); | |
199 } | |
200 | |
201 private: | |
202 TimerIdT ID; | |
203 GlobalContext *const Ctx; | |
204 const bool Active; | |
205 }; | |
206 | |
181 } // end of namespace Ice | 207 } // end of namespace Ice |
182 | 208 |
183 #endif // SUBZERO_SRC_ICEGLOBALCONTEXT_H | 209 #endif // SUBZERO_SRC_ICEGLOBALCONTEXT_H |
OLD | NEW |