This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug middle-end/52306] ICE in cselib_record_set, at cselib.c:2158


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?


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]