diff options
author | davem <davem@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-09-12 01:03:36 +0000 |
---|---|---|
committer | davem <davem@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-09-12 01:03:36 +0000 |
commit | 53309b203442541ace0cbb0e8e7eed5dd3cbac50 (patch) | |
tree | 6a94719da1d0636b9e8e23c1c16030b3eb36f44a /gcc/rtlanal.c | |
parent | 226ea056e3ab955a776f4d2eb126d97e361ed8c7 (diff) | |
download | gcc-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.c | 21 |
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); } } } |