diff --git a/clang/include/clang/Basic/BuiltinsX86.def b/clang/include/clang/Basic/BuiltinsX86.def --- a/clang/include/clang/Basic/BuiltinsX86.def +++ b/clang/include/clang/Basic/BuiltinsX86.def @@ -44,36 +44,6 @@ TARGET_BUILTIN(__builtin_ia32_readeflags_u32, "Ui", "n", "") TARGET_BUILTIN(__builtin_ia32_writeeflags_u32, "vUi", "n", "") -// 3DNow! -// -TARGET_BUILTIN(__builtin_ia32_femms, "v", "n", "3dnow") -TARGET_BUILTIN(__builtin_ia32_pavgusb, "V8cV8cV8c", "ncV:64:", "3dnow") -TARGET_BUILTIN(__builtin_ia32_pf2id, "V2iV2f", "ncV:64:", "3dnow") -TARGET_BUILTIN(__builtin_ia32_pfacc, "V2fV2fV2f", "ncV:64:", "3dnow") -TARGET_BUILTIN(__builtin_ia32_pfadd, "V2fV2fV2f", "ncV:64:", "3dnow") -TARGET_BUILTIN(__builtin_ia32_pfcmpeq, "V2iV2fV2f", "ncV:64:", "3dnow") -TARGET_BUILTIN(__builtin_ia32_pfcmpge, "V2iV2fV2f", "ncV:64:", "3dnow") -TARGET_BUILTIN(__builtin_ia32_pfcmpgt, "V2iV2fV2f", "ncV:64:", "3dnow") -TARGET_BUILTIN(__builtin_ia32_pfmax, "V2fV2fV2f", "ncV:64:", "3dnow") -TARGET_BUILTIN(__builtin_ia32_pfmin, "V2fV2fV2f", "ncV:64:", "3dnow") -TARGET_BUILTIN(__builtin_ia32_pfmul, "V2fV2fV2f", "ncV:64:", "3dnow") -TARGET_BUILTIN(__builtin_ia32_pfrcp, "V2fV2f", "ncV:64:", "3dnow") -TARGET_BUILTIN(__builtin_ia32_pfrcpit1, "V2fV2fV2f", "ncV:64:", "3dnow") -TARGET_BUILTIN(__builtin_ia32_pfrcpit2, "V2fV2fV2f", "ncV:64:", "3dnow") -TARGET_BUILTIN(__builtin_ia32_pfrsqrt, "V2fV2f", "ncV:64:", "3dnow") -TARGET_BUILTIN(__builtin_ia32_pfrsqit1, "V2fV2fV2f", "ncV:64:", "3dnow") -TARGET_BUILTIN(__builtin_ia32_pfsub, "V2fV2fV2f", "ncV:64:", "3dnow") -TARGET_BUILTIN(__builtin_ia32_pfsubr, "V2fV2fV2f", "ncV:64:", "3dnow") -TARGET_BUILTIN(__builtin_ia32_pi2fd, "V2fV2i", "ncV:64:", "3dnow") -TARGET_BUILTIN(__builtin_ia32_pmulhrw, "V4sV4sV4s", "ncV:64:", "3dnow") -// 3DNow! Extensions (3dnowa). -TARGET_BUILTIN(__builtin_ia32_pf2iw, "V2iV2f", "ncV:64:", "3dnowa") -TARGET_BUILTIN(__builtin_ia32_pfnacc, "V2fV2fV2f", "ncV:64:", "3dnowa") -TARGET_BUILTIN(__builtin_ia32_pfpnacc, "V2fV2fV2f", "ncV:64:", "3dnowa") -TARGET_BUILTIN(__builtin_ia32_pi2fw, "V2fV2i", "ncV:64:", "3dnowa") -TARGET_BUILTIN(__builtin_ia32_pswapdsf, "V2fV2f", "ncV:64:", "3dnowa") -TARGET_BUILTIN(__builtin_ia32_pswapdsi, "V2iV2i", "ncV:64:", "3dnowa") - // MMX // // All MMX instructions will be generated via builtins. Any MMX vector diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3541,10 +3541,6 @@ def mno_80387 : Flag<["-"], "mno-80387">, Alias; def mmmx : Flag<["-"], "mmmx">, Group; def mno_mmx : Flag<["-"], "mno-mmx">, Group; -def m3dnow : Flag<["-"], "m3dnow">, Group; -def mno_3dnow : Flag<["-"], "mno-3dnow">, Group; -def m3dnowa : Flag<["-"], "m3dnowa">, Group; -def mno_3dnowa : Flag<["-"], "mno-3dnowa">, Group; def mamx_bf16 : Flag<["-"], "mamx-bf16">, Group; def mno_amx_bf16 : Flag<["-"], "mno-amx-bf16">, Group; def mtamx_int8 : Flag<["-"], "mamx-int8">, Group; @@ -3718,6 +3714,12 @@ def mno_retpoline_external_thunk : Flag<["-"], "mno-retpoline-external-thunk">, Group; def mvzeroupper : Flag<["-"], "mvzeroupper">, Group; def mno_vzeroupper : Flag<["-"], "mno-vzeroupper">, Group; +// Unsupported X86 feature flags (triggers a warning) +def m3dnow : Flag<["-"], "m3dnow">; +def mno_3dnow : Flag<["-"], "mno-3dnow">; +def m3dnowa : Flag<["-"], "m3dnowa">; +def mno_3dnowa : Flag<["-"], "mno-3dnowa">; + // These are legacy user-facing driver-level option spellings. They are always // aliases for options that are spelled using the more common Unix / GNU flag diff --git a/clang/lib/Basic/Targets/X86.h b/clang/lib/Basic/Targets/X86.h --- a/clang/lib/Basic/Targets/X86.h +++ b/clang/lib/Basic/Targets/X86.h @@ -56,12 +56,7 @@ AVX2, AVX512F } SSELevel = NoSSE; - enum MMX3DNowEnum { - NoMMX3DNow, - MMX, - AMD3DNow, - AMD3DNowAthlon - } MMX3DNowLevel = NoMMX3DNow; + bool HasMMX = false; enum XOPEnum { NoXOP, SSE4A, FMA4, XOP } XOPLevel = NoXOP; enum AddrSpace { ptr32_sptr = 270, ptr32_uptr = 271, ptr64 = 272 }; @@ -295,8 +290,7 @@ return "avx512"; if (getTriple().getArch() == llvm::Triple::x86_64 && SSELevel >= AVX) return "avx"; - if (getTriple().getArch() == llvm::Triple::x86 && - MMX3DNowLevel == NoMMX3DNow) + if (getTriple().getArch() == llvm::Triple::x86 && !HasMMX) return "no-mmx"; return ""; } diff --git a/clang/lib/Basic/Targets/X86.cpp b/clang/lib/Basic/Targets/X86.cpp --- a/clang/lib/Basic/Targets/X86.cpp +++ b/clang/lib/Basic/Targets/X86.cpp @@ -314,6 +314,8 @@ HasTSXLDTRK = true; } else if (Feature == "+uintr") { HasUINTR = true; + } else if (Feature == "+mmx") { + HasMMX = true; } X86SSEEnum Level = llvm::StringSwitch(Feature) @@ -329,13 +331,6 @@ .Default(NoSSE); SSELevel = std::max(SSELevel, Level); - MMX3DNowEnum ThreeDNowLevel = llvm::StringSwitch(Feature) - .Case("+3dnowa", AMD3DNowAthlon) - .Case("+3dnow", AMD3DNow) - .Case("+mmx", MMX) - .Default(NoMMX3DNow); - MMX3DNowLevel = std::max(MMX3DNowLevel, ThreeDNowLevel); - XOPEnum XLevel = llvm::StringSwitch(Feature) .Case("+xop", XOP) .Case("+fma4", FMA4) @@ -796,18 +791,8 @@ } // Each case falls through to the previous one here. - switch (MMX3DNowLevel) { - case AMD3DNowAthlon: - Builder.defineMacro("__3dNOW_A__"); - LLVM_FALLTHROUGH; - case AMD3DNow: - Builder.defineMacro("__3dNOW__"); - LLVM_FALLTHROUGH; - case MMX: + if (HasMMX) { Builder.defineMacro("__MMX__"); - LLVM_FALLTHROUGH; - case NoMMX3DNow: - break; } if (CPU >= CK_i486 || CPU == CK_None) { @@ -826,8 +811,6 @@ bool X86TargetInfo::isValidFeatureName(StringRef Name) const { return llvm::StringSwitch(Name) - .Case("3dnow", true) - .Case("3dnowa", true) .Case("adx", true) .Case("aes", true) .Case("amx-bf16", true) @@ -962,9 +945,7 @@ .Case("widekl", HasWIDEKL) .Case("lwp", HasLWP) .Case("lzcnt", HasLZCNT) - .Case("mm3dnow", MMX3DNowLevel >= AMD3DNow) - .Case("mm3dnowa", MMX3DNowLevel >= AMD3DNowAthlon) - .Case("mmx", MMX3DNowLevel >= MMX) + .Case("mmx", HasMMX) .Case("movbe", HasMOVBE) .Case("movdiri", HasMOVDIRI) .Case("movdir64b", HasMOVDIR64B) diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -13719,14 +13719,6 @@ return Builder.CreateCall(F, {Ops[0]}); } - // 3DNow! - case X86::BI__builtin_ia32_pswapdsf: - case X86::BI__builtin_ia32_pswapdsi: { - llvm::Type *MMXTy = llvm::Type::getX86_MMXTy(getLLVMContext()); - Ops[0] = Builder.CreateBitCast(Ops[0], MMXTy, "cast"); - llvm::Function *F = CGM.getIntrinsic(Intrinsic::x86_3dnowa_pswapd); - return Builder.CreateCall(F, Ops, "pswapd"); - } case X86::BI__builtin_ia32_rdrand16_step: case X86::BI__builtin_ia32_rdrand32_step: case X86::BI__builtin_ia32_rdrand64_step: diff --git a/clang/lib/Driver/ToolChains/Arch/X86.cpp b/clang/lib/Driver/ToolChains/Arch/X86.cpp --- a/clang/lib/Driver/ToolChains/Arch/X86.cpp +++ b/clang/lib/Driver/ToolChains/Arch/X86.cpp @@ -214,4 +214,17 @@ // Now add any that the user explicitly requested on the command line, // which may override the defaults. handleTargetFeaturesGroup(Args, Features, options::OPT_m_x86_Features_Group); + + // Warn for removed 3dnow support + if (const Arg *A = + Args.getLastArg(options::OPT_m3dnowa, options::OPT_mno_3dnowa, + options::OPT_mno_3dnow)) { + if (A->getOption().matches(options::OPT_m3dnowa)) + D.Diag(diag::warn_drv_clang_unsupported) << A->getAsString(Args); + } + if (const Arg *A = + Args.getLastArg(options::OPT_m3dnow, options::OPT_mno_3dnow)) { + if (A->getOption().matches(options::OPT_m3dnow)) + D.Diag(diag::warn_drv_clang_unsupported) << A->getAsString(Args); + } } diff --git a/clang/lib/Headers/mm3dnow.h b/clang/lib/Headers/mm3dnow.h --- a/clang/lib/Headers/mm3dnow.h +++ b/clang/lib/Headers/mm3dnow.h @@ -7,151 +7,16 @@ *===-----------------------------------------------------------------------=== */ +// 3dNow intrinsics are no longer supported, and this header remains only as a +// stub for users who were including it to get to _m_prefetch or +// _m_prefetchw. Such uses should prefer x86intrin.h. + #ifndef _MM3DNOW_H_INCLUDED #define _MM3DNOW_H_INCLUDED #include #include -typedef float __v2sf __attribute__((__vector_size__(8))); - -/* Define the default attributes for the functions in this file. */ -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("3dnow"), __min_vector_width__(64))) - -static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("3dnow"))) -_m_femms(void) { - __builtin_ia32_femms(); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pavgusb(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pavgusb((__v8qi)__m1, (__v8qi)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pf2id(__m64 __m) { - return (__m64)__builtin_ia32_pf2id((__v2sf)__m); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfacc(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfacc((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfadd(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfadd((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfcmpeq(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfcmpeq((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfcmpge(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfcmpge((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfcmpgt(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfcmpgt((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfmax(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfmax((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfmin(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfmin((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfmul(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfmul((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfrcp(__m64 __m) { - return (__m64)__builtin_ia32_pfrcp((__v2sf)__m); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfrcpit1(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfrcpit1((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfrcpit2(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfrcpit2((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfrsqrt(__m64 __m) { - return (__m64)__builtin_ia32_pfrsqrt((__v2sf)__m); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfrsqrtit1(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfrsqit1((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfsub(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfsub((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfsubr(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfsubr((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pi2fd(__m64 __m) { - return (__m64)__builtin_ia32_pi2fd((__v2si)__m); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pmulhrw(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pmulhrw((__v4hi)__m1, (__v4hi)__m2); -} - -/* Handle the 3dnowa instructions here. */ -#undef __DEFAULT_FN_ATTRS -#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("3dnowa"), __min_vector_width__(64))) - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pf2iw(__m64 __m) { - return (__m64)__builtin_ia32_pf2iw((__v2sf)__m); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfnacc(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfnacc((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pfpnacc(__m64 __m1, __m64 __m2) { - return (__m64)__builtin_ia32_pfpnacc((__v2sf)__m1, (__v2sf)__m2); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pi2fw(__m64 __m) { - return (__m64)__builtin_ia32_pi2fw((__v2si)__m); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pswapdsf(__m64 __m) { - return (__m64)__builtin_ia32_pswapdsf((__v2sf)__m); -} - -static __inline__ __m64 __DEFAULT_FN_ATTRS -_m_pswapdsi(__m64 __m) { - return (__m64)__builtin_ia32_pswapdsi((__v2si)__m); -} - #undef __DEFAULT_FN_ATTRS #endif diff --git a/clang/lib/Headers/x86intrin.h b/clang/lib/Headers/x86intrin.h --- a/clang/lib/Headers/x86intrin.h +++ b/clang/lib/Headers/x86intrin.h @@ -14,11 +14,6 @@ #include -#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \ - defined(__3dNOW__) -#include -#endif - #if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \ defined(__PRFCHW__) #include diff --git a/clang/test/CodeGen/X86/3dnow-builtins.c b/clang/test/CodeGen/X86/3dnow-builtins.c deleted file mode 100644 --- a/clang/test/CodeGen/X86/3dnow-builtins.c +++ /dev/null @@ -1,180 +0,0 @@ -// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-unknown-unknown -target-feature +3dnowa -emit-llvm -o - -Wall -Werror | FileCheck %s -check-prefix=GCC -check-prefix=CHECK -// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-scei-ps4 -target-feature +3dnowa -emit-llvm -o - -Wall -Werror | FileCheck %s -check-prefix=PS4 -check-prefix=CHECK - - -#include - -__m64 test_m_pavgusb(__m64 m1, __m64 m2) { - // PS4-LABEL: define{{.*}} i64 @test_m_pavgusb - // GCC-LABEL: define{{.*}} double @test_m_pavgusb - // CHECK: @llvm.x86.3dnow.pavgusb - return _m_pavgusb(m1, m2); -} - -__m64 test_m_pf2id(__m64 m) { - // PS4-LABEL: define{{.*}} i64 @test_m_pf2id - // GCC-LABEL: define{{.*}} double @test_m_pf2id - // CHECK: @llvm.x86.3dnow.pf2id - return _m_pf2id(m); -} - -__m64 test_m_pfacc(__m64 m1, __m64 m2) { - // PS4-LABEL: define{{.*}} i64 @test_m_pfacc - // GCC-LABEL: define{{.*}} double @test_m_pfacc - // CHECK: @llvm.x86.3dnow.pfacc - return _m_pfacc(m1, m2); -} - -__m64 test_m_pfadd(__m64 m1, __m64 m2) { - // PS4-LABEL: define{{.*}} i64 @test_m_pfadd - // GCC-LABEL: define{{.*}} double @test_m_pfadd - // CHECK: @llvm.x86.3dnow.pfadd - return _m_pfadd(m1, m2); -} - -__m64 test_m_pfcmpeq(__m64 m1, __m64 m2) { - // PS4-LABEL: define{{.*}} i64 @test_m_pfcmpeq - // GCC-LABEL: define{{.*}} double @test_m_pfcmpeq - // CHECK: @llvm.x86.3dnow.pfcmpeq - return _m_pfcmpeq(m1, m2); -} - -__m64 test_m_pfcmpge(__m64 m1, __m64 m2) { - // PS4-LABEL: define{{.*}} i64 @test_m_pfcmpge - // GCC-LABEL: define{{.*}} double @test_m_pfcmpge - // CHECK: @llvm.x86.3dnow.pfcmpge - return _m_pfcmpge(m1, m2); -} - -__m64 test_m_pfcmpgt(__m64 m1, __m64 m2) { - // PS4-LABEL: define{{.*}} i64 @test_m_pfcmpgt - // GCC-LABEL: define{{.*}} double @test_m_pfcmpgt - // CHECK: @llvm.x86.3dnow.pfcmpgt - return _m_pfcmpgt(m1, m2); -} - -__m64 test_m_pfmax(__m64 m1, __m64 m2) { - // PS4-LABEL: define{{.*}} i64 @test_m_pfmax - // GCC-LABEL: define{{.*}} double @test_m_pfmax - // CHECK: @llvm.x86.3dnow.pfmax - return _m_pfmax(m1, m2); -} - -__m64 test_m_pfmin(__m64 m1, __m64 m2) { - // PS4-LABEL: define{{.*}} i64 @test_m_pfmin - // GCC-LABEL: define{{.*}} double @test_m_pfmin - // CHECK: @llvm.x86.3dnow.pfmin - return _m_pfmin(m1, m2); -} - -__m64 test_m_pfmul(__m64 m1, __m64 m2) { - // PS4-LABEL: define{{.*}} i64 @test_m_pfmul - // GCC-LABEL: define{{.*}} double @test_m_pfmul - // CHECK: @llvm.x86.3dnow.pfmul - return _m_pfmul(m1, m2); -} - -__m64 test_m_pfrcp(__m64 m) { - // PS4-LABEL: define{{.*}} i64 @test_m_pfrcp - // GCC-LABEL: define{{.*}} double @test_m_pfrcp - // CHECK: @llvm.x86.3dnow.pfrcp - return _m_pfrcp(m); -} - -__m64 test_m_pfrcpit1(__m64 m1, __m64 m2) { - // PS4-LABEL: define{{.*}} i64 @test_m_pfrcpit1 - // GCC-LABEL: define{{.*}} double @test_m_pfrcpit1 - // CHECK: @llvm.x86.3dnow.pfrcpit1 - return _m_pfrcpit1(m1, m2); -} - -__m64 test_m_pfrcpit2(__m64 m1, __m64 m2) { - // PS4-LABEL: define{{.*}} i64 @test_m_pfrcpit2 - // GCC-LABEL: define{{.*}} double @test_m_pfrcpit2 - // CHECK: @llvm.x86.3dnow.pfrcpit2 - return _m_pfrcpit2(m1, m2); -} - -__m64 test_m_pfrsqrt(__m64 m) { - // PS4-LABEL: define{{.*}} i64 @test_m_pfrsqrt - // GCC-LABEL: define{{.*}} double @test_m_pfrsqrt - // CHECK: @llvm.x86.3dnow.pfrsqrt - return _m_pfrsqrt(m); -} - -__m64 test_m_pfrsqrtit1(__m64 m1, __m64 m2) { - // PS4-LABEL: define{{.*}} i64 @test_m_pfrsqrtit1 - // GCC-LABEL: define{{.*}} double @test_m_pfrsqrtit1 - // CHECK: @llvm.x86.3dnow.pfrsqit1 - return _m_pfrsqrtit1(m1, m2); -} - -__m64 test_m_pfsub(__m64 m1, __m64 m2) { - // PS4-LABEL: define{{.*}} i64 @test_m_pfsub - // GCC-LABEL: define{{.*}} double @test_m_pfsub - // CHECK: @llvm.x86.3dnow.pfsub - return _m_pfsub(m1, m2); -} - -__m64 test_m_pfsubr(__m64 m1, __m64 m2) { - // PS4-LABEL: define{{.*}} i64 @test_m_pfsubr - // GCC-LABEL: define{{.*}} double @test_m_pfsubr - // CHECK: @llvm.x86.3dnow.pfsubr - return _m_pfsubr(m1, m2); -} - -__m64 test_m_pi2fd(__m64 m) { - // PS4-LABEL: define{{.*}} i64 @test_m_pi2fd - // GCC-LABEL: define{{.*}} double @test_m_pi2fd - // CHECK: @llvm.x86.3dnow.pi2fd - return _m_pi2fd(m); -} - -__m64 test_m_pmulhrw(__m64 m1, __m64 m2) { - // PS4-LABEL: define{{.*}} i64 @test_m_pmulhrw - // GCC-LABEL: define{{.*}} double @test_m_pmulhrw - // CHECK: @llvm.x86.3dnow.pmulhrw - return _m_pmulhrw(m1, m2); -} - -__m64 test_m_pf2iw(__m64 m) { - // PS4-LABEL: define{{.*}} i64 @test_m_pf2iw - // GCC-LABEL: define{{.*}} double @test_m_pf2iw - // CHECK: @llvm.x86.3dnowa.pf2iw - return _m_pf2iw(m); -} - -__m64 test_m_pfnacc(__m64 m1, __m64 m2) { - // PS4-LABEL: define{{.*}} i64 @test_m_pfnacc - // GCC-LABEL: define{{.*}} double @test_m_pfnacc - // CHECK: @llvm.x86.3dnowa.pfnacc - return _m_pfnacc(m1, m2); -} - -__m64 test_m_pfpnacc(__m64 m1, __m64 m2) { - // PS4-LABEL: define{{.*}} i64 @test_m_pfpnacc - // GCC-LABEL: define{{.*}} double @test_m_pfpnacc - // CHECK: @llvm.x86.3dnowa.pfpnacc - return _m_pfpnacc(m1, m2); -} - -__m64 test_m_pi2fw(__m64 m) { - // PS4-LABEL: define{{.*}} i64 @test_m_pi2fw - // GCC-LABEL: define{{.*}} double @test_m_pi2fw - // CHECK: @llvm.x86.3dnowa.pi2fw - return _m_pi2fw(m); -} - -__m64 test_m_pswapdsf(__m64 m) { - // PS4-LABEL: define{{.*}} i64 @test_m_pswapdsf - // GCC-LABEL: define{{.*}} double @test_m_pswapdsf - // CHECK: @llvm.x86.3dnowa.pswapd - return _m_pswapdsf(m); -} - -__m64 test_m_pswapdsi(__m64 m) { - // PS4-LABEL: define{{.*}} i64 @test_m_pswapdsi - // GCC-LABEL: define{{.*}} double @test_m_pswapdsi - // CHECK: @llvm.x86.3dnowa.pswapd - return _m_pswapdsi(m); -} diff --git a/clang/test/CodeGen/builtins-x86.c b/clang/test/CodeGen/builtins-x86.c --- a/clang/test/CodeGen/builtins-x86.c +++ b/clang/test/CodeGen/builtins-x86.c @@ -3,7 +3,6 @@ // RUN: %clang_cc1 -DUSE_64 -DOPENCL -x cl -cl-std=CL2.0 -triple x86_64-unknown-unknown -target-feature +fxsr -target-feature +avx -target-feature +xsaveopt -target-feature +xsaves -target-feature +xsavec -target-feature +mwaitx -target-feature +clzero -target-feature +shstk -target-feature +wbnoinvd -target-feature +cldemote -emit-llvm -o %t %s #ifdef USE_ALL -#define USE_3DNOW #define USE_64 #define USE_SSE4 #endif @@ -96,9 +95,6 @@ V4s tmp_V4s; V2i tmp_V2i; V1LLi tmp_V1LLi; -#ifdef USE_3DNOW - V2f tmp_V2f; -#endif // 128-bit V16c tmp_V16c; @@ -536,33 +532,7 @@ __builtin_ia32_maskstorepd256(tmp_V4dp, tmp_V4LLi, tmp_V4d); __builtin_ia32_maskstoreps256(tmp_V8fp, tmp_V8i, tmp_V8f); -#ifdef USE_3DNOW - tmp_V8c = __builtin_ia32_pavgusb(tmp_V8c, tmp_V8c); - tmp_V2i = __builtin_ia32_pf2id(tmp_V2f); - tmp_V2f = __builtin_ia32_pfacc(tmp_V2f, tmp_V2f); - tmp_V2f = __builtin_ia32_pfadd(tmp_V2f, tmp_V2f); - tmp_V2i = __builtin_ia32_pfcmpeq(tmp_V2f, tmp_V2f); - tmp_V2i = __builtin_ia32_pfcmpge(tmp_V2f, tmp_V2f); - tmp_V2i = __builtin_ia32_pfcmpgt(tmp_V2f, tmp_V2f); - tmp_V2f = __builtin_ia32_pfmax(tmp_V2f, tmp_V2f); - tmp_V2f = __builtin_ia32_pfmin(tmp_V2f, tmp_V2f); - tmp_V2f = __builtin_ia32_pfmul(tmp_V2f, tmp_V2f); - tmp_V2f = __builtin_ia32_pfrcp(tmp_V2f); - tmp_V2f = __builtin_ia32_pfrcpit1(tmp_V2f, tmp_V2f); - tmp_V2f = __builtin_ia32_pfrcpit2(tmp_V2f, tmp_V2f); - tmp_V2f = __builtin_ia32_pfrsqrt(tmp_V2f); - tmp_V2f = __builtin_ia32_pfrsqit1(tmp_V2f, tmp_V2f); - tmp_V2f = __builtin_ia32_pfsub(tmp_V2f, tmp_V2f); - tmp_V2f = __builtin_ia32_pfsubr(tmp_V2f, tmp_V2f); - tmp_V2f = __builtin_ia32_pi2fd(tmp_V2i); - tmp_V4s = __builtin_ia32_pmulhrw(tmp_V4s, tmp_V4s); - tmp_V2i = __builtin_ia32_pf2iw(tmp_V2f); - tmp_V2f = __builtin_ia32_pfnacc(tmp_V2f, tmp_V2f); - tmp_V2f = __builtin_ia32_pfpnacc(tmp_V2f, tmp_V2f); - tmp_V2f = __builtin_ia32_pi2fw(tmp_V2i); - tmp_V2f = __builtin_ia32_pswapdsf(tmp_V2f); - tmp_V2i = __builtin_ia32_pswapdsi(tmp_V2i); - +#if USE_ALL tmp_V4i = __builtin_ia32_sha1rnds4(tmp_V4i, tmp_V4i, imm_i_0_4); tmp_V4i = __builtin_ia32_sha1nexte(tmp_V4i, tmp_V4i); tmp_V4i = __builtin_ia32_sha1msg1(tmp_V4i, tmp_V4i); diff --git a/clang/test/Driver/x86-target-features.c b/clang/test/Driver/x86-target-features.c --- a/clang/test/Driver/x86-target-features.c +++ b/clang/test/Driver/x86-target-features.c @@ -7,8 +7,13 @@ // RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mmmx -m3dnow -m3dnowa %s -### -o %t.o 2>&1 | FileCheck -check-prefix=MMX %s // RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-mmx -mno-3dnow -mno-3dnowa %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-MMX %s -// MMX: "-target-feature" "+mmx" "-target-feature" "+3dnow" "-target-feature" "+3dnowa" -// NO-MMX: "-target-feature" "-mmx" "-target-feature" "-3dnow" "-target-feature" "-3dnowa" +// MMX: warning: the clang compiler does not support '-m3dnowa' +// MMX: warning: the clang compiler does not support '-m3dnow' +// NO-MMX-NOT: warning +// MMX-NOT: "+3dnow" +// NO-MMX-NOT: "+3dnow" +// MMX: "-target-feature" "+mmx" +// NO-MMX: "-target-feature" "-mmx" // RUN: %clang -target i386-unknown-linux-gnu -march=i386 -msse -msse2 -msse3 -mssse3 -msse4a -msse4.1 -msse4.2 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=SSE %s // RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-sse -mno-sse2 -mno-sse3 -mno-ssse3 -mno-sse4a -mno-sse4.1 -mno-sse4.2 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-SSE %s diff --git a/clang/test/Headers/mm3dnow.c b/clang/test/Headers/mm3dnow.c --- a/clang/test/Headers/mm3dnow.c +++ b/clang/test/Headers/mm3dnow.c @@ -5,12 +5,9 @@ #if defined(i386) || defined(__x86_64__) #include -int __attribute__((__target__(("3dnow")))) foo(int a) { - _m_femms(); +int foo(void *x) { + _m_prefetch(x); + _m_prefetchw(x); return 4; } - -__m64 __attribute__((__target__(("3dnowa")))) bar(__m64 a) { - return _m_pf2iw(a); -} #endif diff --git a/clang/test/Preprocessor/predefined-arch-macros.c b/clang/test/Preprocessor/predefined-arch-macros.c --- a/clang/test/Preprocessor/predefined-arch-macros.c +++ b/clang/test/Preprocessor/predefined-arch-macros.c @@ -100,7 +100,6 @@ // RUN: %clang -march=winchip2 -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_WINCHIP2_M32 -// CHECK_WINCHIP2_M32: #define __3dNOW__ 1 // CHECK_WINCHIP2_M32: #define __MMX__ 1 // CHECK_WINCHIP2_M32: #define __i386 1 // CHECK_WINCHIP2_M32: #define __i386__ 1 @@ -116,7 +115,6 @@ // RUN: %clang -march=c3 -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_C3_M32 -// CHECK_C3_M32: #define __3dNOW__ 1 // CHECK_C3_M32: #define __MMX__ 1 // CHECK_C3_M32: #define __i386 1 // CHECK_C3_M32: #define __i386__ 1 @@ -2184,8 +2182,6 @@ // RUN: %clang -march=geode -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_GEODE_M32 -// CHECK_GEODE_M32: #define __3dNOW_A__ 1 -// CHECK_GEODE_M32: #define __3dNOW__ 1 // CHECK_GEODE_M32: #define __MMX__ 1 // CHECK_GEODE_M32: #define __geode 1 // CHECK_GEODE_M32: #define __geode__ 1 @@ -2216,7 +2212,6 @@ // RUN: %clang -march=k6-2 -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_K6_2_M32 -// CHECK_K6_2_M32: #define __3dNOW__ 1 // CHECK_K6_2_M32: #define __MMX__ 1 // CHECK_K6_2_M32: #define __i386 1 // CHECK_K6_2_M32: #define __i386__ 1 @@ -2234,7 +2229,6 @@ // RUN: %clang -march=k6-3 -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_K6_3_M32 -// CHECK_K6_3_M32: #define __3dNOW__ 1 // CHECK_K6_3_M32: #define __MMX__ 1 // CHECK_K6_3_M32: #define __i386 1 // CHECK_K6_3_M32: #define __i386__ 1 @@ -2252,8 +2246,6 @@ // RUN: %clang -march=athlon -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_ATHLON_M32 -// CHECK_ATHLON_M32: #define __3dNOW_A__ 1 -// CHECK_ATHLON_M32: #define __3dNOW__ 1 // CHECK_ATHLON_M32: #define __MMX__ 1 // CHECK_ATHLON_M32: #define __athlon 1 // CHECK_ATHLON_M32: #define __athlon__ 1 @@ -2269,8 +2261,6 @@ // RUN: %clang -march=athlon-tbird -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_ATHLON_TBIRD_M32 -// CHECK_ATHLON_TBIRD_M32: #define __3dNOW_A__ 1 -// CHECK_ATHLON_TBIRD_M32: #define __3dNOW__ 1 // CHECK_ATHLON_TBIRD_M32: #define __MMX__ 1 // CHECK_ATHLON_TBIRD_M32: #define __athlon 1 // CHECK_ATHLON_TBIRD_M32: #define __athlon__ 1 @@ -2286,8 +2276,6 @@ // RUN: %clang -march=athlon-4 -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_ATHLON_4_M32 -// CHECK_ATHLON_4_M32: #define __3dNOW_A__ 1 -// CHECK_ATHLON_4_M32: #define __3dNOW__ 1 // CHECK_ATHLON_4_M32: #define __MMX__ 1 // CHECK_ATHLON_4_M32: #define __SSE__ 1 // CHECK_ATHLON_4_M32: #define __athlon 1 @@ -2306,8 +2294,6 @@ // RUN: %clang -march=athlon-xp -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_ATHLON_XP_M32 -// CHECK_ATHLON_XP_M32: #define __3dNOW_A__ 1 -// CHECK_ATHLON_XP_M32: #define __3dNOW__ 1 // CHECK_ATHLON_XP_M32: #define __MMX__ 1 // CHECK_ATHLON_XP_M32: #define __SSE__ 1 // CHECK_ATHLON_XP_M32: #define __athlon 1 @@ -2326,8 +2312,6 @@ // RUN: %clang -march=athlon-mp -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_ATHLON_MP_M32 -// CHECK_ATHLON_MP_M32: #define __3dNOW_A__ 1 -// CHECK_ATHLON_MP_M32: #define __3dNOW__ 1 // CHECK_ATHLON_MP_M32: #define __MMX__ 1 // CHECK_ATHLON_MP_M32: #define __SSE__ 1 // CHECK_ATHLON_MP_M32: #define __athlon 1 @@ -2358,8 +2342,6 @@ // RUN: %clang -march=k8 -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_K8_M32 -// CHECK_K8_M32: #define __3dNOW_A__ 1 -// CHECK_K8_M32: #define __3dNOW__ 1 // CHECK_K8_M32: #define __MMX__ 1 // CHECK_K8_M32: #define __SSE2__ 1 // CHECK_K8_M32: #define __SSE__ 1 @@ -2373,8 +2355,6 @@ // RUN: %clang -march=k8 -m64 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_K8_M64 -// CHECK_K8_M64: #define __3dNOW_A__ 1 -// CHECK_K8_M64: #define __3dNOW__ 1 // CHECK_K8_M64: #define __MMX__ 1 // CHECK_K8_M64: #define __SSE2_MATH__ 1 // CHECK_K8_M64: #define __SSE2__ 1 @@ -2391,8 +2371,6 @@ // RUN: %clang -march=k8-sse3 -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_K8_SSE3_M32 -// CHECK_K8_SSE3_M32: #define __3dNOW_A__ 1 -// CHECK_K8_SSE3_M32: #define __3dNOW__ 1 // CHECK_K8_SSE3_M32: #define __MMX__ 1 // CHECK_K8_SSE3_M32: #define __SSE2__ 1 // CHECK_K8_SSE3_M32: #define __SSE3__ 1 @@ -2407,8 +2385,6 @@ // RUN: %clang -march=k8-sse3 -m64 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_K8_SSE3_M64 -// CHECK_K8_SSE3_M64: #define __3dNOW_A__ 1 -// CHECK_K8_SSE3_M64: #define __3dNOW__ 1 // CHECK_K8_SSE3_M64: #define __MMX__ 1 // CHECK_K8_SSE3_M64: #define __SSE2_MATH__ 1 // CHECK_K8_SSE3_M64: #define __SSE2__ 1 @@ -2426,8 +2402,6 @@ // RUN: %clang -march=opteron -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_OPTERON_M32 -// CHECK_OPTERON_M32: #define __3dNOW_A__ 1 -// CHECK_OPTERON_M32: #define __3dNOW__ 1 // CHECK_OPTERON_M32: #define __MMX__ 1 // CHECK_OPTERON_M32: #define __SSE2__ 1 // CHECK_OPTERON_M32: #define __SSE__ 1 @@ -2441,8 +2415,6 @@ // RUN: %clang -march=opteron -m64 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_OPTERON_M64 -// CHECK_OPTERON_M64: #define __3dNOW_A__ 1 -// CHECK_OPTERON_M64: #define __3dNOW__ 1 // CHECK_OPTERON_M64: #define __MMX__ 1 // CHECK_OPTERON_M64: #define __SSE2_MATH__ 1 // CHECK_OPTERON_M64: #define __SSE2__ 1 @@ -2459,8 +2431,6 @@ // RUN: %clang -march=opteron-sse3 -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_OPTERON_SSE3_M32 -// CHECK_OPTERON_SSE3_M32: #define __3dNOW_A__ 1 -// CHECK_OPTERON_SSE3_M32: #define __3dNOW__ 1 // CHECK_OPTERON_SSE3_M32: #define __MMX__ 1 // CHECK_OPTERON_SSE3_M32: #define __SSE2__ 1 // CHECK_OPTERON_SSE3_M32: #define __SSE3__ 1 @@ -2475,8 +2445,6 @@ // RUN: %clang -march=opteron-sse3 -m64 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_OPTERON_SSE3_M64 -// CHECK_OPTERON_SSE3_M64: #define __3dNOW_A__ 1 -// CHECK_OPTERON_SSE3_M64: #define __3dNOW__ 1 // CHECK_OPTERON_SSE3_M64: #define __MMX__ 1 // CHECK_OPTERON_SSE3_M64: #define __SSE2_MATH__ 1 // CHECK_OPTERON_SSE3_M64: #define __SSE2__ 1 @@ -2494,8 +2462,6 @@ // RUN: %clang -march=athlon64 -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_ATHLON64_M32 -// CHECK_ATHLON64_M32: #define __3dNOW_A__ 1 -// CHECK_ATHLON64_M32: #define __3dNOW__ 1 // CHECK_ATHLON64_M32: #define __MMX__ 1 // CHECK_ATHLON64_M32: #define __SSE2__ 1 // CHECK_ATHLON64_M32: #define __SSE__ 1 @@ -2509,8 +2475,6 @@ // RUN: %clang -march=athlon64 -m64 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_ATHLON64_M64 -// CHECK_ATHLON64_M64: #define __3dNOW_A__ 1 -// CHECK_ATHLON64_M64: #define __3dNOW__ 1 // CHECK_ATHLON64_M64: #define __MMX__ 1 // CHECK_ATHLON64_M64: #define __SSE2_MATH__ 1 // CHECK_ATHLON64_M64: #define __SSE2__ 1 @@ -2527,8 +2491,6 @@ // RUN: %clang -march=athlon64-sse3 -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_ATHLON64_SSE3_M32 -// CHECK_ATHLON64_SSE3_M32: #define __3dNOW_A__ 1 -// CHECK_ATHLON64_SSE3_M32: #define __3dNOW__ 1 // CHECK_ATHLON64_SSE3_M32: #define __MMX__ 1 // CHECK_ATHLON64_SSE3_M32: #define __SSE2__ 1 // CHECK_ATHLON64_SSE3_M32: #define __SSE3__ 1 @@ -2543,8 +2505,6 @@ // RUN: %clang -march=athlon64-sse3 -m64 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_ATHLON64_SSE3_M64 -// CHECK_ATHLON64_SSE3_M64: #define __3dNOW_A__ 1 -// CHECK_ATHLON64_SSE3_M64: #define __3dNOW__ 1 // CHECK_ATHLON64_SSE3_M64: #define __MMX__ 1 // CHECK_ATHLON64_SSE3_M64: #define __SSE2_MATH__ 1 // CHECK_ATHLON64_SSE3_M64: #define __SSE2__ 1 @@ -2562,8 +2522,6 @@ // RUN: %clang -march=athlon-fx -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_ATHLON_FX_M32 -// CHECK_ATHLON_FX_M32: #define __3dNOW_A__ 1 -// CHECK_ATHLON_FX_M32: #define __3dNOW__ 1 // CHECK_ATHLON_FX_M32: #define __MMX__ 1 // CHECK_ATHLON_FX_M32: #define __SSE2__ 1 // CHECK_ATHLON_FX_M32: #define __SSE__ 1 @@ -2577,8 +2535,6 @@ // RUN: %clang -march=athlon-fx -m64 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_ATHLON_FX_M64 -// CHECK_ATHLON_FX_M64: #define __3dNOW_A__ 1 -// CHECK_ATHLON_FX_M64: #define __3dNOW__ 1 // CHECK_ATHLON_FX_M64: #define __MMX__ 1 // CHECK_ATHLON_FX_M64: #define __SSE2_MATH__ 1 // CHECK_ATHLON_FX_M64: #define __SSE2__ 1 @@ -2595,8 +2551,6 @@ // RUN: %clang -march=amdfam10 -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_AMDFAM10_M32 -// CHECK_AMDFAM10_M32: #define __3dNOW_A__ 1 -// CHECK_AMDFAM10_M32: #define __3dNOW__ 1 // CHECK_AMDFAM10_M32: #define __LAHF_SAHF__ 1 // CHECK_AMDFAM10_M32: #define __LZCNT__ 1 // CHECK_AMDFAM10_M32: #define __MMX__ 1 @@ -2618,8 +2572,6 @@ // RUN: %clang -march=amdfam10 -m64 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_AMDFAM10_M64 -// CHECK_AMDFAM10_M64: #define __3dNOW_A__ 1 -// CHECK_AMDFAM10_M64: #define __3dNOW__ 1 // CHECK_AMDFAM10_M64: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 1 // CHECK_AMDFAM10_M64: #define __LAHF_SAHF__ 1 // CHECK_AMDFAM10_M64: #define __LZCNT__ 1 @@ -2644,8 +2596,6 @@ // RUN: %clang -march=btver1 -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_BTVER1_M32 -// CHECK_BTVER1_M32-NOT: #define __3dNOW_A__ 1 -// CHECK_BTVER1_M32-NOT: #define __3dNOW__ 1 // CHECK_BTVER1_M32: #define __LAHF_SAHF__ 1 // CHECK_BTVER1_M32: #define __LZCNT__ 1 // CHECK_BTVER1_M32: #define __MMX__ 1 @@ -2667,8 +2617,6 @@ // RUN: %clang -march=btver1 -m64 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_BTVER1_M64 -// CHECK_BTVER1_M64-NOT: #define __3dNOW_A__ 1 -// CHECK_BTVER1_M64-NOT: #define __3dNOW__ 1 // CHECK_BTVER1_M64: #define __LAHF_SAHF__ 1 // CHECK_BTVER1_M64: #define __LZCNT__ 1 // CHECK_BTVER1_M64: #define __MMX__ 1 @@ -2692,8 +2640,6 @@ // RUN: %clang -march=btver2 -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_BTVER2_M32 -// CHECK_BTVER2_M32-NOT: #define __3dNOW_A__ 1 -// CHECK_BTVER2_M32-NOT: #define __3dNOW__ 1 // CHECK_BTVER2_M32: #define __AES__ 1 // CHECK_BTVER2_M32: #define __AVX__ 1 // CHECK_BTVER2_M32: #define __BMI__ 1 @@ -2722,8 +2668,6 @@ // RUN: %clang -march=btver2 -m64 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_BTVER2_M64 -// CHECK_BTVER2_M64-NOT: #define __3dNOW_A__ 1 -// CHECK_BTVER2_M64-NOT: #define __3dNOW__ 1 // CHECK_BTVER2_M64: #define __AES__ 1 // CHECK_BTVER2_M64: #define __AVX__ 1 // CHECK_BTVER2_M64: #define __BMI__ 1 @@ -2754,8 +2698,6 @@ // RUN: %clang -march=bdver1 -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_BDVER1_M32 -// CHECK_BDVER1_M32-NOT: #define __3dNOW_A__ 1 -// CHECK_BDVER1_M32-NOT: #define __3dNOW__ 1 // CHECK_BDVER1_M32: #define __AES__ 1 // CHECK_BDVER1_M32: #define __AVX__ 1 // CHECK_BDVER1_M32: #define __FMA4__ 1 @@ -2785,8 +2727,6 @@ // RUN: %clang -march=bdver1 -m64 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_BDVER1_M64 -// CHECK_BDVER1_M64-NOT: #define __3dNOW_A__ 1 -// CHECK_BDVER1_M64-NOT: #define __3dNOW__ 1 // CHECK_BDVER1_M64: #define __AES__ 1 // CHECK_BDVER1_M64: #define __AVX__ 1 // CHECK_BDVER1_M64: #define __FMA4__ 1 @@ -2818,8 +2758,6 @@ // RUN: %clang -march=bdver2 -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_BDVER2_M32 -// CHECK_BDVER2_M32-NOT: #define __3dNOW_A__ 1 -// CHECK_BDVER2_M32-NOT: #define __3dNOW__ 1 // CHECK_BDVER2_M32: #define __AES__ 1 // CHECK_BDVER2_M32: #define __AVX__ 1 // CHECK_BDVER2_M32: #define __BMI__ 1 @@ -2853,8 +2791,6 @@ // RUN: %clang -march=bdver2 -m64 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_BDVER2_M64 -// CHECK_BDVER2_M64-NOT: #define __3dNOW_A__ 1 -// CHECK_BDVER2_M64-NOT: #define __3dNOW__ 1 // CHECK_BDVER2_M64: #define __AES__ 1 // CHECK_BDVER2_M64: #define __AVX__ 1 // CHECK_BDVER2_M64: #define __BMI__ 1 @@ -2890,8 +2826,6 @@ // RUN: %clang -march=bdver3 -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_BDVER3_M32 -// CHECK_BDVER3_M32-NOT: #define __3dNOW_A__ 1 -// CHECK_BDVER3_M32-NOT: #define __3dNOW__ 1 // CHECK_BDVER3_M32: #define __AES__ 1 // CHECK_BDVER3_M32: #define __AVX__ 1 // CHECK_BDVER3_M32: #define __BMI__ 1 @@ -2927,8 +2861,6 @@ // RUN: %clang -march=bdver3 -m64 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_BDVER3_M64 -// CHECK_BDVER3_M64-NOT: #define __3dNOW_A__ 1 -// CHECK_BDVER3_M64-NOT: #define __3dNOW__ 1 // CHECK_BDVER3_M64: #define __AES__ 1 // CHECK_BDVER3_M64: #define __AVX__ 1 // CHECK_BDVER3_M64: #define __BMI__ 1 @@ -2966,8 +2898,6 @@ // RUN: %clang -march=bdver4 -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_BDVER4_M32 -// CHECK_BDVER4_M32-NOT: #define __3dNOW_A__ 1 -// CHECK_BDVER4_M32-NOT: #define __3dNOW__ 1 // CHECK_BDVER4_M32: #define __AES__ 1 // CHECK_BDVER4_M32: #define __AVX2__ 1 // CHECK_BDVER4_M32: #define __AVX__ 1 @@ -3006,8 +2936,6 @@ // RUN: %clang -march=bdver4 -m64 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_BDVER4_M64 -// CHECK_BDVER4_M64-NOT: #define __3dNOW_A__ 1 -// CHECK_BDVER4_M64-NOT: #define __3dNOW__ 1 // CHECK_BDVER4_M64: #define __AES__ 1 // CHECK_BDVER4_M64: #define __AVX2__ 1 // CHECK_BDVER4_M64: #define __AVX__ 1 @@ -3048,8 +2976,6 @@ // RUN: %clang -march=znver1 -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_ZNVER1_M32 -// CHECK_ZNVER1_M32-NOT: #define __3dNOW_A__ 1 -// CHECK_ZNVER1_M32-NOT: #define __3dNOW__ 1 // CHECK_ZNVER1_M32: #define __ADX__ 1 // CHECK_ZNVER1_M32: #define __AES__ 1 // CHECK_ZNVER1_M32: #define __AVX2__ 1 @@ -3095,8 +3021,6 @@ // RUN: %clang -march=znver1 -m64 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_ZNVER1_M64 -// CHECK_ZNVER1_M64-NOT: #define __3dNOW_A__ 1 -// CHECK_ZNVER1_M64-NOT: #define __3dNOW__ 1 // CHECK_ZNVER1_M64: #define __ADX__ 1 // CHECK_ZNVER1_M64: #define __AES__ 1 // CHECK_ZNVER1_M64: #define __AVX2__ 1 @@ -3145,8 +3069,6 @@ // RUN: %clang -march=znver2 -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_ZNVER2_M32 -// CHECK_ZNVER2_M32-NOT: #define __3dNOW_A__ 1 -// CHECK_ZNVER2_M32-NOT: #define __3dNOW__ 1 // CHECK_ZNVER2_M32: #define __ADX__ 1 // CHECK_ZNVER2_M32: #define __AES__ 1 // CHECK_ZNVER2_M32: #define __AVX2__ 1 @@ -3195,8 +3117,6 @@ // RUN: %clang -march=znver2 -m64 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_ZNVER2_M64 -// CHECK_ZNVER2_M64-NOT: #define __3dNOW_A__ 1 -// CHECK_ZNVER2_M64-NOT: #define __3dNOW__ 1 // CHECK_ZNVER2_M64: #define __ADX__ 1 // CHECK_ZNVER2_M64: #define __AES__ 1 // CHECK_ZNVER2_M64: #define __AVX2__ 1 @@ -3247,8 +3167,6 @@ // RUN: %clang -march=znver3 -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_ZNVER3_M32 -// CHECK_ZNVER3_M32-NOT: #define __3dNOW_A__ 1 -// CHECK_ZNVER3_M32-NOT: #define __3dNOW__ 1 // CHECK_ZNVER3_M32: #define __ADX__ 1 // CHECK_ZNVER3_M32: #define __AES__ 1 // CHECK_ZNVER3_M32: #define __AVX2__ 1 @@ -3297,8 +3215,6 @@ // RUN: %clang -march=znver3 -m64 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_ZNVER3_M64 -// CHECK_ZNVER3_M64-NOT: #define __3dNOW_A__ 1 -// CHECK_ZNVER3_M64-NOT: #define __3dNOW__ 1 // CHECK_ZNVER3_M64: #define __ADX__ 1 // CHECK_ZNVER3_M64: #define __AES__ 1 // CHECK_ZNVER3_M64: #define __AVX2__ 1 diff --git a/clang/test/Preprocessor/x86_target_features.c b/clang/test/Preprocessor/x86_target_features.c --- a/clang/test/Preprocessor/x86_target_features.c +++ b/clang/test/Preprocessor/x86_target_features.c @@ -380,12 +380,12 @@ // RUN: %clang -target i386-unknown-unknown -march=atom -m3dnow -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=3DNOWPRFCHW %s -// 3DNOWPRFCHW: #define __3dNOW__ 1 +// 3DNOWPRFCHW-NOT: #define __3dNOW__ 1 // 3DNOWPRFCHW-NOT: #define __PRFCHW__ 1 // RUN: %clang -target i386-unknown-unknown -march=atom -mno-prfchw -m3dnow -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=3DNOWNOPRFCHW %s -// 3DNOWNOPRFCHW: #define __3dNOW__ 1 +// 3DNOWNOPRFCHW-NOT: #define __3dNOW__ 1 // 3DNOWNOPRFCHW-NOT: #define __PRFCHW__ 1 // RUN: %clang -target i386-unknown-unknown -march=atom -mprfchw -mno-3dnow -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=NO3DNOWPRFCHW %s diff --git a/llvm/include/llvm/IR/IntrinsicsX86.td b/llvm/include/llvm/IR/IntrinsicsX86.td --- a/llvm/include/llvm/IR/IntrinsicsX86.td +++ b/llvm/include/llvm/IR/IntrinsicsX86.td @@ -95,57 +95,57 @@ // 3DNow! let TargetPrefix = "x86" in { - def int_x86_3dnow_pavgusb : GCCBuiltin<"__builtin_ia32_pavgusb">, + def int_x86_3dnow_pavgusb : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnow_pf2id : GCCBuiltin<"__builtin_ia32_pf2id">, + def int_x86_3dnow_pf2id : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnow_pfacc : GCCBuiltin<"__builtin_ia32_pfacc">, + def int_x86_3dnow_pfacc : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnow_pfadd : GCCBuiltin<"__builtin_ia32_pfadd">, + def int_x86_3dnow_pfadd : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnow_pfcmpeq : GCCBuiltin<"__builtin_ia32_pfcmpeq">, + def int_x86_3dnow_pfcmpeq : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnow_pfcmpge : GCCBuiltin<"__builtin_ia32_pfcmpge">, + def int_x86_3dnow_pfcmpge : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnow_pfcmpgt : GCCBuiltin<"__builtin_ia32_pfcmpgt">, + def int_x86_3dnow_pfcmpgt : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnow_pfmax : GCCBuiltin<"__builtin_ia32_pfmax">, + def int_x86_3dnow_pfmax : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnow_pfmin : GCCBuiltin<"__builtin_ia32_pfmin">, + def int_x86_3dnow_pfmin : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnow_pfmul : GCCBuiltin<"__builtin_ia32_pfmul">, + def int_x86_3dnow_pfmul : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnow_pfrcp : GCCBuiltin<"__builtin_ia32_pfrcp">, + def int_x86_3dnow_pfrcp : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnow_pfrcpit1 : GCCBuiltin<"__builtin_ia32_pfrcpit1">, + def int_x86_3dnow_pfrcpit1 : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnow_pfrcpit2 : GCCBuiltin<"__builtin_ia32_pfrcpit2">, + def int_x86_3dnow_pfrcpit2 : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnow_pfrsqrt : GCCBuiltin<"__builtin_ia32_pfrsqrt">, + def int_x86_3dnow_pfrsqrt : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnow_pfrsqit1 : GCCBuiltin<"__builtin_ia32_pfrsqit1">, + def int_x86_3dnow_pfrsqit1 : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnow_pfsub : GCCBuiltin<"__builtin_ia32_pfsub">, + def int_x86_3dnow_pfsub : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnow_pfsubr : GCCBuiltin<"__builtin_ia32_pfsubr">, + def int_x86_3dnow_pfsubr : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnow_pi2fd : GCCBuiltin<"__builtin_ia32_pi2fd">, + def int_x86_3dnow_pi2fd : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnow_pmulhrw : GCCBuiltin<"__builtin_ia32_pmulhrw">, + def int_x86_3dnow_pmulhrw : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], [IntrNoMem]>; } @@ -154,15 +154,15 @@ // 3DNow! extensions let TargetPrefix = "x86" in { - def int_x86_3dnowa_pf2iw : GCCBuiltin<"__builtin_ia32_pf2iw">, + def int_x86_3dnowa_pf2iw : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnowa_pfnacc : GCCBuiltin<"__builtin_ia32_pfnacc">, + def int_x86_3dnowa_pfnacc : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnowa_pfpnacc : GCCBuiltin<"__builtin_ia32_pfpnacc">, + def int_x86_3dnowa_pfpnacc : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], [IntrNoMem]>; - def int_x86_3dnowa_pi2fw : GCCBuiltin<"__builtin_ia32_pi2fw">, + def int_x86_3dnowa_pi2fw : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; def int_x86_3dnowa_pswapd : Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; @@ -2131,7 +2131,7 @@ let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". def int_x86_mmx_emms : GCCBuiltin<"__builtin_ia32_emms">, Intrinsic<[], [], []>; - def int_x86_mmx_femms : GCCBuiltin<"__builtin_ia32_femms">, + def int_x86_mmx_femms : Intrinsic<[], [], []>; }