Chromium Code Reviews| Index: src/IceGlobalContext.cpp |
| diff --git a/src/IceGlobalContext.cpp b/src/IceGlobalContext.cpp |
| index b61873d6a3f8a41600c1763509aaf8e6def73608..afc7d9bb75bb6becb2854322899fbbdc85e740d7 100644 |
| --- a/src/IceGlobalContext.cpp |
| +++ b/src/IceGlobalContext.cpp |
| @@ -289,15 +289,25 @@ void GlobalContext::CodeStats::dump(const Cfg *Func, GlobalContext *Ctx) { |
| } |
| } |
| +namespace { |
| + |
| +// By default, wake up the main parser thread when the OptQ gets half empty. |
| +static constexpr size_t DefaultOptQWakeupSize = GlobalContext::MaxOptQSize >> 1; |
| + |
| +} // end of anonymous namespace |
| + |
| GlobalContext::GlobalContext(Ostream *OsDump, Ostream *OsEmit, Ostream *OsError, |
| ELFStreamer *ELFStr) |
| : Strings(new StringPool()), ConstPool(new ConstantPool()), ErrorStatus(), |
| StrDump(OsDump), StrEmit(OsEmit), StrError(OsError), IntrinsicsInfo(this), |
| - ObjectWriter(), OptQ(/*Sequential=*/getFlags().isSequential(), |
| - /*MaxSize=*/ |
| - getFlags().isParseParallel() |
| - ? MaxOptQSize |
| - : getFlags().getNumTranslationThreads()), |
| + ObjectWriter(), |
| + OptQWakeupSize(std::max(DefaultOptQWakeupSize, |
| + size_t(getFlags().getNumTranslationThreads()))), |
| + OptQ(/*Sequential=*/getFlags().isSequential(), |
| + /*MaxSize=*/ |
| + getFlags().isParseParallel() |
| + ? MaxOptQSize |
| + : getFlags().getNumTranslationThreads()), |
| // EmitQ is allowed unlimited size. |
| EmitQ(/*Sequential=*/getFlags().isSequential()), |
| DataLowering(TargetDataLowering::createLowering(this)) { |
| @@ -939,7 +949,7 @@ void GlobalContext::optQueueBlockingPush(std::unique_ptr<OptWorkItem> Item) { |
| std::unique_ptr<OptWorkItem> GlobalContext::optQueueBlockingPop() { |
| TimerMarker _(TimerStack::TT_qTransPop, this); |
| - return std::unique_ptr<OptWorkItem>(OptQ.blockingPop()); |
| + return std::unique_ptr<OptWorkItem>(OptQ.blockingPop(OptQWakeupSize)); |
|
John
2016/04/11 16:27:59
Not really your fault, but can you remove the
std
Karl
2016/04/11 21:48:54
Done.
|
| } |
| void GlobalContext::emitQueueBlockingPush( |