Message ID | 87io5ftcwh.fsf@e105548-lin.cambridge.arm.com |
---|---|
State | New |
Headers | show |
On November 6, 2015 3:34:22 PM GMT+01:00, Richard Sandiford <richard.sandiford@arm.com> wrote: >At the moment the ECF_* flags for a gimple call to a built-in >function are derived from the function decl, which in turn is >derived from the global command-line options. So if the compiler >is run with -fno-math-errno, we always assume functions don't set >errno, regardless of local optimization options. Similarly if the >compiler is run with -fmath-errno, we always assume functions set >errno. > >This shows up in gcc.dg/lto/20110201-1_0.c, where we compile >the file with -O0 and use -O2 -ffast-math for a specific function. >-O2 -ffast-math is enough for us to convert cabs to sqrt as hoped, >but because of the global -fmath-errno setting, we assume that the >call to sqrt is not pure or const and create vops for it. This makes >it appear to the gimple code that a simple sqrt optab isn't enough. > >Later patches move more decisions about maths functions to gimple >and think that in this case we should use: > > y = sqrt (x); > if (!(x >= 0)) > sqrt (x); // to set errno. > >This is being tracked as PR68235. For now the patch adds >-fno-math-errno to the dg-options for this test. > >Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi. >OK to install? OK. >Thanks, >Richard > >gcc/testsuite/ > PR tree-optimization/68235 > * gcc.dg/lto/20110201-1_0.c: Add -fno-math-errno. > >diff --git a/gcc/testsuite/gcc.dg/lto/20110201-1_0.c >b/gcc/testsuite/gcc.dg/lto/20110201-1_0.c >index 068dddc..2144f07 100644 >--- a/gcc/testsuite/gcc.dg/lto/20110201-1_0.c >+++ b/gcc/testsuite/gcc.dg/lto/20110201-1_0.c >@@ -1,6 +1,6 @@ > /* { dg-lto-do run } */ >-/* { dg-lto-options { { -O0 -flto } } } */ >-/* { dg-lto-options { "-O0 -flto -mfloat-abi=softfp -mfpu=neon-vfpv4" >} { target arm*-*-* } } */ >+/* { dg-lto-options { { -O0 -flto -fno-math-errno } } } */ >+/* { dg-lto-options { "-O0 -flto -fno-math-errno -mfloat-abi=softfp >-mfpu=neon-vfpv4" } { target arm*-*-* } } */ > /* { dg-require-linker-plugin "" } */ > /* { dg-require-effective-target sqrt_insn } */ >
diff --git a/gcc/testsuite/gcc.dg/lto/20110201-1_0.c b/gcc/testsuite/gcc.dg/lto/20110201-1_0.c index 068dddc..2144f07 100644 --- a/gcc/testsuite/gcc.dg/lto/20110201-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20110201-1_0.c @@ -1,6 +1,6 @@ /* { dg-lto-do run } */ -/* { dg-lto-options { { -O0 -flto } } } */ -/* { dg-lto-options { "-O0 -flto -mfloat-abi=softfp -mfpu=neon-vfpv4" } { target arm*-*-* } } */ +/* { dg-lto-options { { -O0 -flto -fno-math-errno } } } */ +/* { dg-lto-options { "-O0 -flto -fno-math-errno -mfloat-abi=softfp -mfpu=neon-vfpv4" } { target arm*-*-* } } */ /* { dg-require-linker-plugin "" } */ /* { dg-require-effective-target sqrt_insn } */