diff mbox

Pushed with obvious fix: Re: [AArch64/ARM 3/3] Add execution tests of ARM TRN Intrinsics

Message ID 537370E4.8040006@arm.com
State New
Headers show

Commit Message

Alan Lawrence May 14, 2014, 1:34 p.m. UTC
In final testing I noticed that vtrnf32_1.c, vtrns32_1.c and vtrnu32_1.c were 
failing the scan-assembler-times test: in such two-element cases, TRN, UZP and 
ZIP are all equivalent and equally valid, and the ARM backend 
(arm_expand_vec_perm_const_1) outputs UZP. Hence, I've pushed the attached 
patch, which differs from the original (only) in that I've changed 
"scan-assembler-times....trn...." to "scan-assembler-times....uzp..." in those 
three cases, as revision 210422.

I had not previously been testing bigendian, but as for ZIP and UZP, the 
execution tests here fail on such (armeb) targets. As for UZP and ZIP, this is a 
case of correct tests exposing a previously-undetected bug in the implementation 
(the shuffle masks in arm_neon.h are correct only for little-endian, see 
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61062). I have a fix for this and 
shall post shortly.

Cheers, Alan

Ramana Radhakrishnan wrote:
> On Fri, Mar 28, 2014 at 3:50 PM, Alan Lawrence <alan.lawrence@arm.com> wrote:
>> Final patch in series, adds new tests of the ARM TRN Intrinsics, that also
>> check
>> the execution results, reusing the test bodies introduced into AArch64 in
>> the
>> first patch. (These tests subsume the autogenerated ones in
>> testsuite/gcc.target/arm/neon/ that only check assembler output.)
>>
>> Tests use gcc.target/arm/simd/simd.exp from corresponding patch for ZIP
>> Intrinsics, will commit that first.
>>
>> All tests passing on arm-none-eabi.
> 
> The ARM bits are ok.
> 
>> testsuite/ChangeLog:
>> 2012-03-28  Alan Lawrence  <alan.lawrence@arm.com>
>>
>>         * gcc.target/arm/simd/vtrnqf32_1.c: New file.
>>         * gcc.target/arm/simd/vtrnqp16_1.c: New file.
>>         * gcc.target/arm/simd/vtrnqp8_1.c: New file.
>>         * gcc.target/arm/simd/vtrnqs16_1.c: New file.
>>         * gcc.target/arm/simd/vtrnqs32_1.c: New file.
>>         * gcc.target/arm/simd/vtrnqs8_1.c: New file.
>>         * gcc.target/arm/simd/vtrnqu16_1.c: New file.
>>         * gcc.target/arm/simd/vtrnqu32_1.c: New file.
>>         * gcc.target/arm/simd/vtrnqu8_1.c: New file.
>>         * gcc.target/arm/simd/vtrnf32_1.c: New file.
>>         * gcc.target/arm/simd/vtrnp16_1.c: New file.
>>         * gcc.target/arm/simd/vtrnp8_1.c: New file.
>>         * gcc.target/arm/simd/vtrns16_1.c: New file.
>>         * gcc.target/arm/simd/vtrns32_1.c: New file.
>>         * gcc.target/arm/simd/vtrns8_1.c: New file.
>>         * gcc.target/arm/simd/vtrnu16_1.c: New file.
>>         * gcc.target/arm/simd/vtrnu32_1.c: New file.
>>         * gcc.target/arm/simd/vtrnu8_1.c: New file.
>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnf32_1.c
>> b/gcc/testsuite/gcc.target/arm/simd/vtrnf32_1.c
>> new file mode 100644
>> index 0000000..c9620fb
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnf32_1.c
>> @@ -0,0 +1,12 @@
>> +/* Test the `vtrnf32' ARM Neon intrinsic.  */
>> +
>> +/* { dg-do run } */
>> +/* { dg-require-effective-target arm_neon_ok } */
>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>> +/* { dg-add-options arm_neon } */
>> +
>> +#include "arm_neon.h"
>> +#include "../../aarch64/simd/vtrnf32.x"
>> +
>> +/* { dg-final { scan-assembler-times "vtrn\.32\[ \t\]+\[dD\]\[0-9\]+,
>> ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>> +/* { dg-final { cleanup-saved-temps } } */
>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnp16_1.c
>> b/gcc/testsuite/gcc.target/arm/simd/vtrnp16_1.c
>> new file mode 100644
>> index 0000000..0ff4319
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnp16_1.c
>> @@ -0,0 +1,12 @@
>> +/* Test the `vtrnp16' ARM Neon intrinsic.  */
>> +
>> +/* { dg-do run } */
>> +/* { dg-require-effective-target arm_neon_ok } */
>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>> +/* { dg-add-options arm_neon } */
>> +
>> +#include "arm_neon.h"
>> +#include "../../aarch64/simd/vtrnp16.x"
>> +
>> +/* { dg-final { scan-assembler-times "vtrn\.16\[ \t\]+\[dD\]\[0-9\]+,
>> ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>> +/* { dg-final { cleanup-saved-temps } } */
>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnp8_1.c
>> b/gcc/testsuite/gcc.target/arm/simd/vtrnp8_1.c
>> new file mode 100644
>> index 0000000..2b047e4
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnp8_1.c
>> @@ -0,0 +1,12 @@
>> +/* Test the `vtrnp8' ARM Neon intrinsic.  */
>> +
>> +/* { dg-do run } */
>> +/* { dg-require-effective-target arm_neon_ok } */
>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>> +/* { dg-add-options arm_neon } */
>> +
>> +#include "arm_neon.h"
>> +#include "../../aarch64/simd/vtrnp8.x"
>> +
>> +/* { dg-final { scan-assembler-times "vtrn\.8\[ \t\]+\[dD\]\[0-9\]+,
>> ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>> +/* { dg-final { cleanup-saved-temps } } */
>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqf32_1.c
>> b/gcc/testsuite/gcc.target/arm/simd/vtrnqf32_1.c
>> new file mode 100644
>> index 0000000..dd4e883
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqf32_1.c
>> @@ -0,0 +1,12 @@
>> +/* Test the `vtrnQf32' ARM Neon intrinsic.  */
>> +
>> +/* { dg-do run } */
>> +/* { dg-require-effective-target arm_neon_ok } */
>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>> +/* { dg-add-options arm_neon } */
>> +
>> +#include "arm_neon.h"
>> +#include "../../aarch64/simd/vtrnqf32.x"
>> +
>> +/* { dg-final { scan-assembler-times "vtrn\.32\[ \t\]+\[qQ\]\[0-9\]+,
>> ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>> +/* { dg-final { cleanup-saved-temps } } */
>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqp16_1.c
>> b/gcc/testsuite/gcc.target/arm/simd/vtrnqp16_1.c
>> new file mode 100644
>> index 0000000..374eee3
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqp16_1.c
>> @@ -0,0 +1,12 @@
>> +/* Test the `vtrnQp16' ARM Neon intrinsic.  */
>> +
>> +/* { dg-do run } */
>> +/* { dg-require-effective-target arm_neon_ok } */
>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>> +/* { dg-add-options arm_neon } */
>> +
>> +#include "arm_neon.h"
>> +#include "../../aarch64/simd/vtrnqp16.x"
>> +
>> +/* { dg-final { scan-assembler-times "vtrn\.16\[ \t\]+\[qQ\]\[0-9\]+,
>> ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>> +/* { dg-final { cleanup-saved-temps } } */
>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqp8_1.c
>> b/gcc/testsuite/gcc.target/arm/simd/vtrnqp8_1.c
>> new file mode 100644
>> index 0000000..b252fd5
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqp8_1.c
>> @@ -0,0 +1,12 @@
>> +/* Test the `vtrnQp8' ARM Neon intrinsic.  */
>> +
>> +/* { dg-do run } */
>> +/* { dg-require-effective-target arm_neon_ok } */
>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>> +/* { dg-add-options arm_neon } */
>> +
>> +#include "arm_neon.h"
>> +#include "../../aarch64/simd/vtrnqp8.x"
>> +
>> +/* { dg-final { scan-assembler-times "vtrn\.8\[ \t\]+\[qQ\]\[0-9\]+,
>> ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>> +/* { dg-final { cleanup-saved-temps } } */
>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqs16_1.c
>> b/gcc/testsuite/gcc.target/arm/simd/vtrnqs16_1.c
>> new file mode 100644
>> index 0000000..5f06d2a
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqs16_1.c
>> @@ -0,0 +1,12 @@
>> +/* Test the `vtrnQs16' ARM Neon intrinsic.  */
>> +
>> +/* { dg-do run } */
>> +/* { dg-require-effective-target arm_neon_ok } */
>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>> +/* { dg-add-options arm_neon } */
>> +
>> +#include "arm_neon.h"
>> +#include "../../aarch64/simd/vtrnqs16.x"
>> +
>> +/* { dg-final { scan-assembler-times "vtrn\.16\[ \t\]+\[qQ\]\[0-9\]+,
>> ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>> +/* { dg-final { cleanup-saved-temps } } */
>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqs32_1.c
>> b/gcc/testsuite/gcc.target/arm/simd/vtrnqs32_1.c
>> new file mode 100644
>> index 0000000..221175c
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqs32_1.c
>> @@ -0,0 +1,12 @@
>> +/* Test the `vtrnQs32' ARM Neon intrinsic.  */
>> +
>> +/* { dg-do run } */
>> +/* { dg-require-effective-target arm_neon_ok } */
>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>> +/* { dg-add-options arm_neon } */
>> +
>> +#include "arm_neon.h"
>> +#include "../../aarch64/simd/vtrnqs32.x"
>> +
>> +/* { dg-final { scan-assembler-times "vtrn\.32\[ \t\]+\[qQ\]\[0-9\]+,
>> ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>> +/* { dg-final { cleanup-saved-temps } } */
>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqs8_1.c
>> b/gcc/testsuite/gcc.target/arm/simd/vtrnqs8_1.c
>> new file mode 100644
>> index 0000000..9352b37
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqs8_1.c
>> @@ -0,0 +1,12 @@
>> +/* Test the `vtrnQs8' ARM Neon intrinsic.  */
>> +
>> +/* { dg-do run } */
>> +/* { dg-require-effective-target arm_neon_ok } */
>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>> +/* { dg-add-options arm_neon } */
>> +
>> +#include "arm_neon.h"
>> +#include "../../aarch64/simd/vtrnqs8.x"
>> +
>> +/* { dg-final { scan-assembler-times "vtrn\.8\[ \t\]+\[qQ\]\[0-9\]+,
>> ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>> +/* { dg-final { cleanup-saved-temps } } */
>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqu16_1.c
>> b/gcc/testsuite/gcc.target/arm/simd/vtrnqu16_1.c
>> new file mode 100644
>> index 0000000..7f40109
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqu16_1.c
>> @@ -0,0 +1,12 @@
>> +/* Test the `vtrnQu16' ARM Neon intrinsic.  */
>> +
>> +/* { dg-do run } */
>> +/* { dg-require-effective-target arm_neon_ok } */
>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>> +/* { dg-add-options arm_neon } */
>> +
>> +#include "arm_neon.h"
>> +#include "../../aarch64/simd/vtrnqu16.x"
>> +
>> +/* { dg-final { scan-assembler-times "vtrn\.16\[ \t\]+\[qQ\]\[0-9\]+,
>> ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>> +/* { dg-final { cleanup-saved-temps } } */
>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqu32_1.c
>> b/gcc/testsuite/gcc.target/arm/simd/vtrnqu32_1.c
>> new file mode 100644
>> index 0000000..1c61fc3
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqu32_1.c
>> @@ -0,0 +1,12 @@
>> +/* Test the `vtrnQu32' ARM Neon intrinsic.  */
>> +
>> +/* { dg-do run } */
>> +/* { dg-require-effective-target arm_neon_ok } */
>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>> +/* { dg-add-options arm_neon } */
>> +
>> +#include "arm_neon.h"
>> +#include "../../aarch64/simd/vtrnqu32.x"
>> +
>> +/* { dg-final { scan-assembler-times "vtrn\.32\[ \t\]+\[qQ\]\[0-9\]+,
>> ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>> +/* { dg-final { cleanup-saved-temps } } */
>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqu8_1.c
>> b/gcc/testsuite/gcc.target/arm/simd/vtrnqu8_1.c
>> new file mode 100644
>> index 0000000..82f911d
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqu8_1.c
>> @@ -0,0 +1,12 @@
>> +/* Test the `vtrnQu8' ARM Neon intrinsic.  */
>> +
>> +/* { dg-do run } */
>> +/* { dg-require-effective-target arm_neon_ok } */
>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>> +/* { dg-add-options arm_neon } */
>> +
>> +#include "arm_neon.h"
>> +#include "../../aarch64/simd/vtrnqu8.x"
>> +
>> +/* { dg-final { scan-assembler-times "vtrn\.8\[ \t\]+\[qQ\]\[0-9\]+,
>> ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>> +/* { dg-final { cleanup-saved-temps } } */
>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrns16_1.c
>> b/gcc/testsuite/gcc.target/arm/simd/vtrns16_1.c
>> new file mode 100644
>> index 0000000..af2c68f
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrns16_1.c
>> @@ -0,0 +1,12 @@
>> +/* Test the `vtrns16' ARM Neon intrinsic.  */
>> +
>> +/* { dg-do run } */
>> +/* { dg-require-effective-target arm_neon_ok } */
>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>> +/* { dg-add-options arm_neon } */
>> +
>> +#include "arm_neon.h"
>> +#include "../../aarch64/simd/vtrns16.x"
>> +
>> +/* { dg-final { scan-assembler-times "vtrn\.16\[ \t\]+\[dD\]\[0-9\]+,
>> ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>> +/* { dg-final { cleanup-saved-temps } } */
>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrns32_1.c
>> b/gcc/testsuite/gcc.target/arm/simd/vtrns32_1.c
>> new file mode 100644
>> index 0000000..f5463a7
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrns32_1.c
>> @@ -0,0 +1,12 @@
>> +/* Test the `vtrns32' ARM Neon intrinsic.  */
>> +
>> +/* { dg-do run } */
>> +/* { dg-require-effective-target arm_neon_ok } */
>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>> +/* { dg-add-options arm_neon } */
>> +
>> +#include "arm_neon.h"
>> +#include "../../aarch64/simd/vtrns32.x"
>> +
>> +/* { dg-final { scan-assembler-times "vtrn\.32\[ \t\]+\[dD\]\[0-9\]+,
>> ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>> +/* { dg-final { cleanup-saved-temps } } */
>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrns8_1.c
>> b/gcc/testsuite/gcc.target/arm/simd/vtrns8_1.c
>> new file mode 100644
>> index 0000000..395015d
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrns8_1.c
>> @@ -0,0 +1,12 @@
>> +/* Test the `vtrns8' ARM Neon intrinsic.  */
>> +
>> +/* { dg-do run } */
>> +/* { dg-require-effective-target arm_neon_ok } */
>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>> +/* { dg-add-options arm_neon } */
>> +
>> +#include "arm_neon.h"
>> +#include "../../aarch64/simd/vtrns8.x"
>> +
>> +/* { dg-final { scan-assembler-times "vtrn\.8\[ \t\]+\[dD\]\[0-9\]+,
>> ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>> +/* { dg-final { cleanup-saved-temps } } */
>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnu16_1.c
>> b/gcc/testsuite/gcc.target/arm/simd/vtrnu16_1.c
>> new file mode 100644
>> index 0000000..df0d963
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnu16_1.c
>> @@ -0,0 +1,12 @@
>> +/* Test the `vtrnu16' ARM Neon intrinsic.  */
>> +
>> +/* { dg-do run } */
>> +/* { dg-require-effective-target arm_neon_ok } */
>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>> +/* { dg-add-options arm_neon } */
>> +
>> +#include "arm_neon.h"
>> +#include "../../aarch64/simd/vtrnu16.x"
>> +
>> +/* { dg-final { scan-assembler-times "vtrn\.16\[ \t\]+\[dD\]\[0-9\]+,
>> ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>> +/* { dg-final { cleanup-saved-temps } } */
>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnu32_1.c
>> b/gcc/testsuite/gcc.target/arm/simd/vtrnu32_1.c
>> new file mode 100644
>> index 0000000..95b6dec
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnu32_1.c
>> @@ -0,0 +1,12 @@
>> +/* Test the `vtrnu32' ARM Neon intrinsic.  */
>> +
>> +/* { dg-do run } */
>> +/* { dg-require-effective-target arm_neon_ok } */
>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>> +/* { dg-add-options arm_neon } */
>> +
>> +#include "arm_neon.h"
>> +#include "../../aarch64/simd/vtrnu32.x"
>> +
>> +/* { dg-final { scan-assembler-times "vtrn\.32\[ \t\]+\[dD\]\[0-9\]+,
>> ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>> +/* { dg-final { cleanup-saved-temps } } */
>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnu8_1.c
>> b/gcc/testsuite/gcc.target/arm/simd/vtrnu8_1.c
>> new file mode 100644
>> index 0000000..f5b4d68
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnu8_1.c
>> @@ -0,0 +1,12 @@
>> +/* Test the `vtrnu8' ARM Neon intrinsic.  */
>> +
>> +/* { dg-do run } */
>> +/* { dg-require-effective-target arm_neon_ok } */
>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>> +/* { dg-add-options arm_neon } */
>> +
>> +#include "arm_neon.h"
>> +#include "../../aarch64/simd/vtrnu8.x"
>> +
>> +/* { dg-final { scan-assembler-times "vtrn\.8\[ \t\]+\[dD\]\[0-9\]+,
>> ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>> +/* { dg-final { cleanup-saved-temps } } */
>

