SVE Intrinsics: Change return type of redirect_call to gcall.
[official-gcc.git] / gcc / testsuite / gcc.dg / vect / slp-reduc-8.c
blob83dd5d3f04f22766e574f119f6603b16f71ad589
1 /* { dg-require-effective-target vect_int } */
2 /* { dg-require-effective-target vect_perm } */
4 #include "tree-vect.h"
6 static int a[512], b[512];
8 void __attribute__((noinline,noclone))
9 foo (int *sum1p, int *sum2p, int *sum3p)
11 int sum1 = 0;
12 int sum2 = 0;
13 int sum3 = 0;
14 /* Check that we vectorize a reduction chain and a SLP reduction
15 at the same time. */
16 for (int i = 0; i < 256; ++i)
18 sum1 += a[2*i];
19 sum1 += a[2*i + 1];
20 sum2 += b[2*i];
21 sum3 += b[2*i + 1];
23 *sum1p = sum1;
24 *sum2p = sum2;
25 *sum3p = sum3;
28 int main()
30 check_vect ();
32 for (int i = 0; i < 256; ++i)
34 a[2*i] = i;
35 a[2*i + 1] = i/2;
36 b[2*i] = i + 1;
37 b[2*i + 1] = i/2 + 1;
38 __asm__ volatile ("" : : : "memory");
40 int sum1, sum2, sum3;
41 foo (&sum1, &sum2, &sum3);
42 if (sum1 != 48896 || sum2 != 32896 || sum3 != 16512)
43 abort ();
45 return 0;
48 /* { dg-final { scan-tree-dump "Loop contains only SLP stmts" "vect" } } */
49 /* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" } } */