From c744ae0897957def0cd798399ef8ed6dc0d23811 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Wed, 10 Nov 2021 18:37:22 +0000 Subject: [PATCH] [COMMITTED] aarch64: [PR103170] Fix aarch64_simd_dup The problem here is aarch64_simd_dup use the vw iterator rather than vwcore iterator. This causes problems for the V4SF and V2DF modes. I changed both of aarch64_simd_dup patterns to be consistent. Committed as obvious after a bootstrap/test on aarch64-linux-gnu. PR target/103170 gcc/ChangeLog: * config/aarch64/aarch64-simd.md (aarch64_simd_dup): Use vwcore iterator for the r constraint output string. gcc/testsuite/ChangeLog: * gcc.c-torture/compile/vector-dup-1.c: New test. --- gcc/config/aarch64/aarch64-simd.md | 4 ++-- .../gcc.c-torture/compile/vector-dup-1.c | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/vector-dup-1.c diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 54d7ca4ba0a3..1020cd9ee64f 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -69,7 +69,7 @@ "TARGET_SIMD" "@ dup\\t%0., %1.[0] - dup\\t%0., %1" + dup\\t%0., %1" [(set_attr "type" "neon_dup, neon_from_gp")] ) @@ -80,7 +80,7 @@ "TARGET_SIMD" "@ dup\\t%0., %1.[0] - dup\\t%0., %1" + dup\\t%0., %1" [(set_attr "type" "neon_dup, neon_from_gp")] ) diff --git a/gcc/testsuite/gcc.c-torture/compile/vector-dup-1.c b/gcc/testsuite/gcc.c-torture/compile/vector-dup-1.c new file mode 100644 index 000000000000..3475360462b4 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/vector-dup-1.c @@ -0,0 +1,15 @@ +/* { dg-additional-options "-fno-strict-aliasing" } */ + + +/* PR target/103170 */ +/* AARCH64 used to ICE on this for a typo in the string template. */ +#define vector __attribute__((vector_size(4*sizeof(float)))) + +typedef vector float v4sf; + +v4sf f(int t) +{ + float tt = *(float*)&t; + asm("":"+r"(tt)); + return (v4sf){tt,tt,tt,tt}; +} -- 2.47.3