OSDN Git Service

2007-06-17 Kenneth Zadeck <zadeck@naturalbridge.com>
authorzadeck <zadeck@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 17 Jun 2007 17:51:25 +0000 (17:51 +0000)
committerzadeck <zadeck@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 17 Jun 2007 17:51:25 +0000 (17:51 +0000)
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

gcc/ChangeLog
gcc/modulo-sched.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr32349.c [new file with mode: 0644]

index 321e616..f284af0 100644 (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.
index 25cd53a..6664e32 100644 (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;
 }
index 2a69e6a..5b08f68 100644 (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.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr32349.c b/gcc/testsuite/gcc.c-torture/compile/pr32349.c
new file mode 100644 (file)
index 0000000..570969d
--- /dev/null
@@ -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;
+}