Index: config/avr/avr.h =================================================================== --- config/avr/avr.h (revision 257384) +++ config/avr/avr.h (working copy) @@ -153,6 +153,9 @@ These two properties are reflected by bu #define FIRST_PSEUDO_REGISTER 36 +#define GENERAL_REGNO_P(N) IN_RANGE (N, 2, 31) +#define GENERAL_REG_P(X) (REG_P (X) && GENERAL_REGNO_P (REGNO (X))) + #define FIXED_REGISTERS {\ 1,1,/* r0 r1 */\ 0,0,/* r2 r3 */\ Index: config/avr/avr.md =================================================================== --- config/avr/avr.md (revision 257384) +++ config/avr/avr.md (working copy) @@ -3362,6 +3362,8 @@ (define_split (match_operand:HI 1 "reg_or_0_operand"))] "optimize && reload_completed + && GENERAL_REG_P (operands[0]) + && (operands[1] == const0_rtx || GENERAL_REG_P (operands[1])) && (!AVR_HAVE_MOVW || const0_rtx == operands[1])" [(set (match_dup 2) (match_dup 3))