aboutsummaryrefslogtreecommitdiff
path: root/gcc/rtlanal.c
diff options
context:
space:
mode:
authorJ"orn Rennecke <amylaar@cygnus.co.uk>2000-05-25 01:11:22 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2000-05-25 02:11:22 +0100
commitdb7ba7424119d53c01667af6957ca943c0cd2ff1 (patch)
tree58a6300e6b755d51992c7ba3c862952aada55ae8 /gcc/rtlanal.c
parent04da69d3a6eeb4b9cbd3efc5473d063577e66d58 (diff)
downloadgcc-db7ba7424119d53c01667af6957ca943c0cd2ff1.zip
gcc-db7ba7424119d53c01667af6957ca943c0cd2ff1.tar.gz
gcc-db7ba7424119d53c01667af6957ca943c0cd2ff1.tar.bz2
rtl.h (loc_mentioned_in_p): Declare.
* rtl.h (loc_mentioned_in_p): Declare. * reload.c (loc_mentioned_in_p): Moved from here... * rtlanal.c (loc_mentioned_in_p): to here. No longer static. Fix loop increment for 'E' handling. * loop.c (strength_reduce): When doing biv->giv conversion, take multi-insn biv increments into account. From-SVN: r34150
Diffstat (limited to 'gcc/rtlanal.c')
-rw-r--r--gcc/rtlanal.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index e9a9816..8af6c7c 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -2358,3 +2358,29 @@ insns_safe_to_move_p (from, to, new_to)
return 0;
}
+
+/* Return non-zero if IN contains a piece of rtl that has the address LOC */
+int
+loc_mentioned_in_p (loc, in)
+ rtx *loc, in;
+{
+ enum rtx_code code = GET_CODE (in);
+ const char *fmt = GET_RTX_FORMAT (code);
+ int i, j;
+
+ for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
+ {
+ if (loc == &in->fld[i].rtx)
+ return 1;
+ if (fmt[i] == 'e')
+ {
+ if (loc_mentioned_in_p (loc, XEXP (in, i)))
+ return 1;
+ }
+ else if (fmt[i] == 'E')
+ for (j = XVECLEN (in, i) - 1; j >= 0; j--)
+ if (loc_mentioned_in_p (loc, XVECEXP (in, i, j)))
+ return 1;
+ }
+ return 0;
+}