* tree.c (tree_fold_gcd): Delete.
authorsayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 28 Jan 2007 05:04:48 +0000 (05:04 +0000)
committersayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 28 Jan 2007 05:04:48 +0000 (05:04 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121253 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/fold-const.c
gcc/tree-data-ref.c
gcc/tree.c
gcc/tree.h

index 2f0b439..6d3de89 100644 (file)
@@ -1,5 +1,16 @@
 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>
+
        * fold-const.c (size_binop): In the fast-paths for X+0, 0+X, X-0 and
        1*X check that the constant hasn't overflowed, to preserve the
        TREE_OVERFLOW bit.
index b606587..34ff711 100644 (file)
@@ -12527,8 +12527,8 @@ multiple_of_p (tree type, tree top, tree bottom)
              && (tree_int_cst_sgn (top) < 0
                  || tree_int_cst_sgn (bottom) < 0)))
        return 0;
-      return integer_zerop (const_binop (TRUNC_MOD_EXPR,
-                                        top, bottom, 0));
+      return integer_zerop (int_const_binop (TRUNC_MOD_EXPR,
+                                            top, bottom, 0));
 
     default:
       return 0;
index 2da59db..d6201b6 100644 (file)
@@ -561,11 +561,11 @@ base_addr_differ_p (struct data_reference *dra,
 /* Returns true iff A divides B.  */
 
 static inline bool 
-tree_fold_divides_p (tree a, 
-                    tree b)
+tree_fold_divides_p (tree a, tree b)
 {
-  /* Determines whether (A == gcd (A, B)).  */
-  return tree_int_cst_equal (a, tree_fold_gcd (a, b));
+  gcc_assert (TREE_CODE (a) == INTEGER_CST);
+  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.  */
index ea462f0..6824c14 100644 (file)
@@ -7465,44 +7465,6 @@ int_cst_value (tree x)
   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.  */
 
index cbb47cc..ddb7e6a 100644 (file)
@@ -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_range_type (tree, tree, tree);
 extern HOST_WIDE_INT int_cst_value (tree);
-extern tree tree_fold_gcd (tree, tree);
 extern tree build_addr (tree, tree);
 
 extern bool fields_compatible_p (tree, tree);