------- Additional Comments From pinskia at gcc dot gnu dot org 2005-02-25
02:57 -------
This worked with 20041104 and 20041214's 4.0 so this is a new regression.
Before (in 20041214), we did the load the following way:
(insn 12 10 13 1 (set (reg:SI 122)
(mem/s/j:SI (reg/v/f:SI 119 [ s ]) [0 <variable>.size+0 S4 A32])) -1
(nil)
(nil))
(insn 13 12 15 1 (set (reg:SI 121)
(plus:SI (reg:SI 122)
(const_int -16 [0xfffffffffffffff0]))) -1 (nil)
(nil))
(insn 15 13 17 1 (set (reg:SI 123)
(const_int 0 [0x0])) -1 (nil)
(nil))
(insn 17 15 14 1 (clobber (reg:DI 120)) -1 (nil)
(insn_list:REG_LIBCALL 18 (nil)))
(insn 14 17 16 1 (set (subreg:SI (reg:DI 120) 4)
(reg:SI 121)) -1 (nil)
(nil))
(insn 16 14 18 1 (set (subreg:SI (reg:DI 120) 0)
(reg:SI 123)) -1 (nil)
(nil))
But now we get:
(insn 12 14 13 1 (set (subreg:SI (reg:DI 120) 4)
(plus:SI (mem/s/j:SI (reg/v/f:SI 119 [ s ]) [0 <variable>.size+0 S4
A32])
(const_int -16 [0xfffffffffffffff0]))) -1 (nil)
(nil))
(insn 13 12 15 1 (set (subreg:SI (reg:DI 120) 0)
(const_int 0 [0x0])) -1 (nil)
(nil))
So either expand is wrong for doing that or the target should understand the
subreg.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20203