OSDN Git Service

* var-tracking.c (vt_initialize): Scan insns in ebb chunks instead
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 2 Mar 2010 12:18:39 +0000 (12:18 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 2 Mar 2010 12:18:39 +0000 (12:18 +0000)
of bb.

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

gcc/ChangeLog
gcc/var-tracking.c

index 9e9755a..4b0d5ac 100644 (file)
@@ -1,3 +1,9 @@
+2010-03-02  Jakub Jelinek  <jakub@redhat.com>
+           Steven Bosscher  <steven@gcc.gnu.org>
+
+       * var-tracking.c (vt_initialize): Scan insns in ebb chunks instead
+       of bb.
+
 2010-03-02  Reza Yazdani  <reza.yazdani@amd.com>
 
        PR middle-end/42640
index 59369cb..374e333 100644 (file)
@@ -7399,9 +7399,9 @@ vt_initialize (void)
     {
       rtx insn;
       HOST_WIDE_INT pre, post = 0;
-      int count;
       unsigned int next_uid_before = cselib_get_next_uid ();
       unsigned int next_uid_after = next_uid_before;
+      basic_block first_bb, last_bb;
 
       if (MAY_HAVE_DEBUG_INSNS)
        {
@@ -7411,55 +7411,70 @@ vt_initialize (void)
                     cselib_get_next_uid ());
        }
 
+      first_bb = bb;
+      for (;;)
+       {
+         edge e;
+         if (bb->next_bb == EXIT_BLOCK_PTR
+             || ! single_pred_p (bb->next_bb))
+           break;
+         e = find_edge (bb, bb->next_bb);
+         if (! e || (e->flags & EDGE_FALLTHRU) == 0)
+           break;
+         bb = bb->next_bb;
+       }
+      last_bb = bb;
+
       /* Count the number of micro operations.  */
-      VTI (bb)->n_mos = 0;
-      for (insn = BB_HEAD (bb); insn != NEXT_INSN (BB_END (bb));
-          insn = NEXT_INSN (insn))
+      FOR_BB_BETWEEN (bb, first_bb, last_bb->next_bb, next_bb)
        {
-         if (INSN_P (insn))
+         VTI (bb)->n_mos = 0;
+         for (insn = BB_HEAD (bb); insn != NEXT_INSN (BB_END (bb));
+              insn = NEXT_INSN (insn))
            {
-             if (!frame_pointer_needed)
+             if (INSN_P (insn))
                {
-                 insn_stack_adjust_offset_pre_post (insn, &pre, &post);
-                 if (pre)
+                 if (!frame_pointer_needed)
                    {
-                     VTI (bb)->n_mos++;
-                     if (dump_file && (dump_flags & TDF_DETAILS))
-                       log_op_type (GEN_INT (pre), bb, insn,
-                                    MO_ADJUST, dump_file);
+                     insn_stack_adjust_offset_pre_post (insn, &pre, &post);
+                     if (pre)
+                       {
+                         VTI (bb)->n_mos++;
+                         if (dump_file && (dump_flags & TDF_DETAILS))
+                           log_op_type (GEN_INT (pre), bb, insn,
+                                        MO_ADJUST, dump_file);
+                       }
+                     if (post)
+                       {
+                         VTI (bb)->n_mos++;
+                         if (dump_file && (dump_flags & TDF_DETAILS))
+                           log_op_type (GEN_INT (post), bb, insn,
+                                        MO_ADJUST, dump_file);
+                       }
                    }
-                 if (post)
+                 cselib_hook_called = false;
+                 if (MAY_HAVE_DEBUG_INSNS)
                    {
-                     VTI (bb)->n_mos++;
+                     cselib_process_insn (insn);
                      if (dump_file && (dump_flags & TDF_DETAILS))
-                       log_op_type (GEN_INT (post), bb, insn,
-                                    MO_ADJUST, dump_file);
+                       {
+                         print_rtl_single (dump_file, insn);
+                         dump_cselib_table (dump_file);
+                       }
                    }
-               }
-             cselib_hook_called = false;
-             if (MAY_HAVE_DEBUG_INSNS)
-               {
-                 cselib_process_insn (insn);
-                 if (dump_file && (dump_flags & TDF_DETAILS))
+                 if (!cselib_hook_called)
+                   count_with_sets (insn, 0, 0);
+                 if (CALL_P (insn))
                    {
-                     print_rtl_single (dump_file, insn);
-                     dump_cselib_table (dump_file);
+                     VTI (bb)->n_mos++;
+                     if (dump_file && (dump_flags & TDF_DETAILS))
+                       log_op_type (PATTERN (insn), bb, insn,
+                                    MO_CALL, dump_file);
                    }
                }
-             if (!cselib_hook_called)
-               count_with_sets (insn, 0, 0);
-             if (CALL_P (insn))
-               {
-                 VTI (bb)->n_mos++;
-                 if (dump_file && (dump_flags & TDF_DETAILS))
-                   log_op_type (PATTERN (insn), bb, insn,
-                                MO_CALL, dump_file);
-               }
            }
        }
 
-      count = VTI (bb)->n_mos;
-
       if (MAY_HAVE_DEBUG_INSNS)
        {
          cselib_preserve_only_values (false);
@@ -7472,58 +7487,66 @@ vt_initialize (void)
        }
 
       /* Add the micro-operations to the array.  */
-      VTI (bb)->mos = XNEWVEC (micro_operation, VTI (bb)->n_mos);
-      VTI (bb)->n_mos = 0;
-      for (insn = BB_HEAD (bb); insn != NEXT_INSN (BB_END (bb));
-          insn = NEXT_INSN (insn))
+      FOR_BB_BETWEEN (bb, first_bb, last_bb->next_bb, next_bb)
        {
-         if (INSN_P (insn))
+         int count = VTI (bb)->n_mos;
+         VTI (bb)->mos = XNEWVEC (micro_operation, count);
+         VTI (bb)->n_mos = 0;
+         for (insn = BB_HEAD (bb); insn != NEXT_INSN (BB_END (bb));
+              insn = NEXT_INSN (insn))
            {
-             if (!frame_pointer_needed)
+             if (INSN_P (insn))
                {
-                 insn_stack_adjust_offset_pre_post (insn, &pre, &post);
-                 if (pre)
+                 if (!frame_pointer_needed)
                    {
-                     micro_operation *mo = VTI (bb)->mos + VTI (bb)->n_mos++;
+                     insn_stack_adjust_offset_pre_post (insn, &pre, &post);
+                     if (pre)
+                       {
+                         micro_operation *mo
+                           = VTI (bb)->mos + VTI (bb)->n_mos++;
 
-                     mo->type = MO_ADJUST;
-                     mo->u.adjust = pre;
-                     mo->insn = insn;
+                         mo->type = MO_ADJUST;
+                         mo->u.adjust = pre;
+                         mo->insn = insn;
 
-                     if (dump_file && (dump_flags & TDF_DETAILS))
-                       log_op_type (PATTERN (insn), bb, insn,
-                                    MO_ADJUST, dump_file);
+                         if (dump_file && (dump_flags & TDF_DETAILS))
+                           log_op_type (PATTERN (insn), bb, insn,
+                                        MO_ADJUST, dump_file);
+                       }
                    }
-               }
 
-             cselib_hook_called = false;
-             if (MAY_HAVE_DEBUG_INSNS)
-               {
-                 cselib_process_insn (insn);
-                 if (dump_file && (dump_flags & TDF_DETAILS))
+                 cselib_hook_called = false;
+                 if (MAY_HAVE_DEBUG_INSNS)
                    {
-                     print_rtl_single (dump_file, insn);
-                     dump_cselib_table (dump_file);
+                     cselib_process_insn (insn);
+                     if (dump_file && (dump_flags & TDF_DETAILS))
+                       {
+                         print_rtl_single (dump_file, insn);
+                         dump_cselib_table (dump_file);
+                       }
                    }
-               }
-             if (!cselib_hook_called)
-               add_with_sets (insn, 0, 0);
+                 if (!cselib_hook_called)
+                   add_with_sets (insn, 0, 0);
 
-             if (!frame_pointer_needed && post)
-               {
-                 micro_operation *mo = VTI (bb)->mos + VTI (bb)->n_mos++;
+                 if (!frame_pointer_needed && post)
+                   {
+                     micro_operation *mo = VTI (bb)->mos + VTI (bb)->n_mos++;
 
-                 mo->type = MO_ADJUST;
-                 mo->u.adjust = post;
-                 mo->insn = insn;
+                     mo->type = MO_ADJUST;
+                     mo->u.adjust = post;
+                     mo->insn = insn;
 
-                 if (dump_file && (dump_flags & TDF_DETAILS))
-                   log_op_type (PATTERN (insn), bb, insn,
-                                MO_ADJUST, dump_file);
+                     if (dump_file && (dump_flags & TDF_DETAILS))
+                       log_op_type (PATTERN (insn), bb, insn,
+                                    MO_ADJUST, dump_file);
+                   }
                }
            }
+         gcc_assert (count == VTI (bb)->n_mos);
        }
-      gcc_assert (count == VTI (bb)->n_mos);
+
+      bb = last_bb;
+
       if (MAY_HAVE_DEBUG_INSNS)
        {
          cselib_preserve_only_values (true);