On Thu, May 31, 2018 at 11:20 AM Peter Collingbourne via Phabricator < revi...@reviews.llvm.org> wrote:
> pcc created this revision. > pcc added reviewers: tejohnson, dblaikie. > Herald added subscribers: JDevlieghere, hiraditya, eraman, inglorion, > mehdi_amini. > > https://reviews.llvm.org/D47597 > > Files: > clang/lib/CodeGen/BackendUtil.cpp > clang/test/CodeGen/thinlto-split-dwarf.c > llvm/include/llvm/LTO/Config.h > llvm/lib/LTO/LTOBackend.cpp > > > Index: llvm/lib/LTO/LTOBackend.cpp > =================================================================== > --- llvm/lib/LTO/LTOBackend.cpp > +++ llvm/lib/LTO/LTOBackend.cpp > @@ -291,14 +291,19 @@ > return; > > std::unique_ptr<ToolOutputFile> DwoOut; > + SmallString<1024> DwoFile(Conf.DwoPath); > if (!Conf.DwoDir.empty()) { > std::error_code EC; > if (auto EC = llvm::sys::fs::create_directories(Conf.DwoDir)) > report_fatal_error("Failed to create directory " + Conf.DwoDir + ": > " + > EC.message()); > > - SmallString<1024> DwoFile(Conf.DwoDir); > + DwoFile = Conf.DwoDir; > sys::path::append(DwoFile, std::to_string(Task) + ".dwo"); > + } > + > + if (!DwoFile.empty()) { > + std::error_code EC; > TM->Options.MCOptions.SplitDwarfFile = DwoFile.str().str(); > DwoOut = llvm::make_unique<ToolOutputFile>(DwoFile, EC, > sys::fs::F_None); > if (EC) > Index: llvm/include/llvm/LTO/Config.h > =================================================================== > --- llvm/include/llvm/LTO/Config.h > +++ llvm/include/llvm/LTO/Config.h > @@ -76,6 +76,11 @@ > /// The directory to store .dwo files. > std::string DwoDir; > > + /// The path to write a .dwo file to. This should generally only be > used when > + /// running an individual backend directly via thinBackend(), as > otherwise > + /// all .dwo files will be written to the same path. > + std::string DwoPath; > + > /// Optimization remarks file path. > std::string RemarksFilename = ""; > > Index: clang/test/CodeGen/thinlto-split-dwarf.c > =================================================================== > --- /dev/null > +++ clang/test/CodeGen/thinlto-split-dwarf.c > @@ -0,0 +1,21 @@ > +// REQUIRES: x86-registered-target > + > +// RUN: %clang_cc1 -debug-info-kind=limited -triple > x86_64-unknown-linux-gnu \ > +// RUN: -flto=thin -emit-llvm-bc \ > +// RUN: -o %t.o %s > + > +// RUN: llvm-lto2 run -thinlto-distributed-indexes %t.o \ > +// RUN: -o %t2.index \ > +// RUN: -r=%t.o,main,px > + > +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu \ > +// RUN: -emit-obj -fthinlto-index=%t.o.thinlto.bc \ > +// RUN: -o %t.native.o -split-dwarf-file %t.native.dwo -x ir %t.o > Can this be written in a single IR file yet (rather than frontend compiling, indexing, then backend compiling), now that Teresa's implemented some of the summary IR syntax? > + > +// RUN: llvm-readobj -sections %t.native.o | FileCheck --check-prefix=O %s > +// RUN: llvm-readobj -sections %t.native.dwo | FileCheck > --check-prefix=DWO %s > + > +// O-NOT: .dwo > +// DWO: .dwo > + > +int main() {} > Index: clang/lib/CodeGen/BackendUtil.cpp > =================================================================== > --- clang/lib/CodeGen/BackendUtil.cpp > +++ clang/lib/CodeGen/BackendUtil.cpp > @@ -1161,6 +1161,7 @@ > Conf.DebugPassManager = CGOpts.DebugPassManager; > Conf.RemarksWithHotness = CGOpts.DiagnosticsWithHotness; > Conf.RemarksFilename = CGOpts.OptRecordFile; > + Conf.DwoPath = CGOpts.SplitDwarfFile; > switch (Action) { > case Backend_EmitNothing: > Conf.PreCodeGenModuleHook = [](size_t Task, const Module &Mod) { > > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits