------- Comment #5 from jakub at gcc dot gnu dot org 2008-09-10 07:10 ------- This is dse1 which turns: (insn 5 2 7 2 P.c:8 (set (mem/f/c/i:DI (plus:DI (reg/f:DI 20 frame) (const_int -24 [0xffffffffffffffe8])) [2 ip+0 S8 A64]) (symbol_ref:DI ("c") <var_decl 0x7fe225d2c820 c>)) 89 {*movdi_1_rex64} (nil))
(insn 7 5 8 2 P.c:12 (set (reg:QI 59) (mem:QI (plus:DI (reg/f:DI 20 frame) (const_int -24 [0xffffffffffffffe8])) [0 S1 A8])) 62 {*movqi_1} (nil)) (insn 8 7 9 2 P.c:12 (set (mem/s/j:QI (plus:DI (reg/f:DI 20 frame) (const_int -16 [0xfffffffffffffff0])) [0 a+0 S1 A64]) (reg:QI 59)) 62 {*movqi_1} (expr_list:REG_DEAD (reg:QI 59) (nil))) (insn 9 8 10 2 P.c:12 (set (reg:QI 60) (mem:QI (plus:DI (reg/f:DI 20 frame) (const_int -23 [0xffffffffffffffe9])) [0 S1 A8])) 62 {*movqi_1} (nil)) (insn 10 9 11 2 P.c:12 (set (mem/s/j:QI (plus:DI (reg/f:DI 20 frame) (const_int -15 [0xfffffffffffffff1])) [0 a+1 S1 A8]) (reg:QI 60)) 62 {*movqi_1} (expr_list:REG_DEAD (reg:QI 60) (nil))) into: (insn 21 2 22 2 P.c:8 (set (reg/f:DI 63) (symbol_ref:DI ("c") <var_decl 0x7fe225d2c820 c>)) -1 (nil)) (insn 22 21 24 2 P.c:8 (set (reg:QI 62) (subreg:QI (reg/f:DI 63) 0)) -1 (nil)) (insn 24 22 23 2 P.c:8 (set (reg:HI 64) (subreg:HI (symbol_ref:DI ("c") <var_decl 0x7fe225d2c820 c>) 0)) -1 (nil)) (insn 23 24 25 2 P.c:8 (parallel [ (set (reg:HI 64) (lshiftrt:HI (reg:HI 64) (const_int 8 [0x8]))) (clobber (reg:CC 17 flags)) ]) -1 (nil)) (insn 25 23 5 2 P.c:8 (set (reg:QI 65) (subreg:QI (reg:HI 64) 0)) -1 (nil)) (insn 5 25 7 2 P.c:8 (set (mem/f/c/i:DI (plus:DI (reg/f:DI 20 frame) (const_int -24 [0xffffffffffffffe8])) [2 ip+0 S8 A64]) (symbol_ref:DI ("c") <var_decl 0x7fe225d2c820 c>)) 89 {*movdi_1_rex64} (nil)) (insn 7 5 8 2 P.c:12 (set (reg:QI 59) (reg:QI 62)) 62 {*movqi_1} (nil)) (insn 8 7 9 2 P.c:12 (set (mem/s/j:QI (plus:DI (reg/f:DI 20 frame) (const_int -16 [0xfffffffffffffff0])) [0 a+0 S1 A64]) (reg:QI 59)) 62 {*movqi_1} (expr_list:REG_DEAD (reg:QI 59) (nil))) (insn 9 8 10 2 P.c:12 (set (reg:QI 60) (reg:QI 65)) 62 {*movqi_1} (nil)) (insn 10 9 11 2 P.c:12 (set (mem/s/j:QI (plus:DI (reg/f:DI 20 frame) (const_int -15 [0xfffffffffffffff1])) [0 a+1 S1 A8]) (reg:QI 60)) 62 {*movqi_1} (expr_list:REG_DEAD (reg:QI 60) (nil))) (subreg (symbol_ref ()) is of course invalid. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37382