https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84659

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2018-03-06
                 CC|                            |abel at gcc dot gnu.org,
                   |                            |amonakov at gcc dot gnu.org,
                   |                            |jakub at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
So, we have bb 5:
(code_label 29 65 30 5 4 (nil) [1 uses])
(note 30 29 32 5 [bb 5] NOTE_INSN_BASIC_BLOCK)
(insn 32 30 33 5 (set (mem:SI (reg/f:SI 125 [ _5 ]) [1 *_20+0 S4 A32])
        (reg:SI 143)) "pr84659.c":7 503 {*movsi_internal1}
     (expr_list:REG_DEAD (reg:SI 143)
        (expr_list:REG_DEAD (reg/f:SI 125 [ _5 ])
            (nil))))
(insn 33 32 34 5 (set (reg/f:SI 125 [ _5 ])
        (mem/f:SI (reg/v/f:SI 129 [ x ]) [2 *x_10(D)+0 S4 A32])) "pr84659.c":4
503 {*movsi_internal1}
     (nil))
(insn 34 33 36 5 (set (reg:SI 126 [ _6 ])
        (mem:SI (reg/f:SI 125 [ _5 ]) [1 *_5+0 S4 A32])) "pr84659.c":4 503
{*movsi_internal1}
     (nil))
(insn 36 34 64 5 (set (reg:CC 144)
        (compare:CC (reg:SI 126 [ _6 ])
            (const_int 0 [0]))) "pr84659.c":4 774 {*cmpsi_signed}
     (nil))
(insn 64 36 37 5 (const_int -1 [0xffffffffffffffff]) "pr84659.c":7 -1
     (nil))
(jump_insn 37 64 38 5 (set (pc)
        (if_then_else (le (reg:CC 144)
                (const_int 0 [0]))
            (label_ref:SI 29)
            (pc))) "pr84659.c":4 849 {*rs6000.md:12271}
     (expr_list:REG_DEAD (reg:CC 144)
        (int_list:REG_BR_PROB 955630228 (nil)))
 -> 29)

with succs edges 5->5 and 5->6, and call compute_live_after_bb on that bb.
This in turn does:
3073          IOR_REG_SET (lv, compute_live (sel_bb_head (e->dest)));
where sel_bb_head is insn 32 above, but src is NULL there, BB_LV_SET_VALID_P
(bb) is false and so is INSN_LIVE_VALID_P in all the insns (32, 34, 36, 64 and
37).
This means we:
3124      temp = NEXT_INSN (insn);
3125      final = NEXT_INSN (BB_END (bb));
3126      while (temp != final && ! INSN_LIVE_VALID_P (temp))
3127        temp = NEXT_INSN (temp);
3128      if (temp == final)
3129        {
3130          lv = compute_live_after_bb (bb);
3131          temp = PREV_INSN (temp);
3132        }
temp == final == first insn of the following bb, and we recurse again into
compute_live_after_bb.

Reply via email to