Comments

Ramana Radhakrishnan May 15, 2014, 6:42 a.m. UTC | #1
On 05/14/14 14:34, Alan Lawrence wrote:
> In final testing I noticed that vtrnf32_1.c, vtrns32_1.c and vtrnu32_1.c were
> failing the scan-assembler-times test: in such two-element cases, TRN, UZP and
> ZIP are all equivalent and equally valid, and the ARM backend
> (arm_expand_vec_perm_const_1) outputs UZP. Hence, I've pushed the attached
> patch, which differs from the original (only) in that I've changed
> "scan-assembler-times....trn...." to "scan-assembler-times....uzp..." in those
> three cases, as revision 210422.
>

Yes - well spotted and thanks for fixing this up.


Ramana

> I had not previously been testing bigendian, but as for ZIP and UZP, the
> execution tests here fail on such (armeb) targets. As for UZP and ZIP, this is a
> case of correct tests exposing a previously-undetected bug in the implementation
> (the shuffle masks in arm_neon.h are correct only for little-endian, see
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61062). I have a fix for this and
> shall post shortly.
>
> Cheers, Alan
>
> Ramana Radhakrishnan wrote:
>> On Fri, Mar 28, 2014 at 3:50 PM, Alan Lawrence <alan.lawrence@arm.com> wrote:
>>> Final patch in series, adds new tests of the ARM TRN Intrinsics, that also
>>> check
>>> the execution results, reusing the test bodies introduced into AArch64 in
>>> the
>>> first patch. (These tests subsume the autogenerated ones in
>>> testsuite/gcc.target/arm/neon/ that only check assembler output.)
>>>
>>> Tests use gcc.target/arm/simd/simd.exp from corresponding patch for ZIP
>>> Intrinsics, will commit that first.
>>>
>>> All tests passing on arm-none-eabi.
>>
>> The ARM bits are ok.
>>
>>> testsuite/ChangeLog:
>>> 2012-03-28  Alan Lawrence  <alan.lawrence@arm.com>
>>>
>>>          * gcc.target/arm/simd/vtrnqf32_1.c: New file.
>>>          * gcc.target/arm/simd/vtrnqp16_1.c: New file.
>>>          * gcc.target/arm/simd/vtrnqp8_1.c: New file.
>>>          * gcc.target/arm/simd/vtrnqs16_1.c: New file.
>>>          * gcc.target/arm/simd/vtrnqs32_1.c: New file.
>>>          * gcc.target/arm/simd/vtrnqs8_1.c: New file.
>>>          * gcc.target/arm/simd/vtrnqu16_1.c: New file.
>>>          * gcc.target/arm/simd/vtrnqu32_1.c: New file.
>>>          * gcc.target/arm/simd/vtrnqu8_1.c: New file.
>>>          * gcc.target/arm/simd/vtrnf32_1.c: New file.
>>>          * gcc.target/arm/simd/vtrnp16_1.c: New file.
>>>          * gcc.target/arm/simd/vtrnp8_1.c: New file.
>>>          * gcc.target/arm/simd/vtrns16_1.c: New file.
>>>          * gcc.target/arm/simd/vtrns32_1.c: New file.
>>>          * gcc.target/arm/simd/vtrns8_1.c: New file.
>>>          * gcc.target/arm/simd/vtrnu16_1.c: New file.
>>>          * gcc.target/arm/simd/vtrnu32_1.c: New file.
>>>          * gcc.target/arm/simd/vtrnu8_1.c: New file.
>>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnf32_1.c
>>> b/gcc/testsuite/gcc.target/arm/simd/vtrnf32_1.c
>>> new file mode 100644
>>> index 0000000..c9620fb
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnf32_1.c
>>> @@ -0,0 +1,12 @@
>>> +/* Test the `vtrnf32' ARM Neon intrinsic.  */
>>> +
>>> +/* { dg-do run } */
>>> +/* { dg-require-effective-target arm_neon_ok } */
>>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>>> +/* { dg-add-options arm_neon } */
>>> +
>>> +#include "arm_neon.h"
>>> +#include "../../aarch64/simd/vtrnf32.x"
>>> +
>>> +/* { dg-final { scan-assembler-times "vtrn\.32\[ \t\]+\[dD\]\[0-9\]+,
>>> ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>>> +/* { dg-final { cleanup-saved-temps } } */
>>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnp16_1.c
>>> b/gcc/testsuite/gcc.target/arm/simd/vtrnp16_1.c
>>> new file mode 100644
>>> index 0000000..0ff4319
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnp16_1.c
>>> @@ -0,0 +1,12 @@
>>> +/* Test the `vtrnp16' ARM Neon intrinsic.  */
>>> +
>>> +/* { dg-do run } */
>>> +/* { dg-require-effective-target arm_neon_ok } */
>>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>>> +/* { dg-add-options arm_neon } */
>>> +
>>> +#include "arm_neon.h"
>>> +#include "../../aarch64/simd/vtrnp16.x"
>>> +
>>> +/* { dg-final { scan-assembler-times "vtrn\.16\[ \t\]+\[dD\]\[0-9\]+,
>>> ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>>> +/* { dg-final { cleanup-saved-temps } } */
>>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnp8_1.c
>>> b/gcc/testsuite/gcc.target/arm/simd/vtrnp8_1.c
>>> new file mode 100644
>>> index 0000000..2b047e4
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnp8_1.c
>>> @@ -0,0 +1,12 @@
>>> +/* Test the `vtrnp8' ARM Neon intrinsic.  */
>>> +
>>> +/* { dg-do run } */
>>> +/* { dg-require-effective-target arm_neon_ok } */
>>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>>> +/* { dg-add-options arm_neon } */
>>> +
>>> +#include "arm_neon.h"
>>> +#include "../../aarch64/simd/vtrnp8.x"
>>> +
>>> +/* { dg-final { scan-assembler-times "vtrn\.8\[ \t\]+\[dD\]\[0-9\]+,
>>> ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>>> +/* { dg-final { cleanup-saved-temps } } */
>>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqf32_1.c
>>> b/gcc/testsuite/gcc.target/arm/simd/vtrnqf32_1.c
>>> new file mode 100644
>>> index 0000000..dd4e883
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqf32_1.c
>>> @@ -0,0 +1,12 @@
>>> +/* Test the `vtrnQf32' ARM Neon intrinsic.  */
>>> +
>>> +/* { dg-do run } */
>>> +/* { dg-require-effective-target arm_neon_ok } */
>>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>>> +/* { dg-add-options arm_neon } */
>>> +
>>> +#include "arm_neon.h"
>>> +#include "../../aarch64/simd/vtrnqf32.x"
>>> +
>>> +/* { dg-final { scan-assembler-times "vtrn\.32\[ \t\]+\[qQ\]\[0-9\]+,
>>> ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>>> +/* { dg-final { cleanup-saved-temps } } */
>>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqp16_1.c
>>> b/gcc/testsuite/gcc.target/arm/simd/vtrnqp16_1.c
>>> new file mode 100644
>>> index 0000000..374eee3
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqp16_1.c
>>> @@ -0,0 +1,12 @@
>>> +/* Test the `vtrnQp16' ARM Neon intrinsic.  */
>>> +
>>> +/* { dg-do run } */
>>> +/* { dg-require-effective-target arm_neon_ok } */
>>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>>> +/* { dg-add-options arm_neon } */
>>> +
>>> +#include "arm_neon.h"
>>> +#include "../../aarch64/simd/vtrnqp16.x"
>>> +
>>> +/* { dg-final { scan-assembler-times "vtrn\.16\[ \t\]+\[qQ\]\[0-9\]+,
>>> ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>>> +/* { dg-final { cleanup-saved-temps } } */
>>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqp8_1.c
>>> b/gcc/testsuite/gcc.target/arm/simd/vtrnqp8_1.c
>>> new file mode 100644
>>> index 0000000..b252fd5
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqp8_1.c
>>> @@ -0,0 +1,12 @@
>>> +/* Test the `vtrnQp8' ARM Neon intrinsic.  */
>>> +
>>> +/* { dg-do run } */
>>> +/* { dg-require-effective-target arm_neon_ok } */
>>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>>> +/* { dg-add-options arm_neon } */
>>> +
>>> +#include "arm_neon.h"
>>> +#include "../../aarch64/simd/vtrnqp8.x"
>>> +
>>> +/* { dg-final { scan-assembler-times "vtrn\.8\[ \t\]+\[qQ\]\[0-9\]+,
>>> ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>>> +/* { dg-final { cleanup-saved-temps } } */
>>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqs16_1.c
>>> b/gcc/testsuite/gcc.target/arm/simd/vtrnqs16_1.c
>>> new file mode 100644
>>> index 0000000..5f06d2a
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqs16_1.c
>>> @@ -0,0 +1,12 @@
>>> +/* Test the `vtrnQs16' ARM Neon intrinsic.  */
>>> +
>>> +/* { dg-do run } */
>>> +/* { dg-require-effective-target arm_neon_ok } */
>>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>>> +/* { dg-add-options arm_neon } */
>>> +
>>> +#include "arm_neon.h"
>>> +#include "../../aarch64/simd/vtrnqs16.x"
>>> +
>>> +/* { dg-final { scan-assembler-times "vtrn\.16\[ \t\]+\[qQ\]\[0-9\]+,
>>> ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>>> +/* { dg-final { cleanup-saved-temps } } */
>>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqs32_1.c
>>> b/gcc/testsuite/gcc.target/arm/simd/vtrnqs32_1.c
>>> new file mode 100644
>>> index 0000000..221175c
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqs32_1.c
>>> @@ -0,0 +1,12 @@
>>> +/* Test the `vtrnQs32' ARM Neon intrinsic.  */
>>> +
>>> +/* { dg-do run } */
>>> +/* { dg-require-effective-target arm_neon_ok } */
>>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>>> +/* { dg-add-options arm_neon } */
>>> +
>>> +#include "arm_neon.h"
>>> +#include "../../aarch64/simd/vtrnqs32.x"
>>> +
>>> +/* { dg-final { scan-assembler-times "vtrn\.32\[ \t\]+\[qQ\]\[0-9\]+,
>>> ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>>> +/* { dg-final { cleanup-saved-temps } } */
>>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqs8_1.c
>>> b/gcc/testsuite/gcc.target/arm/simd/vtrnqs8_1.c
>>> new file mode 100644
>>> index 0000000..9352b37
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqs8_1.c
>>> @@ -0,0 +1,12 @@
>>> +/* Test the `vtrnQs8' ARM Neon intrinsic.  */
>>> +
>>> +/* { dg-do run } */
>>> +/* { dg-require-effective-target arm_neon_ok } */
>>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>>> +/* { dg-add-options arm_neon } */
>>> +
>>> +#include "arm_neon.h"
>>> +#include "../../aarch64/simd/vtrnqs8.x"
>>> +
>>> +/* { dg-final { scan-assembler-times "vtrn\.8\[ \t\]+\[qQ\]\[0-9\]+,
>>> ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>>> +/* { dg-final { cleanup-saved-temps } } */
>>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqu16_1.c
>>> b/gcc/testsuite/gcc.target/arm/simd/vtrnqu16_1.c
>>> new file mode 100644
>>> index 0000000..7f40109
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqu16_1.c
>>> @@ -0,0 +1,12 @@
>>> +/* Test the `vtrnQu16' ARM Neon intrinsic.  */
>>> +
>>> +/* { dg-do run } */
>>> +/* { dg-require-effective-target arm_neon_ok } */
>>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>>> +/* { dg-add-options arm_neon } */
>>> +
>>> +#include "arm_neon.h"
>>> +#include "../../aarch64/simd/vtrnqu16.x"
>>> +
>>> +/* { dg-final { scan-assembler-times "vtrn\.16\[ \t\]+\[qQ\]\[0-9\]+,
>>> ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>>> +/* { dg-final { cleanup-saved-temps } } */
>>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqu32_1.c
>>> b/gcc/testsuite/gcc.target/arm/simd/vtrnqu32_1.c
>>> new file mode 100644
>>> index 0000000..1c61fc3
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqu32_1.c
>>> @@ -0,0 +1,12 @@
>>> +/* Test the `vtrnQu32' ARM Neon intrinsic.  */
>>> +
>>> +/* { dg-do run } */
>>> +/* { dg-require-effective-target arm_neon_ok } */
>>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>>> +/* { dg-add-options arm_neon } */
>>> +
>>> +#include "arm_neon.h"
>>> +#include "../../aarch64/simd/vtrnqu32.x"
>>> +
>>> +/* { dg-final { scan-assembler-times "vtrn\.32\[ \t\]+\[qQ\]\[0-9\]+,
>>> ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>>> +/* { dg-final { cleanup-saved-temps } } */
>>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqu8_1.c
>>> b/gcc/testsuite/gcc.target/arm/simd/vtrnqu8_1.c
>>> new file mode 100644
>>> index 0000000..82f911d
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqu8_1.c
>>> @@ -0,0 +1,12 @@
>>> +/* Test the `vtrnQu8' ARM Neon intrinsic.  */
>>> +
>>> +/* { dg-do run } */
>>> +/* { dg-require-effective-target arm_neon_ok } */
>>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>>> +/* { dg-add-options arm_neon } */
>>> +
>>> +#include "arm_neon.h"
>>> +#include "../../aarch64/simd/vtrnqu8.x"
>>> +
>>> +/* { dg-final { scan-assembler-times "vtrn\.8\[ \t\]+\[qQ\]\[0-9\]+,
>>> ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>>> +/* { dg-final { cleanup-saved-temps } } */
>>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrns16_1.c
>>> b/gcc/testsuite/gcc.target/arm/simd/vtrns16_1.c
>>> new file mode 100644
>>> index 0000000..af2c68f
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrns16_1.c
>>> @@ -0,0 +1,12 @@
>>> +/* Test the `vtrns16' ARM Neon intrinsic.  */
>>> +
>>> +/* { dg-do run } */
>>> +/* { dg-require-effective-target arm_neon_ok } */
>>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>>> +/* { dg-add-options arm_neon } */
>>> +
>>> +#include "arm_neon.h"
>>> +#include "../../aarch64/simd/vtrns16.x"
>>> +
>>> +/* { dg-final { scan-assembler-times "vtrn\.16\[ \t\]+\[dD\]\[0-9\]+,
>>> ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>>> +/* { dg-final { cleanup-saved-temps } } */
>>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrns32_1.c
>>> b/gcc/testsuite/gcc.target/arm/simd/vtrns32_1.c
>>> new file mode 100644
>>> index 0000000..f5463a7
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrns32_1.c
>>> @@ -0,0 +1,12 @@
>>> +/* Test the `vtrns32' ARM Neon intrinsic.  */
>>> +
>>> +/* { dg-do run } */
>>> +/* { dg-require-effective-target arm_neon_ok } */
>>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>>> +/* { dg-add-options arm_neon } */
>>> +
>>> +#include "arm_neon.h"
>>> +#include "../../aarch64/simd/vtrns32.x"
>>> +
>>> +/* { dg-final { scan-assembler-times "vtrn\.32\[ \t\]+\[dD\]\[0-9\]+,
>>> ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>>> +/* { dg-final { cleanup-saved-temps } } */
>>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrns8_1.c
>>> b/gcc/testsuite/gcc.target/arm/simd/vtrns8_1.c
>>> new file mode 100644
>>> index 0000000..395015d
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrns8_1.c
>>> @@ -0,0 +1,12 @@
>>> +/* Test the `vtrns8' ARM Neon intrinsic.  */
>>> +
>>> +/* { dg-do run } */
>>> +/* { dg-require-effective-target arm_neon_ok } */
>>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>>> +/* { dg-add-options arm_neon } */
>>> +
>>> +#include "arm_neon.h"
>>> +#include "../../aarch64/simd/vtrns8.x"
>>> +
>>> +/* { dg-final { scan-assembler-times "vtrn\.8\[ \t\]+\[dD\]\[0-9\]+,
>>> ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>>> +/* { dg-final { cleanup-saved-temps } } */
>>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnu16_1.c
>>> b/gcc/testsuite/gcc.target/arm/simd/vtrnu16_1.c
>>> new file mode 100644
>>> index 0000000..df0d963
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnu16_1.c
>>> @@ -0,0 +1,12 @@
>>> +/* Test the `vtrnu16' ARM Neon intrinsic.  */
>>> +
>>> +/* { dg-do run } */
>>> +/* { dg-require-effective-target arm_neon_ok } */
>>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>>> +/* { dg-add-options arm_neon } */
>>> +
>>> +#include "arm_neon.h"
>>> +#include "../../aarch64/simd/vtrnu16.x"
>>> +
>>> +/* { dg-final { scan-assembler-times "vtrn\.16\[ \t\]+\[dD\]\[0-9\]+,
>>> ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>>> +/* { dg-final { cleanup-saved-temps } } */
>>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnu32_1.c
>>> b/gcc/testsuite/gcc.target/arm/simd/vtrnu32_1.c
>>> new file mode 100644
>>> index 0000000..95b6dec
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnu32_1.c
>>> @@ -0,0 +1,12 @@
>>> +/* Test the `vtrnu32' ARM Neon intrinsic.  */
>>> +
>>> +/* { dg-do run } */
>>> +/* { dg-require-effective-target arm_neon_ok } */
>>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>>> +/* { dg-add-options arm_neon } */
>>> +
>>> +#include "arm_neon.h"
>>> +#include "../../aarch64/simd/vtrnu32.x"
>>> +
>>> +/* { dg-final { scan-assembler-times "vtrn\.32\[ \t\]+\[dD\]\[0-9\]+,
>>> ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>>> +/* { dg-final { cleanup-saved-temps } } */
>>> diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnu8_1.c
>>> b/gcc/testsuite/gcc.target/arm/simd/vtrnu8_1.c
>>> new file mode 100644
>>> index 0000000..f5b4d68
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/arm/simd/vtrnu8_1.c
>>> @@ -0,0 +1,12 @@
>>> +/* Test the `vtrnu8' ARM Neon intrinsic.  */
>>> +
>>> +/* { dg-do run } */
>>> +/* { dg-require-effective-target arm_neon_ok } */
>>> +/* { dg-options "-save-temps -O1 -fno-inline" } */
>>> +/* { dg-add-options arm_neon } */
>>> +
>>> +#include "arm_neon.h"
>>> +#include "../../aarch64/simd/vtrnu8.x"
>>> +
>>> +/* { dg-final { scan-assembler-times "vtrn\.8\[ \t\]+\[dD\]\[0-9\]+,
>>> ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
>>> +/* { dg-final { cleanup-saved-temps } } */
>>
>
diff mbox

