aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDaniel Berlin <dberlin@dberlin.org>2004-06-17 02:46:43 +0000
committerDaniel Berlin <dberlin@gcc.gnu.org>2004-06-17 02:46:43 +0000
commitf44272eef7d8d7945fd038db1b1c383ffad24ba7 (patch)
treefa84e161bef2c2a8adeb31d65e9134b4edb13980 /gcc
parent5882f0f31a400e94182c921c39fb4ddd9781517e (diff)
downloadgcc-f44272eef7d8d7945fd038db1b1c383ffad24ba7.zip
gcc-f44272eef7d8d7945fd038db1b1c383ffad24ba7.tar.gz
gcc-f44272eef7d8d7945fd038db1b1c383ffad24ba7.tar.bz2
tree-ssa-pre.c (compute_avail): Value number uses as well.
2004-06-16 Daniel Berlin <dberlin@dberlin.org> * tree-ssa-pre.c (compute_avail): Value number uses as well. Strip useless type conversions. Casts have to be treated slightly different than normal unaries. From-SVN: r83283
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-ssa-pre.c37
2 files changed, 41 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6263dbd..4444967 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2004-06-16 Daniel Berlin <dberlin@dberlin.org>
+
+ * tree-ssa-pre.c (compute_avail): Value number uses as well.
+ Strip useless type conversions.
+ Casts have to be treated slightly different than normal unaries.
+
2004-06-16 Richard Henderson <rth@redhat.com>
* c-common.def (COMPOUND_STMT): Remove.
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index 3d4371e..fe7738c 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -1637,6 +1637,16 @@ compute_avail (basic_block block)
insert_into_set (TMP_GEN (block), def);
value_insert_into_set (AVAIL_OUT (block), def);
}
+ for (j = 0; j < NUM_USES (STMT_USE_OPS (stmt)); j++)
+ {
+ tree use = USE_OP (STMT_USE_OPS (stmt), j);
+ if (TREE_CODE (use) == SSA_NAME)
+ {
+ lookup_or_add (value_table, use);
+ insert_into_set (TMP_GEN (block), use);
+ value_insert_into_set (AVAIL_OUT (block), use);
+ }
+ }
continue;
}
else if (TREE_CODE (stmt) == RETURN_EXPR
@@ -1652,6 +1662,7 @@ compute_avail (basic_block block)
if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (op0))
continue;
op1 = TREE_OPERAND (stmt, 1);
+ STRIP_USELESS_TYPE_CONVERSION (op1);
if (TREE_CODE_CLASS (TREE_CODE (op1)) == 'c')
{
add (value_table, op0, lookup_or_add (value_table, op1));
@@ -1682,7 +1693,8 @@ compute_avail (basic_block block)
insert_into_set (TMP_GEN (block), op0);
value_insert_into_set (AVAIL_OUT (block), op0);
}
- else if (TREE_CODE_CLASS (TREE_CODE (op1)) == '1')
+ else if (TREE_CODE_CLASS (TREE_CODE (op1)) == '1'
+ && !is_gimple_cast (op1))
{
tree uop;
tree val, val1;
@@ -1718,7 +1730,18 @@ compute_avail (basic_block block)
lookup_or_add (value_table, def);
insert_into_set (TMP_GEN (block), def);
value_insert_into_set (AVAIL_OUT (block), def);
- value_insert_into_set (AVAIL_OUT (block), op0);
+ if (def != op0)
+ abort ();
+ }
+ for (j = 0; j < NUM_USES (STMT_USE_OPS (stmt)); j++)
+ {
+ tree use = USE_OP (STMT_USE_OPS (stmt), j);
+ if (TREE_CODE (use) == SSA_NAME)
+ {
+ lookup_or_add (value_table, use);
+ insert_into_set (TMP_GEN (block), use);
+ value_insert_into_set (AVAIL_OUT (block), use);
+ }
}
}
}
@@ -1732,6 +1755,16 @@ compute_avail (basic_block block)
insert_into_set (TMP_GEN (block), def);
value_insert_into_set (AVAIL_OUT (block), def);
}
+ for (j = 0; j < NUM_USES (STMT_USE_OPS (stmt)); j++)
+ {
+ tree use = USE_OP (STMT_USE_OPS (stmt), j);
+ if (TREE_CODE (use) == SSA_NAME)
+ {
+ lookup_or_add (value_table, use);
+ insert_into_set (TMP_GEN (block), use);
+ value_insert_into_set (AVAIL_OUT (block), use);
+ }
+ }
}
}
}