On Tue, Apr 26, 2016 at 03:13:32PM +0200, Bernd Schmidt wrote:
> On 04/26/2016 03:08 PM, Jakub Jelinek wrote:
> >        ^
> >../../gcc/reorg.c:1413:25: warning:   matches this ā€˜i’ under old rules
> >        for (unsigned int i = len - 1; i < len; i--)
> >                          ^
> 
> Oh, and also - I flagged this while reviewing other parts of Trevor's
> changes, this pattern is too ugly to live, that should be a
> FOR_EACH_VEC_ELT_....

That would be FOR_EACH_VEC_ELT_REVERSE, but unfortunately that doesn't
really work.

The iterate template does:

template<typename T, typename A>
inline bool
vec<T, A, vl_embed>::iterate (unsigned ix, T *ptr) const
{
  if (ix < m_vecpfx.m_num)
    {
      *ptr = m_vecdata[ix];
      return true;
    }
  else
    {
      *ptr = 0;
      return false;
    }
}

and the element in this case is std::pair <rtx_insn *, bool>, for which
*ptr = 0; doesn't work (maybe *ptr = T (); would work in there instead,
dunno).

So is the following ok if it passes bootstrap/regtest, or shall I do
something about vec.h?

2016-04-26  Jakub Jelinek  <ja...@redhat.com>

        * reorg.c (try_merge_delay_insns): Declare i and j inside the
        for loops rather than one for the whole function.

--- gcc/reorg.c.jj      2016-04-26 08:08:16.000000000 +0200
+++ gcc/reorg.c 2016-04-26 17:32:22.553670734 +0200
@@ -1260,7 +1260,6 @@ try_merge_delay_insns (rtx_insn *insn, r
   rtx next_to_match = XVECEXP (PATTERN (insn), 0, slot_number);
   struct resources set, needed, modified;
   auto_vec<std::pair<rtx_insn *, bool>, 10> merged_insns;
-  int i, j;
   int flags;
 
   flags = get_jump_flags (delay_insn, JUMP_LABEL (delay_insn));
@@ -1275,7 +1274,7 @@ try_merge_delay_insns (rtx_insn *insn, r
      will essentially disable this optimization.  This method is somewhat of
      a kludge, but I don't see a better way.)  */
   if (! annul_p)
-    for (i = 1 ; i < num_slots; i++)
+    for (int i = 1; i < num_slots; i++)
       if (XVECEXP (PATTERN (insn), 0, i))
        mark_referenced_resources (XVECEXP (PATTERN (insn), 0, i), &needed,
                                   true);
@@ -1346,19 +1345,19 @@ try_merge_delay_insns (rtx_insn *insn, r
       mark_set_resources (filled_insn, &set, 0, MARK_SRC_DEST_CALL);
       mark_referenced_resources (filled_insn, &needed, true);
 
-      for (i = 1; i < pat->len (); i++)
+      for (int i = 1; i < pat->len (); i++)
        {
          rtx_insn *dtrial = pat->insn (i);
 
          CLEAR_RESOURCE (&modified);
          /* Account for resources set by the insn following NEXT_TO_MATCH
             inside INSN's delay list. */
-         for (j = 1; slot_number + j < num_slots; j++)
+         for (int j = 1; slot_number + j < num_slots; j++)
            mark_set_resources (XVECEXP (PATTERN (insn), 0, slot_number + j),
                                &modified, 0, MARK_SRC_DEST_CALL);
          /* Account for resources set by the insn before DTRIAL and inside
             TRIAL's delay list. */
-         for (j = 1; j < i; j++)
+         for (int j = 1; j < i; j++)
            mark_set_resources (XVECEXP (pat, 0, j),
                                &modified, 0, MARK_SRC_DEST_CALL); 
          if (! insn_references_resource_p (dtrial, &set, true)
@@ -1411,24 +1410,22 @@ try_merge_delay_insns (rtx_insn *insn, r
     {
       unsigned int len = merged_insns.length ();
       for (unsigned int i = len - 1; i < len; i--)
-       {
-         if (merged_insns[i].second)
-           {
-             update_block (merged_insns[i].first, thread);
-             rtx_insn *new_rtx = delete_from_delay_slot 
(merged_insns[i].first);
-             if (thread->deleted ())
-               thread = new_rtx;
-           }
-         else
-           {
-             update_block (merged_insns[i].first, thread);
-             delete_related_insns (merged_insns[i].first);
-           }
-       }
+       if (merged_insns[i].second)
+         {
+           update_block (merged_insns[i].first, thread);
+           rtx_insn *new_rtx = delete_from_delay_slot (merged_insns[i].first);
+           if (thread->deleted ())
+             thread = new_rtx;
+         }
+       else
+         {
+           update_block (merged_insns[i].first, thread);
+           delete_related_insns (merged_insns[i].first);
+         }
 
       INSN_ANNULLED_BRANCH_P (delay_insn) = 0;
 
-      for (i = 0; i < XVECLEN (PATTERN (insn), 0); i++)
+      for (int i = 0; i < XVECLEN (PATTERN (insn), 0); i++)
        INSN_FROM_TARGET_P (XVECEXP (PATTERN (insn), 0, i)) = 0;
     }
 }


        Jakub

Reply via email to