diff options
author | Richard Kenner <kenner@vlsi1.ultra.nyu.edu> | 2001-01-19 18:28:58 +0000 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 2001-01-19 13:28:58 -0500 |
commit | 7193d1dc3d0359e9f3257d3b75d5050fa73187b3 (patch) | |
tree | 086e54d82c89c2d5ce11a4c14e8e7c5454d17972 /gcc/rtlanal.c | |
parent | 79b9ec0ddb066613d4bf6a64b12eb45ea8fdcd95 (diff) | |
download | gcc-7193d1dc3d0359e9f3257d3b75d5050fa73187b3.zip gcc-7193d1dc3d0359e9f3257d3b75d5050fa73187b3.tar.gz gcc-7193d1dc3d0359e9f3257d3b75d5050fa73187b3.tar.bz2 |
rtl.texi (SET, CLOBBER): Document PARALLEL as SET_DEST possibility.
* 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.
From-SVN: r39141
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 a869bb7..ff75d5c 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); } |