r281375 - Add some MS aliases for existing intrinsics
Nico Weber via cfe-commits
cfe-commits at lists.llvm.org
Tue Sep 13 14:25:07 PDT 2016
This breaks building Chromium,
https://build.chromium.org/p/chromium.fyi/builders/ClangToTWin64%28dbg%29/builds/7125/steps/compile/logs/stdio
FAILED: obj/components/webcrypto/webcrypto/aes_gcm.obj
../../third_party/llvm-build/Release+Asserts/bin/clang-cl.exe /nologo
/showIncludes /FC @obj/components/webcrypto/webcrypto/aes_gcm.obj.rsp /c
../../components/webcrypto/algorithms/aes_gcm.cc
/Foobj/components/webcrypto/webcrypto/aes_gcm.obj
/Fd"obj/components/webcrypto/webcrypto_cc.pdb"
In file included from ../../components/webcrypto/algorithms/aes_gcm.cc:5:
In file included from
../../third_party/boringssl/src/include\openssl/evp.h:60:
In file included from
../../third_party/boringssl/src/include\openssl/base.h:313:
In file included from
C:\b\depot_tools\win_toolchain\vs_files\d5dc33b15d1b2c086f2f6632e2fd15882f80dbd3\win_sdk\bin\..\..\VC\include\memory:6:
In file included from
C:\b\depot_tools\win_toolchain\vs_files\d5dc33b15d1b2c086f2f6632e2fd15882f80dbd3\win_sdk\bin\..\..\VC\include\xmemory:6:
In file included from
C:\b\depot_tools\win_toolchain\vs_files\d5dc33b15d1b2c086f2f6632e2fd15882f80dbd3\win_sdk\bin\..\..\VC\include\xmemory0:1151:
In file included from
C:\b\c\b\ClangToTWin64_dbg_\src\third_party\llvm-build\Release+Asserts\bin\..\lib\clang\4.0.0\include\intrin.h:34:
In file included from
C:\b\c\b\ClangToTWin64_dbg_\src\third_party\llvm-build\Release+Asserts\bin\..\lib\clang\4.0.0\include\x86intrin.h:29:
In file included from
C:\b\c\b\ClangToTWin64_dbg_\src\third_party\llvm-build\Release+Asserts\bin\..\lib\clang\4.0.0\include\immintrin.h:32:
C:\b\c\b\ClangToTWin64_dbg_\src\third_party\llvm-build\Release+Asserts\lib\clang\4.0.0\include\xmmintrin.h(2097,6):
error: declaration of '_mm_sfence' has a different language linkage
void _mm_sfence(void);
^
C:\b\c\b\ClangToTWin64_dbg_\src\third_party\llvm-build\Release+Asserts\lib\clang\4.0.0\include\xmmintrin.h(2097,6):
note: previous implicit declaration is here
C:\b\c\b\ClangToTWin64_dbg_\src\third_party\llvm-build\Release+Asserts\lib\clang\4.0.0\include\xmmintrin.h(2407,14):
error: declaration of '_mm_getcsr' has a different language linkage
unsigned int _mm_getcsr(void);
^
It looks like just including memory like in
https://cs.chromium.org/chromium/src/third_party/boringssl/src/include/openssl/base.h?type=cs&q=third_party/boringssl/src/include/openssl/base.h&sq=package:chromium&l=313
is enough to repro, so this looks like it probably breaks all users of
clang-cl. Please revert.
On Tue, Sep 13, 2016 at 3:26 PM, Albert Gutowski via cfe-commits <
cfe-commits at lists.llvm.org> wrote:
> Author: agutowski
> Date: Tue Sep 13 14:26:42 2016
> New Revision: 281375
>
> URL: http://llvm.org/viewvc/llvm-project?rev=281375&view=rev
> Log:
> Add some MS aliases for existing intrinsics
>
> Reviewers: thakis, compnerd, majnemer, rsmith, rnk
>
> Subscribers: cfe-commits
>
> Differential Revision: https://reviews.llvm.org/D24330
>
> Added:
> cfe/trunk/test/Sema/implicit-intel-builtin-decl.c
> cfe/trunk/test/Sema/implicit-ms-builtin-decl.c
> Modified:
> cfe/trunk/include/clang/Basic/Builtins.def
> cfe/trunk/include/clang/Basic/Builtins.h
> cfe/trunk/include/clang/Basic/BuiltinsX86.def
> cfe/trunk/lib/Basic/Targets.cpp
> cfe/trunk/lib/CodeGen/CGBuiltin.cpp
> cfe/trunk/lib/Headers/emmintrin.h
> cfe/trunk/lib/Headers/ia32intrin.h
> cfe/trunk/lib/Headers/intrin.h
> cfe/trunk/lib/Headers/xmmintrin.h
> cfe/trunk/lib/Sema/SemaDecl.cpp
> cfe/trunk/test/CodeGen/builtins-x86.c
>
> Modified: cfe/trunk/include/clang/Basic/Builtins.def
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/
> clang/Basic/Builtins.def?rev=281375&r1=281374&r2=281375&view=diff
> ============================================================
> ==================
> --- cfe/trunk/include/clang/Basic/Builtins.def (original)
> +++ cfe/trunk/include/clang/Basic/Builtins.def Tue Sep 13 14:26:42 2016
> @@ -74,6 +74,7 @@
> // 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
> @@ -708,6 +709,9 @@ 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)
> @@ -724,6 +728,9 @@ LANGBUILTIN(_InterlockedExchange,
> LANGBUILTIN(_InterlockedExchangePointer, "v*v*D*v*", "n",
> ALL_MS_LANGUAGES)
> LANGBUILTIN(_InterlockedIncrement, "LiLiD*", "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)
>
> Modified: cfe/trunk/include/clang/Basic/Builtins.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/
> clang/Basic/Builtins.h?rev=281375&r1=281374&r2=281375&view=diff
> ============================================================
> ==================
> --- cfe/trunk/include/clang/Basic/Builtins.h (original)
> +++ cfe/trunk/include/clang/Basic/Builtins.h Tue Sep 13 14:26:42 2016
> @@ -139,6 +139,13 @@ 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.
>
> Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/
> clang/Basic/BuiltinsX86.def?rev=281375&r1=281374&r2=281375&view=diff
> ============================================================
> ==================
> --- cfe/trunk/include/clang/Basic/BuiltinsX86.def (original)
> +++ cfe/trunk/include/clang/Basic/BuiltinsX86.def Tue Sep 13 14:26:42 2016
> @@ -23,6 +23,10 @@
> # 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.
> @@ -301,7 +305,9 @@ TARGET_BUILTIN(__builtin_ia32_pabsw128,
> 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")
> @@ -310,6 +316,7 @@ TARGET_BUILTIN(__builtin_ia32_storehps,
> 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")
> @@ -337,9 +344,13 @@ TARGET_BUILTIN(__builtin_ia32_cvtsd2ss,
> 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")
> @@ -894,6 +905,7 @@ TARGET_BUILTIN(__builtin_ia32_xtest, "i"
>
> 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")
> @@ -2059,3 +2071,4 @@ TARGET_BUILTIN(__builtin_ia32_mwaitx, "v
>
> #undef BUILTIN
> #undef TARGET_BUILTIN
> +#undef TARGET_HEADER_BUILTIN
>
> Modified: cfe/trunk/lib/Basic/Targets.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/
> Targets.cpp?rev=281375&r1=281374&r2=281375&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/Basic/Targets.cpp (original)
> +++ cfe/trunk/lib/Basic/Targets.cpp Tue Sep 13 14:26:42 2016
> @@ -2303,6 +2303,8 @@ 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"
> };
>
>
> Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/
> CGBuiltin.cpp?rev=281375&r1=281374&r2=281375&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Tue Sep 13 14:26:42 2016
> @@ -681,6 +681,9 @@ RValue CodeGenFunction::EmitBuiltinExpr(
> "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: {
> @@ -6932,6 +6935,25 @@ Value *CodeGenFunction::EmitX86BuiltinEx
> 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:
> @@ -6944,12 +6966,14 @@ Value *CodeGenFunction::EmitX86BuiltinEx
> 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),
>
> Modified: cfe/trunk/lib/Headers/emmintrin.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/
> emmintrin.h?rev=281375&r1=281374&r2=281375&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/Headers/emmintrin.h (original)
> +++ cfe/trunk/lib/Headers/emmintrin.h Tue Sep 13 14:26:42 2016
> @@ -2457,11 +2457,7 @@ _mm_stream_si64(long long *__p, long lon
> /// \param __p
> /// A pointer to the memory location used to identify the cache line
> to be
> /// flushed.
> -static __inline__ void __DEFAULT_FN_ATTRS
> -_mm_clflush(void const *__p)
> -{
> - __builtin_ia32_clflush(__p);
> -}
> +void _mm_clflush(void const *);
>
> /// \brief Forces strong memory ordering (serialization) between load
> /// instructions preceding this instruction and load instructions
> following
> @@ -2472,11 +2468,7 @@ _mm_clflush(void const *__p)
> ///
> /// This intrinsic corresponds to the \c LFENCE instruction.
> ///
> -static __inline__ void __DEFAULT_FN_ATTRS
> -_mm_lfence(void)
> -{
> - __builtin_ia32_lfence();
> -}
> +void _mm_lfence(void);
>
> /// \brief Forces strong memory ordering (serialization) between load and
> store
> /// instructions preceding this instruction and load and store
> instructions
> @@ -2487,11 +2479,7 @@ _mm_lfence(void)
> ///
> /// This intrinsic corresponds to the \c MFENCE instruction.
> ///
> -static __inline__ void __DEFAULT_FN_ATTRS
> -_mm_mfence(void)
> -{
> - __builtin_ia32_mfence();
> -}
> +void _mm_mfence(void);
>
> /// \brief Converts 16-bit signed integers from both 128-bit integer
> vector
> /// operands into 8-bit signed integers, and packs the results into the
> @@ -3213,11 +3201,7 @@ _mm_castsi128_pd(__m128i __a)
> ///
> /// This intrinsic corresponds to the \c PAUSE instruction.
> ///
> -static __inline__ void __DEFAULT_FN_ATTRS
> -_mm_pause(void)
> -{
> - __builtin_ia32_pause();
> -}
> +void _mm_pause(void);
>
> #undef __DEFAULT_FN_ATTRS
>
>
> Modified: cfe/trunk/lib/Headers/ia32intrin.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/
> ia32intrin.h?rev=281375&r1=281374&r2=281375&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/Headers/ia32intrin.h (original)
> +++ cfe/trunk/lib/Headers/ia32intrin.h Tue Sep 13 14:26:42 2016
> @@ -60,12 +60,6 @@ __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) {
>
> Modified: cfe/trunk/lib/Headers/intrin.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/
> intrin.h?rev=281375&r1=281374&r2=281375&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/Headers/intrin.h (original)
> +++ cfe/trunk/lib/Headers/intrin.h Tue Sep 13 14:26:42 2016
> @@ -463,14 +463,6 @@ _BitScanReverse(unsigned long *_Index, u
> *_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;
> @@ -513,11 +505,6 @@ _BitScanReverse64(unsigned long *_Index,
> *_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;
>
> Modified: cfe/trunk/lib/Headers/xmmintrin.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/
> xmmintrin.h?rev=281375&r1=281374&r2=281375&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/Headers/xmmintrin.h (original)
> +++ cfe/trunk/lib/Headers/xmmintrin.h Tue Sep 13 14:26:42 2016
> @@ -2094,11 +2094,7 @@ _mm_stream_ps(float *__p, __m128 __a)
> ///
> /// This intrinsic corresponds to the \c SFENCE instruction.
> ///
> -static __inline__ void __DEFAULT_FN_ATTRS
> -_mm_sfence(void)
> -{
> - __builtin_ia32_sfence();
> -}
> +void _mm_sfence(void);
>
> /// \brief Extracts 16-bit element from a 64-bit vector of [4 x i16] and
> /// returns it, as specified by the immediate integer operand.
> @@ -2408,11 +2404,7 @@ _mm_sad_pu8(__m64 __a, __m64 __b)
> ///
> /// \returns A 32-bit unsigned integer containing the contents of the
> MXCSR
> /// register.
> -static __inline__ unsigned int __DEFAULT_FN_ATTRS
> -_mm_getcsr(void)
> -{
> - return __builtin_ia32_stmxcsr();
> -}
> +unsigned int _mm_getcsr(void);
>
> /// \brief Sets the MXCSR register with the 32-bit unsigned integer
> value. There
> /// are several groups of macros associated with this intrinsic,
> including:
> @@ -2450,11 +2442,7 @@ _mm_getcsr(void)
> ///
> /// \param __i
> /// A 32-bit unsigned integer value to be written to the MXCSR
> register.
> -static __inline__ void __DEFAULT_FN_ATTRS
> -_mm_setcsr(unsigned int __i)
> -{
> - __builtin_ia32_ldmxcsr(__i);
> -}
> +void _mm_setcsr(unsigned int);
>
> /// \brief Selects 4 float values from the 128-bit operands of [4 x
> float], as
> /// specified by the immediate value operand.
>
> Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/
> SemaDecl.cpp?rev=281375&r1=281374&r2=281375&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaDecl.cpp Tue Sep 13 14:26:42 2016
> @@ -1791,7 +1791,9 @@ NamedDecl *Sema::LazilyCreateBuiltin(Ide
> return nullptr;
> }
>
> - if (!ForRedeclaration && Context.BuiltinInfo.isPredefinedLibFunction(ID))
> {
> + if (!ForRedeclaration &&
> + (Context.BuiltinInfo.isPredefinedLibFunction(ID) ||
> + Context.BuiltinInfo.isHeaderDependentFunction(ID))) {
> Diag(Loc, diag::ext_implicit_lib_function_decl)
> << Context.BuiltinInfo.getName(ID) << R;
> if (Context.BuiltinInfo.getHeaderName(ID) &&
>
> Modified: cfe/trunk/test/CodeGen/builtins-x86.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/
> CodeGen/builtins-x86.c?rev=281375&r1=281374&r2=281375&view=diff
> ============================================================
> ==================
> --- cfe/trunk/test/CodeGen/builtins-x86.c (original)
> +++ cfe/trunk/test/CodeGen/builtins-x86.c Tue Sep 13 14:26:42 2016
> @@ -262,7 +262,9 @@ 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);
> @@ -290,6 +292,7 @@ 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
> @@ -304,6 +307,7 @@ 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);
> @@ -339,8 +343,13 @@ 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);
>
> Added: cfe/trunk/test/Sema/implicit-intel-builtin-decl.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/
> implicit-intel-builtin-decl.c?rev=281375&view=auto
> ============================================================
> ==================
> --- cfe/trunk/test/Sema/implicit-intel-builtin-decl.c (added)
> +++ cfe/trunk/test/Sema/implicit-intel-builtin-decl.c Tue Sep 13 14:26:42
> 2016
> @@ -0,0 +1,40 @@
> +// 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();
> +}
>
> Added: cfe/trunk/test/Sema/implicit-ms-builtin-decl.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/
> implicit-ms-builtin-decl.c?rev=281375&view=auto
> ============================================================
> ==================
> --- cfe/trunk/test/Sema/implicit-ms-builtin-decl.c (added)
> +++ cfe/trunk/test/Sema/implicit-ms-builtin-decl.c Tue Sep 13 14:26:42
> 2016
> @@ -0,0 +1,19 @@
> +// 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);
> +}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160913/96127686/attachment-0001.html>
More information about the cfe-commits
mailing list