aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@cygnus.com>2000-05-05 09:48:24 -0700
committerRichard Henderson <rth@gcc.gnu.org>2000-05-05 09:48:24 -0700
commit37ceff9dc30e39146fbce6a1cf8c5d1c8bc19b20 (patch)
tree6567346a5dad88f51f3e42daa4c227d03f5b7fdd /gcc
parent1a8bb3dd20462d632a53f4cf25954239181a7ca8 (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/rtlanal.c27
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;