This releases SSA names properly in some places.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.

Richard.

2012-02-10  Richard Guenther  <rguent...@suse.de>

        * tree-nrv.c (tree_nrv): Release VDEFs.
        * tree-sra.c (sra_modify_constructor_assign): Likewise.
        (sra_modify_assign): Likewise.
        * tree-vect-stmts.c (vect_remove_stores): Likewise.
        * tree-vect-loop.c (vect_transform_loop): Likewise.
        * tree-ssa-dom.c (optimize_stmt): Likewise.
        * tree-vect-slp.c (vect_schedule_slp): Likewise.
        * tree-ssa-math-opts.c (execute_cse_sincos): Likewise.

Index: gcc/tree-nrv.c
===================================================================
*** gcc/tree-nrv.c.orig 2012-04-04 14:57:38.000000000 +0200
--- gcc/tree-nrv.c      2012-04-04 15:17:13.331595050 +0200
*************** tree_nrv (void)
*** 244,249 ****
--- 244,250 ----
            {
              unlink_stmt_vdef (stmt);
              gsi_remove (&gsi, true);
+             release_defs (stmt);
            }
          else
            {
Index: gcc/tree-sra.c
===================================================================
*** gcc/tree-sra.c.orig 2012-04-04 14:57:38.000000000 +0200
--- gcc/tree-sra.c      2012-04-04 15:17:13.334595082 +0200
*************** sra_modify_constructor_assign (gimple *s
*** 2821,2826 ****
--- 2821,2827 ----
        {
          unlink_stmt_vdef (*stmt);
          gsi_remove (gsi, true);
+         release_defs (*stmt);
          return SRA_AM_REMOVED;
        }
        else
*************** sra_modify_constructor_assign (gimple *s
*** 2844,2849 ****
--- 2845,2851 ----
        init_subtree_with_zero (acc, gsi, false, loc);
        unlink_stmt_vdef (*stmt);
        gsi_remove (gsi, true);
+       release_defs (*stmt);
        return SRA_AM_REMOVED;
      }
    else
*************** sra_modify_assign (gimple *stmt, gimple_
*** 3094,3099 ****
--- 3096,3102 ----
              gsi_next (gsi);
              unlink_stmt_vdef (*stmt);
              gsi_remove (&orig_gsi, true);
+             release_defs (*stmt);
              sra_stats.deleted++;
              return SRA_AM_REMOVED;
            }
*************** sra_modify_assign (gimple *stmt, gimple_
*** 3114,3119 ****
--- 3117,3123 ----
              gcc_assert (*stmt == gsi_stmt (*gsi));
              unlink_stmt_vdef (*stmt);
              gsi_remove (gsi, true);
+             release_defs (*stmt);
              sra_stats.deleted++;
              return SRA_AM_REMOVED;
            }
Index: gcc/tree-vect-stmts.c
===================================================================
*** gcc/tree-vect-stmts.c.orig  2012-04-04 14:57:38.000000000 +0200
--- gcc/tree-vect-stmts.c       2012-04-04 15:17:13.337595115 +0200
*************** vect_remove_stores (gimple first_stmt)
*** 5653,5659 ****
--- 5653,5661 ----
        next = STMT_VINFO_RELATED_STMT (stmt_info);
        /* Free the attached stmt_vec_info and remove the stmt.  */
        next_si = gsi_for_stmt (next);
+       unlink_stmt_vdef (next);
        gsi_remove (&next_si, true);
+       release_defs (next);
        free_stmt_vec_info (next);
        next = tmp;
      }
Index: gcc/tree-vect-loop.c
===================================================================
*** gcc/tree-vect-loop.c.orig   2012-04-04 14:57:38.000000000 +0200
--- gcc/tree-vect-loop.c        2012-04-04 15:17:13.338595125 +0200
*************** vect_transform_loop (loop_vec_info loop_
*** 5476,5483 ****
              else
                {
                  /* Free the attached stmt_vec_info and remove the stmt.  */
!                 free_stmt_vec_info (gsi_stmt (si));
                  gsi_remove (&si, true);
                  continue;
                }
            }
--- 5476,5486 ----
              else
                {
                  /* Free the attached stmt_vec_info and remove the stmt.  */
!                 gimple store = gsi_stmt (si);
!                 free_stmt_vec_info (store);
!                 unlink_stmt_vdef (store);
                  gsi_remove (&si, true);
+                 release_defs (store);
                  continue;
                }
            }
