From: Craig Topper <craig.topper@gmail.com> Date: Wed, 11 Sep 2013 06:48:53 +0000 (+0000) Subject: Fix a bug where -msse followed by -mno-sse would leave MMX enabled. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=56bed97d750b5a67707f266cc06e641ac5222612;p=clang Fix a bug where -msse followed by -mno-sse would leave MMX enabled. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190496 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index aa0993d4aa..00431c2a0d 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -2143,8 +2143,6 @@ void X86TargetInfo::setSSELevel(llvm::StringMap<bool> &Features, case SSE2: Features["sse2"] = true; case SSE1: - if (!Features.count("mmx")) - setMMXLevel(Features, MMX, Enabled); Features["sse"] = true; case NoSSE: break; @@ -2427,10 +2425,14 @@ bool X86TargetInfo::HandleTargetFeatures(std::vector<std::string> &Features, // Don't tell the backend if we're turning off mmx; it will end up disabling // SSE, which we don't want. + // Additionally, if SSE is enabled and mmx is not explicitly disabled, + // then enable MMX. std::vector<std::string>::iterator it; it = std::find(Features.begin(), Features.end(), "-mmx"); if (it != Features.end()) Features.erase(it); + else if (SSELevel > NoSSE) + MMX3DNowLevel = std::max(MMX3DNowLevel, MMX); return true; } diff --git a/test/Preprocessor/x86_target_features.c b/test/Preprocessor/x86_target_features.c index 48d5bcb65b..517f5c6e83 100644 --- a/test/Preprocessor/x86_target_features.c +++ b/test/Preprocessor/x86_target_features.c @@ -140,3 +140,15 @@ // RUN: %clang -target i386-unknown-unknown -march=atom -mpopcnt -mno-sse4.2 -x c -E -dM -o - %s | FileCheck --check-prefix=NOSSE42POPCNT %s // NOSSE42POPCNT: #define __POPCNT__ 1 + +// RUN: %clang -target i386-unknown-unknown -march=atom -msse -x c -E -dM -o - %s | FileCheck --check-prefix=SSEMMX %s + +// SSEMMX: #define __MMX__ 1 + +// RUN: %clang -target i386-unknown-unknown -march=atom -msse -mno-sse -x c -E -dM -o - %s | FileCheck --check-prefix=SSENOSSEMMX %s + +// SSENOSSEMMX-NOT: #define __MMX__ 1 + +// RUN: %clang -target i386-unknown-unknown -march=atom -msse -mno-mmx -x c -E -dM -o - %s | FileCheck --check-prefix=SSENOMMX %s + +// SSENOMMX-NOT: #define __MMX__ 1