On Thu, Sep 11, 2014 at 2:37 AM, David Malcolm <dmalc...@redhat.com> wrote:
> The following patch adds a macro:
>
>   /* Get the label that a LABEL_REF references.  */
>   #define LABEL_REF_LABEL(LABREF) XCEXP (LABREF, 0, LABEL_REF)
>
> and uses it in place of XEXP (foo, 0) for "foo" known to be a
> LABEL_REF, throughout the "gcc" directory, in the hope of
> (A) improving the clarity of the code
> (B) perhaps making it easier to make things typesafe in future patches.
>
> It's rather verbose compared to XEXP (x, 0), but I think it's clearer,
> and easier to grep for.  Maybe "LABEL_REF_LAB"?
>
> I haven't gone through the config subfirectories yet.
>
> Bootstrapped on x86_64-unknown-linux-gnu (Fedora 20), and has been
> rebuilt as part of a config-list.mk build for all working
> configurations.
>
> OK for trunk?

Ok.

Thanks,
Richard.

> gcc/ChangeLog:
>         * rtl.h (LABEL_REF_LABEL): New macro.
>
>         * alias.c (rtx_equal_for_memref_p): Use LABEL_REF_LABEL in place
>         of XEXP (, 0), where we know that we have a LABEL_REF.
>         * 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): 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.
>         * reload.c (operands_match_p): Likewise.
>         (find_reloads): Likewise.
>         * reload1.c (set_label_offsets): Likewise.
>         * reorg.c (get_branch_condition): 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.
>         * sched-vis.c (print_value): Likewise.
>         * varasm.c (const_hash_1): Likewise.
>         (compare_constant): Likewise.
>         (const_rtx_hash_1): Likewise.
>         (output_constant_pool_1): Likewise.
> ---
>  gcc/alias.c           |  2 +-
>  gcc/cfgbuild.c        |  4 ++--
>  gcc/cfgexpand.c       |  2 +-
>  gcc/cfgrtl.c          |  2 +-
>  gcc/combine.c         |  4 ++--
>  gcc/cse.c             | 20 ++++++++++----------
>  gcc/cselib.c          |  4 ++--
>  gcc/emit-rtl.c        |  4 ++--
>  gcc/explow.c          |  2 +-
>  gcc/final.c           |  4 ++--
>  gcc/gcse.c            |  6 +++---
>  gcc/genconfig.c       |  4 ++--
>  gcc/genrecog.c        |  4 ++--
>  gcc/ifcvt.c           |  8 ++++----
>  gcc/jump.c            | 16 ++++++++--------
>  gcc/lra-constraints.c |  2 +-
>  gcc/reload.c          | 13 +++++++------
>  gcc/reload1.c         |  6 +++---
>  gcc/reorg.c           |  6 +++---
>  gcc/rtl.c             |  4 ++--
>  gcc/rtl.h             |  4 ++++
>  gcc/rtlanal.c         |  8 +++++---
>  gcc/sched-vis.c       |  2 +-
>  gcc/varasm.c          | 11 ++++++-----
>  24 files changed, 75 insertions(+), 67 deletions(-)
>
> diff --git a/gcc/alias.c b/gcc/alias.c
> index 602e9e0..a098cb7 100644
> --- a/gcc/alias.c
> +++ b/gcc/alias.c
> @@ -1521,7 +1521,7 @@ rtx_equal_for_memref_p (const_rtx x, const_rtx y)
>        return REGNO (x) == REGNO (y);
>
>      case LABEL_REF:
> -      return XEXP (x, 0) == XEXP (y, 0);
> +      return LABEL_REF_LABEL (x) == LABEL_REF_LABEL (y);
>
>      case SYMBOL_REF:
>        return XSTR (x, 0) == XSTR (y, 0);
> diff --git a/gcc/cfgbuild.c b/gcc/cfgbuild.c
> index e5ac8d6..00dab3e 100644
> --- a/gcc/cfgbuild.c
> +++ b/gcc/cfgbuild.c
> @@ -277,7 +277,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,
> -                                XEXP (XEXP (SET_SRC (tmp), 2), 0), 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 (XEXP (XEXP (SET_SRC (tmp), 2), 0));
> +    mark_tablejump_edge (LABEL_REF_LABEL (XEXP (SET_SRC (tmp), 2)));
>
>    for (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); )
>      {
> diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
> index 8916305..f95981b 100644
> --- a/gcc/cfgexpand.c
> +++ b/gcc/cfgexpand.c
> @@ -3624,7 +3624,7 @@ convert_debug_memory_address (enum machine_mode mode, 
> rtx x,
>             return SUBREG_REG (x);
>           break;
>         case LABEL_REF:
> -         temp = gen_rtx_LABEL_REF (mode, XEXP (x, 0));
> +         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:
> diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
> index bc6c965..04c7d63 100644
> --- a/gcc/cfgrtl.c
> +++ b/gcc/cfgrtl.c
> @@ -1202,7 +1202,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
> -         && XEXP (XEXP (SET_SRC (tmp), 2), 0) == old_label)
> +         && LABEL_REF_LABEL (XEXP (SET_SRC (tmp), 2)) == old_label)
>         {
>           XEXP (SET_SRC (tmp), 2) = gen_rtx_LABEL_REF (Pmode,
>                                                        new_label);
> diff --git a/gcc/combine.c b/gcc/combine.c
> index 0ec7f85..151e948 100644
> --- a/gcc/combine.c
> +++ b/gcc/combine.c
> @@ -13403,14 +13403,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
> -                 && XEXP (XEXP (tem_note, 0), 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
> -                     && XEXP (XEXP (tem_note, 0), 0) == XEXP (note, 0))))
> +                     && LABEL_REF_LABEL (XEXP (tem_note, 0)) == XEXP (note, 
> 0))))
>             {
>               if (place)
>                 place2 = i2;
> diff --git a/gcc/cse.c b/gcc/cse.c
> index 90b08b6..be2f31b 100644
> --- a/gcc/cse.c
> +++ b/gcc/cse.c
> @@ -2349,7 +2349,7 @@ hash_rtx_cb (const_rtx x, enum 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 (XEXP (x, 0)));
> +                 + CODE_LABEL_NUMBER (LABEL_REF_LABEL (x)));
>        return hash;
>
>      case SYMBOL_REF:
> @@ -2602,7 +2602,7 @@ exp_equiv_p (const_rtx x, const_rtx y, int validate, 
> bool for_gcse)
>        return x == y;
>
>      case LABEL_REF:
> -      return XEXP (x, 0) == XEXP (y, 0);
> +      return LABEL_REF_LABEL (x) == LABEL_REF_LABEL (y);
>
>      case SYMBOL_REF:
>        return XSTR (x, 0) == XSTR (y, 0);
> @@ -3486,7 +3486,7 @@ fold_rtx (rtx x, rtx_insn *insn)
>                 : lookup_as_function (folded_arg0, MINUS);
>
>               if (y != 0 && GET_CODE (XEXP (y, 1)) == LABEL_REF
> -                 && XEXP (XEXP (y, 1), 0) == XEXP (const_arg1, 0))
> +                 && 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.  */
> @@ -3494,7 +3494,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
> -                 && XEXP (XEXP (XEXP (y, 0), 1), 0) == XEXP (const_arg1, 0))
> +                 && LABEL_REF_LABEL (XEXP (XEXP (y, 0), 1)) == 
> LABEL_REF_LABEL (const_arg1))
>                 return XEXP (XEXP (y, 0), 0);
>             }
>
> @@ -3506,7 +3506,7 @@ fold_rtx (rtx x, rtx_insn *insn)
>                 : lookup_as_function (folded_arg1, MINUS);
>
>               if (y != 0 && GET_CODE (XEXP (y, 1)) == LABEL_REF
> -                 && XEXP (XEXP (y, 1), 0) == XEXP (const_arg0, 0))
> +                 && 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.  */
> @@ -3514,7 +3514,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
> -                 && XEXP (XEXP (XEXP (y, 0), 1), 0) == XEXP (const_arg0, 0))
> +                 && LABEL_REF_LABEL (XEXP (XEXP (y, 0), 1)) == 
> LABEL_REF_LABEL (const_arg0))
>                 return XEXP (XEXP (y, 0), 0);
>             }
>
> @@ -6374,10 +6374,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 (XEXP (x, 0), insn))
> -         && LABEL_P (XEXP (x, 0))
> -         && INSN_UID (XEXP (x, 0)) != 0
> -         && !find_reg_note (insn, REG_LABEL_OPERAND, XEXP (x, 0)))
> +             || !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;
> diff --git a/gcc/cselib.c b/gcc/cselib.c
> index 68d4284..d06a1d5 100644
> --- a/gcc/cselib.c
> +++ b/gcc/cselib.c
> @@ -961,7 +961,7 @@ rtx_equal_for_cselib_1 (rtx x, rtx y, enum machine_mode 
> memmode)
>        return rtx_equal_p (ENTRY_VALUE_EXP (x), ENTRY_VALUE_EXP (y));
>
>      case LABEL_REF:
> -      return XEXP (x, 0) == XEXP (y, 0);
> +      return LABEL_REF_LABEL (x) == LABEL_REF_LABEL (y);
>
>      case MEM:
>        /* We have to compare any autoinc operations in the addresses
> @@ -1167,7 +1167,7 @@ cselib_hash_rtx (rtx x, int create, enum 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 (XEXP (x, 0)));
> +              + CODE_LABEL_NUMBER (LABEL_REF_LABEL (x)));
>        return hash ? hash : (unsigned int) LABEL_REF;
>
>      case SYMBOL_REF:
> diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
> index 34bf271..99cd209 100644
> --- a/gcc/emit-rtl.c
> +++ b/gcc/emit-rtl.c
> @@ -3584,8 +3584,8 @@ mark_label_nuses (rtx x)
>    const char *fmt;
>
>    code = GET_CODE (x);
> -  if (code == LABEL_REF && LABEL_P (XEXP (x, 0)))
> -    LABEL_NUSES (XEXP (x, 0))++;
> +  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--)
> diff --git a/gcc/explow.c b/gcc/explow.c
> index 91de639..8470691 100644
> --- a/gcc/explow.c
> +++ b/gcc/explow.c
> @@ -357,7 +357,7 @@ convert_memory_address_addr_space (enum machine_mode 
> to_mode ATTRIBUTE_UNUSED,
>        break;
>
>      case LABEL_REF:
> -      temp = gen_rtx_LABEL_REF (to_mode, XEXP (x, 0));
> +      temp = gen_rtx_LABEL_REF (to_mode, LABEL_REF_LABEL (x));
>        LABEL_REF_NONLOCAL_P (temp) = LABEL_REF_NONLOCAL_P (x);
>        return temp;
>        break;
> diff --git a/gcc/final.c b/gcc/final.c
> index 9275a48..1b50e74 100644
> --- a/gcc/final.c
> +++ b/gcc/final.c
> @@ -3802,7 +3802,7 @@ output_asm_label (rtx x)
>    char buf[256];
>
>    if (GET_CODE (x) == LABEL_REF)
> -    x = XEXP (x, 0);
> +    x = LABEL_REF_LABEL (x);
>    if (LABEL_P (x)
>        || (NOTE_P (x)
>           && NOTE_KIND (x) == NOTE_INSN_DELETED_LABEL))
> @@ -3892,7 +3892,7 @@ output_addr_const (FILE *file, rtx x)
>        break;
>
>      case LABEL_REF:
> -      x = XEXP (x, 0);
> +      x = LABEL_REF_LABEL (x);
>        /* Fall through.  */
>      case CODE_LABEL:
>        ASM_GENERATE_INTERNAL_LABEL (buf, "L", CODE_LABEL_NUMBER (x));
> diff --git a/gcc/gcse.c b/gcc/gcse.c
> index b7c4788..15d026b 100644
> --- a/gcc/gcse.c
> +++ b/gcc/gcse.c
> @@ -2816,10 +2816,10 @@ add_label_notes (rtx x, rtx 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, XEXP (x, 0));
> +      add_reg_note (insn, REG_LABEL_OPERAND, LABEL_REF_LABEL (x));
>
> -      if (LABEL_P (XEXP (x, 0)))
> -       LABEL_NUSES (XEXP (x, 0))++;
> +      if (LABEL_P (LABEL_REF_LABEL (x)))
> +       LABEL_NUSES (LABEL_REF_LABEL (x))++;
>
>        return;
>      }
> diff --git a/gcc/genconfig.c b/gcc/genconfig.c
> index d1996c3..ae08d1e 100644
> --- a/gcc/genconfig.c
> +++ b/gcc/genconfig.c
> @@ -98,8 +98,8 @@ walk_insn_part (rtx part, int recog_p, int non_pc_set_src)
>        break;
>
>      case LABEL_REF:
> -      if (GET_CODE (XEXP (part, 0)) == MATCH_OPERAND
> -         || GET_CODE (XEXP (part, 0)) == MATCH_DUP)
> +      if (GET_CODE (LABEL_REF_LABEL (part)) == MATCH_OPERAND
> +         || GET_CODE (LABEL_REF_LABEL (part)) == MATCH_DUP)
>         break;
>        return;
>
> diff --git a/gcc/genrecog.c b/gcc/genrecog.c
> index 1f09dd6..dbdefb0 100644
> --- a/gcc/genrecog.c
> +++ b/gcc/genrecog.c
> @@ -617,10 +617,10 @@ validate_pattern (rtx pattern, rtx insn, rtx set, int 
> set_code)
>        return;
>
>      case LABEL_REF:
> -      if (GET_MODE (XEXP (pattern, 0)) != VOIDmode)
> +      if (GET_MODE (LABEL_REF_LABEL (pattern)) != VOIDmode)
>         error_with_line (pattern_lineno,
>                          "operand to label_ref %smode not VOIDmode",
> -                        GET_MODE_NAME (GET_MODE (XEXP (pattern, 0))));
> +                        GET_MODE_NAME (GET_MODE (LABEL_REF_LABEL 
> (pattern))));
>        break;
>
>      default:
> diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c
> index 6c801d3..6bcc23a 100644
> --- a/gcc/ifcvt.c
> +++ b/gcc/ifcvt.c
> @@ -443,7 +443,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
> -      && XEXP (XEXP (test_if, 2), 0) == 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)
> @@ -847,7 +847,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
> -         && XEXP (XEXP (SET_SRC (set), 2), 0) == 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;
> @@ -1777,7 +1777,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
> -      && XEXP (XEXP (SET_SRC (set), 2), 0) == 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;
>
> @@ -2351,7 +2351,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
> -            && XEXP (XEXP (SET_SRC (set), 2), 0) == 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
> diff --git a/gcc/jump.c b/gcc/jump.c
> index ef2f9e5..34466b6 100644
> --- a/gcc/jump.c
> +++ b/gcc/jump.c
> @@ -264,7 +264,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) == XEXP (SET_SRC (label_set), 0));
> +         gcc_assert (XEXP (label_note, 0) == LABEL_REF_LABEL (SET_SRC 
> (label_set)));
>
>           mark_jump_label_1 (label_set, jump_insn, false, true);
>
> @@ -1141,7 +1141,7 @@ mark_jump_label_1 (rtx x, rtx insn, bool in_mem, bool 
> is_target)
>
>      case LABEL_REF:
>        {
> -       rtx label = XEXP (x, 0);
> +       rtx label = LABEL_REF_LABEL (x);
>
>         /* Ignore remaining references to unreachable labels that
>            have been deleted.  */
> @@ -1155,7 +1155,7 @@ mark_jump_label_1 (rtx x, rtx insn, bool in_mem, bool 
> is_target)
>         if (LABEL_REF_NONLOCAL_P (x))
>           break;
>
> -       XEXP (x, 0) = label;
> +       LABEL_REF_LABEL (x) = label;
>         if (! insn || ! INSN_DELETED_P (insn))
>           ++LABEL_NUSES (label);
>
> @@ -1454,7 +1454,7 @@ redirect_exp_1 (rtx *loc, rtx olabel, rtx nlabel, rtx 
> insn)
>    int i;
>    const char *fmt;
>
> -  if ((code == LABEL_REF && XEXP (x, 0) == olabel)
> +  if ((code == LABEL_REF && LABEL_REF_LABEL (x) == olabel)
>        || x == olabel)
>      {
>        x = redirect_target (nlabel);
> @@ -1467,7 +1467,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
> -      && XEXP (SET_SRC (x), 0) == olabel)
> +      && LABEL_REF_LABEL (SET_SRC (x)) == olabel)
>      {
>        validate_change (insn, loc, nlabel, 1);
>        return;
> @@ -1791,12 +1791,12 @@ 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 XEXP (x, 0) == XEXP (y, 0);
> +       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.  */
> -      return (next_real_insn (XEXP (x, 0))
> -             == next_real_insn (XEXP (y, 0)));
> +      return (next_real_insn (LABEL_REF_LABEL (x))
> +             == next_real_insn (LABEL_REF_LABEL (y)));
>
>      case SYMBOL_REF:
>        return XSTR (x, 0) == XSTR (y, 0);
> diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
> index d848954..5f68399 100644
> --- a/gcc/lra-constraints.c
> +++ b/gcc/lra-constraints.c
> @@ -735,7 +735,7 @@ operands_match_p (rtx x, rtx y, int y_hard_regno)
>        return false;
>
>      case LABEL_REF:
> -      return XEXP (x, 0) == XEXP (y, 0);
> +      return LABEL_REF_LABEL (x) == LABEL_REF_LABEL (y);
>      case SYMBOL_REF:
>        return XSTR (x, 0) == XSTR (y, 0);
>
> diff --git a/gcc/reload.c b/gcc/reload.c
> index 529cd14..3e563d0 100644
> --- a/gcc/reload.c
> +++ b/gcc/reload.c
> @@ -2321,7 +2321,7 @@ operands_match_p (rtx x, rtx y)
>        return 0;
>
>      case LABEL_REF:
> -      return XEXP (x, 0) == XEXP (y, 0);
> +      return LABEL_REF_LABEL (x) == LABEL_REF_LABEL (y);
>      case SYMBOL_REF:
>        return XSTR (x, 0) == XSTR (y, 0);
>
> @@ -4221,16 +4221,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,
> -                                XEXP (substitution, 0))
> +                                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 (XEXP (substitution, 0),
> +                 || !label_is_jump_target_p (LABEL_REF_LABEL (substitution),
>                                               insn)))
>             {
> -             add_reg_note (insn, REG_LABEL_OPERAND, XEXP (substitution, 0));
> -             if (LABEL_P (XEXP (substitution, 0)))
> -               ++LABEL_NUSES (XEXP (substitution, 0));
> +             add_reg_note (insn, REG_LABEL_OPERAND,
> +                           LABEL_REF_LABEL (substitution));
> +             if (LABEL_P (LABEL_REF_LABEL (substitution)))
> +               ++LABEL_NUSES (LABEL_REF_LABEL (substitution));
>             }
>
>         }
> diff --git a/gcc/reload1.c b/gcc/reload1.c
> index f09f8b7..3f3541a 100644
> --- a/gcc/reload1.c
> +++ b/gcc/reload1.c
> @@ -2358,7 +2358,7 @@ set_label_offsets (rtx x, rtx_insn *insn, int initial_p)
>        if (LABEL_REF_NONLOCAL_P (x))
>         return;
>
> -      x = XEXP (x, 0);
> +      x = LABEL_REF_LABEL (x);
>
>        /* ... fall through ...  */
>
> @@ -2460,13 +2460,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 (XEXP (tem, 0), 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 (XEXP (tem, 0), 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;
> diff --git a/gcc/reorg.c b/gcc/reorg.c
> index c37ae1e..28401dd 100644
> --- a/gcc/reorg.c
> +++ b/gcc/reorg.c
> @@ -923,20 +923,20 @@ get_branch_condition (const rtx_insn *insn, rtx target)
>      return 0;
>
>    src = SET_SRC (pat);
> -  if (GET_CODE (src) == LABEL_REF && XEXP (src, 0) == 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
> -               && XEXP (XEXP (src, 1), 0) == 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
> -               && XEXP (XEXP (src, 2), 0) == target)
> +               && LABEL_REF_LABEL (XEXP (src, 2)) == target)
>                || (ANY_RETURN_P (XEXP (src, 2)) && XEXP (src, 2) == target)))
>      {
>        enum rtx_code rev;
> diff --git a/gcc/rtl.c b/gcc/rtl.c
> index 3363eeb..c61c365 100644
> --- a/gcc/rtl.c
> +++ b/gcc/rtl.c
> @@ -422,7 +422,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 XEXP (x, 0) == XEXP (y, 0);
> +      return LABEL_REF_LABEL (x) == LABEL_REF_LABEL (y);
>
>      case SYMBOL_REF:
>        return XSTR (x, 0) == XSTR (y, 0);
> @@ -559,7 +559,7 @@ rtx_equal_p (const_rtx x, const_rtx y)
>        return (REGNO (x) == REGNO (y));
>
>      case LABEL_REF:
> -      return XEXP (x, 0) == XEXP (y, 0);
> +      return LABEL_REF_LABEL (x) == LABEL_REF_LABEL (y);
>
>      case SYMBOL_REF:
>        return XSTR (x, 0) == XSTR (y, 0);
> diff --git a/gcc/rtl.h b/gcc/rtl.h
> index 56a06e1..aaca3dc 100644
> --- a/gcc/rtl.h
> +++ b/gcc/rtl.h
> @@ -1673,6 +1673,10 @@ inline rtx_insn *JUMP_LABEL_AS_INSN (const rtx_insn 
> *insn)
>     goes through all the LABEL_REFs that jump to that label.  The chain
>     eventually winds up at the CODE_LABEL: it is circular.  */
>  #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)
> +
>
>  /* For a REG rtx, REGNO extracts the register number.  REGNO can only
>     be used on RHS.  Use SET_REGNO to change the value.  */
> diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
> index d3a3e02..299b816 100644
> --- a/gcc/rtlanal.c
> +++ b/gcc/rtlanal.c
> @@ -785,7 +785,7 @@ reg_mentioned_p (const_rtx reg, const_rtx in)
>      return 1;
>
>    if (GET_CODE (in) == LABEL_REF)
> -    return reg == XEXP (in, 0);
> +    return reg == LABEL_REF_LABEL (in);
>
>    code = GET_CODE (in);
>
> @@ -2847,7 +2847,9 @@ rtx_referenced_p (const_rtx x, const_rtx body)
>      if (const_rtx y = *iter)
>        {
>         /* Check if a label_ref Y refers to label X.  */
> -       if (GET_CODE (y) == LABEL_REF && LABEL_P (x) && XEXP (y, 0) == x)
> +       if (GET_CODE (y) == LABEL_REF
> +           && LABEL_P (x)
> +           && LABEL_REF_LABEL (y) == x)
>           return true;
>
>         if (rtx_equal_p (x, y))
> @@ -5320,7 +5322,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
> -      && XEXP (XEXP (SET_SRC (set), 2), 0) == 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);
> diff --git a/gcc/sched-vis.c b/gcc/sched-vis.c
> index 1dca799..dabe880 100644
> --- a/gcc/sched-vis.c
> +++ b/gcc/sched-vis.c
> @@ -468,7 +468,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 (XEXP (x, 0)));
> +      pp_printf (pp, "L%d", INSN_UID (LABEL_REF_LABEL (x)));
>        break;
>      case CONST:
>      case HIGH:
> diff --git a/gcc/varasm.c b/gcc/varasm.c
> index de4479c..cd4a230 100644
> --- a/gcc/varasm.c
> +++ b/gcc/varasm.c
> @@ -2922,7 +2922,8 @@ const_hash_1 (const tree exp)
>             break;
>
>           case LABEL_REF:
> -           hi = value.offset + CODE_LABEL_NUMBER (XEXP (value.base, 0)) * 13;
> +           hi = (value.offset
> +                 + CODE_LABEL_NUMBER (LABEL_REF_LABEL (value.base)) * 13);
>             break;
>
>           default:
> @@ -3112,8 +3113,8 @@ compare_constant (const tree t1, const tree t2)
>             break;
>
>           case LABEL_REF:
> -           ret = (CODE_LABEL_NUMBER (XEXP (value1.base, 0))
> -                  == CODE_LABEL_NUMBER (XEXP (value2.base, 0)));
> +           ret = (CODE_LABEL_NUMBER (LABEL_REF_LABEL (value1.base))
> +                  == CODE_LABEL_NUMBER (LABEL_REF_LABEL (value2.base)));
>             break;
>
>           default:
> @@ -3547,7 +3548,7 @@ const_rtx_hash_1 (const_rtx x)
>        break;
>
>      case LABEL_REF:
> -      h = h * 251 + CODE_LABEL_NUMBER (XEXP (x, 0));
> +      h = h * 251 + CODE_LABEL_NUMBER (LABEL_REF_LABEL (x));
>        break;
>
>      case UNSPEC:
> @@ -3835,7 +3836,7 @@ output_constant_pool_1 (struct constant_descriptor_rtx 
> *desc,
>        /* FALLTHRU  */
>
>      case LABEL_REF:
> -      tmp = XEXP (tmp, 0);
> +      tmp = LABEL_REF_LABEL (tmp);
>        gcc_assert (!INSN_DELETED_P (tmp));
>        gcc_assert (!NOTE_P (tmp)
>                   || NOTE_KIND (tmp) != NOTE_INSN_DELETED);
> --
> 1.8.5.3
>

Reply via email to