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?