diff --git a/include/clang/Frontend/BackendUtil.h b/include/clang/Frontend/BackendUtil.h
index f963fa0..39c743c 100644
--- a/include/clang/Frontend/BackendUtil.h
+++ b/include/clang/Frontend/BackendUtil.h
@@ -9,7 +9,6 @@
 
 namespace llvm {
   class Module;
-  class TargetData;
   class raw_ostream;
 }
 
@@ -28,7 +27,6 @@
   };
   
   void EmitBackendOutput(Diagnostic &Diags, const CodeGenOptions &CGOpts,
-                         const TargetOptions &TOpts,
-                         llvm::Module *M, llvm::TargetData *TD,
+                         const TargetOptions &TOpts, llvm::Module *M,
                          BackendAction Action, llvm::raw_ostream *OS);
 }
diff --git a/lib/Frontend/BackendUtil.cpp b/lib/Frontend/BackendUtil.cpp
index 6b389a6..2ceb831 100644
--- a/lib/Frontend/BackendUtil.cpp
+++ b/lib/Frontend/BackendUtil.cpp
@@ -39,7 +39,6 @@
   const CodeGenOptions &CodeGenOpts;
   const TargetOptions &TargetOpts;
   Module *TheModule;
-  TargetData *TheTargetData;
 
   Timer CodeGenerationTime;
 
@@ -51,7 +50,7 @@
   FunctionPassManager *getCodeGenPasses() const {
     if (!CodeGenPasses) {
       CodeGenPasses = new FunctionPassManager(TheModule);
-      CodeGenPasses->add(new TargetData(*TheTargetData));
+      CodeGenPasses->add(new TargetData(TheModule));
     }
     return CodeGenPasses;
   }
@@ -59,7 +58,7 @@
   PassManager *getPerModulePasses() const {
     if (!PerModulePasses) {
       PerModulePasses = new PassManager();
-      PerModulePasses->add(new TargetData(*TheTargetData));
+      PerModulePasses->add(new TargetData(TheModule));
     }
     return PerModulePasses;
   }
@@ -67,7 +66,7 @@
   FunctionPassManager *getPerFunctionPasses() const {
     if (!PerFunctionPasses) {
       PerFunctionPasses = new FunctionPassManager(TheModule);
-      PerFunctionPasses->add(new TargetData(*TheTargetData));
+      PerFunctionPasses->add(new TargetData(TheModule));
     }
     return PerFunctionPasses;
   }
@@ -82,10 +81,9 @@
 public:
   EmitAssemblyHelper(Diagnostic &_Diags,
                      const CodeGenOptions &CGOpts, const TargetOptions &TOpts,
-                     Module *M, TargetData *TD)
+                     Module *M)
     : Diags(_Diags), CodeGenOpts(CGOpts), TargetOpts(TOpts),
-      TheModule(M), TheTargetData(TD),
-      CodeGenerationTime("Code Generation Time"),
+      TheModule(M), CodeGenerationTime("Code Generation Time"),
       CodeGenPasses(0), PerModulePasses(0), PerFunctionPasses(0) {}
 
   ~EmitAssemblyHelper() {
@@ -320,9 +318,8 @@
 
 void clang::EmitBackendOutput(Diagnostic &Diags, const CodeGenOptions &CGOpts,
                               const TargetOptions &TOpts, Module *M,
-                              TargetData *TD, BackendAction Action,
-                              raw_ostream *OS) {
-  EmitAssemblyHelper AsmHelper(Diags, CGOpts, TOpts, M, TD);
+                              BackendAction Action, raw_ostream *OS) {
+  EmitAssemblyHelper AsmHelper(Diags, CGOpts, TOpts, M);
 
   AsmHelper.EmitAssembly(Action, OS);
 }
diff --git a/lib/Frontend/CodeGenAction.cpp b/lib/Frontend/CodeGenAction.cpp
index a3eba0f..99af838 100644
--- a/lib/Frontend/CodeGenAction.cpp
+++ b/lib/Frontend/CodeGenAction.cpp
@@ -20,11 +20,11 @@
 #include "clang/Frontend/FrontendDiagnostic.h"
 #include "llvm/LLVMContext.h"
 #include "llvm/Module.h"
+#include "llvm/Pass.h"
 #include "llvm/ADT/OwningPtr.h"
 #include "llvm/Support/MemoryBuffer.h"
 #include "llvm/Support/SourceMgr.h"
 #include "llvm/Support/Timer.h"
-#include "llvm/Target/TargetData.h"
 using namespace clang;
 using namespace llvm;
 
@@ -42,7 +42,6 @@
     llvm::OwningPtr<CodeGenerator> Gen;
 
     llvm::OwningPtr<llvm::Module> TheModule;
-    llvm::TargetData *TheTargetData;
 
   public:
     BackendConsumer(BackendAction action, Diagnostic &_Diags,
@@ -56,15 +55,10 @@
       TargetOpts(targetopts),
       AsmOutStream(OS),
       LLVMIRGeneration("LLVM IR Generation Time"),
-      Gen(CreateLLVMCodeGen(Diags, infile, compopts, C)),
-      TheTargetData(0) {
+      Gen(CreateLLVMCodeGen(Diags, infile, compopts, C)) {
       llvm::TimePassesIsEnabled = TimePasses;
     }
 
-    ~BackendConsumer() {
-      delete TheTargetData;
-    }
-
     llvm::Module *takeModule() { return TheModule.take(); }
 
     virtual void Initialize(ASTContext &Ctx) {
@@ -76,7 +70,6 @@
       Gen->Initialize(Ctx);
 
       TheModule.reset(Gen->GetModule());
-      TheTargetData = new llvm::TargetData(Ctx.Target.getTargetDescription());
 
       if (llvm::TimePassesIsEnabled)
         LLVMIRGeneration.stopTimer();
@@ -109,7 +102,7 @@
       }
 
       // Silently ignore if we weren't initialized for some reason.
-      if (!TheModule || !TheTargetData)
+      if (!TheModule)
         return;
 
       // Make sure IR generation is happy with the module. This is released by
@@ -134,7 +127,7 @@
                                         this);
 
       EmitBackendOutput(Diags, CodeGenOpts, TargetOpts,
-                        TheModule.get(), TheTargetData, Action, AsmOutStream);
+                        TheModule.get(), Action, AsmOutStream);
       
       Ctx.setInlineAsmDiagnosticHandler(OldHandler, OldContext);
     }
