Author: rksimon Date: Mon Jul 27 14:01:52 2015 New Revision: 243305 URL: http://llvm.org/viewvc/llvm-project?rev=243305&view=rev Log: [X86] Add missing _m_prefetch intrinsic
The 3DNOW/PRFCHW cpu targets define both the PREFETCHW (set cache line modified) and PREFETCH (set cache line exclusive) instructions but only the _m_prefetchw (PREFETCHW) intrinsic is included in the header. This patch adds the missing _m_prefetch intrinsic. I'm basing this off AMD documentation - the intel docs on the support for PREFETCHW isn't clear whether Silvermont/Broadwell properly support PREFETCH but given that the intrinsic implementation is a default __builtin_prefetch call, it is safe whatever. Fix for PR23648 Differential Revision: http://reviews.llvm.org/D11338 Modified: cfe/trunk/lib/Headers/prfchwintrin.h cfe/trunk/test/CodeGen/prefetchw-builtins.c Modified: cfe/trunk/lib/Headers/prfchwintrin.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/prfchwintrin.h?rev=243305&r1=243304&r2=243305&view=diff ============================================================================== --- cfe/trunk/lib/Headers/prfchwintrin.h (original) +++ cfe/trunk/lib/Headers/prfchwintrin.h Mon Jul 27 14:01:52 2015 @@ -30,6 +30,12 @@ #if defined(__PRFCHW__) || defined(__3dNOW__) static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_m_prefetch(void *__P) +{ + __builtin_prefetch (__P, 0, 3 /* _MM_HINT_T0 */); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) _m_prefetchw(void *__P) { __builtin_prefetch (__P, 1, 3 /* _MM_HINT_T0 */); Modified: cfe/trunk/test/CodeGen/prefetchw-builtins.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/prefetchw-builtins.c?rev=243305&r1=243304&r2=243305&view=diff ============================================================================== --- cfe/trunk/test/CodeGen/prefetchw-builtins.c (original) +++ cfe/trunk/test/CodeGen/prefetchw-builtins.c Mon Jul 27 14:01:52 2015 @@ -5,8 +5,14 @@ #include <x86intrin.h> -void prefetch_w(void *p) { +void test_m_prefetch(void *p) { + return _m_prefetch(p); + // CHECK-LABEL: define void @test_m_prefetch + // CHECK: call void @llvm.prefetch({{.*}}, i32 0, i32 3, i32 1) +} + +void test_m_prefetch_w(void *p) { return _m_prefetchw(p); -// CHECK: @prefetch_w +// CHECK-LABEL: define void : @test_m_prefetch_w // CHECK: call void @llvm.prefetch({{.*}}, i32 1, i32 3, i32 1) } _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits