[PATCH][ARM] Enable auto-vectorization for copysignf

Jiong Wang jiong.wang@arm.com
Thu Sep 11 13:55:00 GMT 2014


On 11/09/14 14:43, Christophe Lyon wrote:
> Hi Jiong,
>
> On 9 September 2014 12:59, Ramana Radhakrishnan
> <ramana.gcc@googlemail.com> wrote:
>> On Mon, Aug 18, 2014 at 11:31 AM, Jiong Wang <jiong.wang@arm.com> wrote:
>>> this patch enable auto-vectorization for copysignf by using vector
>>> bit selection instruction on arm32 when neon available.
>>>
> I've noticed that your new testcase fails (the scan-tree-dump-times
> line), in the following cases:
> * forcing -march=armv5t in RUNTESTFLAGS (targets
> arm-none-linux-gnueabi and arm-none-linux-gnueabihf)
> * target armeb-none-linux-gnueabihf
>
> You can have a look at:
> http://cbuild.validation.linaro.org/build/cross-validation/gcc/trunk/215067/report-build-info.html
>
> If you go 1 level up at
> http://cbuild.validation.linaro.org/build/cross-validation/gcc/trunk/215067/
> you'll be able to browse into the per-target subdirs and get the .sum
> files if you need them.

Christophe,

   the auto-test system is great!

   the testcase only pass when both hardware & abi options meet requirement.

   I tried to skip those environment where neon is not available by "dg-require-effective-target arm_neon_hw"

   there maybe something not covered. I'll have a look.

   thanks.

-- Jiong

>
> Christophe.
>
>
>>> for a simple testcase:
>>>
>>>    for (i = 0; i < N; i++)
>>>      r[i] = __builtin_copysignf (a[i], b[i]);
>>>
>>>
>>> assuming vector factor be 4, the generated instruction sequences is:
>>>
>>>          vmov.i32        q10, #2147483648  @ v4si
>>> .L2:
>>>          vld1.64 {d18-d19}, [ip:64]
>>>          add     r3, r3, #16
>>>          add     ip, ip, #16
>>>          vldr    d16, [r3, #-16]
>>>          vldr    d17, [r3, #-8]
>>>          vbif    q8, q9, q10
>>
>>
>> Ok.
>>
>> Ramana
>>
>>
>>> thanks.
>>>
>>> gcc/
>>>    * config/arm/arm.c (NEON_COPYSIGNF): New enum.
>>>    (arm_init_neon_builtins): Support NEON_COPYSIGNF.
>>>    (arm_builtin_vectorized_function): Likewise.
>>>    * config/arm/arm_neon_builtins.def: New macro for copysignf.
>>>    * config/arm/neon.md (neon_copysignf<mode>): New pattern for vector
>>> copysignf.
>>>
>>> gcc/testsuite/
>>>    * gcc.target/arm/vect-copysignf.c: New testcase.




More information about the Gcc-patches mailing list