stop using rtx_insn_list in reorg.c
authorTrevor Saunders <tbsaunde+gcc@tbsaunde.org>
Sun, 24 Apr 2016 08:45:13 +0000 (08:45 +0000)
committerTrevor Saunders <tbsaunde@gcc.gnu.org>
Sun, 24 Apr 2016 08:45:13 +0000 (08:45 +0000)
gcc/ChangeLog:

2016-04-24  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

* reorg.c (try_merge_delay_insns): Make merged_insns a vector.

From-SVN: r235393

gcc/ChangeLog
gcc/reorg.c

index a820a0f9f7bd85f05a5395fa8bbde98ae45f68b2..8cfccea95ef0332dbaccc2490af906f8e7a18cb1 100644 (file)
@@ -1,3 +1,7 @@
+2016-04-24  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
+
+       * reorg.c (try_merge_delay_insns): Make merged_insns a vector.
+
 2016-04-24  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
 
        * vec.h (vec_safe_contains): New function.
index 7b28821c99f1cbffff45fc6ec4f0ba6e6c147848..8fb912a0f92d231f301ab74aa10dd0a17f0ed7c7 100644 (file)
@@ -1259,7 +1259,7 @@ try_merge_delay_insns (rtx_insn *insn, rtx_insn *thread)
   int num_slots = XVECLEN (PATTERN (insn), 0);
   rtx next_to_match = XVECEXP (PATTERN (insn), 0, slot_number);
   struct resources set, needed, modified;
-  rtx_insn_list *merged_insns = 0;
+  auto_vec<std::pair<rtx_insn *, bool>, 10> merged_insns;
   int i, j;
   int flags;
 
@@ -1319,7 +1319,7 @@ try_merge_delay_insns (rtx_insn *insn, rtx_insn *thread)
              INSN_FROM_TARGET_P (next_to_match) = 0;
            }
          else
-           merged_insns = gen_rtx_INSN_LIST (VOIDmode, trial, merged_insns);
+           merged_insns.safe_push (std::pair<rtx_insn *, bool> (trial, false));
 
          if (++slot_number == num_slots)
            break;
@@ -1384,8 +1384,8 @@ try_merge_delay_insns (rtx_insn *insn, rtx_insn *thread)
                  INSN_FROM_TARGET_P (next_to_match) = 0;
                }
              else
-               merged_insns = gen_rtx_INSN_LIST (SImode, dtrial,
-                                                 merged_insns);
+               merged_insns.safe_push (std::pair<rtx_insn *, bool> (dtrial,
+                                                                    true));
 
              if (++slot_number == num_slots)
                break;
@@ -1409,21 +1409,20 @@ try_merge_delay_insns (rtx_insn *insn, rtx_insn *thread)
      target.  */
   if (slot_number == num_slots && annul_p)
     {
-      for (; merged_insns; merged_insns = merged_insns->next ())
+      unsigned int len = merged_insns.length ();
+      for (unsigned int i = len - 1; i < len; i--)
        {
-         if (GET_MODE (merged_insns) == SImode)
+         if (merged_insns[i].second)
            {
-             rtx_insn *new_rtx;
-
-             update_block (merged_insns->insn (), thread);
-             new_rtx = delete_from_delay_slot (merged_insns->insn ());
+             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->insn (), thread);
-             delete_related_insns (merged_insns->insn ());
+             update_block (merged_insns[i].first, thread);
+             delete_related_insns (merged_insns[i].first);
            }
        }