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

Reply via email to