aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2024-08-07 13:54:53 +0200
committerRichard Biener <rguenth@gcc.gnu.org>2024-08-07 14:44:32 +0200
commit5b999997d1a2102dca57918947d7e40a6ca68871 (patch)
treeb864a5042245f85e93ca8e9fc87d980c988cfe16 /gcc
parent990a65fb1aa5d1b05a7737df879afb6900e2ce96 (diff)
downloadgcc-5b999997d1a2102dca57918947d7e40a6ca68871.zip
gcc-5b999997d1a2102dca57918947d7e40a6ca68871.tar.gz
gcc-5b999997d1a2102dca57918947d7e40a6ca68871.tar.bz2
tree-optimization/116258 - do not lower PAREN_EXPR of vectors
The following avoids lowering of PAREN_EXPR of vectors as unsupported to scalars. Instead PAREN_EXPR is like a plain move or a VIEW_CONVERT. PR tree-optimization/116258 * tree-vect-generic.cc (expand_vector_operations_1): Do not lower PAREN_EXPR. * gcc.target/i386/pr116258.c: New testcase.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/gcc.target/i386/pr116258.c14
-rw-r--r--gcc/tree-vect-generic.cc9
2 files changed, 21 insertions, 2 deletions
diff --git a/gcc/testsuite/gcc.target/i386/pr116258.c b/gcc/testsuite/gcc.target/i386/pr116258.c
new file mode 100644
index 0000000..bd7d3a97
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr116258.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -msse2" } */
+
+#define vect16 __attribute__((vector_size(16)))
+#define h(a) __builtin_assoc_barrier((a))
+
+ vect16 float f( vect16 float x, vect16 float vconstants0)
+{
+ vect16 float t = (x * (vconstants0[0]));
+ return (x + h(t));
+}
+
+/* { dg-final { scan-assembler-times "shufps" 1 } } */
+/* { dg-final { scan-assembler-not "unpck" } } */
diff --git a/gcc/tree-vect-generic.cc b/gcc/tree-vect-generic.cc
index 8336cbb..4bcab71 100644
--- a/gcc/tree-vect-generic.cc
+++ b/gcc/tree-vect-generic.cc
@@ -2206,10 +2206,15 @@ expand_vector_operations_1 (gimple_stmt_iterator *gsi,
}
}
+ /* Plain moves do not need lowering. */
+ if (code == SSA_NAME
+ || code == VIEW_CONVERT_EXPR
+ || code == PAREN_EXPR)
+ return;
+
if (CONVERT_EXPR_CODE_P (code)
|| code == FLOAT_EXPR
- || code == FIX_TRUNC_EXPR
- || code == VIEW_CONVERT_EXPR)
+ || code == FIX_TRUNC_EXPR)
return;
/* The signedness is determined from input argument. */