https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95766
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- Incoming RTL: (note 5 1 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK) (insn 2 5 3 2 (set (reg:SI 86) (reg:SI 5 di [ a ])) "t.c":3:1 -1 (nil)) (insn 3 2 4 2 (set (reg/v:HI 85 [ a ]) (subreg:HI (reg:SI 86) 0)) "t.c":3:1 -1 (nil)) (note 4 3 7 2 NOTE_INSN_FUNCTION_BEG) (insn 7 4 8 2 (set (reg:SI 82 [ _1 ]) (zero_extend:SI (reg/v:HI 85 [ a ]))) "t.c":4:12 -1 (nil)) that doesn't reflect the ABI, but I'm not sure we can do much better here. The zero_extend is from the GIMPLE conversion.