make LABEL_REF_LABEL a rtx_insn *
authorTrevor Saunders <tbsaunde+gcc@tbsaunde.org>
Fri, 21 Oct 2016 12:32:56 +0000 (12:32 +0000)
committerTrevor Saunders <tbsaunde@gcc.gnu.org>
Fri, 21 Oct 2016 12:32:56 +0000 (12:32 +0000)
While changing LABEL_REF_LABEL it might as well become an inline
function, so that its clearer what types are involved.  Unfortunately
because it is still possible to use XEXP and related macros on a
LABEL_REF rtx you can still set the field to be a non insn rtx.  The
other unfortunate thing is that the generators actually create LABEL_REF
rtx that refer to MATCH_x rtx, so there we actually need to use XEXP to
bypass the checking this patch adds.

gcc/ChangeLog:

2016-10-21  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

* rtl.h (label_ref_label): New function.
(set_label_ref_label): New function.
(LABEL_REF_LABEL): Delete.
* alias.c (rtx_equal_for_memref_p): Adjust.
* cfgbuild.c (make_edges): Likewise.
(purge_dead_tablejump_edges): Likewise.
* cfgexpand.c (convert_debug_memory_address): Likewise.
* cfgrtl.c (patch_jump_insn): Likewise.
* combine.c (distribute_notes): Likewise.
* cse.c (hash_rtx_cb): Likewise.
(exp_equiv_p): Likewise.
(fold_rtx): Likewise.
(check_for_label_ref): Likewise.
* cselib.c (rtx_equal_for_cselib_1): Likewise.
(cselib_hash_rtx): Likewise.
* emit-rtl.c (mark_label_nuses): Likewise.
* explow.c (convert_memory_address_addr_space_1): Likewise.
* final.c (output_asm_label): Likewise.
(output_addr_const): Likewise.
* gcse.c (add_label_notes): Likewise.
* genconfig.c (walk_insn_part): Likewise.
* genrecog.c (validate_pattern): Likewise.
* ifcvt.c (cond_exec_get_condition): Likewise.
(noce_emit_store_flag): Likewise.
(noce_get_alt_condition): Likewise.
(noce_get_condition): Likewise.
* jump.c (maybe_propagate_label_ref): Likewise.
(mark_jump_label_1): Likewise.
(redirect_exp_1): Likewise.
(rtx_renumbered_equal_p): Likewise.
* lra-constraints.c (operands_match_p): Likewise.
* print-rtl.c (print_value): Likewise.
* reload.c (find_reloads): Likewise.
* reload1.c (set_label_offsets): Likewise.
* reorg.c (get_branch_condition): Likewise.
* rtl-tests.c (test_uncond_jump): Likewise.
* rtl.c (rtx_equal_p_cb): Likewise.
(rtx_equal_p): Likewise.
* rtlanal.c (reg_mentioned_p): Likewise.
(rtx_referenced_p): Likewise.
(get_condition): Likewise.
* varasm.c (const_hash_1): Likewise.
(compare_constant): Likewise.
(const_rtx_hash_1): Likewise.
(output_constant_pool_1): Likewise.

From-SVN: r241401

26 files changed:
gcc/ChangeLog
gcc/alias.c
gcc/cfgbuild.c
gcc/cfgexpand.c
gcc/cfgrtl.c
gcc/combine.c
gcc/cse.c
gcc/cselib.c
gcc/emit-rtl.c
gcc/explow.c
gcc/final.c
gcc/gcse.c
gcc/genconfig.c
gcc/genrecog.c
gcc/ifcvt.c
gcc/jump.c
gcc/lra-constraints.c
gcc/print-rtl.c
gcc/reload.c
gcc/reload1.c
gcc/reorg.c
gcc/rtl-tests.c
gcc/rtl.c
gcc/rtl.h
gcc/rtlanal.c
gcc/varasm.c

