http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52306
--- Comment #15 from Mikael Pettersson <mikpe at it dot uu.se> 2013-01-30 17:34:11 UTC --- (In reply to comment #1) > The bug, duplicated by compiling attachment 26150 [details], from bug 43437 > comment 16, > with a cross-compiler to m68k-elf with -O -c, exposes a reload problem. > Before > reload, we have this insn: > > (insn 288 287 290 40 (set (reg/f:SI 124 [ D.1788 ]) > (mem/f:SI (post_inc:SI (reg:SI 145 [ ivtmp.76 ])) [5 MEM[base: > D.1889_285, offset: 0B]+0 S4 A16])) pr52306.c:278 37 {*movsi_m68k2} > (expr_list:REG_INC (reg:SI 145 [ ivtmp.76 ]) > (nil))) But isn't this already invalid, as it has both a post_inc and a REG_INC of the same (reg:SI 145 [ ivtmp.76 ]) operand? This is produced by the auto_inc_dec pass. Before that we have (175r.fwprop2): (insn 188 187 190 22 (set (reg/v:SI 76 [ i ]) (plus:SI (reg/v:SI 76 [ i ]) (const_int 1 [0x1]))) pr43437-2.c:222 132 {*addsi3_internal} (nil)) (insn 190 188 191 22 (set (cc0) (compare (reg/v:SI 76 [ i ]) (reg/v:SI 68 [ n ]))) pr43437-2.c:222 14 {*m68k.md:486} (nil)) which auto_inc_dec turns into (176r.auto_inc_dec): 289 r145:SI=r145:SI+0x4 288 r124:SI=[r145:SI] 288 r124:SI=[r145:SI] found mem(288) *(r[145]+0) 289 r145:SI=r145:SI+0x4 found post inc(289) r[145]+=4 trying SIMPLE_POST_INC rescanning insn with uid = 288. deleting insn with uid = 288. deleting insn with uid = 289. ****success 288 r124:SI=[r145:SI++] REG_INC: r145:SI ... 288 r124:SI=[r145:SI++] REG_INC: r145:SI ... (insn 288 287 290 41 (set (reg/f:SI 124 [ D.1812 ]) (mem/f:SI (post_inc:SI (reg:SI 145 [ ivtmp.80 ])) [5 MEM[base: D.1914_291, offset: 0B]+0 S4 A16])) pr43437-2.c:278 37 {*movsi_m68k2} (expr_list:REG_INC (reg:SI 145 [ ivtmp.80 ]) (nil))) Is this valid?