summaryrefslogtreecommitdiff
path: root/gcc/rtlanal.c
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2001-01-19 18:28:58 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2001-01-19 18:28:58 +0000
commit4b3032277cf18539af47a51378bddd23f0bd9ded (patch)
tree086e54d82c89c2d5ce11a4c14e8e7c5454d17972 /gcc/rtlanal.c
parent9a504a44c5d30a9057d15fb7d292cc52b098a968 (diff)
downloadgcc-4b3032277cf18539af47a51378bddd23f0bd9ded.tar.gz
* rtl.texi (SET, CLOBBER): Document PARALLEL as SET_DEST possibility.
* flow.c (mark_set_1, case PARALLEL): Don't require BLKmode, allow element to be null, and always expect an EXPR_LIST. * rtlanal.c (reg_overlap_mentioned_p, note_stores): Likewise. * sched-deps.c (sched_analyze_1): Likewise. * sched-rgn.c (check_live_1, update_live_1): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@39141 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/rtlanal.c')
-rw-r--r--gcc/rtlanal.c42
1 files changed, 17 insertions, 25 deletions
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index a869bb7565f..ff75d5c5832 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -1185,18 +1185,11 @@ reg_overlap_mentioned_p (x, in)
int i;
/* If any register in here refers to it we return true. */
- for (i = XVECLEN (x, 0); i >= 0; i--)
- {
- rtx reg = XVECEXP (x, 0, i);
-
- if (GET_CODE (reg) == EXPR_LIST)
- reg = XEXP (reg, 0);
-
- if (reg_overlap_mentioned_p (reg, in))
+ for (i = XVECLEN (x, 0) - 1; i >= 0; i--)
+ if (XEXP (XVECEXP (x, 0, i), 0) != 0
+ && reg_overlap_mentioned_p (XEXP (XVECEXP (x, 0, i), 0), in))
return 1;
- return 0;
-
- }
+ return 0;
}
default:
@@ -1288,20 +1281,19 @@ note_stores (x, fun, data)
|| GET_CODE (dest) == STRICT_LOW_PART)
dest = XEXP (dest, 0);
- /* If we have a PARALLEL, SET_DEST is a list of registers or
- EXPR_LIST expressions, each of whose first operand is a register.
- We can't know what precisely is being set in these cases, so
- make up a CLOBBER to pass to the function. */
- if (GET_CODE (dest) == PARALLEL && GET_MODE (dest) == BLKmode)
- for (i = XVECLEN (dest, 0) - 1; i >= 0; i--)
- {
- rtx reg = XVECEXP (dest, 0, i);
-
- if (GET_CODE (reg) == EXPR_LIST)
- reg = XEXP (reg, 0);
-
- (*fun) (reg, gen_rtx_CLOBBER (VOIDmode, reg), data);
- }
+ /* If we have a PARALLEL, SET_DEST is a list of EXPR_LIST expressions,
+ each of whose first operand is a register. We can't know what
+ precisely is being set in these cases, so make up a CLOBBER to pass
+ to the function. */
+ if (GET_CODE (dest) == PARALLEL)
+ {
+ for (i = XVECLEN (dest, 0) - 1; i >= 0; i--)
+ if (XEXP (XVECEXP (dest, 0, i), 0) != 0)
+ (*fun) (XEXP (XVECEXP (dest, 0, i), 0),
+ gen_rtx_CLOBBER (VOIDmode,
+ XEXP (XVECEXP (dest, 0, i), 0)),
+ data);
+ }
else
(*fun) (dest, x, data);
}