From 0cd301431298eec38f4b295de65fa30f973b982b Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Sat, 9 Apr 1994 17:48:23 -0400 Subject: [PATCH] (rs6000_convert_preincs): New function. From-SVN: r7013 --- gcc/config/rs6000/rs6000.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 0cadc318cc9..04a3c3d6ea1 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -157,6 +157,34 @@ rs6000_override_options () } } +/* Look for an PRE_INC address in X that are marked as dying in INSN. + Convert the addresses to a PLUS form if one is found. */ + +void +rs6000_convert_preincs (x, insn) + rtx x; + rtx insn; +{ + enum rtx_code code = GET_CODE (x); + char *fmt; + int i, j; + + if (code == MEM && GET_CODE (XEXP (x, 0)) == PRE_INC + && find_reg_note (insn, REG_DEAD, XEXP (XEXP (x, 0), 0))) + XEXP (x, 0) = plus_constant (XEXP (XEXP (x, 0), 0), + GET_MODE_SIZE (GET_MODE (x))); + else + for (i = GET_RTX_LENGTH (code) - 1, fmt = GET_RTX_FORMAT (code); + i >= 0; i--) + { + if (fmt[i] == 'e') + rs6000_convert_preincs (XEXP (x, i), insn); + else if (fmt[i] == 'E') + for (j = XVECLEN (x, i) - 1; j >= 0; j--) + rs6000_convert_preincs (XVECEXP (x, i, j), insn); + } +} + /* Return non-zero if this function is known to have a null epilogue. */ int -- 2.30.2