diff mbox

[207/236] reorg.c: Use rtx_sequence

Message ID 1407345815-14551-208-git-send-email-dmalcolm@redhat.com
State New
Headers show

Commit Message

David Malcolm Aug. 6, 2014, 5:23 p.m. UTC
gcc/
	* reorg.c (redundant_insn): In two places in the function, replace
	a check of GET_CODE with a dyn_cast, introducing local "seq", and
	usings methods of rtx_sequence to clarify the code.
---
 gcc/reorg.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

Comments

Jeff Law Aug. 15, 2014, 10:26 p.m. UTC | #1
On 08/06/14 11:23, David Malcolm wrote:
> gcc/
> 	* reorg.c (redundant_insn): In two places in the function, replace
> 	a check of GET_CODE with a dyn_cast, introducing local "seq", and
> 	usings methods of rtx_sequence to clarify the code.
Some concerns here with the dynamic cast.

jeff
diff mbox

Patch

diff --git a/gcc/reorg.c b/gcc/reorg.c
index 75819bc..3894863 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -1526,11 +1526,11 @@  redundant_insn (rtx insn, rtx target, rtx delay_list)
       if (GET_CODE (pat) == USE || GET_CODE (pat) == CLOBBER)
 	continue;
 
-      if (GET_CODE (pat) == SEQUENCE)
+      if (rtx_sequence *seq = dyn_cast <rtx_sequence *> (pat))
 	{
 	  /* Stop for a CALL and its delay slots because it is difficult to
 	     track its resource needs correctly.  */
-	  if (CALL_P (XVECEXP (pat, 0, 0)))
+	  if (CALL_P (seq->element (0)))
 	    return 0;
 
 	  /* Stop for an INSN or JUMP_INSN with delayed effects and its delay
@@ -1538,21 +1538,21 @@  redundant_insn (rtx insn, rtx target, rtx delay_list)
 	     correctly.  */
 
 #ifdef INSN_SETS_ARE_DELAYED
-	  if (INSN_SETS_ARE_DELAYED (XVECEXP (pat, 0, 0)))
+	  if (INSN_SETS_ARE_DELAYED (seq->element (0)))
 	    return 0;
 #endif
 
 #ifdef INSN_REFERENCES_ARE_DELAYED
-	  if (INSN_REFERENCES_ARE_DELAYED (XVECEXP (pat, 0, 0)))
+	  if (INSN_REFERENCES_ARE_DELAYED (seq->element (0)))
 	    return 0;
 #endif
 
 	  /* See if any of the insns in the delay slot match, updating
 	     resource requirements as we go.  */
-	  for (i = XVECLEN (pat, 0) - 1; i > 0; i--)
-	    if (GET_CODE (XVECEXP (pat, 0, i)) == GET_CODE (insn)
-		&& rtx_equal_p (PATTERN (XVECEXP (pat, 0, i)), ipat)
-		&& ! find_reg_note (XVECEXP (pat, 0, i), REG_UNUSED, NULL_RTX))
+	  for (i = seq->len () - 1; i > 0; i--)
+	    if (GET_CODE (seq->element (i)) == GET_CODE (insn)
+		&& rtx_equal_p (PATTERN (seq->element (i)), ipat)
+		&& ! find_reg_note (seq->element (i), REG_UNUSED, NULL_RTX))
 	      break;
 
 	  /* If found a match, exit this loop early.  */
@@ -1628,10 +1628,10 @@  redundant_insn (rtx insn, rtx target, rtx delay_list)
       if (GET_CODE (pat) == USE || GET_CODE (pat) == CLOBBER)
 	continue;
 
-      if (GET_CODE (pat) == SEQUENCE)
+      if (rtx_sequence *seq = dyn_cast <rtx_sequence *> (pat))
 	{
 	  bool annul_p = false;
-          rtx control = XVECEXP (pat, 0, 0);
+          rtx control = seq->element (0);
 
 	  /* If this is a CALL_INSN and its delay slots, it is hard to track
 	     the resource needs properly, so give up.  */
@@ -1656,9 +1656,9 @@  redundant_insn (rtx insn, rtx target, rtx delay_list)
 
 	  /* See if any of the insns in the delay slot match, updating
 	     resource requirements as we go.  */
-	  for (i = XVECLEN (pat, 0) - 1; i > 0; i--)
+	  for (i = seq->len () - 1; i > 0; i--)
 	    {
-	      rtx candidate = XVECEXP (pat, 0, i);
+	      rtx candidate = seq->element (i);
 
 	      /* If an insn will be annulled if the branch is false, it isn't
 		 considered as a possible duplicate insn.  */