aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/aarch64/sve/vcond_16.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.target/aarch64/sve/vcond_16.c')
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/vcond_16.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/vcond_16.c b/gcc/testsuite/gcc.target/aarch64/sve/vcond_16.c
new file mode 100644
index 00000000000..7fa98716830
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve/vcond_16.c
@@ -0,0 +1,58 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-vectorize" } */
+
+#define N 119
+
+#define DEF_LOOP(INV, TYPE, CMPTYPE, SUFFIX) \
+ void __attribute__ ((noipa)) \
+ f_##INV##_##SUFFIX (TYPE *restrict a, TYPE *restrict b, \
+ TYPE *restrict c, TYPE *restrict d, \
+ CMPTYPE *restrict cond) \
+ { \
+ for (int i = 0; i < N; ++i) \
+ { \
+ TYPE mb = (INV & 1 ? -b[i] : b[i]); \
+ TYPE mc = c[i]; \
+ TYPE md = (INV & 2 ? -d[i] : d[i]); \
+ TYPE fma = __builtin_fma##SUFFIX (mb, mc, md); \
+ TYPE truev = (INV & 4 ? -fma : fma); \
+ a[i] = cond[i] < 10 ? truev : 10; \
+ } \
+ }
+
+#define FOR_EACH_TYPE(T, INV) \
+ T (INV, _Float16, short, f16) \
+ T (INV, float, float, f32) \
+ T (INV, double, double, f64)
+
+#define FOR_EACH_INV(T) \
+ FOR_EACH_TYPE (T, 0) \
+ FOR_EACH_TYPE (T, 1) \
+ FOR_EACH_TYPE (T, 2) \
+ FOR_EACH_TYPE (T, 3) \
+ FOR_EACH_TYPE (T, 4) \
+ FOR_EACH_TYPE (T, 5) \
+ FOR_EACH_TYPE (T, 6) \
+ FOR_EACH_TYPE (T, 7)
+
+FOR_EACH_INV (DEF_LOOP)
+
+/* { dg-final { scan-assembler-times {\tsel\t} 24 } } */
+/* { dg-final { scan-assembler-not {\tmovprfx\t} } } */
+/* { dg-final { scan-assembler-not {\tmov\tz[0-9]+\.., z[0-9]+} } } */
+
+/* { dg-final { scan-assembler-times {\tfmla\tz[0-9]+\.h,} 2 } } */
+/* { dg-final { scan-assembler-times {\tfmla\tz[0-9]+\.s,} 2 } } */
+/* { dg-final { scan-assembler-times {\tfmla\tz[0-9]+\.d,} 2 } } */
+
+/* { dg-final { scan-assembler-times {\tfmls\tz[0-9]+\.h,} 2 } } */
+/* { dg-final { scan-assembler-times {\tfmls\tz[0-9]+\.s,} 2 } } */
+/* { dg-final { scan-assembler-times {\tfmls\tz[0-9]+\.d,} 2 } } */
+
+/* { dg-final { scan-assembler-times {\tfnmla\tz[0-9]+\.h,} 2 } } */
+/* { dg-final { scan-assembler-times {\tfnmla\tz[0-9]+\.s,} 2 } } */
+/* { dg-final { scan-assembler-times {\tfnmla\tz[0-9]+\.d,} 2 } } */
+
+/* { dg-final { scan-assembler-times {\tfnmls\tz[0-9]+\.h,} 2 } } */
+/* { dg-final { scan-assembler-times {\tfnmls\tz[0-9]+\.s,} 2 } } */
+/* { dg-final { scan-assembler-times {\tfnmls\tz[0-9]+\.d,} 2 } } */