On Tue, May 1, 2012 at 4:51 PM, Sriraman Tallam <tmsri...@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.