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

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: Make the optimized overlaps() implementation actually correct 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 static TimerIdT getTimerID(const IceString &Name);
154 void pushTimer(TimerIdT ID);
155 void popTimer(TimerIdT ID);
156 void dumpTimers();
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
OLDNEW
« no previous file with comments | « src/IceDefs.h ('k') | src/IceGlobalContext.cpp » ('j') | src/IceOperand.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698