[i386] scalar ops that preserve the high part of a vector

H.J. Lu hjl.tools@gmail.com
Tue Dec 4 18:12:00 GMT 2012


On Tue, Dec 4, 2012 at 10:06 AM, Uros Bizjak <ubizjak@gmail.com> wrote:
> On Tue, Dec 4, 2012 at 5:28 PM, Marc Glisse <marc.glisse@inria.fr> wrote:
>> On Tue, 4 Dec 2012, Marc Glisse wrote:
>>
>>> Do you agree?
>>
>>
>> Like this ? (only tested on the new testcases, and then I'd need to ask Eric
>> his opinion)
>>
>> 2012-12-04  Marc Glisse  <marc.glisse@inria.fr>
>>
>>         PR target/54855
>> gcc/
>>         * simplify-rtx.c (simplify_binary_operation_1) <VEC_CONCAT>: Replace
>>         with VEC_MERGE.
>>
>>         * config/i386/sse.md (<sse>_vm<plusminus_insn><mode>3): Rewrite
>>         pattern.
>>         * config/i386/i386-builtin-types.def: New function types.
>>         * config/i386/i386.c (ix86_expand_args_builtin): Likewise.
>>         (bdesc_args) <__builtin_ia32_addss, __builtin_ia32_subss,
>>         __builtin_ia32_addsd, __builtin_ia32_subsd>: Change prototype.
>>         * config/i386/xmmintrin.h: Adapt to new builtin prototype.
>>         * config/i386/emmintrin.h: Likewise.
>>         * doc/extend.texi (X86 Built-in Functions): Document changed
>> prototype.
>>
>>
>> testsuite/
>>         * gcc.target/i386/pr54855-1.c: New testcase.
>>         * gcc.target/i386/pr54855-2.c: New testcase.
>
> Yes, the approach taken in this patch looks really good to me. There
> should be no code differences with your patch, but let's ask HJ for
> his opinion on intrinsics header changes.

Hi Kirill,

Can you take  a look?  Thanks.

> A little nit below:
>
>> +           rtx newop0 = gen_rtx_fmt_e (VEC_DUPLICATE, mode, trueop0);
>> +           rtx newop1 = XEXP (trueop1, 0);
>> +           return simplify_gen_ternary (VEC_MERGE, mode, GET_MODE (newop0),
>> +                                        newop0, newop1, GEN_INT (1));
>
> You can use const1_rtx here.
>
> Thanks,
> Uros.



-- 
H.J.



More information about the Gcc-patches mailing list