[llvm] r253624 - [LTO] Add options to llvm-lto to select output format and dump merged module

Tobias Edler von Koch via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 19 16:13:05 PST 2015


Author: tobiasvk
Date: Thu Nov 19 18:13:05 2015
New Revision: 253624

URL: http://llvm.org/viewvc/llvm-project?rev=253624&view=rev
Log:
[LTO] Add options to llvm-lto to select output format and dump merged module

This introduces two new options:
- "llvm-lto -save-merged-module -o outfile" dumps the LTO Module to
  outfile.merged.bc prior to CodeGen and after LTO optimizations have been run.
- "llvm-lto -filetype=asm -o outfile" makes llvm-lto emit assembly instead of
  object code in outfile.

Both are intended for use in lit tests.


Added:
    llvm/trunk/test/LTO/X86/llvm-lto-output.ll
Modified:
    llvm/trunk/tools/llvm-lto/llvm-lto.cpp

Added: llvm/trunk/test/LTO/X86/llvm-lto-output.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/LTO/X86/llvm-lto-output.ll?rev=253624&view=auto
==============================================================================
--- llvm/trunk/test/LTO/X86/llvm-lto-output.ll (added)
+++ llvm/trunk/test/LTO/X86/llvm-lto-output.ll Thu Nov 19 18:13:05 2015
@@ -0,0 +1,21 @@
+; Test the various output formats of the llvm-lto utility
+;
+; RUN: llvm-as < %s > %t1
+;
+; RUN: llvm-lto -exported-symbol=main -save-merged-module -filetype=asm -o %t2 %t1
+; RUN: llvm-dis -o - %t2.merged.bc | FileCheck %s
+; CHECK: @main()
+
+; RUN: FileCheck --check-prefix=ASM %s < %t2
+; RUN: llvm-lto -exported-symbol=main -filetype=obj -o %t2 %t1
+; RUN: llvm-objdump -d %t2 | FileCheck --check-prefix=ASM %s
+; ASM: main:
+;
+
+target triple = "x86_64-unknown-linux-gnu"
+
+define i32 @main() {
+entry:
+  ret i32 23
+}
+

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=253624&r1=253623&r2=253624&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-lto/llvm-lto.cpp (original)
+++ llvm/trunk/tools/llvm-lto/llvm-lto.cpp Thu Nov 19 18:13:05 2015
@@ -64,6 +64,10 @@ static cl::opt<bool>
     ThinLTO("thinlto", cl::init(false),
             cl::desc("Only write combined global index for ThinLTO backends"));
 
+static cl::opt<bool>
+SaveModuleFile("save-merged-module", cl::init(false),
+               cl::desc("Write merged LTO module to file before CodeGen"));
+
 static cl::list<std::string>
 InputFilenames(cl::Positional, cl::OneOrMore,
   cl::desc("<input bitcode files>"));
@@ -343,6 +347,9 @@ int main(int argc, char **argv) {
   if (!attrs.empty())
     CodeGen.setAttr(attrs.c_str());
 
+  if (FileType.getNumOccurrences())
+    CodeGen.setFileType(FileType);
+
   if (!OutputFilename.empty()) {
     if (!CodeGen.optimize(DisableVerify, DisableInline, DisableGVNLoadPRE,
                           DisableLTOVectorization)) {
@@ -351,6 +358,17 @@ int main(int argc, char **argv) {
       return 1;
     }
 
+    if (SaveModuleFile) {
+      std::string ModuleFilename = OutputFilename;
+      ModuleFilename += ".merged.bc";
+      std::string ErrMsg;
+
+      if (!CodeGen.writeMergedModules(ModuleFilename.c_str())) {
+        errs() << argv[0] << ": writing merged module failed.\n";
+        return 1;
+      }
+    }
+
     std::list<tool_output_file> OSs;
     std::vector<raw_pwrite_stream *> OSPtrs;
     for (unsigned I = 0; I != Parallelism; ++I) {
@@ -381,6 +399,11 @@ int main(int argc, char **argv) {
       return 1;
     }
 
+    if (SaveModuleFile) {
+      errs() << argv[0] << ": -save-merged-module must be specified with -o\n";
+      return 1;
+    }
+
     const char *OutputName = nullptr;
     if (!CodeGen.compile_to_file(&OutputName, DisableVerify, DisableInline,
                                  DisableGVNLoadPRE, DisableLTOVectorization)) {




More information about the llvm-commits mailing list