From 67d894ea64bc52245abf3f2ba89122a749d99c53 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Thu, 13 Aug 2009 19:38:51 +0000 Subject: [PATCH] TargetRegistry: Reorganize AsmPrinter construction so that clients pass in the TargetAsmInfo. This eliminates a dependency on TargetMachine.h from TargetRegistry.h, which technically was a layering violation. - Clients probably can only sensibly pass in the same TargetAsmInfo as the TargetMachine has, but there are only limited clients of this API. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78928 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Target/TargetRegistry.h | 23 ++++++++++--------- lib/CodeGen/LLVMTargetMachine.cpp | 3 ++- .../PowerPC/AsmPrinter/PPCAsmPrinter.cpp | 10 ++++---- lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp | 5 ++-- 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/include/llvm/Target/TargetRegistry.h b/include/llvm/Target/TargetRegistry.h index 87be7f39e5f..9c2d959f586 100644 --- a/include/llvm/Target/TargetRegistry.h +++ b/include/llvm/Target/TargetRegistry.h @@ -20,9 +20,6 @@ #define LLVM_TARGET_TARGETREGISTRY_H #include "llvm/ADT/Triple.h" -// FIXME: We shouldn't need this header, but we need it until there is a -// different interface to get the TargetAsmInfo. -#include "llvm/Target/TargetMachine.h" #include #include @@ -30,6 +27,7 @@ namespace llvm { class FunctionPass; class MCAsmParser; class Module; + class TargetAsmInfo; class TargetAsmParser; class TargetMachine; class formatted_raw_ostream; @@ -53,11 +51,12 @@ namespace llvm { typedef TargetMachine *(*TargetMachineCtorTy)(const Target &T, const std::string &TT, const std::string &Features); - typedef FunctionPass *(*AsmPrinterCtorTy)(formatted_raw_ostream &, - TargetMachine &, - bool); - typedef TargetAsmParser *(*AsmParserCtorTy)(const Target &, - MCAsmParser &); + typedef FunctionPass *(*AsmPrinterCtorTy)(formatted_raw_ostream &OS, + TargetMachine &TM, + const TargetAsmInfo *TAI, + bool VerboseAsm); + typedef TargetAsmParser *(*AsmParserCtorTy)(const Target &T, + MCAsmParser &P); private: /// Next - The next registered target in the linked list, maintained by the /// TargetRegistry. @@ -141,11 +140,12 @@ namespace llvm { /// createAsmPrinter - Create a target specific assembly printer pass. FunctionPass *createAsmPrinter(formatted_raw_ostream &OS, - TargetMachine &M, + TargetMachine &TM, + const TargetAsmInfo *TAI, bool Verbose) const { if (!AsmPrinterCtorFn) return 0; - return AsmPrinterCtorFn(OS, M, Verbose); + return AsmPrinterCtorFn(OS, TM, TAI, Verbose); } /// createAsmParser - Create a target specific assembly parser. @@ -409,8 +409,9 @@ namespace llvm { private: static FunctionPass *Allocator(formatted_raw_ostream &OS, TargetMachine &TM, + const TargetAsmInfo *TAI, bool Verbose) { - return new AsmPrinterImpl(OS, TM, TM.getTargetAsmInfo(), Verbose); + return new AsmPrinterImpl(OS, TM, TAI, Verbose); } }; diff --git a/lib/CodeGen/LLVMTargetMachine.cpp b/lib/CodeGen/LLVMTargetMachine.cpp index 71efa1375ee..cafe4d3f14b 100644 --- a/lib/CodeGen/LLVMTargetMachine.cpp +++ b/lib/CodeGen/LLVMTargetMachine.cpp @@ -106,7 +106,8 @@ bool LLVMTargetMachine::addAssemblyEmitter(PassManagerBase &PM, CodeGenOpt::Level OptLevel, bool Verbose, formatted_raw_ostream &Out) { - FunctionPass *Printer = getTarget().createAsmPrinter(Out, *this, Verbose); + FunctionPass *Printer = + getTarget().createAsmPrinter(Out, *this, getTargetAsmInfo(), Verbose); if (!Printer) return true; diff --git a/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp b/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp index e024b753860..4a44f4cb79b 100644 --- a/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp +++ b/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp @@ -1090,18 +1090,18 @@ bool PPCDarwinAsmPrinter::doFinalization(Module &M) { /// Darwin assembler can deal with. /// static FunctionPass *createPPCAsmPrinterPass(formatted_raw_ostream &o, - TargetMachine &tm, - bool verbose) { + TargetMachine &tm, + const TargetAsmInfo *tai, + bool verbose) { const PPCSubtarget *Subtarget = &tm.getSubtarget(); if (Subtarget->isDarwin()) - return new PPCDarwinAsmPrinter(o, tm, tm.getTargetAsmInfo(), verbose); - return new PPCLinuxAsmPrinter(o, tm, tm.getTargetAsmInfo(), verbose); + return new PPCDarwinAsmPrinter(o, tm, tai, verbose); + return new PPCLinuxAsmPrinter(o, tm, tai, verbose); } // Force static initialization. extern "C" void LLVMInitializePowerPCAsmPrinter() { TargetRegistry::RegisterAsmPrinter(ThePPC32Target, createPPCAsmPrinterPass); - TargetRegistry::RegisterAsmPrinter(ThePPC64Target, createPPCAsmPrinterPass); } diff --git a/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp index 14156828f8b..f2321595185 100644 --- a/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp +++ b/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp @@ -27,10 +27,11 @@ using namespace llvm; /// static FunctionPass *createX86CodePrinterPass(formatted_raw_ostream &o, TargetMachine &tm, + const TargetAsmInfo *tai, bool verbose) { if (tm.getTargetAsmInfo()->getAssemblerDialect() == 1) - return new X86IntelAsmPrinter(o, tm, tm.getTargetAsmInfo(), verbose); - return new X86ATTAsmPrinter(o, tm, tm.getTargetAsmInfo(), verbose); + return new X86IntelAsmPrinter(o, tm, tai, verbose); + return new X86ATTAsmPrinter(o, tm, tai, verbose); } // Force static initialization. -- 2.34.1