cfgbuild.c (inside_basic_block_p): Use JUMP_TABLE_DATA_P in lieu of tests for JUMP_P...
authorSteven Bosscher <steven@gcc.gnu.org>
Fri, 29 Mar 2013 12:11:10 +0000 (12:11 +0000)
committerSteven Bosscher <steven@gcc.gnu.org>
Fri, 29 Mar 2013 12:11:10 +0000 (12:11 +0000)
* cfgbuild.c (inside_basic_block_p): Use JUMP_TABLE_DATA_P in lieu
of tests for JUMP_P and a ADDR_DIFF_VEC or ADDR_VEC pattern.
(control_flow_insn_p): Likewise.
* cfgrtl.c (duplicate_insn_chain): Likewise.
* final.c (get_attr_length_1): Likewise.
(shorten_branches): Likewise.
(final_scan_insn): Likewise.
* function.c (instantiate_virtual_regs): Likewise.
* gcse.c (insert_insn_end_basic_block): Likewise.
* ira-costs.c (scan_one_insn): Likewise.
* lra-eliminations.c (eliminate_regs_in_insn): Likewise.
* lra.c (check_rtl): Likewise.
* reload1.c (elimination_costs_in_insn): Likewise.
* reorg.c (follow_jumps): Likewise.

* config/arm/arm.c (is_jump_table): Use JUMP_TABLE_DATA_P in lieu
of tests for JUMP_P and a ADDR_DIFF_VEC or ADDR_VEC pattern.
(thumb_far_jump_used_p): Likewise.
* config/bfin/bfin.c (workaround_rts_anomaly): Likewise.
(workaround_speculation): Likewise.
(add_sched_insns_for_speculation): Likewise.
* config/c6x/c6x.c (reorg_emit_nops): Likewise.
* config/frv/frv.c (frv_function_contains_far_jump): Likewise.
(frv_for_each_packet): Likewise.
* config/i386/i386.c (ix86_avoid_jump_mispredicts): Likewise.
* config/ia64/ia64.c (emit_all_insn_group_barriers): Likewise.
(final_emit_insn_group_barriers): Likewise.
* config/m32r/m32r.c (m32r_is_insn): Likewise.
* config/mips/mips.c (USEFUL_INSN_P): Likewise.
(mips16_insn_length): Likewise.
* config/pa/pa.c (pa_reorg): Likewise.
(pa_combine_instructions): Likewise.
* config/rs6000/rs6000.c (rs6000_invalid_within_doloop): Likewise.
* config/sh/sh.c (fixup_addr_diff_vecs): Likewise.
(sh_reorg): Likewise.
(split_branches): Likewise.
* config/spu/spu.c (get_branch_target): Likewise.

* config/s390/s390.c (s390_chunkify_start): Simplify logic using
JUMP_TABLE_DATA_P.

From-SVN: r197234

24 files changed:
gcc/ChangeLog
gcc/cfgbuild.c
gcc/cfgrtl.c
gcc/config/arm/arm.c
gcc/config/bfin/bfin.c
gcc/config/c6x/c6x.c
gcc/config/frv/frv.c
gcc/config/i386/i386.c
gcc/config/ia64/ia64.c
gcc/config/m32r/m32r.c
gcc/config/mips/mips.c
gcc/config/pa/pa.c
gcc/config/rs6000/rs6000.c
gcc/config/s390/s390.c
gcc/config/sh/sh.c
gcc/config/spu/spu.c
gcc/final.c
gcc/function.c
gcc/gcse.c
gcc/ira-costs.c
gcc/lra-eliminations.c
gcc/lra.c
gcc/reload1.c
gcc/reorg.c

