libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / testsuite / gcc.dg / vect / vect-cond-11.c
blobb1347bddbd57ab75bf2be8073c2868a88c48e5ca
1 /* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
2 #include "tree-vect.h"
4 #define N 1024
5 typedef int V __attribute__((vector_size (4)));
6 unsigned int a[N * 2] __attribute__((aligned));
7 unsigned int b[N * 2] __attribute__((aligned));
8 V c[N];
10 __attribute__((noinline, noclone)) unsigned int
11 foo (unsigned int *a, unsigned int *b)
13 int i;
14 unsigned int r = 0;
15 for (i = 0; i < N; i++)
17 unsigned int x = a[i], y = b[i];
18 if (x < 32)
20 x = x + 127;
21 y = y * 2;
23 else
25 x = x - 16;
26 y = y + 1;
28 a[i] = x;
29 b[i] = y;
30 r += x;
32 return r;
35 __attribute__((noinline, noclone)) unsigned int
36 bar (unsigned int *a, unsigned int *b)
38 int i;
39 unsigned int r = 0;
40 for (i = 0; i < N; i++)
42 unsigned int x = a[i], y = b[i];
43 if (x < 32)
45 x = x + 127;
46 y = y * 2;
48 else
50 x = x - 16;
51 y = y + 1;
53 a[i] = x;
54 b[i] = y;
55 c[i] = c[i] + 1;
56 r += x;
58 return r;
61 void
62 baz (unsigned int *a, unsigned int *b,
63 unsigned int (*fn) (unsigned int *, unsigned int *))
65 int i;
66 for (i = -64; i < 0; i++)
68 a[i] = 19;
69 b[i] = 17;
71 for (; i < N; i++)
73 a[i] = i - 512;
74 b[i] = i;
76 for (; i < N + 64; i++)
78 a[i] = 27;
79 b[i] = 19;
81 if (fn (a, b) != -512U - (N - 32) * 16U + 32 * 127U)
82 __builtin_abort ();
83 #pragma GCC novector
84 for (i = -64; i < 0; i++)
85 if (a[i] != 19 || b[i] != 17)
86 __builtin_abort ();
87 #pragma GCC novector
88 for (; i < N; i++)
89 if (a[i] != (i - 512U < 32U ? i - 512U + 127 : i - 512U - 16)
90 || b[i] != (i - 512U < 32U ? i * 2U : i + 1U))
91 __builtin_abort ();
92 #pragma GCC novector
93 for (; i < N + 64; i++)
94 if (a[i] != 27 || b[i] != 19)
95 __builtin_abort ();
98 int
99 main ()
101 int i;
102 check_vect ();
103 baz (a + 512, b + 512, foo);
104 baz (a + 512, b + 512, bar);
105 baz (a + 512 + 1, b + 512 + 1, foo);
106 baz (a + 512 + 1, b + 512 + 1, bar);
107 baz (a + 512 + 31, b + 512 + 31, foo);
108 baz (a + 512 + 31, b + 512 + 31, bar);
109 baz (a + 512 + 1, b + 512, foo);
110 baz (a + 512 + 1, b + 512, bar);
111 baz (a + 512 + 31, b + 512, foo);
112 baz (a + 512 + 31, b + 512, bar);
113 baz (a + 512, b + 512 + 1, foo);
114 baz (a + 512, b + 512 + 1, bar);
115 baz (a + 512, b + 512 + 31, foo);
116 baz (a + 512, b + 512 + 31, bar);
117 return 0;
120 /* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */