diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-08-13 19:38:51 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-08-13 19:38:51 +0000 |
commit | 95f58463e58dfc3e5921aee211e1e29402cad70a (patch) | |
tree | 70c568ec78d13144b8fdd1ca291c7e3c80e17cb7 | |
parent | 2631d8c5179d94a33a87f1b9fa59652dae71e137 (diff) | |
download | bcm5719-llvm-95f58463e58dfc3e5921aee211e1e29402cad70a.tar.gz bcm5719-llvm-95f58463e58dfc3e5921aee211e1e29402cad70a.zip |
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.
llvm-svn: 78928
-rw-r--r-- | llvm/include/llvm/Target/TargetRegistry.h | 23 | ||||
-rw-r--r-- | llvm/lib/CodeGen/LLVMTargetMachine.cpp | 3 | ||||
-rw-r--r-- | llvm/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp | 10 | ||||
-rw-r--r-- | llvm/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp | 5 |
4 files changed, 22 insertions, 19 deletions
diff --git a/llvm/include/llvm/Target/TargetRegistry.h b/llvm/include/llvm/Target/TargetRegistry.h index 87be7f39e5f..9c2d959f586 100644 --- a/llvm/include/llvm/Target/TargetRegistry.h +++ b/llvm/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 <string> #include <cassert> @@ -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/llvm/lib/CodeGen/LLVMTargetMachine.cpp b/llvm/lib/CodeGen/LLVMTargetMachine.cpp index 71efa1375ee..cafe4d3f14b 100644 --- a/llvm/lib/CodeGen/LLVMTargetMachine.cpp +++ b/llvm/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/llvm/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp b/llvm/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp index e024b753860..4a44f4cb79b 100644 --- a/llvm/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp +++ b/llvm/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<PPCSubtarget>(); 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/llvm/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp b/llvm/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp index 14156828f8b..f2321595185 100644 --- a/llvm/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp +++ b/llvm/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. |