index 6b9db43ce106dc484ac2b7292d28a4675e883ba8..e172f414e5e3d4ba22ac8b14e550a2eec64278cb 100644 (file)
@@ -1,3 +1,46 @@
+2013-03-29  Steven Bosscher  <steven@gcc.gnu.org>
+
+       * cfgbuild.c (inside_basic_block_p): Use JUMP_TABLE_DATA_P in lieu
+       of tests for JUMP_P and a ADDR_DIFF_VEC or ADDR_VEC pattern.
+       (control_flow_insn_p): Likewise.
+       * cfgrtl.c (duplicate_insn_chain): Likewise.
+       * final.c (get_attr_length_1): Likewise.
+       (shorten_branches): Likewise.
+       (final_scan_insn): Likewise.
+       * function.c (instantiate_virtual_regs): Likewise.
+       * gcse.c (insert_insn_end_basic_block): Likewise.
+       * ira-costs.c (scan_one_insn): Likewise.
+       * lra-eliminations.c (eliminate_regs_in_insn): Likewise.
+       * lra.c (check_rtl): Likewise.
+       * reload1.c (elimination_costs_in_insn): Likewise.
+       * reorg.c (follow_jumps): Likewise.
+
+       * config/arm/arm.c (is_jump_table): Use JUMP_TABLE_DATA_P in lieu
+       of tests for JUMP_P and a ADDR_DIFF_VEC or ADDR_VEC pattern.
+       (thumb_far_jump_used_p): Likewise.
+       * config/bfin/bfin.c (workaround_rts_anomaly): Likewise.
+       (workaround_speculation): Likewise.
+       (add_sched_insns_for_speculation): Likewise.
+       * config/c6x/c6x.c (reorg_emit_nops): Likewise.
+       * config/frv/frv.c (frv_function_contains_far_jump): Likewise.
+       (frv_for_each_packet): Likewise.
+       * config/i386/i386.c (ix86_avoid_jump_mispredicts): Likewise.
+       * config/ia64/ia64.c (emit_all_insn_group_barriers): Likewise.
+       (final_emit_insn_group_barriers): Likewise.
+       * config/m32r/m32r.c (m32r_is_insn): Likewise.
+       * config/mips/mips.c (USEFUL_INSN_P): Likewise.
+       (mips16_insn_length): Likewise.
+       * config/pa/pa.c (pa_reorg): Likewise.
+       (pa_combine_instructions): Likewise.
+       * config/rs6000/rs6000.c (rs6000_invalid_within_doloop): Likewise.
+       * config/sh/sh.c (fixup_addr_diff_vecs): Likewise.
+       (sh_reorg): Likewise.
+       (split_branches): Likewise.
+       * config/spu/spu.c (get_branch_target): Likewise.
+
+       * config/s390/s390.c (s390_chunkify_start): Simplify logic using
+       JUMP_TABLE_DATA_P.
+
 2013-03-29  Kirill Yukhin  <kirill.yukhin@intel.com>
 
        * gcc/config/i386/avx2intrin.h (_mm256_broadcastsi128_si256):
index c47aad0c12fff27de0fb54693606cd554b3b0abb..34cc29c5685d5c20d60491f9495bd8b2442cb8ab 100644 (file)
@@ -51,13 +51,10 @@ inside_basic_block_p (const_rtx insn)
     case CODE_LABEL:
       /* Avoid creating of basic block for jumptables.  */
       return (NEXT_INSN (insn) == 0
-             || !JUMP_P (NEXT_INSN (insn))
-             || (GET_CODE (PATTERN (NEXT_INSN (insn))) != ADDR_VEC
-                 && GET_CODE (PATTERN (NEXT_INSN (insn))) != ADDR_DIFF_VEC));
+             || ! JUMP_TABLE_DATA_P (insn));
 
     case JUMP_INSN:
-      return (GET_CODE (PATTERN (insn)) != ADDR_VEC
-             && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC);
+      return (! JUMP_TABLE_DATA_P (insn));
 
     case CALL_INSN:
     case INSN:
@@ -88,8 +85,7 @@ control_flow_insn_p (const_rtx insn)
 
     case JUMP_INSN:
       /* Jump insn always causes control transfer except for tablejumps.  */
-      return (GET_CODE (PATTERN (insn)) != ADDR_VEC
-             && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC);
+      return (! JUMP_TABLE_DATA_P (insn));
 
     case CALL_INSN:
       /* Noreturn and sibling call instructions terminate the basic blocks
index ec1ba9ad71c86af49e814a12d7958d3c2bbc75ef..56ea2a83a6112160743b7ca93970c7251224f4cd 100644 (file)
@@ -3627,8 +3627,7 @@ duplicate_insn_chain (rtx from, rtx to)
          /* Avoid copying of dispatch tables.  We never duplicate
             tablejumps, so this can hit only in case the table got
             moved far from original jump.  */
-         if (GET_CODE (PATTERN (insn)) == ADDR_VEC
-             || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC)
+         if (JUMP_TABLE_DATA_P (insn))
            {
              /* Avoid copying following barrier as well if any
                 (and debug insns in between).  */
index 5f63a2e8712122a9cab8367aa257aa3e99729784..17a15989c646f76fda277bae1f7ef5bc05aed281 100644 (file)
@@ -12824,9 +12824,7 @@ is_jump_table (rtx insn)
       && ((table = next_real_insn (JUMP_LABEL (insn)))
          == next_real_insn (insn))
       && table != NULL
-      && JUMP_P (table)
-      && (GET_CODE (PATTERN (table)) == ADDR_VEC
-         || GET_CODE (PATTERN (table)) == ADDR_DIFF_VEC))
+      && JUMP_TABLE_DATA_P (table))
     return table;
 
   return NULL_RTX;
