This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: User directed Function Multiversioning via Function Overloading (issue5752064)


On Tue, May 1, 2012 at 4:51 PM, Sriraman Tallam <tmsriram@google.com> wrote:
> Hi,
>
> New patch attached, updated test case and fixed bugs related to
> __PRETTY_FUNCTION_.
>
> Patch also available for review here: ?http://codereview.appspot.com/5752064

@@ -0,0 +1,39 @@
+/* Simple test case to check if Multiversioning works.  */
+/* { dg-do run } */
+/* { dg-options "-O2 -fPIC" } */
+
+#include <assert.h>
+
+int foo ();
+int foo () __attribute__ ((target("arch=corei7,sse4.2,popcnt")));
+/* The target operands in this declaration and the definition are re-ordered.
+   This should still work.  */
+int foo () __attribute__ ((target("ssse3,avx2")));
+
+int (*p)() = &foo;
+int main ()
+{
+  return foo () + (*p)();
+}
+
+int foo ()
+{
+  return 0;
+}
+
+int __attribute__ ((target("arch=corei7,sse4.2,popcnt")))
+foo ()
+{
+  assert (__builtin_cpu_is ("corei7")
+	  && __builtin_cpu_supports ("sse4.2")
+	  && __builtin_cpu_supports ("popcnt"));
+  return 0;
+}
+
+int __attribute__ ((target("avx2,ssse3")))
+foo ()
+{
+  assert (__builtin_cpu_supports ("avx2")
+	  && __builtin_cpu_supports ("ssse3"));
+  return 0;
+}

This test will pass if

int foo ()
{
 return 0;
}

is selected on processors with AVX.  The run-time test should
check that the right function is selected on the target processor,
not the selected function matches the target attribute. You can
do it by returning different values for each foo and call cpuid
to check if the right foo is selected.

You should add a testcase for __builtin_cpu_supports to check
all valid arguments.

-- 
H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]