RKSimon created this revision. RKSimon added reviewers: majnemer, echristo, silvas. RKSimon added a subscriber: cfe-commits. RKSimon set the repository for this revision to rL LLVM.
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 Repository: rL LLVM http://reviews.llvm.org/D11338 Files: lib/Headers/prfchwintrin.h test/CodeGen/prefetchw-builtins.c Index: test/CodeGen/prefetchw-builtins.c =================================================================== --- test/CodeGen/prefetchw-builtins.c +++ test/CodeGen/prefetchw-builtins.c @@ -5,8 +5,14 @@ #include <x86intrin.h> -void prefetch_w(void *p) { +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) } + +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) +} Index: lib/Headers/prfchwintrin.h =================================================================== --- lib/Headers/prfchwintrin.h +++ lib/Headers/prfchwintrin.h @@ -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 */);
Index: test/CodeGen/prefetchw-builtins.c =================================================================== --- test/CodeGen/prefetchw-builtins.c +++ test/CodeGen/prefetchw-builtins.c @@ -5,8 +5,14 @@ #include <x86intrin.h> -void prefetch_w(void *p) { +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) } + +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) +} Index: lib/Headers/prfchwintrin.h =================================================================== --- lib/Headers/prfchwintrin.h +++ lib/Headers/prfchwintrin.h @@ -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 */);
_______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits