------- Comment #8 from danglin at gcc dot gnu dot org  2010-06-15 03:35 -------
Things appear to go wrong in the loop2_invariant pass.  Prior to this pass,
the 'f' flag is not set in the rtx for ivtmp.314.  The first occurence is here:

(insn 1154 1153 1155 103 ../../gcc/gcc/gimple-pretty-print.c:1212 (set
(reg/f:DI
 274 [ ivtmp.314 ])
        (plus:DI (reg/f:DI 274 [ ivtmp.314 ])
            (const_int 8 [0x8]))) 160 {*pa.md:4941} (nil))

Setting the 'f' flag allows insn 1208 to be substituted in in insn 1209:

(insn 1208 1207 1209 110 ../../gcc/gcc/gimple.h:1643 (set (reg/f:DI 1179)
        (plus:DI (reg:DI 1178)
            (reg/f:DI 274 [ ivtmp.314 ]))) 160 {*pa.md:4941}
(expr_list:REG_DEAD
 (reg:DI 1178)
        (nil)))

(insn 1209 1208 1210 110 ../../gcc/gcc/gimple.h:1643 (set (reg/f:DI 337 [
D.3525
9 ])
        (mem/f:DI (reg/f:DI 1179) [6 S8 A64])) 120 {*pa.md:4101}
(expr_list:REG_
DEAD (reg/f:DI 1179)
        (nil)))

So, eventually, we end up with:

(insn 1209 8953 8954 ../../gcc/gcc/gimple.h:1643 (set (reg/f:DI 25 %r25
[orig:33
7 D.35259 ] [337])
        (mem/f:DI (plus:DI (reg:DI 28 %r28 [1178])
                (reg/f:DI 11 %r11 [orig:274 ivtmp.314 ] [274])) [6 S8 A64]))
120
 {*pa.md:4101} (expr_list:REG_DEAD (reg:DI 28 %r28 [1178])
        (nil)))

In expand, we had the following define for ivtmp.314:

dump_gimple_stmt (struct pretty_printer * buffer, union gimple_statement_d *
gs,
 int spc, int flags)
{
  long unsigned int ivtmp.314;


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43740

Reply via email to