summaryrefslogtreecommitdiff
path: root/gcc/modulo-sched.c
diff options
context:
space:
mode:
authorzadeck <zadeck@138bc75d-0d04-0410-961f-82ee72b054a4>2007-06-17 17:51:25 +0000
committerzadeck <zadeck@138bc75d-0d04-0410-961f-82ee72b054a4>2007-06-17 17:51:25 +0000
commit73d0c05cb673cb3240bb79cd12a1e55272a705e0 (patch)
tree8c2e701b7a7e1d10cc013268235a947410544073 /gcc/modulo-sched.c
parente563f686a5f9c01c3105a0c466d066235b26c8ef (diff)
downloadgcc-73d0c05cb673cb3240bb79cd12a1e55272a705e0.tar.gz
2007-06-17 Kenneth Zadeck <zadeck@naturalbridge.com>
PR middle-end/32349 * modulo-sched (generate_reg_moves): Added rescan parameter and if this is true, rescan insn being modified. (sms_schedule): Added rescan parameter. (rest_of_handle_sms): Moved freeing of dominance info to before getting out of cfg_layout. 2007-06-17 Kenneth Zadeck <zadeck@naturalbridge.com> * gcc.c-torture/compile/pr32349.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@125776 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/modulo-sched.c')
-rw-r--r--gcc/modulo-sched.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/gcc/modulo-sched.c b/gcc/modulo-sched.c
index 25cd53a7975..6664e321838 100644
--- a/gcc/modulo-sched.c
+++ b/gcc/modulo-sched.c
@@ -426,7 +426,7 @@ calculate_maxii (ddg_ptr g)
ii { 1 if not.
*/
static struct undo_replace_buff_elem *
-generate_reg_moves (partial_schedule_ptr ps)
+generate_reg_moves (partial_schedule_ptr ps, bool rescan)
{
ddg_ptr g = ps->g;
int ii = ps->ii;
@@ -523,6 +523,8 @@ generate_reg_moves (partial_schedule_ptr ps)
}
replace_rtx (g->nodes[i_use].insn, old_reg, new_reg);
+ if (rescan)
+ df_insn_rescan (g->nodes[i_use].insn);
}
prev_reg = new_reg;
@@ -1151,7 +1153,7 @@ sms_schedule (void)
/* Generate the kernel just to be able to measure its cycles. */
permute_partial_schedule (ps, g->closing_branch->first_note);
- reg_move_replaces = generate_reg_moves (ps);
+ reg_move_replaces = generate_reg_moves (ps, false);
/* Get the number of cycles the new kernel expect to execute in. */
new_cycles = kernel_number_of_cycles (BB_HEAD (g->bb), BB_END (g->bb));
@@ -1201,7 +1203,7 @@ sms_schedule (void)
/* The life-info is not valid any more. */
df_set_bb_dirty (g->bb);
- reg_move_replaces = generate_reg_moves (ps);
+ reg_move_replaces = generate_reg_moves (ps, true);
if (dump_file)
print_node_sched_params (dump_file, g->num_nodes);
/* Generate prolog and epilog. */
@@ -2481,8 +2483,8 @@ rest_of_handle_sms (void)
FOR_EACH_BB (bb)
if (bb->next_bb != EXIT_BLOCK_PTR)
bb->aux = bb->next_bb;
- cfg_layout_finalize ();
free_dominance_info (CDI_DOMINATORS);
+ cfg_layout_finalize ();
#endif /* INSN_SCHEDULING */
return 0;
}