Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(430)

Unified Diff: gcc/gcc/gimple-iterator.c

Issue 3050029: [gcc] GCC 4.5.0=>4.5.1 (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/nacl-toolchain.git
Patch Set: Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gcc/gcc/ggc-zone.c ('k') | gcc/gcc/gimple-low.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gcc/gcc/gimple-iterator.c
diff --git a/gcc/gcc/gimple-iterator.c b/gcc/gcc/gimple-iterator.c
index a52c83072b44c950eadb5c3ea570702a70cbe1b0..cb911f7b25c19bd588840ea2538b4fec7cb30581 100644
--- a/gcc/gcc/gimple-iterator.c
+++ b/gcc/gcc/gimple-iterator.c
@@ -1,5 +1,5 @@
/* Iterator routines for GIMPLE statements.
- Copyright (C) 2007, 2008 Free Software Foundation, Inc.
+ Copyright (C) 2007, 2008, 2010 Free Software Foundation, Inc.
Contributed by Aldy Hernandez <aldy@quesejoda.com>
This file is part of GCC.
@@ -45,9 +45,9 @@ static void
update_modified_stmts (gimple_seq seq)
{
gimple_stmt_iterator gsi;
-
+
if (!ssa_operands_active ())
- return;
+ return;
for (gsi = gsi_start (seq); !gsi_end_p (gsi); gsi_next (&gsi))
update_stmt_if_modified (gsi_stmt (gsi));
}
@@ -60,7 +60,7 @@ static void
update_bb_for_stmts (gimple_seq_node first, basic_block bb)
{
gimple_seq_node n;
-
+
for (n = first; n; n = n->next)
gimple_set_bb (n->stmt, bb);
}
@@ -358,35 +358,35 @@ gsi_split_seq_before (gimple_stmt_iterator *i)
/* Replace the statement pointed-to by GSI to STMT. If UPDATE_EH_INFO
is true, the exception handling information of the original
- statement is moved to the new statement. */
+ statement is moved to the new statement. Assignments must only be
+ replaced with assignments to the same LHS. */
void
gsi_replace (gimple_stmt_iterator *gsi, gimple stmt, bool update_eh_info)
{
- int eh_region;
gimple orig_stmt = gsi_stmt (*gsi);
if (stmt == orig_stmt)
return;
+ gcc_assert (!gimple_has_lhs (orig_stmt)
+ || gimple_get_lhs (orig_stmt) == gimple_get_lhs (stmt));
+
gimple_set_location (stmt, gimple_location (orig_stmt));
gimple_set_bb (stmt, gsi_bb (*gsi));
/* Preserve EH region information from the original statement, if
requested by the caller. */
if (update_eh_info)
- {
- eh_region = lookup_stmt_eh_region (orig_stmt);
- if (eh_region >= 0)
- {
- remove_stmt_from_eh_region (orig_stmt);
- add_stmt_to_eh_region (stmt, eh_region);
- }
- }
+ maybe_clean_or_replace_eh_stmt (orig_stmt, stmt);
gimple_duplicate_stmt_histograms (cfun, stmt, cfun, orig_stmt);
+
+ /* Free all the data flow information for ORIG_STMT. */
+ gimple_set_bb (orig_stmt, NULL);
gimple_remove_stmt_histograms (cfun, orig_stmt);
delink_stmt_imm_use (orig_stmt);
+
*gsi_stmt_ptr (gsi) = stmt;
gimple_set_modified (stmt, true);
update_modified_stmt (stmt);
@@ -478,6 +478,9 @@ gsi_remove (gimple_stmt_iterator *i, bool remove_permanently)
gimple_seq_node cur, next, prev;
gimple stmt = gsi_stmt (*i);
+ if (gimple_code (stmt) != GIMPLE_PHI)
+ insert_debug_temps_for_defs (i);
+
/* Free all the data flow information for STMT. */
gimple_set_bb (stmt, NULL);
delink_stmt_imm_use (stmt);
@@ -485,7 +488,7 @@ gsi_remove (gimple_stmt_iterator *i, bool remove_permanently)
if (remove_permanently)
{
- remove_stmt_from_eh_region (stmt);
+ remove_stmt_from_eh_lp (stmt);
gimple_remove_stmt_histograms (cfun, stmt);
}
@@ -604,7 +607,7 @@ gsi_insert_seq_on_edge (edge e, gimple_seq seq)
In all cases, the returned *GSI points to the correct location. The
return value is true if insertion should be done after the location,
- or false if it should be done before the location. If new basic block
+ or false if it should be done before the location. If a new basic block
has to be created, it is stored in *NEW_BB. */
static bool
@@ -623,9 +626,9 @@ gimple_find_edge_insert_loc (edge e, gimple_stmt_iterator *gsi,
would have to examine the PHIs to prove that none of them used
the value set by the statement we want to insert on E. That
hardly seems worth the effort. */
-restart:
+ restart:
if (single_pred_p (dest)
- && ! phi_nodes (dest)
+ && gimple_seq_empty_p (phi_nodes (dest))
&& dest != EXIT_BLOCK_PTR)
{
*gsi = gsi_start_bb (dest);
@@ -667,10 +670,13 @@ restart:
if (!stmt_ends_bb_p (tmp))
return true;
- if (gimple_code (tmp) == GIMPLE_RETURN)
- {
- gsi_prev (gsi);
- return true;
+ switch (gimple_code (tmp))
+ {
+ case GIMPLE_RETURN:
+ case GIMPLE_RESX:
+ return false;
+ default:
+ break;
}
}
« no previous file with comments | « gcc/gcc/ggc-zone.c ('k') | gcc/gcc/gimple-low.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698