diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2011-12-02 00:11:43 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2011-12-02 00:11:43 +0000 |
commit | bfd5addf4c1218d514e63ca0b57b69b3762d5d27 (patch) | |
tree | 5a9f32063f3349301590bfd798fb5e0216298cfa /clang/lib/Basic/Targets.cpp | |
parent | 1d6469fcb103acef30206ed3ad48c64bea5c84b3 (diff) | |
download | bcm5719-llvm-bfd5addf4c1218d514e63ca0b57b69b3762d5d27.tar.gz bcm5719-llvm-bfd5addf4c1218d514e63ca0b57b69b3762d5d27.zip |
When we're passing a vector with an illegal type through memory on x86-64, use byval so we're sure the backend does the right thing. Fixes va_arg with illegal vectors and an obscure ABI mismatch with __m64 vectors.
llvm-svn: 145652
Diffstat (limited to 'clang/lib/Basic/Targets.cpp')
-rw-r--r-- | clang/lib/Basic/Targets.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 404160bc4f4..4eaa6248e23 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -1347,7 +1347,11 @@ public: virtual void getDefaultFeatures(llvm::StringMap<bool> &Features) const; virtual void HandleTargetFeatures(std::vector<std::string> &Features); virtual const char* getABI() const { - return MMX3DNowLevel == NoMMX3DNow ? "no-mmx" : ""; + if (PointerWidth == 64 && HasAVX) + return "avx"; + else if (PointerWidth == 32 && MMX3DNowLevel == NoMMX3DNow) + return "no-mmx"; + return ""; } virtual bool setCPU(const std::string &Name) { CPU = llvm::StringSwitch<CPUKind>(Name) |