On Wed, Dec 7, 2011 at 4:25 PM, Andrew Pinski <pins...@gmail.com> wrote:
> On Wed, Dec 7, 2011 at 4:01 PM, Xinliang David Li <davi...@google.com> wrote:
>> Build the test case in the patch file with -finstrument-functions, the
>> link will fail with unsat. The problem is gcc instruments the
>> artificial wrappers that will won't be emitted. The patch fixes the
>> problem. Bootstrap and tested on x86-64/linux.
>>
>
> I think you really should be checking for artificial attribute and not
> looking at always_inline.

Interesting -- I thought I added that. The following is the revised one.

thanks,

David

>
> Thanks,
> Andrew Pinski
Index: gimplify.c
===================================================================
--- gimplify.c	(revision 182083)
+++ gimplify.c	(working copy)
@@ -8048,6 +8048,13 @@ flag_instrument_functions_exclude_p (tre
 	  return true;
     }
 
+    /* Avoid instrumenting wrapper functions to builtins.  */
+
+    if (DECL_ARTIFICIAL (fndecl)
+        && DECL_DISREGARD_INLINE_LIMITS (fndecl)
+        && lookup_attribute ("always_inline", DECL_ATTRIBUTES (fndecl)))
+      return true;
+
   return false;
 }
 
Index: testsuite/gcc.target/i386/instrument-func.c
===================================================================
--- testsuite/gcc.target/i386/instrument-func.c	(revision 0)
+++ testsuite/gcc.target/i386/instrument-func.c	(revision 0)
@@ -0,0 +1,18 @@
+/* { dg-do run } */
+/* { dg-require-effective-target sse } */
+/* { dg-options "-O2  -msse -finstrument-functions" } */
+
+#include <xmmintrin.h>
+
+__attribute__((noinline)) __m128 foo( float *row, int x)
+{
+  __m128 vals = _mm_loadu_ps(row + x);
+  return vals;
+}
+
+int main()
+{
+  float f[10];
+  foo(f, 5);
+  return 0;
+}

Reply via email to