On Thu, Jul 9, 2015 at 10:17 PM, Jakub Jelinek <ja...@redhat.com> wrote:
> 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).

These won't hit the peephole2, changed by the patch, but let's fix
these before they start to break.

Uros.

Reply via email to