Revert 125820 and 125819 to fix PR9266.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@126050 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGStmt.cpp b/lib/CodeGen/CGStmt.cpp
index cd23811..f809c00 100644
--- a/lib/CodeGen/CGStmt.cpp
+++ b/lib/CodeGen/CGStmt.cpp
@@ -14,7 +14,6 @@
 #include "CGDebugInfo.h"
 #include "CodeGenModule.h"
 #include "CodeGenFunction.h"
-#include "TargetInfo.h"
 #include "clang/AST/StmtVisitor.h"
 #include "clang/Basic/PrettyStackTrace.h"
 #include "clang/Basic/TargetInfo.h"
@@ -1136,8 +1135,8 @@
         }
       }
       if (const llvm::Type* AdjTy = 
-            getTargetHooks().adjustInlineAsmType(*this, OutputConstraint,
-                                                 ResultRegTypes.back()))
+            Target.adjustInlineAsmType(OutputConstraint, ResultRegTypes.back(),
+                                       getLLVMContext()))
         ResultRegTypes.back() = AdjTy;
     } else {
       ArgTypes.push_back(Dest.getAddress()->getType());
@@ -1208,8 +1207,8 @@
       }
     }
     if (const llvm::Type* AdjTy = 
-              getTargetHooks().adjustInlineAsmType(*this, InputConstraint,
-                                                   Arg->getType()))
+              Target.adjustInlineAsmType(InputConstraint, Arg->getType(),
+                                         getLLVMContext()))
       Arg = Builder.CreateBitCast(Arg, AdjTy);
 
     ArgTypes.push_back(Arg->getType());
diff --git a/lib/CodeGen/CodeGenAction.cpp b/lib/CodeGen/CodeGenAction.cpp
index a24bbc4..69ac995 100644
--- a/lib/CodeGen/CodeGenAction.cpp
+++ b/lib/CodeGen/CodeGenAction.cpp
@@ -224,15 +224,9 @@
 
 //
 
-CodeGenAction::CodeGenAction(unsigned _Act, LLVMContext *_VMContext)
-  : Act(_Act), VMContext(_VMContext ? _VMContext : new LLVMContext),
-    OwnsVMContext(!_VMContext) {}
+CodeGenAction::CodeGenAction(unsigned _Act) : Act(_Act) {}
 
-CodeGenAction::~CodeGenAction() {
-  TheModule.reset();
-  if (OwnsVMContext)
-    delete VMContext;
-}
+CodeGenAction::~CodeGenAction() {}
 
 bool CodeGenAction::hasIRSupport() const { return true; }
 
@@ -249,11 +243,6 @@
   return TheModule.take();
 }
 
-llvm::LLVMContext *CodeGenAction::takeLLVMContext() {
-  OwnsVMContext = false;
-  return VMContext;
-}
-
 static raw_ostream *GetOutputStream(CompilerInstance &CI,
                                     llvm::StringRef InFile,
                                     BackendAction Action) {
@@ -286,7 +275,7 @@
       new BackendConsumer(BA, CI.getDiagnostics(),
                           CI.getCodeGenOpts(), CI.getTargetOpts(),
                           CI.getFrontendOpts().ShowTimers, InFile, OS.take(),
-                          *VMContext);
+                          CI.getLLVMContext());
   return BEConsumer;
 }
 
@@ -312,7 +301,7 @@
                                            getCurrentFile().c_str());
 
     llvm::SMDiagnostic Err;
