diff --git a/lib/Target/ARM/ARMTargetAsmInfo.cpp b/lib/Target/ARM/ARMTargetAsmInfo.cpp
index 81bec51..7afbab3 100644
--- a/lib/Target/ARM/ARMTargetAsmInfo.cpp
+++ b/lib/Target/ARM/ARMTargetAsmInfo.cpp
@@ -17,7 +17,7 @@
 #include <cctype>
 using namespace llvm;
 
-const char *const llvm::arm_asm_table[] = {
+static const char *const arm_asm_table[] = {
                                       "{r0}", "r0",
                                       "{r1}", "r1",
                                       "{r2}", "r2",
@@ -42,10 +42,21 @@
                                       "{cc}", "cc",
                                       0,0};
 
-TEMPLATE_INSTANTIATION(class ARMTargetAsmInfo<TargetAsmInfo>);
+ARMTargetAsmInfo::ARMTargetAsmInfo(const ARMTargetMachine &TM) {
+  AsmTransCBE = arm_asm_table;
+
+  AlignmentIsInBytes = false;
+  Data64bitsDirective = 0;
+  CommentString = "@";
+  ConstantPoolSection = "\t.text\n";
+  COMMDirectiveTakesAlignment = false;
+  InlineAsmStart = "@ InlineAsm Start";
+  InlineAsmEnd = "@ InlineAsm End";
+  LCOMMDirective = "\t.lcomm\t";
+}
 
 ARMDarwinTargetAsmInfo::ARMDarwinTargetAsmInfo(const ARMTargetMachine &TM):
-  ARMTargetAsmInfo<DarwinTargetAsmInfo>(TM) {
+  ARMTargetAsmInfo(TM), DarwinTargetAsmInfo(TM) {
   Subtarget = &DTM->getSubtarget<ARMSubtarget>();
 
   GlobalPrefix = "_";
@@ -93,7 +104,7 @@
 }
 
 ARMELFTargetAsmInfo::ARMELFTargetAsmInfo(const ARMTargetMachine &TM):
-  ARMTargetAsmInfo<ELFTargetAsmInfo>(TM) {
+  ARMTargetAsmInfo(TM), ELFTargetAsmInfo(TM) {
   Subtarget = &ETM->getSubtarget<ARMSubtarget>();
 
   NeedsSet = false;
@@ -127,15 +138,13 @@
 
 /// Count the number of comma-separated arguments.
 /// Do not try to detect errors.
-template <class BaseTAI>
-unsigned ARMTargetAsmInfo<BaseTAI>::countArguments(const char* p) const {
+unsigned ARMTargetAsmInfo::countArguments(const char* p) const {
   unsigned count = 0;
   while (*p && isspace(*p) && *p != '\n')
     p++;
   count++;
-  while (*p && *p!='\n' &&
-         strncmp(p, BaseTAI::CommentString,
-                 strlen(BaseTAI::CommentString))!=0) {
+  while (*p && *p!='\n' && 
+         strncmp(p, CommentString, strlen(CommentString))!=0) {
     if (*p==',')
       count++;
     p++;
@@ -145,8 +154,7 @@
 
 /// Count the length of a string enclosed in quote characters.
 /// Do not try to detect errors.
-template <class BaseTAI>
-unsigned ARMTargetAsmInfo<BaseTAI>::countString(const char* p) const {
+unsigned ARMTargetAsmInfo::countString(const char* p) const {
   unsigned count = 0;
   while (*p && isspace(*p) && *p!='\n')
     p++;
@@ -158,8 +166,7 @@
 }
 
 /// ARM-specific version of TargetAsmInfo::getInlineAsmLength.
-template <class BaseTAI>
-unsigned ARMTargetAsmInfo<BaseTAI>::getInlineAsmLength(const char *s) const {
+unsigned ARMTargetAsmInfo::getInlineAsmLength(const char *s) const {
   // Make a lowercase-folded version of s for counting purposes.
   char *q, *s_copy = (char *)malloc(strlen(s) + 1);
   strcpy(s_copy, s);
@@ -185,7 +192,7 @@
           break;
         }
       // Ignore everything from comment char(s) to EOL
-      if (strncmp(Str, BaseTAI::CommentString, strlen(BaseTAI::CommentString))==-0)
+      if (strncmp(Str, CommentString, strlen(CommentString))==-0)
         atInsnStart = false;
       // FIXME do something like the following for non-Darwin
       else if (*Str == '.' && Subtarget->isTargetDarwin()) {
@@ -275,7 +282,7 @@
           Length += 4;    // ARM
       }
     }
-    if (*Str == '\n' || *Str == BaseTAI::SeparatorChar)
+    if (*Str == '\n' || *Str == SeparatorChar)
       atInsnStart = true;
   }
   free(s_copy);
diff --git a/lib/Target/ARM/ARMTargetAsmInfo.h b/lib/Target/ARM/ARMTargetAsmInfo.h
index 9e6f856..9030d06 100644
--- a/lib/Target/ARM/ARMTargetAsmInfo.h
+++ b/lib/Target/ARM/ARMTargetAsmInfo.h
@@ -14,31 +14,19 @@
 #ifndef ARMTARGETASMINFO_H
 #define ARMTARGETASMINFO_H
 
-#include "ARMTargetMachine.h"
 #include "llvm/Target/TargetAsmInfo.h"
 #include "llvm/Target/ELFTargetAsmInfo.h"
 #include "llvm/Target/DarwinTargetAsmInfo.h"
-#include "llvm/Support/Compiler.h"
+
+#include "ARMSubtarget.h"
 
 namespace llvm {
 
-  extern const char *const arm_asm_table[];
+  // Forward declaration.
+  class ARMTargetMachine;
 
-  template <class BaseTAI>
-  struct ARMTargetAsmInfo : public BaseTAI {
-    explicit ARMTargetAsmInfo(const ARMTargetMachine &TM):
-      BaseTAI(TM) {
-      BaseTAI::AsmTransCBE = arm_asm_table;
-
-      BaseTAI::AlignmentIsInBytes = false;
-      BaseTAI::Data64bitsDirective = 0;
-      BaseTAI::CommentString = "@";
-      BaseTAI::ConstantPoolSection = "\t.text\n";
-      BaseTAI::COMMDirectiveTakesAlignment = false;
-      BaseTAI::InlineAsmStart = "@ InlineAsm Start";
-      BaseTAI::InlineAsmEnd = "@ InlineAsm End";
-      BaseTAI::LCOMMDirective = "\t.lcomm\t";
-    }
+  struct ARMTargetAsmInfo : public virtual TargetAsmInfo {
+    explicit ARMTargetAsmInfo(const ARMTargetMachine &TM);
 
     const ARMSubtarget *Subtarget;
 
@@ -47,15 +35,13 @@
     unsigned countString(const char *p) const;
   };
 
-  typedef ARMTargetAsmInfo<TargetAsmInfo> ARMGenericTargetAsmInfo;
-
-  EXTERN_TEMPLATE_INSTANTIATION(class ARMTargetAsmInfo<TargetAsmInfo>);
-
-  struct ARMDarwinTargetAsmInfo : public ARMTargetAsmInfo<DarwinTargetAsmInfo> {
+  struct ARMDarwinTargetAsmInfo : public virtual ARMTargetAsmInfo,
+                                  public virtual DarwinTargetAsmInfo {
     explicit ARMDarwinTargetAsmInfo(const ARMTargetMachine &TM);
   };
 
-  struct ARMELFTargetAsmInfo : public ARMTargetAsmInfo<ELFTargetAsmInfo> {
+  struct ARMELFTargetAsmInfo : public virtual ARMTargetAsmInfo,
+                               public virtual ELFTargetAsmInfo {
     explicit ARMELFTargetAsmInfo(const ARMTargetMachine &TM);
   };
 
diff --git a/lib/Target/ARM/ARMTargetMachine.cpp b/lib/Target/ARM/ARMTargetMachine.cpp
index 29a9d84..0613078 100644
--- a/lib/Target/ARM/ARMTargetMachine.cpp
+++ b/lib/Target/ARM/ARMTargetMachine.cpp
@@ -120,7 +120,7 @@
    case ARMSubtarget::isELF:
     return new ARMELFTargetAsmInfo(*this);
    default:
-    return new ARMGenericTargetAsmInfo(*this);
+    return new ARMTargetAsmInfo(*this);
   }
 }
 
diff --git a/lib/Target/PowerPC/PPCTargetAsmInfo.cpp b/lib/Target/PowerPC/PPCTargetAsmInfo.cpp
index 717ddd6..6988e78 100644
--- a/lib/Target/PowerPC/PPCTargetAsmInfo.cpp
+++ b/lib/Target/PowerPC/PPCTargetAsmInfo.cpp
@@ -19,10 +19,21 @@
 using namespace llvm;
 using namespace llvm::dwarf;
 
-TEMPLATE_INSTANTIATION(class PPCTargetAsmInfo<TargetAsmInfo>);
+PPCTargetAsmInfo::PPCTargetAsmInfo(const PPCTargetMachine &TM) {
+  bool isPPC64 = TM.getSubtargetImpl()->isPPC64();
+
+  ZeroDirective = "\t.space\t";
+  SetDirective = "\t.set";
+  Data64bitsDirective = isPPC64 ? "\t.quad\t" : 0;  
+  AlignmentIsInBytes = false;
+  LCOMMDirective = "\t.lcomm\t";
+  InlineAsmStart = "# InlineAsm Start";
+  InlineAsmEnd = "# InlineAsm End";
+  AssemblerDialect = TM.getSubtargetImpl()->getAsmFlavor();
+}
 
 PPCDarwinTargetAsmInfo::PPCDarwinTargetAsmInfo(const PPCTargetMachine &TM):
-  PPCTargetAsmInfo<DarwinTargetAsmInfo>(TM) {
+  PPCTargetAsmInfo(TM), DarwinTargetAsmInfo(TM) {
   PCSymbol = ".";
   CommentString = ";";
   GlobalPrefix = "_";
@@ -92,7 +103,7 @@
 
 
 PPCLinuxTargetAsmInfo::PPCLinuxTargetAsmInfo(const PPCTargetMachine &TM) :
-  PPCTargetAsmInfo<ELFTargetAsmInfo>(TM) {
+  PPCTargetAsmInfo(TM), ELFTargetAsmInfo(TM) {
   CommentString = "#";
   GlobalPrefix = "";
   PrivateGlobalPrefix = "";
diff --git a/lib/Target/PowerPC/PPCTargetAsmInfo.h b/lib/Target/PowerPC/PPCTargetAsmInfo.h
index a533d5f..c3160e3 100644
--- a/lib/Target/PowerPC/PPCTargetAsmInfo.h
+++ b/lib/Target/PowerPC/PPCTargetAsmInfo.h
@@ -14,43 +14,28 @@
 #ifndef PPCTARGETASMINFO_H
 #define PPCTARGETASMINFO_H
 
-#include "PPCTargetMachine.h"
 #include "llvm/Target/TargetAsmInfo.h"
 #include "llvm/Target/DarwinTargetAsmInfo.h"
 #include "llvm/Target/ELFTargetAsmInfo.h"
-#include "llvm/Support/Compiler.h"
 
 namespace llvm {
 
-  template <class BaseTAI>
-  struct PPCTargetAsmInfo : public BaseTAI {
-    explicit PPCTargetAsmInfo(const PPCTargetMachine &TM):
-      BaseTAI(TM) {
-      const PPCSubtarget *Subtarget = &TM.getSubtarget<PPCSubtarget>();
-      bool isPPC64 = Subtarget->isPPC64();
+  // Forward declaration.
+  class PPCTargetMachine;
 
-      BaseTAI::ZeroDirective = "\t.space\t";
-      BaseTAI::SetDirective = "\t.set";
-      BaseTAI::Data64bitsDirective = isPPC64 ? "\t.quad\t" : 0;
-      BaseTAI::AlignmentIsInBytes = false;
-      BaseTAI::LCOMMDirective = "\t.lcomm\t";
-      BaseTAI::InlineAsmStart = "# InlineAsm Start";
-      BaseTAI::InlineAsmEnd = "# InlineAsm End";
-      BaseTAI::AssemblerDialect = Subtarget->getAsmFlavor();
-    }
+  struct PPCTargetAsmInfo : public virtual TargetAsmInfo {
+    explicit PPCTargetAsmInfo(const PPCTargetMachine &TM);
   };
 
-  typedef PPCTargetAsmInfo<TargetAsmInfo> PPCGenericTargetAsmInfo;
-
-  EXTERN_TEMPLATE_INSTANTIATION(class PPCTargetAsmInfo<TargetAsmInfo>);
-
-  struct PPCDarwinTargetAsmInfo : public PPCTargetAsmInfo<DarwinTargetAsmInfo> {
+  struct PPCDarwinTargetAsmInfo : public PPCTargetAsmInfo,
+                                  public DarwinTargetAsmInfo {
     explicit PPCDarwinTargetAsmInfo(const PPCTargetMachine &TM);
     virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
                                            bool Global) const;
   };
 
-  struct PPCLinuxTargetAsmInfo : public PPCTargetAsmInfo<ELFTargetAsmInfo> {
+  struct PPCLinuxTargetAsmInfo : public PPCTargetAsmInfo,
+                                 public ELFTargetAsmInfo {
     explicit PPCLinuxTargetAsmInfo(const PPCTargetMachine &TM);
     virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
                                            bool Global) const;
diff --git a/lib/Target/TargetAsmInfo.cpp b/lib/Target/TargetAsmInfo.cpp
index 03fd326..1c883ad 100644
--- a/lib/Target/TargetAsmInfo.cpp
+++ b/lib/Target/TargetAsmInfo.cpp
@@ -25,108 +25,100 @@
 
 using namespace llvm;
 
-void TargetAsmInfo::fillDefaultValues() {
-  BSSSection = "\t.bss";
-  BSSSection_ = 0;
-  ReadOnlySection = 0;
-  SmallDataSection = 0;
-  SmallBSSSection = 0;
-  SmallRODataSection = 0;
-  TLSDataSection = 0;
-  TLSBSSSection = 0;
-  ZeroFillDirective = 0;
-  NonexecutableStackDirective = 0;
-  NeedsSet = false;
-  MaxInstLength = 4;
-  PCSymbol = "$";
-  SeparatorChar = ';';
-  CommentString = "#";
-  GlobalPrefix = "";
-  PrivateGlobalPrefix = ".";
-  LessPrivateGlobalPrefix = "";
-  JumpTableSpecialLabelPrefix = 0;
-  GlobalVarAddrPrefix = "";
-  GlobalVarAddrSuffix = "";
-  FunctionAddrPrefix = "";
-  FunctionAddrSuffix = "";
-  PersonalityPrefix = "";
-  PersonalitySuffix = "";
-  NeedsIndirectEncoding = false;
-  InlineAsmStart = "#APP";
-  InlineAsmEnd = "#NO_APP";
-  AssemblerDialect = 0;
-  StringConstantPrefix = ".str";
-  ZeroDirective = "\t.zero\t";
-  ZeroDirectiveSuffix = 0;
-  AsciiDirective = "\t.ascii\t";
-  AscizDirective = "\t.asciz\t";
-  Data8bitsDirective = "\t.byte\t";
-  Data16bitsDirective = "\t.short\t";
-  Data32bitsDirective = "\t.long\t";
-  Data64bitsDirective = "\t.quad\t";
-  AlignDirective = "\t.align\t";
-  AlignmentIsInBytes = true;
-  TextAlignFillValue = 0;
-  SwitchToSectionDirective = "\t.section\t";
-  TextSectionStartSuffix = "";
-  DataSectionStartSuffix = "";
-  SectionEndDirectiveSuffix = 0;
-  ConstantPoolSection = "\t.section .rodata";
-  JumpTableDataSection = "\t.section .rodata";
-  JumpTableDirective = 0;
-  CStringSection = 0;
-  CStringSection_ = 0;
-  // FIXME: Flags are ELFish - replace with normal section stuff.
-  StaticCtorsSection = "\t.section .ctors,\"aw\",@progbits";
-  StaticDtorsSection = "\t.section .dtors,\"aw\",@progbits";
-  GlobalDirective = "\t.globl\t";
-  SetDirective = 0;
-  LCOMMDirective = 0;
-  COMMDirective = "\t.comm\t";
-  COMMDirectiveTakesAlignment = true;
-  HasDotTypeDotSizeDirective = true;
-  UsedDirective = 0;
-  WeakRefDirective = 0;
-  WeakDefDirective = 0;
-  // FIXME: These are ELFish - move to ELFTAI.
-  HiddenDirective = "\t.hidden\t";
-  ProtectedDirective = "\t.protected\t";
-  AbsoluteDebugSectionOffsets = false;
-  AbsoluteEHSectionOffsets = false;
-  HasLEB128 = false;
-  HasDotLocAndDotFile = false;
-  SupportsDebugInformation = false;
-  SupportsExceptionHandling = false;
-  DwarfRequiresFrameSection = true;
-  GlobalEHDirective = 0;
-  SupportsWeakOmittedEHFrame = true;
-  DwarfSectionOffsetDirective = 0;
-  DwarfAbbrevSection = ".debug_abbrev";
-  DwarfInfoSection = ".debug_info";
-  DwarfLineSection = ".debug_line";
-  DwarfFrameSection = ".debug_frame";
-  DwarfPubNamesSection = ".debug_pubnames";
-  DwarfPubTypesSection = ".debug_pubtypes";
-  DwarfStrSection = ".debug_str";
-  DwarfLocSection = ".debug_loc";
-  DwarfARangesSection = ".debug_aranges";
-  DwarfRangesSection = ".debug_ranges";
-  DwarfMacInfoSection = ".debug_macinfo";
-  DwarfEHFrameSection = ".eh_frame";
-  DwarfExceptionSection = ".gcc_except_table";
-  AsmTransCBE = 0;
+TargetAsmInfo::TargetAsmInfo() :
+  TextSection(0),
+  DataSection(0),
+  BSSSection("\t.bss"),
+  BSSSection_(0),
+  ReadOnlySection(0),
+  SmallDataSection(0),
+  SmallBSSSection(0),
+  SmallRODataSection(0),
+  TLSDataSection(0),
+  TLSBSSSection(0),
+  ZeroFillDirective(0),
+  NonexecutableStackDirective(0),
+  NeedsSet(false),
+  MaxInstLength(4),
+  PCSymbol("$"),
+  SeparatorChar(';'),
+  CommentString("#"),
+  GlobalPrefix(""),
+  PrivateGlobalPrefix("."),
+  LessPrivateGlobalPrefix(""),
+  JumpTableSpecialLabelPrefix(0),
+  GlobalVarAddrPrefix(""),
+  GlobalVarAddrSuffix(""),
+  FunctionAddrPrefix(""),
+  FunctionAddrSuffix(""),
+  PersonalityPrefix(""),
+  PersonalitySuffix(""),
+  NeedsIndirectEncoding(false),
+  InlineAsmStart("#APP"),
+  InlineAsmEnd("#NO_APP"),
+  AssemblerDialect(0),
+  StringConstantPrefix(".str"),
+  ZeroDirective("\t.zero\t"),
+  ZeroDirectiveSuffix(0),
+  AsciiDirective("\t.ascii\t"),
+  AscizDirective("\t.asciz\t"),
+  Data8bitsDirective("\t.byte\t"),
+  Data16bitsDirective("\t.short\t"),
+  Data32bitsDirective("\t.long\t"),
+  Data64bitsDirective("\t.quad\t"),
+  AlignDirective("\t.align\t"),
+  AlignmentIsInBytes(true),
+  TextAlignFillValue(0),
+  SwitchToSectionDirective("\t.section\t"),
+  TextSectionStartSuffix(""),
+  DataSectionStartSuffix(""),
+  SectionEndDirectiveSuffix(0),
+  ConstantPoolSection("\t.section .rodata"),
+  JumpTableDataSection("\t.section .rodata"),
+  JumpTableDirective(0),
+  CStringSection(0),
+  CStringSection_(0),
+  StaticCtorsSection("\t.section .ctors,\"aw\",@progbits"),
+  StaticDtorsSection("\t.section .dtors,\"aw\",@progbits"),
+  GlobalDirective("\t.globl\t"),
+  SetDirective(0),
+  LCOMMDirective(0),
+  COMMDirective("\t.comm\t"),
+  COMMDirectiveTakesAlignment(true),
+  HasDotTypeDotSizeDirective(true),
+  UsedDirective(0),
+  WeakRefDirective(0),
+  WeakDefDirective(0),
+  HiddenDirective("\t.hidden\t"),
+  ProtectedDirective("\t.protected\t"),
+  AbsoluteDebugSectionOffsets(false),
+  AbsoluteEHSectionOffsets(false),
+  HasLEB128(false),
+  HasDotLocAndDotFile(false),
+  SupportsDebugInformation(false),
+  SupportsExceptionHandling(false),
+  DwarfRequiresFrameSection(true),
+  GlobalEHDirective(0),
+  SupportsWeakOmittedEHFrame(true),
+  DwarfSectionOffsetDirective(0),
+  DwarfAbbrevSection(".debug_abbrev"),
+  DwarfInfoSection(".debug_info"),
+  DwarfLineSection(".debug_line"),
+  DwarfFrameSection(".debug_frame"),
+  DwarfPubNamesSection(".debug_pubnames"),
+  DwarfPubTypesSection(".debug_pubtypes"),
+  DwarfStrSection(".debug_str"),
+  DwarfLocSection(".debug_loc"),
+  DwarfARangesSection(".debug_aranges"),
+  DwarfRangesSection(".debug_ranges"),
+  DwarfMacInfoSection(".debug_macinfo"),
+  DwarfEHFrameSection(".eh_frame"),
+  DwarfExceptionSection(".gcc_except_table"),
+  AsmTransCBE(0) {
   TextSection = getUnnamedSection("\t.text", SectionFlags::Code);
   DataSection = getUnnamedSection("\t.data", SectionFlags::Writeable);
 }
 
-TargetAsmInfo::TargetAsmInfo() {
-  fillDefaultValues();
-}
-
-TargetAsmInfo::TargetAsmInfo(const TargetMachine &TM) {
-  fillDefaultValues();
-}
-
 TargetAsmInfo::~TargetAsmInfo() {
 }
 
diff --git a/lib/Target/X86/X86TargetAsmInfo.cpp b/lib/Target/X86/X86TargetAsmInfo.cpp
index a8930b8..c6a76f2 100644
--- a/lib/Target/X86/X86TargetAsmInfo.cpp
+++ b/lib/Target/X86/X86TargetAsmInfo.cpp
@@ -25,22 +25,27 @@
 using namespace llvm;
 using namespace llvm::dwarf;
 
-const char *const llvm::x86_asm_table[] = {
-  "{si}", "S",
-  "{di}", "D",
-  "{ax}", "a",
-  "{cx}", "c",
-  "{memory}", "memory",
-  "{flags}", "",
-  "{dirflag}", "",
-  "{fpsr}", "",
-  "{cc}", "cc",
-  0,0};
+static const char *const x86_asm_table[] = {
+                                      "{si}", "S",
+                                      "{di}", "D",
+                                      "{ax}", "a",
+                                      "{cx}", "c",
+                                      "{memory}", "memory",
+                                      "{flags}", "",
+                                      "{dirflag}", "",
+                                      "{fpsr}", "",
+                                      "{cc}", "cc",
+                                      0,0};
 
-TEMPLATE_INSTANTIATION(class X86TargetAsmInfo<TargetAsmInfo>);
+X86TargetAsmInfo::X86TargetAsmInfo(const X86TargetMachine &TM) {
+  const X86Subtarget *Subtarget = &TM.getSubtarget<X86Subtarget>();
 
-template <class BaseTAI>
-bool X86TargetAsmInfo<BaseTAI>::LowerToBSwap(CallInst *CI) const {
+  AsmTransCBE = x86_asm_table;
+
+  AssemblerDialect = Subtarget->getAsmFlavor();
+}
+
+bool X86TargetAsmInfo::LowerToBSwap(CallInst *CI) const {
   // FIXME: this should verify that we are targetting a 486 or better.  If not,
   // we will turn this bswap into something that will be lowered to logical ops
   // instead of emitting the bswap asm.  For now, we don't support 486 or lower
@@ -69,8 +74,7 @@
   return true;
 }
 
-template <class BaseTAI>
-bool X86TargetAsmInfo<BaseTAI>::ExpandInlineAsm(CallInst *CI) const {
+bool X86TargetAsmInfo::ExpandInlineAsm(CallInst *CI) const {
   InlineAsm *IA = cast<InlineAsm>(CI->getCalledValue());
   std::vector<InlineAsm::ConstraintInfo> Constraints = IA->ParseConstraints();
 
@@ -121,7 +125,7 @@
 }
 
 X86DarwinTargetAsmInfo::X86DarwinTargetAsmInfo(const X86TargetMachine &TM):
-  X86TargetAsmInfo<DarwinTargetAsmInfo>(TM) {
+  X86TargetAsmInfo(TM), DarwinTargetAsmInfo(TM) {
   const X86Subtarget* Subtarget = &DTM->getSubtarget<X86Subtarget>();
   bool is64Bit = Subtarget->is64Bit();
 
@@ -221,7 +225,7 @@
 }
 
 X86ELFTargetAsmInfo::X86ELFTargetAsmInfo(const X86TargetMachine &TM):
-  X86TargetAsmInfo<ELFTargetAsmInfo>(TM) {
+  X86TargetAsmInfo(TM), ELFTargetAsmInfo(TM) {
 
   CStringSection = ".rodata.str";
   PrivateGlobalPrefix = ".L";
@@ -298,7 +302,7 @@
 }
 
 X86COFFTargetAsmInfo::X86COFFTargetAsmInfo(const X86TargetMachine &TM):
-  X86GenericTargetAsmInfo(TM) {
+  X86TargetAsmInfo(TM) {
   X86TM = &TM;
 
   GlobalPrefix = "_";
@@ -404,7 +408,7 @@
 }
 
 X86WinTargetAsmInfo::X86WinTargetAsmInfo(const X86TargetMachine &TM):
-  X86GenericTargetAsmInfo(TM) {
+  X86TargetAsmInfo(TM) {
   GlobalPrefix = "_";
   CommentString = ";";
 
diff --git a/lib/Target/X86/X86TargetAsmInfo.h b/lib/Target/X86/X86TargetAsmInfo.h
index 9100fc0..d7e11e0 100644
--- a/lib/Target/X86/X86TargetAsmInfo.h
+++ b/lib/Target/X86/X86TargetAsmInfo.h
@@ -14,25 +14,17 @@
 #ifndef X86TARGETASMINFO_H
 #define X86TARGETASMINFO_H
 
-#include "X86TargetMachine.h"
 #include "llvm/Target/TargetAsmInfo.h"
 #include "llvm/Target/ELFTargetAsmInfo.h"
 #include "llvm/Target/DarwinTargetAsmInfo.h"
-#include "llvm/Support/Compiler.h"
 
 namespace llvm {
 
-  extern const char *const x86_asm_table[];
+  // Forward declaration.
+  class X86TargetMachine;
 
-  template <class BaseTAI>
-  struct X86TargetAsmInfo : public BaseTAI {
-    explicit X86TargetAsmInfo(const X86TargetMachine &TM):
-      BaseTAI(TM) {
-      const X86Subtarget *Subtarget = &TM.getSubtarget<X86Subtarget>();
-
-      BaseTAI::AsmTransCBE = x86_asm_table;
-      BaseTAI::AssemblerDialect = Subtarget->getAsmFlavor();
-    }
+  struct X86TargetAsmInfo : public virtual TargetAsmInfo {
+    explicit X86TargetAsmInfo(const X86TargetMachine &TM);
 
     virtual bool ExpandInlineAsm(CallInst *CI) const;
 
@@ -40,23 +32,21 @@
     bool LowerToBSwap(CallInst *CI) const;
   };
 
-  typedef X86TargetAsmInfo<TargetAsmInfo> X86GenericTargetAsmInfo;
-
-  EXTERN_TEMPLATE_INSTANTIATION(class X86TargetAsmInfo<TargetAsmInfo>);
-
-  struct X86DarwinTargetAsmInfo : public X86TargetAsmInfo<DarwinTargetAsmInfo> {
+  struct X86DarwinTargetAsmInfo : public X86TargetAsmInfo,
+                                  public DarwinTargetAsmInfo {
     explicit X86DarwinTargetAsmInfo(const X86TargetMachine &TM);
     virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
                                            bool Global) const;
   };
 
-  struct X86ELFTargetAsmInfo : public X86TargetAsmInfo<ELFTargetAsmInfo> {
+  struct X86ELFTargetAsmInfo : public X86TargetAsmInfo,
+                               public ELFTargetAsmInfo {
     explicit X86ELFTargetAsmInfo(const X86TargetMachine &TM);
     virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
                                            bool Global) const;
   };
 
-  struct X86COFFTargetAsmInfo : public X86GenericTargetAsmInfo {
+  struct X86COFFTargetAsmInfo : public X86TargetAsmInfo {
     explicit X86COFFTargetAsmInfo(const X86TargetMachine &TM);
     virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
                                            bool Global) const;
@@ -67,11 +57,9 @@
     const X86TargetMachine *X86TM;
   };
 
-  struct X86WinTargetAsmInfo : public X86GenericTargetAsmInfo {
+  struct X86WinTargetAsmInfo : public X86TargetAsmInfo {
     explicit X86WinTargetAsmInfo(const X86TargetMachine &TM);
   };
-
 } // namespace llvm
 
 #endif
-
diff --git a/lib/Target/X86/X86TargetMachine.cpp b/lib/Target/X86/X86TargetMachine.cpp
index 08753e7..5be5c5d 100644
--- a/lib/Target/X86/X86TargetMachine.cpp
+++ b/lib/Target/X86/X86TargetMachine.cpp
@@ -54,7 +54,7 @@
      case X86Subtarget::isWindows:
       return new X86WinTargetAsmInfo(*this);
      default:
-      return new X86GenericTargetAsmInfo(*this);
+      return new X86TargetAsmInfo(*this);
     }
 }
 
