1 /* { dg-do compile } */
2 /* { dg-options "-O2 -ftree-vectorize" } */
3 
4 #include <stdint.h>
5 
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       }								\
21   }
22 
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       }								\
37   }
38 
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)
47 
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)
56 
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)
60 
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)
68 
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)
77 
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)
86 
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)
90 
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)					\
99 									\
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)					\
106 									\
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)					\
113 									\
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)					\
120 									\
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)					\
127 									\
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)				\
132 									\
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)				\
137 									\
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)
144 
145 TEST_VAR_ALL (DEF_VCOND_VAR)
146 TEST_IMM_ALL (DEF_VCOND_IMM)
147 
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 } } */
152 
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.
157 
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 } } */
164 
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 } } */
169 
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 } } */
174 
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 } } */
179 
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 } } */
184 
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 } } */
189 
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 } } */
195 
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 } } */
201 
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 } } */
209 
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 } } */
214 
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 } } */
220 
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 } } */
226 
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 } } */
232 
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 } } */
238 
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 } } */
244 
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 } } */
249 
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 } } */
254 
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 } } */
259 
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 } } */
265 
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 } } */
271 
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 } } */
277 
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 } } */
283 
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 } } */
289 
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 } } */
295 
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 } } */
301 
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 } } */
307 
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 } } */
313 
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 } } */
319