From: Tobias Edler von Koch Date: Wed, 15 Feb 2017 20:36:36 +0000 (+0000) Subject: [LTO] Add ability to emit assembly to new LTO API X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=01c2fdec036f2fcbf48583e3ba555caa661276c0;p=llvm [LTO] Add ability to emit assembly to new LTO API Summary: 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. Reviewers: tejohnson, mehdi_amini, pcc Reviewed By: mehdi_amini Subscribers: davide, llvm-commits Differential Revision: https://reviews.llvm.org/D29475 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@295226 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/LTO/Config.h b/include/llvm/LTO/Config.h index 06bfdbcecd5..ede6637dfa4 100644 --- a/include/llvm/LTO/Config.h +++ b/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 @@ -41,6 +42,7 @@ struct Config { 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; diff --git a/lib/LTO/LTO.cpp b/lib/LTO/LTO.cpp index 8f873242fa5..fe74c5f7d4b 100644 --- a/lib/LTO/LTO.cpp +++ b/lib/LTO/LTO.cpp @@ -98,6 +98,7 @@ static void computeCacheKey( AddUnsigned(Conf.RelocModel); AddUnsigned(Conf.CodeModel); AddUnsigned(Conf.CGOptLevel); + AddUnsigned(Conf.CGFileType); AddUnsigned(Conf.OptLevel); AddString(Conf.OptPipeline); AddString(Conf.AAPipeline); diff --git a/lib/LTO/LTOBackend.cpp b/lib/LTO/LTOBackend.cpp index 00959cbea69..25795b1332e 100644 --- a/lib/LTO/LTOBackend.cpp +++ b/lib/LTO/LTOBackend.cpp @@ -271,8 +271,7 @@ void codegen(Config &Conf, TargetMachine *TM, AddStreamFn AddStream, 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); } diff --git a/test/LTO/Resolution/X86/asm-output.ll b/test/LTO/Resolution/X86/asm-output.ll new file mode 100644 index 00000000000..68a7a5c5fc6 --- /dev/null +++ b/test/LTO/Resolution/X86/asm-output.ll @@ -0,0 +1,19 @@ +; Test the ability to emit assembly code from the resolution-based LTO API +; +; RUN: llvm-as < %s > %t1.bc +; +; 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 +; +; ASM: main: + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +define i32 @main() { +entry: + ret i32 23 +} + diff --git a/tools/llvm-lto2/llvm-lto2.cpp b/tools/llvm-lto2/llvm-lto2.cpp index 328c41dd36e..b112f028e41 100644 --- a/tools/llvm-lto2/llvm-lto2.cpp +++ b/tools/llvm-lto2/llvm-lto2.cpp @@ -212,6 +212,9 @@ int main(int argc, char **argv) { return 1; } + if (FileType.getNumOccurrences()) + Conf.CGFileType = FileType; + Conf.OverrideTriple = OverrideTriple; Conf.DefaultTriple = DefaultTriple;