match.pd: Allow associating FLOAT_TYPE_P when flag_associative_math.
authorRichard Biener <rguenther@suse.de>
Fri, 26 Jun 2015 07:50:12 +0000 (07:50 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 26 Jun 2015 07:50:12 +0000 (07:50 +0000)
2015-06-26  Richard Biener  <rguenther@suse.de>

* match.pd: Allow associating FLOAT_TYPE_P when flag_associative_math.

* gfortran.dg/reassoc_3.f90: Adjust.

2015-06-26  Richard Biener  <rguenther@suse.de>

* match.pd: Allow (p +p off1) +p off2 to (p +p (off1 + off2))
irrespective on whether the inner operation has a single use
of both off are constant.

From-SVN: r224995

gcc/ChangeLog
gcc/match.pd
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/reassoc_3.f90

index 92cacd457e5fb9dfe7aefa079e3c270f136188b8..21627b470dbdffebafc0ef0ea41a4775d356c6a0 100644 (file)
@@ -1,3 +1,13 @@
+2015-06-26  Richard Biener  <rguenther@suse.de>
+
+       * match.pd: Allow associating FLOAT_TYPE_P when flag_associative_math.
+
+2015-06-26  Richard Biener  <rguenther@suse.de>
+
+       * match.pd: Allow (p +p off1) +p off2 to (p +p (off1 + off2))
+       irrespective on whether the inner operation has a single use
+       of both off are constant.
+
 2015-06-26  Uros Bizjak  <ubizjak@gmail.com>
            Segher Boessenkool  <segher@kernel.crashing.org>
 
index 292ce6d75c690347a08a810aa91370de881ca467..b1a882726184c9f3da9afc460f07a32b024c92ce 100644 (file)
@@ -503,7 +503,8 @@ along with GCC; see the file COPYING3.  If not see
 /* Associate (p +p off1) +p off2 as (p +p (off1 + off2)).  */
 (simplify
   (pointer_plus (pointer_plus@2 @0 @1) @3)
-  (if (single_use (@2))
+  (if (single_use (@2)
+       || (TREE_CODE (@1) == INTEGER_CST && TREE_CODE (@3) == INTEGER_CST))
    (pointer_plus @0 (plus @1 @3))))
 
 /* Pattern match
@@ -561,9 +562,10 @@ along with GCC; see the file COPYING3.  If not see
        && !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.  */
index 74462f9539bca6cfa5e789b032433ccf8a0ffae0..bccda4a31dfd1f50253b5183c1b50e08fe5765a1 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-26  Richard Biener  <rguenther@suse.de>
+
+       * gfortran.dg/reassoc_3.f90: Adjust.
+
 2015-06-26  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/66412
index 7331b0cd8e0a877ca0fa31e3cc745c113c47511f..ac2f6aacf0820a4a6120d0c6832773bea748c7a6 100644 (file)
@@ -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" } }