------- Comment #1 from rguenth at gcc dot gnu dot org 2010-03-22 11:11 ------- #1 0x0000000000958e6e in form_sum (mode=SImode, x=0x7ffff7fb2a80, y=0x7ffff5ae1b58) at /space/rguenther/src/svn/trunk/gcc/reload.c:5348 5348 gcc_assert (GET_MODE (x) == mode || GET_MODE (x) == VOIDmode); (gdb) call debug_rtx (x) (reg/v:DI 41 r12 [orig:61 b ] [61]) (gdb) up #2 0x000000000096560c in eliminate_regs_1 (x=0x7ffff5ae1af8, mem_mode=VOIDmode, insn=0x7ffff5ae1ac8, may_use_invariant=1 '\001') at /space/rguenther/src/svn/trunk/gcc/reload1.c:2678 2678 new_rtx = form_sum (GET_MODE (x), new0, new1); #3 0x0000000000965914 in eliminate_regs_1 (x=0x7ffff5ae1ae0, mem_mode=VOIDmode, insn=0x7ffff5ae1ac8, may_use_invariant=1 '\001') at /space/rguenther/src/svn/trunk/gcc/reload1.c:2745 2745 new_rtx = eliminate_regs_1 (XEXP (x, 0), mem_mode, insn, true); #4 0x00000000009659f0 in eliminate_regs_1 (x=0x7ffff5ae1ac8, mem_mode=VOIDmode, insn=0x7ffff5ae1ac8, may_use_invariant=1 '\001') at /space/rguenther/src/svn/trunk/gcc/reload1.c:2768 2768 new_rtx = eliminate_regs_1 (XEXP (x, 1), mem_mode, insn, true); #5 0x00000000009679c5 in eliminate_regs_in_insn (insn=0x7ffff5ade000, replace=0) at /space/rguenther/src/svn/trunk/gcc/reload1.c:3596 3596 REG_NOTES (insn) (gdb) call debug_rtx (insn) (insn 26 25 27 5 /tmp/t.f90:9 (set (mem/c/i:SI (plus:DI (reg/f:DI 7 sp) (const_int 8 [0x8])) [6 D.1561+0 S4 A64]) (reg:SI 0 ax [83])) 47 {*movsi_1} (expr_list:REG_DEAD (reg:SI 0 ax [83]) (expr_list:REG_EQUAL (plus:SI (reg/v:DI 41 r12 [orig:61 b ] [61]) (mem/c/i:SI (plus:DI (reg/f:DI 20 frame) (const_int -4 [0xfffffffffffffffc])) [6 c+0 S4 A32])) (nil))))
somehow in the REG_EQUAL note we have a SI mode PLUS with DI mode arguments. It is regmove which changes (insn 26 25 27 5 /tmp/t.f90:9 (set (mem/c/i:SI (plus:DI (reg/f:DI 20 frame) (const_int -8 [0xfffffffffffffff8])) [6 D.1561+0 S4 A64]) (reg:SI 83)) 47 {*movsi_1} (expr_list:REG_DEAD (reg:SI 83) (expr_list:REG_EQUAL (plus:SI (reg/v:SI 61 [ b ]) (mem/c/i:SI (plus:DI (reg/f:DI 20 frame) (const_int -4 [0xfffffffffffffffc])) [6 c+0 S4 A32])) (nil)))) to (insn 26 25 27 5 /tmp/t.f90:9 (set (mem/c/i:SI (plus:DI (reg/f:DI 20 frame) (const_int -8 [0xfffffffffffffff8])) [6 D.1561+0 S4 A64]) (reg:SI 83)) 47 {*movsi_1} (expr_list:REG_DEAD (reg:SI 83) (expr_list:REG_EQUAL (plus:SI (reg/v:DI 61 [ b ]) (mem/c/i:SI (plus:DI (reg/f:DI 20 frame) (const_int -4 [0xfffffffffffffffc])) [6 c+0 S4 A32])) (nil)))) -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |bernds at gcc dot gnu dot | |org Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 Last reconfirmed|0000-00-00 00:00:00 |2010-03-22 11:11:38 date| | Target Milestone|--- |4.5.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43475