@@ -22658,8 +22656,7 @@ thumb_far_jump_used_p (void)
     {
       if (JUMP_P (insn)
          /* Ignore tablejump patterns.  */
-         && GET_CODE (PATTERN (insn)) != ADDR_VEC
-         && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC
+         && ! JUMP_TABLE_DATA_P (insn)
          && get_attr_far_jump (insn) == FAR_JUMP_YES
          )
        {
index a2d22c1c26f89628146805c895921a7a89ac0838..7fab975a6733685c6320d978e9d2639efc588036 100644 (file)
@@ -4084,12 +4084,15 @@ workaround_rts_anomaly (void)
       if (NOTE_P (insn) || LABEL_P (insn))
        continue;
 
+      if (JUMP_TABLE_DATA_P (insn))
+       continue;
+
       if (first_insn == NULL_RTX)
        first_insn = insn;
       pat = PATTERN (insn);
       if (GET_CODE (pat) == USE || GET_CODE (pat) == CLOBBER
-         || GET_CODE (pat) == ASM_INPUT || GET_CODE (pat) == ADDR_VEC
-         || GET_CODE (pat) == ADDR_DIFF_VEC || asm_noperands (pat) >= 0)
+         || GET_CODE (pat) == ASM_INPUT
+         || asm_noperands (pat) >= 0)
        continue;
 
       if (CALL_P (insn))
@@ -4277,6 +4280,8 @@ workaround_speculation (void)
       
       if (NOTE_P (insn) || BARRIER_P (insn))
        continue;
+      if (JUMP_TABLE_DATA_P (insn))
+       continue;
 
       if (LABEL_P (insn))
        {
@@ -4285,8 +4290,7 @@ workaround_speculation (void)
        }
 
       pat = PATTERN (insn);
-      if (GET_CODE (pat) == USE || GET_CODE (pat) == CLOBBER
-         || GET_CODE (pat) == ADDR_VEC || GET_CODE (pat) == ADDR_DIFF_VEC)
+      if (GET_CODE (pat) == USE || GET_CODE (pat) == CLOBBER)
        continue;
       
       if (GET_CODE (pat) == ASM_INPUT || asm_noperands (pat) >= 0)
@@ -4434,10 +4438,13 @@ workaround_speculation (void)
              if (NOTE_P (target) || BARRIER_P (target) || LABEL_P (target))
                continue;
 
+             if (JUMP_TABLE_DATA_P (target))
+               continue;
+
              pat = PATTERN (target);
              if (GET_CODE (pat) == USE || GET_CODE (pat) == CLOBBER
-                 || GET_CODE (pat) == ASM_INPUT || GET_CODE (pat) == ADDR_VEC
-                 || GET_CODE (pat) == ADDR_DIFF_VEC || asm_noperands (pat) >= 0)
+                 || GET_CODE (pat) == ASM_INPUT
+                 || asm_noperands (pat) >= 0)
                continue;
 
              if (NONDEBUG_INSN_P (target))
@@ -4510,11 +4517,13 @@ add_sched_insns_for_speculation (void)
 
       if (NOTE_P (insn) || BARRIER_P (insn) || LABEL_P (insn))
        continue;
+      if (JUMP_TABLE_DATA_P (insn))
+       continue;
 
       pat = PATTERN (insn);
       if (GET_CODE (pat) == USE || GET_CODE (pat) == CLOBBER
-         || GET_CODE (pat) == ASM_INPUT || GET_CODE (pat) == ADDR_VEC
-         || GET_CODE (pat) == ADDR_DIFF_VEC || asm_noperands (pat) >= 0)
+         || GET_CODE (pat) == ASM_INPUT
+         || asm_noperands (pat) >= 0)
        continue;
 
       if (JUMP_P (insn))
index f66ad55978e299b932b13941f3940d630a208e78..a7c36833b45423d4f332eee031d9e7339dfab071 100644 (file)
@@ -5052,9 +5052,7 @@ reorg_emit_nops (rtx *call_labels)
          || GET_CODE (PATTERN (insn)) == USE
          || GET_CODE (PATTERN (insn)) == CLOBBER
          || shadow_or_blockage_p (insn)
