summaryrefslogtreecommitdiff
path: root/gcc/rtlanal.c
diff options
context:
space:
mode:
authordavem <davem@138bc75d-0d04-0410-961f-82ee72b054a4>1998-09-12 01:03:36 +0000
committerdavem <davem@138bc75d-0d04-0410-961f-82ee72b054a4>1998-09-12 01:03:36 +0000
commit53309b203442541ace0cbb0e8e7eed5dd3cbac50 (patch)
tree6a94719da1d0636b9e8e23c1c16030b3eb36f44a /gcc/rtlanal.c
parent226ea056e3ab955a776f4d2eb126d97e361ed8c7 (diff)
downloadgcc-53309b203442541ace0cbb0e8e7eed5dd3cbac50.tar.gz
* flow.c (mark_set_1): Recognize multi-register structure return
values in CALL insns. (mark_used_regs): Likewise. (count_reg_sets_1): Likewise. (count_reg_references): Likewise. * rtlanal.c (note_stores): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@22395 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/rtlanal.c')
-rw-r--r--gcc/rtlanal.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index fb4176264b3..41625ee2868 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -1086,7 +1086,16 @@ note_stores (x, fun)
|| GET_CODE (dest) == SIGN_EXTRACT
|| GET_CODE (dest) == STRICT_LOW_PART)
dest = XEXP (dest, 0);
- (*fun) (dest, x);
+
+ if (GET_CODE (dest) == PARALLEL
+ && GET_MODE (dest) == BLKmode)
+ {
+ register int i;
+ for (i = XVECLEN (dest, 0) - 1; i >= 0; i--)
+ (*fun) (SET_DEST (XVECEXP (dest, 0, i)), x);
+ }
+ else
+ (*fun) (dest, x);
}
else if (GET_CODE (x) == PARALLEL)
{
@@ -1105,7 +1114,15 @@ note_stores (x, fun)
|| GET_CODE (dest) == SIGN_EXTRACT
|| GET_CODE (dest) == STRICT_LOW_PART)
dest = XEXP (dest, 0);
- (*fun) (dest, y);
+ if (GET_CODE (dest) == PARALLEL
+ && GET_MODE (dest) == BLKmode)
+ {
+ register int i;
+ for (i = XVECLEN (dest, 0) - 1; i >= 0; i--)
+ (*fun) (SET_DEST (XVECEXP (dest, 0, i)), y);
+ }
+ else
+ (*fun) (dest, y);
}
}
}