https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111466
--- Comment #1 from Vineet Gupta <vineetg at gcc dot gnu.org> --- So there are various aspects to tackling this issue. #1. REE reports failure as "missing definition(s)". This is because function args don't have an explicit def, they are just there. Cannot eliminate extension: (insn 12 6 13 2 (set (reg:DI 16 a6 [orig:138 n.1_15 ] [138]) (sign_extend:DI (reg:SI 11 a1 [orig:141 n ] [141]))) {extendsidi2} (nil)) because of missing definition(s) #2. At Expand time there's an explicit sign_extend for the incoming function arg which is not needed per RISC-V ABI. Not generating these to begin with will require less fixup needs in REE and/or CSE. (insn 3 2 4 2 (set (reg/v:DI 141 [ n ]) (reg:DI 11 a1 [ n ])) (insn 12 6 13 2 (set (reg:DI 138 [ n.1_15 ]) (sign_extend:DI (subreg/u:SI (reg/v:DI 141 [ n ]) 0)))