diff options
author | Richard Henderson <rth@cygnus.com> | 2000-05-05 09:48:24 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2000-05-05 09:48:24 -0700 |
commit | 37ceff9dc30e39146fbce6a1cf8c5d1c8bc19b20 (patch) | |
tree | 6567346a5dad88f51f3e42daa4c227d03f5b7fdd | |
parent | 1a8bb3dd20462d632a53f4cf25954239181a7ca8 (diff) | |
download | gcc-37ceff9dc30e39146fbce6a1cf8c5d1c8bc19b20.zip gcc-37ceff9dc30e39146fbce6a1cf8c5d1c8bc19b20.tar.gz gcc-37ceff9dc30e39146fbce6a1cf8c5d1c8bc19b20.tar.bz2 |
rtlanal.c (reg_overlap_mentioned_p): Treat parallels in the same way emit_group_load does.
* rtlanal.c (reg_overlap_mentioned_p): Treat parallels in the
same way emit_group_load does.
From-SVN: r33715
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/rtlanal.c | 27 |
2 files changed, 21 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e0e69d5..84e96eb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2000-05-05 Richard Henderson <rth@cygnus.com> + + * rtlanal.c (reg_overlap_mentioned_p): Treat parallels in the + same way emit_group_load does. + 2000-05-05 Mark Elbrecht <snowball3@bigfoot.com> * toplev.c (output_file_directive): Use IS_DIR_SEPARATOR. diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index 2f9b376..8a3eb62 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -992,17 +992,22 @@ reg_overlap_mentioned_p (x, in) return reg_mentioned_p (x, in); case PARALLEL: - if (GET_MODE (x) == BLKmode) - { - register int i; - - /* If any register in here refers to it we return true. */ - for (i = XVECLEN (x, 0) - 1; i >= 0; i--) - if (reg_overlap_mentioned_p (SET_DEST (XVECEXP (x, 0, i)), in)) - return 1; - return 0; - } - break; + { + int i, n; + + /* Check for a NULL entry, used to indicate that the parameter goes + both on the stack and in registers. */ + if (XEXP (XVECEXP (x, 0, 0), 0)) + i = 0; + else + i = 1; + + /* If any register in here refers to it we return true. */ + for (n = XVECLEN (x, 0); i < n; ++i) + if (reg_overlap_mentioned_p (XEXP (XVECEXP (x, 0, i), 0), in)) + return 1; + return 0; + } default: break; |