aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/arc/arc.md33
-rw-r--r--gcc/config/pa/pa.c6
-rw-r--r--gcc/config/sh/sh.c8
3 files changed, 30 insertions, 17 deletions
diff --git a/gcc/config/arc/arc.md b/gcc/config/arc/arc.md
index 22fdbba..ac7346bc 100644
--- a/gcc/config/arc/arc.md
+++ b/gcc/config/arc/arc.md
@@ -5122,16 +5122,29 @@
scan = as_a <rtx_insn *> (XEXP (SET_SRC (PATTERN (scan)), 0));
continue;
}
- if (JUMP_LABEL (scan)
- /* JUMP_LABEL might be simple_return instead if an insn. */
- && (!INSN_P (JUMP_LABEL (scan))
- || (!next_active_insn (JUMP_LABEL (scan))
- || (recog_memoized (next_active_insn (JUMP_LABEL (scan)))
- != CODE_FOR_doloop_begin_i)))
- && (!next_active_insn (NEXT_INSN (PREV_INSN (scan)))
- || (recog_memoized
- (next_active_insn (NEXT_INSN (PREV_INSN (scan))))
- != CODE_FOR_doloop_begin_i)))
+
+ rtx lab = JUMP_LABEL (scan);
+ if (!lab)
+ break;
+
+ rtx_insn *next_scan
+ = next_active_insn (NEXT_INSN (PREV_INSN (scan)));
+ if (next_scan
+ && recog_memoized (next_scan) != CODE_FOR_doloop_begin_i)
+ break;
+
+ /* JUMP_LABEL might be simple_return instead if an insn. */
+ if (!INSN_P (lab))
+ {
+ n_insns++;
+ break;
+ }
+
+ rtx_insn *next_lab = next_active_insn (as_a<rtx_insn *> (lab));
+ if (next_lab
+ && recog_memoized (next_lab) != CODE_FOR_doloop_begin_i)
+ break;
+
n_insns++;
}
break;
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index 18b7324..a02010c 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -6445,7 +6445,7 @@ branch_to_delay_slot_p (rtx_insn *insn)
if (dbr_sequence_length ())
return FALSE;
- jump_insn = next_active_insn (JUMP_LABEL (insn));
+ jump_insn = next_active_insn (JUMP_LABEL_AS_INSN (insn));
while (insn)
{
insn = next_active_insn (insn);
@@ -6479,7 +6479,7 @@ branch_needs_nop_p (rtx_insn *insn)
if (dbr_sequence_length ())
return FALSE;
- jump_insn = next_active_insn (JUMP_LABEL (insn));
+ jump_insn = next_active_insn (JUMP_LABEL_AS_INSN (insn));
while (insn)
{
insn = next_active_insn (insn);
@@ -6502,7 +6502,7 @@ branch_needs_nop_p (rtx_insn *insn)
static bool
use_skip_p (rtx_insn *insn)
{
- rtx_insn *jump_insn = next_active_insn (JUMP_LABEL (insn));
+ rtx_insn *jump_insn = next_active_insn (JUMP_LABEL_AS_INSN (insn));
while (insn)
{
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index b3e949e..a9b5a14 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -5503,7 +5503,8 @@ gen_block_redirect (rtx_insn *jump, int addr, int need_block)
else if (optimize && need_block >= 0)
{
- rtx_insn *next = next_active_insn (next_active_insn (dest));
+ rtx_insn *next = next_active_insn (as_a<rtx_insn *> (dest));
+ next = next_active_insn (next);
if (next && JUMP_P (next)
&& GET_CODE (PATTERN (next)) == SET
&& recog_memoized (next) == CODE_FOR_jump_compact)
@@ -6395,9 +6396,8 @@ split_branches (rtx_insn *first)
/* We can't use JUMP_LABEL here because it might be undefined
when not optimizing. */
/* A syntax error might cause beyond to be NULL_RTX. */
- beyond
- = next_active_insn (XEXP (XEXP (SET_SRC (PATTERN (insn)), 1),
- 0));
+ rtx temp = XEXP (XEXP (SET_SRC (PATTERN (insn)), 1), 0);
+ beyond = next_active_insn (as_a<rtx_insn *> (temp));
if (beyond
&& (JUMP_P (beyond)