[committed][RISC-V] Fix test expectations after recent late-combine changes
[official-gcc.git] / gcc / testsuite / gcc.dg / vect / vect-simd-11.c
blob2620dfebbc0dde80d219660dcead43ae01c7c41f
1 /* { dg-require-effective-target size32plus } */
2 /* { dg-additional-options "-fopenmp-simd" } */
3 /* { dg-additional-options "-mavx" { target avx_runtime } } */
4 /* { dg-final { scan-tree-dump-times "vectorized \[1-3] loops" 2 "vect" { target i?86-*-* x86_64-*-* } } } */
6 #ifndef main
7 #include "tree-vect.h"
8 #endif
10 int r, a[1024], b[1024];
11 unsigned short r2, b2[1024];
12 unsigned char r3, b3[1024];
14 __attribute__((noipa)) void
15 foo (int *a, int *b, unsigned short *b2, unsigned char *b3)
17 #pragma omp simd reduction (inscan, +:r, r2, r3)
18 for (int i = 0; i < 1024; i++)
20 { r += a[i]; r2 += a[i]; r3 += a[i]; }
21 #pragma omp scan inclusive(r, r2, r3)
23 b[i] = r;
24 b2[i] = r2;
25 b3[i] = r3;
30 __attribute__((noipa)) int
31 bar (unsigned short *s2p, unsigned char *s3p)
33 int s = 0;
34 unsigned short s2 = 0;
35 unsigned char s3 = 0;
36 #pragma omp simd reduction (inscan, +:s, s2, s3)
37 for (int i = 0; i < 1024; i++)
40 s += 2 * a[i];
41 s2 += 2 * a[i];
42 s3 += 2 * a[i];
44 #pragma omp scan inclusive(s, s2, s3)
45 { b[i] = s; b2[i] = s2; b3[i] = s3; }
47 *s2p = s2;
48 *s3p = s3;
49 return s;
52 __attribute__((noipa)) void
53 baz (int *a, int *b, unsigned short *b2, unsigned char *b3)
55 #pragma omp simd reduction (inscan, +:r, r2, r3) if (simd: 0)
56 for (int i = 0; i < 1024; i++)
59 r += a[i];
60 r2 += a[i];
61 r3 += a[i];
63 #pragma omp scan inclusive(r, r2, r3)
65 b[i] = r;
66 b2[i] = r2;
67 b3[i] = r3;
72 __attribute__((noipa)) int
73 qux (unsigned short *s2p, unsigned char *s3p)
75 int s = 0;
76 unsigned short s2 = 0;
77 unsigned char s3 = 0;
78 #pragma omp simd reduction (inscan, +:s, s2, s3) simdlen (1)
79 for (int i = 0; i < 1024; i++)
81 { s += 2 * a[i]; s2 += 2 * a[i]; s3 += 2 * a[i]; }
82 #pragma omp scan inclusive(s, s2, s3)
83 { b[i] = s; b2[i] = s2; b3[i] = s3; }
85 *s2p = s2;
86 *s3p = s3;
87 return s;
90 int
91 main ()
93 int s = 0;
94 unsigned short s2;
95 unsigned char s3;
96 #ifndef main
97 check_vect ();
98 #endif
99 for (int i = 0; i < 1024; ++i)
101 a[i] = i;
102 b[i] = -1;
103 b2[i] = -1;
104 b3[i] = -1;
105 asm ("" : "+g" (i));
107 foo (a, b, b2, b3);
108 if (r != 1024 * 1023 / 2
109 || r2 != (unsigned short) r
110 || r3 != (unsigned char) r)
111 abort ();
112 #pragma GCC novector
113 for (int i = 0; i < 1024; ++i)
115 s += i;
116 if (b[i] != s
117 || b2[i] != (unsigned short) s
118 || b3[i] != (unsigned char) s)
119 abort ();
120 else
122 b[i] = 25;
123 b2[i] = 24;
124 b3[i] = 26;
127 if (bar (&s2, &s3) != 1024 * 1023)
128 abort ();
129 if (s2 != (unsigned short) (1024 * 1023)
130 || s3 != (unsigned char) (1024 * 1023))
131 abort ();
132 s = 0;
133 #pragma GCC novector
134 for (int i = 0; i < 1024; ++i)
136 s += 2 * i;
137 if (b[i] != s
138 || b2[i] != (unsigned short) s
139 || b3[i] != (unsigned char) s)
140 abort ();
141 else
143 b[i] = -1;
144 b2[i] = -1;
145 b3[i] = -1;
148 r = 0;
149 r2 = 0;
150 r3 = 0;
151 baz (a, b, b2, b3);
152 if (r != 1024 * 1023 / 2
153 || r2 != (unsigned short) r
154 || r3 != (unsigned char) r)
155 abort ();
156 s = 0;
157 #pragma GCC novector
158 for (int i = 0; i < 1024; ++i)
160 s += i;
161 if (b[i] != s
162 || b2[i] != (unsigned short) s
163 || b3[i] != (unsigned char) s)
164 abort ();
165 else
167 b[i] = 25;
168 b2[i] = 24;
169 b3[i] = 26;
172 s2 = 0;
173 s3 = 0;
174 if (qux (&s2, &s3) != 1024 * 1023)
175 abort ();
176 if (s2 != (unsigned short) (1024 * 1023)
177 || s3 != (unsigned char) (1024 * 1023))
178 abort ();
179 s = 0;
180 #pragma GCC novector
181 for (int i = 0; i < 1024; ++i)
183 s += 2 * i;
184 if (b[i] != s
185 || b2[i] != (unsigned short) s
186 || b3[i] != (unsigned char) s)
187 abort ();
189 return 0;