diff options
author | Richard Biener <rguenther@suse.de> | 2024-08-07 13:54:53 +0200 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2024-08-07 14:44:32 +0200 |
commit | 5b999997d1a2102dca57918947d7e40a6ca68871 (patch) | |
tree | b864a5042245f85e93ca8e9fc87d980c988cfe16 /gcc | |
parent | 990a65fb1aa5d1b05a7737df879afb6900e2ce96 (diff) | |
download | gcc-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.c | 14 | ||||
-rw-r--r-- | gcc/tree-vect-generic.cc | 9 |
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. */ |