On Thu, Jul 09, 2015 at 10:13:49PM +0200, Uros Bizjak wrote:
> I was under impression that peephole2 pass doesn't see subregs of hard
> regs (all x86 predicates are written in this way). Even documentation
> somehow agrees with this:
>
> '(subreg:M1 REG:M2 BYTENUM)'
>
> 'subreg' expressions are used to refer to a register in a machine
> mode other than its natural one, or to refer to one register of a
> multi-part 'reg' that actually refers to several registers.
>
> Each pseudo register has a natural mode. If it is necessary to
> operate on it in a different mode, the register must be enclosed in
> a 'subreg'.
>
> There are currently three supported types for the first operand of
> a 'subreg':
>
> [...]
>
> * hard registers It is seldom necessary to wrap hard registers
> in 'subreg's; such registers would normally reduce to a single
> 'reg' rtx. This use of 'subreg's is discouraged and may not
> be supported in the future.
>
> So, I'd say that generating naked SUBREG after reload should be
> avoided and gen_lowpart should be used in the code above.
There is also:
emit_insn (gen_sse2_loadld (operands[3], CONST0_RTX (V4SImode),
gen_rtx_SUBREG (SImode, operands[1], 0)));
emit_insn (gen_sse2_loadld (operands[4], CONST0_RTX (V4SImode),
gen_rtx_SUBREG (SImode, operands[1], 4)));
in some splitters (also post-reload).
Jakub