<div dir="ltr">This breaks building Chromium, <a href="https://build.chromium.org/p/chromium.fyi/builders/ClangToTWin64%28dbg%29/builds/7125/steps/compile/logs/stdio">https://build.chromium.org/p/chromium.fyi/builders/ClangToTWin64%28dbg%29/builds/7125/steps/compile/logs/stdio</a><div><br></div><div><div>FAILED: obj/components/webcrypto/webcrypto/aes_gcm.obj </div><div>../../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"</div><div>In file included from ../../components/webcrypto/algorithms/aes_gcm.cc:5:</div><div>In file included from ../../third_party/boringssl/src/include\openssl/evp.h:60:</div><div>In file included from ../../third_party/boringssl/src/include\openssl/base.h:313:</div><div>In file included from C:\b\depot_tools\win_toolchain\vs_files\d5dc33b15d1b2c086f2f6632e2fd15882f80dbd3\win_sdk\bin\..\..\VC\include\memory:6:</div><div>In file included from C:\b\depot_tools\win_toolchain\vs_files\d5dc33b15d1b2c086f2f6632e2fd15882f80dbd3\win_sdk\bin\..\..\VC\include\xmemory:6:</div><div>In file included from C:\b\depot_tools\win_toolchain\vs_files\d5dc33b15d1b2c086f2f6632e2fd15882f80dbd3\win_sdk\bin\..\..\VC\include\xmemory0:1151:</div><div>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:</div><div>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:</div><div>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:</div><div>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</div><div>void _mm_sfence(void);</div><div>     ^</div><div>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</div><div>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</div><div>unsigned int _mm_getcsr(void);</div><div>             ^</div></div><div><br></div><div>It looks like just including memory like in <a href="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">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</a> is enough to repro, so this looks like it probably breaks all users of clang-cl. Please revert.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Sep 13, 2016 at 3:26 PM, Albert Gutowski via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: agutowski<br>
Date: Tue Sep 13 14:26:42 2016<br>
New Revision: 281375<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=281375&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=281375&view=rev</a><br>
Log:<br>
Add some MS aliases for existing intrinsics<br>
<br>
Reviewers: thakis, compnerd, majnemer, rsmith, rnk<br>
<br>
Subscribers: cfe-commits<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D24330" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D24330</a><br>
<br>
Added:<br>
    cfe/trunk/test/Sema/implicit-<wbr>intel-builtin-decl.c<br>
    cfe/trunk/test/Sema/implicit-<wbr>ms-builtin-decl.c<br>
Modified:<br>
    cfe/trunk/include/clang/Basic/<wbr>Builtins.def<br>
    cfe/trunk/include/clang/Basic/<wbr>Builtins.h<br>
    cfe/trunk/include/clang/Basic/<wbr>BuiltinsX86.def<br>
    cfe/trunk/lib/Basic/Targets.<wbr>cpp<br>
    cfe/trunk/lib/CodeGen/<wbr>CGBuiltin.cpp<br>
    cfe/trunk/lib/Headers/<wbr>emmintrin.h<br>
    cfe/trunk/lib/Headers/<wbr>ia32intrin.h<br>
    cfe/trunk/lib/Headers/intrin.h<br>
    cfe/trunk/lib/Headers/<wbr>xmmintrin.h<br>
    cfe/trunk/lib/Sema/SemaDecl.<wbr>cpp<br>
    cfe/trunk/test/CodeGen/<wbr>builtins-x86.c<br>
<br>
Modified: cfe/trunk/include/clang/Basic/<wbr>Builtins.def<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Builtins.def?rev=281375&r1=281374&r2=281375&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/include/<wbr>clang/Basic/Builtins.def?rev=<wbr>281375&r1=281374&r2=281375&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/include/clang/Basic/<wbr>Builtins.def (original)<br>
+++ cfe/trunk/include/clang/Basic/<wbr>Builtins.def Tue Sep 13 14:26:42 2016<br>
@@ -74,6 +74,7 @@<br>
 //  f -> this is a libc/libm function without the '__builtin_' prefix. It can<br>
 //       be followed by ':headername:' to state which header this function<br>
 //       comes from.<br>
+//  h -> this function requires a specific header or an explicit declaration.<br>
 //  i -> this is a runtime library implemented function without the<br>
 //       '__builtin_' prefix. It will be implemented in compiler-rt or libgcc.<br>
 //  p:N: -> this is a printf-like function whose Nth argument is the format<br>
@@ -708,6 +709,9 @@ BUILTIN(__builtin_rindex, "c*cC*i", "Fn"<br>
 // Microsoft builtins.  These are only active with -fms-extensions.<br>
 LANGBUILTIN(_alloca,          "v*z", "n", ALL_MS_LANGUAGES)<br>
 LANGBUILTIN(__assume,         "vb",  "n", ALL_MS_LANGUAGES)<br>
+LIBBUILTIN(_byteswap_ushort, "UsUs",     "fnc", "stdlib.h", ALL_MS_LANGUAGES)<br>
+LIBBUILTIN(_byteswap_ulong,  "ULiULi",   "fnc", "stdlib.h", ALL_MS_LANGUAGES)<br>
+LIBBUILTIN(_byteswap_uint64, "ULLiULLi", "fnc", "stdlib.h", ALL_MS_LANGUAGES)<br>
 LANGBUILTIN(__debugbreak,     "v",   "n", ALL_MS_LANGUAGES)<br>
 LANGBUILTIN(__exception_code, "ULi", "n", ALL_MS_LANGUAGES)<br>
 LANGBUILTIN(_exception_code,  "ULi", "n", ALL_MS_LANGUAGES)<br>
@@ -724,6 +728,9 @@ LANGBUILTIN(_<wbr>InterlockedExchange,<br>
 LANGBUILTIN(_<wbr>InterlockedExchangePointer, "v*v*D*v*",   "n", ALL_MS_LANGUAGES)<br>
 LANGBUILTIN(_<wbr>InterlockedIncrement,       "LiLiD*",     "n", ALL_MS_LANGUAGES)<br>
 LANGBUILTIN(__noop,           "i.",  "n", ALL_MS_LANGUAGES)<br>
+LANGBUILTIN(__popcnt16, "UsUs",     "nc", ALL_MS_LANGUAGES)<br>
+LANGBUILTIN(__popcnt,   "UiUi",     "nc", ALL_MS_LANGUAGES)<br>
+LANGBUILTIN(__popcnt64, "ULLiULLi", "nc", ALL_MS_LANGUAGES)<br>
 LANGBUILTIN(__readfsdword,    "ULiULi", "n", ALL_MS_LANGUAGES)<br>
 LANGBUILTIN(_rotl8,  "UcUcUc",    "n", ALL_MS_LANGUAGES)<br>
 LANGBUILTIN(_rotl16, "UsUsUc",    "n", ALL_MS_LANGUAGES)<br>
<br>
Modified: cfe/trunk/include/clang/Basic/<wbr>Builtins.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Builtins.h?rev=281375&r1=281374&r2=281375&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/include/<wbr>clang/Basic/Builtins.h?rev=<wbr>281375&r1=281374&r2=281375&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/include/clang/Basic/<wbr>Builtins.h (original)<br>
+++ cfe/trunk/include/clang/Basic/<wbr>Builtins.h Tue Sep 13 14:26:42 2016<br>
@@ -139,6 +139,13 @@ public:<br>
     return strchr(getRecord(ID).<wbr>Attributes, 'f') != nullptr;<br>
   }<br>
<br>
+  // \brief Returns true if this builtin requires appropriate header in other<br>
+  // compilers. In Clang it will work even without including it, but we can emit<br>
+  // a warning about missing header.<br>
+  bool isHeaderDependentFunction(<wbr>unsigned ID) const {<br>
+    return strchr(getRecord(ID).<wbr>Attributes, 'h') != nullptr;<br>
+  }<br>
+<br>
   /// \brief Determines whether this builtin is a predefined compiler-rt/libgcc<br>
   /// function, such as "__clear_cache", where we know the signature a<br>
   /// priori.<br>
<br>
Modified: cfe/trunk/include/clang/Basic/<wbr>BuiltinsX86.def<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsX86.def?rev=281375&r1=281374&r2=281375&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/include/<wbr>clang/Basic/BuiltinsX86.def?<wbr>rev=281375&r1=281374&r2=<wbr>281375&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/include/clang/Basic/<wbr>BuiltinsX86.def (original)<br>
+++ cfe/trunk/include/clang/Basic/<wbr>BuiltinsX86.def Tue Sep 13 14:26:42 2016<br>
@@ -23,6 +23,10 @@<br>
 #   define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BUILTIN(ID, TYPE, ATTRS)<br>
 #endif<br>
<br>
+#if defined(BUILTIN) && !defined(TARGET_HEADER_<wbr>BUILTIN)<br>
+#  define TARGET_HEADER_BUILTIN(ID, TYPE, ATTRS, HEADER, LANG, FEATURE) BUILTIN(ID, TYPE, ATTRS)<br>
+#endif<br>
+<br>
 // FIXME: Are these nothrow/const?<br>
<br>
 // Miscellaneous builtin for checking x86 cpu features.<br>
@@ -301,7 +305,9 @@ TARGET_BUILTIN(__builtin_ia32_<wbr>pabsw128,<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>pabsd128, "V4iV4i", "", "ssse3")<br>
<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>ldmxcsr, "vUi", "", "sse")<br>
+TARGET_HEADER_BUILTIN(_mm_<wbr>setcsr, "vUi", "h","xmmintrin.h", ALL_LANGUAGES, "sse")<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>stmxcsr, "Ui", "", "sse")<br>
+TARGET_HEADER_BUILTIN(_mm_<wbr>getcsr, "Ui", "h", "xmmintrin.h", ALL_LANGUAGES, "sse")<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>cvtss2si, "iV4f", "", "sse")<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>cvttss2si, "iV4f", "", "sse")<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>cvtss2si64, "LLiV4f", "", "sse")<br>
@@ -310,6 +316,7 @@ TARGET_BUILTIN(__builtin_ia32_<wbr>storehps,<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>storelps, "vV2i*V4f", "", "sse")<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>movmskps, "iV4f", "", "sse")<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>sfence, "v", "", "sse")<br>
+TARGET_HEADER_BUILTIN(_mm_<wbr>sfence, "v", "h", "xmmintrin.h", ALL_LANGUAGES, "sse")<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>rcpps, "V4fV4f", "", "sse")<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>rcpss, "V4fV4f", "", "sse")<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>rsqrtps, "V4fV4f", "", "sse")<br>
@@ -337,9 +344,13 @@ TARGET_BUILTIN(__builtin_ia32_<wbr>cvtsd2ss,<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>cvtps2dq, "V4iV4f", "", "sse2")<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>cvttps2dq, "V4iV4f", "", "sse2")<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>clflush, "vvC*", "", "sse2")<br>
+TARGET_HEADER_BUILTIN(_mm_<wbr>clflush, "vvC*", "h", "emmintrin.h", ALL_LANGUAGES, "sse2")<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>lfence, "v", "", "sse2")<br>
+TARGET_HEADER_BUILTIN(_mm_<wbr>lfence, "v", "h", "emmintrin.h", ALL_LANGUAGES, "sse2")<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>mfence, "v", "", "sse2")<br>
+TARGET_HEADER_BUILTIN(_mm_<wbr>mfence, "v", "h", "emmintrin.h", ALL_LANGUAGES, "sse2")<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>pause, "v", "", "sse2")<br>
+TARGET_HEADER_BUILTIN(_mm_<wbr>pause, "v", "h", "emmintrin.h", ALL_LANGUAGES, "sse2")<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>pmuludq128, "V2LLiV4iV4i", "", "sse2")<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>psraw128, "V8sV8sV8s", "", "sse2")<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>psrad128, "V4iV4iV4i", "", "sse2")<br>
@@ -894,6 +905,7 @@ TARGET_BUILTIN(__builtin_ia32_<wbr>xtest, "i"<br>
<br>
 BUILTIN(__builtin_ia32_rdpmc, "ULLii", "")<br>
 BUILTIN(__builtin_ia32_rdtsc, "ULLi", "")<br>
+BUILTIN(__rdtsc, "ULLi", "")<br>
 BUILTIN(__builtin_ia32_rdtscp, "ULLiUi*", "")<br>
 // PKU<br>
 TARGET_BUILTIN(__builtin_ia32_<wbr>rdpkru, "Ui", "", "pku")<br>
@@ -2059,3 +2071,4 @@ TARGET_BUILTIN(__builtin_ia32_<wbr>mwaitx, "v<br>
<br>
 #undef BUILTIN<br>
 #undef TARGET_BUILTIN<br>
+#undef TARGET_HEADER_BUILTIN<br>
<br>
Modified: cfe/trunk/lib/Basic/Targets.<wbr>cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=281375&r1=281374&r2=281375&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/lib/Basic/<wbr>Targets.cpp?rev=281375&r1=<wbr>281374&r2=281375&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/Basic/Targets.<wbr>cpp (original)<br>
+++ cfe/trunk/lib/Basic/Targets.<wbr>cpp Tue Sep 13 14:26:42 2016<br>
@@ -2303,6 +2303,8 @@ const Builtin::Info BuiltinInfo[] = {<br>
   { #ID, TYPE, ATTRS, HEADER, ALL_LANGUAGES, nullptr },<br>
 #define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE)                               \<br>
   { #ID, TYPE, ATTRS, nullptr, ALL_LANGUAGES, FEATURE },<br>
+#define TARGET_HEADER_BUILTIN(ID, TYPE, ATTRS, HEADER, LANGS, FEATURE)         \<br>
+  { #ID, TYPE, ATTRS, HEADER, LANGS, FEATURE },<br>
 #include "clang/Basic/BuiltinsX86.def"<br>
 };<br>
<br>
<br>
Modified: cfe/trunk/lib/CodeGen/<wbr>CGBuiltin.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=281375&r1=281374&r2=281375&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/lib/CodeGen/<wbr>CGBuiltin.cpp?rev=281375&r1=<wbr>281374&r2=281375&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/CodeGen/<wbr>CGBuiltin.cpp (original)<br>
+++ cfe/trunk/lib/CodeGen/<wbr>CGBuiltin.cpp Tue Sep 13 14:26:42 2016<br>
@@ -681,6 +681,9 @@ RValue CodeGenFunction::<wbr>EmitBuiltinExpr(<br>
                                      "cast");<br>
     return RValue::get(Result);<br>
   }<br>
+  case Builtin::BI__popcnt16:<br>
+  case Builtin::BI__popcnt:<br>
+  case Builtin::BI__popcnt64:<br>
   case Builtin::BI__builtin_popcount:<br>
   case Builtin::BI__builtin_<wbr>popcountl:<br>
   case Builtin::BI__builtin_<wbr>popcountll: {<br>
@@ -6932,6 +6935,25 @@ Value *CodeGenFunction::<wbr>EmitX86BuiltinEx<br>
     Value *F = CGM.getIntrinsic(Intrinsic::<wbr>prefetch);<br>
     return Builder.CreateCall(F, {Address, RW, Locality, Data});<br>
   }<br>
+  case X86::BI_mm_clflush: {<br>
+    return Builder.CreateCall(CGM.<wbr>getIntrinsic(Intrinsic::x86_<wbr>sse2_clflush),<br>
+                              Ops[0]);<br>
+  }<br>
+  case X86::BI_mm_lfence: {<br>
+    return Builder.CreateCall(CGM.<wbr>getIntrinsic(Intrinsic::x86_<wbr>sse2_lfence));<br>
+  }<br>
+  case X86::BI_mm_mfence: {<br>
+    return Builder.CreateCall(CGM.<wbr>getIntrinsic(Intrinsic::x86_<wbr>sse2_mfence));<br>
+  }<br>
+  case X86::BI_mm_sfence: {<br>
+    return Builder.CreateCall(CGM.<wbr>getIntrinsic(Intrinsic::x86_<wbr>sse_sfence));<br>
+  }<br>
+  case X86::BI_mm_pause: {<br>
+    return Builder.CreateCall(CGM.<wbr>getIntrinsic(Intrinsic::x86_<wbr>sse2_pause));<br>
+  }<br>
+  case X86::BI__rdtsc: {<br>
+    return Builder.CreateCall(CGM.<wbr>getIntrinsic(Intrinsic::x86_<wbr>rdtsc));<br>
+  }<br>
   case X86::BI__builtin_ia32_<wbr>undef128:<br>
   case X86::BI__builtin_ia32_<wbr>undef256:<br>
   case X86::BI__builtin_ia32_<wbr>undef512:<br>
@@ -6944,12 +6966,14 @@ Value *CodeGenFunction::<wbr>EmitX86BuiltinEx<br>
   case X86::BI__builtin_ia32_vec_ext_<wbr>v2si:<br>
     return Builder.CreateExtractElement(<wbr>Ops[0],<br>
                                   llvm::ConstantInt::get(Ops[1]-<wbr>>getType(), 0));<br>
+  case X86::BI_mm_setcsr:<br>
   case X86::BI__builtin_ia32_ldmxcsr: {<br>
     Address Tmp = CreateMemTemp(E->getArg(0)-><wbr>getType());<br>
     Builder.CreateStore(Ops[0], Tmp);<br>
     return Builder.CreateCall(CGM.<wbr>getIntrinsic(Intrinsic::x86_<wbr>sse_ldmxcsr),<br>
                           Builder.CreateBitCast(Tmp.<wbr>getPointer(), Int8PtrTy));<br>
   }<br>
+  case X86::BI_mm_getcsr:<br>
   case X86::BI__builtin_ia32_stmxcsr: {<br>
     Address Tmp = CreateMemTemp(E->getType());<br>
     Builder.CreateCall(CGM.<wbr>getIntrinsic(Intrinsic::x86_<wbr>sse_stmxcsr),<br>
<br>
Modified: cfe/trunk/lib/Headers/<wbr>emmintrin.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/emmintrin.h?rev=281375&r1=281374&r2=281375&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/lib/Headers/<wbr>emmintrin.h?rev=281375&r1=<wbr>281374&r2=281375&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/Headers/<wbr>emmintrin.h (original)<br>
+++ cfe/trunk/lib/Headers/<wbr>emmintrin.h Tue Sep 13 14:26:42 2016<br>
@@ -2457,11 +2457,7 @@ _mm_stream_si64(long long *__p, long lon<br>
 /// \param __p<br>
 ///    A pointer to the memory location used to identify the cache line to be<br>
 ///    flushed.<br>
-static __inline__ void __DEFAULT_FN_ATTRS<br>
-_mm_clflush(void const *__p)<br>
-{<br>
-  __builtin_ia32_clflush(__p);<br>
-}<br>
+void _mm_clflush(void const *);<br>
<br>
 /// \brief Forces strong memory ordering (serialization) between load<br>
 ///    instructions preceding this instruction and load instructions following<br>
@@ -2472,11 +2468,7 @@ _mm_clflush(void const *__p)<br>
 ///<br>
 /// This intrinsic corresponds to the \c LFENCE instruction.<br>
 ///<br>
-static __inline__ void __DEFAULT_FN_ATTRS<br>
-_mm_lfence(void)<br>
-{<br>
-  __builtin_ia32_lfence();<br>
-}<br>
+void _mm_lfence(void);<br>
<br>
 /// \brief Forces strong memory ordering (serialization) between load and store<br>
 ///    instructions preceding this instruction and load and store instructions<br>
@@ -2487,11 +2479,7 @@ _mm_lfence(void)<br>
 ///<br>
 /// This intrinsic corresponds to the \c MFENCE instruction.<br>
 ///<br>
-static __inline__ void __DEFAULT_FN_ATTRS<br>
-_mm_mfence(void)<br>
-{<br>
-  __builtin_ia32_mfence();<br>
-}<br>
+void _mm_mfence(void);<br>
<br>
 /// \brief Converts 16-bit signed integers from both 128-bit integer vector<br>
 ///    operands into 8-bit signed integers, and packs the results into the<br>
@@ -3213,11 +3201,7 @@ _mm_castsi128_pd(__m128i __a)<br>
 ///<br>
 /// This intrinsic corresponds to the \c PAUSE instruction.<br>
 ///<br>
-static __inline__ void __DEFAULT_FN_ATTRS<br>
-_mm_pause(void)<br>
-{<br>
-  __builtin_ia32_pause();<br>
-}<br>
+void _mm_pause(void);<br>
<br>
 #undef __DEFAULT_FN_ATTRS<br>
<br>
<br>
Modified: cfe/trunk/lib/Headers/<wbr>ia32intrin.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/ia32intrin.h?rev=281375&r1=281374&r2=281375&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/lib/Headers/<wbr>ia32intrin.h?rev=281375&r1=<wbr>281374&r2=281375&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/Headers/<wbr>ia32intrin.h (original)<br>
+++ cfe/trunk/lib/Headers/<wbr>ia32intrin.h Tue Sep 13 14:26:42 2016<br>
@@ -60,12 +60,6 @@ __rdpmc(int __A) {<br>
   return __builtin_ia32_rdpmc(__A);<br>
 }<br>
<br>
-/* __rdtsc */<br>
-static __inline__ unsigned long long __attribute__((__always_<wbr>inline__, __nodebug__))<br>
-__rdtsc(void) {<br>
-  return __builtin_ia32_rdtsc();<br>
-}<br>
-<br>
 /* __rdtscp */<br>
 static __inline__ unsigned long long __attribute__((__always_<wbr>inline__, __nodebug__))<br>
 __rdtscp(unsigned int *__A) {<br>
<br>
Modified: cfe/trunk/lib/Headers/intrin.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/intrin.h?rev=281375&r1=281374&r2=281375&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/lib/Headers/<wbr>intrin.h?rev=281375&r1=281374&<wbr>r2=281375&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/Headers/intrin.h (original)<br>
+++ cfe/trunk/lib/Headers/intrin.h Tue Sep 13 14:26:42 2016<br>
@@ -463,14 +463,6 @@ _BitScanReverse(unsigned long *_Index, u<br>
   *_Index = 31 - __builtin_clzl(_Mask);<br>
   return 1;<br>
 }<br>
-static __inline__ unsigned short __DEFAULT_FN_ATTRS<br>
-__popcnt16(unsigned short _Value) {<br>
-  return __builtin_popcount((int)_<wbr>Value);<br>
-}<br>
-static __inline__ unsigned int __DEFAULT_FN_ATTRS<br>
-__popcnt(unsigned int _Value) {<br>
-  return __builtin_popcount(_Value);<br>
-}<br>
 static __inline__ unsigned char __DEFAULT_FN_ATTRS<br>
 _bittest(long const *_BitBase, long _BitPos) {<br>
   return (*_BitBase >> _BitPos) & 1;<br>
@@ -513,11 +505,6 @@ _BitScanReverse64(unsigned long *_Index,<br>
   *_Index = 63 - __builtin_clzll(_Mask);<br>
   return 1;<br>
 }<br>
-static __inline__<br>
-unsigned __int64 __DEFAULT_FN_ATTRS<br>
-__popcnt64(unsigned __int64 _Value) {<br>
-  return __builtin_popcountll(_Value);<br>
-}<br>
 static __inline__ unsigned char __DEFAULT_FN_ATTRS<br>
 _bittest64(__int64 const *_BitBase, __int64 _BitPos) {<br>
   return (*_BitBase >> _BitPos) & 1;<br>
<br>
Modified: cfe/trunk/lib/Headers/<wbr>xmmintrin.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/xmmintrin.h?rev=281375&r1=281374&r2=281375&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/lib/Headers/<wbr>xmmintrin.h?rev=281375&r1=<wbr>281374&r2=281375&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/Headers/<wbr>xmmintrin.h (original)<br>
+++ cfe/trunk/lib/Headers/<wbr>xmmintrin.h Tue Sep 13 14:26:42 2016<br>
@@ -2094,11 +2094,7 @@ _mm_stream_ps(float *__p, __m128 __a)<br>
 ///<br>
 /// This intrinsic corresponds to the \c SFENCE instruction.<br>
 ///<br>
-static __inline__ void __DEFAULT_FN_ATTRS<br>
-_mm_sfence(void)<br>
-{<br>
-  __builtin_ia32_sfence();<br>
-}<br>
+void _mm_sfence(void);<br>
<br>
 /// \brief Extracts 16-bit element from a 64-bit vector of [4 x i16] and<br>
 ///    returns it, as specified by the immediate integer operand.<br>
@@ -2408,11 +2404,7 @@ _mm_sad_pu8(__m64 __a, __m64 __b)<br>
 ///<br>
 /// \returns A 32-bit unsigned integer containing the contents of the MXCSR<br>
 ///    register.<br>
-static __inline__ unsigned int __DEFAULT_FN_ATTRS<br>
-_mm_getcsr(void)<br>
-{<br>
-  return __builtin_ia32_stmxcsr();<br>
-}<br>
+unsigned int _mm_getcsr(void);<br>
<br>
 /// \brief Sets the MXCSR register with the 32-bit unsigned integer value. There<br>
 ///    are several groups of macros associated with this intrinsic, including:<br>
@@ -2450,11 +2442,7 @@ _mm_getcsr(void)<br>
 ///<br>
 /// \param __i<br>
 ///    A 32-bit unsigned integer value to be written to the MXCSR register.<br>
-static __inline__ void __DEFAULT_FN_ATTRS<br>
-_mm_setcsr(unsigned int __i)<br>
-{<br>
-  __builtin_ia32_ldmxcsr(__i);<br>
-}<br>
+void _mm_setcsr(unsigned int);<br>
<br>
 /// \brief Selects 4 float values from the 128-bit operands of [4 x float], as<br>
 ///    specified by the immediate value operand.<br>
<br>
Modified: cfe/trunk/lib/Sema/SemaDecl.<wbr>cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=281375&r1=281374&r2=281375&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/lib/Sema/<wbr>SemaDecl.cpp?rev=281375&r1=<wbr>281374&r2=281375&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/Sema/SemaDecl.<wbr>cpp (original)<br>
+++ cfe/trunk/lib/Sema/SemaDecl.<wbr>cpp Tue Sep 13 14:26:42 2016<br>
@@ -1791,7 +1791,9 @@ NamedDecl *Sema::LazilyCreateBuiltin(Ide<br>
     return nullptr;<br>
   }<br>
<br>
-  if (!ForRedeclaration && Context.BuiltinInfo.<wbr>isPredefinedLibFunction(ID)) {<br>
+  if (!ForRedeclaration &&<br>
+      (Context.BuiltinInfo.<wbr>isPredefinedLibFunction(ID) ||<br>
+       Context.BuiltinInfo.<wbr>isHeaderDependentFunction(ID))<wbr>) {<br>
     Diag(Loc, diag::ext_implicit_lib_<wbr>function_decl)<br>
         << Context.BuiltinInfo.getName(<wbr>ID) << R;<br>
     if (Context.BuiltinInfo.<wbr>getHeaderName(ID) &&<br>
<br>
Modified: cfe/trunk/test/CodeGen/<wbr>builtins-x86.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/builtins-x86.c?rev=281375&r1=281374&r2=281375&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/<wbr>CodeGen/builtins-x86.c?rev=<wbr>281375&r1=281374&r2=281375&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/CodeGen/<wbr>builtins-x86.c (original)<br>
+++ cfe/trunk/test/CodeGen/<wbr>builtins-x86.c Tue Sep 13 14:26:42 2016<br>
@@ -262,7 +262,9 @@ void f0() {<br>
   tmp_i = __builtin_ia32_vec_ext_v2si(<wbr>tmp_V2i, 0);<br>
<br>
   (void) __builtin_ia32_ldmxcsr(tmp_Ui)<wbr>;<br>
+  (void) _mm_setcsr(tmp_Ui);<br>
   tmp_Ui = __builtin_ia32_stmxcsr();<br>
+  tmp_Ui = _mm_getcsr();<br>
   (void)__builtin_ia32_fxsave(<wbr>tmp_vp);<br>
   (void)__builtin_ia32_fxsave64(<wbr>tmp_vp);<br>
   (void)__builtin_ia32_fxrstor(<wbr>tmp_vp);<br>
@@ -290,6 +292,7 @@ void f0() {<br>
   tmp_i = __builtin_ia32_cvttss2si(tmp_<wbr>V4f);<br>
<br>
   tmp_i = __builtin_ia32_rdtsc();<br>
+  tmp_i = __rdtsc();<br>
   tmp_i = __builtin_ia32_rdtscp(&tmp_Ui)<wbr>;<br>
   tmp_LLi = __builtin_ia32_rdpmc(tmp_i);<br>
 #ifdef USE_64<br>
@@ -304,6 +307,7 @@ void f0() {<br>
   tmp_i = __builtin_ia32_pmovmskb(tmp_<wbr>V8c);<br>
   (void) __builtin_ia32_movntq(tmp_<wbr>V1LLip, tmp_V1LLi);<br>
   (void) __builtin_ia32_sfence();<br>
+  (void) _mm_sfence();<br>
<br>
   tmp_V4s = __builtin_ia32_psadbw(tmp_V8c, tmp_V8c);<br>
   tmp_V4f = __builtin_ia32_rcpps(tmp_V4f);<br>
@@ -339,8 +343,13 @@ void f0() {<br>
   tmp_V4i = __builtin_ia32_cvtps2dq(tmp_<wbr>V4f);<br>
   tmp_V4i = __builtin_ia32_cvttps2dq(tmp_<wbr>V4f);<br>
   (void) __builtin_ia32_clflush(tmp_<wbr>vCp);<br>
+  (void) _mm_clflush(tmp_vCp);<br>
   (void) __builtin_ia32_lfence();<br>
+  (void) _mm_lfence();<br>
   (void) __builtin_ia32_mfence();<br>
+  (void) _mm_mfence();<br>
+  (void) __builtin_ia32_pause();<br>
+  (void) _mm_pause();<br>
   tmp_V4s = __builtin_ia32_psllwi(tmp_V4s, tmp_i);<br>
   tmp_V2i = __builtin_ia32_pslldi(tmp_V2i, tmp_i);<br>
   tmp_V1LLi = __builtin_ia32_psllqi(tmp_<wbr>V1LLi, tmp_i);<br>
<br>
Added: cfe/trunk/test/Sema/implicit-<wbr>intel-builtin-decl.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/implicit-intel-builtin-decl.c?rev=281375&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/Sema/<wbr>implicit-intel-builtin-decl.c?<wbr>rev=281375&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/Sema/implicit-<wbr>intel-builtin-decl.c (added)<br>
+++ cfe/trunk/test/Sema/implicit-<wbr>intel-builtin-decl.c Tue Sep 13 14:26:42 2016<br>
@@ -0,0 +1,40 @@<br>
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -target-feature +sse2 -fsyntax-only -verify %s<br>
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -target-feature +sse2 -fsyntax-only -verify %s -x c++<br>
+<br>
+void f() {<br>
+  (void)_mm_getcsr(); // expected-warning{{implicitly declaring library function '_mm_getcsr'}} \<br>
+  // expected-note{{include the header <xmmintrin.h> or explicitly provide a declaration for '_mm_getcsr'}}<br>
+  _mm_setcsr(1); // expected-warning{{implicitly declaring library function '_mm_setcsr'}} \<br>
+  // expected-note{{include the header <xmmintrin.h> or explicitly provide a declaration for '_mm_setcsr'}}<br>
+  _mm_sfence(); // expected-warning{{implicitly declaring library function '_mm_sfence'}} \<br>
+  // expected-note{{include the header <xmmintrin.h> or explicitly provide a declaration for '_mm_sfence'}}<br>
+<br>
+  _mm_clflush((void*)0); // expected-warning{{implicitly declaring library function '_mm_clflush'}} \<br>
+  // expected-note{{include the header <emmintrin.h> or explicitly provide a declaration for '_mm_clflush'}}<br>
+  _mm_lfence(); // expected-warning{{implicitly declaring library function '_mm_lfence'}} \<br>
+  // expected-note{{include the header <emmintrin.h> or explicitly provide a declaration for '_mm_lfence'}}<br>
+  _mm_mfence(); // expected-warning{{implicitly declaring library function '_mm_mfence'}} \<br>
+  // expected-note{{include the header <emmintrin.h> or explicitly provide a declaration for '_mm_mfence'}}<br>
+  _mm_pause(); // expected-warning{{implicitly declaring library function '_mm_pause'}} \<br>
+  // expected-note{{include the header <emmintrin.h> or explicitly provide a declaration for '_mm_pause'}}<br>
+}<br>
+<br>
+unsigned int _mm_getcsr();<br>
+void _mm_setcsr(unsigned int);<br>
+void _mm_sfence();<br>
+<br>
+void _mm_clflush(void const *);<br>
+void _mm_lfence();<br>
+void _mm_mfence();<br>
+void _mm_pause();<br>
+<br>
+void g() {<br>
+  (void)_mm_getcsr();<br>
+  _mm_setcsr(1);<br>
+  _mm_sfence();<br>
+<br>
+  _mm_clflush((void*)0);<br>
+  _mm_lfence();<br>
+  _mm_mfence();<br>
+  _mm_pause();<br>
+}<br>
<br>
Added: cfe/trunk/test/Sema/implicit-<wbr>ms-builtin-decl.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/implicit-ms-builtin-decl.c?rev=281375&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/Sema/<wbr>implicit-ms-builtin-decl.c?<wbr>rev=281375&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/Sema/implicit-<wbr>ms-builtin-decl.c (added)<br>
+++ cfe/trunk/test/Sema/implicit-<wbr>ms-builtin-decl.c Tue Sep 13 14:26:42 2016<br>
@@ -0,0 +1,19 @@<br>
+// RUN: %clang_cc1 -fsyntax-only -verify %s -fms-extensions<br>
+<br>
+void f() {<br>
+  (void)_byteswap_ushort(42); // expected-warning{{implicitly declaring library function '_byteswap_ushort}} \<br>
+  // expected-note{{include the header <stdlib.h> or explicitly provide a declaration for '_byteswap_ushort'}}<br>
+  (void)_byteswap_uint64(42LL); // expected-warning{{implicitly declaring library function '_byteswap_uint64}} \<br>
+  // expected-note{{include the header <stdlib.h> or explicitly provide a declaration for '_byteswap_uint64'}}<br>
+}<br>
+<br>
+void _byteswap_ulong(); // expected-warning{{incompatible redeclaration of library function '_byteswap_ulong'}} \<br>
+// expected-note{{'_byteswap_<wbr>ulong' is a builtin}}<br>
+<br>
+unsigned short _byteswap_ushort(unsigned short);<br>
+unsigned long long _byteswap_uint64(unsigned long long);<br>
+<br>
+void g() {<br>
+  (void)_byteswap_ushort(42);<br>
+  (void)_byteswap_uint64(42LL);<br>
+}<br>
<br>
<br>
______________________________<wbr>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>