diff options
author | Dale Johannesen <dalej@apple.com> | 2010-10-29 23:12:32 +0000 |
---|---|---|
committer | Dale Johannesen <dalej@apple.com> | 2010-10-29 23:12:32 +0000 |
commit | f6e2c2039f76fa58799f6d155892d54fc95755e1 (patch) | |
tree | 673b13a4e470ec0becd639f03df99a7de69099b7 /lib/Basic/Targets.cpp | |
parent | bc07a55b68342a230aafd8875cc7a26450dd3f64 (diff) |
Generate bitcasts going in and out of MMX parameters
in asm's. PR 8501, 8602988.
I don't like including Type.h where it is; the idea was
to get references to X86_MMXTy out of the common code.
Maybe there's a better way?
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117736 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Basic/Targets.cpp')
-rw-r--r-- | lib/Basic/Targets.cpp | 13 |
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) { |