]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gcc.dg/vect/vect-cond-11.c
Fix profile update after versioning ifconverted loop
[thirdparty/gcc.git] / gcc / testsuite / gcc.dg / vect / vect-cond-11.c
1 /* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
2 #include "tree-vect.h"
3
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];
9
10 __attribute__((noinline, noclone)) unsigned int
11 foo (unsigned int *a, unsigned int *b)
12 {
13 int i;
14 unsigned int r = 0;
15 for (i = 0; i < N; i++)
16 {
17 unsigned int x = a[i], y = b[i];
18 if (x < 32)
19 {
20 x = x + 127;
21 y = y * 2;
22 }
23 else
24 {
25 x = x - 16;
26 y = y + 1;
27 }
28 a[i] = x;
29 b[i] = y;
30 r += x;
31 }
32 return r;
33 }
34
35 __attribute__((noinline, noclone)) unsigned int
36 bar (unsigned int *a, unsigned int *b)
37 {
38 int i;
39 unsigned int r = 0;
40 for (i = 0; i < N; i++)
41 {
42 unsigned int x = a[i], y = b[i];
43 if (x < 32)
44 {
45 x = x + 127;
46 y = y * 2;
47 }
48 else
49 {
50 x = x - 16;
51 y = y + 1;
52 }
53 a[i] = x;
54 b[i] = y;
55 c[i] = c[i] + 1;
56 r += x;
57 }
58 return r;
59 }
60
61 void
62 baz (unsigned int *a, unsigned int *b,
63 unsigned int (*fn) (unsigned int *, unsigned int *))
64 {
65 int i;
66 for (i = -64; i < 0; i++)
67 {
68 a[i] = 19;
69 b[i] = 17;
70 }
71 for (; i < N; i++)
72 {
73 a[i] = i - 512;
74 b[i] = i;
75 }
76 for (; i < N + 64; i++)
77 {
78 a[i] = 27;
79 b[i] = 19;
80 }
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 ();
96 }
97
98 int
99 main ()
100 {
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;
118 }
119
120 /* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */