From: Craig Topper Date: Wed, 11 Nov 2015 08:13:33 +0000 (+0000) Subject: [X86] Add 'pause' builtin that's already in llvm and use it instead of inline assembl... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=eceb4b4fd7ea1e54c6e768f14fb1a6ad6d1684fe;p=clang [X86] Add 'pause' builtin that's already in llvm and use it instead of inline assembly to implement _mm_pause. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@252712 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/BuiltinsX86.def b/include/clang/Basic/BuiltinsX86.def index b4c010ed83..cd682f1cf1 100644 --- a/include/clang/Basic/BuiltinsX86.def +++ b/include/clang/Basic/BuiltinsX86.def @@ -336,6 +336,7 @@ TARGET_BUILTIN(__builtin_ia32_cvttps2dq, "V4iV4f", "", "sse2") TARGET_BUILTIN(__builtin_ia32_clflush, "vvC*", "", "sse2") TARGET_BUILTIN(__builtin_ia32_lfence, "v", "", "sse2") TARGET_BUILTIN(__builtin_ia32_mfence, "v", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_pause, "v", "", "sse2") TARGET_BUILTIN(__builtin_ia32_storedqu, "vc*V16c", "", "sse2") TARGET_BUILTIN(__builtin_ia32_pmuludq128, "V2LLiV4iV4i", "", "sse2") TARGET_BUILTIN(__builtin_ia32_psraw128, "V8sV8sV8s", "", "sse2") diff --git a/lib/Headers/emmintrin.h b/lib/Headers/emmintrin.h index 114aa0f351..cfc2c71614 100644 --- a/lib/Headers/emmintrin.h +++ b/lib/Headers/emmintrin.h @@ -1481,7 +1481,7 @@ _mm_castsi128_pd(__m128i __a) static __inline__ void __DEFAULT_FN_ATTRS _mm_pause(void) { - __asm__ volatile ("pause"); + __builtin_ia32_pause(); } #undef __DEFAULT_FN_ATTRS diff --git a/test/CodeGen/sse-builtins.c b/test/CodeGen/sse-builtins.c index fce57b665f..0f964e8055 100644 --- a/test/CodeGen/sse-builtins.c +++ b/test/CodeGen/sse-builtins.c @@ -513,3 +513,9 @@ __m64 test_mm_mul_su32(__m64 __a, __m64 __b) { // CHECK @llvm.x86.mmx.pmulu.dq(x86_mmx %{{.*}}, x86_mmx %{{.*}}) return _mm_mul_su32(__a, __b); } + +void test_mm_pause() { + // CHECK-LABEL: @test_mm_pause + // CHECK @llvm.x86.sse2.pause() + return _mm_pause(); +}