aboutsummaryrefslogtreecommitdiff
path: root/gcc/modulo-sched.c
diff options
context:
space:
mode:
authorKenneth Zadeck <zadeck@naturalbridge.com>2007-06-17 17:51:25 +0000
committerKenneth Zadeck <zadeck@gcc.gnu.org>2007-06-17 17:51:25 +0000
commit5f7055585a583123884ed6b9c2eec1c8f340dbdb (patch)
tree8c2e701b7a7e1d10cc013268235a947410544073 /gcc/modulo-sched.c
parent19caedae314ce20ca4eb9cc7a64432d6fdf850b7 (diff)
downloadgcc-5f7055585a583123884ed6b9c2eec1c8f340dbdb.zip
gcc-5f7055585a583123884ed6b9c2eec1c8f340dbdb.tar.gz
gcc-5f7055585a583123884ed6b9c2eec1c8f340dbdb.tar.bz2
re PR middle-end/32349 (ICE in df_refs_verify with -O2 -fmodulo-sched for spec tests)
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. From-SVN: r125776
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 25cd53a..6664e32 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;
}