index 8f7a1b0cb258fde588d6852e31932c4be3754415..c44329da83e5b2ca80b4ac6b3acdaa899e314fe6 100644 (file)
@@ -1,3 +1,51 @@
+2016-10-21  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
+
+       * rtl.h (label_ref_label): New function.
+       (set_label_ref_label): New function.
+       (LABEL_REF_LABEL): Delete.
+       * alias.c (rtx_equal_for_memref_p): Adjust.
+       * cfgbuild.c (make_edges): Likewise.
+       (purge_dead_tablejump_edges): Likewise.
+       * cfgexpand.c (convert_debug_memory_address): Likewise.
+       * cfgrtl.c (patch_jump_insn): Likewise.
+       * combine.c (distribute_notes): Likewise.
+       * cse.c (hash_rtx_cb): Likewise.
+       (exp_equiv_p): Likewise.
+       (fold_rtx): Likewise.
+       (check_for_label_ref): Likewise.
+       * cselib.c (rtx_equal_for_cselib_1): Likewise.
+       (cselib_hash_rtx): Likewise.
+       * emit-rtl.c (mark_label_nuses): Likewise.
+       * explow.c (convert_memory_address_addr_space_1): Likewise.
+       * final.c (output_asm_label): Likewise.
+       (output_addr_const): Likewise.
+       * gcse.c (add_label_notes): Likewise.
+       * genconfig.c (walk_insn_part): Likewise.
+       * genrecog.c (validate_pattern): Likewise.
+       * ifcvt.c (cond_exec_get_condition): Likewise.
+       (noce_emit_store_flag): Likewise.
+       (noce_get_alt_condition): Likewise.
+       (noce_get_condition): Likewise.
+       * jump.c (maybe_propagate_label_ref): Likewise.
+       (mark_jump_label_1): Likewise.
+       (redirect_exp_1): Likewise.
+       (rtx_renumbered_equal_p): Likewise.
+       * lra-constraints.c (operands_match_p): Likewise.
+       * print-rtl.c (print_value): Likewise.
+       * reload.c (find_reloads): Likewise.
+       * reload1.c (set_label_offsets): Likewise.
+       * reorg.c (get_branch_condition): Likewise.
+       * rtl-tests.c (test_uncond_jump): Likewise.
+       * rtl.c (rtx_equal_p_cb): Likewise.
+       (rtx_equal_p): Likewise.
+       * rtlanal.c (reg_mentioned_p): Likewise.
+       (rtx_referenced_p): Likewise.
+       (get_condition): Likewise.
+       * varasm.c (const_hash_1): Likewise.
+       (compare_constant): Likewise.
+       (const_rtx_hash_1): Likewise.
+       (output_constant_pool_1): Likewise.
+
 2016-10-21  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>
 
        PR target/71627
index f4a0a2978c38db8f383ff14e2a02476702c571ba..ca475ff92afcd590ead37161effbef9fd9ca5f07 100644 (file)
@@ -1767,7 +1767,7 @@ rtx_equal_for_memref_p (const_rtx x, const_rtx y)
       return REGNO (x) == REGNO (y);
 
     case LABEL_REF:
-      return LABEL_REF_LABEL (x) == LABEL_REF_LABEL (y);
+      return label_ref_label (x) == label_ref_label (y);
 
     case SYMBOL_REF:
       return compare_base_symbol_refs (x, y) == 1;
index 40c011d9aea9d708e8e045a7cd129edeaf79242e..6c70971528e85b9be9ede803ac70f6918910d2e5 100644 (file)
@@ -275,7 +275,7 @@ make_edges (basic_block min, basic_block max, int update_p)
                  && GET_CODE (SET_SRC (tmp)) == IF_THEN_ELSE
                  && GET_CODE (XEXP (SET_SRC (tmp), 2)) == LABEL_REF)
                make_label_edge (edge_cache, bb,
-                                LABEL_REF_LABEL (XEXP (SET_SRC (tmp), 2)), 0);
+                                label_ref_label (XEXP (SET_SRC (tmp), 2)), 0);
            }
 
          /* If this is a computed jump, then mark it as reaching
@@ -415,7 +415,7 @@ purge_dead_tablejump_edges (basic_block bb, rtx_jump_table_data *table)
        && SET_DEST (tmp) == pc_rtx
        && GET_CODE (SET_SRC (tmp)) == IF_THEN_ELSE
        && GET_CODE (XEXP (SET_SRC (tmp), 2)) == LABEL_REF)
-    mark_tablejump_edge (LABEL_REF_LABEL (XEXP (SET_SRC (tmp), 2)));
+    mark_tablejump_edge (label_ref_label (XEXP (SET_SRC (tmp), 2)));
 
   for (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); )
     {
index 1fce43017efe2b990dd4d79ad0b46863e792dc7a..430ad38f09604c3b2e3c01f26808d0a25462758a 100644 (file)
@@ -3999,7 +3999,7 @@ convert_debug_memory_address (machine_mode mode, rtx x,
            return SUBREG_REG (x);
          break;
        case LABEL_REF:
-         temp = gen_rtx_LABEL_REF (mode, LABEL_REF_LABEL (x));
+         temp = gen_rtx_LABEL_REF (mode, label_ref_label (x));
          LABEL_REF_NONLOCAL_P (temp) = LABEL_REF_NONLOCAL_P (x);
          return temp;
        case SYMBOL_REF:
index c1f0322a60116ac7e98ecb7761cf2fc896b53fd0..67cab7133ce14ca07d7bedde109ddeb1b04db21e 100644 (file)
@@ -1201,7 +1201,7 @@ patch_jump_insn (rtx_insn *insn, rtx_insn *old_label, basic_block new_bb)
          && SET_DEST (tmp) == pc_rtx
          && GET_CODE (SET_SRC (tmp)) == IF_THEN_ELSE
          && GET_CODE (XEXP (SET_SRC (tmp), 2)) == LABEL_REF
-         && LABEL_REF_LABEL (XEXP (SET_SRC (tmp), 2)) == old_label)
+         && label_ref_label (XEXP (SET_SRC (tmp), 2)) == old_label)
        {
          XEXP (SET_SRC (tmp), 2) = gen_rtx_LABEL_REF (Pmode,
                                                       new_label);
index 272768398b4ab58ca6842cba120855c4bba7f5ca..64413b4436ebcf238ec543ba86f95030cb9cca97 100644 (file)
@@ -13874,14 +13874,14 @@ distribute_notes (rtx notes, rtx_insn *from_insn, rtx_insn *i3, rtx_insn *i2,
          if (reg_mentioned_p (XEXP (note, 0), PATTERN (i3))
              || ((tem_note = find_reg_note (i3, REG_EQUAL, NULL_RTX))
                  && GET_CODE (XEXP (tem_note, 0)) == LABEL_REF
-                 && LABEL_REF_LABEL (XEXP (tem_note, 0)) == XEXP (note, 0)))
+                 && label_ref_label (XEXP (tem_note, 0)) == XEXP (note, 0)))
            place = i3;
 
          if (i2
              && (reg_mentioned_p (XEXP (note, 0), PATTERN (i2))
                  || ((tem_note = find_reg_note (i2, REG_EQUAL, NULL_RTX))
                      && GET_CODE (XEXP (tem_note, 0)) == LABEL_REF
-                     && LABEL_REF_LABEL (XEXP (tem_note, 0)) == XEXP (note, 0))))
+                     && label_ref_label (XEXP (tem_note, 0)) == XEXP (note, 0))))
            {
              if (place)
                place2 = i2;
index 8b9e4a116ac6c3b54435aeaa9213caec2b8172c2..4b3cd2e1df4a47db580a640e0473c6e3aaeac32e 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -2365,7 +2365,7 @@ hash_rtx_cb (const_rtx x, machine_mode mode,
       /* We don't hash on the address of the CODE_LABEL to avoid bootstrap
         differences and differences between each stage's debugging dumps.  */
         hash += (((unsigned int) LABEL_REF << 7)
-                 + CODE_LABEL_NUMBER (LABEL_REF_LABEL (x)));
+                 + CODE_LABEL_NUMBER (label_ref_label (x)));
       return hash;
 
     case SYMBOL_REF:
