Message ID | 20170718202446.GA25162@ibm-tiger.the-meissners.org |
---|---|
State | New |
Headers | show |
On Tue, Jul 18, 2017 at 04:24:47PM -0400, Michael Meissner wrote: > This patch modifies the change I made on July 12th. It modifies the test for > the __builtin_cpu_is and __builtin_cpu_supports built-in functions to use an > #ifdef instead of target-requires for doing the tests. One motavation is to > make the back port to GCC 6/7 easier, as I won't have to back port the change > to add the target option ppc_cpu_supports_hw. > > I've checked the trunk with compilers built with a new GLIBC and without, and > it passes both compilers. I also checked the back port to GCC 6/7 and both > work fine as well. > > Can I check this patch into the trunk and backports to GCC 6 and 7? You will only do this for the tests of __builtin_cpu_* itself? Okay (for all branches) in that case. Segher > 2017-07-18 Michael Meissner <meissner@linux.vnet.ibm.com> > > PR target/81193 > * gcc.target/powerpc/cpu-builtin-1.c: Change test to use #ifdef > __BUILTIN_CPU_SUPPORTS to see if the GLIBC is new enough that > __builtin_cpu_is and __builtin_cpu_supports are supported.
On Wed, Jul 19, 2017 at 12:33:03PM -0500, Segher Boessenkool wrote: > On Tue, Jul 18, 2017 at 04:24:47PM -0400, Michael Meissner wrote: > > This patch modifies the change I made on July 12th. It modifies the test for > > the __builtin_cpu_is and __builtin_cpu_supports built-in functions to use an > > #ifdef instead of target-requires for doing the tests. One motavation is to > > make the back port to GCC 6/7 easier, as I won't have to back port the change > > to add the target option ppc_cpu_supports_hw. > > > > I've checked the trunk with compilers built with a new GLIBC and without, and > > it passes both compilers. I also checked the back port to GCC 6/7 and both > > work fine as well. > > > > Can I check this patch into the trunk and backports to GCC 6 and 7? > > You will only do this for the tests of __builtin_cpu_* itself? Okay > (for all branches) in that case. Yes, I'm only changing the one test that is in the GCC 7/6 branches. The other tests that use the __builtin_cpu_supports built-in (the bmi* tests) will continue to use the target supports method.
Index: gcc/testsuite/gcc.target/powerpc/cpu-builtin-1.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/cpu-builtin-1.c (revision 250316) +++ gcc/testsuite/gcc.target/powerpc/cpu-builtin-1.c (working copy) @@ -1,10 +1,14 @@ /* { dg-do compile { target { powerpc*-*-* } } } */ /* { dg-skip-if "" { powerpc*-*-darwin* } } */ -/* { dg-require-effective-target ppc_cpu_supports_hw } */ void use_cpu_is_builtins (unsigned int *p) { + /* If GCC was configured to use an old GLIBC (before 2.23), the + __builtin_cpu_is and __builtin_cpu_supports built-in functions return 0, + and the compiler issues a warning that you need a newer glibc to use them. + Use #ifdef to avoid the warning. */ +#ifdef __BUILTIN_CPU_SUPPORTS__ p[0] = __builtin_cpu_is ("power9"); p[1] = __builtin_cpu_is ("power8"); p[2] = __builtin_cpu_is ("power7"); @@ -20,11 +24,15 @@ use_cpu_is_builtins (unsigned int *p) p[12] = __builtin_cpu_is ("ppc440"); p[13] = __builtin_cpu_is ("ppc405"); p[14] = __builtin_cpu_is ("ppc-cell-be"); +#else + p[0] = 0; +#endif } void use_cpu_supports_builtins (unsigned int *p) { +#ifdef __BUILTIN_CPU_SUPPORTS__ p[0] = __builtin_cpu_supports ("4xxmac"); p[1] = __builtin_cpu_supports ("altivec"); p[2] = __builtin_cpu_supports ("arch_2_05"); @@ -63,4 +71,7 @@ use_cpu_supports_builtins (unsigned int p[35] = __builtin_cpu_supports ("ucache"); p[36] = __builtin_cpu_supports ("vcrypto"); p[37] = __builtin_cpu_supports ("vsx"); +#else + p[0] = 0; +#endif }