On November 6, 2015 3:34:22 PM GMT+01:00, Richard Sandiford <richard.sandif...@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 } */ >