mirror of git://gcc.gnu.org/git/gcc.git
match.pd: X + X --> X * 2 for integers
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
This commit is contained in:
parent
a84454dc45
commit
6b6aa8d388
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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" } } */
|
||||
|
|
|
|||
|
|
@ -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" } */
|
||||
|
|
|
|||
|
|
@ -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" } } */
|
||||
|
|
|
|||
Loading…
Reference in New Issue