diff options
Diffstat (limited to 'llvm/tools')
-rw-r--r-- | llvm/tools/llc/llc.cpp | 22 | ||||
-rw-r--r-- | llvm/tools/llvm-exegesis/lib/Assembler.cpp | 4 | ||||
-rw-r--r-- | llvm/tools/llvm-isel-fuzzer/llvm-isel-fuzzer.cpp | 2 |
3 files changed, 24 insertions, 4 deletions
diff --git a/llvm/tools/llc/llc.cpp b/llvm/tools/llc/llc.cpp index b1f458844ff..4a85041daa0 100644 --- a/llvm/tools/llc/llc.cpp +++ b/llvm/tools/llc/llc.cpp @@ -66,6 +66,11 @@ InputLanguage("x", cl::desc("Input language ('ir' or 'mir')")); static cl::opt<std::string> OutputFilename("o", cl::desc("Output filename"), cl::value_desc("filename")); +static cl::opt<std::string> + SplitDwarfOutputFile("split-dwarf-output", + cl::desc(".dwo output filename"), + cl::value_desc("filename")); + static cl::opt<unsigned> TimeCompilations("time-compilations", cl::Hidden, cl::init(1u), cl::value_desc("N"), @@ -463,6 +468,17 @@ static int compileModule(char **argv, LLVMContext &Context) { GetOutputStream(TheTarget->getName(), TheTriple.getOS(), argv[0]); if (!Out) return 1; + std::unique_ptr<ToolOutputFile> DwoOut; + if (!SplitDwarfOutputFile.empty()) { + std::error_code EC; + DwoOut = llvm::make_unique<ToolOutputFile>(SplitDwarfOutputFile, EC, + sys::fs::F_None); + if (EC) { + errs() << EC.message() << '\n'; + return 1; + } + } + // Build up all of the passes that we want to do to the module. legacy::PassManager PM; @@ -541,7 +557,9 @@ static int compileModule(char **argv, LLVMContext &Context) { TPC.setInitialized(); PM.add(createPrintMIRPass(*OS)); PM.add(createFreeMachineFunctionPass()); - } else if (Target->addPassesToEmitFile(PM, *OS, FileType, NoVerify, MMI)) { + } else if (Target->addPassesToEmitFile(PM, *OS, + DwoOut ? &DwoOut->os() : nullptr, + FileType, NoVerify, MMI)) { errs() << argv0 << ": target does not support generation of this" << " file type!\n"; return 1; @@ -598,6 +616,8 @@ static int compileModule(char **argv, LLVMContext &Context) { // Declare success. Out->keep(); + if (DwoOut) + DwoOut->keep(); return 0; } diff --git a/llvm/tools/llvm-exegesis/lib/Assembler.cpp b/llvm/tools/llvm-exegesis/lib/Assembler.cpp index 81185064eef..30723e584ce 100644 --- a/llvm/tools/llvm-exegesis/lib/Assembler.cpp +++ b/llvm/tools/llvm-exegesis/lib/Assembler.cpp @@ -167,8 +167,8 @@ void assembleToStream(std::unique_ptr<llvm::LLVMTargetMachine> TM, TPC->setInitialized(); // AsmPrinter is responsible for generating the assembly into AsmBuffer. - if (TM->addAsmPrinter(PM, AsmStream, llvm::TargetMachine::CGFT_ObjectFile, - MCContext)) + if (TM->addAsmPrinter(PM, AsmStream, nullptr, + llvm::TargetMachine::CGFT_ObjectFile, MCContext)) llvm::report_fatal_error("Cannot add AsmPrinter passes"); PM.run(*Module); // Run all the passes diff --git a/llvm/tools/llvm-isel-fuzzer/llvm-isel-fuzzer.cpp b/llvm/tools/llvm-isel-fuzzer/llvm-isel-fuzzer.cpp index 6b71e0f6b06..0cab6799f22 100644 --- a/llvm/tools/llvm-isel-fuzzer/llvm-isel-fuzzer.cpp +++ b/llvm/tools/llvm-isel-fuzzer/llvm-isel-fuzzer.cpp @@ -99,7 +99,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { TargetLibraryInfoImpl TLII(TM->getTargetTriple()); PM.add(new TargetLibraryInfoWrapperPass(TLII)); raw_null_ostream OS; - TM->addPassesToEmitFile(PM, OS, TargetMachine::CGFT_Null); + TM->addPassesToEmitFile(PM, OS, nullptr, TargetMachine::CGFT_Null); PM.run(*M); return 0; |