https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111225
--- Comment #2 from Hongtao.liu <crazylht at gmail dot com> --- (In reply to Hongtao.liu from comment #1) > So reload thought CT_SPECIAL_MEMORY is always win for spilled_pesudo_p, but > here Br should be a vec_dup:mem which doesn't match spilled_pseduo_p. > > case CT_SPECIAL_MEMORY: > if (satisfies_memory_constraint_p (op, cn)) > win = true; > else if (spilled_pseudo_p (op)) > win = true; > break; vmBr constraint is ok as long as m is matched before Br, but here m in invalid then exposed the problem. The backend walkaround is disabling Br when m is not availble. Or the middle-end fix should be removing win for spilled_pseudo_p (op) in CT_SPECIAL_MEMORY.