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

--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Eric Botcazou from comment #5)
> > postreload leaves a REG_DEAD note on the
> > 
> > (insn 19 78 21 4 (parallel [
> >             (set (mem:DI (reg/f:SI 3 bx [orig:68 D.1736 ] [68]) [4 *_18+0 S8
> > A64])
> >                 (sign_extend:DI (reg:SI 0 ax [orig:75 b ] [75])))
> >             (clobber (reg:CC 17 flags))
> >             (clobber (reg:SI 1 dx [80]))
> >         ]) t.c:9 137 {extendsidi2_1}
> >      (expr_list:REG_UNUSED (reg:SI 1 dx [80])
> >         (expr_list:REG_DEAD (reg:SI 0 ax [orig:75 b ] [75])
> >             (nil))))
> > 
> > which is bogus.
> 
> Leaving REG_DEAD/REG_UNUSED notes at the end of a pass is OK, it's up to the
> next pass using them to make sure they are valid by invoking DF.

Which means that split has to do that?  Or that the use of dead_or_set_p ()
in

;; Extend to memory case when source register does die.
(define_split
  [(set (match_operand:DI 0 "memory_operand")
        (sign_extend:DI (match_operand:SI 1 "register_operand")))
   (clobber (reg:CC FLAGS_REG))
   (clobber (match_operand:SI 2 "register_operand"))]
  "(reload_completed
    && dead_or_set_p (insn, operands[1])
    && !reg_mentioned_p (operands[1], operands[0]))"
  [(set (match_dup 3) (match_dup 1))
   (parallel [(set (match_dup 1) (ashiftrt:SI (match_dup 1) (const_int 31)))
              (clobber (reg:CC FLAGS_REG))])
   (set (match_dup 4) (match_dup 1))]
  "split_double_mode (DImode, &operands[0], 1, &operands[3], &operands[4]);")

is bogus?

Reply via email to