aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKazu Hirata <kazu@cs.umass.edu>2005-04-23 02:01:53 +0000
committerKazu Hirata <kazu@gcc.gnu.org>2005-04-23 02:01:53 +0000
commit721425b6ada0661975ba11b6b4dfc83421150886 (patch)
tree4d5c798a9511b850de0000a74818df18ef340983 /gcc
parent84d658141e6b1d315b0eba5f19a3c57a7c51fd3f (diff)
downloadgcc-721425b6ada0661975ba11b6b4dfc83421150886.zip
gcc-721425b6ada0661975ba11b6b4dfc83421150886.tar.gz
gcc-721425b6ada0661975ba11b6b4dfc83421150886.tar.bz2
re PR tree-optimization/21088 (VRP passes fold the type of operands of a comparison)
PR tree-optimization/21088 * fold-const.c (fold_unary, fold_binary, fold_ternary): Export. * tree-vrp.c (compare_values): Use fold_binary to compare pointers. Use boolean_type_node as the type of a comparison expression being folded. * tree.h: Add prototypes for fold_unary, fold_binary, fold_ternary. From-SVN: r98600
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/fold-const.c6
-rw-r--r--gcc/tree-vrp.c6
-rw-r--r--gcc/tree.h3
4 files changed, 20 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9bfd962..38cb114 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2005-04-23 Kazu Hirata <kazu@cs.umass.edu>
+
+ PR tree-optimization/21088
+ * fold-const.c (fold_unary, fold_binary, fold_ternary):
+ Export.
+ * tree-vrp.c (compare_values): Use fold_binary to compare
+ pointers. Use boolean_type_node as the type of a comparison
+ expression being folded.
+ * tree.h: Add prototypes for fold_unary, fold_binary,
+ fold_ternary.
+
2005-04-22 Diego Novillo <dnovillo@redhat.com>
* Makefile.in (tree-into-ssa.o): Add dependency on PARAMS_H.
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index af1af33..1327c74 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -6678,7 +6678,7 @@ fold_complex_div (tree type, tree ac, tree bc, enum tree_code code)
OP0. Return the folded expression if folding is successful.
Otherwise, return NULL_TREE. */
-static tree
+tree
fold_unary (enum tree_code code, tree type, tree op0)
{
tree tem;
@@ -7113,7 +7113,7 @@ fold_unary (enum tree_code code, tree type, tree op0)
OP0 and OP1. Return the folded expression if folding is
successful. Otherwise, return NULL_TREE. */
-static tree
+tree
fold_binary (enum tree_code code, tree type, tree op0, tree op1)
{
tree t1 = NULL_TREE;
@@ -9852,7 +9852,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
OP0, OP1, and OP2. Return the folded expression if folding is
successful. Otherwise, return NULL_TREE. */
-static tree
+tree
fold_ternary (enum tree_code code, tree type, tree op0, tree op1, tree op2)
{
tree tem;
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index bb68df6..4a0859e 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -416,17 +416,17 @@ compare_values (tree val1, tree val2)
return 0;
/* If VAL1 is a lower address than VAL2, return -1. */
- t = fold (build2 (LT_EXPR, TREE_TYPE (val1), val1, val2));
+ t = fold_binary (LT_EXPR, boolean_type_node, val1, val2);
if (t == boolean_true_node)
return -1;
/* If VAL1 is a higher address than VAL2, return +1. */
- t = fold (build2 (GT_EXPR, TREE_TYPE (val1), val1, val2));
+ t = fold_binary (GT_EXPR, boolean_type_node, val1, val2);
if (t == boolean_true_node)
return 1;
/* If VAL1 is different than VAL2, return +2. */
- t = fold (build2 (NE_EXPR, TREE_TYPE (val1), val1, val2));
+ t = fold_binary (NE_EXPR, boolean_type_node, val1, val2);
if (t == boolean_true_node)
return 2;
diff --git a/gcc/tree.h b/gcc/tree.h
index ba1e1fd..a6f9e57 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -3511,6 +3511,9 @@ extern void using_eh_for_cleanups (void);
subexpressions are not changed. */
extern tree fold (tree);
+extern tree fold_unary (enum tree_code, tree, tree);
+extern tree fold_binary (enum tree_code, tree, tree, tree);
+extern tree fold_ternary (enum tree_code, tree, tree, tree, tree);
extern tree fold_build1 (enum tree_code, tree, tree);
extern tree fold_build2 (enum tree_code, tree, tree, tree);
extern tree fold_build3 (enum tree_code, tree, tree, tree, tree);