TargetRegistry: Reorganize AsmPrinter construction so that clients pass in the
authorDaniel Dunbar <daniel@zuster.org>
Thu, 13 Aug 2009 19:38:51 +0000 (19:38 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Thu, 13 Aug 2009 19:38:51 +0000 (19:38 +0000)
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
lib/CodeGen/LLVMTargetMachine.cpp
lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp

index 87be7f39e5f77a5e9a10f9ee7b053d933d564e04..9c2d959f58637378278ba27f053976b25e1fe818 100644 (file)
@@ -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);
     }
   };
 
index 71efa1375ee34e61e2aefe8158d74ebed103efd0..cafe4d3f14b5f6c65d3ddd05a652510d6689e47d 100644 (file)
@@ -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;
 
index e024b75386033f40480e39c8df26ea323fe208da..4a44f4cb79b8458c3364763b31b7d562608f1a02 100644 (file)
@@ -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);
 }
index 14156828f8b9b88977392c33c3a7c777d9b5aeff..f232159518536b578070a57877c5a40c69bffa8d 100644 (file)
@@ -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.