mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-19 23:23:38 -04:00
[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
This commit is contained in:
@@ -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 @@ 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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -212,6 +212,9 @@ int main(int argc, char **argv) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (FileType.getNumOccurrences())
|
||||
Conf.CGFileType = FileType;
|
||||
|
||||
Conf.OverrideTriple = OverrideTriple;
|
||||
Conf.DefaultTriple = DefaultTriple;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user