diff options
author | Jan Hubicka <jh@suse.cz> | 2003-03-14 21:15:13 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2003-03-14 20:15:13 +0000 |
commit | cd648cec5c78e596fc86e570f243dac6752ad764 (patch) | |
tree | 3085a6e478e08536454831e0b1720bcba93526a0 /gcc/rtlanal.c | |
parent | 82c34dcb178f76c9ce6c0a6b7fac79b3c6aaff8b (diff) | |
download | gcc-cd648cec5c78e596fc86e570f243dac6752ad764.zip gcc-cd648cec5c78e596fc86e570f243dac6752ad764.tar.gz gcc-cd648cec5c78e596fc86e570f243dac6752ad764.tar.bz2 |
cselib.c (clear_table): Do not take argument; always clear just used slots.
* cselib.c (clear_table): Do not take argument; always clear just
used slots.
(cselib_process_insn): Update call of clear_table
(cselib_init): Do not call clear_table.
(cselib_finish): Clear table.
* cse.c (count_reg_usage): Do not check side_effects_p.
* rtlanal.c (set_noop_p): Check side_effects_p only when set looks
like noop.
(find_reg_equal_equiv_note): Do not use find_reg_note.
From-SVN: r64369
Diffstat (limited to 'gcc/rtlanal.c')
-rw-r--r-- | gcc/rtlanal.c | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index d481718..4e60417 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -1327,19 +1327,17 @@ set_noop_p (set) rtx src = SET_SRC (set); rtx dst = SET_DEST (set); - if (side_effects_p (src) || side_effects_p (dst)) - return 0; - - if (GET_CODE (dst) == MEM && GET_CODE (src) == MEM) - return rtx_equal_p (dst, src); - if (dst == pc_rtx && src == pc_rtx) return 1; + if (GET_CODE (dst) == MEM && GET_CODE (src) == MEM) + return rtx_equal_p (dst, src) && !side_effects_p (dst); + if (GET_CODE (dst) == SIGN_EXTRACT || GET_CODE (dst) == ZERO_EXTRACT) return rtx_equal_p (XEXP (dst, 0), src) - && ! BYTES_BIG_ENDIAN && XEXP (dst, 2) == const0_rtx; + && ! BYTES_BIG_ENDIAN && XEXP (dst, 2) == const0_rtx + && !side_effects_p (src); if (GET_CODE (dst) == STRICT_LOW_PART) dst = XEXP (dst, 0); @@ -2018,14 +2016,19 @@ rtx find_reg_equal_equiv_note (insn) rtx insn; { - rtx note; + rtx link; - if (single_set (insn) == 0) + if (!INSN_P (insn)) return 0; - else if ((note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0) - return note; - else - return find_reg_note (insn, REG_EQUAL, NULL_RTX); + for (link = REG_NOTES (insn); link; link = XEXP (link, 1)) + if (REG_NOTE_KIND (link) == REG_EQUAL + || REG_NOTE_KIND (link) == REG_EQUIV) + { + if (single_set (insn) == 0) + return 0; + return link; + } + return NULL; } /* Return true if DATUM, or any overlap of DATUM, of kind CODE is found |