@@ -2618,7 +2618,7 @@ exp_equiv_p (const_rtx x, const_rtx y, int validate, bool for_gcse)
       return x == y;
 
     case LABEL_REF:
-      return LABEL_REF_LABEL (x) == LABEL_REF_LABEL (y);
+      return label_ref_label (x) == label_ref_label (y);
 
     case SYMBOL_REF:
       return XSTR (x, 0) == XSTR (y, 0);
@@ -3507,7 +3507,7 @@ fold_rtx (rtx x, rtx_insn *insn)
                : lookup_as_function (folded_arg0, MINUS);
 
              if (y != 0 && GET_CODE (XEXP (y, 1)) == LABEL_REF
-                 && LABEL_REF_LABEL (XEXP (y, 1)) == LABEL_REF_LABEL (const_arg1))
+                 && label_ref_label (XEXP (y, 1)) == label_ref_label (const_arg1))
                return XEXP (y, 0);
 
              /* Now try for a CONST of a MINUS like the above.  */
@@ -3515,7 +3515,7 @@ fold_rtx (rtx x, rtx_insn *insn)
                        : lookup_as_function (folded_arg0, CONST))) != 0
                  && GET_CODE (XEXP (y, 0)) == MINUS
                  && GET_CODE (XEXP (XEXP (y, 0), 1)) == LABEL_REF
-                 && LABEL_REF_LABEL (XEXP (XEXP (y, 0), 1)) == LABEL_REF_LABEL (const_arg1))
+                 && label_ref_label (XEXP (XEXP (y, 0), 1)) == label_ref_label (const_arg1))
                return XEXP (XEXP (y, 0), 0);
            }
 
@@ -3527,7 +3527,7 @@ fold_rtx (rtx x, rtx_insn *insn)
                : lookup_as_function (folded_arg1, MINUS);
 
              if (y != 0 && GET_CODE (XEXP (y, 1)) == LABEL_REF
-                 && LABEL_REF_LABEL (XEXP (y, 1)) == LABEL_REF_LABEL (const_arg0))
+                 && label_ref_label (XEXP (y, 1)) == label_ref_label (const_arg0))
                return XEXP (y, 0);
 
              /* Now try for a CONST of a MINUS like the above.  */
@@ -3535,7 +3535,7 @@ fold_rtx (rtx x, rtx_insn *insn)
                        : lookup_as_function (folded_arg1, CONST))) != 0
                  && GET_CODE (XEXP (y, 0)) == MINUS
                  && GET_CODE (XEXP (XEXP (y, 0), 1)) == LABEL_REF
-                 && LABEL_REF_LABEL (XEXP (XEXP (y, 0), 1)) == LABEL_REF_LABEL (const_arg0))
+                 && label_ref_label (XEXP (XEXP (y, 0), 1)) == label_ref_label (const_arg0))
                return XEXP (XEXP (y, 0), 0);
            }
 
