re PR rtl-optimization/33927 (replace_read in dse.c could handle cases where GET_MODE...
authorRichard Sandiford <rsandifo@nildram.co.uk>
Sat, 22 Mar 2008 19:37:53 +0000 (19:37 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Sat, 22 Mar 2008 19:37:53 +0000 (19:37 +0000)
commit18b526e806ab64557cd575ff407fcb1da16ee8fd
treebb912a45ce2ff3b1666c9a26271e0833dc4b7c16
parent48e55066d5d0cd652b6527f08cb67768c4aaabe7
re PR rtl-optimization/33927 (replace_read in dse.c could handle cases where GET_MODE_CLASS (read_mode) != GET_MODE_CLASS (store_mode) (and the size is the same))

gcc/
PR rtl-optimization/33927
* Makefile.in (dse.o): Depend on $(TM_P_H).
* expr.h (extract_low_bits): Declare.
* expmed.c (extract_low_bits): New function.
* rtlhooks.c (gen_lowpart_general): Generalize SUBREG handling.
* dse.c: Include tm_p.h.
(find_shift_sequence): Remove the read_reg argument and return the
read value.  Emit the instructions instead of returning them.
Iterate on new_mode rather than calculating it each time.
Check MODES_TIEABLE_P.  Use simplify_gen_subreg to convert the
source to NEW_MODE and extract_low_bits to convert the shifted
value to READ_MODE.
(replace_read): Allow the load and store to have different mode
classes.  Use extract_low_bits when SHIFT == 0.  Create the shift
or extraction instructions before trying the replacement.  Update
dump-file code accordingly, avoiding use of REGNO (store_info->rhs).

gcc/testsuite/
* gcc.target/mips/dse-1.c: Add checks for zeros.

From-SVN: r133452
gcc/ChangeLog
gcc/Makefile.in
gcc/dse.c
gcc/expmed.c
gcc/expr.h
gcc/rtlhooks.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/mips/dse-1.c