final.c: Use rtx_sequence
authorDavid Malcolm <dmalcolm@redhat.com>
Wed, 27 Aug 2014 20:04:14 +0000 (20:04 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Wed, 27 Aug 2014 20:04:14 +0000 (20:04 +0000)
gcc/
2014-08-27  David Malcolm  <dmalcolm@redhat.com>

* final.c (get_attr_length_1): Replace GET_CODE check with a
dyn_cast, introducing local "seq" and the use of methods of
rtx_sequence.
(shorten_branches): Likewise, introducing local "body_seq".
Strengthen local "inner_insn" from rtx to rtx_insn *.
(reemit_insn_block_notes): Replace GET_CODE check with a
dyn_cast, strengthening local "body" from rtx to rtx_sequence *.
Use methods of rtx_sequence.
(final_scan_insn): Likewise, introducing local "seq" for when
"body" is known to be a SEQUENCE, using its methods.

From-SVN: r214594

gcc/ChangeLog
gcc/final.c

index 16c94db59d35c10e6b1bf69f23affc8ffaaccf72..c8b68a2ce953178cd9026300fbbc5f934a05e4d9 100644 (file)
@@ -1,3 +1,16 @@
+2014-08-27  David Malcolm  <dmalcolm@redhat.com>
+
+       * final.c (get_attr_length_1): Replace GET_CODE check with a
+       dyn_cast, introducing local "seq" and the use of methods of
+       rtx_sequence.
+       (shorten_branches): Likewise, introducing local "body_seq".
+       Strengthen local "inner_insn" from rtx to rtx_insn *.
+       (reemit_insn_block_notes): Replace GET_CODE check with a
+       dyn_cast, strengthening local "body" from rtx to rtx_sequence *.
+       Use methods of rtx_sequence.
+       (final_scan_insn): Likewise, introducing local "seq" for when
+       "body" is known to be a SEQUENCE, using its methods.
+
 2014-08-27  David Malcolm  <dmalcolm@redhat.com>
 
        * except.c (can_throw_external): Strengthen local "seq" from rtx
index ea3fec4904586ec977b4adbaa1ec2c082861a794..15e58e5f760336df6def37eaa5a9954c130e7f0d 100644 (file)
@@ -407,9 +407,9 @@ get_attr_length_1 (rtx uncast_insn, int (*fallback_fn) (rtx))
 
        else if (GET_CODE (body) == ASM_INPUT || asm_noperands (body) >= 0)
          length = asm_insn_count (body) * fallback_fn (insn);
-       else if (GET_CODE (body) == SEQUENCE)
-         for (i = 0; i < XVECLEN (body, 0); i++)
-           length += get_attr_length_1 (XVECEXP (body, 0, i), fallback_fn);
+       else if (rtx_sequence *seq = dyn_cast <rtx_sequence *> (body))
+         for (i = 0; i < seq->len (); i++)
+           length += get_attr_length_1 (seq->insn (i), fallback_fn);
        else
          length = fallback_fn (insn);
        break;
@@ -1149,12 +1149,12 @@ shorten_branches (rtx_insn *first)
        }
       else if (GET_CODE (body) == ASM_INPUT || asm_noperands (body) >= 0)
        insn_lengths[uid] = asm_insn_count (body) * insn_default_length (insn);
-      else if (GET_CODE (body) == SEQUENCE)
+      else if (rtx_sequence *body_seq = dyn_cast <rtx_sequence *> (body))
        {
          int i;
          int const_delay_slots;
 #ifdef DELAY_SLOTS
-         const_delay_slots = const_num_delay_slots (XVECEXP (body, 0, 0));
+         const_delay_slots = const_num_delay_slots (body_seq->insn (0));
 #else
          const_delay_slots = 0;
 #endif
@@ -1163,14 +1163,14 @@ shorten_branches (rtx_insn *first)
          /* Inside a delay slot sequence, we do not do any branch shortening
             if the shortening could change the number of delay slots
             of the branch.  */
-         for (i = 0; i < XVECLEN (body, 0); i++)
+         for (i = 0; i < body_seq->len (); i++)
            {
-             rtx inner_insn = XVECEXP (body, 0, i);
+             rtx_insn *inner_insn = body_seq->insn (i);
              int inner_uid = INSN_UID (inner_insn);
              int inner_length;
 
              if (GET_CODE (body) == ASM_INPUT
-                 || asm_noperands (PATTERN (XVECEXP (body, 0, i))) >= 0)
+                 || asm_noperands (PATTERN (inner_insn)) >= 0)
                inner_length = (asm_insn_count (PATTERN (inner_insn))
                                * insn_default_length (inner_insn));
              else
@@ -1685,15 +1685,14 @@ reemit_insn_block_notes (void)
       this_block = insn_scope (insn);
       /* For sequences compute scope resulting from merging all scopes
         of instructions nested inside.  */
-      if (GET_CODE (PATTERN (insn)) == SEQUENCE)
+      if (rtx_sequence *body = dyn_cast <rtx_sequence *> (PATTERN (insn)))
        {
          int i;
-         rtx body = PATTERN (insn);
 
          this_block = NULL;
-         for (i = 0; i < XVECLEN (body, 0); i++)
+         for (i = 0; i < body->len (); i++)
            this_block = choose_inner_scope (this_block,
-                                            insn_scope (XVECEXP (body, 0, i)));
+                                            insn_scope (body->insn (i)));
        }
       if (! this_block)
        {
@@ -2614,7 +2613,7 @@ final_scan_insn (rtx uncast_insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED,
 
        app_disable ();
 
-       if (GET_CODE (body) == SEQUENCE)
+       if (rtx_sequence *seq = dyn_cast <rtx_sequence *> (body))
          {
            /* A delayed-branch sequence */
            int i;
@@ -2626,16 +2625,16 @@ final_scan_insn (rtx uncast_insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED,
               thought unnecessary.  If that happens, cancel this sequence
               and cause that insn to be restored.  */
 
-           next = final_scan_insn (XVECEXP (body, 0, 0), file, 0, 1, seen);
-           if (next != XVECEXP (body, 0, 1))
+           next = final_scan_insn (seq->insn (0), file, 0, 1, seen);
+           if (next != seq->insn (1))
              {
                final_sequence = 0;
                return next;
              }
 
-           for (i = 1; i < XVECLEN (body, 0); i++)
+           for (i = 1; i < seq->len (); i++)
              {
-               rtx insn = XVECEXP (body, 0, i);
+               rtx_insn *insn = seq->insn (i);
                rtx_insn *next = NEXT_INSN (insn);
                /* We loop in case any instruction in a delay slot gets
                   split.  */
@@ -2653,7 +2652,7 @@ final_scan_insn (rtx uncast_insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED,
               called function.  Hence we don't preserve any CC-setting
               actions in these insns and the CC must be marked as being
               clobbered by the function.  */
-           if (CALL_P (XVECEXP (body, 0, 0)))
+           if (CALL_P (seq->insn (0)))
              {
                CC_STATUS_INIT;
              }