-    TheModule.reset(ParseIR(MainFileCopy, Err, *VMContext));
+    TheModule.reset(ParseIR(MainFileCopy, Err, CI.getLLVMContext()));
     if (!TheModule) {
       // Translate from the diagnostic info to the SourceManager location.
       SourceLocation Loc = SM.getLocation(
@@ -343,20 +332,15 @@
 
 //
 
-EmitAssemblyAction::EmitAssemblyAction(llvm::LLVMContext *_VMContext)
-  : CodeGenAction(Backend_EmitAssembly, _VMContext) {}
+EmitAssemblyAction::EmitAssemblyAction()
+  : CodeGenAction(Backend_EmitAssembly) {}
 
-EmitBCAction::EmitBCAction(llvm::LLVMContext *_VMContext)
-  : CodeGenAction(Backend_EmitBC, _VMContext) {}
+EmitBCAction::EmitBCAction() : CodeGenAction(Backend_EmitBC) {}
 
-EmitLLVMAction::EmitLLVMAction(llvm::LLVMContext *_VMContext)
-  : CodeGenAction(Backend_EmitLL, _VMContext) {}
+EmitLLVMAction::EmitLLVMAction() : CodeGenAction(Backend_EmitLL) {}
 
-EmitLLVMOnlyAction::EmitLLVMOnlyAction(llvm::LLVMContext *_VMContext)
-  : CodeGenAction(Backend_EmitNothing, _VMContext) {}
+EmitLLVMOnlyAction::EmitLLVMOnlyAction() : CodeGenAction(Backend_EmitNothing) {}
 
-EmitCodeGenOnlyAction::EmitCodeGenOnlyAction(llvm::LLVMContext *_VMContext)
-  : CodeGenAction(Backend_EmitMCNull, _VMContext) {}
+EmitCodeGenOnlyAction::EmitCodeGenOnlyAction() : CodeGenAction(Backend_EmitMCNull) {}
 
-EmitObjAction::EmitObjAction(llvm::LLVMContext *_VMContext)
-  : CodeGenAction(Backend_EmitObj, _VMContext) {}
+EmitObjAction::EmitObjAction() : CodeGenAction(Backend_EmitObj) {}
diff --git a/lib/CodeGen/TargetInfo.cpp b/lib/CodeGen/TargetInfo.cpp
index f95aab0..881a7ee 100644
--- a/lib/CodeGen/TargetInfo.cpp
+++ b/lib/CodeGen/TargetInfo.cpp
@@ -355,14 +355,6 @@
     IRType->getScalarSizeInBits() != 64;
 }
 
-static const llvm::Type* X86AdjustInlineAsmType(CodeGen::CodeGenFunction &CGF,
-                                                llvm::StringRef Constraint,
-                                                const llvm::Type* Ty) {
-  if (Constraint=="y" && UseX86_MMXType(Ty))
-    return llvm::Type::getX86_MMXTy(CGF.getLLVMContext());
-  return Ty;
-}
-
 //===----------------------------------------------------------------------===//
 // X86-32 ABI Implementation
 //===----------------------------------------------------------------------===//
@@ -423,13 +415,6 @@
 
   bool initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
                                llvm::Value *Address) const;
-
-  const llvm::Type* adjustInlineAsmType(CodeGen::CodeGenFunction &CGF,
-                                        llvm::StringRef Constraint,
-                                        const llvm::Type* Ty) const {
-    return X86AdjustInlineAsmType(CGF, Constraint, Ty);
-  }
-
 };
 
 }
@@ -910,13 +895,6 @@
 
     return false;
   }
-
-  const llvm::Type* adjustInlineAsmType(CodeGen::CodeGenFunction &CGF,
-                                        llvm::StringRef Constraint,
-                                        const llvm::Type* Ty) const {
-    return X86AdjustInlineAsmType(CGF, Constraint, Ty);
-  }
-
 };
 
 class WinX86_64TargetCodeGenInfo : public TargetCodeGenInfo {
diff --git a/lib/CodeGen/TargetInfo.h b/lib/CodeGen/TargetInfo.h
index 4f59eb6..9d4cf16 100644
--- a/lib/CodeGen/TargetInfo.h
+++ b/lib/CodeGen/TargetInfo.h
@@ -15,11 +15,8 @@
 #ifndef CLANG_CODEGEN_TARGETINFO_H
 #define CLANG_CODEGEN_TARGETINFO_H
 
-#include "llvm/ADT/StringRef.h"
-
 namespace llvm {
   class GlobalValue;
-  class Type;
   class Value;
 }
 
@@ -105,12 +102,6 @@
                                              llvm::Value *Address) const {
       return Address;
     }
-
-    virtual const llvm::Type* adjustInlineAsmType(CodeGen::CodeGenFunction &CGF,
-                                                  llvm::StringRef Constraint, 
-                                                  const llvm::Type* Ty) const {
-      return Ty;
-    }
   };
 }