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

Side by Side Diff: src/IceGlobalContext.h

Issue 1052833003: First attempt to capture parser/translation errors in browser. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Fix nits and syntax errors. Created 5 years, 8 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
« no previous file with comments | « src/IceCompileServer.cpp ('k') | src/IceGlobalContext.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 ThreadContext &operator=(const ThreadContext &) = delete; 138 ThreadContext &operator=(const ThreadContext &) = delete;
139 139
140 public: 140 public:
141 ThreadContext() {} 141 ThreadContext() {}
142 CodeStats StatsFunction; 142 CodeStats StatsFunction;
143 CodeStats StatsCumulative; 143 CodeStats StatsCumulative;
144 TimerList Timers; 144 TimerList Timers;
145 }; 145 };
146 146
147 public: 147 public:
148 GlobalContext(Ostream *OsDump, Ostream *OsEmit, ELFStreamer *ELFStreamer, 148 // The dump stream is a log stream while emit is the stream code
149 const ClFlags &Flags); 149 // is emitted to. The error stream is strictly for logging errors.
150 GlobalContext(Ostream *OsDump, Ostream *OsEmit, Ostream *OsError,
151 ELFStreamer *ELFStreamer, const ClFlags &Flags);
150 ~GlobalContext(); 152 ~GlobalContext();
151 153
152 // The dump and emit streams need to be used by only one thread at a 154 //
153 // time. This is done by exclusively reserving the streams via 155 // The dump, error, and emit streams need to be used by only one
154 // lockStr() and unlockStr(). The OstreamLocker class can be used 156 // thread at a time. This is done by exclusively reserving the
155 // to conveniently manage this. 157 // streams via lockStr() and unlockStr(). The OstreamLocker class
158 // can be used to conveniently manage this.
156 // 159 //
157 // The model is that a thread grabs the stream lock, then does an 160 // The model is that a thread grabs the stream lock, then does an
158 // arbitrary amount of work during which far-away callees may grab 161 // arbitrary amount of work during which far-away callees may grab
159 // the stream and do something with it, and finally the thread 162 // the stream and do something with it, and finally the thread
160 // releases the stream lock. This allows large chunks of output to 163 // releases the stream lock. This allows large chunks of output to
161 // be dumped or emitted without risking interleaving from multiple 164 // be dumped or emitted without risking interleaving from multiple
162 // threads. 165 // threads.
163 void lockStr() { StrLock.lock(); } 166 void lockStr() { StrLock.lock(); }
164 void unlockStr() { StrLock.unlock(); } 167 void unlockStr() { StrLock.unlock(); }
165 Ostream &getStrDump() { return *StrDump; } 168 Ostream &getStrDump() { return *StrDump; }
169 Ostream &getStrError() { return *StrError; }
166 Ostream &getStrEmit() { return *StrEmit; } 170 Ostream &getStrEmit() { return *StrEmit; }
167 171
168 LockedPtr<ErrorCode> getErrorStatus() { 172 LockedPtr<ErrorCode> getErrorStatus() {
169 return LockedPtr<ErrorCode>(&ErrorStatus, &ErrorStatusLock); 173 return LockedPtr<ErrorCode>(&ErrorStatus, &ErrorStatusLock);
170 } 174 }
171 175
172 // When emitting assembly, we allow a string to be prepended to 176 // When emitting assembly, we allow a string to be prepended to
173 // names of translated functions. This makes it easier to create an 177 // names of translated functions. This makes it easier to create an
174 // execution test against a reference translator like llc, with both 178 // execution test against a reference translator like llc, with both
175 // translators using the same bitcode as input. 179 // translators using the same bitcode as input.
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 // Managed by getTimers() 415 // Managed by getTimers()
412 GlobalLockType TimerLock; 416 GlobalLockType TimerLock;
413 TimerList Timers; 417 TimerList Timers;
414 418
415 ICE_CACHELINE_BOUNDARY; 419 ICE_CACHELINE_BOUNDARY;
416 // StrLock is a global lock on the dump and emit output streams. 420 // StrLock is a global lock on the dump and emit output streams.
417 typedef std::mutex StrLockType; 421 typedef std::mutex StrLockType;
418 StrLockType StrLock; 422 StrLockType StrLock;
419 Ostream *StrDump; // Stream for dumping / diagnostics 423 Ostream *StrDump; // Stream for dumping / diagnostics
420 Ostream *StrEmit; // Stream for code emission 424 Ostream *StrEmit; // Stream for code emission
425 Ostream *StrError; // Stream for logging errors.
421 426
422 ICE_CACHELINE_BOUNDARY; 427 ICE_CACHELINE_BOUNDARY;
423 428
424 Intrinsics IntrinsicsInfo; 429 Intrinsics IntrinsicsInfo;
425 const ClFlags &Flags; 430 const ClFlags &Flags;
426 RandomNumberGenerator RNG; // TODO(stichnot): Move into Cfg. 431 RandomNumberGenerator RNG; // TODO(stichnot): Move into Cfg.
427 std::unique_ptr<ELFObjectWriter> ObjectWriter; 432 std::unique_ptr<ELFObjectWriter> ObjectWriter;
428 BoundedProducerConsumerQueue<Cfg> OptQ; 433 BoundedProducerConsumerQueue<Cfg> OptQ;
429 BoundedProducerConsumerQueue<EmitterWorkItem> EmitQ; 434 BoundedProducerConsumerQueue<EmitterWorkItem> EmitQ;
430 435
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 explicit OstreamLocker(GlobalContext *Ctx) : Ctx(Ctx) { Ctx->lockStr(); } 510 explicit OstreamLocker(GlobalContext *Ctx) : Ctx(Ctx) { Ctx->lockStr(); }
506 ~OstreamLocker() { Ctx->unlockStr(); } 511 ~OstreamLocker() { Ctx->unlockStr(); }
507 512
508 private: 513 private:
509 GlobalContext *const Ctx; 514 GlobalContext *const Ctx;
510 }; 515 };
511 516
512 } // end of namespace Ice 517 } // end of namespace Ice
513 518
514 #endif // SUBZERO_SRC_ICEGLOBALCONTEXT_H 519 #endif // SUBZERO_SRC_ICEGLOBALCONTEXT_H
OLDNEW
« no previous file with comments | « src/IceCompileServer.cpp ('k') | src/IceGlobalContext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698