https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119131
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- In cmpelim dump I still see (insn 176 7 8 2 (set (reg:SD 47 v15 [207]) (const_double:SD 0E-101 [N/A])) "pr119131.c":11:24 78 {*movsd_aarch64} (expr_list:REG_EQUIV (const_double:SD 0E-101 [N/A]) (nil))) but starting with pro_and_epilogue dump it is (insn 236 27 199 4 (set (reg:SD 47 v15 [207]) (const_double:SD 0E-101 [N/A])) -1 (nil)) (both before and after that commit), no idea what changed. Before that commit sched_fusion recognizes it again as *movsd_aarch64, but after that it doesn't. The insn uses aarch64_valid_fp_move as predicate and that since that commit ends with return can_create_pseudo_p (); so it changes from matching into not matching any more after reload. That feels really bad idea unless it is also guaranteed to be split by then.