diff --git a/include/clang/Basic/Builtins.def b/include/clang/Basic/Builtins.def index af6a1687cf058bd5fa00f4946969b394ad3e13c0..0a07bca5116f23c2cae7338f81de713c7f319b03 100644 --- a/include/clang/Basic/Builtins.def +++ b/include/clang/Basic/Builtins.def @@ -74,7 +74,6 @@ // f -> this is a libc/libm function without the '__builtin_' prefix. It can // be followed by ':headername:' to state which header this function // comes from. -// h -> this function requires a specific header or an explicit declaration. // i -> this is a runtime library implemented function without the // '__builtin_' prefix. It will be implemented in compiler-rt or libgcc. // p:N: -> this is a printf-like function whose Nth argument is the format @@ -709,9 +708,6 @@ BUILTIN(__builtin_rindex, "c*cC*i", "Fn") // Microsoft builtins. These are only active with -fms-extensions. LANGBUILTIN(_alloca, "v*z", "n", ALL_MS_LANGUAGES) LANGBUILTIN(__assume, "vb", "n", ALL_MS_LANGUAGES) -LIBBUILTIN(_byteswap_ushort, "UsUs", "fnc", "stdlib.h", ALL_MS_LANGUAGES) -LIBBUILTIN(_byteswap_ulong, "ULiULi", "fnc", "stdlib.h", ALL_MS_LANGUAGES) -LIBBUILTIN(_byteswap_uint64, "ULLiULLi", "fnc", "stdlib.h", ALL_MS_LANGUAGES) LANGBUILTIN(__debugbreak, "v", "n", ALL_MS_LANGUAGES) LANGBUILTIN(__exception_code, "ULi", "n", ALL_MS_LANGUAGES) LANGBUILTIN(_exception_code, "ULi", "n", ALL_MS_LANGUAGES) @@ -757,9 +753,6 @@ LANGBUILTIN(_InterlockedXor16, "ssD*s", "n", ALL_MS_LANGUAGES) LANGBUILTIN(_InterlockedXor, "LiLiD*Li", "n", ALL_MS_LANGUAGES) LANGBUILTIN(_InterlockedXor64, "LLiLLiD*LLi", "n", ALL_MS_LANGUAGES) LANGBUILTIN(__noop, "i.", "n", ALL_MS_LANGUAGES) -LANGBUILTIN(__popcnt16, "UsUs", "nc", ALL_MS_LANGUAGES) -LANGBUILTIN(__popcnt, "UiUi", "nc", ALL_MS_LANGUAGES) -LANGBUILTIN(__popcnt64, "ULLiULLi", "nc", ALL_MS_LANGUAGES) LANGBUILTIN(__readfsdword, "ULiULi", "n", ALL_MS_LANGUAGES) LANGBUILTIN(_rotl8, "UcUcUc", "n", ALL_MS_LANGUAGES) LANGBUILTIN(_rotl16, "UsUsUc", "n", ALL_MS_LANGUAGES) diff --git a/include/clang/Basic/Builtins.h b/include/clang/Basic/Builtins.h index c89880de0a0154ee9b8abcabcebb7f9940919969..15e9a413fb42090738657643dae34f64248f765a 100644 --- a/include/clang/Basic/Builtins.h +++ b/include/clang/Basic/Builtins.h @@ -139,13 +139,6 @@ public: return strchr(getRecord(ID).Attributes, 'f') != nullptr; } - // \brief Returns true if this builtin requires appropriate header in other - // compilers. In Clang it will work even without including it, but we can emit - // a warning about missing header. - bool isHeaderDependentFunction(unsigned ID) const { - return strchr(getRecord(ID).Attributes, 'h') != nullptr; - } - /// \brief Determines whether this builtin is a predefined compiler-rt/libgcc /// function, such as "__clear_cache", where we know the signature a /// priori. diff --git a/include/clang/Basic/BuiltinsX86.def b/include/clang/Basic/BuiltinsX86.def index 033ed6e21aa33ea6535714b5c39ebf1c52094f33..a9577cf837f2607dc184e24fb1a2481dd50d1b81 100644 --- a/include/clang/Basic/BuiltinsX86.def +++ b/include/clang/Basic/BuiltinsX86.def @@ -23,10 +23,6 @@ # define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BUILTIN(ID, TYPE, ATTRS) #endif -#if defined(BUILTIN) && !defined(TARGET_HEADER_BUILTIN) -# define TARGET_HEADER_BUILTIN(ID, TYPE, ATTRS, HEADER, LANG, FEATURE) BUILTIN(ID, TYPE, ATTRS) -#endif - // FIXME: Are these nothrow/const? // Miscellaneous builtin for checking x86 cpu features. @@ -305,9 +301,7 @@ TARGET_BUILTIN(__builtin_ia32_pabsw128, "V8sV8s", "", "ssse3") TARGET_BUILTIN(__builtin_ia32_pabsd128, "V4iV4i", "", "ssse3") TARGET_BUILTIN(__builtin_ia32_ldmxcsr, "vUi", "", "sse") -TARGET_HEADER_BUILTIN(_mm_setcsr, "vUi", "h","xmmintrin.h", ALL_LANGUAGES, "sse") TARGET_BUILTIN(__builtin_ia32_stmxcsr, "Ui", "", "sse") -TARGET_HEADER_BUILTIN(_mm_getcsr, "Ui", "h", "xmmintrin.h", ALL_LANGUAGES, "sse") TARGET_BUILTIN(__builtin_ia32_cvtss2si, "iV4f", "", "sse") TARGET_BUILTIN(__builtin_ia32_cvttss2si, "iV4f", "", "sse") TARGET_BUILTIN(__builtin_ia32_cvtss2si64, "LLiV4f", "", "sse") @@ -316,7 +310,6 @@ TARGET_BUILTIN(__builtin_ia32_storehps, "vV2i*V4f", "", "sse") TARGET_BUILTIN(__builtin_ia32_storelps, "vV2i*V4f", "", "sse") TARGET_BUILTIN(__builtin_ia32_movmskps, "iV4f", "", "sse") TARGET_BUILTIN(__builtin_ia32_sfence, "v", "", "sse") -TARGET_HEADER_BUILTIN(_mm_sfence, "v", "h", "xmmintrin.h", ALL_LANGUAGES, "sse") TARGET_BUILTIN(__builtin_ia32_rcpps, "V4fV4f", "", "sse") TARGET_BUILTIN(__builtin_ia32_rcpss, "V4fV4f", "", "sse") TARGET_BUILTIN(__builtin_ia32_rsqrtps, "V4fV4f", "", "sse") @@ -344,13 +337,9 @@ TARGET_BUILTIN(__builtin_ia32_cvtsd2ss, "V4fV4fV2d", "", "sse2") TARGET_BUILTIN(__builtin_ia32_cvtps2dq, "V4iV4f", "", "sse2") TARGET_BUILTIN(__builtin_ia32_cvttps2dq, "V4iV4f", "", "sse2") TARGET_BUILTIN(__builtin_ia32_clflush, "vvC*", "", "sse2") -TARGET_HEADER_BUILTIN(_mm_clflush, "vvC*", "h", "emmintrin.h", ALL_LANGUAGES, "sse2") TARGET_BUILTIN(__builtin_ia32_lfence, "v", "", "sse2") -TARGET_HEADER_BUILTIN(_mm_lfence, "v", "h", "emmintrin.h", ALL_LANGUAGES, "sse2") TARGET_BUILTIN(__builtin_ia32_mfence, "v", "", "sse2") -TARGET_HEADER_BUILTIN(_mm_mfence, "v", "h", "emmintrin.h", ALL_LANGUAGES, "sse2") TARGET_BUILTIN(__builtin_ia32_pause, "v", "", "sse2") -TARGET_HEADER_BUILTIN(_mm_pause, "v", "h", "emmintrin.h", ALL_LANGUAGES, "sse2") TARGET_BUILTIN(__builtin_ia32_pmuludq128, "V2LLiV4iV4i", "", "sse2") TARGET_BUILTIN(__builtin_ia32_psraw128, "V8sV8sV8s", "", "sse2") TARGET_BUILTIN(__builtin_ia32_psrad128, "V4iV4iV4i", "", "sse2") @@ -905,7 +894,6 @@ TARGET_BUILTIN(__builtin_ia32_xtest, "i", "", "rtm") BUILTIN(__builtin_ia32_rdpmc, "ULLii", "") BUILTIN(__builtin_ia32_rdtsc, "ULLi", "") -BUILTIN(__rdtsc, "ULLi", "") BUILTIN(__builtin_ia32_rdtscp, "ULLiUi*", "") // PKU TARGET_BUILTIN(__builtin_ia32_rdpkru, "Ui", "", "pku") @@ -2071,4 +2059,3 @@ TARGET_BUILTIN(__builtin_ia32_mwaitx, "vUiUiUi", "", "mwaitx") #undef BUILTIN #undef TARGET_BUILTIN -#undef TARGET_HEADER_BUILTIN diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 62ecd1e28ce6d029defbd128008956b89c3c4dcd..b549d1485ba0fca1320e5c2e30e008010e221efa 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -2303,8 +2303,6 @@ const Builtin::Info BuiltinInfo[] = { { #ID, TYPE, ATTRS, HEADER, ALL_LANGUAGES, nullptr }, #define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) \ { #ID, TYPE, ATTRS, nullptr, ALL_LANGUAGES, FEATURE }, -#define TARGET_HEADER_BUILTIN(ID, TYPE, ATTRS, HEADER, LANGS, FEATURE) \ - { #ID, TYPE, ATTRS, HEADER, LANGS, FEATURE }, #include "clang/Basic/BuiltinsX86.def" }; diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp index 9e6385e2a16e82ca4c33e849ba5094e173907092..18630441421cea72345336835554d672eb64e24f 100644 --- a/lib/CodeGen/CGBuiltin.cpp +++ b/lib/CodeGen/CGBuiltin.cpp @@ -681,9 +681,6 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD, "cast"); return RValue::get(Result); } - case Builtin::BI__popcnt16: - case Builtin::BI__popcnt: - case Builtin::BI__popcnt64: case Builtin::BI__builtin_popcount: case Builtin::BI__builtin_popcountl: case Builtin::BI__builtin_popcountll: { @@ -6959,25 +6956,6 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, Value *F = CGM.getIntrinsic(Intrinsic::prefetch); return Builder.CreateCall(F, {Address, RW, Locality, Data}); } - case X86::BI_mm_clflush: { - return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_sse2_clflush), - Ops[0]); - } - case X86::BI_mm_lfence: { - return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_sse2_lfence)); - } - case X86::BI_mm_mfence: { - return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_sse2_mfence)); - } - case X86::BI_mm_sfence: { - return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_sse_sfence)); - } - case X86::BI_mm_pause: { - return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_sse2_pause)); - } - case X86::BI__rdtsc: { - return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_rdtsc)); - } case X86::BI__builtin_ia32_undef128: case X86::BI__builtin_ia32_undef256: case X86::BI__builtin_ia32_undef512: @@ -6990,14 +6968,12 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, case X86::BI__builtin_ia32_vec_ext_v2si: return Builder.CreateExtractElement(Ops[0], llvm::ConstantInt::get(Ops[1]->getType(), 0)); - case X86::BI_mm_setcsr: case X86::BI__builtin_ia32_ldmxcsr: { Address Tmp = CreateMemTemp(E->getArg(0)->getType()); Builder.CreateStore(Ops[0], Tmp); return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_sse_ldmxcsr), Builder.CreateBitCast(Tmp.getPointer(), Int8PtrTy)); } - case X86::BI_mm_getcsr: case X86::BI__builtin_ia32_stmxcsr: { Address Tmp = CreateMemTemp(E->getType()); Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_sse_stmxcsr), diff --git a/lib/Headers/emmintrin.h b/lib/Headers/emmintrin.h index 3e24cf35c1be7d4ae2e6f4dac727ae77d1ec7cd7..d73b3a8eda1983c57879662ff24208ba18a355a7 100644 --- a/lib/Headers/emmintrin.h +++ b/lib/Headers/emmintrin.h @@ -2457,7 +2457,11 @@ _mm_stream_si64(long long *__p, long long __a) /// \param __p /// A pointer to the memory location used to identify the cache line to be /// flushed. -void _mm_clflush(void const *); +static __inline__ void __DEFAULT_FN_ATTRS +_mm_clflush(void const *__p) +{ + __builtin_ia32_clflush(__p); +} /// \brief Forces strong memory ordering (serialization) between load /// instructions preceding this instruction and load instructions following @@ -2468,7 +2472,11 @@ void _mm_clflush(void const *); /// /// This intrinsic corresponds to the \c LFENCE instruction. /// -void _mm_lfence(void); +static __inline__ void __DEFAULT_FN_ATTRS +_mm_lfence(void) +{ + __builtin_ia32_lfence(); +} /// \brief Forces strong memory ordering (serialization) between load and store /// instructions preceding this instruction and load and store instructions @@ -2479,7 +2487,11 @@ void _mm_lfence(void); /// /// This intrinsic corresponds to the \c MFENCE instruction. /// -void _mm_mfence(void); +static __inline__ void __DEFAULT_FN_ATTRS +_mm_mfence(void) +{ + __builtin_ia32_mfence(); +} /// \brief Converts 16-bit signed integers from both 128-bit integer vector /// operands into 8-bit signed integers, and packs the results into the @@ -3201,7 +3213,11 @@ _mm_castsi128_pd(__m128i __a) /// /// This intrinsic corresponds to the \c PAUSE instruction. /// -void _mm_pause(void); +static __inline__ void __DEFAULT_FN_ATTRS +_mm_pause(void) +{ + __builtin_ia32_pause(); +} #undef __DEFAULT_FN_ATTRS diff --git a/lib/Headers/ia32intrin.h b/lib/Headers/ia32intrin.h index 4928300103adc639cbc9976b36687a028431941d..397f3fd13e010d3cd869af09a67a0c10b08fbe2c 100644 --- a/lib/Headers/ia32intrin.h +++ b/lib/Headers/ia32intrin.h @@ -60,6 +60,12 @@ __rdpmc(int __A) { return __builtin_ia32_rdpmc(__A); } +/* __rdtsc */ +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) +__rdtsc(void) { + return __builtin_ia32_rdtsc(); +} + /* __rdtscp */ static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) __rdtscp(unsigned int *__A) { diff --git a/lib/Headers/intrin.h b/lib/Headers/intrin.h index fc00401d138149e283c08bd6ac666d2b4c3530c3..d0b500e991474e7e194c024a920eccc4de47a035 100644 --- a/lib/Headers/intrin.h +++ b/lib/Headers/intrin.h @@ -463,6 +463,14 @@ _BitScanReverse(unsigned long *_Index, unsigned long _Mask) { *_Index = 31 - __builtin_clzl(_Mask); return 1; } +static __inline__ unsigned short __DEFAULT_FN_ATTRS +__popcnt16(unsigned short _Value) { + return __builtin_popcount((int)_Value); +} +static __inline__ unsigned int __DEFAULT_FN_ATTRS +__popcnt(unsigned int _Value) { + return __builtin_popcount(_Value); +} static __inline__ unsigned char __DEFAULT_FN_ATTRS _bittest(long const *_BitBase, long _BitPos) { return (*_BitBase >> _BitPos) & 1; @@ -505,6 +513,11 @@ _BitScanReverse64(unsigned long *_Index, unsigned __int64 _Mask) { *_Index = 63 - __builtin_clzll(_Mask); return 1; } +static __inline__ +unsigned __int64 __DEFAULT_FN_ATTRS +__popcnt64(unsigned __int64 _Value) { + return __builtin_popcountll(_Value); +} static __inline__ unsigned char __DEFAULT_FN_ATTRS _bittest64(__int64 const *_BitBase, __int64 _BitPos) { return (*_BitBase >> _BitPos) & 1; diff --git a/lib/Headers/xmmintrin.h b/lib/Headers/xmmintrin.h index 2688da0f992821c66ac90b74ba152557e3c8fae7..373fc76aa7c4523f2ae80ca0edfb7372ffcfab1a 100644 --- a/lib/Headers/xmmintrin.h +++ b/lib/Headers/xmmintrin.h @@ -2094,7 +2094,11 @@ _mm_stream_ps(float *__p, __m128 __a) /// /// This intrinsic corresponds to the \c SFENCE instruction. /// -void _mm_sfence(void); +static __inline__ void __DEFAULT_FN_ATTRS +_mm_sfence(void) +{ + __builtin_ia32_sfence(); +} /// \brief Extracts 16-bit element from a 64-bit vector of [4 x i16] and /// returns it, as specified by the immediate integer operand. @@ -2404,7 +2408,11 @@ _mm_sad_pu8(__m64 __a, __m64 __b) /// /// \returns A 32-bit unsigned integer containing the contents of the MXCSR /// register. -unsigned int _mm_getcsr(void); +static __inline__ unsigned int __DEFAULT_FN_ATTRS +_mm_getcsr(void) +{ + return __builtin_ia32_stmxcsr(); +} /// \brief Sets the MXCSR register with the 32-bit unsigned integer value. There /// are several groups of macros associated with this intrinsic, including: @@ -2442,7 +2450,11 @@ unsigned int _mm_getcsr(void); /// /// \param __i /// A 32-bit unsigned integer value to be written to the MXCSR register. -void _mm_setcsr(unsigned int); +static __inline__ void __DEFAULT_FN_ATTRS +_mm_setcsr(unsigned int __i) +{ + __builtin_ia32_ldmxcsr(__i); +} /// \brief Selects 4 float values from the 128-bit operands of [4 x float], as /// specified by the immediate value operand. diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index c28ef2cae40d4b8d0d4adb0a94c54142006b9c94..3014369c887f05c8681262e0fe88f2c5b1ea7c40 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -1791,9 +1791,7 @@ NamedDecl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned ID, return nullptr; } - if (!ForRedeclaration && - (Context.BuiltinInfo.isPredefinedLibFunction(ID) || - Context.BuiltinInfo.isHeaderDependentFunction(ID))) { + if (!ForRedeclaration && Context.BuiltinInfo.isPredefinedLibFunction(ID)) { Diag(Loc, diag::ext_implicit_lib_function_decl) << Context.BuiltinInfo.getName(ID) << R; if (Context.BuiltinInfo.getHeaderName(ID) && diff --git a/test/CodeGen/builtins-x86.c b/test/CodeGen/builtins-x86.c index ec8a8bf868c525f153d3f45a435aa23e32083ca3..8fa24e668f74631f54f3baa8607afa66075be3e1 100644 --- a/test/CodeGen/builtins-x86.c +++ b/test/CodeGen/builtins-x86.c @@ -262,9 +262,7 @@ void f0() { tmp_i = __builtin_ia32_vec_ext_v2si(tmp_V2i, 0); (void) __builtin_ia32_ldmxcsr(tmp_Ui); - (void) _mm_setcsr(tmp_Ui); tmp_Ui = __builtin_ia32_stmxcsr(); - tmp_Ui = _mm_getcsr(); (void)__builtin_ia32_fxsave(tmp_vp); (void)__builtin_ia32_fxsave64(tmp_vp); (void)__builtin_ia32_fxrstor(tmp_vp); @@ -292,7 +290,6 @@ void f0() { tmp_i = __builtin_ia32_cvttss2si(tmp_V4f); tmp_i = __builtin_ia32_rdtsc(); - tmp_i = __rdtsc(); tmp_i = __builtin_ia32_rdtscp(&tmp_Ui); tmp_LLi = __builtin_ia32_rdpmc(tmp_i); #ifdef USE_64 @@ -307,7 +304,6 @@ void f0() { tmp_i = __builtin_ia32_pmovmskb(tmp_V8c); (void) __builtin_ia32_movntq(tmp_V1LLip, tmp_V1LLi); (void) __builtin_ia32_sfence(); - (void) _mm_sfence(); tmp_V4s = __builtin_ia32_psadbw(tmp_V8c, tmp_V8c); tmp_V4f = __builtin_ia32_rcpps(tmp_V4f); @@ -343,13 +339,8 @@ void f0() { tmp_V4i = __builtin_ia32_cvtps2dq(tmp_V4f); tmp_V4i = __builtin_ia32_cvttps2dq(tmp_V4f); (void) __builtin_ia32_clflush(tmp_vCp); - (void) _mm_clflush(tmp_vCp); (void) __builtin_ia32_lfence(); - (void) _mm_lfence(); (void) __builtin_ia32_mfence(); - (void) _mm_mfence(); - (void) __builtin_ia32_pause(); - (void) _mm_pause(); tmp_V4s = __builtin_ia32_psllwi(tmp_V4s, tmp_i); tmp_V2i = __builtin_ia32_pslldi(tmp_V2i, tmp_i); tmp_V1LLi = __builtin_ia32_psllqi(tmp_V1LLi, tmp_i); diff --git a/test/Sema/implicit-intel-builtin-decl.c b/test/Sema/implicit-intel-builtin-decl.c deleted file mode 100644 index e588a4b8866ef657c634e08b7c0ece8b54c44383..0000000000000000000000000000000000000000 --- a/test/Sema/implicit-intel-builtin-decl.c +++ /dev/null @@ -1,40 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-unknown-unknown -target-feature +sse2 -fsyntax-only -verify %s -// RUN: %clang_cc1 -triple x86_64-unknown-unknown -target-feature +sse2 -fsyntax-only -verify %s -x c++ - -void f() { - (void)_mm_getcsr(); // expected-warning{{implicitly declaring library function '_mm_getcsr'}} \ - // expected-note{{include the header <xmmintrin.h> or explicitly provide a declaration for '_mm_getcsr'}} - _mm_setcsr(1); // expected-warning{{implicitly declaring library function '_mm_setcsr'}} \ - // expected-note{{include the header <xmmintrin.h> or explicitly provide a declaration for '_mm_setcsr'}} - _mm_sfence(); // expected-warning{{implicitly declaring library function '_mm_sfence'}} \ - // expected-note{{include the header <xmmintrin.h> or explicitly provide a declaration for '_mm_sfence'}} - - _mm_clflush((void*)0); // expected-warning{{implicitly declaring library function '_mm_clflush'}} \ - // expected-note{{include the header <emmintrin.h> or explicitly provide a declaration for '_mm_clflush'}} - _mm_lfence(); // expected-warning{{implicitly declaring library function '_mm_lfence'}} \ - // expected-note{{include the header <emmintrin.h> or explicitly provide a declaration for '_mm_lfence'}} - _mm_mfence(); // expected-warning{{implicitly declaring library function '_mm_mfence'}} \ - // expected-note{{include the header <emmintrin.h> or explicitly provide a declaration for '_mm_mfence'}} - _mm_pause(); // expected-warning{{implicitly declaring library function '_mm_pause'}} \ - // expected-note{{include the header <emmintrin.h> or explicitly provide a declaration for '_mm_pause'}} -} - -unsigned int _mm_getcsr(); -void _mm_setcsr(unsigned int); -void _mm_sfence(); - -void _mm_clflush(void const *); -void _mm_lfence(); -void _mm_mfence(); -void _mm_pause(); - -void g() { - (void)_mm_getcsr(); - _mm_setcsr(1); - _mm_sfence(); - - _mm_clflush((void*)0); - _mm_lfence(); - _mm_mfence(); - _mm_pause(); -} diff --git a/test/Sema/implicit-ms-builtin-decl.c b/test/Sema/implicit-ms-builtin-decl.c deleted file mode 100644 index e43d8f867d849f24d3d6ed0db15b2d0ba4735f87..0000000000000000000000000000000000000000 --- a/test/Sema/implicit-ms-builtin-decl.c +++ /dev/null @@ -1,19 +0,0 @@ -// RUN: %clang_cc1 -fsyntax-only -verify %s -fms-extensions - -void f() { - (void)_byteswap_ushort(42); // expected-warning{{implicitly declaring library function '_byteswap_ushort}} \ - // expected-note{{include the header <stdlib.h> or explicitly provide a declaration for '_byteswap_ushort'}} - (void)_byteswap_uint64(42LL); // expected-warning{{implicitly declaring library function '_byteswap_uint64}} \ - // expected-note{{include the header <stdlib.h> or explicitly provide a declaration for '_byteswap_uint64'}} -} - -void _byteswap_ulong(); // expected-warning{{incompatible redeclaration of library function '_byteswap_ulong'}} \ -// expected-note{{'_byteswap_ulong' is a builtin}} - -unsigned short _byteswap_ushort(unsigned short); -unsigned long long _byteswap_uint64(unsigned long long); - -void g() { - (void)_byteswap_ushort(42); - (void)_byteswap_uint64(42LL); -}