[PATCH, i386]: Macroize min/max patterns some more
Uros Bizjak
ubizjak@gmail.com
Wed Sep 21 08:50:00 GMT 2011
On Wed, Sep 21, 2011 at 9:45 AM, Jakub Jelinek <jakub@redhat.com> wrote:
>> * config/i386/i386.md (maxmin): New code iterator.
>> * config/i386/sse.md (<maxmin:code><mode>3): Macroize expander
>> from <umaxmin:code><mode>3 and <smaxmin:code><mode>3 using maxmin
>> code iterator.
>> (*avx2_<maxmin:code><mode>3): Macroize isn from
>> *avx2_<umaxmin:code><mode>3 and *avx2_<smaxmin:code><mode>3 using
>> maxmin code iterator.
>> (<smaxmin:code><VI124_128:mode>3): Merge with <smaxmin:code>v8hi3.
>> (<umaxmin:code><VI124_128:mode>3): Merge with umaxv4si3 and
>> <umaxmin:code>v16qi3.
>>
>> Tested on x86_64-pc-linux-gnu {,-m32}, committed to mainline SVN.
>
> This regressed gcc.dg/vect/vect-reduc-10.c code quality with -msse2,
> - psubusw (%rax), %xmm0
> - paddw (%rax), %xmm0
> + movdqa (%rax), %xmm1
> addq $16, %rax
> cmpq $aus+2048, %rax
> + psubusw %xmm1, %xmm0
> + paddw %xmm1, %xmm0
>
> the problem is that the two expanders force arguments into registers
> unconditionally, while previously in some cases they were
> nonimmediate_operand instead of register_operand predicated.
> This patch fixes that by always using nonimmediate_operand and adding
> force_reg where needed.
>
> 2011-09-21 Jakub Jelinek <jakub@redhat.com>
>
> * config/i386/sse.md (<code><mode>3 smaxmin:VI124_128 expander): Use
> nonimmediate_operand instead of register_operand predicate for operands
> 1 and 2, force them into registers if expanding them as comparison.
> (<code><mode>3 umaxmin:VI124_128 expander): Similarly. For UMAX
> V8HImode force into register just operand 1.
OK.
Thanks,
Uros.
More information about the Gcc-patches
mailing list