On 2 April 2014 13:08, Anthony Green <gr...@moxielogic.com> wrote:

> I though the answer was to simply add something like this...
>
> (define_insn "zero_extendqisi"
>   [(set (match_operand:SI 0 "register_operand" "=r")
>         (zero_extend:SI (match_operand:QI 1 "register_operand" "r")))]
>   ""
>   "; ZERO EXTEND (comment for debugging)")

That pattern is obviously not outputting valid code.
You should make this a define_insn_and_split, with an r/r alternative
that is split (after reload) as necesary into shifts, and an m/r alternative
that outputs a load.  sprinkle with rtx_cost adjustments as necessary.

> But nothing changes in the example above.

LOAD_EXTEND_OP can also avoid some unnecesary expansions.

ALthough we still have a long-standing issue of unnecessary extensions for
narrow integer types passed in/out of functions, and loaded from volatile
memory.

Reply via email to