https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114591
--- Comment #8 from Uroš Bizjak <ubizjak at gmail dot com> --- BTW: The reason for the original change: (define_insn "*movhi_internal" - [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r ,r ,m ,*k,*k ,*r,*m,*k,?r,?v,*v,*v,*m") - (match_operand:HI 1 "general_operand" "r ,rn,rm,rn,*r,*km,*k,*k,CBC,v, r, v, m, v"))] + [(set (match_operand:HI 0 "nonimmediate_operand" + "=r,r,r,m ,*k,*k ,r ,m ,*k ,?r,?*v,*v,*v,*v,m") + (match_operand:HI 1 "general_operand" + "r ,n,m,rn,r ,*km,*k,*k,CBC,*v,r ,C ,*v,m ,*v"))] was that (r,r) overrides (r,rn) and (r,rm), so the later two can be changed (without introducing any side effect) to (r,n) and (r,m), since (reg,reg) is always matched by the (r,r) constraint. The different treatment of the changed later two patterns is confusing at least.