Patch

diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnf32_1.c b/gcc/testsuite/gcc.target/arm/simd/vtrnf32_1.c
new file mode 100644
index 0000000..0f9b6c9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/simd/vtrnf32_1.c
@@ -0,0 +1,12 @@ 
+/* Test the `vtrnf32' ARM Neon intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-save-temps -O1 -fno-inline" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include "../../aarch64/simd/vtrnf32.x"
+
+/* { dg-final { scan-assembler-times "vuzp\.32\[ \t\]+\[dD\]\[0-9\]+, ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnp16_1.c b/gcc/testsuite/gcc.target/arm/simd/vtrnp16_1.c
new file mode 100644
index 0000000..0ff4319
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/simd/vtrnp16_1.c
@@ -0,0 +1,12 @@ 
+/* Test the `vtrnp16' ARM Neon intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-save-temps -O1 -fno-inline" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include "../../aarch64/simd/vtrnp16.x"
+
+/* { dg-final { scan-assembler-times "vtrn\.16\[ \t\]+\[dD\]\[0-9\]+, ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnp8_1.c b/gcc/testsuite/gcc.target/arm/simd/vtrnp8_1.c
new file mode 100644
index 0000000..2b047e4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/simd/vtrnp8_1.c
@@ -0,0 +1,12 @@ 
+/* Test the `vtrnp8' ARM Neon intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-save-temps -O1 -fno-inline" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include "../../aarch64/simd/vtrnp8.x"
+
+/* { dg-final { scan-assembler-times "vtrn\.8\[ \t\]+\[dD\]\[0-9\]+, ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqf32_1.c b/gcc/testsuite/gcc.target/arm/simd/vtrnqf32_1.c
new file mode 100644
index 0000000..dd4e883
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqf32_1.c
@@ -0,0 +1,12 @@ 
+/* Test the `vtrnQf32' ARM Neon intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-save-temps -O1 -fno-inline" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include "../../aarch64/simd/vtrnqf32.x"
+
+/* { dg-final { scan-assembler-times "vtrn\.32\[ \t\]+\[qQ\]\[0-9\]+, ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqp16_1.c b/gcc/testsuite/gcc.target/arm/simd/vtrnqp16_1.c
new file mode 100644
index 0000000..374eee3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqp16_1.c
@@ -0,0 +1,12 @@ 
+/* Test the `vtrnQp16' ARM Neon intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-save-temps -O1 -fno-inline" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include "../../aarch64/simd/vtrnqp16.x"
+
+/* { dg-final { scan-assembler-times "vtrn\.16\[ \t\]+\[qQ\]\[0-9\]+, ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqp8_1.c b/gcc/testsuite/gcc.target/arm/simd/vtrnqp8_1.c
new file mode 100644
index 0000000..b252fd5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqp8_1.c
@@ -0,0 +1,12 @@ 
+/* Test the `vtrnQp8' ARM Neon intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-save-temps -O1 -fno-inline" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include "../../aarch64/simd/vtrnqp8.x"
+
+/* { dg-final { scan-assembler-times "vtrn\.8\[ \t\]+\[qQ\]\[0-9\]+, ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqs16_1.c b/gcc/testsuite/gcc.target/arm/simd/vtrnqs16_1.c
new file mode 100644
index 0000000..5f06d2a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqs16_1.c
@@ -0,0 +1,12 @@ 
+/* Test the `vtrnQs16' ARM Neon intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-save-temps -O1 -fno-inline" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include "../../aarch64/simd/vtrnqs16.x"
+
+/* { dg-final { scan-assembler-times "vtrn\.16\[ \t\]+\[qQ\]\[0-9\]+, ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqs32_1.c b/gcc/testsuite/gcc.target/arm/simd/vtrnqs32_1.c
new file mode 100644
index 0000000..221175c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqs32_1.c
@@ -0,0 +1,12 @@ 
+/* Test the `vtrnQs32' ARM Neon intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-save-temps -O1 -fno-inline" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include "../../aarch64/simd/vtrnqs32.x"
+
+/* { dg-final { scan-assembler-times "vtrn\.32\[ \t\]+\[qQ\]\[0-9\]+, ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqs8_1.c b/gcc/testsuite/gcc.target/arm/simd/vtrnqs8_1.c
new file mode 100644
index 0000000..9352b37
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqs8_1.c
@@ -0,0 +1,12 @@ 
+/* Test the `vtrnQs8' ARM Neon intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-save-temps -O1 -fno-inline" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include "../../aarch64/simd/vtrnqs8.x"
+
+/* { dg-final { scan-assembler-times "vtrn\.8\[ \t\]+\[qQ\]\[0-9\]+, ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqu16_1.c b/gcc/testsuite/gcc.target/arm/simd/vtrnqu16_1.c
new file mode 100644
index 0000000..7f40109
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqu16_1.c
@@ -0,0 +1,12 @@ 
+/* Test the `vtrnQu16' ARM Neon intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-save-temps -O1 -fno-inline" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include "../../aarch64/simd/vtrnqu16.x"
+
+/* { dg-final { scan-assembler-times "vtrn\.16\[ \t\]+\[qQ\]\[0-9\]+, ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqu32_1.c b/gcc/testsuite/gcc.target/arm/simd/vtrnqu32_1.c
new file mode 100644
index 0000000..1c61fc3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqu32_1.c
@@ -0,0 +1,12 @@ 
+/* Test the `vtrnQu32' ARM Neon intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-save-temps -O1 -fno-inline" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include "../../aarch64/simd/vtrnqu32.x"
+
+/* { dg-final { scan-assembler-times "vtrn\.32\[ \t\]+\[qQ\]\[0-9\]+, ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnqu8_1.c b/gcc/testsuite/gcc.target/arm/simd/vtrnqu8_1.c
new file mode 100644
index 0000000..82f911d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/simd/vtrnqu8_1.c
@@ -0,0 +1,12 @@ 
+/* Test the `vtrnQu8' ARM Neon intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-save-temps -O1 -fno-inline" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include "../../aarch64/simd/vtrnqu8.x"
+
+/* { dg-final { scan-assembler-times "vtrn\.8\[ \t\]+\[qQ\]\[0-9\]+, ?\[qQ\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrns16_1.c b/gcc/testsuite/gcc.target/arm/simd/vtrns16_1.c
new file mode 100644
index 0000000..af2c68f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/simd/vtrns16_1.c
@@ -0,0 +1,12 @@ 
+/* Test the `vtrns16' ARM Neon intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-save-temps -O1 -fno-inline" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include "../../aarch64/simd/vtrns16.x"
+
+/* { dg-final { scan-assembler-times "vtrn\.16\[ \t\]+\[dD\]\[0-9\]+, ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrns32_1.c b/gcc/testsuite/gcc.target/arm/simd/vtrns32_1.c
new file mode 100644
index 0000000..35a98ea
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/simd/vtrns32_1.c
@@ -0,0 +1,12 @@ 
+/* Test the `vtrns32' ARM Neon intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-save-temps -O1 -fno-inline" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include "../../aarch64/simd/vtrns32.x"
+
+/* { dg-final { scan-assembler-times "vuzp\.32\[ \t\]+\[dD\]\[0-9\]+, ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrns8_1.c b/gcc/testsuite/gcc.target/arm/simd/vtrns8_1.c
new file mode 100644
index 0000000..395015d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/simd/vtrns8_1.c
@@ -0,0 +1,12 @@ 
+/* Test the `vtrns8' ARM Neon intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-save-temps -O1 -fno-inline" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include "../../aarch64/simd/vtrns8.x"
+
+/* { dg-final { scan-assembler-times "vtrn\.8\[ \t\]+\[dD\]\[0-9\]+, ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnu16_1.c b/gcc/testsuite/gcc.target/arm/simd/vtrnu16_1.c
new file mode 100644
index 0000000..df0d963
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/simd/vtrnu16_1.c
@@ -0,0 +1,12 @@ 
+/* Test the `vtrnu16' ARM Neon intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-save-temps -O1 -fno-inline" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include "../../aarch64/simd/vtrnu16.x"
+
+/* { dg-final { scan-assembler-times "vtrn\.16\[ \t\]+\[dD\]\[0-9\]+, ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnu32_1.c b/gcc/testsuite/gcc.target/arm/simd/vtrnu32_1.c
new file mode 100644
index 0000000..764ed62
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/simd/vtrnu32_1.c
@@ -0,0 +1,12 @@ 
+/* Test the `vtrnu32' ARM Neon intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-save-temps -O1 -fno-inline" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include "../../aarch64/simd/vtrnu32.x"
+
+/* { dg-final { scan-assembler-times "vuzp\.32\[ \t\]+\[dD\]\[0-9\]+, ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/simd/vtrnu8_1.c b/gcc/testsuite/gcc.target/arm/simd/vtrnu8_1.c
new file mode 100644
index 0000000..f5b4d68
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/simd/vtrnu8_1.c
@@ -0,0 +1,12 @@ 
+/* Test the `vtrnu8' ARM Neon intrinsic.  */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-save-temps -O1 -fno-inline" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include "../../aarch64/simd/vtrnu8.x"
+
+/* { dg-final { scan-assembler-times "vtrn\.8\[ \t\]+\[dD\]\[0-9\]+, ?\[dD\]\[0-9\]+!?\(?:\[ \t\]+@\[a-zA-Z0-9 \]+\)?\n" 1 } } */
+/* { dg-final { cleanup-saved-temps } } */