2
0
mirror of git://gcc.gnu.org/git/gcc.git synced 2025-04-25 09:50:43 +08:00

regmove.c (gen_add3_insn): New function.

* regmove.c (gen_add3_insn): New function.
        (fixup_match_2): Use it instead of calling gen_addsi3.

From-SVN: r19938
This commit is contained in:
J"orn Rennecke 1998-05-21 22:34:06 +00:00 committed by Jeff Law
parent 05930232f1
commit 1a29f703bf
2 changed files with 26 additions and 2 deletions

@ -1,3 +1,8 @@
Thu May 21 19:50:13 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
* regmove.c (gen_add3_insn): New function.
(fixup_match_2): Use it instead of calling gen_addsi3.
Thu May 21 23:09:50 1998 Jeffrey A Law (law@cygnus.com)
* alias.c (rtx_equal_for_memref_p): Handle SCRATCH as a memory

@ -47,6 +47,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
static int optimize_reg_copy_1 PROTO((rtx, rtx, rtx));
static void optimize_reg_copy_2 PROTO((rtx, rtx, rtx));
static void optimize_reg_copy_3 PROTO((rtx, rtx, rtx));
static rtx gen_add3_insn PROTO((rtx, rtx, rtx));
struct match {
int with[MAX_RECOG_OPERANDS];
@ -65,6 +66,23 @@ static int reg_is_remote_constant_p PROTO((rtx, rtx, rtx));
static int stable_but_for_p PROTO((rtx, rtx, rtx));
static int loop_depth;
/* Generate and return an insn body to add r1 and c,
storing the result in r0. */
static rtx
gen_add3_insn (r0, r1, c)
rtx r0, r1, c;
{
int icode = (int) add_optab->handlers[(int) GET_MODE (r0)].insn_code;
if (icode == CODE_FOR_nothing
|| ! (*insn_operand_predicate[icode][0]) (r0, insn_operand_mode[icode][0])
|| ! (*insn_operand_predicate[icode][1]) (r1, insn_operand_mode[icode][1])
|| ! (*insn_operand_predicate[icode][2]) (c, insn_operand_mode[icode][2]))
return NULL_RTX;
return (GEN_FCN (icode) (r0, r1, c));
}
#ifdef AUTO_INC_DEC
/* INC_INSN is an instruction that adds INCREMENT to REG.
@ -639,8 +657,9 @@ fixup_match_2 (insn, dst, src, offset, regmove_dump_file)
{
HOST_WIDE_INT newconst
= INTVAL (offset) - INTVAL (XEXP (SET_SRC (pset), 1));
if (validate_change (insn, &PATTERN (insn),
gen_addsi3 (dst, dst, GEN_INT (newconst)), 0))
rtx add = gen_add3_insn (dst, dst, GEN_INT (newconst));
if (add && validate_change (insn, &PATTERN (insn), add, 0))
{
/* Remove the death note for DST from DST_DEATH. */
if (dst_death)