]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/27381 (ice on valid code with -O)
authorAndrew MacLeod <amacleod@redhat.com>
Wed, 3 May 2006 17:13:37 +0000 (17:13 +0000)
committerAndrew Macleod <amacleod@gcc.gnu.org>
Wed, 3 May 2006 17:13:37 +0000 (17:13 +0000)
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.

From-SVN: r113499

gcc/ChangeLog
gcc/tree-phinodes.c
gcc/tree-ssa-operands.c

index 902857b933f919ec0c9a3089c6ea88f38e6a68dc..8f29f82529cf1bc13459f117123c51e553e7b3a4 100644 (file)
@@ -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
index 75e76308470dc11d8bb6c3465dec612a3a0c1357..5e85aea64e42af48bc2217ab147e0dbd5fb6b787 100644 (file)
@@ -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
index 68613fe9564a195ba63fab2aee4b214585a9a0f3..3cd8c45aaf1d444e38d2cb5971249e98c4e0716a 100644 (file)
@@ -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");
 }