Index: gcc/tree-ssa-dom.c
===================================================================
*** gcc/tree-ssa-dom.c.orig     2012-04-04 15:02:16.000000000 +0200
--- gcc/tree-ssa-dom.c  2012-04-04 15:17:52.463010484 +0200
*************** optimize_stmt (basic_block bb, gimple_st
*** 2301,2306 ****
--- 2301,2307 ----
                  if (dump_file && (dump_flags & TDF_DETAILS))
                    fprintf (dump_file, "  Flagged to clear EH edges.\n");
                }
+             release_defs (stmt);
              return;
            }
        }
Index: gcc/tree-vect-slp.c
===================================================================
*** gcc/tree-vect-slp.c.orig    2012-04-04 14:57:38.000000000 +0200
--- gcc/tree-vect-slp.c 2012-04-04 15:17:13.341595156 +0200
*************** vect_schedule_slp (loop_vec_info loop_vi
*** 3043,3049 ****
--- 3043,3051 ----
             store = STMT_VINFO_RELATED_STMT (vinfo_for_stmt (store));
            /* Free the attached stmt_vec_info and remove the stmt.  */
            gsi = gsi_for_stmt (store);
+         unlink_stmt_vdef (store);
            gsi_remove (&gsi, true);
+         release_defs (store);
            free_stmt_vec_info (store);
          }
      }
Index: gcc/tree-ssa-math-opts.c
===================================================================
*** gcc/tree-ssa-math-opts.c.orig       2012-04-04 15:03:35.000000000 +0200
--- gcc/tree-ssa-math-opts.c    2012-04-04 15:17:13.342595167 +0200
*************** execute_cse_sincos (void)
*** 1430,1435 ****
--- 1430,1437 ----
                      gimple_set_location (new_stmt, loc);
                      unlink_stmt_vdef (stmt);
                      gsi_replace (&gsi, new_stmt, true);
+                     if (gimple_vdef (stmt))
+                       release_ssa_name (gimple_vdef (stmt));
                    }
                  break;
  
*************** execute_cse_sincos (void)
*** 1450,1455 ****
--- 1452,1459 ----
                      gimple_set_location (new_stmt, loc);
                      unlink_stmt_vdef (stmt);
                      gsi_replace (&gsi, new_stmt, true);
+                     if (gimple_vdef (stmt))
+                       release_ssa_name (gimple_vdef (stmt));
                    }
                  break;
  
*************** execute_cse_sincos (void)
*** 1465,1470 ****
--- 1469,1476 ----
                      gimple_set_location (new_stmt, loc);
                      unlink_stmt_vdef (stmt);
                      gsi_replace (&gsi, new_stmt, true);
+                     if (gimple_vdef (stmt))
+                       release_ssa_name (gimple_vdef (stmt));
                    }
                  break;
  
Index: gcc/tree-eh.c
===================================================================
*** gcc/tree-eh.c.orig  2012-04-04 14:57:38.000000000 +0200
--- gcc/tree-eh.c       2012-04-04 15:17:13.343595178 +0200
*************** sink_clobbers (basic_block bb)
*** 3268,3279 ****
        vdef = gimple_vdef (stmt);
        if (vdef && TREE_CODE (vdef) == SSA_NAME)
        {
          vdef = SSA_NAME_VAR (vdef);
          mark_sym_for_renaming (vdef);
          gimple_set_vdef (stmt, vdef);
          gimple_set_vuse (stmt, vdef);
        }
-       release_defs (stmt);
        gsi_insert_before (&dgsi, stmt, GSI_SAME_STMT);
      }
  
--- 3268,3279 ----
        vdef = gimple_vdef (stmt);
        if (vdef && TREE_CODE (vdef) == SSA_NAME)
        {
+         release_ssa_name (vdef);
          vdef = SSA_NAME_VAR (vdef);
          mark_sym_for_renaming (vdef);
          gimple_set_vdef (stmt, vdef);
          gimple_set_vuse (stmt, vdef);
        }
        gsi_insert_before (&dgsi, stmt, GSI_SAME_STMT);
      }
  
*************** cleanup_empty_eh_move_lp (basic_block bb
*** 3955,3961 ****
  
    /* Delete the RESX that was matched within the empty handler block.  */
    gsi = gsi_last_bb (bb);
!   mark_virtual_ops_for_renaming (gsi_stmt (gsi));
    gsi_remove (&gsi, true);
  
    /* Clean up E_OUT for the fallthru.  */
--- 3955,3961 ----
  
    /* Delete the RESX that was matched within the empty handler block.  */
    gsi = gsi_last_bb (bb);
!   unlink_stmt_vdef (gsi_stmt (gsi));
    gsi_remove (&gsi, true);
  
    /* Clean up E_OUT for the fallthru.  */

Reply via email to