I tried to reproduce the original bugs that led to these patterns, but was unable. Testsuite results are the same with and without, and eembc code size doesn't change.
So, I'm removing these patterns from the port. The remaining (subreg...) patterns are just optimizations. ; This pattern is identical to the truncsipsi2 pattern except ; that it uses a SUBREG instead of a TRUNC. It is needed in ; order to prevent reload from converting (set:SI (SUBREG:PSI (SI))) ; into (SET:PSI (PSI)). ; ; Note: using POPM.A #1 is two bytes smaller than using POPX.A.... (define_insn "movsipsi2" [(set (match_operand:PSI 0 "register_operand" "=r") (subreg:PSI (match_operand:SI 1 "register_operand" "r") 0))] "TARGET_LARGE" "PUSH.W %H1 { PUSH.W %1 { POPM.A #1, %0" ) ; This pattern is needed in order to avoid reload problems. ; It takes an SI pair of registers, adds a value to them, and ; then converts them into a single PSI register. (define_insn "addsipsi3" [(set (subreg:SI (match_operand:PSI 0 "register_operand" "=&r") 0) (plus:SI (match_operand:SI 1 "register_operand" "0") (match_operand 2 "general_operand" "rmi"))) (clobber (reg:CC CARRY)) ] "" "ADD.W\t%L2, %L0 { ADDC.W\t%H2, %H0 { PUSH.W %H0 { PUSH.W %L0 { POPM.A #1, %0" )