[PATCH] D29475: [LTO] Add ability to emit assembly to new LTO API

Tobias Edler von Koch via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 2 15:32:46 PST 2017


tobiasvk created this revision.

Add a field to LTO::Config, CGFileType, to select the file type to emit (object
or assembly). This is useful for testing and to implement -save-temps.


https://reviews.llvm.org/D29475

Files:
  include/llvm/LTO/Config.h
  lib/LTO/LTO.cpp
  lib/LTO/LTOBackend.cpp
  test/LTO/X86/llvm-lto-output.ll
  tools/llvm-lto2/llvm-lto2.cpp


Index: lib/LTO/LTOBackend.cpp
===================================================================
--- lib/LTO/LTOBackend.cpp
+++ lib/LTO/LTOBackend.cpp
@@ -271,8 +271,7 @@
 
   auto Stream = AddStream(Task);
   legacy::PassManager CodeGenPasses;
-  if (TM->addPassesToEmitFile(CodeGenPasses, *Stream->OS,
-                              TargetMachine::CGFT_ObjectFile))
+  if (TM->addPassesToEmitFile(CodeGenPasses, *Stream->OS, Conf.CGFileType))
     report_fatal_error("Failed to setup codegen");
   CodeGenPasses.run(Mod);
 }
Index: lib/LTO/LTO.cpp
===================================================================
--- lib/LTO/LTO.cpp
+++ lib/LTO/LTO.cpp
@@ -94,6 +94,7 @@
   AddUnsigned(Conf.RelocModel);
   AddUnsigned(Conf.CodeModel);
   AddUnsigned(Conf.CGOptLevel);
+  AddUnsigned(Conf.CGFileType);
   AddUnsigned(Conf.OptLevel);
   AddString(Conf.OptPipeline);
   AddString(Conf.AAPipeline);
Index: tools/llvm-lto2/llvm-lto2.cpp
===================================================================
--- tools/llvm-lto2/llvm-lto2.cpp
+++ tools/llvm-lto2/llvm-lto2.cpp
@@ -199,6 +199,9 @@
     return 1;
   }
 
+  if (FileType.getNumOccurrences())
+    Conf.CGFileType = FileType;
+
   Conf.OverrideTriple = OverrideTriple;
   Conf.DefaultTriple = DefaultTriple;
 
Index: include/llvm/LTO/Config.h
===================================================================
--- include/llvm/LTO/Config.h
+++ include/llvm/LTO/Config.h
@@ -17,6 +17,7 @@
 
 #include "llvm/IR/DiagnosticInfo.h"
 #include "llvm/Support/CodeGen.h"
+#include "llvm/Target/TargetMachine.h"
 #include "llvm/Target/TargetOptions.h"
 
 #include <functional>
@@ -41,6 +42,7 @@
   Reloc::Model RelocModel = Reloc::PIC_;
   CodeModel::Model CodeModel = CodeModel::Default;
   CodeGenOpt::Level CGOptLevel = CodeGenOpt::Default;
+  TargetMachine::CodeGenFileType CGFileType = TargetMachine::CGFT_ObjectFile;
   unsigned OptLevel = 2;
   bool DisableVerify = false;
 
Index: test/LTO/X86/llvm-lto-output.ll
===================================================================
--- test/LTO/X86/llvm-lto-output.ll
+++ test/LTO/X86/llvm-lto-output.ll
@@ -1,17 +1,26 @@
-; Test the various output formats of the llvm-lto utility
+; Test the various output formats of the llvm-lto and llvm-lto2 utilities
 ;
-; RUN: llvm-as < %s > %t1
+; RUN: llvm-as < %s > %t1.bc
 ;
-; RUN: llvm-lto -exported-symbol=main -save-merged-module -filetype=asm -o %t2 %t1
+;-- Test llvm-lto
+;
+; RUN: llvm-lto -exported-symbol=main -save-merged-module -filetype=asm -o %t2 %t1.bc
 ; 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-lto -exported-symbol=main -filetype=obj -o %t2 %t1.bc
 ; RUN: llvm-objdump -d %t2 | FileCheck --check-prefix=ASM %s
 ; ASM: main:
 ;
+;-- Test llvm-lto2
+;
+; RUN: llvm-lto2 -filetype=asm -r %t1.bc,main,px -o %t2 %t1.bc
+; RUN: FileCheck --check-prefix=ASM %s < %t2.0
+; RUN: llvm-lto2 -filetype=obj -r %t1.bc,main,px -o %t2 %t1.bc
+; RUN: llvm-objdump -d %t2.0 | FileCheck --check-prefix=ASM %s
 
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 
 define i32 @main() {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D29475.86907.patch
Type: text/x-patch
Size: 3242 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170202/8aa91cae/attachment.bin>


More information about the llvm-commits mailing list