Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Side by Side Diff: src/IceGlobalContext.h

Issue 610813002: Subzero: Rewrite the pass timing infrastructure. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Bug fixes and performance improvements Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 void pushTimer(const IceString &Name);
154 void popTimer(const IceString &Name);
155 void dumpTimers();
156
157 private: 157 private:
158 Ostream *StrDump; // Stream for dumping / diagnostics 158 Ostream *StrDump; // Stream for dumping / diagnostics
159 Ostream *StrEmit; // Stream for code emission 159 Ostream *StrEmit; // Stream for code emission
160 160
161 llvm::BumpPtrAllocator Allocator; 161 llvm::BumpPtrAllocator Allocator;
162 VerboseMask VMask; 162 VerboseMask VMask;
163 llvm::OwningPtr<class ConstantPool> ConstPool; 163 llvm::OwningPtr<class ConstantPool> ConstPool;
164 Intrinsics IntrinsicsInfo; 164 Intrinsics IntrinsicsInfo;
165 const TargetArch Arch; 165 const TargetArch Arch;
166 const OptLevel Opt; 166 const OptLevel Opt;
167 const IceString TestPrefix; 167 const IceString TestPrefix;
168 const ClFlags &Flags; 168 const ClFlags &Flags;
169 bool HasEmittedFirstMethod; 169 bool HasEmittedFirstMethod;
170 RandomNumberGenerator RNG; 170 RandomNumberGenerator RNG;
171 CodeStats StatsFunction; 171 CodeStats StatsFunction;
172 CodeStats StatsCumulative; 172 CodeStats StatsCumulative;
173 llvm::OwningPtr<class TimerStack> Timers;
173 GlobalContext(const GlobalContext &) LLVM_DELETED_FUNCTION; 174 GlobalContext(const GlobalContext &) LLVM_DELETED_FUNCTION;
174 GlobalContext &operator=(const GlobalContext &) LLVM_DELETED_FUNCTION; 175 GlobalContext &operator=(const GlobalContext &) LLVM_DELETED_FUNCTION;
175 176
176 // Private helpers for mangleName() 177 // Private helpers for mangleName()
177 typedef llvm::SmallVector<char, 32> ManglerVector; 178 typedef llvm::SmallVector<char, 32> ManglerVector;
178 void incrementSubstitutions(ManglerVector &OldName) const; 179 void incrementSubstitutions(ManglerVector &OldName) const;
179 }; 180 };
180 181
182 // Helper class to push and pop a timer marker. The constructor
183 // pushes a marker, and the destructor pops it. This is for
184 // convenient timing of regions of code.
185 class TimerMarker {
186 TimerMarker(const TimerMarker &) LLVM_DELETED_FUNCTION;
187 TimerMarker &operator=(const TimerMarker &) LLVM_DELETED_FUNCTION;
188
189 public:
190 TimerMarker(const IceString &Name, GlobalContext *Ctx)
191 : Name(Name), Ctx(Ctx), Active(Ctx->getFlags().SubzeroTimingEnabled) {
192 if (Active)
193 Ctx->pushTimer(Name);
194 }
195 ~TimerMarker() {
196 if (Active)
197 Ctx->popTimer(Name);
198 }
199
200 private:
201 const IceString Name;
202 GlobalContext *const Ctx;
203 const bool Active;
204 };
205
181 } // end of namespace Ice 206 } // end of namespace Ice
182 207
183 #endif // SUBZERO_SRC_ICEGLOBALCONTEXT_H 208 #endif // SUBZERO_SRC_ICEGLOBALCONTEXT_H
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698