aboutsummaryrefslogtreecommitdiff
path: root/lib/Basic/Targets.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Basic/Targets.cpp')
-rw-r--r--lib/Basic/Targets.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp
index 5ed285dcd7..631aa1f33d 100644
--- a/lib/Basic/Targets.cpp
+++ b/lib/Basic/Targets.cpp
@@ -985,6 +985,9 @@ 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}";
@@ -1306,6 +1309,16 @@ 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 {
switch (Constraint) {