]> gcc.gnu.org Git - gcc.git/commitdiff
match.pd: X + X --> X * 2 for integers
authorMarc Glisse <marc.glisse@inria.fr>
Tue, 26 Apr 2016 14:02:09 +0000 (16:02 +0200)
committerMarc Glisse <glisse@gcc.gnu.org>
Tue, 26 Apr 2016 14:02:09 +0000 (14:02 +0000)
2016-04-26  Marc Glisse  <marc.glisse@inria.fr>

gcc/
* genmatch.c (write_predicate): Add ATTRIBUTE_UNUSED.
* fold-const.c (fold_binary_loc): Remove 2 transformations
superseded by match.pd.
* match.pd (x+x -> x*2): Generalize to integers.

gcc/testsuite/
* gcc.dg/fold-plusmult.c: Adjust.
* gcc.dg/no-strict-overflow-6.c: Adjust.
* gcc.dg/gomp/loop-1.c: Xfail some tests.

From-SVN: r235444

gcc/ChangeLog
gcc/fold-const.c
gcc/genmatch.c
gcc/match.pd
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/fold-plusmult.c
gcc/testsuite/gcc.dg/gomp/loop-1.c
gcc/testsuite/gcc.dg/no-strict-overflow-6.c

index 5dc4c748b4799fb9fc8b8c5346e952ee1b45bef4..e45f9c95c99310ccc96d795521f0de771bfbc21d 100644 (file)
@@ -1,3 +1,10 @@
+2016-04-26  Marc Glisse  <marc.glisse@inria.fr>
+
+       * genmatch.c (write_predicate): Add ATTRIBUTE_UNUSED.
+       * fold-const.c (fold_binary_loc): Remove 2 transformations
+       superseded by match.pd.
+       * match.pd (x+x -> x*2): Generalize to integers.
+
 2016-04-26  Bernd Schmidt  <bschmidt@redhat.com>
 
        * config/i386/i386.md (operation on memory peephole): Duplicate an
index 9514c71c629d3717765d464dca8c8566d907c97b..1ce66e7d090adf55ebf8d92005def641788fa4b1 100644 (file)
@@ -9956,25 +9956,6 @@ fold_binary_loc (location_t loc,
                                    fold_convert_loc (loc, type,
                                                      negate_expr (op0)), tem);
 
-         /* (A + A) * C -> A * 2 * C  */
-         if (TREE_CODE (arg0) == PLUS_EXPR
-             && TREE_CODE (arg1) == INTEGER_CST
-             && operand_equal_p (TREE_OPERAND (arg0, 0),
-                                 TREE_OPERAND (arg0, 1), 0))
-           return fold_build2_loc (loc, MULT_EXPR, type,
-                               omit_one_operand_loc (loc, type,
-                                                 TREE_OPERAND (arg0, 0),
-                                                 TREE_OPERAND (arg0, 1)),
-                               fold_build2_loc (loc, MULT_EXPR, type,
-                                            build_int_cst (type, 2) , arg1));
-
-         /* ((T) (X /[ex] C)) * C cancels out if the conversion is
-            sign-changing only.  */
-         if (TREE_CODE (arg1) == INTEGER_CST
-             && TREE_CODE (arg0) == EXACT_DIV_EXPR
-             && operand_equal_p (arg1, TREE_OPERAND (arg0, 1), 0))
-           return fold_convert_loc (loc, type, TREE_OPERAND (arg0, 0));
-
          strict_overflow_p = false;
          if (TREE_CODE (arg1) == INTEGER_CST
              && 0 != (tem = extract_muldiv (op0, arg1, code, NULL_TREE,
index ce964fa80be373a58e58204a06d7eff2b09d1709..2b666ddd6f7c790e2f1beda3722391e3eee1e79c 100644 (file)
@@ -3556,7 +3556,7 @@ write_predicate (FILE *f, predicate_id *p, decision_tree &dt, bool gimple)
           "%s%s (tree t%s%s)\n"
           "{\n", gimple ? "gimple_" : "tree_", p->id,
           p->nargs > 0 ? ", tree *res_ops" : "",
-          gimple ? ", tree (*valueize)(tree)" : "");
+          gimple ? ", tree (*valueize)(tree) ATTRIBUTE_UNUSED" : "");
   /* Conveniently make 'type' available.  */
   fprintf_indent (f, 2, "tree type = TREE_TYPE (t);\n");
 
index 08db842989d576b4579c6728b621caed240d8662..5f22b13b69071ea8c05281034e16497ed5284eaa 100644 (file)
@@ -1628,11 +1628,13 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
    (if (!TREE_OVERFLOW (tem) || !flag_trapping_math)
     (minus @0 { tem; })))))
 
