[llvm] r278761 - [ThinLTO] Fix temp file dumping, enable via llvm-lto and test it
Teresa Johnson via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 15 16:24:57 PDT 2016
Author: tejohnson
Date: Mon Aug 15 18:24:57 2016
New Revision: 278761
URL: http://llvm.org/viewvc/llvm-project?rev=278761&view=rev
Log:
[ThinLTO] Fix temp file dumping, enable via llvm-lto and test it
Summary:
Fixed a bug in ThinLTOCodeGenerator's temp file dumping. The Twine
needs to be passed directly as an argument, or a copy saved into a
std::string.
It doesn't seem there are any consumers of this, so I added a new option
to llvm-lto to enable saving of temp files during ThinLTO, and augmented
a test to use it to check post-import but pre-opt bitcode.
Reviewers: mehdi_amini
Subscribers: llvm-commits, mehdi_amini
Differential Revision: https://reviews.llvm.org/D23525
Modified:
llvm/trunk/lib/LTO/ThinLTOCodeGenerator.cpp
llvm/trunk/test/ThinLTO/X86/linkonce_resolution_comdat.ll
llvm/trunk/tools/llvm-lto/llvm-lto.cpp
Modified: llvm/trunk/lib/LTO/ThinLTOCodeGenerator.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/ThinLTOCodeGenerator.cpp?rev=278761&r1=278760&r2=278761&view=diff
==============================================================================
--- llvm/trunk/lib/LTO/ThinLTOCodeGenerator.cpp (original)
+++ llvm/trunk/lib/LTO/ThinLTOCodeGenerator.cpp Mon Aug 15 18:24:57 2016
@@ -78,9 +78,9 @@ static void saveTempBitcode(const Module
if (TempDir.empty())
return;
// User asked to save temps, let dump the bitcode file after import.
- auto SaveTempPath = TempDir + llvm::utostr(count) + Suffix;
+ std::string SaveTempPath = (TempDir + llvm::utostr(count) + Suffix).str();
std::error_code EC;
- raw_fd_ostream OS(SaveTempPath.str(), EC, sys::fs::F_None);
+ raw_fd_ostream OS(SaveTempPath, EC, sys::fs::F_None);
if (EC)
report_fatal_error(Twine("Failed to open ") + SaveTempPath +
" to save optimized bitcode\n");
Modified: llvm/trunk/test/ThinLTO/X86/linkonce_resolution_comdat.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ThinLTO/X86/linkonce_resolution_comdat.ll?rev=278761&r1=278760&r2=278761&view=diff
==============================================================================
--- llvm/trunk/test/ThinLTO/X86/linkonce_resolution_comdat.ll (original)
+++ llvm/trunk/test/ThinLTO/X86/linkonce_resolution_comdat.ll Mon Aug 15 18:24:57 2016
@@ -3,7 +3,15 @@
; verification error.
; RUN: opt -module-summary %s -o %t1.bc
; RUN: opt -module-summary %p/Inputs/linkonce_resolution_comdat.ll -o %t2.bc
-; RUN: llvm-lto -thinlto-action=run %t1.bc %t2.bc -exported-symbol=f -exported-symbol=g
+; RUN: llvm-lto -thinlto-action=run %t1.bc %t2.bc -exported-symbol=f -exported-symbol=g -thinlto-save-temps=%t3.
+
+; RUN: llvm-dis %t3.0.3.imported.bc -o - | FileCheck %s --check-prefix=IMPORT1
+; RUN: llvm-dis %t3.1.3.imported.bc -o - | FileCheck %s --check-prefix=IMPORT2
+; Copy from first module is prevailing and converted to weak_odr, copy
+; from second module is preempted and converted to available_externally and
+; removed from comdat.
+; IMPORT1: define weak_odr i32 @f(i8*) unnamed_addr comdat($c1) {
+; IMPORT2: define available_externally i32 @f(i8*) unnamed_addr {
; RUN: llvm-nm -o - < %t1.bc.thinlto.o | FileCheck %s --check-prefix=NM1
; NM1: W f
Modified: llvm/trunk/tools/llvm-lto/llvm-lto.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-lto/llvm-lto.cpp?rev=278761&r1=278760&r2=278761&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-lto/llvm-lto.cpp (original)
+++ llvm/trunk/tools/llvm-lto/llvm-lto.cpp Mon Aug 15 18:24:57 2016
@@ -120,6 +120,11 @@ static cl::opt<std::string> ThinLTOModul
static cl::opt<std::string>
ThinLTOCacheDir("thinlto-cache-dir", cl::desc("Enable ThinLTO caching."));
+static cl::opt<std::string> ThinLTOSaveTempsPrefix(
+ "thinlto-save-temps",
+ cl::desc("Save ThinLTO temp files using filenames created by adding "
+ "suffixes to the given file path prefix."));
+
static cl::opt<bool>
SaveModuleFile("save-merged-module", cl::init(false),
cl::desc("Write merged LTO module to file before CodeGen"));
@@ -672,6 +677,8 @@ private:
ThinGenerator.addModule(Filename, InputBuffers.back()->getBuffer());
}
+ if (!ThinLTOSaveTempsPrefix.empty())
+ ThinGenerator.setSaveTempsDir(ThinLTOSaveTempsPrefix);
ThinGenerator.run();
auto &Binaries = ThinGenerator.getProducedBinaries();
More information about the llvm-commits
mailing list