diff mbox

[middle-end] : Fix PR78738, unrecognized insn with -ffast-math

Message ID CAFULd4a0WkL6Li5XZ=Pc_5pC2DZDP_GKDN-2W+4gjDu7tMuAyg@mail.gmail.com
State New
Headers show

Commit Message

Uros Bizjak Dec. 8, 2016, 9:44 p.m. UTC
Hello!

Attached patch fixes fall-out from excess-precision improvements
patch. As shown in the PR, the code throughout the compiler assumes
FLAG_PRECISION_FAST when flag_unsafe_math_optimizations flag is in
effect. The patch puts back two lines, removed by excess-precision
improvements patch.

2016-12-08  Uros Bizjak  <ubizjak@gmail.com>

    PR middle-end/78738
    * toplev.c (init_excess_precision): Initialize flag_excess_precision
    to EXCESS_PRECISION_FAST for flag_unsafe_math_optimizations.

testsuite/ChangeLog:

2016-12-08  Uros Bizjak  <ubizjak@gmail.com>

    PR middle-end/78738
    * gcc.target/i386/pr78738.c: New test.

Patch was bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.

OK for mainline?

Uros.

Comments

Richard Biener Dec. 9, 2016, 10:09 a.m. UTC | #1
On Thu, Dec 8, 2016 at 10:44 PM, Uros Bizjak <ubizjak@gmail.com> wrote:
> Hello!
>
> Attached patch fixes fall-out from excess-precision improvements
> patch. As shown in the PR, the code throughout the compiler assumes
> FLAG_PRECISION_FAST when flag_unsafe_math_optimizations flag is in
> effect. The patch puts back two lines, removed by excess-precision
> improvements patch.
>
> 2016-12-08  Uros Bizjak  <ubizjak@gmail.com>
>
>     PR middle-end/78738
>     * toplev.c (init_excess_precision): Initialize flag_excess_precision
>     to EXCESS_PRECISION_FAST for flag_unsafe_math_optimizations.
>
> testsuite/ChangeLog:
>
> 2016-12-08  Uros Bizjak  <ubizjak@gmail.com>
>
>     PR middle-end/78738
>     * gcc.target/i386/pr78738.c: New test.
>
> Patch was bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.
>
> OK for mainline?

Hmm, I think it belongs to set_unsafe_math_optimization_flags instead
(and be consistent if -fexcess-precision was manually specified).

Also where do we assume connection between -funsafe-math-optimizations
and FLAG_PRECISION_FAST?  We have two flags so we should fix any
user that looks at one but means the other.

Richard.

>
> Uros.
diff mbox

Patch

Index: testsuite/gcc.target/i386/pr78738.c
===================================================================
--- testsuite/gcc.target/i386/pr78738.c	(nonexistent)
+++ testsuite/gcc.target/i386/pr78738.c	(working copy)
@@ -0,0 +1,10 @@ 
+/* PR middle-end/78738 */
+/* { dg-do compile } */
+/* { dg-options "-O -std=c99 -ffast-math -mfpmath=387" } */
+
+double round (double);
+
+int foo (double a)
+{
+  return round (a);
+}
Index: toplev.c
===================================================================
--- toplev.c	(revision 243456)
+++ toplev.c	(working copy)
@@ -1691,6 +1691,8 @@  init_excess_precision (void)
 {
   gcc_assert (flag_excess_precision_cmdline != EXCESS_PRECISION_DEFAULT);
   flag_excess_precision = flag_excess_precision_cmdline;
+  if (flag_unsafe_math_optimizations)
+    flag_excess_precision = EXCESS_PRECISION_FAST;
 }
 
 /* Initialize things that are both lang-dependent and target-dependent.