-         || (JUMP_P (insn)
-             && (GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
-                 || GET_CODE (PATTERN (insn)) == ADDR_VEC)))
+         || JUMP_TABLE_DATA_P (insn))
        goto next_insn;
 
       if (!c6x_flag_schedule_insns2)
index fd5349f218e25e9349520320c6c38cf091b2fdd9..ab7502e95d915a9a6e4a89c0b8fd43e9ec4d1eff 100644 (file)
@@ -1410,8 +1410,7 @@ frv_function_contains_far_jump (void)
   while (insn != NULL
         && !(JUMP_P (insn)
              /* Ignore tablejump patterns.  */
-             && GET_CODE (PATTERN (insn)) != ADDR_VEC
-             && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC
+             && ! JUMP_TABLE_DATA_P (insn)
              && get_attr_far_jump (insn) == FAR_JUMP_YES))
     insn = NEXT_INSN (insn);
   return (insn != NULL);
@@ -7481,13 +7480,11 @@ frv_for_each_packet (void (*handle_packet) (void))
          frv_start_packet_block ();
        }
 
-      if (INSN_P (insn))
+      if (INSN_P (insn) && ! JUMP_TABLE_DATA_P (insn))
        switch (GET_CODE (PATTERN (insn)))
          {
          case USE:
          case CLOBBER:
-         case ADDR_VEC:
-         case ADDR_DIFF_VEC:
            break;
 
          default:
index 030183c9e0f11fa1b730f4277f572da939743a1f..732b2a31e8ae97b097918b4c5b3a1196342c9948 100644 (file)
@@ -35209,8 +35209,7 @@ ix86_avoid_jump_mispredicts (void)
                {
                  start = NEXT_INSN (start);
                  if ((JUMP_P (start)
-                      && GET_CODE (PATTERN (start)) != ADDR_VEC
-                      && GET_CODE (PATTERN (start)) != ADDR_DIFF_VEC)
+                      && ! JUMP_TABLE_DATA_P (start))
                      || CALL_P (start))
                    njumps--, isjump = 1;
                  else
@@ -35227,8 +35226,7 @@ ix86_avoid_jump_mispredicts (void)
        fprintf (dump_file, "Insn %i estimated to %i bytes\n",
                 INSN_UID (insn), min_size);
       if ((JUMP_P (insn)
-          && GET_CODE (PATTERN (insn)) != ADDR_VEC
-          && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC)
+          && ! JUMP_TABLE_DATA_P (insn))
          || CALL_P (insn))
        njumps++;
       else
@@ -35238,8 +35236,7 @@ ix86_avoid_jump_mispredicts (void)
        {
          start = NEXT_INSN (start);
          if ((JUMP_P (start)
-              && GET_CODE (PATTERN (start)) != ADDR_VEC
-              && GET_CODE (PATTERN (start)) != ADDR_DIFF_VEC)
+              && ! JUMP_TABLE_DATA_P (start))
              || CALL_P (start))
            njumps--, isjump = 1;
          else
index 0e328ff827bf54204479a6305f742c5b97052b50..144cf7ee5eed3a4867267da743a86f43f71e06f7 100644 (file)
@@ -6987,8 +6987,7 @@ emit_all_insn_group_barriers (FILE *dump ATTRIBUTE_UNUSED)
 
          if (! last)
            continue;
-         if (JUMP_P (last)
-             && GET_CODE (PATTERN (last)) == ADDR_DIFF_VEC)
+         if (JUMP_TABLE_DATA_P (last))
            last = prev_active_insn (last);
          if (recog_memoized (last) != CODE_FOR_insn_group_barrier)
            emit_insn_after (gen_insn_group_barrier (GEN_INT (3)), last);
@@ -9376,8 +9375,7 @@ final_emit_insn_group_barriers (FILE *dump ATTRIBUTE_UNUSED)
 
          if (! last)
            continue;
-         if (JUMP_P (last)
-             && GET_CODE (PATTERN (last)) == ADDR_DIFF_VEC)
+         if (JUMP_TABLE_DATA_P (last))
            last = prev_active_insn (last);
          if (recog_memoized (last) != CODE_FOR_insn_group_barrier)
            emit_insn_after (gen_insn_group_barrier (GEN_INT (3)), last);
