diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/regrename.c | 11 |
2 files changed, 11 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 760ba37..764216d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2007-09-05 Kenneth Zadeck <zadeck@naturalbridge.com> + + * regrename.c (rerename_optimize): Use deferred rescanning and + insert explicit calls to rescan insns when changed. + 2007-09-05 Jan Hubicka <jh@suse.cz> * optabs.c (libfunc_entry): Change optab to integer. diff --git a/gcc/regrename.c b/gcc/regrename.c index a25319e..a15d675 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)) |