diff options
author | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-01-19 18:28:58 +0000 |
---|---|---|
committer | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-01-19 18:28:58 +0000 |
commit | 4b3032277cf18539af47a51378bddd23f0bd9ded (patch) | |
tree | 086e54d82c89c2d5ce11a4c14e8e7c5454d17972 /gcc/rtlanal.c | |
parent | 9a504a44c5d30a9057d15fb7d292cc52b098a968 (diff) | |
download | gcc-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.c | 42 |
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); } |