aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorStam Markianos-Wright <stam.markianos-wright@arm.com>2023-04-04 13:06:41 +0100
committerStam Markianos-Wright <stam.markianos-wright@arm.com>2023-04-04 13:09:38 +0100
commit3f0ca7a3e4431534bff3b8eb73709cc822e489b0 (patch)
treec2342a30ec164cbca6dd4cdd52381b228721988d /gcc
parent688d126b69215db29774c249b052e52d765782b3 (diff)
downloadgcc-3f0ca7a3e4431534bff3b8eb73709cc822e489b0.zip
gcc-3f0ca7a3e4431534bff3b8eb73709cc822e489b0.tar.gz
gcc-3f0ca7a3e4431534bff3b8eb73709cc822e489b0.tar.bz2
arm: Fix vcreate definition
From the initial merge of the MVE backend, the vcreate intrinsic has had the vector lanes mixed up, compared to the intended (as per the ACLE) definition. This is also a discrepancy with clang: https://godbolt.org/z/4n93e5aqj This patches simply switches the operands around and makes the tests more specific on the input registers (I do not touch the output Q regs as they vary based on softfp/hardfp or the input registers when the input is a constant, since, in that case, a single register is loaded with a constant and then the same register is used twice as "vmov q0[2], q0[0], r2, r2" and the reg num might not always be guaranteed). gcc/ChangeLog: * config/arm/mve.md (mve_vcvtq_n_to_f_<supf><mode>): Swap operands. (mve_vcreateq_f<mode>): Swap operands. gcc/testsuite/ChangeLog: * gcc.target/arm/mve/intrinsics/vcreateq_f16.c: Tighten test. * gcc.target/arm/mve/intrinsics/vcreateq_f32.c: Tighten test. * gcc.target/arm/mve/intrinsics/vcreateq_s16.c: Tighten test. * gcc.target/arm/mve/intrinsics/vcreateq_s32.c: Tighten test. * gcc.target/arm/mve/intrinsics/vcreateq_s64.c: Tighten test. * gcc.target/arm/mve/intrinsics/vcreateq_s8.c: Tighten test. * gcc.target/arm/mve/intrinsics/vcreateq_u16.c: Tighten test. * gcc.target/arm/mve/intrinsics/vcreateq_u32.c: Tighten test. * gcc.target/arm/mve/intrinsics/vcreateq_u64.c: Tighten test. * gcc.target/arm/mve/intrinsics/vcreateq_u8.c: Tighten test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/arm/mve.md4
-rw-r--r--gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_f16.c6
-rw-r--r--gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_f32.c6
-rw-r--r--gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_s16.c6
-rw-r--r--gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_s32.c6
-rw-r--r--gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_s64.c6
-rw-r--r--gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_s8.c6
-rw-r--r--gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_u16.c6
-rw-r--r--gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_u32.c6
-rw-r--r--gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_u64.c6
-rw-r--r--gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_u8.c6
11 files changed, 32 insertions, 32 deletions
diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md
index 369a58d..35eab6c 100644
--- a/gcc/config/arm/mve.md
+++ b/gcc/config/arm/mve.md
@@ -723,7 +723,7 @@
VCREATEQ_F))
]
"TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT"
- "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
+ "vmov %q0[2], %q0[0], %Q1, %Q2\;vmov %q0[3], %q0[1], %R1, %R2"
[(set_attr "type" "mve_move")
(set_attr "length""8")])
@@ -738,7 +738,7 @@
VCREATEQ))
]
"TARGET_HAVE_MVE"
- "vmov %q0[2], %q0[0], %Q2, %Q1\;vmov %q0[3], %q0[1], %R2, %R1"
+ "vmov %q0[2], %q0[0], %Q1, %Q2\;vmov %q0[3], %q0[1], %R1, %R2"
[(set_attr "type" "mve_move")
(set_attr "length""8")])
diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_f16.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_f16.c
index 0458bb1..8d6764d 100644
--- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_f16.c
+++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_f16.c
@@ -12,8 +12,8 @@ extern "C" {
/*
**foo:
** ...
-** vmov q[0-9+]\[2\], q[0-9+]\[0\], r[0-9+], r[0-9+]
-** vmov q[0-9+]\[3\], q[0-9+]\[1\], r[0-9+], r[0-9+]
+** vmov q[0-9+]\[2\], q[0-9+]\[0\], r0, r2
+** vmov q[0-9+]\[3\], q[0-9+]\[1\], r1, r3
** ...
*/
float16x8_t
@@ -39,4 +39,4 @@ foo1 ()
}
#endif
-/* { dg-final { scan-assembler-not "__ARM_undef" } } */ \ No newline at end of file
+/* { dg-final { scan-assembler-not "__ARM_undef" } } */
diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_f32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_f32.c
index af782b5..6ab05ce 100644
--- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_f32.c
+++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_f32.c
@@ -12,8 +12,8 @@ extern "C" {
/*
**foo:
** ...
-** vmov q[0-9+]\[2\], q[0-9+]\[0\], r[0-9+], r[0-9+]
-** vmov q[0-9+]\[3\], q[0-9+]\[1\], r[0-9+], r[0-9+]
+** vmov q[0-9+]\[2\], q[0-9+]\[0\], r0, r2
+** vmov q[0-9+]\[3\], q[0-9+]\[1\], r1, r3
** ...
*/
float32x4_t
@@ -39,4 +39,4 @@ foo1 ()
}
#endif
-/* { dg-final { scan-assembler-not "__ARM_undef" } } */ \ No newline at end of file
+/* { dg-final { scan-assembler-not "__ARM_undef" } } */
diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_s16.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_s16.c
index 8a3e918..2906375 100644
--- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_s16.c
+++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_s16.c
@@ -12,8 +12,8 @@ extern "C" {
/*
**foo:
** ...
-** vmov q[0-9+]\[2\], q[0-9+]\[0\], r[0-9+], r[0-9+]
-** vmov q[0-9+]\[3\], q[0-9+]\[1\], r[0-9+], r[0-9+]
+** vmov q[0-9+]\[2\], q[0-9+]\[0\], r0, r2
+** vmov q[0-9+]\[3\], q[0-9+]\[1\], r1, r3
** ...
*/
int16x8_t
@@ -39,4 +39,4 @@ foo1 ()
}
#endif
-/* { dg-final { scan-assembler-not "__ARM_undef" } } */ \ No newline at end of file
+/* { dg-final { scan-assembler-not "__ARM_undef" } } */
diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_s32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_s32.c
index 5e385df..4aeead1 100644
--- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_s32.c
+++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_s32.c
@@ -12,8 +12,8 @@ extern "C" {
/*
**foo:
** ...
-** vmov q[0-9+]\[2\], q[0-9+]\[0\], r[0-9+], r[0-9+]
-** vmov q[0-9+]\[3\], q[0-9+]\[1\], r[0-9+], r[0-9+]
+** vmov q[0-9+]\[2\], q[0-9+]\[0\], r0, r2
+** vmov q[0-9+]\[3\], q[0-9+]\[1\], r1, r3
** ...
*/
int32x4_t
@@ -39,4 +39,4 @@ foo1 ()
}
#endif
-/* { dg-final { scan-assembler-not "__ARM_undef" } } */ \ No newline at end of file
+/* { dg-final { scan-assembler-not "__ARM_undef" } } */
diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_s64.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_s64.c
index df90168..9f6df42 100644
--- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_s64.c
+++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_s64.c
@@ -12,8 +12,8 @@ extern "C" {
/*
**foo:
** ...
-** vmov q[0-9+]\[2\], q[0-9+]\[0\], r[0-9+], r[0-9+]
-** vmov q[0-9+]\[3\], q[0-9+]\[1\], r[0-9+], r[0-9+]
+** vmov q[0-9+]\[2\], q[0-9+]\[0\], r0, r2
+** vmov q[0-9+]\[3\], q[0-9+]\[1\], r1, r3
** ...
*/
int64x2_t
@@ -39,4 +39,4 @@ foo1 ()
}
#endif
-/* { dg-final { scan-assembler-not "__ARM_undef" } } */ \ No newline at end of file
+/* { dg-final { scan-assembler-not "__ARM_undef" } } */
diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_s8.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_s8.c
index e853395..196c147 100644
--- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_s8.c
+++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_s8.c
@@ -12,8 +12,8 @@ extern "C" {
/*
**foo:
** ...
-** vmov q[0-9+]\[2\], q[0-9+]\[0\], r[0-9+], r[0-9+]
-** vmov q[0-9+]\[3\], q[0-9+]\[1\], r[0-9+], r[0-9+]
+** vmov q[0-9+]\[2\], q[0-9+]\[0\], r0, r2
+** vmov q[0-9+]\[3\], q[0-9+]\[1\], r1, r3
** ...
*/
int8x16_t
@@ -39,4 +39,4 @@ foo1 ()
}
#endif
-/* { dg-final { scan-assembler-not "__ARM_undef" } } */ \ No newline at end of file
+/* { dg-final { scan-assembler-not "__ARM_undef" } } */
diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_u16.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_u16.c
index bf4a137..20b18e2 100644
--- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_u16.c
+++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_u16.c
@@ -12,8 +12,8 @@ extern "C" {
/*
**foo:
** ...
-** vmov q[0-9+]\[2\], q[0-9+]\[0\], r[0-9+], r[0-9+]
-** vmov q[0-9+]\[3\], q[0-9+]\[1\], r[0-9+], r[0-9+]
+** vmov q[0-9+]\[2\], q[0-9+]\[0\], r0, r2
+** vmov q[0-9+]\[3\], q[0-9+]\[1\], r1, r3
** ...
*/
uint16x8_t
@@ -39,4 +39,4 @@ foo1 ()
}
#endif
-/* { dg-final { scan-assembler-not "__ARM_undef" } } */ \ No newline at end of file
+/* { dg-final { scan-assembler-not "__ARM_undef" } } */
diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_u32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_u32.c
index efb58dd..febfd3b 100644
--- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_u32.c
+++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_u32.c
@@ -12,8 +12,8 @@ extern "C" {
/*
**foo:
** ...
-** vmov q[0-9+]\[2\], q[0-9+]\[0\], r[0-9+], r[0-9+]
-** vmov q[0-9+]\[3\], q[0-9+]\[1\], r[0-9+], r[0-9+]
+** vmov q[0-9+]\[2\], q[0-9+]\[0\], r0, r2
+** vmov q[0-9+]\[3\], q[0-9+]\[1\], r1, r3
** ...
*/
uint32x4_t
@@ -39,4 +39,4 @@ foo1 ()
}
#endif
-/* { dg-final { scan-assembler-not "__ARM_undef" } } */ \ No newline at end of file
+/* { dg-final { scan-assembler-not "__ARM_undef" } } */
diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_u64.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_u64.c
index 91dd885..5a49b34 100644
--- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_u64.c
+++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_u64.c
@@ -12,8 +12,8 @@ extern "C" {
/*
**foo:
** ...
-** vmov q[0-9+]\[2\], q[0-9+]\[0\], r[0-9+], r[0-9+]
-** vmov q[0-9+]\[3\], q[0-9+]\[1\], r[0-9+], r[0-9+]
+** vmov q[0-9+]\[2\], q[0-9+]\[0\], r0, r2
+** vmov q[0-9+]\[3\], q[0-9+]\[1\], r1, r3
** ...
*/
uint64x2_t
@@ -39,4 +39,4 @@ foo1 ()
}
#endif
-/* { dg-final { scan-assembler-not "__ARM_undef" } } */ \ No newline at end of file
+/* { dg-final { scan-assembler-not "__ARM_undef" } } */
diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_u8.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_u8.c
index d5d0011..c0ac5e5 100644
--- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_u8.c
+++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vcreateq_u8.c
@@ -12,8 +12,8 @@ extern "C" {
/*
**foo:
** ...
-** vmov q[0-9+]\[2\], q[0-9+]\[0\], r[0-9+], r[0-9+]
-** vmov q[0-9+]\[3\], q[0-9+]\[1\], r[0-9+], r[0-9+]
+** vmov q[0-9+]\[2\], q[0-9+]\[0\], r0, r2
+** vmov q[0-9+]\[3\], q[0-9+]\[1\], r1, r3
** ...
*/
uint8x16_t
@@ -39,4 +39,4 @@ foo1 ()
}
#endif
-/* { dg-final { scan-assembler-not "__ARM_undef" } } */ \ No newline at end of file
+/* { dg-final { scan-assembler-not "__ARM_undef" } } */