tree.c (tree_fold_gcd): Delete.
* tree.c (tree_fold_gcd): Delete. * tree.h (tree_fold_gcd): Remove prototype. * tree-data-ref.c (tree_fold_divides_p): Don't use tree_fold_gcd to test whether one constant integer is a multiple of another. Instead call int_const_binop with TRUNC_MOD_EXPR and test for a zero result. * fold-const.c (multiple_of_p): We've determined both TOP and BOTTOM are integer constants so we can call int_const_binop directly instead of the more generic const_binop. From-SVN: r121253
This commit is contained in:
parent
74890d7bbd
commit
b73a605656
@ -1,3 +1,14 @@
|
|||||||
|
2007-01-27 Roger Sayle <roger@eyesopen.com>
|
||||||
|
|
||||||
|
* tree.c (tree_fold_gcd): Delete.
|
||||||
|
* tree.h (tree_fold_gcd): Remove prototype.
|
||||||
|
* tree-data-ref.c (tree_fold_divides_p): Don't use tree_fold_gcd to
|
||||||
|
test whether one constant integer is a multiple of another. Instead
|
||||||
|
call int_const_binop with TRUNC_MOD_EXPR and test for a zero result.
|
||||||
|
* fold-const.c (multiple_of_p): We've determined both TOP and
|
||||||
|
BOTTOM are integer constants so we can call int_const_binop directly
|
||||||
|
instead of the more generic const_binop.
|
||||||
|
|
||||||
2007-01-27 Roger Sayle <roger@eyesopen.com>
|
2007-01-27 Roger Sayle <roger@eyesopen.com>
|
||||||
|
|
||||||
* fold-const.c (size_binop): In the fast-paths for X+0, 0+X, X-0 and
|
* fold-const.c (size_binop): In the fast-paths for X+0, 0+X, X-0 and
|
||||||
|
@ -12527,7 +12527,7 @@ multiple_of_p (tree type, tree top, tree bottom)
|
|||||||
&& (tree_int_cst_sgn (top) < 0
|
&& (tree_int_cst_sgn (top) < 0
|
||||||
|| tree_int_cst_sgn (bottom) < 0)))
|
|| tree_int_cst_sgn (bottom) < 0)))
|
||||||
return 0;
|
return 0;
|
||||||
return integer_zerop (const_binop (TRUNC_MOD_EXPR,
|
return integer_zerop (int_const_binop (TRUNC_MOD_EXPR,
|
||||||
top, bottom, 0));
|
top, bottom, 0));
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -561,11 +561,11 @@ base_addr_differ_p (struct data_reference *dra,
|
|||||||
/* Returns true iff A divides B. */
|
/* Returns true iff A divides B. */
|
||||||
|
|
||||||
static inline bool
|
static inline bool
|
||||||
tree_fold_divides_p (tree a,
|
tree_fold_divides_p (tree a, tree b)
|
||||||
tree b)
|
|
||||||
{
|
{
|
||||||
/* Determines whether (A == gcd (A, B)). */
|
gcc_assert (TREE_CODE (a) == INTEGER_CST);
|
||||||
return tree_int_cst_equal (a, tree_fold_gcd (a, b));
|
gcc_assert (TREE_CODE (b) == INTEGER_CST);
|
||||||
|
return integer_zerop (int_const_binop (TRUNC_MOD_EXPR, b, a, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Returns true iff A divides B. */
|
/* Returns true iff A divides B. */
|
||||||
|
38
gcc/tree.c
38
gcc/tree.c
@ -7465,44 +7465,6 @@ int_cst_value (tree x)
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Returns the greatest common divisor of A and B, which must be
|
|
||||||
INTEGER_CSTs. */
|
|
||||||
|
|
||||||
tree
|
|
||||||
tree_fold_gcd (tree a, tree b)
|
|
||||||
{
|
|
||||||
tree a_mod_b;
|
|
||||||
tree type = TREE_TYPE (a);
|
|
||||||
|
|
||||||
gcc_assert (TREE_CODE (a) == INTEGER_CST);
|
|
||||||
gcc_assert (TREE_CODE (b) == INTEGER_CST);
|
|
||||||
|
|
||||||
if (integer_zerop (a))
|
|
||||||
return b;
|
|
||||||
|
|
||||||
if (integer_zerop (b))
|
|
||||||
return a;
|
|
||||||
|
|
||||||
if (tree_int_cst_sgn (a) == -1)
|
|
||||||
a = fold_build2 (MULT_EXPR, type, a,
|
|
||||||
build_int_cst (type, -1));
|
|
||||||
|
|
||||||
if (tree_int_cst_sgn (b) == -1)
|
|
||||||
b = fold_build2 (MULT_EXPR, type, b,
|
|
||||||
build_int_cst (type, -1));
|
|
||||||
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
a_mod_b = fold_build2 (FLOOR_MOD_EXPR, type, a, b);
|
|
||||||
|
|
||||||
if (!TREE_INT_CST_LOW (a_mod_b)
|
|
||||||
&& !TREE_INT_CST_HIGH (a_mod_b))
|
|
||||||
return b;
|
|
||||||
|
|
||||||
a = b;
|
|
||||||
b = a_mod_b;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Returns unsigned variant of TYPE. */
|
/* Returns unsigned variant of TYPE. */
|
||||||
|
|
||||||
|
@ -4454,7 +4454,6 @@ extern void build_common_builtin_nodes (void);
|
|||||||
extern tree build_nonstandard_integer_type (unsigned HOST_WIDE_INT, int);
|
extern tree build_nonstandard_integer_type (unsigned HOST_WIDE_INT, int);
|
||||||
extern tree build_range_type (tree, tree, tree);
|
extern tree build_range_type (tree, tree, tree);
|
||||||
extern HOST_WIDE_INT int_cst_value (tree);
|
extern HOST_WIDE_INT int_cst_value (tree);
|
||||||
extern tree tree_fold_gcd (tree, tree);
|
|
||||||
extern tree build_addr (tree, tree);
|
extern tree build_addr (tree, tree);
|
||||||
|
|
||||||
extern bool fields_compatible_p (tree, tree);
|
extern bool fields_compatible_p (tree, tree);
|
||||||
|
Loading…
Reference in New Issue
Block a user