@@ -6497,10 +6497,10 @@ check_for_label_ref (rtx_insn *insn)
       if (GET_CODE (x) == LABEL_REF
          && !LABEL_REF_NONLOCAL_P (x)
          && (!JUMP_P (insn)
-             || !label_is_jump_target_p (LABEL_REF_LABEL (x), insn))
-         && LABEL_P (LABEL_REF_LABEL (x))
-         && INSN_UID (LABEL_REF_LABEL (x)) != 0
-         && !find_reg_note (insn, REG_LABEL_OPERAND, LABEL_REF_LABEL (x)))
+             || !label_is_jump_target_p (label_ref_label (x), insn))
+         && LABEL_P (label_ref_label (x))
+         && INSN_UID (label_ref_label (x)) != 0
+         && !find_reg_note (insn, REG_LABEL_OPERAND, label_ref_label (x)))
        return true;
     }
   return false;
index 3e1e9e75a2e52470cbd4c07f282eb596f90d74a7..a35dca8d79e458e65df3663f9d741de2f9cc6bce 100644 (file)
@@ -945,7 +945,7 @@ rtx_equal_for_cselib_1 (rtx x, rtx y, machine_mode memmode)
       return rtx_equal_p (ENTRY_VALUE_EXP (x), ENTRY_VALUE_EXP (y));
 
     case LABEL_REF:
-      return LABEL_REF_LABEL (x) == LABEL_REF_LABEL (y);
+      return label_ref_label (x) == label_ref_label (y);
 
     case REG:
       return REGNO (x) == REGNO (y);
@@ -1154,7 +1154,7 @@ cselib_hash_rtx (rtx x, int create, machine_mode memmode)
       /* We don't hash on the address of the CODE_LABEL to avoid bootstrap
         differences and differences between each stage's debugging dumps.  */
       hash += (((unsigned int) LABEL_REF << 7)
-              + CODE_LABEL_NUMBER (LABEL_REF_LABEL (x)));
+              + CODE_LABEL_NUMBER (label_ref_label (x)));
       return hash ? hash : (unsigned int) LABEL_REF;
 
     case SYMBOL_REF:
index 387438ce7f892bcee07c93e6905e79211525efc4..8afcfbec98a6a87fad7bff66c643ec7956c08879 100644 (file)
@@ -3601,8 +3601,8 @@ mark_label_nuses (rtx x)
   const char *fmt;
 
   code = GET_CODE (x);
-  if (code == LABEL_REF && LABEL_P (LABEL_REF_LABEL (x)))
-    LABEL_NUSES (LABEL_REF_LABEL (x))++;
+  if (code == LABEL_REF && LABEL_P (label_ref_label (x)))
+    LABEL_NUSES (label_ref_label (x))++;
 
   fmt = GET_RTX_FORMAT (code);
   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
index 1c59c862f93722639d0a702e246d397de692a532..b65eee6e9218aaec6e598e79ccc26e9797e2b847 100644 (file)
@@ -321,7 +321,7 @@ convert_memory_address_addr_space_1 (machine_mode to_mode ATTRIBUTE_UNUSED,
       break;
 
     case LABEL_REF:
-      temp = gen_rtx_LABEL_REF (to_mode, LABEL_REF_LABEL (x));
+      temp = gen_rtx_LABEL_REF (to_mode, label_ref_label (x));
       LABEL_REF_NONLOCAL_P (temp) = LABEL_REF_NONLOCAL_P (x);
       return temp;
 
index 52d1589ad6ff116f8e70a4d9d17c499bc9309711..36ef755aec822ece44e7b9163a738e5d3c66bfaa 100644 (file)
@@ -3826,7 +3826,7 @@ output_asm_label (rtx x)
   char buf[256];
 
   if (GET_CODE (x) == LABEL_REF)
-    x = LABEL_REF_LABEL (x);
+    x = label_ref_label (x);
   if (LABEL_P (x)
       || (NOTE_P (x)
          && NOTE_KIND (x) == NOTE_INSN_DELETED_LABEL))
@@ -3917,7 +3917,7 @@ output_addr_const (FILE *file, rtx x)
       break;
 
     case LABEL_REF:
-      x = LABEL_REF_LABEL (x);
+      x = label_ref_label (x);
       /* Fall through.  */
     case CODE_LABEL:
       ASM_GENERATE_INTERNAL_LABEL (buf, "L", CODE_LABEL_NUMBER (x));
index 9e396fea581a08751533674de490f2bb9e4868f4..652ee911e5b44ee81e8707ad33673e235971f46a 100644 (file)
@@ -2643,10 +2643,10 @@ add_label_notes (rtx x, rtx_insn *insn)
         such a LABEL_REF, so we don't have to handle REG_LABEL_TARGET
         notes.  */
       gcc_assert (!JUMP_P (insn));
-      add_reg_note (insn, REG_LABEL_OPERAND, LABEL_REF_LABEL (x));
+      add_reg_note (insn, REG_LABEL_OPERAND, label_ref_label (x));
 
-      if (LABEL_P (LABEL_REF_LABEL (x)))
-       LABEL_NUSES (LABEL_REF_LABEL (x))++;
+      if (LABEL_P (label_ref_label (x)))
+       LABEL_NUSES (label_ref_label (x))++;
 
       return;
     }
