re PR rtl-optimization/32339 (ICE in insert_save, at caller-save.c:726)

gcc/ChangeLog:

2007-06-18  Seongbae Park  <seongbae.park@gmail.com>

	PR rtl-optimization/32339
	* df-scan.c (df_uses_record): Don't modify flags but just add to
	it for df_ref_record.

gcc/testsuite/ChangeLog:

2007-06-18  Martin Michlmayr <tbm@cyrius.com>

	PR rtl-optimization/32339
	* gcc.c-torture/compile/pr32339.c: New test.

From-SVN: r125825
This commit is contained in:
Seongbae Park 2007-06-18 20:02:33 +00:00
parent 2902c34e51
commit af4c82ed94
4 changed files with 42 additions and 11 deletions

View File

@ -1,3 +1,9 @@
2007-06-18 Seongbae Park <seongbae.park@gmail.com>
PR rtl-optimization/32339
* df-scan.c (df_uses_record): Don't modify flags but just add to
it for df_ref_record.
2007-06-18 David Daney <ddaney@avtrex.com
Revert:

View File

@ -6341,17 +6341,6 @@ replace_store_insn (rtx reg, rtx del, basic_block bb, struct ls_expr *smexpr)
mem = smexpr->pattern;
insn = gen_move_insn (reg, SET_SRC (single_set (del)));
insn = emit_insn_after (insn, del);
if (dump_file)
{
fprintf (dump_file,
"STORE_MOTION delete insn in BB %d:\n ", bb->index);
print_inline_rtx (dump_file, del, 6);
fprintf (dump_file, "\nSTORE MOTION replaced with insn:\n ");
print_inline_rtx (dump_file, insn, 6);
fprintf (dump_file, "\n");
}
for (ptr = ANTIC_STORE_LIST (smexpr); ptr; ptr = XEXP (ptr, 1))
if (XEXP (ptr, 0) == del)
@ -6379,6 +6368,20 @@ replace_store_insn (rtx reg, rtx del, basic_block bb, struct ls_expr *smexpr)
XEXP (note, 0) = insn;
}
/* Emit the insn AFTER all the notes are transferred.
This is cheaper since we avoid df rescanning for the note change. */
insn = emit_insn_after (insn, del);
if (dump_file)
{
fprintf (dump_file,
"STORE_MOTION delete insn in BB %d:\n ", bb->index);
print_inline_rtx (dump_file, del, 6);
fprintf (dump_file, "\nSTORE MOTION replaced with insn:\n ");
print_inline_rtx (dump_file, insn, 6);
fprintf (dump_file, "\n");
}
delete_insn (del);
/* Now we must handle REG_EQUAL notes whose contents is equal to the mem;

View File

@ -1,3 +1,8 @@
2007-06-18 Martin Michlmayr <tbm@cyrius.com>
PR rtl-optimization/32339
* gcc.c-torture/compile/pr32339.c: New test.
2007-06-18 Kenneth Zadeck <zadeck@naturalbridge.com>
* gcc.c-torture/compile/pr32355.c: New testcase.

View File

@ -0,0 +1,17 @@
/* We used to ICE in insert_save at caller-save.c,
due to missing REG_DEAD for register use in post-decrement on ia64. */
struct city_dialog
{
struct city *pcity;
char change_list_names[200][200];
int change_list_ids[200];
};
change_callback (void)
{
struct city_dialog *pdialog;
int n;
int i;
get_city_dialog_production_full (pdialog->change_list_names[n],
pdialog->pcity);
pdialog->change_list_ids[n++] = i;
}