diff --git a/include/llvm/Target/TargetAsmInfo.h b/include/llvm/Target/TargetAsmInfo.h
index b4bb8ec..3ec55ee 100644
--- a/include/llvm/Target/TargetAsmInfo.h
+++ b/include/llvm/Target/TargetAsmInfo.h
@@ -56,10 +56,6 @@
     /// section on this target.  Null if this target doesn't support zerofill.
     const char *ZeroFillDirective;        // Default is null.
     
-    /// AddressSize - Size of addresses used in file.
-    ///
-    unsigned AddressSize;                 // Defaults to 4.
-    
     /// NeedsSet - True if target asm can't compute addresses on data
     /// directives.
     bool NeedsSet;                        // Defaults to false.
@@ -400,9 +396,6 @@
     const char *getZeroFillDirective() const {
       return ZeroFillDirective;
     }
-    unsigned getAddressSize() const {
-      return AddressSize;
-    }
     bool needsSet() const {
       return NeedsSet;
     }
diff --git a/lib/CodeGen/DwarfWriter.cpp b/lib/CodeGen/DwarfWriter.cpp
index f962e48..0261a00 100644
--- a/lib/CodeGen/DwarfWriter.cpp
+++ b/lib/CodeGen/DwarfWriter.cpp
@@ -829,12 +829,13 @@
   AsmPrinter *getAsm() const { return Asm; }
   MachineModuleInfo *getMMI() const { return MMI; }
   const TargetAsmInfo *getTargetAsmInfo() const { return TAI; }