index fec80fd00b6a9766f0866b3dd9ac9298f3710019..888fa3a39e81a43627510bfdecb9e9fb29021437 100644 (file)
@@ -94,8 +94,8 @@ walk_insn_part (rtx part, int recog_p, int non_pc_set_src)
       break;
 
     case LABEL_REF:
-      if (GET_CODE (LABEL_REF_LABEL (part)) == MATCH_OPERAND
-         || GET_CODE (LABEL_REF_LABEL (part)) == MATCH_DUP)
+      if (GET_CODE (XEXP (part, 0)) == MATCH_OPERAND
+         || GET_CODE (XEXP (part, 0)) == MATCH_DUP)
        break;
       return;
 
index 4277a9c920350060cf6053893ef29ba820159e08..a8e8c22340cafd939ec2d06da39921b9c8fe1bda 100644 (file)
@@ -732,9 +732,9 @@ validate_pattern (rtx pattern, md_rtx_info *info, rtx set, int set_code)
       return;
 
     case LABEL_REF:
-      if (GET_MODE (LABEL_REF_LABEL (pattern)) != VOIDmode)
+      if (GET_MODE (XEXP (pattern, 0)) != VOIDmode)
        error_at (info->loc, "operand to label_ref %smode not VOIDmode",
-                 GET_MODE_NAME (GET_MODE (LABEL_REF_LABEL (pattern))));
+                 GET_MODE_NAME (GET_MODE (XEXP (pattern, 0))));
       break;
 
     default:
