On Thu, May 31, 2018 at 12:00 PM Peter Collingbourne <pe...@pcc.me.uk> wrote:
> > > On Thu, May 31, 2018 at 11:54 AM, David Blaikie <dblai...@gmail.com> > wrote: > >> >> >> 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? >> > > I think the parsing part isn't implemented yet, so that wouldn't work. > Regarding this - the parsing support is coming along, slowly but surely. I'd say I am about 75% done. Teresa > Besides, we would need two separate files anyway: the bitcode file (%t.o) > and the combined summary (%t.o.thinlto.bc). > > Peter > > >> >> >>> + >>> +// 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) { >>> >>> >>> > > > -- > -- > Peter > -- Teresa Johnson | Software Engineer | tejohn...@google.com | 408-460-2413
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits