https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111373
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Summary|Register moves right before |conditional " |stores and return | Status|UNCONFIRMED |NEW Keywords|ra | Component|rtl-optimization |middle-end Last reconfirmed| |2023-09-11 --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- In this case we have this right before expand: if (v$2_9 < v$1_25) goto <bb 7>; [INV] else goto <bb 8>; [INV] <bb 7> : <bb 8> : # a$1_65 = PHI <a$1_64(6), a$2_66(7)> # a$2_67 = PHI <a$2_66(6), a$1_64(7)> But this is a conditional move. The biggest issue here is that GCC is not detecting this as a conditional move though. And then make really bad register allocation decisions due to that.