diff options
author | Trevor Saunders <tbsaunde+gcc@tbsaunde.org> | 2016-10-21 12:32:56 +0000 |
---|---|---|
committer | Trevor Saunders <tbsaunde@gcc.gnu.org> | 2016-10-21 12:32:56 +0000 |
commit | 04a121a757f20a4807d47e1d0c7418145b147d69 (patch) | |
tree | 4a775485f6f8a9a86ec778a975da372fc9d35d4b /gcc/jump.c | |
parent | 1d64ceb0579f2da8fec5f26932d5b182653c60d7 (diff) | |
download | gcc-04a121a757f20a4807d47e1d0c7418145b147d69.zip gcc-04a121a757f20a4807d47e1d0c7418145b147d69.tar.gz gcc-04a121a757f20a4807d47e1d0c7418145b147d69.tar.bz2 |
make LABEL_REF_LABEL a rtx_insn *
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
Diffstat (limited to 'gcc/jump.c')
-rw-r--r-- | gcc/jump.c | 18 |
1 files changed, 8 insertions, 10 deletions
@@ -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)) |