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?