index 8dfce684f24489fba0961970202aa5fbeaf3f767..93df52f79eab31d793e1ae566503d77f467b0a2d 100644 (file)
@@ -1308,9 +1308,9 @@ static int
 m32r_is_insn (rtx insn)
 {
   return (NONDEBUG_INSN_P (insn)
+         && ! JUMP_TABLE_DATA_P (insn)
          && GET_CODE (PATTERN (insn)) != USE
-         && GET_CODE (PATTERN (insn)) != CLOBBER
-         && GET_CODE (PATTERN (insn)) != ADDR_VEC);
+         && GET_CODE (PATTERN (insn)) != CLOBBER);
 }
 
 /* Increase the priority of long instructions so that the
index d7a0749b4eecc3b1bc166b873029973c62f271ca..7a67c45c65ef425e24acd8de16102e3fb583009a 100644 (file)
@@ -95,12 +95,13 @@ along with GCC; see the file COPYING3.  If not see
    : TARGET_64BIT ? 0x100 : 0x400)
 
 /* True if INSN is a mips.md pattern or asm statement.  */
+/* ??? This test exists through the compiler, perhaps it should be
+       moved to rtl.h.  */
 #define USEFUL_INSN_P(INSN)                                            \
   (NONDEBUG_INSN_P (INSN)                                              \
+   && ! JUMP_TABLE_DATA_P (INSN)                                       \
    && GET_CODE (PATTERN (INSN)) != USE                                 \
-   && GET_CODE (PATTERN (INSN)) != CLOBBER                             \
-   && GET_CODE (PATTERN (INSN)) != ADDR_VEC                            \
-   && GET_CODE (PATTERN (INSN)) != ADDR_DIFF_VEC)
+   && GET_CODE (PATTERN (INSN)) != CLOBBER)
 
 /* If INSN is a delayed branch sequence, return the first instruction
    in the sequence, otherwise return INSN itself.  */
