Add support for conditional reductions using SVE CLASTB
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / sve / vcond_2.c
blob53baf86b1c0e2ac2d6ea0fe77a40957e0b9da106
1 /* { dg-do compile } */
2 /* { dg-options "-O2 -ftree-vectorize" } */
4 #include <stdint.h>
6 #define DEF_VCOND_VAR(DATA_TYPE, CMP_TYPE, COND, SUFFIX) \
7 void __attribute__ ((noinline, noclone)) \
8 vcond_var_##CMP_TYPE##_##SUFFIX (DATA_TYPE *__restrict__ r, \
9 DATA_TYPE *__restrict__ x, \
10 DATA_TYPE *__restrict__ y, \
11 CMP_TYPE *__restrict__ a, \
12 CMP_TYPE *__restrict__ b, \
13 int n) \
14 { \
15 for (int i = 0; i < n; i++) \
16 { \
17 DATA_TYPE xval = x[i], yval = y[i]; \
18 CMP_TYPE aval = a[i], bval = b[i]; \
19 r[i] = aval COND bval ? xval : yval; \
20 } \
23 #define DEF_VCOND_IMM(DATA_TYPE, CMP_TYPE, COND, IMM, SUFFIX) \
24 void __attribute__ ((noinline, noclone)) \
25 vcond_imm_##CMP_TYPE##_##SUFFIX (DATA_TYPE *__restrict__ r, \
26 DATA_TYPE *__restrict__ x, \
27 DATA_TYPE *__restrict__ y, \
28 CMP_TYPE *__restrict__ a, \
29 int n) \
30 { \
31 for (int i = 0; i < n; i++) \
32 { \
33 DATA_TYPE xval = x[i], yval = y[i]; \
34 CMP_TYPE aval = a[i]; \
35 r[i] = aval COND (CMP_TYPE) IMM ? xval : yval; \
36 } \
39 #define TEST_COND_VAR_SIGNED_ALL(T, COND, SUFFIX) \
40 T (int8_t, int8_t, COND, SUFFIX) \
41 T (int16_t, int16_t, COND, SUFFIX) \
42 T (int32_t, int32_t, COND, SUFFIX) \
43 T (int64_t, int64_t, COND, SUFFIX) \
44 T (_Float16, int16_t, COND, SUFFIX##_float16) \
45 T (float, int32_t, COND, SUFFIX##_float) \
46 T (double, int64_t, COND, SUFFIX##_double)
48 #define TEST_COND_VAR_UNSIGNED_ALL(T, COND, SUFFIX) \
49 T (uint8_t, uint8_t, COND, SUFFIX) \
50 T (uint16_t, uint16_t, COND, SUFFIX) \
51 T (uint32_t, uint32_t, COND, SUFFIX) \
52 T (uint64_t, uint64_t, COND, SUFFIX) \
53 T (_Float16, uint16_t, COND, SUFFIX##_float16) \
54 T (float, uint32_t, COND, SUFFIX##_float) \
55 T (double, uint64_t, COND, SUFFIX##_double)
57 #define TEST_COND_VAR_ALL(T, COND, SUFFIX) \
58 TEST_COND_VAR_SIGNED_ALL (T, COND, SUFFIX) \
59 TEST_COND_VAR_UNSIGNED_ALL (T, COND, SUFFIX)
61 #define TEST_VAR_ALL(T) \
62 TEST_COND_VAR_ALL (T, >, _gt) \
63 TEST_COND_VAR_ALL (T, <, _lt) \
64 TEST_COND_VAR_ALL (T, >=, _ge) \
65 TEST_COND_VAR_ALL (T, <=, _le) \
66 TEST_COND_VAR_ALL (T, ==, _eq) \
67 TEST_COND_VAR_ALL (T, !=, _ne)
69 #define TEST_COND_IMM_SIGNED_ALL(T, COND, IMM, SUFFIX) \
70 T (int8_t, int8_t, COND, IMM, SUFFIX) \
71 T (int16_t, int16_t, COND, IMM, SUFFIX) \
72 T (int32_t, int32_t, COND, IMM, SUFFIX) \
73 T (int64_t, int64_t, COND, IMM, SUFFIX) \
74 T (_Float16, int16_t, COND, IMM, SUFFIX##_float16) \
75 T (float, int32_t, COND, IMM, SUFFIX##_float) \
76 T (double, int64_t, COND, IMM, SUFFIX##_double)
78 #define TEST_COND_IMM_UNSIGNED_ALL(T, COND, IMM, SUFFIX) \
79 T (uint8_t, uint8_t, COND, IMM, SUFFIX) \
80 T (uint16_t, uint16_t, COND, IMM, SUFFIX) \
81 T (uint32_t, uint32_t, COND, IMM, SUFFIX) \
82 T (uint64_t, uint64_t, COND, IMM, SUFFIX) \
83 T (_Float16, uint16_t, COND, IMM, SUFFIX##_float16) \
84 T (float, uint32_t, COND, IMM, SUFFIX##_float) \
85 T (double, uint64_t, COND, IMM, SUFFIX##_double)
87 #define TEST_COND_IMM_ALL(T, COND, IMM, SUFFIX) \
88 TEST_COND_IMM_SIGNED_ALL (T, COND, IMM, SUFFIX) \
89 TEST_COND_IMM_UNSIGNED_ALL (T, COND, IMM, SUFFIX)
91 #define TEST_IMM_ALL(T) \
92 /* Expect immediates to make it into the encoding. */ \
93 TEST_COND_IMM_ALL (T, >, 5, _gt) \
94 TEST_COND_IMM_ALL (T, <, 5, _lt) \
95 TEST_COND_IMM_ALL (T, >=, 5, _ge) \
96 TEST_COND_IMM_ALL (T, <=, 5, _le) \
97 TEST_COND_IMM_ALL (T, ==, 5, _eq) \
98 TEST_COND_IMM_ALL (T, !=, 5, _ne) \
100 TEST_COND_IMM_SIGNED_ALL (T, >, 15, _gt2) \
101 TEST_COND_IMM_SIGNED_ALL (T, <, 15, _lt2) \
102 TEST_COND_IMM_SIGNED_ALL (T, >=, 15, _ge2) \
103 TEST_COND_IMM_SIGNED_ALL (T, <=, 15, _le2) \
104 TEST_COND_IMM_ALL (T, ==, 15, _eq2) \
105 TEST_COND_IMM_ALL (T, !=, 15, _ne2) \
107 TEST_COND_IMM_SIGNED_ALL (T, >, 16, _gt3) \
108 TEST_COND_IMM_SIGNED_ALL (T, <, 16, _lt3) \
109 TEST_COND_IMM_SIGNED_ALL (T, >=, 16, _ge3) \
110 TEST_COND_IMM_SIGNED_ALL (T, <=, 16, _le3) \
111 TEST_COND_IMM_ALL (T, ==, 16, _eq3) \
112 TEST_COND_IMM_ALL (T, !=, 16, _ne3) \
114 TEST_COND_IMM_SIGNED_ALL (T, >, -16, _gt4) \
115 TEST_COND_IMM_SIGNED_ALL (T, <, -16, _lt4) \
116 TEST_COND_IMM_SIGNED_ALL (T, >=, -16, _ge4) \
117 TEST_COND_IMM_SIGNED_ALL (T, <=, -16, _le4) \
118 TEST_COND_IMM_ALL (T, ==, -16, _eq4) \
119 TEST_COND_IMM_ALL (T, !=, -16, _ne4) \
121 TEST_COND_IMM_SIGNED_ALL (T, >, -17, _gt5) \
122 TEST_COND_IMM_SIGNED_ALL (T, <, -17, _lt5) \
123 TEST_COND_IMM_SIGNED_ALL (T, >=, -17, _ge5) \
124 TEST_COND_IMM_SIGNED_ALL (T, <=, -17, _le5) \
125 TEST_COND_IMM_ALL (T, ==, -17, _eq5) \
126 TEST_COND_IMM_ALL (T, !=, -17, _ne5) \
128 TEST_COND_IMM_UNSIGNED_ALL (T, >, 0, _gt6) \
129 /* Testing if an unsigned value >= 0 or < 0 is pointless as it will \
130 get folded away by the compiler. */ \
131 TEST_COND_IMM_UNSIGNED_ALL (T, <=, 0, _le6) \
133 TEST_COND_IMM_UNSIGNED_ALL (T, >, 127, _gt7) \
134 TEST_COND_IMM_UNSIGNED_ALL (T, <, 127, _lt7) \
135 TEST_COND_IMM_UNSIGNED_ALL (T, >=, 127, _ge7) \
136 TEST_COND_IMM_UNSIGNED_ALL (T, <=, 127, _le7) \
138 /* Expect immediates to NOT make it into the encoding, and instead be \
139 forced into a register. */ \
140 TEST_COND_IMM_UNSIGNED_ALL (T, >, 128, _gt8) \
141 TEST_COND_IMM_UNSIGNED_ALL (T, <, 128, _lt8) \
142 TEST_COND_IMM_UNSIGNED_ALL (T, >=, 128, _ge8) \
143 TEST_COND_IMM_UNSIGNED_ALL (T, <=, 128, _le8)
145 TEST_VAR_ALL (DEF_VCOND_VAR)
146 TEST_IMM_ALL (DEF_VCOND_IMM)
148 /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.b, p[0-7], z[0-9]+\.b, z[0-9]+\.b\n} 66 } } */
149 /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 132 } } */
150 /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.s, p[0-7], z[0-9]+\.s, z[0-9]+\.s\n} 132 } } */
151 /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.d, p[0-7], z[0-9]+\.d, z[0-9]+\.d\n} 132 } } */
153 /* There are two signed ordered register comparisons for .b, one for a
154 variable comparison and one for one of the two out-of-range constant
155 comparisons. The other out-of-ranger constant comparison can be
156 adjusted to an in-range value by inverting the handling of equality.
158 The same pattern appears twice for .h, .s and .d, once for integer data
159 and once for floating-point data. */
160 /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, z[0-9]+\.b\n} 2 } } */
161 /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, z[0-9]+\.h\n} 4 } } */
162 /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, z[0-9]+\.s\n} 4 } } */
163 /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, z[0-9]+\.d\n} 4 } } */
165 /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, z[0-9]+\.b\n} 2 } } */
166 /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, z[0-9]+\.h\n} 4 } } */
167 /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, z[0-9]+\.s\n} 4 } } */
168 /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, z[0-9]+\.d\n} 4 } } */
170 /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, z[0-9]+\.b\n} 2 } } */
171 /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, z[0-9]+\.h\n} 4 } } */
172 /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, z[0-9]+\.s\n} 4 } } */
173 /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, z[0-9]+\.d\n} 4 } } */
175 /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, z[0-9]+\.b\n} 2 } } */
176 /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, z[0-9]+\.h\n} 4 } } */
177 /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, z[0-9]+\.s\n} 4 } } */
178 /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, z[0-9]+\.d\n} 4 } } */
180 /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, z[0-9]+\.b\n} 2 } } */
181 /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, z[0-9]+\.h\n} 4 } } */
182 /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, z[0-9]+\.s\n} 4 } } */
183 /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, z[0-9]+\.d\n} 4 } } */
185 /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, z[0-9]+\.b\n} 2 } } */
186 /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, z[0-9]+\.h\n} 4 } } */
187 /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, z[0-9]+\.s\n} 4 } } */
188 /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, z[0-9]+\.d\n} 4 } } */
190 /* Out-of-range >= is converted to in-range >. */
191 /* { dg-final { scan-assembler-times {\tcmphs\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, z[0-9]+\.b\n} 1 } } */
192 /* { dg-final { scan-assembler-times {\tcmphs\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, z[0-9]+\.h\n} 2 } } */
193 /* { dg-final { scan-assembler-times {\tcmphs\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, z[0-9]+\.s\n} 2 } } */
194 /* { dg-final { scan-assembler-times {\tcmphs\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, z[0-9]+\.d\n} 2 } } */
196 /* Out-of-range < is converted to in-range <=. */
197 /* { dg-final { scan-assembler-times {\tcmplo\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, z[0-9]+\.b\n} 1 } } */
198 /* { dg-final { scan-assembler-times {\tcmplo\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, z[0-9]+\.h\n} 2 } } */
199 /* { dg-final { scan-assembler-times {\tcmplo\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, z[0-9]+\.s\n} 2 } } */
200 /* { dg-final { scan-assembler-times {\tcmplo\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, z[0-9]+\.d\n} 2 } } */
202 /* 6 for .b: {signed, unsigned\n} x {variable, too high, too low}. */
203 /* 12 for .h,.s and .d: the above 6 repeated for integer and floating-point
204 data. */
205 /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, z[0-9]+\.b\n} 6 } } */
206 /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, z[0-9]+\.h\n} 12 } } */
207 /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, z[0-9]+\.s\n} 12 } } */
208 /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, z[0-9]+\.d\n} 12 } } */
210 /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, z[0-9]+\.b\n} 6 } } */
211 /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, z[0-9]+\.h\n} 12 } } */
212 /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, z[0-9]+\.s\n} 12 } } */
213 /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, z[0-9]+\.d\n} 12 } } */
215 /* Also used for >= 16. */
216 /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #15\n} 2 } } */
217 /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #15\n} 4 } } */
218 /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #15\n} 4 } } */
219 /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #15\n} 4 } } */
221 /* gcc converts "a < 15" into "a <= 14". */
222 /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #14\n} 1 } } */
223 /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #14\n} 2 } } */
224 /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #14\n} 2 } } */
225 /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #14\n} 2 } } */
227 /* gcc converts "a >= 15" into "a > 14". */
228 /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #14\n} 1 } } */
229 /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #14\n} 2 } } */
230 /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #14\n} 2 } } */
231 /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #14\n} 2 } } */
233 /* Also used for < 16. */
234 /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #15\n} 2 } } */
235 /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #15\n} 4 } } */
236 /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #15\n} 4 } } */
237 /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #15\n} 4 } } */
239 /* Appears once for each signedness. */
240 /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #15\n} 2 } } */
241 /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #15\n} 4 } } */
242 /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #15\n} 4 } } */
243 /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #15\n} 4 } } */
245 /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #15\n} 2 } } */
246 /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #15\n} 4 } } */
247 /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #15\n} 4 } } */
248 /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #15\n} 4 } } */
250 /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #-16\n} 2 } } */
251 /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #-16\n} 4 } } */
252 /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #-16\n} 4 } } */
253 /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #-16\n} 4 } } */
255 /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #-16\n} 2 } } */
256 /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #-16\n} 4 } } */
257 /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #-16\n} 4 } } */
258 /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #-16\n} 4 } } */
260 /* gcc converts "a > -16" into "a >= -15". */
261 /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #-15\n} 1 } } */
262 /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #-15\n} 2 } } */
263 /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #-15\n} 2 } } */
264 /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #-15\n} 2 } } */
266 /* Also used for <= -17. */
267 /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #-16\n} 2 } } */
268 /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #-16\n} 4 } } */
269 /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #-16\n} 4 } } */
270 /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #-16\n} 4 } } */
272 /* Also used for > -17. */
273 /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #-16\n} 2 } } */
274 /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #-16\n} 4 } } */
275 /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #-16\n} 4 } } */
276 /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #-16\n} 4 } } */
278 /* gcc converts "a <= -16" into "a < -15". */
279 /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #-15\n} 1 } } */
280 /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #-15\n} 2 } } */
281 /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #-15\n} 2 } } */
282 /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #-15\n} 2 } } */
284 /* gcc converts "a > 0" into "a != 0". */
285 /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #0\n} 1 } } */
286 /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #0\n} 2 } } */
287 /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #0\n} 2 } } */
288 /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #0\n} 2 } } */
290 /* gcc converts "a <= 0" into "a == 0". */
291 /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #0\n} 1 } } */
292 /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #0\n} 2 } } */
293 /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #0\n} 2 } } */
294 /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #0\n} 2 } } */
296 /* Also used for >= 128. */
297 /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #127\n} 2 { xfail *-*-* } } } */
298 /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #127\n} 4 } } */
299 /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #127\n} 4 } } */
300 /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #127\n} 4 } } */
302 /* gcc converts "a < 127" into "a <= 126". */
303 /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #126\n} 1 } } */
304 /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #126\n} 2 } } */
305 /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #126\n} 2 } } */
306 /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #126\n} 2 } } */
308 /* gcc converts "a >= 127" into "a > 126". */
309 /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #126\n} 1 } } */
310 /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #126\n} 2 } } */
311 /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #126\n} 2 } } */
312 /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #126\n} 2 } } */
314 /* Also used for < 128. */
315 /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #127\n} 2 { xfail *-*-* } } } */
316 /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #127\n} 4 } } */
317 /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #127\n} 4 } } */
318 /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #127\n} 4 } } */