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?

Reply via email to