diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2014-05-19 06:49:58 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2014-05-19 06:49:58 +0000 |
commit | 339ba33b4f6f90b30f41705cfc71e1ec2b81ac27 (patch) | |
tree | 17c4d542445096d484b3cb4f6aa83da151b3ee6b | |
parent | a65d5b87d1af187a2811c36a3c632cd168336d42 (diff) | |
download | gcc-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/ChangeLog | 25 | ||||
-rw-r--r-- | gcc/bb-reorder.c | 28 | ||||
-rw-r--r-- | gcc/cfgcleanup.c | 7 | ||||
-rw-r--r-- | gcc/cfghooks.c | 2 | ||||
-rw-r--r-- | gcc/cfgrtl.c | 18 | ||||
-rw-r--r-- | gcc/config/arc/arc.c | 6 | ||||
-rw-r--r-- | gcc/config/arc/arc.md | 10 | ||||
-rw-r--r-- | gcc/config/sh/sh.md | 2 | ||||
-rw-r--r-- | gcc/emit-rtl.c | 5 | ||||
-rw-r--r-- | gcc/haifa-sched.c | 2 | ||||
-rw-r--r-- | gcc/ifcvt.c | 20 | ||||
-rw-r--r-- | gcc/jump.c | 6 | ||||
-rw-r--r-- | gcc/reg-notes.def | 5 | ||||
-rw-r--r-- | gcc/reorg.c | 13 | ||||
-rw-r--r-- | gcc/rtl.h | 5 |
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. */ @@ -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 @@ -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) \ |