summaryrefslogtreecommitdiff
path: root/gcc/rtlanal.c
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2000-05-19 03:44:58 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2000-05-19 03:44:58 +0000
commit2634dcd9a3568fd1e2af505fa5c0cd0588b8fb3b (patch)
treed5333410ff7875c1b503f1494dbce8488dfa6e4d /gcc/rtlanal.c
parent0a0ecd8f7517897cdc89726b65bf7e18ea581bdc (diff)
downloadgcc-2634dcd9a3568fd1e2af505fa5c0cd0588b8fb3b.tar.gz
* rtlanal.c (insn_dependant_p, insn_dependant_p_1): New.
* rtl.h (insn_dependant_p): Declare it. * loop.c (strength_reduce): Use it. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34010 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/rtlanal.c')
-rw-r--r--gcc/rtlanal.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index 891799b1130..e9a98162952 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -26,6 +26,7 @@ Boston, MA 02111-1307, USA. */
static int rtx_addr_can_trap_p PARAMS ((rtx));
static void reg_set_p_1 PARAMS ((rtx, rtx, void *));
+static void insn_dependant_p_1 PARAMS ((rtx, rtx, void *));
static void reg_set_last_1 PARAMS ((rtx, rtx, void *));
@@ -687,6 +688,45 @@ modified_in_p (x, insn)
return 0;
}
+
+/* Return true if anything in insn X is (anti,output,true) dependant on
+ anything in insn Y. */
+
+int
+insn_dependant_p (x, y)
+ rtx x, y;
+{
+ rtx tmp;
+
+ if (! INSN_P (x) || ! INSN_P (y))
+ abort ();
+
+ tmp = PATTERN (y);
+ note_stores (PATTERN (x), insn_dependant_p_1, &tmp);
+ if (tmp == NULL_RTX)
+ return 1;
+
+ tmp = PATTERN (x);
+ note_stores (PATTERN (y), insn_dependant_p_1, &tmp);
+ if (tmp == NULL_RTX)
+ return 1;
+
+ return 0;
+}
+
+/* A helper routine for insn_dependant_p called through note_stores. */
+
+static void
+insn_dependant_p_1 (x, pat, data)
+ rtx x;
+ rtx pat ATTRIBUTE_UNUSED;
+ void *data;
+{
+ rtx * pinsn = (rtx *) data;
+
+ if (*pinsn && reg_mentioned_p (x, *pinsn))
+ *pinsn = NULL_RTX;
+}
/* Given an INSN, return a SET expression if this insn has only a single SET.
It may also have CLOBBERs, USEs, or SET whose output