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