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

Side by Side Diff: src/IceCompiler.cpp

Issue 1834473002: Allow Subzero to parse function blocks in parallel. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Fix issues from last patch. Created 4 years, 9 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/IceCompiler.cpp - Driver for bitcode translation -------===// 1 //===- subzero/src/IceCompiler.cpp - Driver for bitcode translation -------===//
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 /// \file 10 /// \file
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 } 56 }
57 57
58 } // end of anonymous namespace 58 } // end of anonymous namespace
59 59
60 void Compiler::run(const Ice::ClFlags &Flags, GlobalContext &Ctx, 60 void Compiler::run(const Ice::ClFlags &Flags, GlobalContext &Ctx,
61 std::unique_ptr<llvm::DataStreamer> &&InputStream) { 61 std::unique_ptr<llvm::DataStreamer> &&InputStream) {
62 // The Minimal build (specifically, when dump()/emit() are not implemented) 62 // The Minimal build (specifically, when dump()/emit() are not implemented)
63 // allows only --filetype=obj. Check here to avoid cryptic error messages 63 // allows only --filetype=obj. Check here to avoid cryptic error messages
64 // downstream. 64 // downstream.
65 if (!BuildDefs::dump() && Ctx.getFlags().getOutFileType() != FT_Elf) { 65 if (!BuildDefs::dump() && Ctx.getFlags().getOutFileType() != FT_Elf) {
66 Ctx.getErrorStatus()->assign(EC_Args);
Jim Stichnoth 2016/03/25 04:31:04 I'm curious why this line got moved?
Karl 2016/03/29 17:35:02 Programmer error. I initially thought I needed to
66 // TODO(stichnot): Access the actual command-line argument via 67 // TODO(stichnot): Access the actual command-line argument via
Jim Stichnoth 2016/03/25 04:31:04 Can you just delete this TODO? Pretty sure it's n
Karl 2016/03/29 17:35:02 Done.
67 // llvm::Option.ArgStr and .ValueStr . 68 // llvm::Option.ArgStr and .ValueStr .
68 Ctx.getStrError() 69 Ctx.getStrError()
69 << "Error: only --filetype=obj is supported in this build.\n"; 70 << "Error: only --filetype=obj is supported in this build.\n";
70 Ctx.getErrorStatus()->assign(EC_Args);
71 return; 71 return;
72 } 72 }
73 73
74 TimerMarker T(Ice::TimerStack::TT_szmain, &Ctx); 74 TimerMarker T(Ice::TimerStack::TT_szmain, &Ctx);
75 75
76 Ctx.emitFileHeader(); 76 Ctx.emitFileHeader();
77 Ctx.startWorkerThreads(); 77 Ctx.startWorkerThreads();
78 78
79 std::unique_ptr<Translator> Translator; 79 std::unique_ptr<Translator> Translator;
80 const IceString &IRFilename = Flags.getIRFilename(); 80 const IceString &IRFilename = Flags.getIRFilename();
81 const bool BuildOnRead = Flags.getBuildOnRead() && !llvmIRInput(IRFilename); 81 const bool BuildOnRead = Flags.getBuildOnRead() && !llvmIRInput(IRFilename);
82 if (BuildOnRead) { 82 if (BuildOnRead) {
83 std::unique_ptr<PNaClTranslator> PTranslator(new PNaClTranslator(&Ctx)); 83 std::unique_ptr<PNaClTranslator> PTranslator(new PNaClTranslator(&Ctx));
84 std::unique_ptr<llvm::StreamingMemoryObject> MemObj( 84 std::unique_ptr<llvm::StreamingMemoryObject> MemObj(
85 new llvm::StreamingMemoryObjectImpl(InputStream.release())); 85 new llvm::StreamingMemoryObjectImpl(InputStream.release()));
86 PTranslator->translate(IRFilename, std::move(MemObj)); 86 PTranslator->translate(IRFilename, std::move(MemObj));
87 Translator.reset(PTranslator.release()); 87 Translator.reset(PTranslator.release());
88 } else if (BuildDefs::llvmIr()) { 88 } else if (BuildDefs::llvmIr()) {
89 if (BuildDefs::browser()) { 89 if (BuildDefs::browser()) {
90 Ctx.getStrError() 90 Ctx.getStrError()
91 << "non BuildOnRead is not supported w/ PNACL_BROWSER_TRANSLATOR\n"; 91 << "non BuildOnRead is not supported w/ PNACL_BROWSER_TRANSLATOR\n";
92 Ctx.getErrorStatus()->assign(EC_Args); 92 Ctx.getErrorStatus()->assign(EC_Args);
93 Ctx.waitForWorkerThreads();
93 return; 94 return;
94 } 95 }
95 // Globals must be kept alive after lowering when converting from LLVM to 96 // Globals must be kept alive after lowering when converting from LLVM to
96 // Ice. 97 // Ice.
97 Ctx.setDisposeGlobalVariablesAfterLowering(false); 98 Ctx.setDisposeGlobalVariablesAfterLowering(false);
98 // Parse the input LLVM IR file into a module. 99 // Parse the input LLVM IR file into a module.
99 llvm::SMDiagnostic Err; 100 llvm::SMDiagnostic Err;
100 TimerMarker T1(Ice::TimerStack::TT_parse, &Ctx); 101 TimerMarker T1(Ice::TimerStack::TT_parse, &Ctx);
101 llvm::DiagnosticHandlerFunction DiagnosticHandler = 102 llvm::DiagnosticHandlerFunction DiagnosticHandler =
102 Flags.getLLVMVerboseErrors() 103 Flags.getLLVMVerboseErrors()
103 ? redirectNaClDiagnosticToStream(llvm::errs()) 104 ? redirectNaClDiagnosticToStream(llvm::errs())
104 : nullptr; 105 : nullptr;
105 std::unique_ptr<llvm::Module> Mod = 106 std::unique_ptr<llvm::Module> Mod =
106 NaClParseIRFile(IRFilename, Flags.getInputFileFormat(), Err, 107 NaClParseIRFile(IRFilename, Flags.getInputFileFormat(), Err,
107 llvm::getGlobalContext(), DiagnosticHandler); 108 llvm::getGlobalContext(), DiagnosticHandler);
108 if (!Mod) { 109 if (!Mod) {
109 Err.print(Flags.getAppName().c_str(), llvm::errs()); 110 Err.print(Flags.getAppName().c_str(), llvm::errs());
110 Ctx.getErrorStatus()->assign(EC_Bitcode); 111 Ctx.getErrorStatus()->assign(EC_Bitcode);
112 Ctx.waitForWorkerThreads();
111 return; 113 return;
112 } 114 }
113 115
114 std::unique_ptr<Converter> Converter(new class Converter(Mod.get(), &Ctx)); 116 std::unique_ptr<Converter> Converter(new class Converter(Mod.get(), &Ctx));
115 Converter->convertToIce(); 117 Converter->convertToIce();
116 Translator.reset(Converter.release()); 118 Translator.reset(Converter.release());
117 } else { 119 } else {
118 Ctx.getStrError() << "Error: Build doesn't allow LLVM IR, " 120 Ctx.getStrError() << "Error: Build doesn't allow LLVM IR, "
119 << "--build-on-read=0 not allowed\n"; 121 << "--build-on-read=0 not allowed\n";
120 Ctx.getErrorStatus()->assign(EC_Args); 122 Ctx.getErrorStatus()->assign(EC_Args);
123 Ctx.waitForWorkerThreads();
121 return; 124 return;
122 } 125 }
123 126
124 Ctx.waitForWorkerThreads(); 127 Ctx.waitForWorkerThreads();
125 if (Translator->getErrorStatus()) { 128 if (Translator->getErrorStatus()) {
126 Ctx.getErrorStatus()->assign(Translator->getErrorStatus().value()); 129 Ctx.getErrorStatus()->assign(Translator->getErrorStatus().value());
127 } else { 130 } else {
128 Ctx.lowerGlobals("last"); 131 Ctx.lowerGlobals("last");
129 Ctx.lowerProfileData(); 132 Ctx.lowerProfileData();
130 Ctx.lowerConstants(); 133 Ctx.lowerConstants();
(...skipping 11 matching lines...) Expand all
142 145
143 if (Ctx.getFlags().getTimeEachFunction()) { 146 if (Ctx.getFlags().getTimeEachFunction()) {
144 constexpr bool NoDumpCumulative = false; 147 constexpr bool NoDumpCumulative = false;
145 Ctx.dumpTimers(GlobalContext::TSK_Funcs, NoDumpCumulative); 148 Ctx.dumpTimers(GlobalContext::TSK_Funcs, NoDumpCumulative);
146 } 149 }
147 constexpr bool FinalStats = true; 150 constexpr bool FinalStats = true;
148 Ctx.dumpStats("_FINAL_", FinalStats); 151 Ctx.dumpStats("_FINAL_", FinalStats);
149 } 152 }
150 153
151 } // end of namespace Ice 154 } // end of namespace Ice
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698