+  const TargetData *getTargetData() const { return TD; }
 
   void PrintRelDirective(bool Force32Bit = false, bool isInSection = false)
                                                                          const {
     if (isInSection && TAI->getDwarfSectionOffsetDirective())
       O << TAI->getDwarfSectionOffsetDirective();
-    else if (Force32Bit || TAI->getAddressSize() == sizeof(int32_t))
+    else if (Force32Bit || TD->getPointerSize() == sizeof(int32_t))
       O << TAI->getData32bitsDirective();
     else
       O << TAI->getData64bitsDirective();
@@ -969,7 +970,7 @@
     int stackGrowth =
         Asm->TM.getFrameInfo()->getStackGrowthDirection() ==
           TargetFrameInfo::StackGrowsUp ?
-            TAI->getAddressSize() : -TAI->getAddressSize();
+            TD->getPointerSize() : -TD->getPointerSize();
     bool IsLocal = BaseLabel && strcmp(BaseLabel, "label") == 0;
 
     for (unsigned i = 0, N = Moves.size(); i < N; ++i) {
@@ -1392,7 +1393,7 @@
   ///
   DIE *ConstructPointerType(CompileUnit *Unit, const std::string &Name) {
     DIE Buffer(DW_TAG_pointer_type);
-    AddUInt(&Buffer, DW_AT_byte_size, 0, TAI->getAddressSize());
+    AddUInt(&Buffer, DW_AT_byte_size, 0, TD->getPointerSize());
     if (!Name.empty()) AddString(&Buffer, DW_AT_name, DW_FORM_string, Name);
     return Unit->AddDie(Buffer);
   }
@@ -2146,7 +2147,7 @@
     Asm->EmitInt16(DWARF_VERSION); Asm->EOL("DWARF version number");
     EmitSectionOffset("abbrev_begin", "section_abbrev", 0, 0, true, false);
     Asm->EOL("Offset Into Abbrev. Section");
-    Asm->EmitInt8(TAI->getAddressSize()); Asm->EOL("Address Size (in bytes)");
+    Asm->EmitInt8(TD->getPointerSize()); Asm->EOL("Address Size (in bytes)");
   
     EmitDIE(Die);
     // FIXME - extra padding for gdb bug.
@@ -2297,7 +2298,7 @@
 
         // Define the line address.
         Asm->EmitInt8(0); Asm->EOL("Extended Op");
-        Asm->EmitInt8(TAI->getAddressSize() + 1); Asm->EOL("Op size");
+        Asm->EmitInt8(TD->getPointerSize() + 1); Asm->EOL("Op size");
         Asm->EmitInt8(DW_LNE_set_address); Asm->EOL("DW_LNE_set_address");
         EmitReference("label",  LabelID); Asm->EOL("Location label");
         
@@ -2335,7 +2336,7 @@
 
       // Define last address of section.
       Asm->EmitInt8(0); Asm->EOL("Extended Op");
-      Asm->EmitInt8(TAI->getAddressSize() + 1); Asm->EOL("Op size");
+      Asm->EmitInt8(TD->getPointerSize() + 1); Asm->EOL("Op size");
       Asm->EmitInt8(DW_LNE_set_address); Asm->EOL("DW_LNE_set_address");
       EmitReference("section_end", j + 1); Asm->EOL("Section end label");
 
@@ -2359,7 +2360,7 @@
     int stackGrowth =
         Asm->TM.getFrameInfo()->getStackGrowthDirection() ==
           TargetFrameInfo::StackGrowsUp ?
-        TAI->getAddressSize() : -TAI->getAddressSize();
+        TD->getPointerSize() : -TD->getPointerSize();
 
     // Start the dwarf frame section.
     Asm->SwitchToDataSection(TAI->getDwarfFrameSection());
@@ -2517,7 +2518,7 @@
     EmitReference("info_begin", Unit->getID());
     Asm->EOL("Offset of Compilation Unit Info");
 
-    Asm->EmitInt8(TAI->getAddressSize()); Asm->EOL("Size of Address");
+    Asm->EmitInt8(TD->getPointerSize()); Asm->EOL("Size of Address");
 
     Asm->EmitInt8(0); Asm->EOL("Size of Segment Descriptor");
 
@@ -2781,7 +2782,7 @@
     int stackGrowth =
         Asm->TM.getFrameInfo()->getStackGrowthDirection() ==
           TargetFrameInfo::StackGrowsUp ?
-        TAI->getAddressSize() : -TAI->getAddressSize();
+        TD->getPointerSize() : -TD->getPointerSize();
 
     // Begin eh frame section.
     Asm->SwitchToTextSection(TAI->getDwarfEHFrameSection());
@@ -2898,7 +2899,7 @@
         
         if (EHFrameInfo.hasLandingPads) {
           EmitReference("exception", EHFrameInfo.Number, true);
-        } else if(TAI->getAddressSize() == 8) {
+        } else if (TD->getPointerSize() == 8) {
           Asm->EmitInt64((int)0);
         } else {
           Asm->EmitInt32((int)0);
@@ -3183,7 +3184,7 @@
     for (unsigned i = 0, e = CallSites.size(); i < e; ++i)
       SizeSites += Asm->SizeULEB128(CallSites[i].Action);
 
-    unsigned SizeTypes = TypeInfos.size() * TAI->getAddressSize();
+    unsigned SizeTypes = TypeInfos.size() * TD->getPointerSize();
 
     unsigned TypeOffset = sizeof(int8_t) + // Call site format
                           Asm->SizeULEB128(SizeSites) + // Call-site table length
@@ -3244,7 +3245,7 @@
       Asm->EOL("Region length");
 
       if (!S.PadLabel) {
-        if (TAI->getAddressSize() == sizeof(int32_t))
+        if (TD->getPointerSize() == sizeof(int32_t))
           Asm->EmitInt32(0);
         else
           Asm->EmitInt64(0);
@@ -3484,7 +3485,7 @@
 /// SizeOf - Determine size of label value in bytes.
 ///
 unsigned DIEDwarfLabel::SizeOf(const DwarfDebug &DD, unsigned Form) const {
-  return DD.getTargetAsmInfo()->getAddressSize();
+  return DD.getTargetData()->getPointerSize();
 }
 
 //===----------------------------------------------------------------------===//
@@ -3498,7 +3499,7 @@
 /// SizeOf - Determine size of label value in bytes.
 ///
 unsigned DIEObjectLabel::SizeOf(const DwarfDebug &DD, unsigned Form) const {
-  return DD.getTargetAsmInfo()->getAddressSize();
+  return DD.getTargetData()->getPointerSize();
 }
     
 //===----------------------------------------------------------------------===//
@@ -3514,7 +3515,7 @@
 ///
 unsigned DIEDelta::SizeOf(const DwarfDebug &DD, unsigned Form) const {
   if (Form == DW_FORM_data4) return 4;
-  return DD.getTargetAsmInfo()->getAddressSize();
+  return DD.getTargetData()->getPointerSize();
 }
 
 //===----------------------------------------------------------------------===//
diff --git a/lib/Target/PowerPC/PPCTargetAsmInfo.cpp b/lib/Target/PowerPC/PPCTargetAsmInfo.cpp
index 0c4a144..7d9acd9 100644
--- a/lib/Target/PowerPC/PPCTargetAsmInfo.cpp
+++ b/lib/Target/PowerPC/PPCTargetAsmInfo.cpp
@@ -29,7 +29,6 @@
   AssemblerDialect = TM.getSubtargetImpl()->getAsmFlavor();
   
   NeedsSet = true;
-  AddressSize = isPPC64 ? 8 : 4;
   DwarfEHFrameSection =
   ".section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support";
   DwarfExceptionSection = ".section __DATA,__gcc_except_tab";
diff --git a/lib/Target/TargetAsmInfo.cpp b/lib/Target/TargetAsmInfo.cpp
index e268344..fd2e6fb 100644
--- a/lib/Target/TargetAsmInfo.cpp
+++ b/lib/Target/TargetAsmInfo.cpp
@@ -25,7 +25,6 @@
   TLSDataSection("\t.section .tdata,\"awT\",@progbits"),
   TLSBSSSection("\t.section .tbss,\"awT\",@nobits"),
   ZeroFillDirective(0),
-  AddressSize(4),
   NeedsSet(false),
   MaxInstLength(4),
   PCSymbol("$"),
diff --git a/lib/Target/X86/X86RegisterInfo.cpp b/lib/Target/X86/X86RegisterInfo.cpp
index 5607cad..08843fc 100644
--- a/lib/Target/X86/X86RegisterInfo.cpp
+++ b/lib/Target/X86/X86RegisterInfo.cpp
@@ -1508,13 +1508,13 @@
 
   if (MMI && MMI->needsFrameInfo()) {
     std::vector<MachineMove> &Moves = MMI->getFrameMoves();
-    const TargetAsmInfo *TAI = MF.getTarget().getTargetAsmInfo();
+    const TargetData *TD = MF.getTarget().getTargetData();
 
     // Calculate amount of bytes used for return address storing
     int stackGrowth =
       (MF.getTarget().getFrameInfo()->getStackGrowthDirection() ==
        TargetFrameInfo::StackGrowsUp ?
-       TAI->getAddressSize() : -TAI->getAddressSize());
+       TD->getPointerSize() : -TD->getPointerSize());
 
     if (StackSize) {
       // Show update of SP.
