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
This commit is contained in:
Kenneth Zadeck 2007-06-17 17:51:25 +00:00 committed by Kenneth Zadeck
parent 19caedae31
commit 5f7055585a
4 changed files with 45 additions and 4 deletions

View File

@ -1,3 +1,12 @@
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 Nathan Sidwell <nathan@codesourcery.com>
* config/m68k/m68k.h (ISA_HAS_FF1, ISA_HAS_MVS_MVZ): New.

View File

@ -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;
}

View File

@ -1,3 +1,7 @@
2007-06-17 Kenneth Zadeck <zadeck@naturalbridge.com>
* gcc.c-torture/compile/pr32349.c: New testcase.
2007-06-17 Eric Botcazou <ebotcazou@libertysurf.fr>
* gcc.target/sparc/align.c: Use 'unsigned char' as element type.

View File

@ -0,0 +1,26 @@
/* { dg-options "-O2 -fmodulo-sched" } */
extern long *x1, *x2, *x3;
int
foo ()
{
/* Switching the following two lines prevents the ICE. */
long *p1, *p2;
long m, n, i;
p1 = x1;
p2 = x2;
n = 0;
for (i = *x3; 0 < i; i--)
{
m = (*p1++) ^ (*p2++);
m = (m & 0x55555555) + ((m >> 1) & 0x55555555);
m = (m & 0x33333333) + ((m >> 2) & 0x33333333);
m = (m + (m >> 4)) & 0x0f0f0f0f;
m = (m + (m >> 8));
n += m;
}
return n;
}