Index: tree-ssa.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/tree-ssa.c,v retrieving revision 2.52 diff -u -p -r2.52 tree-ssa.c --- tree-ssa.c 29 Oct 2004 08:41:08 -0000 2.52 +++ tree-ssa.c 31 Oct 2004 16:33:17 -0000 @@ -1050,6 +1051,25 @@ propagate_into_addr (tree stmt, tree var mark_new_vars_to_rename (stmt, vars_to_rename); } +/* Mark all the variables in V_MAY_DEF or V_MUST_DEF operands for STMT for + renaming. This becomes necessary when we modify all of a non-scalar. */ + +static void +mark_all_v_defs (tree stmt) +{ + tree sym; + ssa_op_iter iter; + + get_stmt_operands (stmt); + + FOR_EACH_SSA_TREE_OPERAND (sym, stmt, iter, SSA_OP_VIRTUAL_DEFS) + { + if (TREE_CODE (sym) == SSA_NAME) + sym = SSA_NAME_VAR (sym); + bitmap_set_bit (vars_to_rename, var_ann (sym)->uid); + } +} + /* Replaces immediate uses of VAR by REPL. */ static void @@ -1123,6 +1143,7 @@ replace_immediate_uses (tree var, tree r if (TREE_CODE (repl) != SSA_NAME) { tree tmp = stmt; + mark_all_v_defs (stmt); fold_stmt (&tmp); if (tmp != stmt) { @@ -1324,7 +1345,8 @@ struct tree_opt_pass pass_redundant_phi 0, /* properties_destroyed */ 0, /* todo_flags_start */ TODO_dump_func | TODO_rename_vars - | TODO_ggc_collect | TODO_verify_ssa, /* todo_flags_finish */ + | TODO_ggc_collect | TODO_verify_ssa + | TODO_fix_def_def_chains, /* todo_flags_finish */ 0 /* letter */ };