diff --git a/include/llvm/Target/TargetRegistry.h b/include/llvm/Target/TargetRegistry.h
index 87be7f3..9c2d959 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 <string>
 #include <cassert>
 
@@ -30,6 +27,7 @@
   class FunctionPass;
   class MCAsmParser;
   class Module;
+  class TargetAsmInfo;
   class TargetAsmParser;
   class TargetMachine;
   class formatted_raw_ostream;
@@ -53,11 +51,12 @@
     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 @@
 
     /// 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 @@
   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 71efa13..cafe4d3 100644
--- a/lib/CodeGen/LLVMTargetMachine.cpp
+++ b/lib/CodeGen/LLVMTargetMachine.cpp
@@ -106,7 +106,8 @@
                                            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 e024b75..4a44f4c 100644
--- a/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
+++ b/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
@@ -1090,18 +1090,18 @@
 /// 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/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp
index 1415682..f232159 100644
--- a/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp
+++ b/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp
@@ -27,10 +27,11 @@
 ///
 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.
