https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69810
--- Comment #4 from Segher Boessenkool <segher at gcc dot gnu.org> --- The patch introducing the EXTQI stuff did -(define_insn "" - [(set (match_operand:CC 2 "cc_reg_operand" "=x,?y") - (compare:CC (sign_extend:HI (match_operand:QI 1 "gpc_reg_operand" "r,r") - (const_int 0))) - (set (match_operand:HI 0 "gpc_reg_operand" "=r,r") - (sign_extend:HI (match_dup 1)))] - "" - "@ - extsb. %0,%1 - #" - [(set_attr "type" "compare") - (set_attr "length" "4,8")]) - -(define_split - [(set (match_operand:CC 2 "cc_reg_not_micro_cr0_operand" "") - (compare:CC (sign_extend:HI (match_operand:QI 1 "gpc_reg_operand" "")) - (const_int 0))) - (set (match_operand:HI 0 "gpc_reg_operand" "") - (sign_extend:HI (match_dup 1)))] - "reload_completed" - [(set (match_dup 0) - (sign_extend:HI (match_dup 1))) - (set (match_dup 2) - (compare:CC (match_dup 0) - (const_int 0)))] - "") so this problem is older. Extending _to_ HImode doesn't make much sense (like doing any other non-memory operation in HImode, and it can always be expressed with a subreg:SI. David, I think your patch is just right :-)