summaryrefslogtreecommitdiff
path: root/gcc/regrename.c
diff options
context:
space:
mode:
authorzadeck <zadeck@138bc75d-0d04-0410-961f-82ee72b054a4>2007-09-05 13:23:32 +0000
committerzadeck <zadeck@138bc75d-0d04-0410-961f-82ee72b054a4>2007-09-05 13:23:32 +0000
commitb45b55a5bb10842387fc91e2d4adc3872999bfd8 (patch)
tree6e0191f285ef391455b267bddc687c2d26c616ca /gcc/regrename.c
parentfec2d2141d54d2bf1dccfb62292aaa269b66a98e (diff)
downloadgcc-b45b55a5bb10842387fc91e2d4adc3872999bfd8.tar.gz
2007-09-05 Kenneth Zadeck <zadeck@naturalbridge.com>
* regrename.c (rerename_optimize): Use deferred rescanning and insert explicit calls to rescan insns when changed. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@128129 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/regrename.c')
-rw-r--r--gcc/regrename.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/gcc/regrename.c b/gcc/regrename.c
index a25319e2339..a15d675f4c5 100644
--- a/gcc/regrename.c
+++ b/gcc/regrename.c
@@ -184,8 +184,8 @@ regrename_optimize (void)
df_set_flags (DF_LR_RUN_DCE);
df_note_add_problem ();
df_analyze ();
- df_set_flags (DF_NO_INSN_RESCAN);
-
+ df_set_flags (DF_DEFER_INSN_RESCAN);
+
memset (tick, 0, sizeof tick);
gcc_obstack_init (&rename_obstack);
@@ -345,8 +345,6 @@ regrename_optimize (void)
}
obstack_free (&rename_obstack, NULL);
- df_clear_flags (DF_NO_INSN_RESCAN);
- df_insn_rescan_all ();
if (dump_file)
fputc ('\n', dump_file);
@@ -364,6 +362,7 @@ do_replace (struct du_chain *chain, int reg)
if (regno >= FIRST_PSEUDO_REGISTER)
ORIGINAL_REGNO (*chain->loc) = regno;
REG_ATTRS (*chain->loc) = attr;
+ df_insn_rescan (chain->insn);
chain = chain->next_use;
}
}
@@ -815,9 +814,11 @@ build_def_use (basic_block bb)
OP_IN, 0);
for (i = 0; i < recog_data.n_dups; i++)
- *recog_data.dup_loc[i] = old_dups[i];
+ *recog_data.dup_loc[i] = copy_rtx (old_dups[i]);
for (i = 0; i < n_ops; i++)
*recog_data.operand_loc[i] = old_operands[i];
+ if (recog_data.n_dups)
+ df_insn_rescan (insn);
/* Step 2B: Can't rename function call argument registers. */
if (CALL_P (insn) && CALL_INSN_FUNCTION_USAGE (insn))