@@ -14648,7 +14649,7 @@ mips16_emit_constants (struct mips16_constant *constants, rtx insn)
 static int
 mips16_insn_length (rtx insn)
 {
-  if (JUMP_P (insn))
+  if (JUMP_TABLE_DATA_P (insn))
     {
       rtx body = PATTERN (insn);
       if (GET_CODE (body) == ADDR_VEC)
index 1cad695cf0d067919b3e992a2248f69e965869aa..b969e108b71b46bfce2255361445a87ac5c13f01 100644 (file)
@@ -8997,9 +8997,7 @@ pa_reorg (void)
          unsigned int length, i;
 
          /* Find an ADDR_VEC or ADDR_DIFF_VEC insn to explode.  */
-         if (! JUMP_P (insn)
-             || (GET_CODE (PATTERN (insn)) != ADDR_VEC
-                 && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC))
+         if (! JUMP_TABLE_DATA_P (insn))
            continue;
 
          /* Emit marker for the beginning of the branch table.  */
@@ -9056,9 +9054,7 @@ pa_reorg (void)
       for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
        {
          /* Find an ADDR_VEC insn.  */
-         if (! JUMP_P (insn)
-             || (GET_CODE (PATTERN (insn)) != ADDR_VEC
-                 && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC))
+         if (! JUMP_TABLE_DATA_P (insn))
            continue;
 
          /* Now generate markers for the beginning and end of the
@@ -9138,10 +9134,9 @@ pa_combine_instructions (void)
       /* We only care about INSNs, JUMP_INSNs, and CALL_INSNs.
         Also ignore any special USE insns.  */
       if ((! NONJUMP_INSN_P (anchor) && ! JUMP_P (anchor) && ! CALL_P (anchor))
+         || JUMP_TABLE_DATA_P (anchor)
          || GET_CODE (PATTERN (anchor)) == USE
-         || GET_CODE (PATTERN (anchor)) == CLOBBER
-         || GET_CODE (PATTERN (anchor)) == ADDR_VEC
-         || GET_CODE (PATTERN (anchor)) == ADDR_DIFF_VEC)
+         || GET_CODE (PATTERN (anchor)) == CLOBBER)
        continue;
 
       anchor_attr = get_attr_pa_combine_type (anchor);
@@ -9165,8 +9160,7 @@ pa_combine_instructions (void)
 
              /* Anything except a regular INSN will stop our search.  */
              if (! NONJUMP_INSN_P (floater)
-                 || GET_CODE (PATTERN (floater)) == ADDR_VEC
-                 || GET_CODE (PATTERN (floater)) == ADDR_DIFF_VEC)
+                 || JUMP_TABLE_DATA_P (floater))
                {
                  floater = NULL_RTX;
                  break;
@@ -9227,8 +9221,7 @@ pa_combine_instructions (void)
 
                  /* Anything except a regular INSN will stop our search.  */
                  if (! NONJUMP_INSN_P (floater)
-                     || GET_CODE (PATTERN (floater)) == ADDR_VEC
-                     || GET_CODE (PATTERN (floater)) == ADDR_DIFF_VEC)
+                     || JUMP_TABLE_DATA_P (floater))
                    {
                      floater = NULL_RTX;
                      break;
index 0fe45d8b1516512389b6f53a9b80a769ff195e5c..72cf8de83abd8b461856089814a73da6c9d422ee 100644 (file)
@@ -18788,9 +18788,7 @@ rs6000_invalid_within_doloop (const_rtx insn)
   if (CALL_P (insn))
     return "Function call in the loop.";
 
-  if (JUMP_P (insn)
-      && (GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
-         || GET_CODE (PATTERN (insn)) == ADDR_VEC))
+  if (JUMP_TABLE_DATA_P (insn))
     return "Computed branch in the loop.";
 
   return NULL;
index f6aa581e4b8cc0a461af28d5b8db4fcc874eba54..ab1e1f50b51964265181391895965b77bd5a9569 100644 (file)
@@ -5739,7 +5739,7 @@ addr_generation_dependency_p (rtx dep_rtx, rtx insn)
   rtx target, pat;
 
   if (NONJUMP_INSN_P (dep_rtx))
-      dep_rtx = PATTERN (dep_rtx);
+    dep_rtx = PATTERN (dep_rtx);
 
   if (GET_CODE (dep_rtx) == SET)
     {
@@ -7013,11 +7013,7 @@ s390_chunkify_start (void)
          && (LABEL_PRESERVE_P (insn) || LABEL_NAME (insn)))
        {
          rtx vec_insn = next_real_insn (insn);
-         rtx vec_pat = vec_insn && JUMP_P (vec_insn) ?
-                       PATTERN (vec_insn) : NULL_RTX;
-         if (!vec_pat
-             || !(GET_CODE (vec_pat) == ADDR_VEC
-                  || GET_CODE (vec_pat) == ADDR_DIFF_VEC))
+         if (! vec_insn || ! JUMP_TABLE_DATA_P (vec_insn))
            bitmap_set_bit (far_labels, CODE_LABEL_NUMBER (insn));
        }
 
@@ -7048,12 +7044,9 @@ s390_chunkify_start (void)
              /* Find the jump table used by this casesi jump.  */
              rtx vec_label = XEXP (XEXP (XVECEXP (pat, 0, 1), 0), 0);
              rtx vec_insn = next_real_insn (vec_label);
-             rtx vec_pat = vec_insn && JUMP_P (vec_insn) ?
-                           PATTERN (vec_insn) : NULL_RTX;
-             if (vec_pat
-                 && (GET_CODE (vec_pat) == ADDR_VEC
-                     || GET_CODE (vec_pat) == ADDR_DIFF_VEC))
+             if (vec_insn && JUMP_TABLE_DATA_P (vec_insn))
                {
+                 rtx vec_pat = PATTERN (vec_insn);
                  int i, diff_p = GET_CODE (vec_pat) == ADDR_DIFF_VEC;
 
                  for (i = 0; i < XVECLEN (vec_pat, diff_p); i++)
index 44e1e4ce30efe6232620f4f4fef6fa4c60bc7597..d13198b025b42f604d9542d2f7845b96d233fadd 100644 (file)
@@ -5799,7 +5799,7 @@ fixup_addr_diff_vecs (rtx first)
     {
       rtx vec_lab, pat, prev, prevpat, x, braf_label;
 
-      if (!JUMP_P (insn)
+      if (! JUMP_TABLE_DATA_P (insn)
          || GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC)
        continue;
       pat = PATTERN (insn);
@@ -6233,7 +6233,7 @@ sh_reorg (void)
              num_mova = 0;
            }
        }
-      else if (JUMP_P (insn)
+      else if (JUMP_TABLE_DATA_P (insn)
               && GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
               && num_mova
               /* ??? loop invariant motion can also move a mova out of a
@@ -6496,8 +6496,7 @@ split_branches (rtx first)
       }
     else if (JUMP_P (insn)
             /* Don't mess with ADDR_DIFF_VEC */
-            && (GET_CODE (PATTERN (insn)) == SET
-                || GET_CODE (PATTERN (insn)) == RETURN))
+            && ! JUMP_TABLE_DATA_P (insn))
       {
        enum attr_type type = get_attr_type (insn);
        if (type == TYPE_CBRANCH)
index 2d8ec9c89b21a582ab5c34903ae1b5dbb9bb1381..ec5a987342143df5cace070a9557c15fe6f12415 100644 (file)
@@ -2172,8 +2172,7 @@ get_branch_target (rtx branch)
        return gen_rtx_REG (SImode, LINK_REGISTER_REGNUM);
 
       /* jump table */
-      if (GET_CODE (PATTERN (branch)) == ADDR_VEC
-         || GET_CODE (PATTERN (branch)) == ADDR_DIFF_VEC)
+      if (JUMP_TABLE_DATA_P (branch))
        return 0;
 
      /* ASM GOTOs. */
index d25b8e0b7e4b9657ce34ad66ee8d4c6c25c368f7..577d5ebdca456ed99eb92d9780915faa0cefdb68 100644 (file)
@@ -396,7 +396,7 @@ get_attr_length_1 (rtx insn, int (*fallback_fn) (rtx))
 
       case JUMP_INSN:
        body = PATTERN (insn);
-       if (GET_CODE (body) == ADDR_VEC || GET_CODE (body) == ADDR_DIFF_VEC)
+       if (JUMP_TABLE_DATA_P (insn))
          {
            /* Alignment is machine-dependent and should be handled by
               ADDR_VEC_ALIGN.  */
@@ -1020,7 +1020,7 @@ shorten_branches (rtx first)
          int min_align;
          addr_diff_vec_flags flags;
 
-         if (!JUMP_P (insn)
+         if (! JUMP_TABLE_DATA_P (insn)
              || GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC)
            continue;
          pat = PATTERN (insn);
@@ -1094,7 +1094,7 @@ shorten_branches (rtx first)
        continue;
 
       body = PATTERN (insn);
-      if (GET_CODE (body) == ADDR_VEC || GET_CODE (body) == ADDR_DIFF_VEC)
+      if (JUMP_TABLE_DATA_P (insn))
        {
          /* This only takes room if read-only data goes into the text
             section.  */
@@ -1230,7 +1230,8 @@ shorten_branches (rtx first)
          INSN_ADDRESSES (uid) = insn_current_address;
 
 #ifdef CASE_VECTOR_SHORTEN_MODE
-         if (optimize && JUMP_P (insn)
+         if (optimize
+             && JUMP_TABLE_DATA_P (insn)
              && GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC)
            {
              rtx body = PATTERN (insn);
@@ -2404,7 +2405,7 @@ final_scan_insn (rtx insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED,
        /* Detect insns that are really jump-tables
           and output them as such.  */
 
-       if (GET_CODE (body) == ADDR_VEC || GET_CODE (body) == ADDR_DIFF_VEC)
+        if (JUMP_TABLE_DATA_P (insn))
          {
 #if !(defined(ASM_OUTPUT_ADDR_VEC) || defined(ASM_OUTPUT_ADDR_DIFF_VEC))
            int vlen, idx;
index cd9cb855d40e72992932dca83c7a9905e37aab55..d3b7ed67f7bb701067084e2eab1987d0001e6025 100644 (file)
@@ -1915,10 +1915,9 @@ instantiate_virtual_regs (void)
       {
        /* These patterns in the instruction stream can never be recognized.
           Fortunately, they shouldn't contain virtual registers either.  */
-       if (GET_CODE (PATTERN (insn)) == USE
+        if (JUMP_TABLE_DATA_P (insn)
+           || GET_CODE (PATTERN (insn)) == USE
            || GET_CODE (PATTERN (insn)) == CLOBBER
-           || GET_CODE (PATTERN (insn)) == ADDR_VEC
-           || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
            || GET_CODE (PATTERN (insn)) == ASM_INPUT)
          continue;
        else if (DEBUG_INSN_P (insn))
index 0c176f69f48ca19d521c167c200f40dd9638451c..f6bf2fc22a09468bf29091bba810149293bbb917 100644 (file)
@@ -2155,8 +2155,7 @@ insert_insn_end_basic_block (struct expr *expr, basic_block bb)
       /* If this is a jump table, then we can't insert stuff here.  Since
         we know the previous real insn must be the tablejump, we insert
         the new instruction just before the tablejump.  */
-      if (GET_CODE (PATTERN (insn)) == ADDR_VEC
-         || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC)
+      if (JUMP_TABLE_DATA_P (insn))
        insn = prev_active_insn (insn);
 
 #ifdef HAVE_cc0
index 1de006129ed0575727b96b3c3affdc465fef1532..562aeb0f1bf5dcf55897b03f15310a125725f19b 100644 (file)
@@ -1269,12 +1269,12 @@ scan_one_insn (rtx insn)
   int i, k;
   bool counted_mem;
 
-  if (!NONDEBUG_INSN_P (insn))
+  if (!NONDEBUG_INSN_P (insn)
+      || JUMP_TABLE_DATA_P (insn))
     return insn;
 
   pat_code = GET_CODE (PATTERN (insn));
-  if (pat_code == USE || pat_code == CLOBBER || pat_code == ASM_INPUT
-      || pat_code == ADDR_VEC || pat_code == ADDR_DIFF_VEC)
+  if (pat_code == USE || pat_code == CLOBBER || pat_code == ASM_INPUT)
     return insn;
 
   counted_mem = false;
index 9df0bae54c5d508fd16bd2acb07e5da50617ed31..1f88d6bbef7321c2310ca1192dd2729649cd7df5 100644 (file)
@@ -767,10 +767,9 @@ eliminate_regs_in_insn (rtx insn, bool replace_p)
 
   if (icode < 0 && asm_noperands (PATTERN (insn)) < 0 && ! DEBUG_INSN_P (insn))
     {
-      lra_assert (GET_CODE (PATTERN (insn)) == USE
+      lra_assert (JUMP_TABLE_DATA_P (insn)
+                 || GET_CODE (PATTERN (insn)) == USE
                  || GET_CODE (PATTERN (insn)) == CLOBBER
-                 || GET_CODE (PATTERN (insn)) == ADDR_VEC
-                 || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
                  || GET_CODE (PATTERN (insn)) == ASM_INPUT);
       return;
     }
index 9df24b5ba9a885e9eade6d48ef9d4271f0e1d8e9..5c7b0d6cea1edbef757c4ce3949b4bfc6090bbd9 100644 (file)
--- a/gcc/lra.c
+++ b/gcc/lra.c
@@ -1997,10 +1997,9 @@ check_rtl (bool final_p)
   FOR_EACH_BB (bb)
     FOR_BB_INSNS (bb, insn)
     if (NONDEBUG_INSN_P (insn)
+       && ! JUMP_TABLE_DATA_P (insn)
        && GET_CODE (PATTERN (insn)) != USE
        && GET_CODE (PATTERN (insn)) != CLOBBER
-       && GET_CODE (PATTERN (insn)) != ADDR_VEC
-       && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC
        && GET_CODE (PATTERN (insn)) != ASM_INPUT)
       {
        if (final_p)
index cbb945d064ea98cd422eb8c03cd41be036b39ef4..7d6b5ddce4e87d1c2952738fc83b86e9ca6f9ecd 100644 (file)
@@ -3234,10 +3234,9 @@ eliminate_regs_in_insn (rtx insn, int replace)
 
   if (! insn_is_asm && icode < 0)
     {
-      gcc_assert (GET_CODE (PATTERN (insn)) == USE
+      gcc_assert (JUMP_TABLE_DATA_P (insn)
+                 || GET_CODE (PATTERN (insn)) == USE
                  || GET_CODE (PATTERN (insn)) == CLOBBER
-                 || GET_CODE (PATTERN (insn)) == ADDR_VEC
-                 || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
                  || GET_CODE (PATTERN (insn)) == ASM_INPUT
                  || DEBUG_INSN_P (insn));
       if (DEBUG_INSN_P (insn))
@@ -3645,10 +3644,9 @@ elimination_costs_in_insn (rtx insn)
 
   if (! insn_is_asm && icode < 0)
     {
-      gcc_assert (GET_CODE (PATTERN (insn)) == USE
+      gcc_assert (JUMP_TABLE_DATA_P (insn)
+                 || GET_CODE (PATTERN (insn)) == USE
                  || GET_CODE (PATTERN (insn)) == CLOBBER
-                 || GET_CODE (PATTERN (insn)) == ADDR_VEC
-                 || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
                  || GET_CODE (PATTERN (insn)) == ASM_INPUT
                  || DEBUG_INSN_P (insn));
       return;
index c19fb4c4262e6ac10cbc16faeb133f2e077aec28..51a70dc9bfbb315d7f9d43c319d3b465ec62d821 100644 (file)
@@ -2339,9 +2339,7 @@ follow_jumps (rtx label, rtx jump, bool *crossing)
       if (ANY_RETURN_P (this_label))
        return this_label;
       tem = next_active_insn (this_label);
-      if (tem
-         && (GET_CODE (PATTERN (tem)) == ADDR_VEC
-             || GET_CODE (PATTERN (tem)) == ADDR_DIFF_VEC))
+      if (tem && JUMP_TABLE_DATA_P (tem))
        break;
 
       if (!targetm.can_follow_jump (jump, insn))