On Thu, 25 Jun 2015, Richard Biener wrote:
>
> This shows up in gcc.dg/tree-ssa/reassoc-13.c where the 'reassoc:'
> case in fold_binary happily handles floats if flag_associative_math.
> Thus here, too.
>
> Bootstrap & regtest ongoing on x86_64-unknown-linux-gnu.
Applied with the additional
* gfortran.dg/reassoc_3.f90: Adjust.
Index: gcc/testsuite/gfortran.dg/reassoc_3.f90
===================================================================
--- gcc/testsuite/gfortran.dg/reassoc_3.f90 (revision 224938)
+++ gcc/testsuite/gfortran.dg/reassoc_3.f90 (working copy)
@@ -14,5 +14,4 @@ function test(a)
end
! { dg-final { scan-tree-dump "b = 5" "original" } }
-! { dg-final { scan-tree-dump "c_. = .a" "optimized" } }
-! { dg-final { scan-tree-dump "return c_.;" "optimized" } }
+! { dg-final { scan-tree-dump-times " = " 1 "optimized" } }
> Richard.
>
> 2015-06-25 Richard Biener <[email protected]>
>
> * match.pd: Allow associating FLOAT_TYPE_P when flag_associative_math.
>
> Index: gcc/match.pd
> ===================================================================
> --- gcc/match.pd (revision 224893)
> +++ gcc/match.pd (working copy)
> @@ -561,9 +578,10 @@ (define_operator_list swapped_tcc_compar
> && !TYPE_OVERFLOW_SANITIZED (type))
> (convert @1)))
>
> - /* We can't reassociate floating-point or fixed-point plus or minus
> - because of saturation to +-Inf. */
> - (if (!FLOAT_TYPE_P (type) && !FIXED_POINT_TYPE_P (type))
> + /* We can't reassociate floating-point unless -fassociative-math
> + or fixed-point plus or minus because of saturation to +-Inf. */
> + (if ((!FLOAT_TYPE_P (type) || flag_associative_math)
> + && !FIXED_POINT_TYPE_P (type))
>
> /* Match patterns that allow contracting a plus-minus pair
> irrespective of overflow issues. */
>
>
--
Richard Biener <[email protected]>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Dilip Upmanyu, Graham
Norton, HRB 21284 (AG Nuernberg)