http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47744
--- Comment #14 from Uros Bizjak <ubizjak at gmail dot com> 2011-07-17 20:07:38 UTC --- (In reply to comment #13) > Looking at the example in Comment #0, RTX expansion pass generates: > > ;; D.2794_77 = &q + D.2793_76; > > (insn 84 83 85 (parallel [ > (set (reg:DI 173) > (plus:DI (reg/f:DI 54 virtual-stack-vars) > (const_int -160 [0xffffffffffffff60]))) > (clobber (reg:CC 17 flags)) > ]) pr47744.c:5 -1 > (nil)) > > Why 64bit virtual register to hold &q _address_? Later, reg:DI 173 gets propagated into (insn 89): (insn 89 87 90 3 (set (reg:SI 177) (plus:SI (plus:SI (mult:SI (reg:SI 175) (const_int 8 [0x8])) (subreg:SI (reg/f:DI 20 frame) 0)) (const_int -160 [0xffffffffffffff60]))) pr47744.c:5 250 {*lea_2_x32} (expr_list:REG_DEAD (reg:SI 175) (nil))) which chokes reload when trying to eliminate frame pointer: (insn 89 87 90 3 (set (reg:SI 39 r10 [177]) (plus:SI (plus:SI (mult:SI (reg:SI 0 ax [175]) (const_int 8 [0x8])) (subreg:SI (plus:DI (reg/f:DI 7 sp) (const_int 200 [0xc8])) 0)) (const_int -160 [0xffffffffffffff60]))) pr47744.c:5 250 {*lea_2_x32} (nil))