aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-04-09 17:48:01 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1994-04-09 17:48:01 -0400
commit9894a29157c45b6f6a0237c96729a1ad5de4183d (patch)
treee6d335f97c24418a13331938581f599c1a8f39e3
parent74f171be20124890c3b14881350b561d2e99ed54 (diff)
downloadgcc-9894a29157c45b6f6a0237c96729a1ad5de4183d.zip
gcc-9894a29157c45b6f6a0237c96729a1ad5de4183d.tar.gz
gcc-9894a29157c45b6f6a0237c96729a1ad5de4183d.tar.bz2
(FINAL_PRESCAN_INSN): Define.
From-SVN: r7012
-rw-r--r--gcc/config/rs6000/rs6000.h12
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 3bd77cd..b58731a 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -1282,9 +1282,17 @@ struct rs6000_args {int words, fregno, nargs_prototype; };
}
/* Define this if some processing needs to be done immediately before
- emitting code for an insn. */
+ emitting code for an insn.
-/* #define FINAL_PRESCAN_INSN(INSN,OPERANDS,NOPERANDS) */
+ For the RS/6000, we check if there is a dead PRE_INC value. If so,
+ replace it with a normal displacement. This is done in case the
+ output of the load insn duplicates the register being incremented.
+ That produces an insn that isn't valid for PowerPC. */
+
+#define FINAL_PRESCAN_INSN(INSN,OPERANDS,NOPERANDS) \
+ if (find_reg_note (INSN, REG_INC, NULL_RTX) \
+ && find_reg_note (INSN, REG_DEAD, NULL_RTX)) \
+ rs6000_convert_preincs (PATTERN (INSN), INSN);
/* Specify the machine mode that this machine uses
for the index in the tablejump instruction. */