[PATCH] D47597: IRGen: Write .dwo files when -split-dwarf-file is used together with -fthinlto-index.
Teresa Johnson via cfe-commits
cfe-commits at lists.llvm.org
Thu May 31 13:01:01 PDT 2018
On Thu, May 31, 2018 at 12:00 PM Peter Collingbourne <peter at pcc.me.uk>
wrote:
>
>
> On Thu, May 31, 2018 at 11:54 AM, David Blaikie <dblaikie at gmail.com>
> wrote:
>
>>
>>
>> On Thu, May 31, 2018 at 11:20 AM Peter Collingbourne via Phabricator <
>> reviews at 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 | tejohnson at google.com | 408-460-2413
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180531/d83fd775/attachment.html>
More information about the cfe-commits
mailing list