diff options
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/tree-phinodes.c | 16 | ||||
-rw-r--r-- | gcc/tree-ssa-operands.c | 9 |
3 files changed, 25 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 902857b933f..8f29f82529c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2006-05-02 Andrew MacLeod <amacleod@redhat.com> + + PR tree-optimization/27381 + * tree-phinodes.c (remove_phi_arg_num): When moving a phi argument, + maintain the same immediate_use links. + * tree-ssa-operands.c (dump_immediate_uses_for): Show iteration marker + node rather than segfaulting. + 2006-05-03 Jakub Jelinek <jakub@redhat.com> PR fortran/27395 diff --git a/gcc/tree-phinodes.c b/gcc/tree-phinodes.c index 75e76308470..5e85aea64e4 100644 --- a/gcc/tree-phinodes.c +++ b/gcc/tree-phinodes.c @@ -406,14 +406,20 @@ remove_phi_arg_num (tree phi, int i) gcc_assert (i < num_elem); - /* Delink the last item, which is being removed. */ - delink_imm_use (&(PHI_ARG_IMM_USE_NODE (phi, num_elem - 1))); - /* If we are not at the last element, switch the last element - with the element we want to delete. */ + /* Delink the item which is being removed. */ + delink_imm_use (&(PHI_ARG_IMM_USE_NODE (phi, i))); + + /* If it is not the last element, move the last element + to the element we want to delete, resetting all the links. */ if (i != num_elem - 1) { - SET_PHI_ARG_DEF (phi, i, PHI_ARG_DEF (phi, num_elem - 1)); + use_operand_p old_p, new_p; + old_p = &PHI_ARG_IMM_USE_NODE (phi, num_elem - 1); + new_p = &PHI_ARG_IMM_USE_NODE (phi, i); + /* Set use on new node, and link into last elements's place. */ + *(new_p->use) = *(old_p->use); + relink_imm_use (new_p, old_p); } /* Shrink the vector and return. Note that we do not have to clear diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c index 68613fe9564..3cd8c45aaf1 100644 --- a/gcc/tree-ssa-operands.c +++ b/gcc/tree-ssa-operands.c @@ -2513,10 +2513,13 @@ dump_immediate_uses_for (FILE *file, tree var) FOR_EACH_IMM_USE_FAST (use_p, iter, var) { - if (!is_gimple_reg (USE_FROM_PTR (use_p))) - print_generic_stmt (file, USE_STMT (use_p), TDF_VOPS); + if (use_p->stmt == NULL && use_p->use == NULL) + fprintf (file, "***end of stmt iterator marker***\n"); else - print_generic_stmt (file, USE_STMT (use_p), TDF_SLIM); + if (!is_gimple_reg (USE_FROM_PTR (use_p))) + print_generic_stmt (file, USE_STMT (use_p), TDF_VOPS); + else + print_generic_stmt (file, USE_STMT (use_p), TDF_SLIM); } fprintf(file, "\n"); } |