This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[tuples] fix thinkos in forwprop
- From: Aldy Hernandez <aldyh at redhat dot com>
- To: dnovillo at google dot com, gcc-patches at gcc dot gnu dot org
- Date: Mon, 30 Jun 2008 14:09:08 -0400
- Subject: [tuples] fix thinkos in forwprop
This fixes a handful of regressions caused by enabling forwprop.
Committed to branch.
* tree-ssa-forwprop.c: Remove obsolete comment.
(get_prop_source_stmt): Wrap call to gimple_assign_lhs with a
TREE_TYPE.
(forward_propagate_comparison): Use build2 instead of
fold_binary.
Index: tree-ssa-forwprop.c
===================================================================
--- tree-ssa-forwprop.c (revision 137150)
+++ tree-ssa-forwprop.c (working copy)
@@ -40,11 +40,6 @@ along with GCC; see the file COPYING3.
form of tree combination. It is hoped all of this can disappear
when we have a generalized tree combiner.
- Note carefully that after propagation the resulting statement
- must still be a proper gimple statement. Right now we simply
- only perform propagations we know will result in valid gimple
- code. One day we'll want to generalize this code.
-
One class of common cases we handle is forward propagating a single use
variable into a COND_EXPR.
@@ -239,7 +234,7 @@ get_prop_source_stmt (tree name, bool si
rhs = gimple_assign_rhs1 (def_stmt);
if (IS_CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (def_stmt))
&& TREE_CODE (rhs) == SSA_NAME
- && POINTER_TYPE_P (gimple_assign_lhs (def_stmt))
+ && POINTER_TYPE_P (TREE_TYPE (gimple_assign_lhs (def_stmt)))
&& POINTER_TYPE_P (TREE_TYPE (rhs)))
name = rhs;
else
@@ -970,13 +965,14 @@ forward_propagate_comparison (gimple stm
{
enum tree_code code = gimple_assign_rhs_code (use_stmt);
tree cst = gimple_assign_rhs2 (use_stmt);
+ tree cond;
+
+ cond = build2 (gimple_assign_rhs_code (stmt),
+ TREE_TYPE (cst),
+ gimple_assign_rhs1 (stmt),
+ gimple_assign_rhs2 (stmt));
- tmp = combine_cond_expr_cond (code, TREE_TYPE (lhs),
- fold_binary (code,
- TREE_TYPE (cst),
- gimple_assign_rhs1 (stmt),
- gimple_assign_rhs2 (stmt)),
- cst, false);
+ tmp = combine_cond_expr_cond (code, TREE_TYPE (lhs), cond, cst, false);
if (tmp == NULL_TREE)
return false;
}