diff options
author | J"orn Rennecke <amylaar@cygnus.co.uk> | 2000-05-25 01:11:22 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 2000-05-25 02:11:22 +0100 |
commit | db7ba7424119d53c01667af6957ca943c0cd2ff1 (patch) | |
tree | 58a6300e6b755d51992c7ba3c862952aada55ae8 /gcc/rtlanal.c | |
parent | 04da69d3a6eeb4b9cbd3efc5473d063577e66d58 (diff) | |
download | gcc-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.c | 26 |
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; +} |