aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2014-05-19 06:49:58 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2014-05-19 06:49:58 +0000
commit339ba33b4f6f90b30f41705cfc71e1ec2b81ac27 (patch)
tree17c4d542445096d484b3cb4f6aa83da151b3ee6b
parenta65d5b87d1af187a2811c36a3c632cd168336d42 (diff)
downloadgcc-339ba33b4f6f90b30f41705cfc71e1ec2b81ac27.zip
gcc-339ba33b4f6f90b30f41705cfc71e1ec2b81ac27.tar.gz
gcc-339ba33b4f6f90b30f41705cfc71e1ec2b81ac27.tar.bz2
reg-notes.def (CROSSING_JUMP): Likewise.
gcc/ * reg-notes.def (CROSSING_JUMP): Likewise. * rtl.h (rtx_def): Update comment for jump flag. (CROSSING_JUMP_P): Define. * cfgcleanup.c (try_forward_edges, try_optimize_cfg): Use it instead of a REG_CROSSING_JUMP note. * cfghooks.c (tidy_fallthru_edges): Likewise. * cfgrtl.c (fixup_partition_crossing, rtl_verify_edges): Likewise. * emit-rtl.c (try_split): Likewise. * haifa-sched.c (sched_create_recovery_edges): Likewise. * ifcvt.c (find_if_case_1, find_if_case_2): Likewise. * jump.c (redirect_jump_2): Likewise. * reorg.c (follow_jumps, fill_slots_from_thread): Likewise. (relax_delay_slots): Likewise. * config/arc/arc.md (jump_i, cbranchsi4_scratch, *bbit): Likewise. (bbit_di): Likewise. * config/arc/arc.c (arc_reorg, arc_can_follow_jump): Likewise. * config/sh/sh.md (jump_compact): Likewise. * bb-reorder.c (rotate_loop): Likewise. (pass_duplicate_computed_gotos::execute): Likewise. (add_reg_crossing_jump_notes): Rename to... (update_crossing_jump_flags): ...this. (pass_partition_blocks::execute): Update accordingly. From-SVN: r210603
-rw-r--r--gcc/ChangeLog25
-rw-r--r--gcc/bb-reorder.c28
-rw-r--r--gcc/cfgcleanup.c7
-rw-r--r--gcc/cfghooks.c2
-rw-r--r--gcc/cfgrtl.c18
-rw-r--r--gcc/config/arc/arc.c6
-rw-r--r--gcc/config/arc/arc.md10
-rw-r--r--gcc/config/sh/sh.md2
-rw-r--r--gcc/emit-rtl.c5
-rw-r--r--gcc/haifa-sched.c2
-rw-r--r--gcc/ifcvt.c20
-rw-r--r--gcc/jump.c6
-rw-r--r--gcc/reg-notes.def5
-rw-r--r--gcc/reorg.c13
-rw-r--r--gcc/rtl.h5
15 files changed, 89 insertions, 65 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7a99968..75ca1d2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,30 @@
2014-05-19 Richard Sandiford <rdsandiford@googlemail.com>
+ * reg-notes.def (CROSSING_JUMP): Likewise.
+ * rtl.h (rtx_def): Update comment for jump flag.
+ (CROSSING_JUMP_P): Define.
+ * cfgcleanup.c (try_forward_edges, try_optimize_cfg): Use it instead
+ of a REG_CROSSING_JUMP note.
+ * cfghooks.c (tidy_fallthru_edges): Likewise.
+ * cfgrtl.c (fixup_partition_crossing, rtl_verify_edges): Likewise.
+ * emit-rtl.c (try_split): Likewise.
+ * haifa-sched.c (sched_create_recovery_edges): Likewise.
+ * ifcvt.c (find_if_case_1, find_if_case_2): Likewise.
+ * jump.c (redirect_jump_2): Likewise.
+ * reorg.c (follow_jumps, fill_slots_from_thread): Likewise.
+ (relax_delay_slots): Likewise.
+ * config/arc/arc.md (jump_i, cbranchsi4_scratch, *bbit): Likewise.
+ (bbit_di): Likewise.
+ * config/arc/arc.c (arc_reorg, arc_can_follow_jump): Likewise.
+ * config/sh/sh.md (jump_compact): Likewise.
+ * bb-reorder.c (rotate_loop): Likewise.
+ (pass_duplicate_computed_gotos::execute): Likewise.
+ (add_reg_crossing_jump_notes): Rename to...
+ (update_crossing_jump_flags): ...this.
+ (pass_partition_blocks::execute): Update accordingly.
+
+2014-05-19 Richard Sandiford <rdsandiford@googlemail.com>
+
* tree.h: Remove extraneous template <>.
2014-05-17 Jan Hubicka <hubicka@ucw.cz>
diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c
index 9581c71..3d7fad5 100644
--- a/gcc/bb-reorder.c
+++ b/gcc/bb-reorder.c
@@ -425,8 +425,7 @@ rotate_loop (edge back_edge, struct trace *trace, int trace_n)
/* Duplicate HEADER if it is a small block containing cond jump
in the end. */
if (any_condjump_p (BB_END (header)) && copy_bb_p (header, 0)
- && !find_reg_note (BB_END (header), REG_CROSSING_JUMP,
- NULL_RTX))
+ && !CROSSING_JUMP_P (BB_END (header)))
copy_bb (header, single_succ_edge (prev_bb), prev_bb, trace_n);
}
}
@@ -2194,10 +2193,10 @@ fix_crossing_unconditional_branches (void)
}
}
-/* Add REG_CROSSING_JUMP note to all crossing jump insns. */
+/* Update CROSSING_JUMP_P flags on all jump insns. */
static void
-add_reg_crossing_jump_notes (void)
+update_crossing_jump_flags (void)
{
basic_block bb;
edge e;
@@ -2205,12 +2204,15 @@ add_reg_crossing_jump_notes (void)
FOR_EACH_BB_FN (bb, cfun)
FOR_EACH_EDGE (e, ei, bb->succs)
- if ((e->flags & EDGE_CROSSING)
- && JUMP_P (BB_END (e->src))
- /* Some notes were added during fix_up_fall_thru_edges, via
- force_nonfallthru_and_redirect. */
- && !find_reg_note (BB_END (e->src), REG_CROSSING_JUMP, NULL_RTX))
- add_reg_note (BB_END (e->src), REG_CROSSING_JUMP, NULL_RTX);
+ if (e->flags & EDGE_CROSSING)
+ {
+ if (JUMP_P (BB_END (bb))
+ /* Some flags were added during fix_up_fall_thru_edges, via
+ force_nonfallthru_and_redirect. */
+ && !CROSSING_JUMP_P (BB_END (bb)))
+ CROSSING_JUMP_P (BB_END (bb)) = 1;
+ break;
+ }
}
/* Reorder basic blocks. The main entry point to this file. FLAGS is
@@ -2454,7 +2456,7 @@ pass_duplicate_computed_gotos::execute (function *fun)
continue;
/* Only consider blocks that can be duplicated. */
- if (find_reg_note (BB_END (bb), REG_CROSSING_JUMP, NULL_RTX)
+ if (CROSSING_JUMP_P (BB_END (bb))
|| !can_duplicate_block_p (bb))
continue;
@@ -2507,7 +2509,7 @@ pass_duplicate_computed_gotos::execute (function *fun)
/* Don't duplicate a partition crossing edge, which requires difficult
fixup. */
- if (find_reg_note (BB_END (bb), REG_CROSSING_JUMP, NULL_RTX))
+ if (JUMP_P (BB_END (bb)) && CROSSING_JUMP_P (BB_END (bb)))
continue;
new_bb = duplicate_block (single_succ (bb), single_succ_edge (bb), bb);
@@ -2710,7 +2712,7 @@ pass_partition_blocks::execute (function *fun)
if (!HAS_LONG_UNCOND_BRANCH)
fix_crossing_unconditional_branches ();
- add_reg_crossing_jump_notes ();
+ update_crossing_jump_flags ();
/* Clear bb->aux fields that the above routines were using. */
clear_aux_for_blocks ();
diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c
index 2912176..7c24a6d 100644
--- a/gcc/cfgcleanup.c
+++ b/gcc/cfgcleanup.c
@@ -419,7 +419,7 @@ try_forward_edges (int mode, basic_block b)
partition boundaries). See the comments at the top of
bb-reorder.c:partition_hot_cold_basic_blocks for complete details. */
- if (find_reg_note (BB_END (b), REG_CROSSING_JUMP, NULL_RTX))
+ if (JUMP_P (BB_END (b)) && CROSSING_JUMP_P (BB_END (b)))
return false;
for (ei = ei_start (b->succs); (e = ei_safe_edge (ei)); )
@@ -457,7 +457,8 @@ try_forward_edges (int mode, basic_block b)
details. */
if (first != EXIT_BLOCK_PTR_FOR_FN (cfun)
- && find_reg_note (BB_END (first), REG_CROSSING_JUMP, NULL_RTX))
+ && JUMP_P (BB_END (first))
+ && CROSSING_JUMP_P (BB_END (first)))
return changed;
while (counter < n_basic_blocks_for_fn (cfun))
@@ -2797,7 +2798,7 @@ try_optimize_cfg (int mode)
if (single_succ_p (b)
&& single_succ (b) != EXIT_BLOCK_PTR_FOR_FN (cfun)
&& onlyjump_p (BB_END (b))
- && !find_reg_note (BB_END (b), REG_CROSSING_JUMP, NULL_RTX)
+ && !CROSSING_JUMP_P (BB_END (b))
&& try_redirect_by_replacing_jump (single_succ_edge (b),
single_succ (b),
(mode & CLEANUP_CFGLAYOUT) != 0))
diff --git a/gcc/cfghooks.c b/gcc/cfghooks.c
index 66313df..04053a5 100644
--- a/gcc/cfghooks.c
+++ b/gcc/cfghooks.c
@@ -965,7 +965,7 @@ tidy_fallthru_edges (void)
s = single_succ_edge (b);
if (! (s->flags & EDGE_COMPLEX)
&& s->dest == c
- && !find_reg_note (BB_END (b), REG_CROSSING_JUMP, NULL_RTX))
+ && !(JUMP_P (BB_END (b)) && CROSSING_JUMP_P (BB_END (b))))
tidy_fallthru_edge (s);
}
}
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
index 51dbb9e..eb25e89 100644
--- a/gcc/cfgrtl.c
+++ b/gcc/cfgrtl.c
@@ -1325,8 +1325,6 @@ redirect_branch_edge (edge e, basic_block target)
static void
fixup_partition_crossing (edge e)
{
- rtx note;
-
if (e->src == ENTRY_BLOCK_PTR_FOR_FN (cfun) || e->dest
== EXIT_BLOCK_PTR_FOR_FN (cfun))
return;
@@ -1337,10 +1335,9 @@ fixup_partition_crossing (edge e)
if (BB_PARTITION (e->src) != BB_PARTITION (e->dest))
{
e->flags |= EDGE_CROSSING;
- note = find_reg_note (BB_END (e->src), REG_CROSSING_JUMP, NULL_RTX);
if (JUMP_P (BB_END (e->src))
- && !note)
- add_reg_note (BB_END (e->src), REG_CROSSING_JUMP, NULL_RTX);
+ && !CROSSING_JUMP_P (BB_END (e->src)))
+ CROSSING_JUMP_P (BB_END (e->src)) = 1;
}
else if (BB_PARTITION (e->src) == BB_PARTITION (e->dest))
{
@@ -1348,8 +1345,7 @@ fixup_partition_crossing (edge e)
/* Remove the section crossing note from jump at end of
src if it exists, and if no other successors are
still crossing. */
- note = find_reg_note (BB_END (e->src), REG_CROSSING_JUMP, NULL_RTX);
- if (note)
+ if (JUMP_P (BB_END (e->src)) && CROSSING_JUMP_P (BB_END (e->src)))
{
bool has_crossing_succ = false;
edge e2;
@@ -1361,7 +1357,7 @@ fixup_partition_crossing (edge e)
break;
}
if (!has_crossing_succ)
- remove_note (BB_END (e->src), note);
+ CROSSING_JUMP_P (BB_END (e->src)) = 0;
}
}
}
@@ -2460,8 +2456,7 @@ rtl_verify_edges (void)
e->src->index);
err = 1;
}
- if (JUMP_P (BB_END (bb))
- && !find_reg_note (BB_END (bb), REG_CROSSING_JUMP, NULL_RTX))
+ if (JUMP_P (BB_END (bb)) && !CROSSING_JUMP_P (BB_END (bb)))
{
error ("No region crossing jump at section boundary in bb %i",
bb->index);
@@ -2496,7 +2491,8 @@ rtl_verify_edges (void)
}
if (!has_crossing_edge
- && find_reg_note (BB_END (bb), REG_CROSSING_JUMP, NULL_RTX))
+ && JUMP_P (BB_END (bb))
+ && CROSSING_JUMP_P (BB_END (bb)))
{
print_rtl_with_bb (stderr, get_insns (), TDF_RTL | TDF_BLOCKS | TDF_DETAILS);
error ("Region crossing jump across same section in bb %i",
diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c
index a9161b3..3b3e820 100644
--- a/gcc/config/arc/arc.c
+++ b/gcc/config/arc/arc.c
@@ -6051,7 +6051,7 @@ arc_reorg (void)
continue;
/* Now check if the jump is beyond the s9 range. */
- if (find_reg_note (insn, REG_CROSSING_JUMP, NULL_RTX))
+ if (CROSSING_JUMP_P (insn))
continue;
offset = branch_dest (insn) - INSN_ADDRESSES (INSN_UID (insn));
@@ -9206,7 +9206,7 @@ arc_decl_pretend_args (tree decl)
/* Without this, gcc.dg/tree-prof/bb-reorg.c fails to assemble
when compiling with -O2 -freorder-blocks-and-partition -fprofile-use
- -D_PROFILE_USE; delay branch scheduling then follows a REG_CROSSING_JUMP
+ -D_PROFILE_USE; delay branch scheduling then follows a crossing jump
to redirect two breqs. */
static bool
@@ -9216,7 +9216,7 @@ arc_can_follow_jump (const_rtx follower, const_rtx followee)
union { const_rtx c; rtx r; } u;
u.c = follower;
- if (find_reg_note (followee, REG_CROSSING_JUMP, NULL_RTX))
+ if (CROSSING_JUMP_P (followee))
switch (get_attr_type (u.r))
{
case TYPE_BRCC:
diff --git a/gcc/config/arc/arc.md b/gcc/config/arc/arc.md
index 80f6e33..72ba470 100644
--- a/gcc/config/arc/arc.md
+++ b/gcc/config/arc/arc.md
@@ -3480,7 +3480,7 @@
(define_insn "jump_i"
[(set (pc) (label_ref (match_operand 0 "" "")))]
- "!TARGET_LONG_CALLS_SET || !find_reg_note (insn, REG_CROSSING_JUMP, NULL_RTX)"
+ "!TARGET_LONG_CALLS_SET || !CROSSING_JUMP_P (insn)"
"b%!%* %^%l0%&"
[(set_attr "type" "uncond_branch")
(set (attr "iscompact")
@@ -3496,7 +3496,7 @@
(eq_attr "delay_slot_filled" "yes")
(const_int 4)
- (match_test "find_reg_note (insn, REG_CROSSING_JUMP, NULL_RTX)")
+ (match_test "CROSSING_JUMP_P (insn)")
(const_int 4)
(ior (lt (minus (match_dup 0) (pc)) (const_int -512))
@@ -4589,7 +4589,7 @@
"(reload_completed
|| (TARGET_EARLY_CBRANCHSI
&& brcc_nolimm_operator (operands[0], VOIDmode)))
- && !find_reg_note (insn, REG_CROSSING_JUMP, NULL_RTX)"
+ && !CROSSING_JUMP_P (insn)"
"*
switch (get_attr_length (insn))
{
@@ -4653,7 +4653,7 @@
(label_ref (match_operand 0 "" ""))
(pc)))
(clobber (reg:CC_ZN CC_REG))]
- "!find_reg_note (insn, REG_CROSSING_JUMP, NULL_RTX)"
+ "!CROSSING_JUMP_P (insn)"
{
switch (get_attr_length (insn))
{
@@ -4693,7 +4693,7 @@
(label_ref (match_operand 0 "" ""))
(pc)))
(clobber (reg:CC_ZN CC_REG))]
- "!find_reg_note (insn, REG_CROSSING_JUMP, NULL_RTX)"
+ "!CROSSING_JUMP_P (insn)"
"#"
""
[(parallel
diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md
index 609645b..f77f572 100644
--- a/gcc/config/sh/sh.md
+++ b/gcc/config/sh/sh.md
@@ -8804,7 +8804,7 @@ label:
(define_insn "jump_compact"
[(set (pc)
(label_ref (match_operand 0 "" "")))]
- "TARGET_SH1 && !find_reg_note (insn, REG_CROSSING_JUMP, NULL_RTX)"
+ "TARGET_SH1 && !CROSSING_JUMP_P (insn)"
{
/* The length is 16 if the delay slot is unfilled. */
if (get_attr_length(insn) > 4)
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 9282a29..1d74c3f 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -3590,11 +3590,13 @@ try_split (rtx pat, rtx trial, int last)
may have introduced invalid RTL sharing, so unshare the sequence now. */
unshare_all_rtl_in_chain (seq);
- /* Mark labels. */
+ /* Mark labels and copy flags. */
for (insn = insn_last; insn ; insn = PREV_INSN (insn))
{
if (JUMP_P (insn))
{
+ if (JUMP_P (trial))
+ CROSSING_JUMP_P (insn) = CROSSING_JUMP_P (trial);
mark_jump_label (PATTERN (insn), insn, 0);
njumps++;
if (probability != -1
@@ -3671,7 +3673,6 @@ try_split (rtx pat, rtx trial, int last)
break;
case REG_NON_LOCAL_GOTO:
- case REG_CROSSING_JUMP:
for (insn = insn_last; insn != NULL_RTX; insn = PREV_INSN (insn))
{
if (JUMP_P (insn))
diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c
index 5d16b4d..149071e 100644
--- a/gcc/haifa-sched.c
+++ b/gcc/haifa-sched.c
@@ -7653,7 +7653,7 @@ sched_create_recovery_edges (basic_block first_bb, basic_block rec,
{
/* We don't need the same note for the check because
any_condjump_p (check) == true. */
- add_reg_note (jump, REG_CROSSING_JUMP, NULL_RTX);
+ CROSSING_JUMP_P (jump) = 1;
}
edge_flags = EDGE_CROSSING;
}
diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c
index cd2b5dc..2ca2278 100644
--- a/gcc/ifcvt.c
+++ b/gcc/ifcvt.c
@@ -3877,12 +3877,14 @@ find_if_case_1 (basic_block test_bb, edge then_edge, edge else_edge)
bb-reorder.c:partition_hot_cold_basic_blocks for complete details. */
if ((BB_END (then_bb)
- && find_reg_note (BB_END (then_bb), REG_CROSSING_JUMP, NULL_RTX))
+ && JUMP_P (BB_END (then_bb))
+ && CROSSING_JUMP_P (BB_END (then_bb)))
|| (BB_END (test_bb)
- && find_reg_note (BB_END (test_bb), REG_CROSSING_JUMP, NULL_RTX))
+ && JUMP_P (BB_END (test_bb))
+ && CROSSING_JUMP_P (BB_END (test_bb)))
|| (BB_END (else_bb)
- && find_reg_note (BB_END (else_bb), REG_CROSSING_JUMP,
- NULL_RTX)))
+ && JUMP_P (BB_END (else_bb))
+ && CROSSING_JUMP_P (BB_END (else_bb))))
return FALSE;
/* THEN has one successor. */
@@ -4000,12 +4002,14 @@ find_if_case_2 (basic_block test_bb, edge then_edge, edge else_edge)
bb-reorder.c:partition_hot_cold_basic_blocks for complete details. */
if ((BB_END (then_bb)
- && find_reg_note (BB_END (then_bb), REG_CROSSING_JUMP, NULL_RTX))
+ && JUMP_P (BB_END (then_bb))
+ && CROSSING_JUMP_P (BB_END (then_bb)))
|| (BB_END (test_bb)
- && find_reg_note (BB_END (test_bb), REG_CROSSING_JUMP, NULL_RTX))
+ && JUMP_P (BB_END (test_bb))
+ && CROSSING_JUMP_P (BB_END (test_bb)))
|| (BB_END (else_bb)
- && find_reg_note (BB_END (else_bb), REG_CROSSING_JUMP,
- NULL_RTX)))
+ && JUMP_P (BB_END (else_bb))
+ && CROSSING_JUMP_P (BB_END (else_bb))))
return FALSE;
/* ELSE has one successor. */
diff --git a/gcc/jump.c b/gcc/jump.c
index cdea8d5..9418f65 100644
--- a/gcc/jump.c
+++ b/gcc/jump.c
@@ -1590,11 +1590,7 @@ redirect_jump_2 (rtx jump, rtx olabel, rtx nlabel, int delete_unused,
label and are now changing it into a direct conditional return.
The jump is no longer crossing in that case. */
if (ANY_RETURN_P (nlabel))
- {
- note = find_reg_note (jump, REG_CROSSING_JUMP, NULL_RTX);
- if (note)
- remove_note (jump, note);
- }
+ CROSSING_JUMP_P (jump) = 0;
if (!ANY_RETURN_P (olabel)
&& --LABEL_NUSES (olabel) == 0 && delete_unused > 0
diff --git a/gcc/reg-notes.def b/gcc/reg-notes.def
index 831fe82..3146ba0 100644
--- a/gcc/reg-notes.def
+++ b/gcc/reg-notes.def
@@ -188,11 +188,6 @@ REG_NOTE (NORETURN)
computed goto. */
REG_NOTE (NON_LOCAL_GOTO)
-/* Indicates that a jump crosses between hot and cold sections in a
- (partitioned) assembly or .o file, and therefore should not be
- reduced to a simpler jump by optimizations. */
-REG_NOTE (CROSSING_JUMP)
-
/* This kind of note is generated at each to `setjmp', and similar
functions that can return twice. */
REG_NOTE (SETJMP)
diff --git a/gcc/reorg.c b/gcc/reorg.c
index 95e942f..e4b6d45 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -2289,8 +2289,8 @@ fill_simple_delay_slots (int non_jumps_p)
If LABEL is not followed by a jump, return LABEL.
If the chain loops or we can't find end, return LABEL,
since that tells caller to avoid changing the insn.
- If the returned label is obtained by following a REG_CROSSING_JUMP
- jump, set *CROSSING to true, otherwise set it to false. */
+ If the returned label is obtained by following a crossing jump,
+ set *CROSSING to true, otherwise set it to false. */
static rtx
follow_jumps (rtx label, rtx jump, bool *crossing)
@@ -2330,8 +2330,7 @@ follow_jumps (rtx label, rtx jump, bool *crossing)
if (!targetm.can_follow_jump (jump, insn))
break;
if (!*crossing)
- *crossing
- = find_reg_note (insn, REG_CROSSING_JUMP, NULL_RTX) != NULL_RTX;
+ *crossing = CROSSING_JUMP_P (jump);
value = this_label;
}
if (depth == 10)
@@ -2800,7 +2799,7 @@ fill_slots_from_thread (rtx insn, rtx condition, rtx thread,
{
reorg_redirect_jump (insn, label);
if (crossing)
- set_unique_reg_note (insn, REG_CROSSING_JUMP, NULL_RTX);
+ CROSSING_JUMP_P (insn) = 1;
}
}
@@ -3175,7 +3174,7 @@ relax_delay_slots (rtx first)
{
reorg_redirect_jump (insn, target_label);
if (crossing)
- set_unique_reg_note (insn, REG_CROSSING_JUMP, NULL_RTX);
+ CROSSING_JUMP_P (insn) = 1;
}
/* See if this jump conditionally branches around an unconditional
@@ -3320,7 +3319,7 @@ relax_delay_slots (rtx first)
reorg_redirect_jump (delay_insn, trial);
target_label = trial;
if (crossing)
- set_unique_reg_note (insn, REG_CROSSING_JUMP, NULL_RTX);
+ CROSSING_JUMP_P (insn) = 1;
}
/* If the first insn at TARGET_LABEL is redundant with a previous
diff --git a/gcc/rtl.h b/gcc/rtl.h
index d9460a0..10ae1e9 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -276,6 +276,7 @@ struct GTY((chain_next ("RTX_NEXT (&%h)"),
/* 1 in a MEM if we should keep the alias set for this mem unchanged
when we access a component.
+ 1 in a JUMP_INSN if it is a crossing jump.
1 in a CALL_INSN if it is a sibling call.
1 in a SET that is for a return.
In a CODE_LABEL, part of the two-bit alternate entry field.
@@ -942,6 +943,10 @@ extern void rtl_check_failed_flag (const char *, const_rtx, const char *,
#define INSN_DELETED_P(RTX) \
(RTL_INSN_CHAIN_FLAG_CHECK ("INSN_DELETED_P", (RTX))->volatil)
+/* 1 if JUMP RTX is a crossing jump. */
+#define CROSSING_JUMP_P(RTX) \
+ (RTL_FLAG_CHECK1 ("CROSSING_JUMP_P", (RTX), JUMP_INSN)->jump)
+
/* 1 if RTX is a call to a const function. Built from ECF_CONST and
TREE_READONLY. */
#define RTL_CONST_CALL_P(RTX) \