1; RUN: llc -march=mips -mattr=+msa,+fp64 < %s | FileCheck %s 2; RUN: llc -march=mipsel -mattr=+msa,+fp64 < %s | FileCheck %s 3 4define void @ceq_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 5 ; CHECK: ceq_v16i8: 6 7 %1 = load <16 x i8>, <16 x i8>* %a 8 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 9 %2 = load <16 x i8>, <16 x i8>* %b 10 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 11 %3 = icmp eq <16 x i8> %1, %2 12 %4 = sext <16 x i1> %3 to <16 x i8> 13 ; CHECK-DAG: ceq.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 14 store <16 x i8> %4, <16 x i8>* %c 15 ; CHECK-DAG: st.b [[R3]], 0($4) 16 17 ret void 18 ; CHECK: .size ceq_v16i8 19} 20 21define void @ceq_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 22 ; CHECK: ceq_v8i16: 23 24 %1 = load <8 x i16>, <8 x i16>* %a 25 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 26 %2 = load <8 x i16>, <8 x i16>* %b 27 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 28 %3 = icmp eq <8 x i16> %1, %2 29 %4 = sext <8 x i1> %3 to <8 x i16> 30 ; CHECK-DAG: ceq.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 31 store <8 x i16> %4, <8 x i16>* %c 32 ; CHECK-DAG: st.h [[R3]], 0($4) 33 34 ret void 35 ; CHECK: .size ceq_v8i16 36} 37 38define void @ceq_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 39 ; CHECK: ceq_v4i32: 40 41 %1 = load <4 x i32>, <4 x i32>* %a 42 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 43 %2 = load <4 x i32>, <4 x i32>* %b 44 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 45 %3 = icmp eq <4 x i32> %1, %2 46 %4 = sext <4 x i1> %3 to <4 x i32> 47 ; CHECK-DAG: ceq.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 48 store <4 x i32> %4, <4 x i32>* %c 49 ; CHECK-DAG: st.w [[R3]], 0($4) 50 51 ret void 52 ; CHECK: .size ceq_v4i32 53} 54 55define void @ceq_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 56 ; CHECK: ceq_v2i64: 57 58 %1 = load <2 x i64>, <2 x i64>* %a 59 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 60 %2 = load <2 x i64>, <2 x i64>* %b 61 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 62 %3 = icmp eq <2 x i64> %1, %2 63 %4 = sext <2 x i1> %3 to <2 x i64> 64 ; CHECK-DAG: ceq.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 65 store <2 x i64> %4, <2 x i64>* %c 66 ; CHECK-DAG: st.d [[R3]], 0($4) 67 68 ret void 69 ; CHECK: .size ceq_v2i64 70} 71 72define void @cle_s_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 73 ; CHECK: cle_s_v16i8: 74 75 %1 = load <16 x i8>, <16 x i8>* %a 76 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 77 %2 = load <16 x i8>, <16 x i8>* %b 78 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 79 %3 = icmp sle <16 x i8> %1, %2 80 %4 = sext <16 x i1> %3 to <16 x i8> 81 ; CHECK-DAG: cle_s.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 82 store <16 x i8> %4, <16 x i8>* %c 83 ; CHECK-DAG: st.b [[R3]], 0($4) 84 85 ret void 86 ; CHECK: .size cle_s_v16i8 87} 88 89define void @cle_s_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 90 ; CHECK: cle_s_v8i16: 91 92 %1 = load <8 x i16>, <8 x i16>* %a 93 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 94 %2 = load <8 x i16>, <8 x i16>* %b 95 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 96 %3 = icmp sle <8 x i16> %1, %2 97 %4 = sext <8 x i1> %3 to <8 x i16> 98 ; CHECK-DAG: cle_s.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 99 store <8 x i16> %4, <8 x i16>* %c 100 ; CHECK-DAG: st.h [[R3]], 0($4) 101 102 ret void 103 ; CHECK: .size cle_s_v8i16 104} 105 106define void @cle_s_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 107 ; CHECK: cle_s_v4i32: 108 109 %1 = load <4 x i32>, <4 x i32>* %a 110 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 111 %2 = load <4 x i32>, <4 x i32>* %b 112 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 113 %3 = icmp sle <4 x i32> %1, %2 114 %4 = sext <4 x i1> %3 to <4 x i32> 115 ; CHECK-DAG: cle_s.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 116 store <4 x i32> %4, <4 x i32>* %c 117 ; CHECK-DAG: st.w [[R3]], 0($4) 118 119 ret void 120 ; CHECK: .size cle_s_v4i32 121} 122 123define void @cle_s_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 124 ; CHECK: cle_s_v2i64: 125 126 %1 = load <2 x i64>, <2 x i64>* %a 127 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 128 %2 = load <2 x i64>, <2 x i64>* %b 129 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 130 %3 = icmp sle <2 x i64> %1, %2 131 %4 = sext <2 x i1> %3 to <2 x i64> 132 ; CHECK-DAG: cle_s.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 133 store <2 x i64> %4, <2 x i64>* %c 134 ; CHECK-DAG: st.d [[R3]], 0($4) 135 136 ret void 137 ; CHECK: .size cle_s_v2i64 138} 139 140define void @cle_u_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 141 ; CHECK: cle_u_v16i8: 142 143 %1 = load <16 x i8>, <16 x i8>* %a 144 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 145 %2 = load <16 x i8>, <16 x i8>* %b 146 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 147 %3 = icmp ule <16 x i8> %1, %2 148 %4 = sext <16 x i1> %3 to <16 x i8> 149 ; CHECK-DAG: cle_u.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 150 store <16 x i8> %4, <16 x i8>* %c 151 ; CHECK-DAG: st.b [[R3]], 0($4) 152 153 ret void 154 ; CHECK: .size cle_u_v16i8 155} 156 157define void @cle_u_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 158 ; CHECK: cle_u_v8i16: 159 160 %1 = load <8 x i16>, <8 x i16>* %a 161 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 162 %2 = load <8 x i16>, <8 x i16>* %b 163 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 164 %3 = icmp ule <8 x i16> %1, %2 165 %4 = sext <8 x i1> %3 to <8 x i16> 166 ; CHECK-DAG: cle_u.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 167 store <8 x i16> %4, <8 x i16>* %c 168 ; CHECK-DAG: st.h [[R3]], 0($4) 169 170 ret void 171 ; CHECK: .size cle_u_v8i16 172} 173 174define void @cle_u_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 175 ; CHECK: cle_u_v4i32: 176 177 %1 = load <4 x i32>, <4 x i32>* %a 178 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 179 %2 = load <4 x i32>, <4 x i32>* %b 180 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 181 %3 = icmp ule <4 x i32> %1, %2 182 %4 = sext <4 x i1> %3 to <4 x i32> 183 ; CHECK-DAG: cle_u.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 184 store <4 x i32> %4, <4 x i32>* %c 185 ; CHECK-DAG: st.w [[R3]], 0($4) 186 187 ret void 188 ; CHECK: .size cle_u_v4i32 189} 190 191define void @cle_u_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 192 ; CHECK: cle_u_v2i64: 193 194 %1 = load <2 x i64>, <2 x i64>* %a 195 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 196 %2 = load <2 x i64>, <2 x i64>* %b 197 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 198 %3 = icmp ule <2 x i64> %1, %2 199 %4 = sext <2 x i1> %3 to <2 x i64> 200 ; CHECK-DAG: cle_u.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 201 store <2 x i64> %4, <2 x i64>* %c 202 ; CHECK-DAG: st.d [[R3]], 0($4) 203 204 ret void 205 ; CHECK: .size cle_u_v2i64 206} 207 208define void @clt_s_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 209 ; CHECK: clt_s_v16i8: 210 211 %1 = load <16 x i8>, <16 x i8>* %a 212 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 213 %2 = load <16 x i8>, <16 x i8>* %b 214 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 215 %3 = icmp slt <16 x i8> %1, %2 216 %4 = sext <16 x i1> %3 to <16 x i8> 217 ; CHECK-DAG: clt_s.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 218 store <16 x i8> %4, <16 x i8>* %c 219 ; CHECK-DAG: st.b [[R3]], 0($4) 220 221 ret void 222 ; CHECK: .size clt_s_v16i8 223} 224 225define void @clt_s_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 226 ; CHECK: clt_s_v8i16: 227 228 %1 = load <8 x i16>, <8 x i16>* %a 229 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 230 %2 = load <8 x i16>, <8 x i16>* %b 231 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 232 %3 = icmp slt <8 x i16> %1, %2 233 %4 = sext <8 x i1> %3 to <8 x i16> 234 ; CHECK-DAG: clt_s.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 235 store <8 x i16> %4, <8 x i16>* %c 236 ; CHECK-DAG: st.h [[R3]], 0($4) 237 238 ret void 239 ; CHECK: .size clt_s_v8i16 240} 241 242define void @clt_s_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 243 ; CHECK: clt_s_v4i32: 244 245 %1 = load <4 x i32>, <4 x i32>* %a 246 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 247 %2 = load <4 x i32>, <4 x i32>* %b 248 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 249 %3 = icmp slt <4 x i32> %1, %2 250 %4 = sext <4 x i1> %3 to <4 x i32> 251 ; CHECK-DAG: clt_s.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 252 store <4 x i32> %4, <4 x i32>* %c 253 ; CHECK-DAG: st.w [[R3]], 0($4) 254 255 ret void 256 ; CHECK: .size clt_s_v4i32 257} 258 259define void @clt_s_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 260 ; CHECK: clt_s_v2i64: 261 262 %1 = load <2 x i64>, <2 x i64>* %a 263 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 264 %2 = load <2 x i64>, <2 x i64>* %b 265 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 266 %3 = icmp slt <2 x i64> %1, %2 267 %4 = sext <2 x i1> %3 to <2 x i64> 268 ; CHECK-DAG: clt_s.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 269 store <2 x i64> %4, <2 x i64>* %c 270 ; CHECK-DAG: st.d [[R3]], 0($4) 271 272 ret void 273 ; CHECK: .size clt_s_v2i64 274} 275 276define void @clt_u_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 277 ; CHECK: clt_u_v16i8: 278 279 %1 = load <16 x i8>, <16 x i8>* %a 280 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 281 %2 = load <16 x i8>, <16 x i8>* %b 282 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 283 %3 = icmp ult <16 x i8> %1, %2 284 %4 = sext <16 x i1> %3 to <16 x i8> 285 ; CHECK-DAG: clt_u.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 286 store <16 x i8> %4, <16 x i8>* %c 287 ; CHECK-DAG: st.b [[R3]], 0($4) 288 289 ret void 290 ; CHECK: .size clt_u_v16i8 291} 292 293define void @clt_u_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 294 ; CHECK: clt_u_v8i16: 295 296 %1 = load <8 x i16>, <8 x i16>* %a 297 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 298 %2 = load <8 x i16>, <8 x i16>* %b 299 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 300 %3 = icmp ult <8 x i16> %1, %2 301 %4 = sext <8 x i1> %3 to <8 x i16> 302 ; CHECK-DAG: clt_u.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 303 store <8 x i16> %4, <8 x i16>* %c 304 ; CHECK-DAG: st.h [[R3]], 0($4) 305 306 ret void 307 ; CHECK: .size clt_u_v8i16 308} 309 310define void @clt_u_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 311 ; CHECK: clt_u_v4i32: 312 313 %1 = load <4 x i32>, <4 x i32>* %a 314 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 315 %2 = load <4 x i32>, <4 x i32>* %b 316 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 317 %3 = icmp ult <4 x i32> %1, %2 318 %4 = sext <4 x i1> %3 to <4 x i32> 319 ; CHECK-DAG: clt_u.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 320 store <4 x i32> %4, <4 x i32>* %c 321 ; CHECK-DAG: st.w [[R3]], 0($4) 322 323 ret void 324 ; CHECK: .size clt_u_v4i32 325} 326 327define void @clt_u_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 328 ; CHECK: clt_u_v2i64: 329 330 %1 = load <2 x i64>, <2 x i64>* %a 331 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 332 %2 = load <2 x i64>, <2 x i64>* %b 333 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 334 %3 = icmp ult <2 x i64> %1, %2 335 %4 = sext <2 x i1> %3 to <2 x i64> 336 ; CHECK-DAG: clt_u.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 337 store <2 x i64> %4, <2 x i64>* %c 338 ; CHECK-DAG: st.d [[R3]], 0($4) 339 340 ret void 341 ; CHECK: .size clt_u_v2i64 342} 343 344; There is no != comparison, but test it anyway since we've had legalizer 345; issues in this area. 346define void @cne_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 347 ; CHECK: cne_v16i8: 348 %1 = load <16 x i8>, <16 x i8>* %a 349 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 350 %2 = load <16 x i8>, <16 x i8>* %b 351 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 352 %3 = icmp ne <16 x i8> %1, %2 353 %4 = sext <16 x i1> %3 to <16 x i8> 354 ; CHECK-DAG: ceq.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 355 ; CHECK-DAG: xori.b [[R3]], [[R3]], 255 356 store <16 x i8> %4, <16 x i8>* %c 357 ; CHECK-DAG: st.b [[R3]], 0($4) 358 359 ret void 360 ; CHECK: .size cne_v16i8 361} 362 363; There is no != comparison, but test it anyway since we've had legalizer 364; issues in this area. 365define void @cne_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 366 ; CHECK: cne_v8i16: 367 368 %1 = load <8 x i16>, <8 x i16>* %a 369 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 370 %2 = load <8 x i16>, <8 x i16>* %b 371 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 372 %3 = icmp ne <8 x i16> %1, %2 373 %4 = sext <8 x i1> %3 to <8 x i16> 374 ; CHECK-DAG: ceq.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 375 ; TODO: This should be an 'xori.b [[R3]], [[R3]], 255' but thats an optimisation issue 376 ; CHECK-DAG: ldi.b [[R4:\$w[0-9]+]], -1 377 ; CHECK-DAG: xor.v [[R3]], [[R3]], [[R4]] 378 store <8 x i16> %4, <8 x i16>* %c 379 ; CHECK-DAG: st.h [[R3]], 0($4) 380 381 ret void 382 ; CHECK: .size cne_v8i16 383} 384 385; There is no != comparison, but test it anyway since we've had legalizer 386; issues in this area. 387define void @cne_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 388 ; CHECK: cne_v4i32: 389 390 %1 = load <4 x i32>, <4 x i32>* %a 391 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 392 %2 = load <4 x i32>, <4 x i32>* %b 393 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 394 %3 = icmp ne <4 x i32> %1, %2 395 %4 = sext <4 x i1> %3 to <4 x i32> 396 ; CHECK-DAG: ceq.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 397 ; TODO: This should be an 'xori.b [[R3]], [[R3]], 255' but thats an optimisation issue 398 ; CHECK-DAG: ldi.b [[R4:\$w[0-9]+]], -1 399 ; CHECK-DAG: xor.v [[R3]], [[R3]], [[R4]] 400 store <4 x i32> %4, <4 x i32>* %c 401 ; CHECK-DAG: st.w [[R3]], 0($4) 402 403 ret void 404 ; CHECK: .size cne_v4i32 405} 406 407; There is no != comparison, but test it anyway since we've had legalizer 408; issues in this area. 409define void @cne_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 410 ; CHECK: cne_v2i64: 411 412 %1 = load <2 x i64>, <2 x i64>* %a 413 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 414 %2 = load <2 x i64>, <2 x i64>* %b 415 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 416 %3 = icmp ne <2 x i64> %1, %2 417 %4 = sext <2 x i1> %3 to <2 x i64> 418 ; CHECK-DAG: ceq.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 419 ; TODO: This should be an 'xori.b [[R3]], [[R3]], 255' but thats an optimisation issue 420 ; CHECK-DAG: ldi.b [[R4:\$w[0-9]+]], -1 421 ; CHECK-DAG: xor.v [[R3]], [[R3]], [[R4]] 422 store <2 x i64> %4, <2 x i64>* %c 423 ; CHECK-DAG: st.d [[R3]], 0($4) 424 425 ret void 426 ; CHECK: .size cne_v2i64 427} 428 429define void @ceqi_v16i8(<16 x i8>* %c, <16 x i8>* %a) nounwind { 430 ; CHECK: ceqi_v16i8: 431 432 %1 = load <16 x i8>, <16 x i8>* %a 433 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 434 %2 = icmp eq <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 435 %3 = sext <16 x i1> %2 to <16 x i8> 436 ; CHECK-DAG: ceqi.b [[R3:\$w[0-9]+]], [[R1]], 1 437 store <16 x i8> %3, <16 x i8>* %c 438 ; CHECK-DAG: st.b [[R3]], 0($4) 439 440 ret void 441 ; CHECK: .size ceqi_v16i8 442} 443 444define void @ceqi_v8i16(<8 x i16>* %c, <8 x i16>* %a) nounwind { 445 ; CHECK: ceqi_v8i16: 446 447 %1 = load <8 x i16>, <8 x i16>* %a 448 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 449 %2 = icmp eq <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 450 %3 = sext <8 x i1> %2 to <8 x i16> 451 ; CHECK-DAG: ceqi.h [[R3:\$w[0-9]+]], [[R1]], 1 452 store <8 x i16> %3, <8 x i16>* %c 453 ; CHECK-DAG: st.h [[R3]], 0($4) 454 455 ret void 456 ; CHECK: .size ceqi_v8i16 457} 458 459define void @ceqi_v4i32(<4 x i32>* %c, <4 x i32>* %a) nounwind { 460 ; CHECK: ceqi_v4i32: 461 462 %1 = load <4 x i32>, <4 x i32>* %a 463 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 464 %2 = icmp eq <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1> 465 %3 = sext <4 x i1> %2 to <4 x i32> 466 ; CHECK-DAG: ceqi.w [[R3:\$w[0-9]+]], [[R1]], 1 467 store <4 x i32> %3, <4 x i32>* %c 468 ; CHECK-DAG: st.w [[R3]], 0($4) 469 470 ret void 471 ; CHECK: .size ceqi_v4i32 472} 473 474define void @ceqi_v2i64(<2 x i64>* %c, <2 x i64>* %a) nounwind { 475 ; CHECK: ceqi_v2i64: 476 477 %1 = load <2 x i64>, <2 x i64>* %a 478 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 479 %2 = icmp eq <2 x i64> %1, <i64 1, i64 1> 480 %3 = sext <2 x i1> %2 to <2 x i64> 481 ; CHECK-DAG: ceqi.d [[R3:\$w[0-9]+]], [[R1]], 1 482 store <2 x i64> %3, <2 x i64>* %c 483 ; CHECK-DAG: st.d [[R3]], 0($4) 484 485 ret void 486 ; CHECK: .size ceqi_v2i64 487} 488 489define void @clei_s_v16i8(<16 x i8>* %c, <16 x i8>* %a) nounwind { 490 ; CHECK: clei_s_v16i8: 491 492 %1 = load <16 x i8>, <16 x i8>* %a 493 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 494 %2 = icmp sle <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 495 %3 = sext <16 x i1> %2 to <16 x i8> 496 ; CHECK-DAG: clei_s.b [[R3:\$w[0-9]+]], [[R1]], 1 497 store <16 x i8> %3, <16 x i8>* %c 498 ; CHECK-DAG: st.b [[R3]], 0($4) 499 500 ret void 501 ; CHECK: .size clei_s_v16i8 502} 503 504define void @clei_s_v8i16(<8 x i16>* %c, <8 x i16>* %a) nounwind { 505 ; CHECK: clei_s_v8i16: 506 507 %1 = load <8 x i16>, <8 x i16>* %a 508 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 509 %2 = icmp sle <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 510 %3 = sext <8 x i1> %2 to <8 x i16> 511 ; CHECK-DAG: clei_s.h [[R3:\$w[0-9]+]], [[R1]], 1 512 store <8 x i16> %3, <8 x i16>* %c 513 ; CHECK-DAG: st.h [[R3]], 0($4) 514 515 ret void 516 ; CHECK: .size clei_s_v8i16 517} 518 519define void @clei_s_v4i32(<4 x i32>* %c, <4 x i32>* %a) nounwind { 520 ; CHECK: clei_s_v4i32: 521 522 %1 = load <4 x i32>, <4 x i32>* %a 523 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 524 %2 = icmp sle <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1> 525 %3 = sext <4 x i1> %2 to <4 x i32> 526 ; CHECK-DAG: clei_s.w [[R3:\$w[0-9]+]], [[R1]], 1 527 store <4 x i32> %3, <4 x i32>* %c 528 ; CHECK-DAG: st.w [[R3]], 0($4) 529 530 ret void 531 ; CHECK: .size clei_s_v4i32 532} 533 534define void @clei_s_v2i64(<2 x i64>* %c, <2 x i64>* %a) nounwind { 535 ; CHECK: clei_s_v2i64: 536 537 %1 = load <2 x i64>, <2 x i64>* %a 538 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 539 %2 = icmp sle <2 x i64> %1, <i64 1, i64 1> 540 %3 = sext <2 x i1> %2 to <2 x i64> 541 ; CHECK-DAG: clei_s.d [[R3:\$w[0-9]+]], [[R1]], 1 542 store <2 x i64> %3, <2 x i64>* %c 543 ; CHECK-DAG: st.d [[R3]], 0($4) 544 545 ret void 546 ; CHECK: .size clei_s_v2i64 547} 548 549define void @clei_u_v16i8(<16 x i8>* %c, <16 x i8>* %a) nounwind { 550 ; CHECK: clei_u_v16i8: 551 552 %1 = load <16 x i8>, <16 x i8>* %a 553 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 554 %2 = icmp ule <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 555 %3 = sext <16 x i1> %2 to <16 x i8> 556 ; CHECK-DAG: clei_u.b [[R3:\$w[0-9]+]], [[R1]], 1 557 store <16 x i8> %3, <16 x i8>* %c 558 ; CHECK-DAG: st.b [[R3]], 0($4) 559 560 ret void 561 ; CHECK: .size clei_u_v16i8 562} 563 564define void @clei_u_v8i16(<8 x i16>* %c, <8 x i16>* %a) nounwind { 565 ; CHECK: clei_u_v8i16: 566 567 %1 = load <8 x i16>, <8 x i16>* %a 568 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 569 %2 = icmp ule <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 570 %3 = sext <8 x i1> %2 to <8 x i16> 571 ; CHECK-DAG: clei_u.h [[R3:\$w[0-9]+]], [[R1]], 1 572 store <8 x i16> %3, <8 x i16>* %c 573 ; CHECK-DAG: st.h [[R3]], 0($4) 574 575 ret void 576 ; CHECK: .size clei_u_v8i16 577} 578 579define void @clei_u_v4i32(<4 x i32>* %c, <4 x i32>* %a) nounwind { 580 ; CHECK: clei_u_v4i32: 581 582 %1 = load <4 x i32>, <4 x i32>* %a 583 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 584 %2 = icmp ule <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1> 585 %3 = sext <4 x i1> %2 to <4 x i32> 586 ; CHECK-DAG: clei_u.w [[R3:\$w[0-9]+]], [[R1]], 1 587 store <4 x i32> %3, <4 x i32>* %c 588 ; CHECK-DAG: st.w [[R3]], 0($4) 589 590 ret void 591 ; CHECK: .size clei_u_v4i32 592} 593 594define void @clei_u_v2i64(<2 x i64>* %c, <2 x i64>* %a) nounwind { 595 ; CHECK: clei_u_v2i64: 596 597 %1 = load <2 x i64>, <2 x i64>* %a 598 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 599 %2 = icmp ule <2 x i64> %1, <i64 1, i64 1> 600 %3 = sext <2 x i1> %2 to <2 x i64> 601 ; CHECK-DAG: clei_u.d [[R3:\$w[0-9]+]], [[R1]], 1 602 store <2 x i64> %3, <2 x i64>* %c 603 ; CHECK-DAG: st.d [[R3]], 0($4) 604 605 ret void 606 ; CHECK: .size clei_u_v2i64 607} 608 609define void @clti_s_v16i8(<16 x i8>* %c, <16 x i8>* %a) nounwind { 610 ; CHECK: clti_s_v16i8: 611 612 %1 = load <16 x i8>, <16 x i8>* %a 613 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 614 %2 = icmp slt <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 615 %3 = sext <16 x i1> %2 to <16 x i8> 616 ; CHECK-DAG: clti_s.b [[R3:\$w[0-9]+]], [[R1]], 1 617 store <16 x i8> %3, <16 x i8>* %c 618 ; CHECK-DAG: st.b [[R3]], 0($4) 619 620 ret void 621 ; CHECK: .size clti_s_v16i8 622} 623 624define void @clti_s_v8i16(<8 x i16>* %c, <8 x i16>* %a) nounwind { 625 ; CHECK: clti_s_v8i16: 626 627 %1 = load <8 x i16>, <8 x i16>* %a 628 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 629 %2 = icmp slt <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 630 %3 = sext <8 x i1> %2 to <8 x i16> 631 ; CHECK-DAG: clti_s.h [[R3:\$w[0-9]+]], [[R1]], 1 632 store <8 x i16> %3, <8 x i16>* %c 633 ; CHECK-DAG: st.h [[R3]], 0($4) 634 635 ret void 636 ; CHECK: .size clti_s_v8i16 637} 638 639define void @clti_s_v4i32(<4 x i32>* %c, <4 x i32>* %a) nounwind { 640 ; CHECK: clti_s_v4i32: 641 642 %1 = load <4 x i32>, <4 x i32>* %a 643 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 644 %2 = icmp slt <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1> 645 %3 = sext <4 x i1> %2 to <4 x i32> 646 ; CHECK-DAG: clti_s.w [[R3:\$w[0-9]+]], [[R1]], 1 647 store <4 x i32> %3, <4 x i32>* %c 648 ; CHECK-DAG: st.w [[R3]], 0($4) 649 650 ret void 651 ; CHECK: .size clti_s_v4i32 652} 653 654define void @clti_s_v2i64(<2 x i64>* %c, <2 x i64>* %a) nounwind { 655 ; CHECK: clti_s_v2i64: 656 657 %1 = load <2 x i64>, <2 x i64>* %a 658 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 659 %2 = icmp slt <2 x i64> %1, <i64 1, i64 1> 660 %3 = sext <2 x i1> %2 to <2 x i64> 661 ; CHECK-DAG: clti_s.d [[R3:\$w[0-9]+]], [[R1]], 1 662 store <2 x i64> %3, <2 x i64>* %c 663 ; CHECK-DAG: st.d [[R3]], 0($4) 664 665 ret void 666 ; CHECK: .size clti_s_v2i64 667} 668 669define void @clti_u_v16i8(<16 x i8>* %c, <16 x i8>* %a) nounwind { 670 ; CHECK: clti_u_v16i8: 671 672 %1 = load <16 x i8>, <16 x i8>* %a 673 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 674 %2 = icmp ult <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 675 %3 = sext <16 x i1> %2 to <16 x i8> 676 ; CHECK-DAG: clti_u.b [[R3:\$w[0-9]+]], [[R1]], 1 677 store <16 x i8> %3, <16 x i8>* %c 678 ; CHECK-DAG: st.b [[R3]], 0($4) 679 680 ret void 681 ; CHECK: .size clti_u_v16i8 682} 683 684define void @clti_u_v8i16(<8 x i16>* %c, <8 x i16>* %a) nounwind { 685 ; CHECK: clti_u_v8i16: 686 687 %1 = load <8 x i16>, <8 x i16>* %a 688 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 689 %2 = icmp ult <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 690 %3 = sext <8 x i1> %2 to <8 x i16> 691 ; CHECK-DAG: clti_u.h [[R3:\$w[0-9]+]], [[R1]], 1 692 store <8 x i16> %3, <8 x i16>* %c 693 ; CHECK-DAG: st.h [[R3]], 0($4) 694 695 ret void 696 ; CHECK: .size clti_u_v8i16 697} 698 699define void @clti_u_v4i32(<4 x i32>* %c, <4 x i32>* %a) nounwind { 700 ; CHECK: clti_u_v4i32: 701 702 %1 = load <4 x i32>, <4 x i32>* %a 703 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 704 %2 = icmp ult <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1> 705 %3 = sext <4 x i1> %2 to <4 x i32> 706 ; CHECK-DAG: clti_u.w [[R3:\$w[0-9]+]], [[R1]], 1 707 store <4 x i32> %3, <4 x i32>* %c 708 ; CHECK-DAG: st.w [[R3]], 0($4) 709 710 ret void 711 ; CHECK: .size clti_u_v4i32 712} 713 714define void @clti_u_v2i64(<2 x i64>* %c, <2 x i64>* %a) nounwind { 715 ; CHECK: clti_u_v2i64: 716 717 %1 = load <2 x i64>, <2 x i64>* %a 718 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 719 %2 = icmp ult <2 x i64> %1, <i64 1, i64 1> 720 %3 = sext <2 x i1> %2 to <2 x i64> 721 ; CHECK-DAG: clti_u.d [[R3:\$w[0-9]+]], [[R1]], 1 722 store <2 x i64> %3, <2 x i64>* %c 723 ; CHECK-DAG: st.d [[R3]], 0($4) 724 725 ret void 726 ; CHECK: .size clti_u_v2i64 727} 728 729define void @bsel_s_v16i8(<16 x i8>* %d, <16 x i8>* %a, <16 x i8>* %b, 730 <16 x i8>* %c) nounwind { 731 ; CHECK: bsel_s_v16i8: 732 733 %1 = load <16 x i8>, <16 x i8>* %a 734 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 735 %2 = load <16 x i8>, <16 x i8>* %b 736 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 737 %3 = load <16 x i8>, <16 x i8>* %c 738 ; CHECK-DAG: ld.b [[R3:\$w[0-9]+]], 0($7) 739 %4 = icmp sgt <16 x i8> %1, %2 740 ; CHECK-DAG: clt_s.b [[R4:\$w[0-9]+]], [[R2]], [[R1]] 741 %5 = select <16 x i1> %4, <16 x i8> %1, <16 x i8> %3 742 ; bmnz.v is the same operation 743 ; CHECK-DAG: bmnz.v [[R3]], [[R1]], [[R4]] 744 store <16 x i8> %5, <16 x i8>* %d 745 ; CHECK-DAG: st.b [[R3]], 0($4) 746 747 ret void 748 ; CHECK: .size bsel_s_v16i8 749} 750 751define void @bsel_s_v8i16(<8 x i16>* %d, <8 x i16>* %a, <8 x i16>* %b, 752 <8 x i16>* %c) nounwind { 753 ; CHECK: bsel_s_v8i16: 754 755 %1 = load <8 x i16>, <8 x i16>* %a 756 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 757 %2 = load <8 x i16>, <8 x i16>* %b 758 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 759 %3 = load <8 x i16>, <8 x i16>* %c 760 ; CHECK-DAG: ld.h [[R3:\$w[0-9]+]], 0($7) 761 %4 = icmp sgt <8 x i16> %1, %2 762 ; CHECK-DAG: clt_s.h [[R4:\$w[0-9]+]], [[R2]], [[R1]] 763 %5 = select <8 x i1> %4, <8 x i16> %1, <8 x i16> %3 764 ; Note that IfSet and IfClr are swapped since the condition is inverted 765 ; CHECK-DAG: bsel.v [[R4]], [[R3]], [[R1]] 766 store <8 x i16> %5, <8 x i16>* %d 767 ; CHECK-DAG: st.h [[R4]], 0($4) 768 769 ret void 770 ; CHECK: .size bsel_s_v8i16 771} 772 773define void @bsel_s_v4i32(<4 x i32>* %d, <4 x i32>* %a, <4 x i32>* %b, 774 <4 x i32>* %c) nounwind { 775 ; CHECK: bsel_s_v4i32: 776 777 %1 = load <4 x i32>, <4 x i32>* %a 778 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 779 %2 = load <4 x i32>, <4 x i32>* %b 780 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 781 %3 = load <4 x i32>, <4 x i32>* %c 782 ; CHECK-DAG: ld.w [[R3:\$w[0-9]+]], 0($7) 783 %4 = icmp sgt <4 x i32> %1, %2 784 ; CHECK-DAG: clt_s.w [[R4:\$w[0-9]+]], [[R2]], [[R1]] 785 %5 = select <4 x i1> %4, <4 x i32> %1, <4 x i32> %3 786 ; Note that IfSet and IfClr are swapped since the condition is inverted 787 ; CHECK-DAG: bsel.v [[R4]], [[R3]], [[R1]] 788 store <4 x i32> %5, <4 x i32>* %d 789 ; CHECK-DAG: st.w [[R4]], 0($4) 790 791 ret void 792 ; CHECK: .size bsel_s_v4i32 793} 794 795define void @bsel_s_v2i64(<2 x i64>* %d, <2 x i64>* %a, <2 x i64>* %b, 796 <2 x i64>* %c) nounwind { 797 ; CHECK: bsel_s_v2i64: 798 799 %1 = load <2 x i64>, <2 x i64>* %a 800 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 801 %2 = load <2 x i64>, <2 x i64>* %b 802 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 803 %3 = load <2 x i64>, <2 x i64>* %c 804 ; CHECK-DAG: ld.d [[R3:\$w[0-9]+]], 0($7) 805 %4 = icmp sgt <2 x i64> %1, %2 806 ; CHECK-DAG: clt_s.d [[R4:\$w[0-9]+]], [[R2]], [[R1]] 807 %5 = select <2 x i1> %4, <2 x i64> %1, <2 x i64> %3 808 ; Note that IfSet and IfClr are swapped since the condition is inverted 809 ; CHECK-DAG: bsel.v [[R4]], [[R3]], [[R1]] 810 store <2 x i64> %5, <2 x i64>* %d 811 ; CHECK-DAG: st.d [[R4]], 0($4) 812 813 ret void 814 ; CHECK: .size bsel_s_v2i64 815} 816 817define void @bsel_u_v16i8(<16 x i8>* %d, <16 x i8>* %a, <16 x i8>* %b, 818 <16 x i8>* %c) nounwind { 819 ; CHECK: bsel_u_v16i8: 820 821 %1 = load <16 x i8>, <16 x i8>* %a 822 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 823 %2 = load <16 x i8>, <16 x i8>* %b 824 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 825 %3 = load <16 x i8>, <16 x i8>* %c 826 ; CHECK-DAG: ld.b [[R3:\$w[0-9]+]], 0($7) 827 %4 = icmp ugt <16 x i8> %1, %2 828 ; CHECK-DAG: clt_u.b [[R4:\$w[0-9]+]], [[R2]], [[R1]] 829 %5 = select <16 x i1> %4, <16 x i8> %1, <16 x i8> %3 830 ; bmnz.v is the same operation 831 ; CHECK-DAG: bmnz.v [[R3]], [[R1]], [[R4]] 832 store <16 x i8> %5, <16 x i8>* %d 833 ; CHECK-DAG: st.b [[R3]], 0($4) 834 835 ret void 836 ; CHECK: .size bsel_u_v16i8 837} 838 839define void @bsel_u_v8i16(<8 x i16>* %d, <8 x i16>* %a, <8 x i16>* %b, 840 <8 x i16>* %c) nounwind { 841 ; CHECK: bsel_u_v8i16: 842 843 %1 = load <8 x i16>, <8 x i16>* %a 844 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 845 %2 = load <8 x i16>, <8 x i16>* %b 846 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 847 %3 = load <8 x i16>, <8 x i16>* %c 848 ; CHECK-DAG: ld.h [[R3:\$w[0-9]+]], 0($7) 849 %4 = icmp ugt <8 x i16> %1, %2 850 ; CHECK-DAG: clt_u.h [[R4:\$w[0-9]+]], [[R2]], [[R1]] 851 %5 = select <8 x i1> %4, <8 x i16> %1, <8 x i16> %3 852 ; Note that IfSet and IfClr are swapped since the condition is inverted 853 ; CHECK-DAG: bsel.v [[R4]], [[R3]], [[R1]] 854 store <8 x i16> %5, <8 x i16>* %d 855 ; CHECK-DAG: st.h [[R4]], 0($4) 856 857 ret void 858 ; CHECK: .size bsel_u_v8i16 859} 860 861define void @bsel_u_v4i32(<4 x i32>* %d, <4 x i32>* %a, <4 x i32>* %b, 862 <4 x i32>* %c) nounwind { 863 ; CHECK: bsel_u_v4i32: 864 865 %1 = load <4 x i32>, <4 x i32>* %a 866 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 867 %2 = load <4 x i32>, <4 x i32>* %b 868 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 869 %3 = load <4 x i32>, <4 x i32>* %c 870 ; CHECK-DAG: ld.w [[R3:\$w[0-9]+]], 0($7) 871 %4 = icmp ugt <4 x i32> %1, %2 872 ; CHECK-DAG: clt_u.w [[R4:\$w[0-9]+]], [[R2]], [[R1]] 873 %5 = select <4 x i1> %4, <4 x i32> %1, <4 x i32> %3 874 ; Note that IfSet and IfClr are swapped since the condition is inverted 875 ; CHECK-DAG: bsel.v [[R4]], [[R3]], [[R1]] 876 store <4 x i32> %5, <4 x i32>* %d 877 ; CHECK-DAG: st.w [[R4]], 0($4) 878 879 ret void 880 ; CHECK: .size bsel_u_v4i32 881} 882 883define void @bsel_u_v2i64(<2 x i64>* %d, <2 x i64>* %a, <2 x i64>* %b, 884 <2 x i64>* %c) nounwind { 885 ; CHECK: bsel_u_v2i64: 886 887 %1 = load <2 x i64>, <2 x i64>* %a 888 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 889 %2 = load <2 x i64>, <2 x i64>* %b 890 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 891 %3 = load <2 x i64>, <2 x i64>* %c 892 ; CHECK-DAG: ld.d [[R3:\$w[0-9]+]], 0($7) 893 %4 = icmp ugt <2 x i64> %1, %2 894 ; CHECK-DAG: clt_u.d [[R4:\$w[0-9]+]], [[R2]], [[R1]] 895 %5 = select <2 x i1> %4, <2 x i64> %1, <2 x i64> %3 896 ; Note that IfSet and IfClr are swapped since the condition is inverted 897 ; CHECK-DAG: bsel.v [[R4]], [[R3]], [[R1]] 898 store <2 x i64> %5, <2 x i64>* %d 899 ; CHECK-DAG: st.d [[R4]], 0($4) 900 901 ret void 902 ; CHECK: .size bsel_u_v2i64 903} 904 905define void @bseli_s_v16i8(<16 x i8>* %d, <16 x i8>* %a, <16 x i8>* %b, 906 <16 x i8>* %c) nounwind { 907 ; CHECK: bseli_s_v16i8: 908 909 %1 = load <16 x i8>, <16 x i8>* %a 910 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 911 %2 = load <16 x i8>, <16 x i8>* %b 912 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 913 %3 = icmp sgt <16 x i8> %1, %2 914 ; CHECK-DAG: clt_s.b [[R4:\$w[0-9]+]], [[R2]], [[R1]] 915 %4 = select <16 x i1> %3, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>, <16 x i8> %1 916 ; CHECK-DAG: bseli.b [[R4]], [[R1]], 1 917 store <16 x i8> %4, <16 x i8>* %d 918 ; CHECK-DAG: st.b [[R4]], 0($4) 919 920 ret void 921 ; CHECK: .size bseli_s_v16i8 922} 923 924define void @bseli_s_v8i16(<8 x i16>* %d, <8 x i16>* %a, <8 x i16>* %b, 925 <8 x i16>* %c) nounwind { 926 ; CHECK: bseli_s_v8i16: 927 928 %1 = load <8 x i16>, <8 x i16>* %a 929 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 930 %2 = load <8 x i16>, <8 x i16>* %b 931 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 932 %3 = icmp sgt <8 x i16> %1, %2 933 ; CHECK-DAG: clt_s.h [[R4:\$w[0-9]+]], [[R2]], [[R1]] 934 %4 = select <8 x i1> %3, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>, <8 x i16> %1 935 ; CHECK-DAG: ldi.h [[R3:\$w[0-9]+]], 1 936 ; CHECK-DAG: bsel.v [[R4]], [[R1]], [[R3]] 937 store <8 x i16> %4, <8 x i16>* %d 938 ; CHECK-DAG: st.h [[R4]], 0($4) 939 940 ret void 941 ; CHECK: .size bseli_s_v8i16 942} 943 944define void @bseli_s_v4i32(<4 x i32>* %d, <4 x i32>* %a, <4 x i32>* %b, 945 <4 x i32>* %c) nounwind { 946 ; CHECK: bseli_s_v4i32: 947 948 %1 = load <4 x i32>, <4 x i32>* %a 949 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 950 %2 = load <4 x i32>, <4 x i32>* %b 951 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 952 %3 = icmp sgt <4 x i32> %1, %2 953 ; CHECK-DAG: clt_s.w [[R4:\$w[0-9]+]], [[R2]], [[R1]] 954 %4 = select <4 x i1> %3, <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32> %1 955 ; CHECK-DAG: ldi.w [[R3:\$w[0-9]+]], 1 956 ; CHECK-DAG: bsel.v [[R4]], [[R1]], [[R3]] 957 store <4 x i32> %4, <4 x i32>* %d 958 ; CHECK-DAG: st.w [[R4]], 0($4) 959 960 ret void 961 ; CHECK: .size bseli_s_v4i32 962} 963 964define void @bseli_s_v2i64(<2 x i64>* %d, <2 x i64>* %a, <2 x i64>* %b, 965 <2 x i64>* %c) nounwind { 966 ; CHECK: bseli_s_v2i64: 967 968 %1 = load <2 x i64>, <2 x i64>* %a 969 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 970 %2 = load <2 x i64>, <2 x i64>* %b 971 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 972 %3 = icmp sgt <2 x i64> %1, %2 973 ; CHECK-DAG: clt_s.d [[R4:\$w[0-9]+]], [[R2]], [[R1]] 974 %4 = select <2 x i1> %3, <2 x i64> <i64 1, i64 1>, <2 x i64> %1 975 ; CHECK-DAG: ldi.d [[R3:\$w[0-9]+]], 1 976 ; CHECK-DAG: bsel.v [[R4]], [[R1]], [[R3]] 977 store <2 x i64> %4, <2 x i64>* %d 978 ; CHECK-DAG: st.d [[R4]], 0($4) 979 980 ret void 981 ; CHECK: .size bseli_s_v2i64 982} 983 984define void @bseli_u_v16i8(<16 x i8>* %d, <16 x i8>* %a, <16 x i8>* %b, 985 <16 x i8>* %c) nounwind { 986 ; CHECK: bseli_u_v16i8: 987 988 %1 = load <16 x i8>, <16 x i8>* %a 989 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 990 %2 = load <16 x i8>, <16 x i8>* %b 991 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 992 %3 = icmp ugt <16 x i8> %1, %2 993 ; CHECK-DAG: clt_u.b [[R4:\$w[0-9]+]], [[R2]], [[R1]] 994 %4 = select <16 x i1> %3, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>, <16 x i8> %1 995 ; CHECK-DAG: bseli.b [[R4]], [[R1]], 1 996 store <16 x i8> %4, <16 x i8>* %d 997 ; CHECK-DAG: st.b [[R4]], 0($4) 998 999 ret void 1000 ; CHECK: .size bseli_u_v16i8 1001} 1002 1003define void @bseli_u_v8i16(<8 x i16>* %d, <8 x i16>* %a, <8 x i16>* %b, 1004 <8 x i16>* %c) nounwind { 1005 ; CHECK: bseli_u_v8i16: 1006 1007 %1 = load <8 x i16>, <8 x i16>* %a 1008 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1009 %2 = load <8 x i16>, <8 x i16>* %b 1010 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 1011 %3 = icmp ugt <8 x i16> %1, %2 1012 ; CHECK-DAG: clt_u.h [[R4:\$w[0-9]+]], [[R2]], [[R1]] 1013 %4 = select <8 x i1> %3, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>, <8 x i16> %1 1014 ; CHECK-DAG: ldi.h [[R3:\$w[0-9]+]], 1 1015 ; CHECK-DAG: bsel.v [[R4]], [[R1]], [[R3]] 1016 store <8 x i16> %4, <8 x i16>* %d 1017 ; CHECK-DAG: st.h [[R4]], 0($4) 1018 1019 ret void 1020 ; CHECK: .size bseli_u_v8i16 1021} 1022 1023define void @bseli_u_v4i32(<4 x i32>* %d, <4 x i32>* %a, <4 x i32>* %b, 1024 <4 x i32>* %c) nounwind { 1025 ; CHECK: bseli_u_v4i32: 1026 1027 %1 = load <4 x i32>, <4 x i32>* %a 1028 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1029 %2 = load <4 x i32>, <4 x i32>* %b 1030 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 1031 %3 = icmp ugt <4 x i32> %1, %2 1032 ; CHECK-DAG: clt_u.w [[R4:\$w[0-9]+]], [[R2]], [[R1]] 1033 %4 = select <4 x i1> %3, <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32> %1 1034 ; CHECK-DAG: ldi.w [[R3:\$w[0-9]+]], 1 1035 ; CHECK-DAG: bsel.v [[R4]], [[R1]], [[R3]] 1036 store <4 x i32> %4, <4 x i32>* %d 1037 ; CHECK-DAG: st.w [[R4]], 0($4) 1038 1039 ret void 1040 ; CHECK: .size bseli_u_v4i32 1041} 1042 1043define void @bseli_u_v2i64(<2 x i64>* %d, <2 x i64>* %a, <2 x i64>* %b, 1044 <2 x i64>* %c) nounwind { 1045 ; CHECK: bseli_u_v2i64: 1046 1047 %1 = load <2 x i64>, <2 x i64>* %a 1048 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1049 %2 = load <2 x i64>, <2 x i64>* %b 1050 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 1051 %3 = icmp ugt <2 x i64> %1, %2 1052 ; CHECK-DAG: clt_u.d [[R4:\$w[0-9]+]], [[R2]], [[R1]] 1053 %4 = select <2 x i1> %3, <2 x i64> <i64 1, i64 1>, <2 x i64> %1 1054 ; CHECK-DAG: ldi.d [[R3:\$w[0-9]+]], 1 1055 ; CHECK-DAG: bsel.v [[R4]], [[R1]], [[R3]] 1056 store <2 x i64> %4, <2 x i64>* %d 1057 ; CHECK-DAG: st.d [[R4]], 0($4) 1058 1059 ret void 1060 ; CHECK: .size bseli_u_v2i64 1061} 1062 1063define void @max_s_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 1064 ; CHECK: max_s_v16i8: 1065 1066 %1 = load <16 x i8>, <16 x i8>* %a 1067 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1068 %2 = load <16 x i8>, <16 x i8>* %b 1069 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 1070 %3 = icmp sgt <16 x i8> %1, %2 1071 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2 1072 ; CHECK-DAG: max_s.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1073 store <16 x i8> %4, <16 x i8>* %c 1074 ; CHECK-DAG: st.b [[R3]], 0($4) 1075 1076 ret void 1077 ; CHECK: .size max_s_v16i8 1078} 1079 1080define void @max_s_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1081 ; CHECK: max_s_v8i16: 1082 1083 %1 = load <8 x i16>, <8 x i16>* %a 1084 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1085 %2 = load <8 x i16>, <8 x i16>* %b 1086 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 1087 %3 = icmp sgt <8 x i16> %1, %2 1088 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2 1089 ; CHECK-DAG: max_s.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1090 store <8 x i16> %4, <8 x i16>* %c 1091 ; CHECK-DAG: st.h [[R3]], 0($4) 1092 1093 ret void 1094 ; CHECK: .size max_s_v8i16 1095} 1096 1097define void @max_s_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1098 ; CHECK: max_s_v4i32: 1099 1100 %1 = load <4 x i32>, <4 x i32>* %a 1101 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1102 %2 = load <4 x i32>, <4 x i32>* %b 1103 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 1104 %3 = icmp sgt <4 x i32> %1, %2 1105 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2 1106 ; CHECK-DAG: max_s.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1107 store <4 x i32> %4, <4 x i32>* %c 1108 ; CHECK-DAG: st.w [[R3]], 0($4) 1109 1110 ret void 1111 ; CHECK: .size max_s_v4i32 1112} 1113 1114define void @max_s_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1115 ; CHECK: max_s_v2i64: 1116 1117 %1 = load <2 x i64>, <2 x i64>* %a 1118 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1119 %2 = load <2 x i64>, <2 x i64>* %b 1120 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 1121 %3 = icmp sgt <2 x i64> %1, %2 1122 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2 1123 ; CHECK-DAG: max_s.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1124 store <2 x i64> %4, <2 x i64>* %c 1125 ; CHECK-DAG: st.d [[R3]], 0($4) 1126 1127 ret void 1128 ; CHECK: .size max_s_v2i64 1129} 1130 1131define void @max_u_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 1132 ; CHECK: max_u_v16i8: 1133 1134 %1 = load <16 x i8>, <16 x i8>* %a 1135 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1136 %2 = load <16 x i8>, <16 x i8>* %b 1137 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 1138 %3 = icmp ugt <16 x i8> %1, %2 1139 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2 1140 ; CHECK-DAG: max_u.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1141 store <16 x i8> %4, <16 x i8>* %c 1142 ; CHECK-DAG: st.b [[R3]], 0($4) 1143 1144 ret void 1145 ; CHECK: .size max_u_v16i8 1146} 1147 1148define void @max_u_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1149 ; CHECK: max_u_v8i16: 1150 1151 %1 = load <8 x i16>, <8 x i16>* %a 1152 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1153 %2 = load <8 x i16>, <8 x i16>* %b 1154 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 1155 %3 = icmp ugt <8 x i16> %1, %2 1156 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2 1157 ; CHECK-DAG: max_u.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1158 store <8 x i16> %4, <8 x i16>* %c 1159 ; CHECK-DAG: st.h [[R3]], 0($4) 1160 1161 ret void 1162 ; CHECK: .size max_u_v8i16 1163} 1164 1165define void @max_u_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1166 ; CHECK: max_u_v4i32: 1167 1168 %1 = load <4 x i32>, <4 x i32>* %a 1169 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1170 %2 = load <4 x i32>, <4 x i32>* %b 1171 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 1172 %3 = icmp ugt <4 x i32> %1, %2 1173 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2 1174 ; CHECK-DAG: max_u.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1175 store <4 x i32> %4, <4 x i32>* %c 1176 ; CHECK-DAG: st.w [[R3]], 0($4) 1177 1178 ret void 1179 ; CHECK: .size max_u_v4i32 1180} 1181 1182define void @max_u_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1183 ; CHECK: max_u_v2i64: 1184 1185 %1 = load <2 x i64>, <2 x i64>* %a 1186 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1187 %2 = load <2 x i64>, <2 x i64>* %b 1188 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 1189 %3 = icmp ugt <2 x i64> %1, %2 1190 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2 1191 ; CHECK-DAG: max_u.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1192 store <2 x i64> %4, <2 x i64>* %c 1193 ; CHECK-DAG: st.d [[R3]], 0($4) 1194 1195 ret void 1196 ; CHECK: .size max_u_v2i64 1197} 1198 1199define void @max_s_eq_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 1200 ; CHECK: max_s_eq_v16i8: 1201 1202 %1 = load <16 x i8>, <16 x i8>* %a 1203 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1204 %2 = load <16 x i8>, <16 x i8>* %b 1205 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 1206 %3 = icmp sge <16 x i8> %1, %2 1207 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2 1208 ; CHECK-DAG: max_s.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1209 store <16 x i8> %4, <16 x i8>* %c 1210 ; CHECK-DAG: st.b [[R3]], 0($4) 1211 1212 ret void 1213 ; CHECK: .size max_s_eq_v16i8 1214} 1215 1216define void @max_s_eq_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1217 ; CHECK: max_s_eq_v8i16: 1218 1219 %1 = load <8 x i16>, <8 x i16>* %a 1220 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1221 %2 = load <8 x i16>, <8 x i16>* %b 1222 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 1223 %3 = icmp sge <8 x i16> %1, %2 1224 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2 1225 ; CHECK-DAG: max_s.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1226 store <8 x i16> %4, <8 x i16>* %c 1227 ; CHECK-DAG: st.h [[R3]], 0($4) 1228 1229 ret void 1230 ; CHECK: .size max_s_eq_v8i16 1231} 1232 1233define void @max_s_eq_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1234 ; CHECK: max_s_eq_v4i32: 1235 1236 %1 = load <4 x i32>, <4 x i32>* %a 1237 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1238 %2 = load <4 x i32>, <4 x i32>* %b 1239 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 1240 %3 = icmp sge <4 x i32> %1, %2 1241 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2 1242 ; CHECK-DAG: max_s.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1243 store <4 x i32> %4, <4 x i32>* %c 1244 ; CHECK-DAG: st.w [[R3]], 0($4) 1245 1246 ret void 1247 ; CHECK: .size max_s_eq_v4i32 1248} 1249 1250define void @max_s_eq_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1251 ; CHECK: max_s_eq_v2i64: 1252 1253 %1 = load <2 x i64>, <2 x i64>* %a 1254 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1255 %2 = load <2 x i64>, <2 x i64>* %b 1256 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 1257 %3 = icmp sge <2 x i64> %1, %2 1258 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2 1259 ; CHECK-DAG: max_s.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1260 store <2 x i64> %4, <2 x i64>* %c 1261 ; CHECK-DAG: st.d [[R3]], 0($4) 1262 1263 ret void 1264 ; CHECK: .size max_s_eq_v2i64 1265} 1266 1267define void @max_u_eq_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 1268 ; CHECK: max_u_eq_v16i8: 1269 1270 %1 = load <16 x i8>, <16 x i8>* %a 1271 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1272 %2 = load <16 x i8>, <16 x i8>* %b 1273 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 1274 %3 = icmp uge <16 x i8> %1, %2 1275 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2 1276 ; CHECK-DAG: max_u.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1277 store <16 x i8> %4, <16 x i8>* %c 1278 ; CHECK-DAG: st.b [[R3]], 0($4) 1279 1280 ret void 1281 ; CHECK: .size max_u_eq_v16i8 1282} 1283 1284define void @max_u_eq_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1285 ; CHECK: max_u_eq_v8i16: 1286 1287 %1 = load <8 x i16>, <8 x i16>* %a 1288 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1289 %2 = load <8 x i16>, <8 x i16>* %b 1290 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 1291 %3 = icmp uge <8 x i16> %1, %2 1292 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2 1293 ; CHECK-DAG: max_u.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1294 store <8 x i16> %4, <8 x i16>* %c 1295 ; CHECK-DAG: st.h [[R3]], 0($4) 1296 1297 ret void 1298 ; CHECK: .size max_u_eq_v8i16 1299} 1300 1301define void @max_u_eq_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1302 ; CHECK: max_u_eq_v4i32: 1303 1304 %1 = load <4 x i32>, <4 x i32>* %a 1305 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1306 %2 = load <4 x i32>, <4 x i32>* %b 1307 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 1308 %3 = icmp uge <4 x i32> %1, %2 1309 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2 1310 ; CHECK-DAG: max_u.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1311 store <4 x i32> %4, <4 x i32>* %c 1312 ; CHECK-DAG: st.w [[R3]], 0($4) 1313 1314 ret void 1315 ; CHECK: .size max_u_eq_v4i32 1316} 1317 1318define void @max_u_eq_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1319 ; CHECK: max_u_eq_v2i64: 1320 1321 %1 = load <2 x i64>, <2 x i64>* %a 1322 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1323 %2 = load <2 x i64>, <2 x i64>* %b 1324 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 1325 %3 = icmp uge <2 x i64> %1, %2 1326 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2 1327 ; CHECK-DAG: max_u.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1328 store <2 x i64> %4, <2 x i64>* %c 1329 ; CHECK-DAG: st.d [[R3]], 0($4) 1330 1331 ret void 1332 ; CHECK: .size max_u_eq_v2i64 1333} 1334 1335define void @maxi_s_v16i8(<16 x i8>* %c, <16 x i8>* %a) nounwind { 1336 ; CHECK: maxi_s_v16i8: 1337 1338 %1 = load <16 x i8>, <16 x i8>* %a 1339 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1340 %2 = icmp sgt <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1341 %3 = select <16 x i1> %2, <16 x i8> %1, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1342 ; CHECK-DAG: maxi_s.b [[R3:\$w[0-9]+]], [[R1]], 1 1343 store <16 x i8> %3, <16 x i8>* %c 1344 ; CHECK-DAG: st.b [[R3]], 0($4) 1345 1346 ret void 1347 ; CHECK: .size maxi_s_v16i8 1348} 1349 1350define void @maxi_s_v8i16(<8 x i16>* %c, <8 x i16>* %a) nounwind { 1351 ; CHECK: maxi_s_v8i16: 1352 1353 %1 = load <8 x i16>, <8 x i16>* %a 1354 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1355 %2 = icmp sgt <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 1356 %3 = select <8 x i1> %2, <8 x i16> %1, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 1357 ; CHECK-DAG: maxi_s.h [[R3:\$w[0-9]+]], [[R1]], 1 1358 store <8 x i16> %3, <8 x i16>* %c 1359 ; CHECK-DAG: st.h [[R3]], 0($4) 1360 1361 ret void 1362 ; CHECK: .size maxi_s_v8i16 1363} 1364 1365define void @maxi_s_v4i32(<4 x i32>* %c, <4 x i32>* %a) nounwind { 1366 ; CHECK: maxi_s_v4i32: 1367 1368 %1 = load <4 x i32>, <4 x i32>* %a 1369 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1370 %2 = icmp sgt <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1> 1371 %3 = select <4 x i1> %2, <4 x i32> %1, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 1372 ; CHECK-DAG: maxi_s.w [[R3:\$w[0-9]+]], [[R1]], 1 1373 store <4 x i32> %3, <4 x i32>* %c 1374 ; CHECK-DAG: st.w [[R3]], 0($4) 1375 1376 ret void 1377 ; CHECK: .size maxi_s_v4i32 1378} 1379 1380define void @maxi_s_v2i64(<2 x i64>* %c, <2 x i64>* %a) nounwind { 1381 ; CHECK: maxi_s_v2i64: 1382 1383 %1 = load <2 x i64>, <2 x i64>* %a 1384 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1385 %2 = icmp sgt <2 x i64> %1, <i64 1, i64 1> 1386 %3 = select <2 x i1> %2, <2 x i64> %1, <2 x i64> <i64 1, i64 1> 1387 ; CHECK-DAG: maxi_s.d [[R3:\$w[0-9]+]], [[R1]], 1 1388 store <2 x i64> %3, <2 x i64>* %c 1389 ; CHECK-DAG: st.d [[R3]], 0($4) 1390 1391 ret void 1392 ; CHECK: .size maxi_s_v2i64 1393} 1394 1395define void @maxi_u_v16i8(<16 x i8>* %c, <16 x i8>* %a) nounwind { 1396 ; CHECK: maxi_u_v16i8: 1397 1398 %1 = load <16 x i8>, <16 x i8>* %a 1399 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1400 %2 = icmp ugt <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1401 %3 = select <16 x i1> %2, <16 x i8> %1, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1402 ; CHECK-DAG: maxi_u.b [[R3:\$w[0-9]+]], [[R1]], 1 1403 store <16 x i8> %3, <16 x i8>* %c 1404 ; CHECK-DAG: st.b [[R3]], 0($4) 1405 1406 ret void 1407 ; CHECK: .size maxi_u_v16i8 1408} 1409 1410define void @maxi_u_v8i16(<8 x i16>* %c, <8 x i16>* %a) nounwind { 1411 ; CHECK: maxi_u_v8i16: 1412 1413 %1 = load <8 x i16>, <8 x i16>* %a 1414 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1415 %2 = icmp ugt <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 1416 %3 = select <8 x i1> %2, <8 x i16> %1, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 1417 ; CHECK-DAG: maxi_u.h [[R3:\$w[0-9]+]], [[R1]], 1 1418 store <8 x i16> %3, <8 x i16>* %c 1419 ; CHECK-DAG: st.h [[R3]], 0($4) 1420 1421 ret void 1422 ; CHECK: .size maxi_u_v8i16 1423} 1424 1425define void @maxi_u_v4i32(<4 x i32>* %c, <4 x i32>* %a) nounwind { 1426 ; CHECK: maxi_u_v4i32: 1427 1428 %1 = load <4 x i32>, <4 x i32>* %a 1429 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1430 %2 = icmp ugt <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1> 1431 %3 = select <4 x i1> %2, <4 x i32> %1, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 1432 ; CHECK-DAG: maxi_u.w [[R3:\$w[0-9]+]], [[R1]], 1 1433 store <4 x i32> %3, <4 x i32>* %c 1434 ; CHECK-DAG: st.w [[R3]], 0($4) 1435 1436 ret void 1437 ; CHECK: .size maxi_u_v4i32 1438} 1439 1440define void @maxi_u_v2i64(<2 x i64>* %c, <2 x i64>* %a) nounwind { 1441 ; CHECK: maxi_u_v2i64: 1442 1443 %1 = load <2 x i64>, <2 x i64>* %a 1444 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1445 %2 = icmp ugt <2 x i64> %1, <i64 1, i64 1> 1446 %3 = select <2 x i1> %2, <2 x i64> %1, <2 x i64> <i64 1, i64 1> 1447 ; CHECK-DAG: maxi_u.d [[R3:\$w[0-9]+]], [[R1]], 1 1448 store <2 x i64> %3, <2 x i64>* %c 1449 ; CHECK-DAG: st.d [[R3]], 0($4) 1450 1451 ret void 1452 ; CHECK: .size maxi_u_v2i64 1453} 1454 1455define void @maxi_s_eq_v16i8(<16 x i8>* %c, <16 x i8>* %a) nounwind { 1456 ; CHECK: maxi_s_eq_v16i8: 1457 1458 %1 = load <16 x i8>, <16 x i8>* %a 1459 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1460 %2 = icmp sge <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1461 %3 = select <16 x i1> %2, <16 x i8> %1, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1462 ; CHECK-DAG: maxi_s.b [[R3:\$w[0-9]+]], [[R1]], 1 1463 store <16 x i8> %3, <16 x i8>* %c 1464 ; CHECK-DAG: st.b [[R3]], 0($4) 1465 1466 ret void 1467 ; CHECK: .size maxi_s_eq_v16i8 1468} 1469 1470define void @maxi_s_eq_v8i16(<8 x i16>* %c, <8 x i16>* %a) nounwind { 1471 ; CHECK: maxi_s_eq_v8i16: 1472 1473 %1 = load <8 x i16>, <8 x i16>* %a 1474 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1475 %2 = icmp sge <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 1476 %3 = select <8 x i1> %2, <8 x i16> %1, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 1477 ; CHECK-DAG: maxi_s.h [[R3:\$w[0-9]+]], [[R1]], 1 1478 store <8 x i16> %3, <8 x i16>* %c 1479 ; CHECK-DAG: st.h [[R3]], 0($4) 1480 1481 ret void 1482 ; CHECK: .size maxi_s_eq_v8i16 1483} 1484 1485define void @maxi_s_eq_v4i32(<4 x i32>* %c, <4 x i32>* %a) nounwind { 1486 ; CHECK: maxi_s_eq_v4i32: 1487 1488 %1 = load <4 x i32>, <4 x i32>* %a 1489 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1490 %2 = icmp sge <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1> 1491 %3 = select <4 x i1> %2, <4 x i32> %1, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 1492 ; CHECK-DAG: maxi_s.w [[R3:\$w[0-9]+]], [[R1]], 1 1493 store <4 x i32> %3, <4 x i32>* %c 1494 ; CHECK-DAG: st.w [[R3]], 0($4) 1495 1496 ret void 1497 ; CHECK: .size maxi_s_eq_v4i32 1498} 1499 1500define void @maxi_s_eq_v2i64(<2 x i64>* %c, <2 x i64>* %a) nounwind { 1501 ; CHECK: maxi_s_eq_v2i64: 1502 1503 %1 = load <2 x i64>, <2 x i64>* %a 1504 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1505 %2 = icmp sge <2 x i64> %1, <i64 1, i64 1> 1506 %3 = select <2 x i1> %2, <2 x i64> %1, <2 x i64> <i64 1, i64 1> 1507 ; CHECK-DAG: maxi_s.d [[R3:\$w[0-9]+]], [[R1]], 1 1508 store <2 x i64> %3, <2 x i64>* %c 1509 ; CHECK-DAG: st.d [[R3]], 0($4) 1510 1511 ret void 1512 ; CHECK: .size maxi_s_eq_v2i64 1513} 1514 1515define void @maxi_u_eq_v16i8(<16 x i8>* %c, <16 x i8>* %a) nounwind { 1516 ; CHECK: maxi_u_eq_v16i8: 1517 1518 %1 = load <16 x i8>, <16 x i8>* %a 1519 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1520 %2 = icmp uge <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1521 %3 = select <16 x i1> %2, <16 x i8> %1, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1522 ; CHECK-DAG: maxi_u.b [[R3:\$w[0-9]+]], [[R1]], 1 1523 store <16 x i8> %3, <16 x i8>* %c 1524 ; CHECK-DAG: st.b [[R3]], 0($4) 1525 1526 ret void 1527 ; CHECK: .size maxi_u_eq_v16i8 1528} 1529 1530define void @maxi_u_eq_v8i16(<8 x i16>* %c, <8 x i16>* %a) nounwind { 1531 ; CHECK: maxi_u_eq_v8i16: 1532 1533 %1 = load <8 x i16>, <8 x i16>* %a 1534 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1535 %2 = icmp uge <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 1536 %3 = select <8 x i1> %2, <8 x i16> %1, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 1537 ; CHECK-DAG: maxi_u.h [[R3:\$w[0-9]+]], [[R1]], 1 1538 store <8 x i16> %3, <8 x i16>* %c 1539 ; CHECK-DAG: st.h [[R3]], 0($4) 1540 1541 ret void 1542 ; CHECK: .size maxi_u_eq_v8i16 1543} 1544 1545define void @maxi_u_eq_v4i32(<4 x i32>* %c, <4 x i32>* %a) nounwind { 1546 ; CHECK: maxi_u_eq_v4i32: 1547 1548 %1 = load <4 x i32>, <4 x i32>* %a 1549 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1550 %2 = icmp uge <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1> 1551 %3 = select <4 x i1> %2, <4 x i32> %1, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 1552 ; CHECK-DAG: maxi_u.w [[R3:\$w[0-9]+]], [[R1]], 1 1553 store <4 x i32> %3, <4 x i32>* %c 1554 ; CHECK-DAG: st.w [[R3]], 0($4) 1555 1556 ret void 1557 ; CHECK: .size maxi_u_eq_v4i32 1558} 1559 1560define void @maxi_u_eq_v2i64(<2 x i64>* %c, <2 x i64>* %a) nounwind { 1561 ; CHECK: maxi_u_eq_v2i64: 1562 1563 %1 = load <2 x i64>, <2 x i64>* %a 1564 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1565 %2 = icmp uge <2 x i64> %1, <i64 1, i64 1> 1566 %3 = select <2 x i1> %2, <2 x i64> %1, <2 x i64> <i64 1, i64 1> 1567 ; CHECK-DAG: maxi_u.d [[R3:\$w[0-9]+]], [[R1]], 1 1568 store <2 x i64> %3, <2 x i64>* %c 1569 ; CHECK-DAG: st.d [[R3]], 0($4) 1570 1571 ret void 1572 ; CHECK: .size maxi_u_eq_v2i64 1573} 1574 1575define void @min_s_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 1576 ; CHECK: min_s_v16i8: 1577 1578 %1 = load <16 x i8>, <16 x i8>* %a 1579 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1580 %2 = load <16 x i8>, <16 x i8>* %b 1581 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 1582 %3 = icmp sle <16 x i8> %1, %2 1583 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2 1584 ; CHECK-DAG: min_s.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1585 store <16 x i8> %4, <16 x i8>* %c 1586 ; CHECK-DAG: st.b [[R3]], 0($4) 1587 1588 ret void 1589 ; CHECK: .size min_s_v16i8 1590} 1591 1592define void @min_s_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1593 ; CHECK: min_s_v8i16: 1594 1595 %1 = load <8 x i16>, <8 x i16>* %a 1596 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1597 %2 = load <8 x i16>, <8 x i16>* %b 1598 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 1599 %3 = icmp slt <8 x i16> %1, %2 1600 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2 1601 ; CHECK-DAG: min_s.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1602 store <8 x i16> %4, <8 x i16>* %c 1603 ; CHECK-DAG: st.h [[R3]], 0($4) 1604 1605 ret void 1606 ; CHECK: .size min_s_v8i16 1607} 1608 1609define void @min_s_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1610 ; CHECK: min_s_v4i32: 1611 1612 %1 = load <4 x i32>, <4 x i32>* %a 1613 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1614 %2 = load <4 x i32>, <4 x i32>* %b 1615 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 1616 %3 = icmp slt <4 x i32> %1, %2 1617 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2 1618 ; CHECK-DAG: min_s.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1619 store <4 x i32> %4, <4 x i32>* %c 1620 ; CHECK-DAG: st.w [[R3]], 0($4) 1621 1622 ret void 1623 ; CHECK: .size min_s_v4i32 1624} 1625 1626define void @min_s_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1627 ; CHECK: min_s_v2i64: 1628 1629 %1 = load <2 x i64>, <2 x i64>* %a 1630 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1631 %2 = load <2 x i64>, <2 x i64>* %b 1632 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 1633 %3 = icmp slt <2 x i64> %1, %2 1634 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2 1635 ; CHECK-DAG: min_s.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1636 store <2 x i64> %4, <2 x i64>* %c 1637 ; CHECK-DAG: st.d [[R3]], 0($4) 1638 1639 ret void 1640 ; CHECK: .size min_s_v2i64 1641} 1642 1643define void @min_u_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 1644 ; CHECK: min_u_v16i8: 1645 1646 %1 = load <16 x i8>, <16 x i8>* %a 1647 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1648 %2 = load <16 x i8>, <16 x i8>* %b 1649 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 1650 %3 = icmp ult <16 x i8> %1, %2 1651 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2 1652 ; CHECK-DAG: min_u.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1653 store <16 x i8> %4, <16 x i8>* %c 1654 ; CHECK-DAG: st.b [[R3]], 0($4) 1655 1656 ret void 1657 ; CHECK: .size min_u_v16i8 1658} 1659 1660define void @min_u_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1661 ; CHECK: min_u_v8i16: 1662 1663 %1 = load <8 x i16>, <8 x i16>* %a 1664 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1665 %2 = load <8 x i16>, <8 x i16>* %b 1666 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 1667 %3 = icmp ult <8 x i16> %1, %2 1668 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2 1669 ; CHECK-DAG: min_u.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1670 store <8 x i16> %4, <8 x i16>* %c 1671 ; CHECK-DAG: st.h [[R3]], 0($4) 1672 1673 ret void 1674 ; CHECK: .size min_u_v8i16 1675} 1676 1677define void @min_u_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1678 ; CHECK: min_u_v4i32: 1679 1680 %1 = load <4 x i32>, <4 x i32>* %a 1681 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1682 %2 = load <4 x i32>, <4 x i32>* %b 1683 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 1684 %3 = icmp ult <4 x i32> %1, %2 1685 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2 1686 ; CHECK-DAG: min_u.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1687 store <4 x i32> %4, <4 x i32>* %c 1688 ; CHECK-DAG: st.w [[R3]], 0($4) 1689 1690 ret void 1691 ; CHECK: .size min_u_v4i32 1692} 1693 1694define void @min_u_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1695 ; CHECK: min_u_v2i64: 1696 1697 %1 = load <2 x i64>, <2 x i64>* %a 1698 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1699 %2 = load <2 x i64>, <2 x i64>* %b 1700 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 1701 %3 = icmp ult <2 x i64> %1, %2 1702 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2 1703 ; CHECK-DAG: min_u.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1704 store <2 x i64> %4, <2 x i64>* %c 1705 ; CHECK-DAG: st.d [[R3]], 0($4) 1706 1707 ret void 1708 ; CHECK: .size min_u_v2i64 1709} 1710 1711define void @min_s_eq_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 1712 ; CHECK: min_s_eq_v16i8: 1713 1714 %1 = load <16 x i8>, <16 x i8>* %a 1715 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1716 %2 = load <16 x i8>, <16 x i8>* %b 1717 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 1718 %3 = icmp sle <16 x i8> %1, %2 1719 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2 1720 ; CHECK-DAG: min_s.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1721 store <16 x i8> %4, <16 x i8>* %c 1722 ; CHECK-DAG: st.b [[R3]], 0($4) 1723 1724 ret void 1725 ; CHECK: .size min_s_eq_v16i8 1726} 1727 1728define void @min_s_eq_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1729 ; CHECK: min_s_eq_v8i16: 1730 1731 %1 = load <8 x i16>, <8 x i16>* %a 1732 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1733 %2 = load <8 x i16>, <8 x i16>* %b 1734 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 1735 %3 = icmp sle <8 x i16> %1, %2 1736 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2 1737 ; CHECK-DAG: min_s.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1738 store <8 x i16> %4, <8 x i16>* %c 1739 ; CHECK-DAG: st.h [[R3]], 0($4) 1740 1741 ret void 1742 ; CHECK: .size min_s_eq_v8i16 1743} 1744 1745define void @min_s_eq_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1746 ; CHECK: min_s_eq_v4i32: 1747 1748 %1 = load <4 x i32>, <4 x i32>* %a 1749 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1750 %2 = load <4 x i32>, <4 x i32>* %b 1751 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 1752 %3 = icmp sle <4 x i32> %1, %2 1753 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2 1754 ; CHECK-DAG: min_s.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1755 store <4 x i32> %4, <4 x i32>* %c 1756 ; CHECK-DAG: st.w [[R3]], 0($4) 1757 1758 ret void 1759 ; CHECK: .size min_s_eq_v4i32 1760} 1761 1762define void @min_s_eq_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1763 ; CHECK: min_s_eq_v2i64: 1764 1765 %1 = load <2 x i64>, <2 x i64>* %a 1766 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1767 %2 = load <2 x i64>, <2 x i64>* %b 1768 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 1769 %3 = icmp sle <2 x i64> %1, %2 1770 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2 1771 ; CHECK-DAG: min_s.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1772 store <2 x i64> %4, <2 x i64>* %c 1773 ; CHECK-DAG: st.d [[R3]], 0($4) 1774 1775 ret void 1776 ; CHECK: .size min_s_eq_v2i64 1777} 1778 1779define void @min_u_eq_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 1780 ; CHECK: min_u_eq_v16i8: 1781 1782 %1 = load <16 x i8>, <16 x i8>* %a 1783 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1784 %2 = load <16 x i8>, <16 x i8>* %b 1785 ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 1786 %3 = icmp ule <16 x i8> %1, %2 1787 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2 1788 ; CHECK-DAG: min_u.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1789 store <16 x i8> %4, <16 x i8>* %c 1790 ; CHECK-DAG: st.b [[R3]], 0($4) 1791 1792 ret void 1793 ; CHECK: .size min_u_eq_v16i8 1794} 1795 1796define void @min_u_eq_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1797 ; CHECK: min_u_eq_v8i16: 1798 1799 %1 = load <8 x i16>, <8 x i16>* %a 1800 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1801 %2 = load <8 x i16>, <8 x i16>* %b 1802 ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 1803 %3 = icmp ule <8 x i16> %1, %2 1804 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2 1805 ; CHECK-DAG: min_u.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1806 store <8 x i16> %4, <8 x i16>* %c 1807 ; CHECK-DAG: st.h [[R3]], 0($4) 1808 1809 ret void 1810 ; CHECK: .size min_u_eq_v8i16 1811} 1812 1813define void @min_u_eq_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1814 ; CHECK: min_u_eq_v4i32: 1815 1816 %1 = load <4 x i32>, <4 x i32>* %a 1817 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1818 %2 = load <4 x i32>, <4 x i32>* %b 1819 ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 1820 %3 = icmp ule <4 x i32> %1, %2 1821 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2 1822 ; CHECK-DAG: min_u.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1823 store <4 x i32> %4, <4 x i32>* %c 1824 ; CHECK-DAG: st.w [[R3]], 0($4) 1825 1826 ret void 1827 ; CHECK: .size min_u_eq_v4i32 1828} 1829 1830define void @min_u_eq_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1831 ; CHECK: min_u_eq_v2i64: 1832 1833 %1 = load <2 x i64>, <2 x i64>* %a 1834 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1835 %2 = load <2 x i64>, <2 x i64>* %b 1836 ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 1837 %3 = icmp ule <2 x i64> %1, %2 1838 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2 1839 ; CHECK-DAG: min_u.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1840 store <2 x i64> %4, <2 x i64>* %c 1841 ; CHECK-DAG: st.d [[R3]], 0($4) 1842 1843 ret void 1844 ; CHECK: .size min_u_eq_v2i64 1845} 1846 1847define void @mini_s_v16i8(<16 x i8>* %c, <16 x i8>* %a) nounwind { 1848 ; CHECK: mini_s_v16i8: 1849 1850 %1 = load <16 x i8>, <16 x i8>* %a 1851 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1852 %2 = icmp slt <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1853 %3 = select <16 x i1> %2, <16 x i8> %1, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1854 ; CHECK-DAG: mini_s.b [[R3:\$w[0-9]+]], [[R1]], 1 1855 store <16 x i8> %3, <16 x i8>* %c 1856 ; CHECK-DAG: st.b [[R3]], 0($4) 1857 1858 ret void 1859 ; CHECK: .size mini_s_v16i8 1860} 1861 1862define void @mini_s_v8i16(<8 x i16>* %c, <8 x i16>* %a) nounwind { 1863 ; CHECK: mini_s_v8i16: 1864 1865 %1 = load <8 x i16>, <8 x i16>* %a 1866 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1867 %2 = icmp slt <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 1868 %3 = select <8 x i1> %2, <8 x i16> %1, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 1869 ; CHECK-DAG: mini_s.h [[R3:\$w[0-9]+]], [[R1]], 1 1870 store <8 x i16> %3, <8 x i16>* %c 1871 ; CHECK-DAG: st.h [[R3]], 0($4) 1872 1873 ret void 1874 ; CHECK: .size mini_s_v8i16 1875} 1876 1877define void @mini_s_v4i32(<4 x i32>* %c, <4 x i32>* %a) nounwind { 1878 ; CHECK: mini_s_v4i32: 1879 1880 %1 = load <4 x i32>, <4 x i32>* %a 1881 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1882 %2 = icmp slt <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1> 1883 %3 = select <4 x i1> %2, <4 x i32> %1, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 1884 ; CHECK-DAG: mini_s.w [[R3:\$w[0-9]+]], [[R1]], 1 1885 store <4 x i32> %3, <4 x i32>* %c 1886 ; CHECK-DAG: st.w [[R3]], 0($4) 1887 1888 ret void 1889 ; CHECK: .size mini_s_v4i32 1890} 1891 1892define void @mini_s_v2i64(<2 x i64>* %c, <2 x i64>* %a) nounwind { 1893 ; CHECK: mini_s_v2i64: 1894 1895 %1 = load <2 x i64>, <2 x i64>* %a 1896 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1897 %2 = icmp slt <2 x i64> %1, <i64 1, i64 1> 1898 %3 = select <2 x i1> %2, <2 x i64> %1, <2 x i64> <i64 1, i64 1> 1899 ; CHECK-DAG: mini_s.d [[R3:\$w[0-9]+]], [[R1]], 1 1900 store <2 x i64> %3, <2 x i64>* %c 1901 ; CHECK-DAG: st.d [[R3]], 0($4) 1902 1903 ret void 1904 ; CHECK: .size mini_s_v2i64 1905} 1906 1907define void @mini_u_v16i8(<16 x i8>* %c, <16 x i8>* %a) nounwind { 1908 ; CHECK: mini_u_v16i8: 1909 1910 %1 = load <16 x i8>, <16 x i8>* %a 1911 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1912 %2 = icmp ult <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1913 %3 = select <16 x i1> %2, <16 x i8> %1, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1914 ; CHECK-DAG: mini_u.b [[R3:\$w[0-9]+]], [[R1]], 1 1915 store <16 x i8> %3, <16 x i8>* %c 1916 ; CHECK-DAG: st.b [[R3]], 0($4) 1917 1918 ret void 1919 ; CHECK: .size mini_u_v16i8 1920} 1921 1922define void @mini_u_v8i16(<8 x i16>* %c, <8 x i16>* %a) nounwind { 1923 ; CHECK: mini_u_v8i16: 1924 1925 %1 = load <8 x i16>, <8 x i16>* %a 1926 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1927 %2 = icmp ult <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 1928 %3 = select <8 x i1> %2, <8 x i16> %1, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 1929 ; CHECK-DAG: mini_u.h [[R3:\$w[0-9]+]], [[R1]], 1 1930 store <8 x i16> %3, <8 x i16>* %c 1931 ; CHECK-DAG: st.h [[R3]], 0($4) 1932 1933 ret void 1934 ; CHECK: .size mini_u_v8i16 1935} 1936 1937define void @mini_u_v4i32(<4 x i32>* %c, <4 x i32>* %a) nounwind { 1938 ; CHECK: mini_u_v4i32: 1939 1940 %1 = load <4 x i32>, <4 x i32>* %a 1941 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1942 %2 = icmp ult <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1> 1943 %3 = select <4 x i1> %2, <4 x i32> %1, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 1944 ; CHECK-DAG: mini_u.w [[R3:\$w[0-9]+]], [[R1]], 1 1945 store <4 x i32> %3, <4 x i32>* %c 1946 ; CHECK-DAG: st.w [[R3]], 0($4) 1947 1948 ret void 1949 ; CHECK: .size mini_u_v4i32 1950} 1951 1952define void @mini_u_v2i64(<2 x i64>* %c, <2 x i64>* %a) nounwind { 1953 ; CHECK: mini_u_v2i64: 1954 1955 %1 = load <2 x i64>, <2 x i64>* %a 1956 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1957 %2 = icmp ult <2 x i64> %1, <i64 1, i64 1> 1958 %3 = select <2 x i1> %2, <2 x i64> %1, <2 x i64> <i64 1, i64 1> 1959 ; CHECK-DAG: mini_u.d [[R3:\$w[0-9]+]], [[R1]], 1 1960 store <2 x i64> %3, <2 x i64>* %c 1961 ; CHECK-DAG: st.d [[R3]], 0($4) 1962 1963 ret void 1964 ; CHECK: .size mini_u_v2i64 1965} 1966 1967define void @mini_s_eq_v16i8(<16 x i8>* %c, <16 x i8>* %a) nounwind { 1968 ; CHECK: mini_s_eq_v16i8: 1969 1970 %1 = load <16 x i8>, <16 x i8>* %a 1971 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1972 %2 = icmp sle <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1973 %3 = select <16 x i1> %2, <16 x i8> %1, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 1974 ; CHECK-DAG: mini_s.b [[R3:\$w[0-9]+]], [[R1]], 1 1975 store <16 x i8> %3, <16 x i8>* %c 1976 ; CHECK-DAG: st.b [[R3]], 0($4) 1977 1978 ret void 1979 ; CHECK: .size mini_s_eq_v16i8 1980} 1981 1982define void @mini_s_eq_v8i16(<8 x i16>* %c, <8 x i16>* %a) nounwind { 1983 ; CHECK: mini_s_eq_v8i16: 1984 1985 %1 = load <8 x i16>, <8 x i16>* %a 1986 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1987 %2 = icmp sle <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 1988 %3 = select <8 x i1> %2, <8 x i16> %1, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 1989 ; CHECK-DAG: mini_s.h [[R3:\$w[0-9]+]], [[R1]], 1 1990 store <8 x i16> %3, <8 x i16>* %c 1991 ; CHECK-DAG: st.h [[R3]], 0($4) 1992 1993 ret void 1994 ; CHECK: .size mini_s_eq_v8i16 1995} 1996 1997define void @mini_s_eq_v4i32(<4 x i32>* %c, <4 x i32>* %a) nounwind { 1998 ; CHECK: mini_s_eq_v4i32: 1999 2000 %1 = load <4 x i32>, <4 x i32>* %a 2001 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 2002 %2 = icmp sle <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1> 2003 %3 = select <4 x i1> %2, <4 x i32> %1, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 2004 ; CHECK-DAG: mini_s.w [[R3:\$w[0-9]+]], [[R1]], 1 2005 store <4 x i32> %3, <4 x i32>* %c 2006 ; CHECK-DAG: st.w [[R3]], 0($4) 2007 2008 ret void 2009 ; CHECK: .size mini_s_eq_v4i32 2010} 2011 2012define void @mini_s_eq_v2i64(<2 x i64>* %c, <2 x i64>* %a) nounwind { 2013 ; CHECK: mini_s_eq_v2i64: 2014 2015 %1 = load <2 x i64>, <2 x i64>* %a 2016 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 2017 %2 = icmp sle <2 x i64> %1, <i64 1, i64 1> 2018 %3 = select <2 x i1> %2, <2 x i64> %1, <2 x i64> <i64 1, i64 1> 2019 ; CHECK-DAG: mini_s.d [[R3:\$w[0-9]+]], [[R1]], 1 2020 store <2 x i64> %3, <2 x i64>* %c 2021 ; CHECK-DAG: st.d [[R3]], 0($4) 2022 2023 ret void 2024 ; CHECK: .size mini_s_eq_v2i64 2025} 2026 2027define void @mini_u_eq_v16i8(<16 x i8>* %c, <16 x i8>* %a) nounwind { 2028 ; CHECK: mini_u_eq_v16i8: 2029 2030 %1 = load <16 x i8>, <16 x i8>* %a 2031 ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 2032 %2 = icmp ule <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 2033 %3 = select <16 x i1> %2, <16 x i8> %1, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 2034 ; CHECK-DAG: mini_u.b [[R3:\$w[0-9]+]], [[R1]], 1 2035 store <16 x i8> %3, <16 x i8>* %c 2036 ; CHECK-DAG: st.b [[R3]], 0($4) 2037 2038 ret void 2039 ; CHECK: .size mini_u_eq_v16i8 2040} 2041 2042define void @mini_u_eq_v8i16(<8 x i16>* %c, <8 x i16>* %a) nounwind { 2043 ; CHECK: mini_u_eq_v8i16: 2044 2045 %1 = load <8 x i16>, <8 x i16>* %a 2046 ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 2047 %2 = icmp ule <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 2048 %3 = select <8 x i1> %2, <8 x i16> %1, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 2049 ; CHECK-DAG: mini_u.h [[R3:\$w[0-9]+]], [[R1]], 1 2050 store <8 x i16> %3, <8 x i16>* %c 2051 ; CHECK-DAG: st.h [[R3]], 0($4) 2052 2053 ret void 2054 ; CHECK: .size mini_u_eq_v8i16 2055} 2056 2057define void @mini_u_eq_v4i32(<4 x i32>* %c, <4 x i32>* %a) nounwind { 2058 ; CHECK: mini_u_eq_v4i32: 2059 2060 %1 = load <4 x i32>, <4 x i32>* %a 2061 ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 2062 %2 = icmp ule <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1> 2063 %3 = select <4 x i1> %2, <4 x i32> %1, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 2064 ; CHECK-DAG: mini_u.w [[R3:\$w[0-9]+]], [[R1]], 1 2065 store <4 x i32> %3, <4 x i32>* %c 2066 ; CHECK-DAG: st.w [[R3]], 0($4) 2067 2068 ret void 2069 ; CHECK: .size mini_u_eq_v4i32 2070} 2071 2072define void @mini_u_eq_v2i64(<2 x i64>* %c, <2 x i64>* %a) nounwind { 2073 ; CHECK: mini_u_eq_v2i64: 2074 2075 %1 = load <2 x i64>, <2 x i64>* %a 2076 ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 2077 %2 = icmp ule <2 x i64> %1, <i64 1, i64 1> 2078 %3 = select <2 x i1> %2, <2 x i64> %1, <2 x i64> <i64 1, i64 1> 2079 ; CHECK-DAG: mini_u.d [[R3:\$w[0-9]+]], [[R1]], 1 2080 store <2 x i64> %3, <2 x i64>* %c 2081 ; CHECK-DAG: st.d [[R3]], 0($4) 2082 2083 ret void 2084 ; CHECK: .size mini_u_eq_v2i64 2085} 2086