[PATCH] D47597: IRGen: Write .dwo files when -split-dwarf-file is used together with -fthinlto-index.

Peter Collingbourne via cfe-commits cfe-commits at lists.llvm.org
Thu May 31 12:00:06 PDT 2018


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.
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180531/611048f7/attachment.html>


More information about the cfe-commits mailing list