index 68c7c3f7664744d2c27632442462f0afac846855..dbe2485987019e06022f59b365924ae62ed94d57 100644 (file)
@@ -436,7 +436,7 @@ cond_exec_get_condition (rtx_insn *jump)
   /* If this branches to JUMP_LABEL when the condition is false,
      reverse the condition.  */
   if (GET_CODE (XEXP (test_if, 2)) == LABEL_REF
-      && LABEL_REF_LABEL (XEXP (test_if, 2)) == JUMP_LABEL (jump))
+      && label_ref_label (XEXP (test_if, 2)) == JUMP_LABEL (jump))
     {
       enum rtx_code rev = reversed_comparison_code (cond, jump);
       if (rev == UNKNOWN)
@@ -881,7 +881,7 @@ noce_emit_store_flag (struct noce_if_info *if_info, rtx x, int reversep,
       rtx set = pc_set (if_info->jump);
       cond = XEXP (SET_SRC (set), 0);
       if (GET_CODE (XEXP (SET_SRC (set), 2)) == LABEL_REF
-         && LABEL_REF_LABEL (XEXP (SET_SRC (set), 2)) == JUMP_LABEL (if_info->jump))
+         && label_ref_label (XEXP (SET_SRC (set), 2)) == JUMP_LABEL (if_info->jump))
        reversep = !reversep;
       if (if_info->then_else_reversed)
        reversep = !reversep;
@@ -2348,7 +2348,7 @@ noce_get_alt_condition (struct noce_if_info *if_info, rtx target,
   cond = XEXP (SET_SRC (set), 0);
   reverse
     = GET_CODE (XEXP (SET_SRC (set), 2)) == LABEL_REF
-      && LABEL_REF_LABEL (XEXP (SET_SRC (set), 2)) == JUMP_LABEL (if_info->jump);
+      && label_ref_label (XEXP (SET_SRC (set), 2)) == JUMP_LABEL (if_info->jump);
   if (if_info->then_else_reversed)
     reverse = !reverse;
 
@@ -2955,7 +2955,7 @@ noce_get_condition (rtx_insn *jump, rtx_insn **earliest, bool then_else_reversed
   /* If this branches to JUMP_LABEL when the condition is false,
      reverse the condition.  */
   reverse = (GET_CODE (XEXP (SET_SRC (set), 2)) == LABEL_REF
-            && LABEL_REF_LABEL (XEXP (SET_SRC (set), 2)) == JUMP_LABEL (jump));
+            && label_ref_label (XEXP (SET_SRC (set), 2)) == JUMP_LABEL (jump));
 
   /* We may have to reverse because the caller's if block is not canonical,
      i.e. the THEN block isn't the fallthrough block for the TEST block
index e4bb93ff5eb6cc724eea113e9c414f30af27b110..fafef05f5b276330029666a0ba950de09c63807b 100644 (file)
@@ -284,7 +284,7 @@ maybe_propagate_label_ref (rtx_insn *jump_insn, rtx_insn *prev_nonjump_insn)
             CODE_LABEL in the LABEL_REF of the "set".  We can
             conveniently use it for the marker function, which
             requires a LABEL_REF wrapping.  */
-         gcc_assert (XEXP (label_note, 0) == LABEL_REF_LABEL (SET_SRC (label_set)));
+         gcc_assert (XEXP (label_note, 0) == label_ref_label (SET_SRC (label_set)));
 
          mark_jump_label_1 (label_set, jump_insn, false, true);
 
@@ -1151,7 +1151,7 @@ mark_jump_label_1 (rtx x, rtx_insn *insn, bool in_mem, bool is_target)
 
     case LABEL_REF:
       {
-       rtx label = LABEL_REF_LABEL (x);
+       rtx_insn *label = label_ref_label (x);
 
        /* Ignore remaining references to unreachable labels that
           have been deleted.  */
@@ -1165,7 +1165,7 @@ mark_jump_label_1 (rtx x, rtx_insn *insn, bool in_mem, bool is_target)
        if (LABEL_REF_NONLOCAL_P (x))
          break;
 
-       LABEL_REF_LABEL (x) = label;
+       set_label_ref_label (x, label);
        if (! insn || ! insn->deleted ())
          ++LABEL_NUSES (label);
 
@@ -1464,7 +1464,7 @@ redirect_exp_1 (rtx *loc, rtx olabel, rtx nlabel, rtx insn)
   int i;
   const char *fmt;
 
-  if ((code == LABEL_REF && LABEL_REF_LABEL (x) == olabel)
+  if ((code == LABEL_REF && label_ref_label (x) == olabel)
       || x == olabel)
     {
       x = redirect_target (nlabel);
@@ -1477,7 +1477,7 @@ redirect_exp_1 (rtx *loc, rtx olabel, rtx nlabel, rtx insn)
   if (code == SET && SET_DEST (x) == pc_rtx
       && ANY_RETURN_P (nlabel)
       && GET_CODE (SET_SRC (x)) == LABEL_REF
-      && LABEL_REF_LABEL (SET_SRC (x)) == olabel)
+      && label_ref_label (SET_SRC (x)) == olabel)
     {
       validate_change (insn, loc, nlabel, 1);
       return;
@@ -1801,16 +1801,14 @@ rtx_renumbered_equal_p (const_rtx x, const_rtx y)
     case LABEL_REF:
       /* We can't assume nonlocal labels have their following insns yet.  */
       if (LABEL_REF_NONLOCAL_P (x) || LABEL_REF_NONLOCAL_P (y))
-       return LABEL_REF_LABEL (x) == LABEL_REF_LABEL (y);
+       return label_ref_label (x) == label_ref_label (y);
 
       /* Two label-refs are equivalent if they point at labels
         in the same position in the instruction stream.  */
       else
        {
-         rtx_insn *xi = next_nonnote_nondebug_insn
-           (as_a<rtx_insn *> (LABEL_REF_LABEL (x)));
-         rtx_insn *yi = next_nonnote_nondebug_insn
-           (as_a<rtx_insn *> (LABEL_REF_LABEL (y)));
+         rtx_insn *xi = next_nonnote_nondebug_insn (label_ref_label (x));
+         rtx_insn *yi = next_nonnote_nondebug_insn (label_ref_label (y));
          while (xi && LABEL_P (xi))
            xi = next_nonnote_nondebug_insn (xi);
          while (yi && LABEL_P (yi))
index 117d84dc837fb16c075a55bba34ef5698ace07b8..b592168f00104a5b9649e3eb47e4544e78a59f8e 100644 (file)
@@ -739,7 +739,7 @@ operands_match_p (rtx x, rtx y, int y_hard_regno)
       return false;
 
     case LABEL_REF:
-      return LABEL_REF_LABEL (x) == LABEL_REF_LABEL (y);
+      return label_ref_label (x) == label_ref_label (y);
     case SYMBOL_REF:
       return XSTR (x, 0) == XSTR (y, 0);
 
index 46f3c4dc070381f7d776496ec8fff78dfc9cb8f9..e812745d9450096af236242e93235f7f03736a64 100644 (file)
@@ -1432,7 +1432,7 @@ print_value (pretty_printer *pp, const_rtx x, int verbose)
       pp_printf (pp, "`%s'", XSTR (x, 0));
       break;
     case LABEL_REF:
-      pp_printf (pp, "L%d", INSN_UID (LABEL_REF_LABEL (x)));
+      pp_printf (pp, "L%d", INSN_UID (label_ref_label (x)));
       break;
     case CONST:
     case HIGH:
index 651755298ab828764c540f5032bb466762bb9083..3ec4b310f50f92af84e184907e63e97eed28fcec 100644 (file)
@@ -2318,7 +2318,7 @@ operands_match_p (rtx x, rtx y)
       return 0;
 
     case LABEL_REF:
-      return LABEL_REF_LABEL (x) == LABEL_REF_LABEL (y);
+      return label_ref_label (x) == label_ref_label (y);
     case SYMBOL_REF:
       return XSTR (x, 0) == XSTR (y, 0);
 
@@ -4218,17 +4218,17 @@ find_reloads (rtx_insn *insn, int replace, int ind_levels, int live_known,
             this instruction.  */
          if (GET_CODE (substitution) == LABEL_REF
              && !find_reg_note (insn, REG_LABEL_OPERAND,
-                                LABEL_REF_LABEL (substitution))
+                                label_ref_label (substitution))
              /* For a JUMP_P, if it was a branch target it must have
                 already been recorded as such.  */
              && (!JUMP_P (insn)
-                 || !label_is_jump_target_p (LABEL_REF_LABEL (substitution),
+                 || !label_is_jump_target_p (label_ref_label (substitution),
                                              insn)))
            {
              add_reg_note (insn, REG_LABEL_OPERAND,
-                           LABEL_REF_LABEL (substitution));
-             if (LABEL_P (LABEL_REF_LABEL (substitution)))
-               ++LABEL_NUSES (LABEL_REF_LABEL (substitution));
+                           label_ref_label (substitution));
+             if (LABEL_P (label_ref_label (substitution)))
+               ++LABEL_NUSES (label_ref_label (substitution));
            }
 
        }
index 89da84d000714de60ad00d7c5bc1cf19b1ed669c..4b9c7c7dcaff7ef5a5a27f850f1755bdb0b35e3d 100644 (file)
@@ -2319,7 +2319,7 @@ set_label_offsets (rtx x, rtx_insn *insn, int initial_p)
       if (LABEL_REF_NONLOCAL_P (x))
        return;
 
-      x = LABEL_REF_LABEL (x);
+      x = label_ref_label (x);
 
       /* fall through */
 
@@ -2421,13 +2421,13 @@ set_label_offsets (rtx x, rtx_insn *insn, int initial_p)
        case IF_THEN_ELSE:
          tem = XEXP (SET_SRC (x), 1);
          if (GET_CODE (tem) == LABEL_REF)
-           set_label_offsets (LABEL_REF_LABEL (tem), insn, initial_p);
+           set_label_offsets (label_ref_label (tem), insn, initial_p);
          else if (GET_CODE (tem) != PC && GET_CODE (tem) != RETURN)
            break;
 
          tem = XEXP (SET_SRC (x), 2);
          if (GET_CODE (tem) == LABEL_REF)
-           set_label_offsets (LABEL_REF_LABEL (tem), insn, initial_p);
+           set_label_offsets (label_ref_label (tem), insn, initial_p);
          else if (GET_CODE (tem) != PC && GET_CODE (tem) != RETURN)
            break;
          return;
index 2ad3a4e8db6ab5ed7c5b4ee4ab63d54d7e0a9677..799d27b064f3ca3e63ab0bc19d8e953ca2f3f664 100644 (file)
@@ -878,20 +878,20 @@ get_branch_condition (const rtx_insn *insn, rtx target)
     return 0;
 
   src = SET_SRC (pat);
-  if (GET_CODE (src) == LABEL_REF && LABEL_REF_LABEL (src) == target)
+  if (GET_CODE (src) == LABEL_REF && label_ref_label (src) == target)
     return const_true_rtx;
 
   else if (GET_CODE (src) == IF_THEN_ELSE
           && XEXP (src, 2) == pc_rtx
           && ((GET_CODE (XEXP (src, 1)) == LABEL_REF
-               && LABEL_REF_LABEL (XEXP (src, 1)) == target)
+               && label_ref_label (XEXP (src, 1)) == target)
               || (ANY_RETURN_P (XEXP (src, 1)) && XEXP (src, 1) == target)))
     return XEXP (src, 0);
 
   else if (GET_CODE (src) == IF_THEN_ELSE
           && XEXP (src, 1) == pc_rtx
           && ((GET_CODE (XEXP (src, 2)) == LABEL_REF
-               && LABEL_REF_LABEL (XEXP (src, 2)) == target)
+               && label_ref_label (XEXP (src, 2)) == target)
               || (ANY_RETURN_P (XEXP (src, 2)) && XEXP (src, 2) == target)))
     {
       enum rtx_code rev;
index 723efa5a0f61fc5fa3c589e32e639cd4e412db10..da31fd2e45d41be2f242eabc21490030af1564a6 100644 (file)
@@ -87,7 +87,7 @@ test_uncond_jump ()
                                                 label));
   ASSERT_EQ (SET, jump_pat->code);
   ASSERT_EQ (LABEL_REF, SET_SRC (jump_pat)->code);
-  ASSERT_EQ (label, LABEL_REF_LABEL (SET_SRC (jump_pat)));
+  ASSERT_EQ (label, label_ref_label (SET_SRC (jump_pat)));
   ASSERT_EQ (PC, SET_DEST (jump_pat)->code);
 
   verify_print_pattern ("pc=L0", jump_pat);
index a445cdca0c31171f36606fd1f70114987ba76803..3fac1931f3ff8ec869f3c284c5d7ec27d36cae0c 100644 (file)
--- a/gcc/rtl.c
+++ b/gcc/rtl.c
@@ -424,7 +424,7 @@ rtx_equal_p_cb (const_rtx x, const_rtx y, rtx_equal_p_callback_function cb)
       return (REGNO (x) == REGNO (y));
 
     case LABEL_REF:
-      return LABEL_REF_LABEL (x) == LABEL_REF_LABEL (y);
+      return label_ref_label (x) == label_ref_label (y);
 
     case SYMBOL_REF:
       return XSTR (x, 0) == XSTR (y, 0);
@@ -561,7 +561,7 @@ rtx_equal_p (const_rtx x, const_rtx y)
       return (REGNO (x) == REGNO (y));
 
     case LABEL_REF:
-      return LABEL_REF_LABEL (x) == LABEL_REF_LABEL (y);
+      return label_ref_label (x) == label_ref_label (y);
 
     case SYMBOL_REF:
       return XSTR (x, 0) == XSTR (y, 0);
index 68d96fcbb3db0e0aae8dca993c88c3eb8749110a..9b223c9dcee7e4f372f921cd541fd5fb7866b8a6 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -1767,8 +1767,19 @@ inline void rtx_jump_insn::set_jump_target (rtx_code_label *target)
 #define LABEL_REFS(LABEL) XCEXP (LABEL, 3, CODE_LABEL)
 
 /* Get the label that a LABEL_REF references.  */
-#define LABEL_REF_LABEL(LABREF) XCEXP (LABREF, 0, LABEL_REF)
+static inline rtx_insn *
+label_ref_label (const_rtx ref)
+{
+  return as_a<rtx_insn *> (XCEXP (ref, 0, LABEL_REF));
+}
+
+/* Set the label that LABEL_REF ref refers to.  */
 
+static inline void
+set_label_ref_label (rtx ref, rtx_insn *label)
+{
+  XCEXP (ref, 0, LABEL_REF) = label;
+}
 \f
 /* For a REG rtx, REGNO extracts the register number.  REGNO can only
    be used on RHS.  Use SET_REGNO to change the value.  */
index d2b38d19c1e72e404295ff66bf51700b034009ee..90b55b6adf0f395583a27208a5169210c829bb1e 100644 (file)
@@ -1001,7 +1001,7 @@ reg_mentioned_p (const_rtx reg, const_rtx in)
     return 1;
 
   if (GET_CODE (in) == LABEL_REF)
-    return reg == LABEL_REF_LABEL (in);
+    return reg == label_ref_label (in);
 
   code = GET_CODE (in);
 
@@ -3085,7 +3085,7 @@ rtx_referenced_p (const_rtx x, const_rtx body)
        /* Check if a label_ref Y refers to label X.  */
        if (GET_CODE (y) == LABEL_REF
            && LABEL_P (x)
-           && LABEL_REF_LABEL (y) == x)
+           && label_ref_label (y) == x)
          return true;
 
        if (rtx_equal_p (x, y))
@@ -5547,7 +5547,7 @@ get_condition (rtx_insn *jump, rtx_insn **earliest, int allow_cc_mode,
      the condition.  */
   reverse
     = GET_CODE (XEXP (SET_SRC (set), 2)) == LABEL_REF
-      && LABEL_REF_LABEL (XEXP (SET_SRC (set), 2)) == JUMP_LABEL (jump);
+      && label_ref_label (XEXP (SET_SRC (set), 2)) == JUMP_LABEL (jump);
 
   return canonicalize_condition (jump, cond, reverse, earliest, NULL_RTX,
                                 allow_cc_mode, valid_at_insn_p);
index 30fbbc5969b81cc266bd81304df285aaadf19ac3..6a7ffc22e2239c76fac267e9ef8abdb04c76c15f 100644 (file)
@@ -2983,7 +2983,7 @@ const_hash_1 (const tree exp)
 
          case LABEL_REF:
            hi = (value.offset
-                 + CODE_LABEL_NUMBER (LABEL_REF_LABEL (value.base)) * 13);
+                 + CODE_LABEL_NUMBER (label_ref_label (value.base)) * 13);
            break;
 
          default:
@@ -3172,8 +3172,8 @@ compare_constant (const tree t1, const tree t2)
            break;
 
          case LABEL_REF:
-           ret = (CODE_LABEL_NUMBER (LABEL_REF_LABEL (value1.base))
-                  == CODE_LABEL_NUMBER (LABEL_REF_LABEL (value2.base)));
+           ret = (CODE_LABEL_NUMBER (label_ref_label (value1.base))
+                  == CODE_LABEL_NUMBER (label_ref_label (value2.base)));
            break;
 
          default:
@@ -3611,7 +3611,7 @@ const_rtx_hash_1 (const_rtx x)
       break;
 
     case LABEL_REF:
-      h = h * 251 + CODE_LABEL_NUMBER (LABEL_REF_LABEL (x));
+      h = h * 251 + CODE_LABEL_NUMBER (label_ref_label (x));
       break;
 
     case UNSPEC:
@@ -3893,11 +3893,13 @@ output_constant_pool_1 (struct constant_descriptor_rtx *desc,
       /* FALLTHRU  */
 
     case LABEL_REF:
-      tmp = LABEL_REF_LABEL (tmp);
-      gcc_assert (!as_a<rtx_insn *> (tmp)->deleted ());
-      gcc_assert (!NOTE_P (tmp)
-                 || NOTE_KIND (tmp) != NOTE_INSN_DELETED);
-      break;
+      {
+       rtx_insn *insn = label_ref_label (tmp);
+       gcc_assert (!insn->deleted ());
+       gcc_assert (!NOTE_P (insn)
+                   || NOTE_KIND (insn) != NOTE_INSN_DELETED);
+       break;
+      }
 
     default:
       break;