------- 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