summaryrefslogtreecommitdiff
path: root/gcc/config/sh/sh-protos.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/sh/sh-protos.h')
-rw-r--r--gcc/config/sh/sh-protos.h28
1 files changed, 13 insertions, 15 deletions
diff --git a/gcc/config/sh/sh-protos.h b/gcc/config/sh/sh-protos.h
index 5a552e2be8..081f1ceed2 100644
--- a/gcc/config/sh/sh-protos.h
+++ b/gcc/config/sh/sh-protos.h
@@ -93,6 +93,7 @@ extern rtx sh_fsca_sf2int (void);
extern rtx sh_fsca_int2sf (void);
/* Declare functions defined in sh.c and used in templates. */
+extern bool sh_lra_p (void);
extern const char *output_branch (int, rtx_insn *, rtx *);
extern const char *output_ieee_ccmpeq (rtx_insn *, rtx *);
@@ -191,18 +192,19 @@ sh_find_set_of_reg (rtx reg, rtx_insn* insn, F stepfunc,
if (!REG_P (reg) || insn == NULL_RTX)
return result;
- rtx_insn* previnsn = insn;
-
- for (result.insn = stepfunc (insn); result.insn != NULL_RTX;
- previnsn = result.insn, result.insn = stepfunc (result.insn))
+ for (rtx_insn* i = stepfunc (insn); i != NULL_RTX; i = stepfunc (i))
{
- if (BARRIER_P (result.insn))
+ if (BARRIER_P (i))
break;
- if (!NONJUMP_INSN_P (result.insn))
- continue;
- if (reg_set_p (reg, result.insn))
+ if (!INSN_P (i) || DEBUG_INSN_P (i))
+ continue;
+ if (reg_set_p (reg, i))
{
- result.set_rtx = set_of (reg, result.insn);
+ if (CALL_P (i))
+ break;
+
+ result.insn = i;
+ result.set_rtx = set_of (reg, i);
if (result.set_rtx == NULL_RTX || GET_CODE (result.set_rtx) != SET)
break;
@@ -225,12 +227,6 @@ sh_find_set_of_reg (rtx reg, rtx_insn* insn, F stepfunc,
}
}
- /* If the loop above stopped at the first insn in the list,
- result.insn will be null. Use the insn from the previous iteration
- in this case. */
- if (result.insn == NULL)
- result.insn = previnsn;
-
if (result.set_src != NULL)
gcc_assert (result.insn != NULL && result.set_rtx != NULL);
@@ -310,6 +306,8 @@ extern bool sh_insn_operands_modified_between_p (rtx_insn* operands_insn,
extern bool sh_reg_dead_or_unused_after_insn (const rtx_insn* i, int regno);
extern void sh_remove_reg_dead_or_unused_notes (rtx_insn* i, int regno);
extern rtx_insn* sh_check_add_incdec_notes (rtx_insn* i);
+extern rtx sh_remove_overlapping_post_inc (rtx dst, rtx src);
+extern rtx_insn* sh_peephole_emit_move_insn (rtx dst, rtx src);
extern bool sh_in_recog_treg_set_expr (void);
extern bool sh_recog_treg_set_expr (rtx op, machine_mode mode);