OSDN Git Service

gcc/ChangeLog:
authorspark <spark@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 18 Jun 2007 20:02:33 +0000 (20:02 +0000)
committerspark <spark@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 18 Jun 2007 20:02:33 +0000 (20:02 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@125825 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/gcse.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr32339.c [new file with mode: 0644]

index 191d347..606632d 100644 (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:
index 828ee6b..8278714 100644 (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;
index 7550286..b864722 100644 (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.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr32339.c b/gcc/testsuite/gcc.c-torture/compile/pr32339.c
new file mode 100644 (file)
index 0000000..5aca6e4
--- /dev/null
@@ -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;
+}