diff mbox

[01/18] stop using rtx_insn_list in reorg.c

Message ID 1461133342-10794-2-git-send-email-tbsaunde+gcc@tbsaunde.org
State New
Headers show

Commit Message

tbsaunde+gcc@tbsaunde.org April 20, 2016, 6:22 a.m. UTC
From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>

gcc/ChangeLog:

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

	* reorg.c (try_merge_delay_insns): Make merged_insns a vector.
---
 gcc/reorg.c | 23 +++++++++++------------
 1 file changed, 11 insertions(+), 12 deletions(-)

Comments

Jeff Law April 22, 2016, 5:03 a.m. UTC | #1
On 04/20/2016 12:22 AM, tbsaunde+gcc@tbsaunde.org wrote:
> From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
>
> gcc/ChangeLog:
>
> 2016-04-19  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
>
> 	* reorg.c (try_merge_delay_insns): Make merged_insns a vector.
OK.
jeff
Bernd Schmidt April 25, 2016, 9:35 a.m. UTC | #2
On 04/20/2016 08:22 AM, tbsaunde+gcc@tbsaunde.org wrote:
> -  rtx_insn_list *merged_insns = 0;
> +  auto_vec<std::pair<rtx_insn *, bool>, 10> merged_insns;

I see Jeff has already acked this, but some of the expressions here are 
getting unwieldy. can we maybe shorten some of this using typedefs?


Bernd
Trevor Saunders April 25, 2016, 1:39 p.m. UTC | #3
On Mon, Apr 25, 2016 at 11:35:16AM +0200, Bernd Schmidt wrote:
> On 04/20/2016 08:22 AM, tbsaunde+gcc@tbsaunde.org wrote:
> >-  rtx_insn_list *merged_insns = 0;
> >+  auto_vec<std::pair<rtx_insn *, bool>, 10> merged_insns;
> 
> I see Jeff has already acked this, but some of the expressions here are
> getting unwieldy. can we maybe shorten some of this using typedefs?

I guess you could shorten std::pair<rtx_insn *, bool> to insn_bool_pair
or something, I don't have a great descriptive name.  It was only used 3
times I think, so I wasn't terribly concerned, but I'd be happy to
change it.

Trev

> 
> 
> Bernd
diff mbox

Patch

diff --git a/gcc/reorg.c b/gcc/reorg.c
index 7b28821..8fb912a 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -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);
 	    }
 	}