-/* Convert x+x into x*2.0.  */
+/* Convert x+x into x*2.  */
 (simplify
  (plus @0 @0)
  (if (SCALAR_FLOAT_TYPE_P (type))
-  (mult @0 { build_real (type, dconst2); })))
+  (mult @0 { build_real (type, dconst2); })
+  (if (INTEGRAL_TYPE_P (type))
+   (mult @0 { build_int_cst (type, 2); }))))
 
 (simplify
  (minus integer_zerop @1)
index 61bbcc50cd621d1f365616b416e2f9672feffedf..2144b1425289ccf35893de0ceaf5b7c0d0a2f7ef 100644 (file)
@@ -1,3 +1,9 @@
+2016-04-26  Marc Glisse  <marc.glisse@inria.fr>
+
+       * gcc.dg/fold-plusmult.c: Adjust.
+       * gcc.dg/no-strict-overflow-6.c: Adjust.
+       * gcc.dg/gomp/loop-1.c: Xfail some tests.
+
 2016-04-26  Bernd Schmidt  <bschmidt@redhat.com>
 
        * gcc.target/i386/avx512bw-vptestmb-1.c: Correct [xyz]mm register
index 1781552081ab9bddb76aac76ab6f5399ff88f281..cd28fa6751b3dddd5ed864144f005dcb9ebd1c68 100644 (file)
@@ -11,4 +11,4 @@ int test2 (int a)
   return (a + a)*2;
 }
 
-/* { dg-final { scan-tree-dump-times "<a> \\\* 4" 2 "original" } } */
+/* { dg-final { scan-tree-dump-times "a \\\* 4" 2 "original" } } */
index 450a1ed9bea84867c9f2133bdae4445c7ea442e3..527d31929231c63990ca09f4d03543d8b48525e8 100644 (file)
@@ -44,14 +44,14 @@ f1 (int x)
   #pragma omp for
   for (i = 5; i <= i; i++) /* { dg-error "invalid controlling predicate|condition expression refers to iteration variable" } */
     ;
-  #pragma omp for /* { dg-error "increment expression refers to iteration variable" } */
-  for (i = 5; i < 16; i += i)
+  #pragma omp for /* { dg-error "increment expression refers to iteration variable" "" { xfail *-*-* } } */
+  for (i = 5; i < 16; i += i) /* { dg-bogus "invalid increment expression" "" { xfail *-*-* } } */
     ;
   #pragma omp for
   for (i = 5; i < 16; i = i + 2 * i) /* { dg-error "invalid increment expression|increment expression refers to iteration variable" } */
     ;
-  #pragma omp for /* { dg-error "increment expression refers to iteration variable" } */
-  for (i = 5; i < 16; i = i + i)
+  #pragma omp for /* { dg-error "increment expression refers to iteration variable" "" { xfail *-*-* } } */
+  for (i = 5; i < 16; i = i + i) /* { dg-bogus "invalid increment expression" "" { xfail *-*-* } } */
     ;
   #pragma omp for
   for (i = 5; i < 16; i = i + bar (i)) /* { dg-error "increment expression refers to iteration variable" } */
@@ -181,14 +181,14 @@ f2 (int x)
   #pragma omp for
   for (int i = 5; i <= i; i++) /* { dg-error "invalid controlling predicate|condition expression refers to iteration variable" } */
     ;
-  #pragma omp for /* { dg-error "increment expression refers to iteration variable" } */
-  for (int i = 5; i < 16; i += i)
+  #pragma omp for /* { dg-error "increment expression refers to iteration variable" "" { xfail *-*-* } } */
+  for (int i = 5; i < 16; i += i) /* { dg-bogus "invalid increment expression" "" { xfail *-*-* } } */
     ;
   #pragma omp for
   for (int i = 5; i < 16; i = i + 2 * i) /* { dg-error "invalid increment expression|increment expression refers to iteration variable" } */
     ;
-  #pragma omp for /* { dg-error "increment expression refers to iteration variable" } */
-  for (int i = 5; i < 16; i = i + i)
+  #pragma omp for /* { dg-error "increment expression refers to iteration variable" "" { xfail *-*-* } } */
+  for (int i = 5; i < 16; i = i + i) /* { dg-bogus "invalid increment expression" "" { xfail *-*-* } } */
     ;
   #pragma omp for
   for (int i = 5; i < 16; i = i + bar (i)) /* { dg-error "increment expression refers to iteration variable" } */
index c69e96895816346ace9372a08a4fff20ede5c56a..0a8811966325d941618d30ce2f1352533656b1b9 100644 (file)
@@ -14,7 +14,7 @@ foo ()
   int i, bits;
   for (i = 1, bits = 1; i > 0; i += i)
     ++bits;
-  return bits;
+  return bits - sizeof(int) * __CHAR_BIT__;
 }
 
-/* { dg-final { scan-tree-dump "return bits" "optimized" } } */
+/* { dg-final { scan-tree-dump "return 0" "optimized" } } */
This page took 0.109862 seconds and 5 git commands to generate.