]> granicus.if.org Git - clang/commitdiff
Move TargetInfo::adjustInlineAsmType to TargetCodeGenInfo
authorPeter Collingbourne <peter@pcc.me.uk>
Fri, 18 Feb 2011 02:24:56 +0000 (02:24 +0000)
committerPeter Collingbourne <peter@pcc.me.uk>
Fri, 18 Feb 2011 02:24:56 +0000 (02:24 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125819 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/TargetInfo.h
lib/Basic/Targets.cpp
lib/CodeGen/CGStmt.cpp
lib/CodeGen/TargetInfo.cpp
lib/CodeGen/TargetInfo.h

index 586680bbd02d58bbc72f3d5ea74d96e6e7d9d6b4..b9087f2c47e8eba159f196abd98c82bf23588c15 100644 (file)
@@ -26,8 +26,6 @@
 namespace llvm {
 struct fltSemantics;
 class StringRef;
-class LLVMContext;
-class Type;
 }
 
 namespace clang {
@@ -532,12 +530,6 @@ public:
   virtual const char *getStaticInitSectionSpecifier() const {
     return 0;
   }
-
-  virtual const llvm::Type* adjustInlineAsmType(std::string& Constraint, 
-                                     const llvm::Type* Ty,
-                                     llvm::LLVMContext& Context) const {
-    return Ty;
-  }
 protected:
   virtual uint64_t getPointerWidthV(unsigned AddrSpace) const {
     return PointerWidth;
index 35817a2453dbd9a393cc2b667527499ab8a772b6..45b08e11fccc83c78316c9928ba72e9f7612deea 100644 (file)
@@ -1014,9 +1014,6 @@ public:
   }
   virtual bool validateAsmConstraint(const char *&Name,
                                      TargetInfo::ConstraintInfo &info) const;
-  virtual const llvm::Type* adjustInlineAsmType(std::string& Constraint,
-                                     const llvm::Type* Ty,
-                                     llvm::LLVMContext& Context) const;
   virtual std::string convertConstraint(const char Constraint) const;
   virtual const char *getClobbers() const {
     return "~{dirflag},~{fpsr},~{flags}";
@@ -1341,15 +1338,6 @@ X86TargetInfo::validateAsmConstraint(const char *&Name,
   return false;
 }
 
-const llvm::Type*
-X86TargetInfo::adjustInlineAsmType(std::string& Constraint,
-                                   const llvm::Type* Ty,
-                                   llvm::LLVMContext &Context) const {
-  if (Constraint=="y" && Ty->isVectorTy())
-    return llvm::Type::getX86_MMXTy(Context);
-  return Ty;
-}
-
 
 std::string
 X86TargetInfo::convertConstraint(const char Constraint) const {
index f809c009ce11f286cb7298328a1fa8c28a7ad025..cd238112ed1d325d1ee2e9bf89265df54fb3d362 100644 (file)
@@ -14,6 +14,7 @@
 #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"
@@ -1135,8 +1136,8 @@ void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {
         }
       }
       if (const llvm::Type* AdjTy = 
-            Target.adjustInlineAsmType(OutputConstraint, ResultRegTypes.back(),
-                                       getLLVMContext()))
+            getTargetHooks().adjustInlineAsmType(*this, OutputConstraint,
+                                                 ResultRegTypes.back()))
         ResultRegTypes.back() = AdjTy;
     } else {
       ArgTypes.push_back(Dest.getAddress()->getType());
@@ -1207,8 +1208,8 @@ void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {
       }
     }
     if (const llvm::Type* AdjTy = 
-              Target.adjustInlineAsmType(InputConstraint, Arg->getType(),
-                                         getLLVMContext()))
+              getTargetHooks().adjustInlineAsmType(*this, InputConstraint,
+                                                   Arg->getType()))
       Arg = Builder.CreateBitCast(Arg, AdjTy);
 
     ArgTypes.push_back(Arg->getType());
index 881a7ee4d04b6589f9e115e96ee6e339b515eb9b..f95aab07442ffb07071addb63ce265b0b1e126a2 100644 (file)
@@ -355,6 +355,14 @@ bool UseX86_MMXType(const llvm::Type *IRType) {
     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
 //===----------------------------------------------------------------------===//
@@ -415,6 +423,13 @@ public:
 
   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);
+  }
+
 };
 
 }
@@ -895,6 +910,13 @@ public:
 
     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 {
index 9d4cf1610308ac9250a2b936b5df4729dd8da692..4f59eb619e9d78b0df87beb83c41cd92465c6672 100644 (file)
 #ifndef CLANG_CODEGEN_TARGETINFO_H
 #define CLANG_CODEGEN_TARGETINFO_H
 
+#include "llvm/ADT/StringRef.h"
+
 namespace llvm {
   class GlobalValue;
+  class Type;
   class Value;
 }
 
@@ -102,6 +105,12 @@ namespace clang {
                                              llvm::Value *Address) const {
       return Address;
     }
+
+    virtual const llvm::Type* adjustInlineAsmType(CodeGen::CodeGenFunction &CGF,
+                                                  llvm::StringRef Constraint, 
+                                                  const llvm::Type* Ty) const {
+      return Ty;
+    }
   };
 }