| OLD | NEW |
| 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 // This file defines a driver for translating PNaCl bitcode into native code. | 10 // This file defines a driver for translating PNaCl bitcode into native code. |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 #include "IceConverter.h" | 29 #include "IceConverter.h" |
| 30 #include "IceELFObjectWriter.h" | 30 #include "IceELFObjectWriter.h" |
| 31 #include "PNaClTranslator.h" | 31 #include "PNaClTranslator.h" |
| 32 namespace Ice { | 32 namespace Ice { |
| 33 | 33 |
| 34 namespace { | 34 namespace { |
| 35 | 35 |
| 36 struct { | 36 struct { |
| 37 const char *FlagName; | 37 const char *FlagName; |
| 38 int FlagValue; | 38 int FlagValue; |
| 39 } ConditionalBuildAttributes[] = {{"dump", ALLOW_DUMP}, | 39 } ConditionalBuildAttributes[] = { |
| 40 {"disable_ir_gen", ALLOW_DISABLE_IR_GEN}, | 40 {"dump", BuildDefs::dump()}, |
| 41 {"llvm_cl", ALLOW_LLVM_CL}, | 41 {"disable_ir_gen", BuildDefs::disableIrGen()}, |
| 42 {"llvm_ir", ALLOW_LLVM_IR}, | 42 {"llvm_cl", BuildDefs::llvmCl()}, |
| 43 {"llvm_ir_as_input", ALLOW_LLVM_IR_AS_INPUT}, | 43 {"llvm_ir", BuildDefs::llvmIr()}, |
| 44 {"minimal_build", ALLOW_MINIMAL_BUILD}, | 44 {"llvm_ir_as_input", BuildDefs::llvmIrAsInput()}, |
| 45 {"browser_mode", PNACL_BROWSER_TRANSLATOR}}; | 45 {"minimal_build", BuildDefs::minimal()}, |
| 46 {"browser_mode", PNACL_BROWSER_TRANSLATOR}}; |
| 46 | 47 |
| 47 // Validates values of build attributes. Prints them to Stream if | 48 // Validates values of build attributes. Prints them to Stream if |
| 48 // Stream is non-null. | 49 // Stream is non-null. |
| 49 void validateAndGenerateBuildAttributes(Ostream *Stream) { | 50 void validateAndGenerateBuildAttributes(Ostream *Stream) { |
| 50 // List the supported targets. | 51 // List the supported targets. |
| 51 if (Stream) { | 52 if (Stream) { |
| 52 #define SUBZERO_TARGET(TARGET) *Stream << "target_" #TARGET << "\n"; | 53 #define SUBZERO_TARGET(TARGET) *Stream << "target_" #TARGET << "\n"; |
| 53 #include "llvm/Config/SZTargets.def" | 54 #include "llvm/Config/SZTargets.def" |
| 54 } | 55 } |
| 55 | 56 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 78 | 79 |
| 79 } // end of anonymous namespace | 80 } // end of anonymous namespace |
| 80 | 81 |
| 81 void Compiler::run(const Ice::ClFlagsExtra &ExtraFlags, GlobalContext &Ctx, | 82 void Compiler::run(const Ice::ClFlagsExtra &ExtraFlags, GlobalContext &Ctx, |
| 82 std::unique_ptr<llvm::DataStreamer> &&InputStream) { | 83 std::unique_ptr<llvm::DataStreamer> &&InputStream) { |
| 83 validateAndGenerateBuildAttributes( | 84 validateAndGenerateBuildAttributes( |
| 84 ExtraFlags.getGenerateBuildAtts() ? &Ctx.getStrDump() : nullptr); | 85 ExtraFlags.getGenerateBuildAtts() ? &Ctx.getStrDump() : nullptr); |
| 85 if (ExtraFlags.getGenerateBuildAtts()) | 86 if (ExtraFlags.getGenerateBuildAtts()) |
| 86 return Ctx.getErrorStatus()->assign(EC_None); | 87 return Ctx.getErrorStatus()->assign(EC_None); |
| 87 | 88 |
| 88 if (!ALLOW_DISABLE_IR_GEN && Ctx.getFlags().getDisableIRGeneration()) { | 89 if (!BuildDefs::disableIrGen() && Ctx.getFlags().getDisableIRGeneration()) { |
| 89 Ctx.getStrDump() << "Error: Build doesn't allow --no-ir-gen when not " | 90 Ctx.getStrDump() << "Error: Build doesn't allow --no-ir-gen when not " |
| 90 << "ALLOW_DISABLE_IR_GEN!\n"; | 91 << "ALLOW_DISABLE_IR_GEN!\n"; |
| 91 return Ctx.getErrorStatus()->assign(EC_Args); | 92 return Ctx.getErrorStatus()->assign(EC_Args); |
| 92 } | 93 } |
| 93 | 94 |
| 94 // Force -build-on-read=0 for .ll files. | 95 // Force -build-on-read=0 for .ll files. |
| 95 const std::string LLSuffix = ".ll"; | 96 const std::string LLSuffix = ".ll"; |
| 96 const IceString &IRFilename = ExtraFlags.getIRFilename(); | 97 const IceString &IRFilename = ExtraFlags.getIRFilename(); |
| 97 bool BuildOnRead = ExtraFlags.getBuildOnRead(); | 98 bool BuildOnRead = ExtraFlags.getBuildOnRead(); |
| 98 if (ALLOW_LLVM_IR_AS_INPUT && IRFilename.length() >= LLSuffix.length() && | 99 if (BuildDefs::llvmIrAsInput() && IRFilename.length() >= LLSuffix.length() && |
| 99 IRFilename.compare(IRFilename.length() - LLSuffix.length(), | 100 IRFilename.compare(IRFilename.length() - LLSuffix.length(), |
| 100 LLSuffix.length(), LLSuffix) == 0) | 101 LLSuffix.length(), LLSuffix) == 0) |
| 101 BuildOnRead = false; | 102 BuildOnRead = false; |
| 102 | 103 |
| 103 TimerMarker T(Ice::TimerStack::TT_szmain, &Ctx); | 104 TimerMarker T(Ice::TimerStack::TT_szmain, &Ctx); |
| 104 | 105 |
| 105 Ctx.emitFileHeader(); | 106 Ctx.emitFileHeader(); |
| 106 Ctx.startWorkerThreads(); | 107 Ctx.startWorkerThreads(); |
| 107 | 108 |
| 108 std::unique_ptr<Translator> Translator; | 109 std::unique_ptr<Translator> Translator; |
| 109 if (BuildOnRead) { | 110 if (BuildOnRead) { |
| 110 std::unique_ptr<PNaClTranslator> PTranslator(new PNaClTranslator(&Ctx)); | 111 std::unique_ptr<PNaClTranslator> PTranslator(new PNaClTranslator(&Ctx)); |
| 111 std::unique_ptr<llvm::StreamingMemoryObject> MemObj( | 112 std::unique_ptr<llvm::StreamingMemoryObject> MemObj( |
| 112 new llvm::StreamingMemoryObjectImpl(InputStream.release())); | 113 new llvm::StreamingMemoryObjectImpl(InputStream.release())); |
| 113 PTranslator->translate(IRFilename, std::move(MemObj)); | 114 PTranslator->translate(IRFilename, std::move(MemObj)); |
| 114 Translator.reset(PTranslator.release()); | 115 Translator.reset(PTranslator.release()); |
| 115 } else if (ALLOW_LLVM_IR) { | 116 } else if (BuildDefs::llvmIr()) { |
| 116 if (PNACL_BROWSER_TRANSLATOR) { | 117 if (PNACL_BROWSER_TRANSLATOR) { |
| 117 Ctx.getStrDump() | 118 Ctx.getStrDump() |
| 118 << "non BuildOnRead is not supported w/ PNACL_BROWSER_TRANSLATOR\n"; | 119 << "non BuildOnRead is not supported w/ PNACL_BROWSER_TRANSLATOR\n"; |
| 119 return Ctx.getErrorStatus()->assign(EC_Args); | 120 return Ctx.getErrorStatus()->assign(EC_Args); |
| 120 } | 121 } |
| 121 // Parse the input LLVM IR file into a module. | 122 // Parse the input LLVM IR file into a module. |
| 122 llvm::SMDiagnostic Err; | 123 llvm::SMDiagnostic Err; |
| 123 TimerMarker T1(Ice::TimerStack::TT_parse, &Ctx); | 124 TimerMarker T1(Ice::TimerStack::TT_parse, &Ctx); |
| 124 llvm::raw_ostream *Verbose = | 125 llvm::raw_ostream *Verbose = |
| 125 ExtraFlags.getLLVMVerboseErrors() ? &llvm::errs() : nullptr; | 126 ExtraFlags.getLLVMVerboseErrors() ? &llvm::errs() : nullptr; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 | 161 |
| 161 if (Ctx.getFlags().getTimeEachFunction()) { | 162 if (Ctx.getFlags().getTimeEachFunction()) { |
| 162 const bool DumpCumulative = false; | 163 const bool DumpCumulative = false; |
| 163 Ctx.dumpTimers(GlobalContext::TSK_Funcs, DumpCumulative); | 164 Ctx.dumpTimers(GlobalContext::TSK_Funcs, DumpCumulative); |
| 164 } | 165 } |
| 165 constexpr bool FinalStats = true; | 166 constexpr bool FinalStats = true; |
| 166 Ctx.dumpStats("_FINAL_", FinalStats); | 167 Ctx.dumpStats("_FINAL_", FinalStats); |
| 167 } | 168 } |
| 168 | 169 |
| 169 } // end of namespace Ice | 170 } // end of namespace Ice |
| OLD | NEW |