1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2 2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE4 3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1 4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2 5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=knl | FileCheck %s --check-prefix=AVX --check-prefix=AVX512F 6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=skx | FileCheck %s --check-prefix=AVX --check-prefix=AVX512F --check-prefix=AVX512BW --check-prefix=AVX512VL 7 8 define <16 x i8> @test1(<16 x i8> %a, <16 x i8> %b) { 9 ; SSE2-LABEL: test1: 10 ; SSE2: # BB#0: # %entry 11 ; SSE2-NEXT: movdqa %xmm1, %xmm2 12 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm2 13 ; SSE2-NEXT: pand %xmm2, %xmm0 14 ; SSE2-NEXT: pandn %xmm1, %xmm2 15 ; SSE2-NEXT: por %xmm2, %xmm0 16 ; SSE2-NEXT: retq 17 ; 18 ; SSE4-LABEL: test1: 19 ; SSE4: # BB#0: # %entry 20 ; SSE4-NEXT: pminsb %xmm1, %xmm0 21 ; SSE4-NEXT: retq 22 ; 23 ; AVX-LABEL: test1: 24 ; AVX: # BB#0: # %entry 25 ; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0 26 ; AVX-NEXT: retq 27 entry: 28 %cmp = icmp slt <16 x i8> %a, %b 29 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 30 ret <16 x i8> %sel 31 } 32 33 define <16 x i8> @test2(<16 x i8> %a, <16 x i8> %b) { 34 ; SSE2-LABEL: test2: 35 ; SSE2: # BB#0: # %entry 36 ; SSE2-NEXT: movdqa %xmm0, %xmm2 37 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 38 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm3 39 ; SSE2-NEXT: pxor %xmm2, %xmm3 40 ; SSE2-NEXT: pandn %xmm0, %xmm2 41 ; SSE2-NEXT: pandn %xmm1, %xmm3 42 ; SSE2-NEXT: por %xmm3, %xmm2 43 ; SSE2-NEXT: movdqa %xmm2, %xmm0 44 ; SSE2-NEXT: retq 45 ; 46 ; SSE4-LABEL: test2: 47 ; SSE4: # BB#0: # %entry 48 ; SSE4-NEXT: pminsb %xmm1, %xmm0 49 ; SSE4-NEXT: retq 50 ; 51 ; AVX-LABEL: test2: 52 ; AVX: # BB#0: # %entry 53 ; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0 54 ; AVX-NEXT: retq 55 entry: 56 %cmp = icmp sle <16 x i8> %a, %b 57 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 58 ret <16 x i8> %sel 59 } 60 61 define <16 x i8> @test3(<16 x i8> %a, <16 x i8> %b) { 62 ; SSE2-LABEL: test3: 63 ; SSE2: # BB#0: # %entry 64 ; SSE2-NEXT: movdqa %xmm0, %xmm2 65 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 66 ; SSE2-NEXT: pand %xmm2, %xmm0 67 ; SSE2-NEXT: pandn %xmm1, %xmm2 68 ; SSE2-NEXT: por %xmm0, %xmm2 69 ; SSE2-NEXT: movdqa %xmm2, %xmm0 70 ; SSE2-NEXT: retq 71 ; 72 ; SSE4-LABEL: test3: 73 ; SSE4: # BB#0: # %entry 74 ; SSE4-NEXT: pmaxsb %xmm1, %xmm0 75 ; SSE4-NEXT: retq 76 ; 77 ; AVX-LABEL: test3: 78 ; AVX: # BB#0: # %entry 79 ; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 80 ; AVX-NEXT: retq 81 entry: 82 %cmp = icmp sgt <16 x i8> %a, %b 83 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 84 ret <16 x i8> %sel 85 } 86 87 define <16 x i8> @test4(<16 x i8> %a, <16 x i8> %b) { 88 ; SSE2-LABEL: test4: 89 ; SSE2: # BB#0: # %entry 90 ; SSE2-NEXT: movdqa %xmm1, %xmm3 91 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm3 92 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 93 ; SSE2-NEXT: pxor %xmm3, %xmm2 94 ; SSE2-NEXT: pandn %xmm0, %xmm3 95 ; SSE2-NEXT: pandn %xmm1, %xmm2 96 ; SSE2-NEXT: por %xmm3, %xmm2 97 ; SSE2-NEXT: movdqa %xmm2, %xmm0 98 ; SSE2-NEXT: retq 99 ; 100 ; SSE4-LABEL: test4: 101 ; SSE4: # BB#0: # %entry 102 ; SSE4-NEXT: pmaxsb %xmm1, %xmm0 103 ; SSE4-NEXT: retq 104 ; 105 ; AVX-LABEL: test4: 106 ; AVX: # BB#0: # %entry 107 ; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 108 ; AVX-NEXT: retq 109 entry: 110 %cmp = icmp sge <16 x i8> %a, %b 111 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 112 ret <16 x i8> %sel 113 } 114 115 define <16 x i8> @test5(<16 x i8> %a, <16 x i8> %b) { 116 ; SSE-LABEL: test5: 117 ; SSE: # BB#0: # %entry 118 ; SSE-NEXT: pminub %xmm1, %xmm0 119 ; SSE-NEXT: retq 120 ; 121 ; AVX-LABEL: test5: 122 ; AVX: # BB#0: # %entry 123 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 124 ; AVX-NEXT: retq 125 entry: 126 %cmp = icmp ult <16 x i8> %a, %b 127 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 128 ret <16 x i8> %sel 129 } 130 131 define <16 x i8> @test6(<16 x i8> %a, <16 x i8> %b) { 132 ; SSE-LABEL: test6: 133 ; SSE: # BB#0: # %entry 134 ; SSE-NEXT: pminub %xmm1, %xmm0 135 ; SSE-NEXT: retq 136 ; 137 ; AVX-LABEL: test6: 138 ; AVX: # BB#0: # %entry 139 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 140 ; AVX-NEXT: retq 141 entry: 142 %cmp = icmp ule <16 x i8> %a, %b 143 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 144 ret <16 x i8> %sel 145 } 146 147 define <16 x i8> @test7(<16 x i8> %a, <16 x i8> %b) { 148 ; SSE-LABEL: test7: 149 ; SSE: # BB#0: # %entry 150 ; SSE-NEXT: pmaxub %xmm1, %xmm0 151 ; SSE-NEXT: retq 152 ; 153 ; AVX-LABEL: test7: 154 ; AVX: # BB#0: # %entry 155 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 156 ; AVX-NEXT: retq 157 entry: 158 %cmp = icmp ugt <16 x i8> %a, %b 159 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 160 ret <16 x i8> %sel 161 } 162 163 define <16 x i8> @test8(<16 x i8> %a, <16 x i8> %b) { 164 ; SSE-LABEL: test8: 165 ; SSE: # BB#0: # %entry 166 ; SSE-NEXT: pmaxub %xmm1, %xmm0 167 ; SSE-NEXT: retq 168 ; 169 ; AVX-LABEL: test8: 170 ; AVX: # BB#0: # %entry 171 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 172 ; AVX-NEXT: retq 173 entry: 174 %cmp = icmp uge <16 x i8> %a, %b 175 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 176 ret <16 x i8> %sel 177 } 178 179 define <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) { 180 ; SSE-LABEL: test9: 181 ; SSE: # BB#0: # %entry 182 ; SSE-NEXT: pminsw %xmm1, %xmm0 183 ; SSE-NEXT: retq 184 ; 185 ; AVX-LABEL: test9: 186 ; AVX: # BB#0: # %entry 187 ; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 188 ; AVX-NEXT: retq 189 entry: 190 %cmp = icmp slt <8 x i16> %a, %b 191 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 192 ret <8 x i16> %sel 193 } 194 195 define <8 x i16> @test10(<8 x i16> %a, <8 x i16> %b) { 196 ; SSE-LABEL: test10: 197 ; SSE: # BB#0: # %entry 198 ; SSE-NEXT: pminsw %xmm1, %xmm0 199 ; SSE-NEXT: retq 200 ; 201 ; AVX-LABEL: test10: 202 ; AVX: # BB#0: # %entry 203 ; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 204 ; AVX-NEXT: retq 205 entry: 206 %cmp = icmp sle <8 x i16> %a, %b 207 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 208 ret <8 x i16> %sel 209 } 210 211 define <8 x i16> @test11(<8 x i16> %a, <8 x i16> %b) { 212 ; SSE-LABEL: test11: 213 ; SSE: # BB#0: # %entry 214 ; SSE-NEXT: pmaxsw %xmm1, %xmm0 215 ; SSE-NEXT: retq 216 ; 217 ; AVX-LABEL: test11: 218 ; AVX: # BB#0: # %entry 219 ; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 220 ; AVX-NEXT: retq 221 entry: 222 %cmp = icmp sgt <8 x i16> %a, %b 223 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 224 ret <8 x i16> %sel 225 } 226 227 define <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) { 228 ; SSE-LABEL: test12: 229 ; SSE: # BB#0: # %entry 230 ; SSE-NEXT: pmaxsw %xmm1, %xmm0 231 ; SSE-NEXT: retq 232 ; 233 ; AVX-LABEL: test12: 234 ; AVX: # BB#0: # %entry 235 ; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 236 ; AVX-NEXT: retq 237 entry: 238 %cmp = icmp sge <8 x i16> %a, %b 239 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 240 ret <8 x i16> %sel 241 } 242 243 define <8 x i16> @test13(<8 x i16> %a, <8 x i16> %b) { 244 ; SSE2-LABEL: test13: 245 ; SSE2: # BB#0: # %entry 246 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 247 ; SSE2-NEXT: movdqa %xmm0, %xmm3 248 ; SSE2-NEXT: pxor %xmm2, %xmm3 249 ; SSE2-NEXT: pxor %xmm1, %xmm2 250 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm2 251 ; SSE2-NEXT: pand %xmm2, %xmm0 252 ; SSE2-NEXT: pandn %xmm1, %xmm2 253 ; SSE2-NEXT: por %xmm2, %xmm0 254 ; SSE2-NEXT: retq 255 ; 256 ; SSE4-LABEL: test13: 257 ; SSE4: # BB#0: # %entry 258 ; SSE4-NEXT: pminuw %xmm1, %xmm0 259 ; SSE4-NEXT: retq 260 ; 261 ; AVX-LABEL: test13: 262 ; AVX: # BB#0: # %entry 263 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 264 ; AVX-NEXT: retq 265 entry: 266 %cmp = icmp ult <8 x i16> %a, %b 267 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 268 ret <8 x i16> %sel 269 } 270 271 define <8 x i16> @test14(<8 x i16> %a, <8 x i16> %b) { 272 ; SSE2-LABEL: test14: 273 ; SSE2: # BB#0: # %entry 274 ; SSE2-NEXT: movdqa %xmm0, %xmm2 275 ; SSE2-NEXT: psubusw %xmm1, %xmm2 276 ; SSE2-NEXT: pxor %xmm3, %xmm3 277 ; SSE2-NEXT: pcmpeqw %xmm2, %xmm3 278 ; SSE2-NEXT: pand %xmm3, %xmm0 279 ; SSE2-NEXT: pandn %xmm1, %xmm3 280 ; SSE2-NEXT: por %xmm3, %xmm0 281 ; SSE2-NEXT: retq 282 ; 283 ; SSE4-LABEL: test14: 284 ; SSE4: # BB#0: # %entry 285 ; SSE4-NEXT: pminuw %xmm1, %xmm0 286 ; SSE4-NEXT: retq 287 ; 288 ; AVX-LABEL: test14: 289 ; AVX: # BB#0: # %entry 290 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 291 ; AVX-NEXT: retq 292 entry: 293 %cmp = icmp ule <8 x i16> %a, %b 294 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 295 ret <8 x i16> %sel 296 } 297 298 define <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) { 299 ; SSE2-LABEL: test15: 300 ; SSE2: # BB#0: # %entry 301 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 302 ; SSE2-NEXT: movdqa %xmm1, %xmm3 303 ; SSE2-NEXT: pxor %xmm2, %xmm3 304 ; SSE2-NEXT: pxor %xmm0, %xmm2 305 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm2 306 ; SSE2-NEXT: pand %xmm2, %xmm0 307 ; SSE2-NEXT: pandn %xmm1, %xmm2 308 ; SSE2-NEXT: por %xmm2, %xmm0 309 ; SSE2-NEXT: retq 310 ; 311 ; SSE4-LABEL: test15: 312 ; SSE4: # BB#0: # %entry 313 ; SSE4-NEXT: pmaxuw %xmm1, %xmm0 314 ; SSE4-NEXT: retq 315 ; 316 ; AVX-LABEL: test15: 317 ; AVX: # BB#0: # %entry 318 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 319 ; AVX-NEXT: retq 320 entry: 321 %cmp = icmp ugt <8 x i16> %a, %b 322 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 323 ret <8 x i16> %sel 324 } 325 326 define <8 x i16> @test16(<8 x i16> %a, <8 x i16> %b) { 327 ; SSE2-LABEL: test16: 328 ; SSE2: # BB#0: # %entry 329 ; SSE2-NEXT: movdqa %xmm1, %xmm2 330 ; SSE2-NEXT: psubusw %xmm0, %xmm2 331 ; SSE2-NEXT: pxor %xmm3, %xmm3 332 ; SSE2-NEXT: pcmpeqw %xmm2, %xmm3 333 ; SSE2-NEXT: pand %xmm3, %xmm0 334 ; SSE2-NEXT: pandn %xmm1, %xmm3 335 ; SSE2-NEXT: por %xmm3, %xmm0 336 ; SSE2-NEXT: retq 337 ; 338 ; SSE4-LABEL: test16: 339 ; SSE4: # BB#0: # %entry 340 ; SSE4-NEXT: pmaxuw %xmm1, %xmm0 341 ; SSE4-NEXT: retq 342 ; 343 ; AVX-LABEL: test16: 344 ; AVX: # BB#0: # %entry 345 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 346 ; AVX-NEXT: retq 347 entry: 348 %cmp = icmp uge <8 x i16> %a, %b 349 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 350 ret <8 x i16> %sel 351 } 352 353 define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) { 354 ; SSE2-LABEL: test17: 355 ; SSE2: # BB#0: # %entry 356 ; SSE2-NEXT: movdqa %xmm1, %xmm2 357 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 358 ; SSE2-NEXT: pand %xmm2, %xmm0 359 ; SSE2-NEXT: pandn %xmm1, %xmm2 360 ; SSE2-NEXT: por %xmm2, %xmm0 361 ; SSE2-NEXT: retq 362 ; 363 ; SSE4-LABEL: test17: 364 ; SSE4: # BB#0: # %entry 365 ; SSE4-NEXT: pminsd %xmm1, %xmm0 366 ; SSE4-NEXT: retq 367 ; 368 ; AVX-LABEL: test17: 369 ; AVX: # BB#0: # %entry 370 ; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 371 ; AVX-NEXT: retq 372 entry: 373 %cmp = icmp slt <4 x i32> %a, %b 374 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 375 ret <4 x i32> %sel 376 } 377 378 define <4 x i32> @test18(<4 x i32> %a, <4 x i32> %b) { 379 ; SSE2-LABEL: test18: 380 ; SSE2: # BB#0: # %entry 381 ; SSE2-NEXT: movdqa %xmm0, %xmm2 382 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 383 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm3 384 ; SSE2-NEXT: pxor %xmm2, %xmm3 385 ; SSE2-NEXT: pandn %xmm0, %xmm2 386 ; SSE2-NEXT: pandn %xmm1, %xmm3 387 ; SSE2-NEXT: por %xmm3, %xmm2 388 ; SSE2-NEXT: movdqa %xmm2, %xmm0 389 ; SSE2-NEXT: retq 390 ; 391 ; SSE4-LABEL: test18: 392 ; SSE4: # BB#0: # %entry 393 ; SSE4-NEXT: pminsd %xmm1, %xmm0 394 ; SSE4-NEXT: retq 395 ; 396 ; AVX-LABEL: test18: 397 ; AVX: # BB#0: # %entry 398 ; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 399 ; AVX-NEXT: retq 400 entry: 401 %cmp = icmp sle <4 x i32> %a, %b 402 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 403 ret <4 x i32> %sel 404 } 405 406 define <4 x i32> @test19(<4 x i32> %a, <4 x i32> %b) { 407 ; SSE2-LABEL: test19: 408 ; SSE2: # BB#0: # %entry 409 ; SSE2-NEXT: movdqa %xmm0, %xmm2 410 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 411 ; SSE2-NEXT: pand %xmm2, %xmm0 412 ; SSE2-NEXT: pandn %xmm1, %xmm2 413 ; SSE2-NEXT: por %xmm0, %xmm2 414 ; SSE2-NEXT: movdqa %xmm2, %xmm0 415 ; SSE2-NEXT: retq 416 ; 417 ; SSE4-LABEL: test19: 418 ; SSE4: # BB#0: # %entry 419 ; SSE4-NEXT: pmaxsd %xmm1, %xmm0 420 ; SSE4-NEXT: retq 421 ; 422 ; AVX-LABEL: test19: 423 ; AVX: # BB#0: # %entry 424 ; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 425 ; AVX-NEXT: retq 426 entry: 427 %cmp = icmp sgt <4 x i32> %a, %b 428 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 429 ret <4 x i32> %sel 430 } 431 432 define <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b) { 433 ; SSE2-LABEL: test20: 434 ; SSE2: # BB#0: # %entry 435 ; SSE2-NEXT: movdqa %xmm1, %xmm3 436 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm3 437 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 438 ; SSE2-NEXT: pxor %xmm3, %xmm2 439 ; SSE2-NEXT: pandn %xmm0, %xmm3 440 ; SSE2-NEXT: pandn %xmm1, %xmm2 441 ; SSE2-NEXT: por %xmm3, %xmm2 442 ; SSE2-NEXT: movdqa %xmm2, %xmm0 443 ; SSE2-NEXT: retq 444 ; 445 ; SSE4-LABEL: test20: 446 ; SSE4: # BB#0: # %entry 447 ; SSE4-NEXT: pmaxsd %xmm1, %xmm0 448 ; SSE4-NEXT: retq 449 ; 450 ; AVX-LABEL: test20: 451 ; AVX: # BB#0: # %entry 452 ; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 453 ; AVX-NEXT: retq 454 entry: 455 %cmp = icmp sge <4 x i32> %a, %b 456 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 457 ret <4 x i32> %sel 458 } 459 460 define <4 x i32> @test21(<4 x i32> %a, <4 x i32> %b) { 461 ; SSE2-LABEL: test21: 462 ; SSE2: # BB#0: # %entry 463 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 464 ; SSE2-NEXT: movdqa %xmm0, %xmm3 465 ; SSE2-NEXT: pxor %xmm2, %xmm3 466 ; SSE2-NEXT: pxor %xmm1, %xmm2 467 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 468 ; SSE2-NEXT: pand %xmm2, %xmm0 469 ; SSE2-NEXT: pandn %xmm1, %xmm2 470 ; SSE2-NEXT: por %xmm2, %xmm0 471 ; SSE2-NEXT: retq 472 ; 473 ; SSE4-LABEL: test21: 474 ; SSE4: # BB#0: # %entry 475 ; SSE4-NEXT: pminud %xmm1, %xmm0 476 ; SSE4-NEXT: retq 477 ; 478 ; AVX-LABEL: test21: 479 ; AVX: # BB#0: # %entry 480 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 481 ; AVX-NEXT: retq 482 entry: 483 %cmp = icmp ult <4 x i32> %a, %b 484 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 485 ret <4 x i32> %sel 486 } 487 488 define <4 x i32> @test22(<4 x i32> %a, <4 x i32> %b) { 489 ; SSE2-LABEL: test22: 490 ; SSE2: # BB#0: # %entry 491 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648] 492 ; SSE2-NEXT: movdqa %xmm1, %xmm2 493 ; SSE2-NEXT: pxor %xmm3, %xmm2 494 ; SSE2-NEXT: pxor %xmm0, %xmm3 495 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3 496 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 497 ; SSE2-NEXT: pxor %xmm3, %xmm2 498 ; SSE2-NEXT: pandn %xmm0, %xmm3 499 ; SSE2-NEXT: pandn %xmm1, %xmm2 500 ; SSE2-NEXT: por %xmm3, %xmm2 501 ; SSE2-NEXT: movdqa %xmm2, %xmm0 502 ; SSE2-NEXT: retq 503 ; 504 ; SSE4-LABEL: test22: 505 ; SSE4: # BB#0: # %entry 506 ; SSE4-NEXT: pminud %xmm1, %xmm0 507 ; SSE4-NEXT: retq 508 ; 509 ; AVX-LABEL: test22: 510 ; AVX: # BB#0: # %entry 511 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 512 ; AVX-NEXT: retq 513 entry: 514 %cmp = icmp ule <4 x i32> %a, %b 515 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 516 ret <4 x i32> %sel 517 } 518 519 define <4 x i32> @test23(<4 x i32> %a, <4 x i32> %b) { 520 ; SSE2-LABEL: test23: 521 ; SSE2: # BB#0: # %entry 522 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 523 ; SSE2-NEXT: movdqa %xmm1, %xmm3 524 ; SSE2-NEXT: pxor %xmm2, %xmm3 525 ; SSE2-NEXT: pxor %xmm0, %xmm2 526 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 527 ; SSE2-NEXT: pand %xmm2, %xmm0 528 ; SSE2-NEXT: pandn %xmm1, %xmm2 529 ; SSE2-NEXT: por %xmm2, %xmm0 530 ; SSE2-NEXT: retq 531 ; 532 ; SSE4-LABEL: test23: 533 ; SSE4: # BB#0: # %entry 534 ; SSE4-NEXT: pmaxud %xmm1, %xmm0 535 ; SSE4-NEXT: retq 536 ; 537 ; AVX-LABEL: test23: 538 ; AVX: # BB#0: # %entry 539 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 540 ; AVX-NEXT: retq 541 entry: 542 %cmp = icmp ugt <4 x i32> %a, %b 543 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 544 ret <4 x i32> %sel 545 } 546 547 define <4 x i32> @test24(<4 x i32> %a, <4 x i32> %b) { 548 ; SSE2-LABEL: test24: 549 ; SSE2: # BB#0: # %entry 550 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648] 551 ; SSE2-NEXT: movdqa %xmm0, %xmm2 552 ; SSE2-NEXT: pxor %xmm3, %xmm2 553 ; SSE2-NEXT: pxor %xmm1, %xmm3 554 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3 555 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 556 ; SSE2-NEXT: pxor %xmm3, %xmm2 557 ; SSE2-NEXT: pandn %xmm0, %xmm3 558 ; SSE2-NEXT: pandn %xmm1, %xmm2 559 ; SSE2-NEXT: por %xmm3, %xmm2 560 ; SSE2-NEXT: movdqa %xmm2, %xmm0 561 ; SSE2-NEXT: retq 562 ; 563 ; SSE4-LABEL: test24: 564 ; SSE4: # BB#0: # %entry 565 ; SSE4-NEXT: pmaxud %xmm1, %xmm0 566 ; SSE4-NEXT: retq 567 ; 568 ; AVX-LABEL: test24: 569 ; AVX: # BB#0: # %entry 570 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 571 ; AVX-NEXT: retq 572 entry: 573 %cmp = icmp uge <4 x i32> %a, %b 574 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 575 ret <4 x i32> %sel 576 } 577 578 define <32 x i8> @test25(<32 x i8> %a, <32 x i8> %b) { 579 ; SSE2-LABEL: test25: 580 ; SSE2: # BB#0: # %entry 581 ; SSE2-NEXT: movdqa %xmm3, %xmm4 582 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 583 ; SSE2-NEXT: movdqa %xmm2, %xmm5 584 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm5 585 ; SSE2-NEXT: pand %xmm5, %xmm0 586 ; SSE2-NEXT: pandn %xmm2, %xmm5 587 ; SSE2-NEXT: por %xmm5, %xmm0 588 ; SSE2-NEXT: pand %xmm4, %xmm1 589 ; SSE2-NEXT: pandn %xmm3, %xmm4 590 ; SSE2-NEXT: por %xmm4, %xmm1 591 ; SSE2-NEXT: retq 592 ; 593 ; SSE4-LABEL: test25: 594 ; SSE4: # BB#0: # %entry 595 ; SSE4-NEXT: pminsb %xmm2, %xmm0 596 ; SSE4-NEXT: pminsb %xmm3, %xmm1 597 ; SSE4-NEXT: retq 598 ; 599 ; AVX1-LABEL: test25: 600 ; AVX1: # BB#0: # %entry 601 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 602 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 603 ; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 604 ; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 605 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 606 ; AVX1-NEXT: retq 607 ; 608 ; AVX2-LABEL: test25: 609 ; AVX2: # BB#0: # %entry 610 ; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 611 ; AVX2-NEXT: retq 612 ; 613 ; AVX512F-LABEL: test25: 614 ; AVX512F: # BB#0: # %entry 615 ; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 616 ; AVX512F-NEXT: retq 617 entry: 618 %cmp = icmp slt <32 x i8> %a, %b 619 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 620 ret <32 x i8> %sel 621 } 622 623 define <32 x i8> @test26(<32 x i8> %a, <32 x i8> %b) { 624 ; SSE2-LABEL: test26: 625 ; SSE2: # BB#0: # %entry 626 ; SSE2-NEXT: movdqa %xmm1, %xmm6 627 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm6 628 ; SSE2-NEXT: pcmpeqd %xmm7, %xmm7 629 ; SSE2-NEXT: movdqa %xmm6, %xmm4 630 ; SSE2-NEXT: pxor %xmm7, %xmm4 631 ; SSE2-NEXT: movdqa %xmm0, %xmm5 632 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm5 633 ; SSE2-NEXT: pxor %xmm5, %xmm7 634 ; SSE2-NEXT: pandn %xmm0, %xmm5 635 ; SSE2-NEXT: pandn %xmm2, %xmm7 636 ; SSE2-NEXT: por %xmm7, %xmm5 637 ; SSE2-NEXT: pandn %xmm1, %xmm6 638 ; SSE2-NEXT: pandn %xmm3, %xmm4 639 ; SSE2-NEXT: por %xmm6, %xmm4 640 ; SSE2-NEXT: movdqa %xmm5, %xmm0 641 ; SSE2-NEXT: movdqa %xmm4, %xmm1 642 ; SSE2-NEXT: retq 643 ; 644 ; SSE4-LABEL: test26: 645 ; SSE4: # BB#0: # %entry 646 ; SSE4-NEXT: pminsb %xmm2, %xmm0 647 ; SSE4-NEXT: pminsb %xmm3, %xmm1 648 ; SSE4-NEXT: retq 649 ; 650 ; AVX1-LABEL: test26: 651 ; AVX1: # BB#0: # %entry 652 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 653 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 654 ; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 655 ; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 656 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 657 ; AVX1-NEXT: retq 658 ; 659 ; AVX2-LABEL: test26: 660 ; AVX2: # BB#0: # %entry 661 ; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 662 ; AVX2-NEXT: retq 663 ; 664 ; AVX512F-LABEL: test26: 665 ; AVX512F: # BB#0: # %entry 666 ; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 667 ; AVX512F-NEXT: retq 668 entry: 669 %cmp = icmp sle <32 x i8> %a, %b 670 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 671 ret <32 x i8> %sel 672 } 673 674 define <32 x i8> @test27(<32 x i8> %a, <32 x i8> %b) { 675 ; SSE2-LABEL: test27: 676 ; SSE2: # BB#0: # %entry 677 ; SSE2-NEXT: movdqa %xmm1, %xmm4 678 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 679 ; SSE2-NEXT: movdqa %xmm0, %xmm5 680 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm5 681 ; SSE2-NEXT: pand %xmm5, %xmm0 682 ; SSE2-NEXT: pandn %xmm2, %xmm5 683 ; SSE2-NEXT: por %xmm0, %xmm5 684 ; SSE2-NEXT: pand %xmm4, %xmm1 685 ; SSE2-NEXT: pandn %xmm3, %xmm4 686 ; SSE2-NEXT: por %xmm1, %xmm4 687 ; SSE2-NEXT: movdqa %xmm5, %xmm0 688 ; SSE2-NEXT: movdqa %xmm4, %xmm1 689 ; SSE2-NEXT: retq 690 ; 691 ; SSE4-LABEL: test27: 692 ; SSE4: # BB#0: # %entry 693 ; SSE4-NEXT: pmaxsb %xmm2, %xmm0 694 ; SSE4-NEXT: pmaxsb %xmm3, %xmm1 695 ; SSE4-NEXT: retq 696 ; 697 ; AVX1-LABEL: test27: 698 ; AVX1: # BB#0: # %entry 699 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 700 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 701 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 702 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 703 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 704 ; AVX1-NEXT: retq 705 ; 706 ; AVX2-LABEL: test27: 707 ; AVX2: # BB#0: # %entry 708 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 709 ; AVX2-NEXT: retq 710 ; 711 ; AVX512F-LABEL: test27: 712 ; AVX512F: # BB#0: # %entry 713 ; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 714 ; AVX512F-NEXT: retq 715 entry: 716 %cmp = icmp sgt <32 x i8> %a, %b 717 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 718 ret <32 x i8> %sel 719 } 720 721 define <32 x i8> @test28(<32 x i8> %a, <32 x i8> %b) { 722 ; SSE2-LABEL: test28: 723 ; SSE2: # BB#0: # %entry 724 ; SSE2-NEXT: movdqa %xmm3, %xmm6 725 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm6 726 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 727 ; SSE2-NEXT: movdqa %xmm6, %xmm5 728 ; SSE2-NEXT: pxor %xmm4, %xmm5 729 ; SSE2-NEXT: movdqa %xmm2, %xmm7 730 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm7 731 ; SSE2-NEXT: pxor %xmm7, %xmm4 732 ; SSE2-NEXT: pandn %xmm0, %xmm7 733 ; SSE2-NEXT: pandn %xmm2, %xmm4 734 ; SSE2-NEXT: por %xmm7, %xmm4 735 ; SSE2-NEXT: pandn %xmm1, %xmm6 736 ; SSE2-NEXT: pandn %xmm3, %xmm5 737 ; SSE2-NEXT: por %xmm6, %xmm5 738 ; SSE2-NEXT: movdqa %xmm4, %xmm0 739 ; SSE2-NEXT: movdqa %xmm5, %xmm1 740 ; SSE2-NEXT: retq 741 ; 742 ; SSE4-LABEL: test28: 743 ; SSE4: # BB#0: # %entry 744 ; SSE4-NEXT: pmaxsb %xmm2, %xmm0 745 ; SSE4-NEXT: pmaxsb %xmm3, %xmm1 746 ; SSE4-NEXT: retq 747 ; 748 ; AVX1-LABEL: test28: 749 ; AVX1: # BB#0: # %entry 750 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 751 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 752 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 753 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 754 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 755 ; AVX1-NEXT: retq 756 ; 757 ; AVX2-LABEL: test28: 758 ; AVX2: # BB#0: # %entry 759 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 760 ; AVX2-NEXT: retq 761 ; 762 ; AVX512F-LABEL: test28: 763 ; AVX512F: # BB#0: # %entry 764 ; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 765 ; AVX512F-NEXT: retq 766 entry: 767 %cmp = icmp sge <32 x i8> %a, %b 768 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 769 ret <32 x i8> %sel 770 } 771 772 define <32 x i8> @test29(<32 x i8> %a, <32 x i8> %b) { 773 ; SSE-LABEL: test29: 774 ; SSE: # BB#0: # %entry 775 ; SSE-NEXT: pminub %xmm2, %xmm0 776 ; SSE-NEXT: pminub %xmm3, %xmm1 777 ; SSE-NEXT: retq 778 ; 779 ; AVX1-LABEL: test29: 780 ; AVX1: # BB#0: # %entry 781 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 782 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 783 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 784 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 785 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 786 ; AVX1-NEXT: retq 787 ; 788 ; AVX2-LABEL: test29: 789 ; AVX2: # BB#0: # %entry 790 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 791 ; AVX2-NEXT: retq 792 ; 793 ; AVX512F-LABEL: test29: 794 ; AVX512F: # BB#0: # %entry 795 ; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 796 ; AVX512F-NEXT: retq 797 entry: 798 %cmp = icmp ult <32 x i8> %a, %b 799 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 800 ret <32 x i8> %sel 801 } 802 803 define <32 x i8> @test30(<32 x i8> %a, <32 x i8> %b) { 804 ; SSE-LABEL: test30: 805 ; SSE: # BB#0: # %entry 806 ; SSE-NEXT: pminub %xmm2, %xmm0 807 ; SSE-NEXT: pminub %xmm3, %xmm1 808 ; SSE-NEXT: retq 809 ; 810 ; AVX1-LABEL: test30: 811 ; AVX1: # BB#0: # %entry 812 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 813 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 814 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 815 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 816 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 817 ; AVX1-NEXT: retq 818 ; 819 ; AVX2-LABEL: test30: 820 ; AVX2: # BB#0: # %entry 821 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 822 ; AVX2-NEXT: retq 823 ; 824 ; AVX512F-LABEL: test30: 825 ; AVX512F: # BB#0: # %entry 826 ; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 827 ; AVX512F-NEXT: retq 828 entry: 829 %cmp = icmp ule <32 x i8> %a, %b 830 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 831 ret <32 x i8> %sel 832 } 833 834 define <32 x i8> @test31(<32 x i8> %a, <32 x i8> %b) { 835 ; SSE-LABEL: test31: 836 ; SSE: # BB#0: # %entry 837 ; SSE-NEXT: pmaxub %xmm2, %xmm0 838 ; SSE-NEXT: pmaxub %xmm3, %xmm1 839 ; SSE-NEXT: retq 840 ; 841 ; AVX1-LABEL: test31: 842 ; AVX1: # BB#0: # %entry 843 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 844 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 845 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 846 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 847 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 848 ; AVX1-NEXT: retq 849 ; 850 ; AVX2-LABEL: test31: 851 ; AVX2: # BB#0: # %entry 852 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 853 ; AVX2-NEXT: retq 854 ; 855 ; AVX512F-LABEL: test31: 856 ; AVX512F: # BB#0: # %entry 857 ; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 858 ; AVX512F-NEXT: retq 859 entry: 860 %cmp = icmp ugt <32 x i8> %a, %b 861 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 862 ret <32 x i8> %sel 863 } 864 865 define <32 x i8> @test32(<32 x i8> %a, <32 x i8> %b) { 866 ; SSE-LABEL: test32: 867 ; SSE: # BB#0: # %entry 868 ; SSE-NEXT: pmaxub %xmm2, %xmm0 869 ; SSE-NEXT: pmaxub %xmm3, %xmm1 870 ; SSE-NEXT: retq 871 ; 872 ; AVX1-LABEL: test32: 873 ; AVX1: # BB#0: # %entry 874 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 875 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 876 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 877 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 878 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 879 ; AVX1-NEXT: retq 880 ; 881 ; AVX2-LABEL: test32: 882 ; AVX2: # BB#0: # %entry 883 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 884 ; AVX2-NEXT: retq 885 ; 886 ; AVX512F-LABEL: test32: 887 ; AVX512F: # BB#0: # %entry 888 ; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 889 ; AVX512F-NEXT: retq 890 entry: 891 %cmp = icmp uge <32 x i8> %a, %b 892 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 893 ret <32 x i8> %sel 894 } 895 896 define <16 x i16> @test33(<16 x i16> %a, <16 x i16> %b) { 897 ; SSE-LABEL: test33: 898 ; SSE: # BB#0: # %entry 899 ; SSE-NEXT: pminsw %xmm2, %xmm0 900 ; SSE-NEXT: pminsw %xmm3, %xmm1 901 ; SSE-NEXT: retq 902 ; 903 ; AVX1-LABEL: test33: 904 ; AVX1: # BB#0: # %entry 905 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 906 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 907 ; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 908 ; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 909 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 910 ; AVX1-NEXT: retq 911 ; 912 ; AVX2-LABEL: test33: 913 ; AVX2: # BB#0: # %entry 914 ; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 915 ; AVX2-NEXT: retq 916 ; 917 ; AVX512F-LABEL: test33: 918 ; AVX512F: # BB#0: # %entry 919 ; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 920 ; AVX512F-NEXT: retq 921 entry: 922 %cmp = icmp slt <16 x i16> %a, %b 923 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 924 ret <16 x i16> %sel 925 } 926 927 define <16 x i16> @test34(<16 x i16> %a, <16 x i16> %b) { 928 ; SSE-LABEL: test34: 929 ; SSE: # BB#0: # %entry 930 ; SSE-NEXT: pminsw %xmm2, %xmm0 931 ; SSE-NEXT: pminsw %xmm3, %xmm1 932 ; SSE-NEXT: retq 933 ; 934 ; AVX1-LABEL: test34: 935 ; AVX1: # BB#0: # %entry 936 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 937 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 938 ; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 939 ; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 940 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 941 ; AVX1-NEXT: retq 942 ; 943 ; AVX2-LABEL: test34: 944 ; AVX2: # BB#0: # %entry 945 ; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 946 ; AVX2-NEXT: retq 947 ; 948 ; AVX512F-LABEL: test34: 949 ; AVX512F: # BB#0: # %entry 950 ; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 951 ; AVX512F-NEXT: retq 952 entry: 953 %cmp = icmp sle <16 x i16> %a, %b 954 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 955 ret <16 x i16> %sel 956 } 957 958 define <16 x i16> @test35(<16 x i16> %a, <16 x i16> %b) { 959 ; SSE-LABEL: test35: 960 ; SSE: # BB#0: # %entry 961 ; SSE-NEXT: pmaxsw %xmm2, %xmm0 962 ; SSE-NEXT: pmaxsw %xmm3, %xmm1 963 ; SSE-NEXT: retq 964 ; 965 ; AVX1-LABEL: test35: 966 ; AVX1: # BB#0: # %entry 967 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 968 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 969 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 970 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 971 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 972 ; AVX1-NEXT: retq 973 ; 974 ; AVX2-LABEL: test35: 975 ; AVX2: # BB#0: # %entry 976 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 977 ; AVX2-NEXT: retq 978 ; 979 ; AVX512F-LABEL: test35: 980 ; AVX512F: # BB#0: # %entry 981 ; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 982 ; AVX512F-NEXT: retq 983 entry: 984 %cmp = icmp sgt <16 x i16> %a, %b 985 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 986 ret <16 x i16> %sel 987 } 988 989 define <16 x i16> @test36(<16 x i16> %a, <16 x i16> %b) { 990 ; SSE-LABEL: test36: 991 ; SSE: # BB#0: # %entry 992 ; SSE-NEXT: pmaxsw %xmm2, %xmm0 993 ; SSE-NEXT: pmaxsw %xmm3, %xmm1 994 ; SSE-NEXT: retq 995 ; 996 ; AVX1-LABEL: test36: 997 ; AVX1: # BB#0: # %entry 998 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 999 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1000 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 1001 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 1002 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1003 ; AVX1-NEXT: retq 1004 ; 1005 ; AVX2-LABEL: test36: 1006 ; AVX2: # BB#0: # %entry 1007 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 1008 ; AVX2-NEXT: retq 1009 ; 1010 ; AVX512F-LABEL: test36: 1011 ; AVX512F: # BB#0: # %entry 1012 ; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 1013 ; AVX512F-NEXT: retq 1014 entry: 1015 %cmp = icmp sge <16 x i16> %a, %b 1016 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1017 ret <16 x i16> %sel 1018 } 1019 1020 define <16 x i16> @test37(<16 x i16> %a, <16 x i16> %b) { 1021 ; SSE2-LABEL: test37: 1022 ; SSE2: # BB#0: # %entry 1023 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 1024 ; SSE2-NEXT: movdqa %xmm1, %xmm5 1025 ; SSE2-NEXT: pxor %xmm4, %xmm5 1026 ; SSE2-NEXT: movdqa %xmm3, %xmm6 1027 ; SSE2-NEXT: pxor %xmm4, %xmm6 1028 ; SSE2-NEXT: pcmpgtw %xmm5, %xmm6 1029 ; SSE2-NEXT: movdqa %xmm0, %xmm5 1030 ; SSE2-NEXT: pxor %xmm4, %xmm5 1031 ; SSE2-NEXT: pxor %xmm2, %xmm4 1032 ; SSE2-NEXT: pcmpgtw %xmm5, %xmm4 1033 ; SSE2-NEXT: pand %xmm4, %xmm0 1034 ; SSE2-NEXT: pandn %xmm2, %xmm4 1035 ; SSE2-NEXT: por %xmm4, %xmm0 1036 ; SSE2-NEXT: pand %xmm6, %xmm1 1037 ; SSE2-NEXT: pandn %xmm3, %xmm6 1038 ; SSE2-NEXT: por %xmm6, %xmm1 1039 ; SSE2-NEXT: retq 1040 ; 1041 ; SSE4-LABEL: test37: 1042 ; SSE4: # BB#0: # %entry 1043 ; SSE4-NEXT: pminuw %xmm2, %xmm0 1044 ; SSE4-NEXT: pminuw %xmm3, %xmm1 1045 ; SSE4-NEXT: retq 1046 ; 1047 ; AVX1-LABEL: test37: 1048 ; AVX1: # BB#0: # %entry 1049 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1050 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1051 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 1052 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1053 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1054 ; AVX1-NEXT: retq 1055 ; 1056 ; AVX2-LABEL: test37: 1057 ; AVX2: # BB#0: # %entry 1058 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1059 ; AVX2-NEXT: retq 1060 ; 1061 ; AVX512F-LABEL: test37: 1062 ; AVX512F: # BB#0: # %entry 1063 ; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1064 ; AVX512F-NEXT: retq 1065 entry: 1066 %cmp = icmp ult <16 x i16> %a, %b 1067 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1068 ret <16 x i16> %sel 1069 } 1070 1071 define <16 x i16> @test38(<16 x i16> %a, <16 x i16> %b) { 1072 ; SSE2-LABEL: test38: 1073 ; SSE2: # BB#0: # %entry 1074 ; SSE2-NEXT: movdqa %xmm1, %xmm4 1075 ; SSE2-NEXT: psubusw %xmm3, %xmm4 1076 ; SSE2-NEXT: pxor %xmm6, %xmm6 1077 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm4 1078 ; SSE2-NEXT: movdqa %xmm0, %xmm5 1079 ; SSE2-NEXT: psubusw %xmm2, %xmm5 1080 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm5 1081 ; SSE2-NEXT: pand %xmm5, %xmm0 1082 ; SSE2-NEXT: pandn %xmm2, %xmm5 1083 ; SSE2-NEXT: por %xmm0, %xmm5 1084 ; SSE2-NEXT: pand %xmm4, %xmm1 1085 ; SSE2-NEXT: pandn %xmm3, %xmm4 1086 ; SSE2-NEXT: por %xmm1, %xmm4 1087 ; SSE2-NEXT: movdqa %xmm5, %xmm0 1088 ; SSE2-NEXT: movdqa %xmm4, %xmm1 1089 ; SSE2-NEXT: retq 1090 ; 1091 ; SSE4-LABEL: test38: 1092 ; SSE4: # BB#0: # %entry 1093 ; SSE4-NEXT: pminuw %xmm2, %xmm0 1094 ; SSE4-NEXT: pminuw %xmm3, %xmm1 1095 ; SSE4-NEXT: retq 1096 ; 1097 ; AVX1-LABEL: test38: 1098 ; AVX1: # BB#0: # %entry 1099 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1100 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1101 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 1102 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1103 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1104 ; AVX1-NEXT: retq 1105 ; 1106 ; AVX2-LABEL: test38: 1107 ; AVX2: # BB#0: # %entry 1108 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1109 ; AVX2-NEXT: retq 1110 ; 1111 ; AVX512F-LABEL: test38: 1112 ; AVX512F: # BB#0: # %entry 1113 ; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1114 ; AVX512F-NEXT: retq 1115 entry: 1116 %cmp = icmp ule <16 x i16> %a, %b 1117 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1118 ret <16 x i16> %sel 1119 } 1120 1121 define <16 x i16> @test39(<16 x i16> %a, <16 x i16> %b) { 1122 ; SSE2-LABEL: test39: 1123 ; SSE2: # BB#0: # %entry 1124 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768] 1125 ; SSE2-NEXT: movdqa %xmm3, %xmm6 1126 ; SSE2-NEXT: pxor %xmm5, %xmm6 1127 ; SSE2-NEXT: movdqa %xmm1, %xmm4 1128 ; SSE2-NEXT: pxor %xmm5, %xmm4 1129 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm4 1130 ; SSE2-NEXT: movdqa %xmm2, %xmm6 1131 ; SSE2-NEXT: pxor %xmm5, %xmm6 1132 ; SSE2-NEXT: pxor %xmm0, %xmm5 1133 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm5 1134 ; SSE2-NEXT: pand %xmm5, %xmm0 1135 ; SSE2-NEXT: pandn %xmm2, %xmm5 1136 ; SSE2-NEXT: por %xmm5, %xmm0 1137 ; SSE2-NEXT: pand %xmm4, %xmm1 1138 ; SSE2-NEXT: pandn %xmm3, %xmm4 1139 ; SSE2-NEXT: por %xmm1, %xmm4 1140 ; SSE2-NEXT: movdqa %xmm4, %xmm1 1141 ; SSE2-NEXT: retq 1142 ; 1143 ; SSE4-LABEL: test39: 1144 ; SSE4: # BB#0: # %entry 1145 ; SSE4-NEXT: pmaxuw %xmm2, %xmm0 1146 ; SSE4-NEXT: pmaxuw %xmm3, %xmm1 1147 ; SSE4-NEXT: retq 1148 ; 1149 ; AVX1-LABEL: test39: 1150 ; AVX1: # BB#0: # %entry 1151 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1152 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1153 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 1154 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1155 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1156 ; AVX1-NEXT: retq 1157 ; 1158 ; AVX2-LABEL: test39: 1159 ; AVX2: # BB#0: # %entry 1160 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1161 ; AVX2-NEXT: retq 1162 ; 1163 ; AVX512F-LABEL: test39: 1164 ; AVX512F: # BB#0: # %entry 1165 ; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1166 ; AVX512F-NEXT: retq 1167 entry: 1168 %cmp = icmp ugt <16 x i16> %a, %b 1169 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1170 ret <16 x i16> %sel 1171 } 1172 1173 define <16 x i16> @test40(<16 x i16> %a, <16 x i16> %b) { 1174 ; SSE2-LABEL: test40: 1175 ; SSE2: # BB#0: # %entry 1176 ; SSE2-NEXT: movdqa %xmm3, %xmm4 1177 ; SSE2-NEXT: psubusw %xmm1, %xmm4 1178 ; SSE2-NEXT: pxor %xmm5, %xmm5 1179 ; SSE2-NEXT: pcmpeqw %xmm5, %xmm4 1180 ; SSE2-NEXT: movdqa %xmm2, %xmm6 1181 ; SSE2-NEXT: psubusw %xmm0, %xmm6 1182 ; SSE2-NEXT: pcmpeqw %xmm5, %xmm6 1183 ; SSE2-NEXT: pand %xmm6, %xmm0 1184 ; SSE2-NEXT: pandn %xmm2, %xmm6 1185 ; SSE2-NEXT: por %xmm6, %xmm0 1186 ; SSE2-NEXT: pand %xmm4, %xmm1 1187 ; SSE2-NEXT: pandn %xmm3, %xmm4 1188 ; SSE2-NEXT: por %xmm4, %xmm1 1189 ; SSE2-NEXT: retq 1190 ; 1191 ; SSE4-LABEL: test40: 1192 ; SSE4: # BB#0: # %entry 1193 ; SSE4-NEXT: pmaxuw %xmm2, %xmm0 1194 ; SSE4-NEXT: pmaxuw %xmm3, %xmm1 1195 ; SSE4-NEXT: retq 1196 ; 1197 ; AVX1-LABEL: test40: 1198 ; AVX1: # BB#0: # %entry 1199 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1200 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1201 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 1202 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1203 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1204 ; AVX1-NEXT: retq 1205 ; 1206 ; AVX2-LABEL: test40: 1207 ; AVX2: # BB#0: # %entry 1208 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1209 ; AVX2-NEXT: retq 1210 ; 1211 ; AVX512F-LABEL: test40: 1212 ; AVX512F: # BB#0: # %entry 1213 ; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1214 ; AVX512F-NEXT: retq 1215 entry: 1216 %cmp = icmp uge <16 x i16> %a, %b 1217 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1218 ret <16 x i16> %sel 1219 } 1220 1221 define <8 x i32> @test41(<8 x i32> %a, <8 x i32> %b) { 1222 ; SSE2-LABEL: test41: 1223 ; SSE2: # BB#0: # %entry 1224 ; SSE2-NEXT: movdqa %xmm3, %xmm4 1225 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 1226 ; SSE2-NEXT: movdqa %xmm2, %xmm5 1227 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 1228 ; SSE2-NEXT: pand %xmm5, %xmm0 1229 ; SSE2-NEXT: pandn %xmm2, %xmm5 1230 ; SSE2-NEXT: por %xmm5, %xmm0 1231 ; SSE2-NEXT: pand %xmm4, %xmm1 1232 ; SSE2-NEXT: pandn %xmm3, %xmm4 1233 ; SSE2-NEXT: por %xmm4, %xmm1 1234 ; SSE2-NEXT: retq 1235 ; 1236 ; SSE4-LABEL: test41: 1237 ; SSE4: # BB#0: # %entry 1238 ; SSE4-NEXT: pminsd %xmm2, %xmm0 1239 ; SSE4-NEXT: pminsd %xmm3, %xmm1 1240 ; SSE4-NEXT: retq 1241 ; 1242 ; AVX1-LABEL: test41: 1243 ; AVX1: # BB#0: # %entry 1244 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1245 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1246 ; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 1247 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1248 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1249 ; AVX1-NEXT: retq 1250 ; 1251 ; AVX2-LABEL: test41: 1252 ; AVX2: # BB#0: # %entry 1253 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1254 ; AVX2-NEXT: retq 1255 ; 1256 ; AVX512F-LABEL: test41: 1257 ; AVX512F: # BB#0: # %entry 1258 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1259 ; AVX512F-NEXT: retq 1260 entry: 1261 %cmp = icmp slt <8 x i32> %a, %b 1262 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1263 ret <8 x i32> %sel 1264 } 1265 1266 define <8 x i32> @test42(<8 x i32> %a, <8 x i32> %b) { 1267 ; SSE2-LABEL: test42: 1268 ; SSE2: # BB#0: # %entry 1269 ; SSE2-NEXT: movdqa %xmm1, %xmm6 1270 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm6 1271 ; SSE2-NEXT: pcmpeqd %xmm7, %xmm7 1272 ; SSE2-NEXT: movdqa %xmm6, %xmm4 1273 ; SSE2-NEXT: pxor %xmm7, %xmm4 1274 ; SSE2-NEXT: movdqa %xmm0, %xmm5 1275 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 1276 ; SSE2-NEXT: pxor %xmm5, %xmm7 1277 ; SSE2-NEXT: pandn %xmm0, %xmm5 1278 ; SSE2-NEXT: pandn %xmm2, %xmm7 1279 ; SSE2-NEXT: por %xmm7, %xmm5 1280 ; SSE2-NEXT: pandn %xmm1, %xmm6 1281 ; SSE2-NEXT: pandn %xmm3, %xmm4 1282 ; SSE2-NEXT: por %xmm6, %xmm4 1283 ; SSE2-NEXT: movdqa %xmm5, %xmm0 1284 ; SSE2-NEXT: movdqa %xmm4, %xmm1 1285 ; SSE2-NEXT: retq 1286 ; 1287 ; SSE4-LABEL: test42: 1288 ; SSE4: # BB#0: # %entry 1289 ; SSE4-NEXT: pminsd %xmm2, %xmm0 1290 ; SSE4-NEXT: pminsd %xmm3, %xmm1 1291 ; SSE4-NEXT: retq 1292 ; 1293 ; AVX1-LABEL: test42: 1294 ; AVX1: # BB#0: # %entry 1295 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1296 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1297 ; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 1298 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1299 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1300 ; AVX1-NEXT: retq 1301 ; 1302 ; AVX2-LABEL: test42: 1303 ; AVX2: # BB#0: # %entry 1304 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1305 ; AVX2-NEXT: retq 1306 ; 1307 ; AVX512F-LABEL: test42: 1308 ; AVX512F: # BB#0: # %entry 1309 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1310 ; AVX512F-NEXT: retq 1311 entry: 1312 %cmp = icmp sle <8 x i32> %a, %b 1313 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1314 ret <8 x i32> %sel 1315 } 1316 1317 define <8 x i32> @test43(<8 x i32> %a, <8 x i32> %b) { 1318 ; SSE2-LABEL: test43: 1319 ; SSE2: # BB#0: # %entry 1320 ; SSE2-NEXT: movdqa %xmm1, %xmm4 1321 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 1322 ; SSE2-NEXT: movdqa %xmm0, %xmm5 1323 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 1324 ; SSE2-NEXT: pand %xmm5, %xmm0 1325 ; SSE2-NEXT: pandn %xmm2, %xmm5 1326 ; SSE2-NEXT: por %xmm0, %xmm5 1327 ; SSE2-NEXT: pand %xmm4, %xmm1 1328 ; SSE2-NEXT: pandn %xmm3, %xmm4 1329 ; SSE2-NEXT: por %xmm1, %xmm4 1330 ; SSE2-NEXT: movdqa %xmm5, %xmm0 1331 ; SSE2-NEXT: movdqa %xmm4, %xmm1 1332 ; SSE2-NEXT: retq 1333 ; 1334 ; SSE4-LABEL: test43: 1335 ; SSE4: # BB#0: # %entry 1336 ; SSE4-NEXT: pmaxsd %xmm2, %xmm0 1337 ; SSE4-NEXT: pmaxsd %xmm3, %xmm1 1338 ; SSE4-NEXT: retq 1339 ; 1340 ; AVX1-LABEL: test43: 1341 ; AVX1: # BB#0: # %entry 1342 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1343 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1344 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 1345 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1346 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1347 ; AVX1-NEXT: retq 1348 ; 1349 ; AVX2-LABEL: test43: 1350 ; AVX2: # BB#0: # %entry 1351 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1352 ; AVX2-NEXT: retq 1353 ; 1354 ; AVX512F-LABEL: test43: 1355 ; AVX512F: # BB#0: # %entry 1356 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1357 ; AVX512F-NEXT: retq 1358 entry: 1359 %cmp = icmp sgt <8 x i32> %a, %b 1360 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1361 ret <8 x i32> %sel 1362 } 1363 1364 define <8 x i32> @test44(<8 x i32> %a, <8 x i32> %b) { 1365 ; SSE2-LABEL: test44: 1366 ; SSE2: # BB#0: # %entry 1367 ; SSE2-NEXT: movdqa %xmm3, %xmm6 1368 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm6 1369 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 1370 ; SSE2-NEXT: movdqa %xmm6, %xmm5 1371 ; SSE2-NEXT: pxor %xmm4, %xmm5 1372 ; SSE2-NEXT: movdqa %xmm2, %xmm7 1373 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm7 1374 ; SSE2-NEXT: pxor %xmm7, %xmm4 1375 ; SSE2-NEXT: pandn %xmm0, %xmm7 1376 ; SSE2-NEXT: pandn %xmm2, %xmm4 1377 ; SSE2-NEXT: por %xmm7, %xmm4 1378 ; SSE2-NEXT: pandn %xmm1, %xmm6 1379 ; SSE2-NEXT: pandn %xmm3, %xmm5 1380 ; SSE2-NEXT: por %xmm6, %xmm5 1381 ; SSE2-NEXT: movdqa %xmm4, %xmm0 1382 ; SSE2-NEXT: movdqa %xmm5, %xmm1 1383 ; SSE2-NEXT: retq 1384 ; 1385 ; SSE4-LABEL: test44: 1386 ; SSE4: # BB#0: # %entry 1387 ; SSE4-NEXT: pmaxsd %xmm2, %xmm0 1388 ; SSE4-NEXT: pmaxsd %xmm3, %xmm1 1389 ; SSE4-NEXT: retq 1390 ; 1391 ; AVX1-LABEL: test44: 1392 ; AVX1: # BB#0: # %entry 1393 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1394 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1395 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 1396 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1397 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1398 ; AVX1-NEXT: retq 1399 ; 1400 ; AVX2-LABEL: test44: 1401 ; AVX2: # BB#0: # %entry 1402 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1403 ; AVX2-NEXT: retq 1404 ; 1405 ; AVX512F-LABEL: test44: 1406 ; AVX512F: # BB#0: # %entry 1407 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1408 ; AVX512F-NEXT: retq 1409 entry: 1410 %cmp = icmp sge <8 x i32> %a, %b 1411 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1412 ret <8 x i32> %sel 1413 } 1414 1415 define <8 x i32> @test45(<8 x i32> %a, <8 x i32> %b) { 1416 ; SSE2-LABEL: test45: 1417 ; SSE2: # BB#0: # %entry 1418 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 1419 ; SSE2-NEXT: movdqa %xmm1, %xmm5 1420 ; SSE2-NEXT: pxor %xmm4, %xmm5 1421 ; SSE2-NEXT: movdqa %xmm3, %xmm6 1422 ; SSE2-NEXT: pxor %xmm4, %xmm6 1423 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 1424 ; SSE2-NEXT: movdqa %xmm0, %xmm5 1425 ; SSE2-NEXT: pxor %xmm4, %xmm5 1426 ; SSE2-NEXT: pxor %xmm2, %xmm4 1427 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 1428 ; SSE2-NEXT: pand %xmm4, %xmm0 1429 ; SSE2-NEXT: pandn %xmm2, %xmm4 1430 ; SSE2-NEXT: por %xmm4, %xmm0 1431 ; SSE2-NEXT: pand %xmm6, %xmm1 1432 ; SSE2-NEXT: pandn %xmm3, %xmm6 1433 ; SSE2-NEXT: por %xmm6, %xmm1 1434 ; SSE2-NEXT: retq 1435 ; 1436 ; SSE4-LABEL: test45: 1437 ; SSE4: # BB#0: # %entry 1438 ; SSE4-NEXT: pminud %xmm2, %xmm0 1439 ; SSE4-NEXT: pminud %xmm3, %xmm1 1440 ; SSE4-NEXT: retq 1441 ; 1442 ; AVX1-LABEL: test45: 1443 ; AVX1: # BB#0: # %entry 1444 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1445 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1446 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 1447 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 1448 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1449 ; AVX1-NEXT: retq 1450 ; 1451 ; AVX2-LABEL: test45: 1452 ; AVX2: # BB#0: # %entry 1453 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 1454 ; AVX2-NEXT: retq 1455 ; 1456 ; AVX512F-LABEL: test45: 1457 ; AVX512F: # BB#0: # %entry 1458 ; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0 1459 ; AVX512F-NEXT: retq 1460 entry: 1461 %cmp = icmp ult <8 x i32> %a, %b 1462 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1463 ret <8 x i32> %sel 1464 } 1465 1466 define <8 x i32> @test46(<8 x i32> %a, <8 x i32> %b) { 1467 ; SSE2-LABEL: test46: 1468 ; SSE2: # BB#0: # %entry 1469 ; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648] 1470 ; SSE2-NEXT: movdqa %xmm3, %xmm4 1471 ; SSE2-NEXT: pxor %xmm6, %xmm4 1472 ; SSE2-NEXT: movdqa %xmm1, %xmm7 1473 ; SSE2-NEXT: pxor %xmm6, %xmm7 1474 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 1475 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 1476 ; SSE2-NEXT: movdqa %xmm7, %xmm5 1477 ; SSE2-NEXT: pxor %xmm4, %xmm5 1478 ; SSE2-NEXT: movdqa %xmm2, %xmm8 1479 ; SSE2-NEXT: pxor %xmm6, %xmm8 1480 ; SSE2-NEXT: pxor %xmm0, %xmm6 1481 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm6 1482 ; SSE2-NEXT: pxor %xmm6, %xmm4 1483 ; SSE2-NEXT: pandn %xmm0, %xmm6 1484 ; SSE2-NEXT: pandn %xmm2, %xmm4 1485 ; SSE2-NEXT: por %xmm6, %xmm4 1486 ; SSE2-NEXT: pandn %xmm1, %xmm7 1487 ; SSE2-NEXT: pandn %xmm3, %xmm5 1488 ; SSE2-NEXT: por %xmm7, %xmm5 1489 ; SSE2-NEXT: movdqa %xmm4, %xmm0 1490 ; SSE2-NEXT: movdqa %xmm5, %xmm1 1491 ; SSE2-NEXT: retq 1492 ; 1493 ; SSE4-LABEL: test46: 1494 ; SSE4: # BB#0: # %entry 1495 ; SSE4-NEXT: pminud %xmm2, %xmm0 1496 ; SSE4-NEXT: pminud %xmm3, %xmm1 1497 ; SSE4-NEXT: retq 1498 ; 1499 ; AVX1-LABEL: test46: 1500 ; AVX1: # BB#0: # %entry 1501 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1502 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1503 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 1504 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 1505 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1506 ; AVX1-NEXT: retq 1507 ; 1508 ; AVX2-LABEL: test46: 1509 ; AVX2: # BB#0: # %entry 1510 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 1511 ; AVX2-NEXT: retq 1512 ; 1513 ; AVX512F-LABEL: test46: 1514 ; AVX512F: # BB#0: # %entry 1515 ; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0 1516 ; AVX512F-NEXT: retq 1517 entry: 1518 %cmp = icmp ule <8 x i32> %a, %b 1519 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1520 ret <8 x i32> %sel 1521 } 1522 1523 define <8 x i32> @test47(<8 x i32> %a, <8 x i32> %b) { 1524 ; SSE2-LABEL: test47: 1525 ; SSE2: # BB#0: # %entry 1526 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 1527 ; SSE2-NEXT: movdqa %xmm3, %xmm6 1528 ; SSE2-NEXT: pxor %xmm5, %xmm6 1529 ; SSE2-NEXT: movdqa %xmm1, %xmm4 1530 ; SSE2-NEXT: pxor %xmm5, %xmm4 1531 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 1532 ; SSE2-NEXT: movdqa %xmm2, %xmm6 1533 ; SSE2-NEXT: pxor %xmm5, %xmm6 1534 ; SSE2-NEXT: pxor %xmm0, %xmm5 1535 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 1536 ; SSE2-NEXT: pand %xmm5, %xmm0 1537 ; SSE2-NEXT: pandn %xmm2, %xmm5 1538 ; SSE2-NEXT: por %xmm5, %xmm0 1539 ; SSE2-NEXT: pand %xmm4, %xmm1 1540 ; SSE2-NEXT: pandn %xmm3, %xmm4 1541 ; SSE2-NEXT: por %xmm1, %xmm4 1542 ; SSE2-NEXT: movdqa %xmm4, %xmm1 1543 ; SSE2-NEXT: retq 1544 ; 1545 ; SSE4-LABEL: test47: 1546 ; SSE4: # BB#0: # %entry 1547 ; SSE4-NEXT: pmaxud %xmm2, %xmm0 1548 ; SSE4-NEXT: pmaxud %xmm3, %xmm1 1549 ; SSE4-NEXT: retq 1550 ; 1551 ; AVX1-LABEL: test47: 1552 ; AVX1: # BB#0: # %entry 1553 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1554 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1555 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 1556 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 1557 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1558 ; AVX1-NEXT: retq 1559 ; 1560 ; AVX2-LABEL: test47: 1561 ; AVX2: # BB#0: # %entry 1562 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1563 ; AVX2-NEXT: retq 1564 ; 1565 ; AVX512F-LABEL: test47: 1566 ; AVX512F: # BB#0: # %entry 1567 ; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1568 ; AVX512F-NEXT: retq 1569 entry: 1570 %cmp = icmp ugt <8 x i32> %a, %b 1571 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1572 ret <8 x i32> %sel 1573 } 1574 1575 define <8 x i32> @test48(<8 x i32> %a, <8 x i32> %b) { 1576 ; SSE2-LABEL: test48: 1577 ; SSE2: # BB#0: # %entry 1578 ; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648] 1579 ; SSE2-NEXT: movdqa %xmm1, %xmm4 1580 ; SSE2-NEXT: pxor %xmm6, %xmm4 1581 ; SSE2-NEXT: movdqa %xmm3, %xmm7 1582 ; SSE2-NEXT: pxor %xmm6, %xmm7 1583 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 1584 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 1585 ; SSE2-NEXT: movdqa %xmm7, %xmm5 1586 ; SSE2-NEXT: pxor %xmm4, %xmm5 1587 ; SSE2-NEXT: movdqa %xmm0, %xmm8 1588 ; SSE2-NEXT: pxor %xmm6, %xmm8 1589 ; SSE2-NEXT: pxor %xmm2, %xmm6 1590 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm6 1591 ; SSE2-NEXT: pxor %xmm6, %xmm4 1592 ; SSE2-NEXT: pandn %xmm0, %xmm6 1593 ; SSE2-NEXT: pandn %xmm2, %xmm4 1594 ; SSE2-NEXT: por %xmm6, %xmm4 1595 ; SSE2-NEXT: pandn %xmm1, %xmm7 1596 ; SSE2-NEXT: pandn %xmm3, %xmm5 1597 ; SSE2-NEXT: por %xmm7, %xmm5 1598 ; SSE2-NEXT: movdqa %xmm4, %xmm0 1599 ; SSE2-NEXT: movdqa %xmm5, %xmm1 1600 ; SSE2-NEXT: retq 1601 ; 1602 ; SSE4-LABEL: test48: 1603 ; SSE4: # BB#0: # %entry 1604 ; SSE4-NEXT: pmaxud %xmm2, %xmm0 1605 ; SSE4-NEXT: pmaxud %xmm3, %xmm1 1606 ; SSE4-NEXT: retq 1607 ; 1608 ; AVX1-LABEL: test48: 1609 ; AVX1: # BB#0: # %entry 1610 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1611 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1612 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 1613 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 1614 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1615 ; AVX1-NEXT: retq 1616 ; 1617 ; AVX2-LABEL: test48: 1618 ; AVX2: # BB#0: # %entry 1619 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1620 ; AVX2-NEXT: retq 1621 ; 1622 ; AVX512F-LABEL: test48: 1623 ; AVX512F: # BB#0: # %entry 1624 ; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1625 ; AVX512F-NEXT: retq 1626 entry: 1627 %cmp = icmp uge <8 x i32> %a, %b 1628 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1629 ret <8 x i32> %sel 1630 } 1631 1632 define <16 x i8> @test49(<16 x i8> %a, <16 x i8> %b) { 1633 ; SSE2-LABEL: test49: 1634 ; SSE2: # BB#0: # %entry 1635 ; SSE2-NEXT: movdqa %xmm1, %xmm2 1636 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm2 1637 ; SSE2-NEXT: pand %xmm2, %xmm1 1638 ; SSE2-NEXT: pandn %xmm0, %xmm2 1639 ; SSE2-NEXT: por %xmm1, %xmm2 1640 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1641 ; SSE2-NEXT: retq 1642 ; 1643 ; SSE4-LABEL: test49: 1644 ; SSE4: # BB#0: # %entry 1645 ; SSE4-NEXT: pmaxsb %xmm1, %xmm0 1646 ; SSE4-NEXT: retq 1647 ; 1648 ; AVX-LABEL: test49: 1649 ; AVX: # BB#0: # %entry 1650 ; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 1651 ; AVX-NEXT: retq 1652 entry: 1653 %cmp = icmp slt <16 x i8> %a, %b 1654 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1655 ret <16 x i8> %sel 1656 } 1657 1658 define <16 x i8> @test50(<16 x i8> %a, <16 x i8> %b) { 1659 ; SSE2-LABEL: test50: 1660 ; SSE2: # BB#0: # %entry 1661 ; SSE2-NEXT: movdqa %xmm0, %xmm2 1662 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 1663 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm3 1664 ; SSE2-NEXT: pxor %xmm2, %xmm3 1665 ; SSE2-NEXT: pandn %xmm1, %xmm2 1666 ; SSE2-NEXT: pandn %xmm0, %xmm3 1667 ; SSE2-NEXT: por %xmm3, %xmm2 1668 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1669 ; SSE2-NEXT: retq 1670 ; 1671 ; SSE4-LABEL: test50: 1672 ; SSE4: # BB#0: # %entry 1673 ; SSE4-NEXT: pmaxsb %xmm1, %xmm0 1674 ; SSE4-NEXT: retq 1675 ; 1676 ; AVX-LABEL: test50: 1677 ; AVX: # BB#0: # %entry 1678 ; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 1679 ; AVX-NEXT: retq 1680 entry: 1681 %cmp = icmp sle <16 x i8> %a, %b 1682 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1683 ret <16 x i8> %sel 1684 } 1685 1686 define <16 x i8> @test51(<16 x i8> %a, <16 x i8> %b) { 1687 ; SSE2-LABEL: test51: 1688 ; SSE2: # BB#0: # %entry 1689 ; SSE2-NEXT: movdqa %xmm0, %xmm2 1690 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 1691 ; SSE2-NEXT: pand %xmm2, %xmm1 1692 ; SSE2-NEXT: pandn %xmm0, %xmm2 1693 ; SSE2-NEXT: por %xmm1, %xmm2 1694 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1695 ; SSE2-NEXT: retq 1696 ; 1697 ; SSE4-LABEL: test51: 1698 ; SSE4: # BB#0: # %entry 1699 ; SSE4-NEXT: pminsb %xmm1, %xmm0 1700 ; SSE4-NEXT: retq 1701 ; 1702 ; AVX-LABEL: test51: 1703 ; AVX: # BB#0: # %entry 1704 ; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0 1705 ; AVX-NEXT: retq 1706 entry: 1707 %cmp = icmp sgt <16 x i8> %a, %b 1708 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1709 ret <16 x i8> %sel 1710 } 1711 1712 define <16 x i8> @test52(<16 x i8> %a, <16 x i8> %b) { 1713 ; SSE2-LABEL: test52: 1714 ; SSE2: # BB#0: # %entry 1715 ; SSE2-NEXT: movdqa %xmm1, %xmm3 1716 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm3 1717 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 1718 ; SSE2-NEXT: pxor %xmm3, %xmm2 1719 ; SSE2-NEXT: pandn %xmm1, %xmm3 1720 ; SSE2-NEXT: pandn %xmm0, %xmm2 1721 ; SSE2-NEXT: por %xmm3, %xmm2 1722 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1723 ; SSE2-NEXT: retq 1724 ; 1725 ; SSE4-LABEL: test52: 1726 ; SSE4: # BB#0: # %entry 1727 ; SSE4-NEXT: pminsb %xmm1, %xmm0 1728 ; SSE4-NEXT: retq 1729 ; 1730 ; AVX-LABEL: test52: 1731 ; AVX: # BB#0: # %entry 1732 ; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0 1733 ; AVX-NEXT: retq 1734 entry: 1735 %cmp = icmp sge <16 x i8> %a, %b 1736 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1737 ret <16 x i8> %sel 1738 } 1739 1740 define <16 x i8> @test53(<16 x i8> %a, <16 x i8> %b) { 1741 ; SSE-LABEL: test53: 1742 ; SSE: # BB#0: # %entry 1743 ; SSE-NEXT: pmaxub %xmm1, %xmm0 1744 ; SSE-NEXT: retq 1745 ; 1746 ; AVX-LABEL: test53: 1747 ; AVX: # BB#0: # %entry 1748 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 1749 ; AVX-NEXT: retq 1750 entry: 1751 %cmp = icmp ult <16 x i8> %a, %b 1752 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1753 ret <16 x i8> %sel 1754 } 1755 1756 define <16 x i8> @test54(<16 x i8> %a, <16 x i8> %b) { 1757 ; SSE-LABEL: test54: 1758 ; SSE: # BB#0: # %entry 1759 ; SSE-NEXT: pmaxub %xmm1, %xmm0 1760 ; SSE-NEXT: retq 1761 ; 1762 ; AVX-LABEL: test54: 1763 ; AVX: # BB#0: # %entry 1764 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 1765 ; AVX-NEXT: retq 1766 entry: 1767 %cmp = icmp ule <16 x i8> %a, %b 1768 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1769 ret <16 x i8> %sel 1770 } 1771 1772 define <16 x i8> @test55(<16 x i8> %a, <16 x i8> %b) { 1773 ; SSE-LABEL: test55: 1774 ; SSE: # BB#0: # %entry 1775 ; SSE-NEXT: pminub %xmm1, %xmm0 1776 ; SSE-NEXT: retq 1777 ; 1778 ; AVX-LABEL: test55: 1779 ; AVX: # BB#0: # %entry 1780 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 1781 ; AVX-NEXT: retq 1782 entry: 1783 %cmp = icmp ugt <16 x i8> %a, %b 1784 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1785 ret <16 x i8> %sel 1786 } 1787 1788 define <16 x i8> @test56(<16 x i8> %a, <16 x i8> %b) { 1789 ; SSE-LABEL: test56: 1790 ; SSE: # BB#0: # %entry 1791 ; SSE-NEXT: pminub %xmm1, %xmm0 1792 ; SSE-NEXT: retq 1793 ; 1794 ; AVX-LABEL: test56: 1795 ; AVX: # BB#0: # %entry 1796 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 1797 ; AVX-NEXT: retq 1798 entry: 1799 %cmp = icmp uge <16 x i8> %a, %b 1800 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1801 ret <16 x i8> %sel 1802 } 1803 1804 define <8 x i16> @test57(<8 x i16> %a, <8 x i16> %b) { 1805 ; SSE-LABEL: test57: 1806 ; SSE: # BB#0: # %entry 1807 ; SSE-NEXT: pmaxsw %xmm1, %xmm0 1808 ; SSE-NEXT: retq 1809 ; 1810 ; AVX-LABEL: test57: 1811 ; AVX: # BB#0: # %entry 1812 ; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 1813 ; AVX-NEXT: retq 1814 entry: 1815 %cmp = icmp slt <8 x i16> %a, %b 1816 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1817 ret <8 x i16> %sel 1818 } 1819 1820 define <8 x i16> @test58(<8 x i16> %a, <8 x i16> %b) { 1821 ; SSE-LABEL: test58: 1822 ; SSE: # BB#0: # %entry 1823 ; SSE-NEXT: pmaxsw %xmm1, %xmm0 1824 ; SSE-NEXT: retq 1825 ; 1826 ; AVX-LABEL: test58: 1827 ; AVX: # BB#0: # %entry 1828 ; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 1829 ; AVX-NEXT: retq 1830 entry: 1831 %cmp = icmp sle <8 x i16> %a, %b 1832 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1833 ret <8 x i16> %sel 1834 } 1835 1836 define <8 x i16> @test59(<8 x i16> %a, <8 x i16> %b) { 1837 ; SSE-LABEL: test59: 1838 ; SSE: # BB#0: # %entry 1839 ; SSE-NEXT: pminsw %xmm1, %xmm0 1840 ; SSE-NEXT: retq 1841 ; 1842 ; AVX-LABEL: test59: 1843 ; AVX: # BB#0: # %entry 1844 ; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 1845 ; AVX-NEXT: retq 1846 entry: 1847 %cmp = icmp sgt <8 x i16> %a, %b 1848 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1849 ret <8 x i16> %sel 1850 } 1851 1852 define <8 x i16> @test60(<8 x i16> %a, <8 x i16> %b) { 1853 ; SSE-LABEL: test60: 1854 ; SSE: # BB#0: # %entry 1855 ; SSE-NEXT: pminsw %xmm1, %xmm0 1856 ; SSE-NEXT: retq 1857 ; 1858 ; AVX-LABEL: test60: 1859 ; AVX: # BB#0: # %entry 1860 ; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 1861 ; AVX-NEXT: retq 1862 entry: 1863 %cmp = icmp sge <8 x i16> %a, %b 1864 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1865 ret <8 x i16> %sel 1866 } 1867 1868 define <8 x i16> @test61(<8 x i16> %a, <8 x i16> %b) { 1869 ; SSE2-LABEL: test61: 1870 ; SSE2: # BB#0: # %entry 1871 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 1872 ; SSE2-NEXT: movdqa %xmm0, %xmm3 1873 ; SSE2-NEXT: pxor %xmm2, %xmm3 1874 ; SSE2-NEXT: pxor %xmm1, %xmm2 1875 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm2 1876 ; SSE2-NEXT: pand %xmm2, %xmm1 1877 ; SSE2-NEXT: pandn %xmm0, %xmm2 1878 ; SSE2-NEXT: por %xmm1, %xmm2 1879 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1880 ; SSE2-NEXT: retq 1881 ; 1882 ; SSE4-LABEL: test61: 1883 ; SSE4: # BB#0: # %entry 1884 ; SSE4-NEXT: pmaxuw %xmm1, %xmm0 1885 ; SSE4-NEXT: retq 1886 ; 1887 ; AVX-LABEL: test61: 1888 ; AVX: # BB#0: # %entry 1889 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1890 ; AVX-NEXT: retq 1891 entry: 1892 %cmp = icmp ult <8 x i16> %a, %b 1893 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1894 ret <8 x i16> %sel 1895 } 1896 1897 define <8 x i16> @test62(<8 x i16> %a, <8 x i16> %b) { 1898 ; SSE2-LABEL: test62: 1899 ; SSE2: # BB#0: # %entry 1900 ; SSE2-NEXT: movdqa %xmm0, %xmm3 1901 ; SSE2-NEXT: psubusw %xmm1, %xmm3 1902 ; SSE2-NEXT: pxor %xmm2, %xmm2 1903 ; SSE2-NEXT: pcmpeqw %xmm3, %xmm2 1904 ; SSE2-NEXT: pand %xmm2, %xmm1 1905 ; SSE2-NEXT: pandn %xmm0, %xmm2 1906 ; SSE2-NEXT: por %xmm1, %xmm2 1907 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1908 ; SSE2-NEXT: retq 1909 ; 1910 ; SSE4-LABEL: test62: 1911 ; SSE4: # BB#0: # %entry 1912 ; SSE4-NEXT: pmaxuw %xmm1, %xmm0 1913 ; SSE4-NEXT: retq 1914 ; 1915 ; AVX-LABEL: test62: 1916 ; AVX: # BB#0: # %entry 1917 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1918 ; AVX-NEXT: retq 1919 entry: 1920 %cmp = icmp ule <8 x i16> %a, %b 1921 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1922 ret <8 x i16> %sel 1923 } 1924 1925 define <8 x i16> @test63(<8 x i16> %a, <8 x i16> %b) { 1926 ; SSE2-LABEL: test63: 1927 ; SSE2: # BB#0: # %entry 1928 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 1929 ; SSE2-NEXT: movdqa %xmm1, %xmm3 1930 ; SSE2-NEXT: pxor %xmm2, %xmm3 1931 ; SSE2-NEXT: pxor %xmm0, %xmm2 1932 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm2 1933 ; SSE2-NEXT: pand %xmm2, %xmm1 1934 ; SSE2-NEXT: pandn %xmm0, %xmm2 1935 ; SSE2-NEXT: por %xmm1, %xmm2 1936 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1937 ; SSE2-NEXT: retq 1938 ; 1939 ; SSE4-LABEL: test63: 1940 ; SSE4: # BB#0: # %entry 1941 ; SSE4-NEXT: pminuw %xmm1, %xmm0 1942 ; SSE4-NEXT: retq 1943 ; 1944 ; AVX-LABEL: test63: 1945 ; AVX: # BB#0: # %entry 1946 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1947 ; AVX-NEXT: retq 1948 entry: 1949 %cmp = icmp ugt <8 x i16> %a, %b 1950 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1951 ret <8 x i16> %sel 1952 } 1953 1954 define <8 x i16> @test64(<8 x i16> %a, <8 x i16> %b) { 1955 ; SSE2-LABEL: test64: 1956 ; SSE2: # BB#0: # %entry 1957 ; SSE2-NEXT: movdqa %xmm1, %xmm3 1958 ; SSE2-NEXT: psubusw %xmm0, %xmm3 1959 ; SSE2-NEXT: pxor %xmm2, %xmm2 1960 ; SSE2-NEXT: pcmpeqw %xmm3, %xmm2 1961 ; SSE2-NEXT: pand %xmm2, %xmm1 1962 ; SSE2-NEXT: pandn %xmm0, %xmm2 1963 ; SSE2-NEXT: por %xmm1, %xmm2 1964 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1965 ; SSE2-NEXT: retq 1966 ; 1967 ; SSE4-LABEL: test64: 1968 ; SSE4: # BB#0: # %entry 1969 ; SSE4-NEXT: pminuw %xmm1, %xmm0 1970 ; SSE4-NEXT: retq 1971 ; 1972 ; AVX-LABEL: test64: 1973 ; AVX: # BB#0: # %entry 1974 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1975 ; AVX-NEXT: retq 1976 entry: 1977 %cmp = icmp uge <8 x i16> %a, %b 1978 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1979 ret <8 x i16> %sel 1980 } 1981 1982 define <4 x i32> @test65(<4 x i32> %a, <4 x i32> %b) { 1983 ; SSE2-LABEL: test65: 1984 ; SSE2: # BB#0: # %entry 1985 ; SSE2-NEXT: movdqa %xmm1, %xmm2 1986 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 1987 ; SSE2-NEXT: pand %xmm2, %xmm1 1988 ; SSE2-NEXT: pandn %xmm0, %xmm2 1989 ; SSE2-NEXT: por %xmm1, %xmm2 1990 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1991 ; SSE2-NEXT: retq 1992 ; 1993 ; SSE4-LABEL: test65: 1994 ; SSE4: # BB#0: # %entry 1995 ; SSE4-NEXT: pmaxsd %xmm1, %xmm0 1996 ; SSE4-NEXT: retq 1997 ; 1998 ; AVX-LABEL: test65: 1999 ; AVX: # BB#0: # %entry 2000 ; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2001 ; AVX-NEXT: retq 2002 entry: 2003 %cmp = icmp slt <4 x i32> %a, %b 2004 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2005 ret <4 x i32> %sel 2006 } 2007 2008 define <4 x i32> @test66(<4 x i32> %a, <4 x i32> %b) { 2009 ; SSE2-LABEL: test66: 2010 ; SSE2: # BB#0: # %entry 2011 ; SSE2-NEXT: movdqa %xmm0, %xmm2 2012 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 2013 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm3 2014 ; SSE2-NEXT: pxor %xmm2, %xmm3 2015 ; SSE2-NEXT: pandn %xmm1, %xmm2 2016 ; SSE2-NEXT: pandn %xmm0, %xmm3 2017 ; SSE2-NEXT: por %xmm3, %xmm2 2018 ; SSE2-NEXT: movdqa %xmm2, %xmm0 2019 ; SSE2-NEXT: retq 2020 ; 2021 ; SSE4-LABEL: test66: 2022 ; SSE4: # BB#0: # %entry 2023 ; SSE4-NEXT: pmaxsd %xmm1, %xmm0 2024 ; SSE4-NEXT: retq 2025 ; 2026 ; AVX-LABEL: test66: 2027 ; AVX: # BB#0: # %entry 2028 ; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2029 ; AVX-NEXT: retq 2030 entry: 2031 %cmp = icmp sle <4 x i32> %a, %b 2032 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2033 ret <4 x i32> %sel 2034 } 2035 2036 define <4 x i32> @test67(<4 x i32> %a, <4 x i32> %b) { 2037 ; SSE2-LABEL: test67: 2038 ; SSE2: # BB#0: # %entry 2039 ; SSE2-NEXT: movdqa %xmm0, %xmm2 2040 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 2041 ; SSE2-NEXT: pand %xmm2, %xmm1 2042 ; SSE2-NEXT: pandn %xmm0, %xmm2 2043 ; SSE2-NEXT: por %xmm1, %xmm2 2044 ; SSE2-NEXT: movdqa %xmm2, %xmm0 2045 ; SSE2-NEXT: retq 2046 ; 2047 ; SSE4-LABEL: test67: 2048 ; SSE4: # BB#0: # %entry 2049 ; SSE4-NEXT: pminsd %xmm1, %xmm0 2050 ; SSE4-NEXT: retq 2051 ; 2052 ; AVX-LABEL: test67: 2053 ; AVX: # BB#0: # %entry 2054 ; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 2055 ; AVX-NEXT: retq 2056 entry: 2057 %cmp = icmp sgt <4 x i32> %a, %b 2058 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2059 ret <4 x i32> %sel 2060 } 2061 2062 define <4 x i32> @test68(<4 x i32> %a, <4 x i32> %b) { 2063 ; SSE2-LABEL: test68: 2064 ; SSE2: # BB#0: # %entry 2065 ; SSE2-NEXT: movdqa %xmm1, %xmm3 2066 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm3 2067 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 2068 ; SSE2-NEXT: pxor %xmm3, %xmm2 2069 ; SSE2-NEXT: pandn %xmm1, %xmm3 2070 ; SSE2-NEXT: pandn %xmm0, %xmm2 2071 ; SSE2-NEXT: por %xmm3, %xmm2 2072 ; SSE2-NEXT: movdqa %xmm2, %xmm0 2073 ; SSE2-NEXT: retq 2074 ; 2075 ; SSE4-LABEL: test68: 2076 ; SSE4: # BB#0: # %entry 2077 ; SSE4-NEXT: pminsd %xmm1, %xmm0 2078 ; SSE4-NEXT: retq 2079 ; 2080 ; AVX-LABEL: test68: 2081 ; AVX: # BB#0: # %entry 2082 ; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 2083 ; AVX-NEXT: retq 2084 entry: 2085 %cmp = icmp sge <4 x i32> %a, %b 2086 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2087 ret <4 x i32> %sel 2088 } 2089 2090 define <4 x i32> @test69(<4 x i32> %a, <4 x i32> %b) { 2091 ; SSE2-LABEL: test69: 2092 ; SSE2: # BB#0: # %entry 2093 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 2094 ; SSE2-NEXT: movdqa %xmm0, %xmm3 2095 ; SSE2-NEXT: pxor %xmm2, %xmm3 2096 ; SSE2-NEXT: pxor %xmm1, %xmm2 2097 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2098 ; SSE2-NEXT: pand %xmm2, %xmm1 2099 ; SSE2-NEXT: pandn %xmm0, %xmm2 2100 ; SSE2-NEXT: por %xmm1, %xmm2 2101 ; SSE2-NEXT: movdqa %xmm2, %xmm0 2102 ; SSE2-NEXT: retq 2103 ; 2104 ; SSE4-LABEL: test69: 2105 ; SSE4: # BB#0: # %entry 2106 ; SSE4-NEXT: pmaxud %xmm1, %xmm0 2107 ; SSE4-NEXT: retq 2108 ; 2109 ; AVX-LABEL: test69: 2110 ; AVX: # BB#0: # %entry 2111 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 2112 ; AVX-NEXT: retq 2113 entry: 2114 %cmp = icmp ult <4 x i32> %a, %b 2115 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2116 ret <4 x i32> %sel 2117 } 2118 2119 define <4 x i32> @test70(<4 x i32> %a, <4 x i32> %b) { 2120 ; SSE2-LABEL: test70: 2121 ; SSE2: # BB#0: # %entry 2122 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648] 2123 ; SSE2-NEXT: movdqa %xmm1, %xmm2 2124 ; SSE2-NEXT: pxor %xmm3, %xmm2 2125 ; SSE2-NEXT: pxor %xmm0, %xmm3 2126 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3 2127 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 2128 ; SSE2-NEXT: pxor %xmm3, %xmm2 2129 ; SSE2-NEXT: pandn %xmm1, %xmm3 2130 ; SSE2-NEXT: pandn %xmm0, %xmm2 2131 ; SSE2-NEXT: por %xmm3, %xmm2 2132 ; SSE2-NEXT: movdqa %xmm2, %xmm0 2133 ; SSE2-NEXT: retq 2134 ; 2135 ; SSE4-LABEL: test70: 2136 ; SSE4: # BB#0: # %entry 2137 ; SSE4-NEXT: pmaxud %xmm1, %xmm0 2138 ; SSE4-NEXT: retq 2139 ; 2140 ; AVX-LABEL: test70: 2141 ; AVX: # BB#0: # %entry 2142 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 2143 ; AVX-NEXT: retq 2144 entry: 2145 %cmp = icmp ule <4 x i32> %a, %b 2146 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2147 ret <4 x i32> %sel 2148 } 2149 2150 define <4 x i32> @test71(<4 x i32> %a, <4 x i32> %b) { 2151 ; SSE2-LABEL: test71: 2152 ; SSE2: # BB#0: # %entry 2153 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 2154 ; SSE2-NEXT: movdqa %xmm1, %xmm3 2155 ; SSE2-NEXT: pxor %xmm2, %xmm3 2156 ; SSE2-NEXT: pxor %xmm0, %xmm2 2157 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2158 ; SSE2-NEXT: pand %xmm2, %xmm1 2159 ; SSE2-NEXT: pandn %xmm0, %xmm2 2160 ; SSE2-NEXT: por %xmm1, %xmm2 2161 ; SSE2-NEXT: movdqa %xmm2, %xmm0 2162 ; SSE2-NEXT: retq 2163 ; 2164 ; SSE4-LABEL: test71: 2165 ; SSE4: # BB#0: # %entry 2166 ; SSE4-NEXT: pminud %xmm1, %xmm0 2167 ; SSE4-NEXT: retq 2168 ; 2169 ; AVX-LABEL: test71: 2170 ; AVX: # BB#0: # %entry 2171 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 2172 ; AVX-NEXT: retq 2173 entry: 2174 %cmp = icmp ugt <4 x i32> %a, %b 2175 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2176 ret <4 x i32> %sel 2177 } 2178 2179 define <4 x i32> @test72(<4 x i32> %a, <4 x i32> %b) { 2180 ; SSE2-LABEL: test72: 2181 ; SSE2: # BB#0: # %entry 2182 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648] 2183 ; SSE2-NEXT: movdqa %xmm0, %xmm2 2184 ; SSE2-NEXT: pxor %xmm3, %xmm2 2185 ; SSE2-NEXT: pxor %xmm1, %xmm3 2186 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3 2187 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 2188 ; SSE2-NEXT: pxor %xmm3, %xmm2 2189 ; SSE2-NEXT: pandn %xmm1, %xmm3 2190 ; SSE2-NEXT: pandn %xmm0, %xmm2 2191 ; SSE2-NEXT: por %xmm3, %xmm2 2192 ; SSE2-NEXT: movdqa %xmm2, %xmm0 2193 ; SSE2-NEXT: retq 2194 ; 2195 ; SSE4-LABEL: test72: 2196 ; SSE4: # BB#0: # %entry 2197 ; SSE4-NEXT: pminud %xmm1, %xmm0 2198 ; SSE4-NEXT: retq 2199 ; 2200 ; AVX-LABEL: test72: 2201 ; AVX: # BB#0: # %entry 2202 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 2203 ; AVX-NEXT: retq 2204 entry: 2205 %cmp = icmp uge <4 x i32> %a, %b 2206 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2207 ret <4 x i32> %sel 2208 } 2209 2210 define <32 x i8> @test73(<32 x i8> %a, <32 x i8> %b) { 2211 ; SSE2-LABEL: test73: 2212 ; SSE2: # BB#0: # %entry 2213 ; SSE2-NEXT: movdqa %xmm3, %xmm4 2214 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 2215 ; SSE2-NEXT: movdqa %xmm2, %xmm5 2216 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm5 2217 ; SSE2-NEXT: pand %xmm5, %xmm2 2218 ; SSE2-NEXT: pandn %xmm0, %xmm5 2219 ; SSE2-NEXT: por %xmm2, %xmm5 2220 ; SSE2-NEXT: pand %xmm4, %xmm3 2221 ; SSE2-NEXT: pandn %xmm1, %xmm4 2222 ; SSE2-NEXT: por %xmm3, %xmm4 2223 ; SSE2-NEXT: movdqa %xmm5, %xmm0 2224 ; SSE2-NEXT: movdqa %xmm4, %xmm1 2225 ; SSE2-NEXT: retq 2226 ; 2227 ; SSE4-LABEL: test73: 2228 ; SSE4: # BB#0: # %entry 2229 ; SSE4-NEXT: pmaxsb %xmm2, %xmm0 2230 ; SSE4-NEXT: pmaxsb %xmm3, %xmm1 2231 ; SSE4-NEXT: retq 2232 ; 2233 ; AVX1-LABEL: test73: 2234 ; AVX1: # BB#0: # %entry 2235 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2236 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2237 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 2238 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 2239 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2240 ; AVX1-NEXT: retq 2241 ; 2242 ; AVX2-LABEL: test73: 2243 ; AVX2: # BB#0: # %entry 2244 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2245 ; AVX2-NEXT: retq 2246 ; 2247 ; AVX512F-LABEL: test73: 2248 ; AVX512F: # BB#0: # %entry 2249 ; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2250 ; AVX512F-NEXT: retq 2251 entry: 2252 %cmp = icmp slt <32 x i8> %a, %b 2253 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2254 ret <32 x i8> %sel 2255 } 2256 2257 define <32 x i8> @test74(<32 x i8> %a, <32 x i8> %b) { 2258 ; SSE2-LABEL: test74: 2259 ; SSE2: # BB#0: # %entry 2260 ; SSE2-NEXT: movdqa %xmm1, %xmm6 2261 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm6 2262 ; SSE2-NEXT: pcmpeqd %xmm7, %xmm7 2263 ; SSE2-NEXT: movdqa %xmm6, %xmm4 2264 ; SSE2-NEXT: pxor %xmm7, %xmm4 2265 ; SSE2-NEXT: movdqa %xmm0, %xmm5 2266 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm5 2267 ; SSE2-NEXT: pxor %xmm5, %xmm7 2268 ; SSE2-NEXT: pandn %xmm2, %xmm5 2269 ; SSE2-NEXT: pandn %xmm0, %xmm7 2270 ; SSE2-NEXT: por %xmm7, %xmm5 2271 ; SSE2-NEXT: pandn %xmm3, %xmm6 2272 ; SSE2-NEXT: pandn %xmm1, %xmm4 2273 ; SSE2-NEXT: por %xmm6, %xmm4 2274 ; SSE2-NEXT: movdqa %xmm5, %xmm0 2275 ; SSE2-NEXT: movdqa %xmm4, %xmm1 2276 ; SSE2-NEXT: retq 2277 ; 2278 ; SSE4-LABEL: test74: 2279 ; SSE4: # BB#0: # %entry 2280 ; SSE4-NEXT: pmaxsb %xmm2, %xmm0 2281 ; SSE4-NEXT: pmaxsb %xmm3, %xmm1 2282 ; SSE4-NEXT: retq 2283 ; 2284 ; AVX1-LABEL: test74: 2285 ; AVX1: # BB#0: # %entry 2286 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2287 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2288 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 2289 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 2290 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2291 ; AVX1-NEXT: retq 2292 ; 2293 ; AVX2-LABEL: test74: 2294 ; AVX2: # BB#0: # %entry 2295 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2296 ; AVX2-NEXT: retq 2297 ; 2298 ; AVX512F-LABEL: test74: 2299 ; AVX512F: # BB#0: # %entry 2300 ; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2301 ; AVX512F-NEXT: retq 2302 entry: 2303 %cmp = icmp sle <32 x i8> %a, %b 2304 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2305 ret <32 x i8> %sel 2306 } 2307 2308 define <32 x i8> @test75(<32 x i8> %a, <32 x i8> %b) { 2309 ; SSE2-LABEL: test75: 2310 ; SSE2: # BB#0: # %entry 2311 ; SSE2-NEXT: movdqa %xmm1, %xmm4 2312 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 2313 ; SSE2-NEXT: movdqa %xmm0, %xmm5 2314 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm5 2315 ; SSE2-NEXT: pand %xmm5, %xmm2 2316 ; SSE2-NEXT: pandn %xmm0, %xmm5 2317 ; SSE2-NEXT: por %xmm2, %xmm5 2318 ; SSE2-NEXT: pand %xmm4, %xmm3 2319 ; SSE2-NEXT: pandn %xmm1, %xmm4 2320 ; SSE2-NEXT: por %xmm3, %xmm4 2321 ; SSE2-NEXT: movdqa %xmm5, %xmm0 2322 ; SSE2-NEXT: movdqa %xmm4, %xmm1 2323 ; SSE2-NEXT: retq 2324 ; 2325 ; SSE4-LABEL: test75: 2326 ; SSE4: # BB#0: # %entry 2327 ; SSE4-NEXT: pminsb %xmm2, %xmm0 2328 ; SSE4-NEXT: pminsb %xmm3, %xmm1 2329 ; SSE4-NEXT: retq 2330 ; 2331 ; AVX1-LABEL: test75: 2332 ; AVX1: # BB#0: # %entry 2333 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2334 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2335 ; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 2336 ; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 2337 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2338 ; AVX1-NEXT: retq 2339 ; 2340 ; AVX2-LABEL: test75: 2341 ; AVX2: # BB#0: # %entry 2342 ; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2343 ; AVX2-NEXT: retq 2344 ; 2345 ; AVX512F-LABEL: test75: 2346 ; AVX512F: # BB#0: # %entry 2347 ; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2348 ; AVX512F-NEXT: retq 2349 entry: 2350 %cmp = icmp sgt <32 x i8> %a, %b 2351 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2352 ret <32 x i8> %sel 2353 } 2354 2355 define <32 x i8> @test76(<32 x i8> %a, <32 x i8> %b) { 2356 ; SSE2-LABEL: test76: 2357 ; SSE2: # BB#0: # %entry 2358 ; SSE2-NEXT: movdqa %xmm3, %xmm6 2359 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm6 2360 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 2361 ; SSE2-NEXT: movdqa %xmm6, %xmm5 2362 ; SSE2-NEXT: pxor %xmm4, %xmm5 2363 ; SSE2-NEXT: movdqa %xmm2, %xmm7 2364 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm7 2365 ; SSE2-NEXT: pxor %xmm7, %xmm4 2366 ; SSE2-NEXT: pandn %xmm2, %xmm7 2367 ; SSE2-NEXT: pandn %xmm0, %xmm4 2368 ; SSE2-NEXT: por %xmm7, %xmm4 2369 ; SSE2-NEXT: pandn %xmm3, %xmm6 2370 ; SSE2-NEXT: pandn %xmm1, %xmm5 2371 ; SSE2-NEXT: por %xmm6, %xmm5 2372 ; SSE2-NEXT: movdqa %xmm4, %xmm0 2373 ; SSE2-NEXT: movdqa %xmm5, %xmm1 2374 ; SSE2-NEXT: retq 2375 ; 2376 ; SSE4-LABEL: test76: 2377 ; SSE4: # BB#0: # %entry 2378 ; SSE4-NEXT: pminsb %xmm2, %xmm0 2379 ; SSE4-NEXT: pminsb %xmm3, %xmm1 2380 ; SSE4-NEXT: retq 2381 ; 2382 ; AVX1-LABEL: test76: 2383 ; AVX1: # BB#0: # %entry 2384 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2385 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2386 ; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 2387 ; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 2388 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2389 ; AVX1-NEXT: retq 2390 ; 2391 ; AVX2-LABEL: test76: 2392 ; AVX2: # BB#0: # %entry 2393 ; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2394 ; AVX2-NEXT: retq 2395 ; 2396 ; AVX512F-LABEL: test76: 2397 ; AVX512F: # BB#0: # %entry 2398 ; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2399 ; AVX512F-NEXT: retq 2400 entry: 2401 %cmp = icmp sge <32 x i8> %a, %b 2402 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2403 ret <32 x i8> %sel 2404 } 2405 2406 define <32 x i8> @test77(<32 x i8> %a, <32 x i8> %b) { 2407 ; SSE-LABEL: test77: 2408 ; SSE: # BB#0: # %entry 2409 ; SSE-NEXT: pmaxub %xmm2, %xmm0 2410 ; SSE-NEXT: pmaxub %xmm3, %xmm1 2411 ; SSE-NEXT: retq 2412 ; 2413 ; AVX1-LABEL: test77: 2414 ; AVX1: # BB#0: # %entry 2415 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2416 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2417 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 2418 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 2419 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2420 ; AVX1-NEXT: retq 2421 ; 2422 ; AVX2-LABEL: test77: 2423 ; AVX2: # BB#0: # %entry 2424 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2425 ; AVX2-NEXT: retq 2426 ; 2427 ; AVX512F-LABEL: test77: 2428 ; AVX512F: # BB#0: # %entry 2429 ; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2430 ; AVX512F-NEXT: retq 2431 entry: 2432 %cmp = icmp ult <32 x i8> %a, %b 2433 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2434 ret <32 x i8> %sel 2435 } 2436 2437 define <32 x i8> @test78(<32 x i8> %a, <32 x i8> %b) { 2438 ; SSE-LABEL: test78: 2439 ; SSE: # BB#0: # %entry 2440 ; SSE-NEXT: pmaxub %xmm2, %xmm0 2441 ; SSE-NEXT: pmaxub %xmm3, %xmm1 2442 ; SSE-NEXT: retq 2443 ; 2444 ; AVX1-LABEL: test78: 2445 ; AVX1: # BB#0: # %entry 2446 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2447 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2448 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 2449 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 2450 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2451 ; AVX1-NEXT: retq 2452 ; 2453 ; AVX2-LABEL: test78: 2454 ; AVX2: # BB#0: # %entry 2455 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2456 ; AVX2-NEXT: retq 2457 ; 2458 ; AVX512F-LABEL: test78: 2459 ; AVX512F: # BB#0: # %entry 2460 ; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2461 ; AVX512F-NEXT: retq 2462 entry: 2463 %cmp = icmp ule <32 x i8> %a, %b 2464 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2465 ret <32 x i8> %sel 2466 } 2467 2468 define <32 x i8> @test79(<32 x i8> %a, <32 x i8> %b) { 2469 ; SSE-LABEL: test79: 2470 ; SSE: # BB#0: # %entry 2471 ; SSE-NEXT: pminub %xmm2, %xmm0 2472 ; SSE-NEXT: pminub %xmm3, %xmm1 2473 ; SSE-NEXT: retq 2474 ; 2475 ; AVX1-LABEL: test79: 2476 ; AVX1: # BB#0: # %entry 2477 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2478 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2479 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 2480 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 2481 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2482 ; AVX1-NEXT: retq 2483 ; 2484 ; AVX2-LABEL: test79: 2485 ; AVX2: # BB#0: # %entry 2486 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 2487 ; AVX2-NEXT: retq 2488 ; 2489 ; AVX512F-LABEL: test79: 2490 ; AVX512F: # BB#0: # %entry 2491 ; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 2492 ; AVX512F-NEXT: retq 2493 entry: 2494 %cmp = icmp ugt <32 x i8> %a, %b 2495 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2496 ret <32 x i8> %sel 2497 } 2498 2499 define <32 x i8> @test80(<32 x i8> %a, <32 x i8> %b) { 2500 ; SSE-LABEL: test80: 2501 ; SSE: # BB#0: # %entry 2502 ; SSE-NEXT: pminub %xmm2, %xmm0 2503 ; SSE-NEXT: pminub %xmm3, %xmm1 2504 ; SSE-NEXT: retq 2505 ; 2506 ; AVX1-LABEL: test80: 2507 ; AVX1: # BB#0: # %entry 2508 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2509 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2510 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 2511 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 2512 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2513 ; AVX1-NEXT: retq 2514 ; 2515 ; AVX2-LABEL: test80: 2516 ; AVX2: # BB#0: # %entry 2517 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 2518 ; AVX2-NEXT: retq 2519 ; 2520 ; AVX512F-LABEL: test80: 2521 ; AVX512F: # BB#0: # %entry 2522 ; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 2523 ; AVX512F-NEXT: retq 2524 entry: 2525 %cmp = icmp uge <32 x i8> %a, %b 2526 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2527 ret <32 x i8> %sel 2528 } 2529 2530 define <16 x i16> @test81(<16 x i16> %a, <16 x i16> %b) { 2531 ; SSE-LABEL: test81: 2532 ; SSE: # BB#0: # %entry 2533 ; SSE-NEXT: pmaxsw %xmm2, %xmm0 2534 ; SSE-NEXT: pmaxsw %xmm3, %xmm1 2535 ; SSE-NEXT: retq 2536 ; 2537 ; AVX1-LABEL: test81: 2538 ; AVX1: # BB#0: # %entry 2539 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2540 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2541 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 2542 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 2543 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2544 ; AVX1-NEXT: retq 2545 ; 2546 ; AVX2-LABEL: test81: 2547 ; AVX2: # BB#0: # %entry 2548 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2549 ; AVX2-NEXT: retq 2550 ; 2551 ; AVX512F-LABEL: test81: 2552 ; AVX512F: # BB#0: # %entry 2553 ; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2554 ; AVX512F-NEXT: retq 2555 entry: 2556 %cmp = icmp slt <16 x i16> %a, %b 2557 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2558 ret <16 x i16> %sel 2559 } 2560 2561 define <16 x i16> @test82(<16 x i16> %a, <16 x i16> %b) { 2562 ; SSE-LABEL: test82: 2563 ; SSE: # BB#0: # %entry 2564 ; SSE-NEXT: pmaxsw %xmm2, %xmm0 2565 ; SSE-NEXT: pmaxsw %xmm3, %xmm1 2566 ; SSE-NEXT: retq 2567 ; 2568 ; AVX1-LABEL: test82: 2569 ; AVX1: # BB#0: # %entry 2570 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2571 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2572 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 2573 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 2574 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2575 ; AVX1-NEXT: retq 2576 ; 2577 ; AVX2-LABEL: test82: 2578 ; AVX2: # BB#0: # %entry 2579 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2580 ; AVX2-NEXT: retq 2581 ; 2582 ; AVX512F-LABEL: test82: 2583 ; AVX512F: # BB#0: # %entry 2584 ; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2585 ; AVX512F-NEXT: retq 2586 entry: 2587 %cmp = icmp sle <16 x i16> %a, %b 2588 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2589 ret <16 x i16> %sel 2590 } 2591 2592 define <16 x i16> @test83(<16 x i16> %a, <16 x i16> %b) { 2593 ; SSE-LABEL: test83: 2594 ; SSE: # BB#0: # %entry 2595 ; SSE-NEXT: pminsw %xmm2, %xmm0 2596 ; SSE-NEXT: pminsw %xmm3, %xmm1 2597 ; SSE-NEXT: retq 2598 ; 2599 ; AVX1-LABEL: test83: 2600 ; AVX1: # BB#0: # %entry 2601 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2602 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2603 ; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 2604 ; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 2605 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2606 ; AVX1-NEXT: retq 2607 ; 2608 ; AVX2-LABEL: test83: 2609 ; AVX2: # BB#0: # %entry 2610 ; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2611 ; AVX2-NEXT: retq 2612 ; 2613 ; AVX512F-LABEL: test83: 2614 ; AVX512F: # BB#0: # %entry 2615 ; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2616 ; AVX512F-NEXT: retq 2617 entry: 2618 %cmp = icmp sgt <16 x i16> %a, %b 2619 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2620 ret <16 x i16> %sel 2621 } 2622 2623 define <16 x i16> @test84(<16 x i16> %a, <16 x i16> %b) { 2624 ; SSE-LABEL: test84: 2625 ; SSE: # BB#0: # %entry 2626 ; SSE-NEXT: pminsw %xmm2, %xmm0 2627 ; SSE-NEXT: pminsw %xmm3, %xmm1 2628 ; SSE-NEXT: retq 2629 ; 2630 ; AVX1-LABEL: test84: 2631 ; AVX1: # BB#0: # %entry 2632 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2633 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2634 ; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 2635 ; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 2636 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2637 ; AVX1-NEXT: retq 2638 ; 2639 ; AVX2-LABEL: test84: 2640 ; AVX2: # BB#0: # %entry 2641 ; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2642 ; AVX2-NEXT: retq 2643 ; 2644 ; AVX512F-LABEL: test84: 2645 ; AVX512F: # BB#0: # %entry 2646 ; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2647 ; AVX512F-NEXT: retq 2648 entry: 2649 %cmp = icmp sge <16 x i16> %a, %b 2650 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2651 ret <16 x i16> %sel 2652 } 2653 2654 define <16 x i16> @test85(<16 x i16> %a, <16 x i16> %b) { 2655 ; SSE2-LABEL: test85: 2656 ; SSE2: # BB#0: # %entry 2657 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 2658 ; SSE2-NEXT: movdqa %xmm1, %xmm6 2659 ; SSE2-NEXT: pxor %xmm4, %xmm6 2660 ; SSE2-NEXT: movdqa %xmm3, %xmm5 2661 ; SSE2-NEXT: pxor %xmm4, %xmm5 2662 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm5 2663 ; SSE2-NEXT: movdqa %xmm0, %xmm6 2664 ; SSE2-NEXT: pxor %xmm4, %xmm6 2665 ; SSE2-NEXT: pxor %xmm2, %xmm4 2666 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm4 2667 ; SSE2-NEXT: pand %xmm4, %xmm2 2668 ; SSE2-NEXT: pandn %xmm0, %xmm4 2669 ; SSE2-NEXT: por %xmm2, %xmm4 2670 ; SSE2-NEXT: pand %xmm5, %xmm3 2671 ; SSE2-NEXT: pandn %xmm1, %xmm5 2672 ; SSE2-NEXT: por %xmm3, %xmm5 2673 ; SSE2-NEXT: movdqa %xmm4, %xmm0 2674 ; SSE2-NEXT: movdqa %xmm5, %xmm1 2675 ; SSE2-NEXT: retq 2676 ; 2677 ; SSE4-LABEL: test85: 2678 ; SSE4: # BB#0: # %entry 2679 ; SSE4-NEXT: pmaxuw %xmm2, %xmm0 2680 ; SSE4-NEXT: pmaxuw %xmm3, %xmm1 2681 ; SSE4-NEXT: retq 2682 ; 2683 ; AVX1-LABEL: test85: 2684 ; AVX1: # BB#0: # %entry 2685 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2686 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2687 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 2688 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 2689 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2690 ; AVX1-NEXT: retq 2691 ; 2692 ; AVX2-LABEL: test85: 2693 ; AVX2: # BB#0: # %entry 2694 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2695 ; AVX2-NEXT: retq 2696 ; 2697 ; AVX512F-LABEL: test85: 2698 ; AVX512F: # BB#0: # %entry 2699 ; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2700 ; AVX512F-NEXT: retq 2701 entry: 2702 %cmp = icmp ult <16 x i16> %a, %b 2703 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2704 ret <16 x i16> %sel 2705 } 2706 2707 define <16 x i16> @test86(<16 x i16> %a, <16 x i16> %b) { 2708 ; SSE2-LABEL: test86: 2709 ; SSE2: # BB#0: # %entry 2710 ; SSE2-NEXT: movdqa %xmm1, %xmm4 2711 ; SSE2-NEXT: psubusw %xmm3, %xmm4 2712 ; SSE2-NEXT: pxor %xmm6, %xmm6 2713 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm4 2714 ; SSE2-NEXT: movdqa %xmm0, %xmm5 2715 ; SSE2-NEXT: psubusw %xmm2, %xmm5 2716 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm5 2717 ; SSE2-NEXT: pand %xmm5, %xmm2 2718 ; SSE2-NEXT: pandn %xmm0, %xmm5 2719 ; SSE2-NEXT: por %xmm2, %xmm5 2720 ; SSE2-NEXT: pand %xmm4, %xmm3 2721 ; SSE2-NEXT: pandn %xmm1, %xmm4 2722 ; SSE2-NEXT: por %xmm3, %xmm4 2723 ; SSE2-NEXT: movdqa %xmm5, %xmm0 2724 ; SSE2-NEXT: movdqa %xmm4, %xmm1 2725 ; SSE2-NEXT: retq 2726 ; 2727 ; SSE4-LABEL: test86: 2728 ; SSE4: # BB#0: # %entry 2729 ; SSE4-NEXT: pmaxuw %xmm2, %xmm0 2730 ; SSE4-NEXT: pmaxuw %xmm3, %xmm1 2731 ; SSE4-NEXT: retq 2732 ; 2733 ; AVX1-LABEL: test86: 2734 ; AVX1: # BB#0: # %entry 2735 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2736 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2737 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 2738 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 2739 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2740 ; AVX1-NEXT: retq 2741 ; 2742 ; AVX2-LABEL: test86: 2743 ; AVX2: # BB#0: # %entry 2744 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2745 ; AVX2-NEXT: retq 2746 ; 2747 ; AVX512F-LABEL: test86: 2748 ; AVX512F: # BB#0: # %entry 2749 ; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2750 ; AVX512F-NEXT: retq 2751 entry: 2752 %cmp = icmp ule <16 x i16> %a, %b 2753 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2754 ret <16 x i16> %sel 2755 } 2756 2757 define <16 x i16> @test87(<16 x i16> %a, <16 x i16> %b) { 2758 ; SSE2-LABEL: test87: 2759 ; SSE2: # BB#0: # %entry 2760 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 2761 ; SSE2-NEXT: movdqa %xmm3, %xmm6 2762 ; SSE2-NEXT: pxor %xmm4, %xmm6 2763 ; SSE2-NEXT: movdqa %xmm1, %xmm5 2764 ; SSE2-NEXT: pxor %xmm4, %xmm5 2765 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm5 2766 ; SSE2-NEXT: movdqa %xmm2, %xmm6 2767 ; SSE2-NEXT: pxor %xmm4, %xmm6 2768 ; SSE2-NEXT: pxor %xmm0, %xmm4 2769 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm4 2770 ; SSE2-NEXT: pand %xmm4, %xmm2 2771 ; SSE2-NEXT: pandn %xmm0, %xmm4 2772 ; SSE2-NEXT: por %xmm2, %xmm4 2773 ; SSE2-NEXT: pand %xmm5, %xmm3 2774 ; SSE2-NEXT: pandn %xmm1, %xmm5 2775 ; SSE2-NEXT: por %xmm3, %xmm5 2776 ; SSE2-NEXT: movdqa %xmm4, %xmm0 2777 ; SSE2-NEXT: movdqa %xmm5, %xmm1 2778 ; SSE2-NEXT: retq 2779 ; 2780 ; SSE4-LABEL: test87: 2781 ; SSE4: # BB#0: # %entry 2782 ; SSE4-NEXT: pminuw %xmm2, %xmm0 2783 ; SSE4-NEXT: pminuw %xmm3, %xmm1 2784 ; SSE4-NEXT: retq 2785 ; 2786 ; AVX1-LABEL: test87: 2787 ; AVX1: # BB#0: # %entry 2788 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2789 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2790 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 2791 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 2792 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2793 ; AVX1-NEXT: retq 2794 ; 2795 ; AVX2-LABEL: test87: 2796 ; AVX2: # BB#0: # %entry 2797 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2798 ; AVX2-NEXT: retq 2799 ; 2800 ; AVX512F-LABEL: test87: 2801 ; AVX512F: # BB#0: # %entry 2802 ; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2803 ; AVX512F-NEXT: retq 2804 entry: 2805 %cmp = icmp ugt <16 x i16> %a, %b 2806 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2807 ret <16 x i16> %sel 2808 } 2809 2810 define <16 x i16> @test88(<16 x i16> %a, <16 x i16> %b) { 2811 ; SSE2-LABEL: test88: 2812 ; SSE2: # BB#0: # %entry 2813 ; SSE2-NEXT: movdqa %xmm3, %xmm4 2814 ; SSE2-NEXT: psubusw %xmm1, %xmm4 2815 ; SSE2-NEXT: pxor %xmm6, %xmm6 2816 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm4 2817 ; SSE2-NEXT: movdqa %xmm2, %xmm5 2818 ; SSE2-NEXT: psubusw %xmm0, %xmm5 2819 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm5 2820 ; SSE2-NEXT: pand %xmm5, %xmm2 2821 ; SSE2-NEXT: pandn %xmm0, %xmm5 2822 ; SSE2-NEXT: por %xmm2, %xmm5 2823 ; SSE2-NEXT: pand %xmm4, %xmm3 2824 ; SSE2-NEXT: pandn %xmm1, %xmm4 2825 ; SSE2-NEXT: por %xmm3, %xmm4 2826 ; SSE2-NEXT: movdqa %xmm5, %xmm0 2827 ; SSE2-NEXT: movdqa %xmm4, %xmm1 2828 ; SSE2-NEXT: retq 2829 ; 2830 ; SSE4-LABEL: test88: 2831 ; SSE4: # BB#0: # %entry 2832 ; SSE4-NEXT: pminuw %xmm2, %xmm0 2833 ; SSE4-NEXT: pminuw %xmm3, %xmm1 2834 ; SSE4-NEXT: retq 2835 ; 2836 ; AVX1-LABEL: test88: 2837 ; AVX1: # BB#0: # %entry 2838 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2839 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2840 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 2841 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 2842 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2843 ; AVX1-NEXT: retq 2844 ; 2845 ; AVX2-LABEL: test88: 2846 ; AVX2: # BB#0: # %entry 2847 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2848 ; AVX2-NEXT: retq 2849 ; 2850 ; AVX512F-LABEL: test88: 2851 ; AVX512F: # BB#0: # %entry 2852 ; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2853 ; AVX512F-NEXT: retq 2854 entry: 2855 %cmp = icmp uge <16 x i16> %a, %b 2856 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2857 ret <16 x i16> %sel 2858 } 2859 2860 define <8 x i32> @test89(<8 x i32> %a, <8 x i32> %b) { 2861 ; SSE2-LABEL: test89: 2862 ; SSE2: # BB#0: # %entry 2863 ; SSE2-NEXT: movdqa %xmm3, %xmm4 2864 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 2865 ; SSE2-NEXT: movdqa %xmm2, %xmm5 2866 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 2867 ; SSE2-NEXT: pand %xmm5, %xmm2 2868 ; SSE2-NEXT: pandn %xmm0, %xmm5 2869 ; SSE2-NEXT: por %xmm2, %xmm5 2870 ; SSE2-NEXT: pand %xmm4, %xmm3 2871 ; SSE2-NEXT: pandn %xmm1, %xmm4 2872 ; SSE2-NEXT: por %xmm3, %xmm4 2873 ; SSE2-NEXT: movdqa %xmm5, %xmm0 2874 ; SSE2-NEXT: movdqa %xmm4, %xmm1 2875 ; SSE2-NEXT: retq 2876 ; 2877 ; SSE4-LABEL: test89: 2878 ; SSE4: # BB#0: # %entry 2879 ; SSE4-NEXT: pmaxsd %xmm2, %xmm0 2880 ; SSE4-NEXT: pmaxsd %xmm3, %xmm1 2881 ; SSE4-NEXT: retq 2882 ; 2883 ; AVX1-LABEL: test89: 2884 ; AVX1: # BB#0: # %entry 2885 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2886 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2887 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 2888 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2889 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2890 ; AVX1-NEXT: retq 2891 ; 2892 ; AVX2-LABEL: test89: 2893 ; AVX2: # BB#0: # %entry 2894 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2895 ; AVX2-NEXT: retq 2896 ; 2897 ; AVX512F-LABEL: test89: 2898 ; AVX512F: # BB#0: # %entry 2899 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2900 ; AVX512F-NEXT: retq 2901 entry: 2902 %cmp = icmp slt <8 x i32> %a, %b 2903 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2904 ret <8 x i32> %sel 2905 } 2906 2907 define <8 x i32> @test90(<8 x i32> %a, <8 x i32> %b) { 2908 ; SSE2-LABEL: test90: 2909 ; SSE2: # BB#0: # %entry 2910 ; SSE2-NEXT: movdqa %xmm1, %xmm6 2911 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm6 2912 ; SSE2-NEXT: pcmpeqd %xmm7, %xmm7 2913 ; SSE2-NEXT: movdqa %xmm6, %xmm4 2914 ; SSE2-NEXT: pxor %xmm7, %xmm4 2915 ; SSE2-NEXT: movdqa %xmm0, %xmm5 2916 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 2917 ; SSE2-NEXT: pxor %xmm5, %xmm7 2918 ; SSE2-NEXT: pandn %xmm2, %xmm5 2919 ; SSE2-NEXT: pandn %xmm0, %xmm7 2920 ; SSE2-NEXT: por %xmm7, %xmm5 2921 ; SSE2-NEXT: pandn %xmm3, %xmm6 2922 ; SSE2-NEXT: pandn %xmm1, %xmm4 2923 ; SSE2-NEXT: por %xmm6, %xmm4 2924 ; SSE2-NEXT: movdqa %xmm5, %xmm0 2925 ; SSE2-NEXT: movdqa %xmm4, %xmm1 2926 ; SSE2-NEXT: retq 2927 ; 2928 ; SSE4-LABEL: test90: 2929 ; SSE4: # BB#0: # %entry 2930 ; SSE4-NEXT: pmaxsd %xmm2, %xmm0 2931 ; SSE4-NEXT: pmaxsd %xmm3, %xmm1 2932 ; SSE4-NEXT: retq 2933 ; 2934 ; AVX1-LABEL: test90: 2935 ; AVX1: # BB#0: # %entry 2936 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2937 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2938 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 2939 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2940 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2941 ; AVX1-NEXT: retq 2942 ; 2943 ; AVX2-LABEL: test90: 2944 ; AVX2: # BB#0: # %entry 2945 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2946 ; AVX2-NEXT: retq 2947 ; 2948 ; AVX512F-LABEL: test90: 2949 ; AVX512F: # BB#0: # %entry 2950 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2951 ; AVX512F-NEXT: retq 2952 entry: 2953 %cmp = icmp sle <8 x i32> %a, %b 2954 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2955 ret <8 x i32> %sel 2956 } 2957 2958 define <8 x i32> @test91(<8 x i32> %a, <8 x i32> %b) { 2959 ; SSE2-LABEL: test91: 2960 ; SSE2: # BB#0: # %entry 2961 ; SSE2-NEXT: movdqa %xmm1, %xmm4 2962 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 2963 ; SSE2-NEXT: movdqa %xmm0, %xmm5 2964 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 2965 ; SSE2-NEXT: pand %xmm5, %xmm2 2966 ; SSE2-NEXT: pandn %xmm0, %xmm5 2967 ; SSE2-NEXT: por %xmm2, %xmm5 2968 ; SSE2-NEXT: pand %xmm4, %xmm3 2969 ; SSE2-NEXT: pandn %xmm1, %xmm4 2970 ; SSE2-NEXT: por %xmm3, %xmm4 2971 ; SSE2-NEXT: movdqa %xmm5, %xmm0 2972 ; SSE2-NEXT: movdqa %xmm4, %xmm1 2973 ; SSE2-NEXT: retq 2974 ; 2975 ; SSE4-LABEL: test91: 2976 ; SSE4: # BB#0: # %entry 2977 ; SSE4-NEXT: pminsd %xmm2, %xmm0 2978 ; SSE4-NEXT: pminsd %xmm3, %xmm1 2979 ; SSE4-NEXT: retq 2980 ; 2981 ; AVX1-LABEL: test91: 2982 ; AVX1: # BB#0: # %entry 2983 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2984 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2985 ; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 2986 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 2987 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2988 ; AVX1-NEXT: retq 2989 ; 2990 ; AVX2-LABEL: test91: 2991 ; AVX2: # BB#0: # %entry 2992 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2993 ; AVX2-NEXT: retq 2994 ; 2995 ; AVX512F-LABEL: test91: 2996 ; AVX512F: # BB#0: # %entry 2997 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2998 ; AVX512F-NEXT: retq 2999 entry: 3000 %cmp = icmp sgt <8 x i32> %a, %b 3001 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3002 ret <8 x i32> %sel 3003 } 3004 3005 define <8 x i32> @test92(<8 x i32> %a, <8 x i32> %b) { 3006 ; SSE2-LABEL: test92: 3007 ; SSE2: # BB#0: # %entry 3008 ; SSE2-NEXT: movdqa %xmm3, %xmm6 3009 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm6 3010 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 3011 ; SSE2-NEXT: movdqa %xmm6, %xmm5 3012 ; SSE2-NEXT: pxor %xmm4, %xmm5 3013 ; SSE2-NEXT: movdqa %xmm2, %xmm7 3014 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm7 3015 ; SSE2-NEXT: pxor %xmm7, %xmm4 3016 ; SSE2-NEXT: pandn %xmm2, %xmm7 3017 ; SSE2-NEXT: pandn %xmm0, %xmm4 3018 ; SSE2-NEXT: por %xmm7, %xmm4 3019 ; SSE2-NEXT: pandn %xmm3, %xmm6 3020 ; SSE2-NEXT: pandn %xmm1, %xmm5 3021 ; SSE2-NEXT: por %xmm6, %xmm5 3022 ; SSE2-NEXT: movdqa %xmm4, %xmm0 3023 ; SSE2-NEXT: movdqa %xmm5, %xmm1 3024 ; SSE2-NEXT: retq 3025 ; 3026 ; SSE4-LABEL: test92: 3027 ; SSE4: # BB#0: # %entry 3028 ; SSE4-NEXT: pminsd %xmm2, %xmm0 3029 ; SSE4-NEXT: pminsd %xmm3, %xmm1 3030 ; SSE4-NEXT: retq 3031 ; 3032 ; AVX1-LABEL: test92: 3033 ; AVX1: # BB#0: # %entry 3034 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3035 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3036 ; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 3037 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 3038 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3039 ; AVX1-NEXT: retq 3040 ; 3041 ; AVX2-LABEL: test92: 3042 ; AVX2: # BB#0: # %entry 3043 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 3044 ; AVX2-NEXT: retq 3045 ; 3046 ; AVX512F-LABEL: test92: 3047 ; AVX512F: # BB#0: # %entry 3048 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 3049 ; AVX512F-NEXT: retq 3050 entry: 3051 %cmp = icmp sge <8 x i32> %a, %b 3052 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3053 ret <8 x i32> %sel 3054 } 3055 3056 define <8 x i32> @test93(<8 x i32> %a, <8 x i32> %b) { 3057 ; SSE2-LABEL: test93: 3058 ; SSE2: # BB#0: # %entry 3059 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 3060 ; SSE2-NEXT: movdqa %xmm1, %xmm6 3061 ; SSE2-NEXT: pxor %xmm4, %xmm6 3062 ; SSE2-NEXT: movdqa %xmm3, %xmm5 3063 ; SSE2-NEXT: pxor %xmm4, %xmm5 3064 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 3065 ; SSE2-NEXT: movdqa %xmm0, %xmm6 3066 ; SSE2-NEXT: pxor %xmm4, %xmm6 3067 ; SSE2-NEXT: pxor %xmm2, %xmm4 3068 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 3069 ; SSE2-NEXT: pand %xmm4, %xmm2 3070 ; SSE2-NEXT: pandn %xmm0, %xmm4 3071 ; SSE2-NEXT: por %xmm2, %xmm4 3072 ; SSE2-NEXT: pand %xmm5, %xmm3 3073 ; SSE2-NEXT: pandn %xmm1, %xmm5 3074 ; SSE2-NEXT: por %xmm3, %xmm5 3075 ; SSE2-NEXT: movdqa %xmm4, %xmm0 3076 ; SSE2-NEXT: movdqa %xmm5, %xmm1 3077 ; SSE2-NEXT: retq 3078 ; 3079 ; SSE4-LABEL: test93: 3080 ; SSE4: # BB#0: # %entry 3081 ; SSE4-NEXT: pmaxud %xmm2, %xmm0 3082 ; SSE4-NEXT: pmaxud %xmm3, %xmm1 3083 ; SSE4-NEXT: retq 3084 ; 3085 ; AVX1-LABEL: test93: 3086 ; AVX1: # BB#0: # %entry 3087 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3088 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3089 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 3090 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 3091 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3092 ; AVX1-NEXT: retq 3093 ; 3094 ; AVX2-LABEL: test93: 3095 ; AVX2: # BB#0: # %entry 3096 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 3097 ; AVX2-NEXT: retq 3098 ; 3099 ; AVX512F-LABEL: test93: 3100 ; AVX512F: # BB#0: # %entry 3101 ; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 3102 ; AVX512F-NEXT: retq 3103 entry: 3104 %cmp = icmp ult <8 x i32> %a, %b 3105 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3106 ret <8 x i32> %sel 3107 } 3108 3109 define <8 x i32> @test94(<8 x i32> %a, <8 x i32> %b) { 3110 ; SSE2-LABEL: test94: 3111 ; SSE2: # BB#0: # %entry 3112 ; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648] 3113 ; SSE2-NEXT: movdqa %xmm3, %xmm4 3114 ; SSE2-NEXT: pxor %xmm6, %xmm4 3115 ; SSE2-NEXT: movdqa %xmm1, %xmm7 3116 ; SSE2-NEXT: pxor %xmm6, %xmm7 3117 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 3118 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 3119 ; SSE2-NEXT: movdqa %xmm7, %xmm5 3120 ; SSE2-NEXT: pxor %xmm4, %xmm5 3121 ; SSE2-NEXT: movdqa %xmm2, %xmm8 3122 ; SSE2-NEXT: pxor %xmm6, %xmm8 3123 ; SSE2-NEXT: pxor %xmm0, %xmm6 3124 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm6 3125 ; SSE2-NEXT: pxor %xmm6, %xmm4 3126 ; SSE2-NEXT: pandn %xmm2, %xmm6 3127 ; SSE2-NEXT: pandn %xmm0, %xmm4 3128 ; SSE2-NEXT: por %xmm6, %xmm4 3129 ; SSE2-NEXT: pandn %xmm3, %xmm7 3130 ; SSE2-NEXT: pandn %xmm1, %xmm5 3131 ; SSE2-NEXT: por %xmm7, %xmm5 3132 ; SSE2-NEXT: movdqa %xmm4, %xmm0 3133 ; SSE2-NEXT: movdqa %xmm5, %xmm1 3134 ; SSE2-NEXT: retq 3135 ; 3136 ; SSE4-LABEL: test94: 3137 ; SSE4: # BB#0: # %entry 3138 ; SSE4-NEXT: pmaxud %xmm2, %xmm0 3139 ; SSE4-NEXT: pmaxud %xmm3, %xmm1 3140 ; SSE4-NEXT: retq 3141 ; 3142 ; AVX1-LABEL: test94: 3143 ; AVX1: # BB#0: # %entry 3144 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3145 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3146 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 3147 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 3148 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3149 ; AVX1-NEXT: retq 3150 ; 3151 ; AVX2-LABEL: test94: 3152 ; AVX2: # BB#0: # %entry 3153 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 3154 ; AVX2-NEXT: retq 3155 ; 3156 ; AVX512F-LABEL: test94: 3157 ; AVX512F: # BB#0: # %entry 3158 ; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 3159 ; AVX512F-NEXT: retq 3160 entry: 3161 %cmp = icmp ule <8 x i32> %a, %b 3162 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3163 ret <8 x i32> %sel 3164 } 3165 3166 define <8 x i32> @test95(<8 x i32> %a, <8 x i32> %b) { 3167 ; SSE2-LABEL: test95: 3168 ; SSE2: # BB#0: # %entry 3169 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 3170 ; SSE2-NEXT: movdqa %xmm3, %xmm6 3171 ; SSE2-NEXT: pxor %xmm4, %xmm6 3172 ; SSE2-NEXT: movdqa %xmm1, %xmm5 3173 ; SSE2-NEXT: pxor %xmm4, %xmm5 3174 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 3175 ; SSE2-NEXT: movdqa %xmm2, %xmm6 3176 ; SSE2-NEXT: pxor %xmm4, %xmm6 3177 ; SSE2-NEXT: pxor %xmm0, %xmm4 3178 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 3179 ; SSE2-NEXT: pand %xmm4, %xmm2 3180 ; SSE2-NEXT: pandn %xmm0, %xmm4 3181 ; SSE2-NEXT: por %xmm2, %xmm4 3182 ; SSE2-NEXT: pand %xmm5, %xmm3 3183 ; SSE2-NEXT: pandn %xmm1, %xmm5 3184 ; SSE2-NEXT: por %xmm3, %xmm5 3185 ; SSE2-NEXT: movdqa %xmm4, %xmm0 3186 ; SSE2-NEXT: movdqa %xmm5, %xmm1 3187 ; SSE2-NEXT: retq 3188 ; 3189 ; SSE4-LABEL: test95: 3190 ; SSE4: # BB#0: # %entry 3191 ; SSE4-NEXT: pminud %xmm2, %xmm0 3192 ; SSE4-NEXT: pminud %xmm3, %xmm1 3193 ; SSE4-NEXT: retq 3194 ; 3195 ; AVX1-LABEL: test95: 3196 ; AVX1: # BB#0: # %entry 3197 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3198 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3199 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 3200 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 3201 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3202 ; AVX1-NEXT: retq 3203 ; 3204 ; AVX2-LABEL: test95: 3205 ; AVX2: # BB#0: # %entry 3206 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 3207 ; AVX2-NEXT: retq 3208 ; 3209 ; AVX512F-LABEL: test95: 3210 ; AVX512F: # BB#0: # %entry 3211 ; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0 3212 ; AVX512F-NEXT: retq 3213 entry: 3214 %cmp = icmp ugt <8 x i32> %a, %b 3215 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3216 ret <8 x i32> %sel 3217 } 3218 3219 define <8 x i32> @test96(<8 x i32> %a, <8 x i32> %b) { 3220 ; SSE2-LABEL: test96: 3221 ; SSE2: # BB#0: # %entry 3222 ; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648] 3223 ; SSE2-NEXT: movdqa %xmm1, %xmm4 3224 ; SSE2-NEXT: pxor %xmm6, %xmm4 3225 ; SSE2-NEXT: movdqa %xmm3, %xmm7 3226 ; SSE2-NEXT: pxor %xmm6, %xmm7 3227 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 3228 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 3229 ; SSE2-NEXT: movdqa %xmm7, %xmm5 3230 ; SSE2-NEXT: pxor %xmm4, %xmm5 3231 ; SSE2-NEXT: movdqa %xmm0, %xmm8 3232 ; SSE2-NEXT: pxor %xmm6, %xmm8 3233 ; SSE2-NEXT: pxor %xmm2, %xmm6 3234 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm6 3235 ; SSE2-NEXT: pxor %xmm6, %xmm4 3236 ; SSE2-NEXT: pandn %xmm2, %xmm6 3237 ; SSE2-NEXT: pandn %xmm0, %xmm4 3238 ; SSE2-NEXT: por %xmm6, %xmm4 3239 ; SSE2-NEXT: pandn %xmm3, %xmm7 3240 ; SSE2-NEXT: pandn %xmm1, %xmm5 3241 ; SSE2-NEXT: por %xmm7, %xmm5 3242 ; SSE2-NEXT: movdqa %xmm4, %xmm0 3243 ; SSE2-NEXT: movdqa %xmm5, %xmm1 3244 ; SSE2-NEXT: retq 3245 ; 3246 ; SSE4-LABEL: test96: 3247 ; SSE4: # BB#0: # %entry 3248 ; SSE4-NEXT: pminud %xmm2, %xmm0 3249 ; SSE4-NEXT: pminud %xmm3, %xmm1 3250 ; SSE4-NEXT: retq 3251 ; 3252 ; AVX1-LABEL: test96: 3253 ; AVX1: # BB#0: # %entry 3254 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3255 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3256 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 3257 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 3258 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3259 ; AVX1-NEXT: retq 3260 ; 3261 ; AVX2-LABEL: test96: 3262 ; AVX2: # BB#0: # %entry 3263 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 3264 ; AVX2-NEXT: retq 3265 ; 3266 ; AVX512F-LABEL: test96: 3267 ; AVX512F: # BB#0: # %entry 3268 ; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0 3269 ; AVX512F-NEXT: retq 3270 entry: 3271 %cmp = icmp uge <8 x i32> %a, %b 3272 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3273 ret <8 x i32> %sel 3274 } 3275 3276 ; ---------------------------- 3277 3278 define <64 x i8> @test97(<64 x i8> %a, <64 x i8> %b) { 3279 ; SSE2-LABEL: test97: 3280 ; SSE2: # BB#0: # %entry 3281 ; SSE2-NEXT: movdqa %xmm7, %xmm8 3282 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm8 3283 ; SSE2-NEXT: movdqa %xmm6, %xmm9 3284 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm9 3285 ; SSE2-NEXT: movdqa %xmm5, %xmm10 3286 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm10 3287 ; SSE2-NEXT: movdqa %xmm4, %xmm11 3288 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm11 3289 ; SSE2-NEXT: pand %xmm11, %xmm0 3290 ; SSE2-NEXT: pandn %xmm4, %xmm11 3291 ; SSE2-NEXT: por %xmm11, %xmm0 3292 ; SSE2-NEXT: pand %xmm10, %xmm1 3293 ; SSE2-NEXT: pandn %xmm5, %xmm10 3294 ; SSE2-NEXT: por %xmm10, %xmm1 3295 ; SSE2-NEXT: pand %xmm9, %xmm2 3296 ; SSE2-NEXT: pandn %xmm6, %xmm9 3297 ; SSE2-NEXT: por %xmm9, %xmm2 3298 ; SSE2-NEXT: pand %xmm8, %xmm3 3299 ; SSE2-NEXT: pandn %xmm7, %xmm8 3300 ; SSE2-NEXT: por %xmm8, %xmm3 3301 ; SSE2-NEXT: retq 3302 ; 3303 ; SSE4-LABEL: test97: 3304 ; SSE4: # BB#0: # %entry 3305 ; SSE4-NEXT: pminsb %xmm4, %xmm0 3306 ; SSE4-NEXT: pminsb %xmm5, %xmm1 3307 ; SSE4-NEXT: pminsb %xmm6, %xmm2 3308 ; SSE4-NEXT: pminsb %xmm7, %xmm3 3309 ; SSE4-NEXT: retq 3310 ; 3311 ; AVX1-LABEL: test97: 3312 ; AVX1: # BB#0: # %entry 3313 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3314 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3315 ; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 3316 ; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 3317 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3318 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3319 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3320 ; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 3321 ; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 3322 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3323 ; AVX1-NEXT: retq 3324 ; 3325 ; AVX2-LABEL: test97: 3326 ; AVX2: # BB#0: # %entry 3327 ; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 3328 ; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 3329 ; AVX2-NEXT: retq 3330 ; 3331 ; AVX512BW-LABEL: test97: 3332 ; AVX512BW: # BB#0: # %entry 3333 ; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 3334 ; AVX512BW-NEXT: retq 3335 entry: 3336 %cmp = icmp slt <64 x i8> %a, %b 3337 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3338 ret <64 x i8> %sel 3339 } 3340 3341 define <64 x i8> @test98(<64 x i8> %a, <64 x i8> %b) { 3342 ; SSE2-LABEL: test98: 3343 ; SSE2: # BB#0: # %entry 3344 ; SSE2-NEXT: movdqa %xmm3, %xmm8 3345 ; SSE2-NEXT: movdqa %xmm2, %xmm9 3346 ; SSE2-NEXT: movdqa %xmm8, %xmm12 3347 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm12 3348 ; SSE2-NEXT: pcmpeqd %xmm13, %xmm13 3349 ; SSE2-NEXT: movdqa %xmm12, %xmm3 3350 ; SSE2-NEXT: pxor %xmm13, %xmm3 3351 ; SSE2-NEXT: movdqa %xmm9, %xmm14 3352 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm14 3353 ; SSE2-NEXT: movdqa %xmm14, %xmm2 3354 ; SSE2-NEXT: pxor %xmm13, %xmm2 3355 ; SSE2-NEXT: movdqa %xmm1, %xmm15 3356 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm15 3357 ; SSE2-NEXT: movdqa %xmm15, %xmm10 3358 ; SSE2-NEXT: pxor %xmm13, %xmm10 3359 ; SSE2-NEXT: movdqa %xmm0, %xmm11 3360 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm11 3361 ; SSE2-NEXT: pxor %xmm11, %xmm13 3362 ; SSE2-NEXT: pandn %xmm0, %xmm11 3363 ; SSE2-NEXT: pandn %xmm4, %xmm13 3364 ; SSE2-NEXT: por %xmm13, %xmm11 3365 ; SSE2-NEXT: pandn %xmm1, %xmm15 3366 ; SSE2-NEXT: pandn %xmm5, %xmm10 3367 ; SSE2-NEXT: por %xmm15, %xmm10 3368 ; SSE2-NEXT: pandn %xmm9, %xmm14 3369 ; SSE2-NEXT: pandn %xmm6, %xmm2 3370 ; SSE2-NEXT: por %xmm14, %xmm2 3371 ; SSE2-NEXT: pandn %xmm8, %xmm12 3372 ; SSE2-NEXT: pandn %xmm7, %xmm3 3373 ; SSE2-NEXT: por %xmm12, %xmm3 3374 ; SSE2-NEXT: movdqa %xmm11, %xmm0 3375 ; SSE2-NEXT: movdqa %xmm10, %xmm1 3376 ; SSE2-NEXT: retq 3377 ; 3378 ; SSE4-LABEL: test98: 3379 ; SSE4: # BB#0: # %entry 3380 ; SSE4-NEXT: pminsb %xmm4, %xmm0 3381 ; SSE4-NEXT: pminsb %xmm5, %xmm1 3382 ; SSE4-NEXT: pminsb %xmm6, %xmm2 3383 ; SSE4-NEXT: pminsb %xmm7, %xmm3 3384 ; SSE4-NEXT: retq 3385 ; 3386 ; AVX1-LABEL: test98: 3387 ; AVX1: # BB#0: # %entry 3388 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3389 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3390 ; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 3391 ; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 3392 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3393 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3394 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3395 ; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 3396 ; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 3397 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3398 ; AVX1-NEXT: retq 3399 ; 3400 ; AVX2-LABEL: test98: 3401 ; AVX2: # BB#0: # %entry 3402 ; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 3403 ; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 3404 ; AVX2-NEXT: retq 3405 ; 3406 ; AVX512BW-LABEL: test98: 3407 ; AVX512BW: # BB#0: # %entry 3408 ; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 3409 ; AVX512BW-NEXT: retq 3410 entry: 3411 %cmp = icmp sle <64 x i8> %a, %b 3412 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3413 ret <64 x i8> %sel 3414 } 3415 3416 define <64 x i8> @test99(<64 x i8> %a, <64 x i8> %b) { 3417 ; SSE2-LABEL: test99: 3418 ; SSE2: # BB#0: # %entry 3419 ; SSE2-NEXT: movdqa %xmm3, %xmm8 3420 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm3 3421 ; SSE2-NEXT: movdqa %xmm2, %xmm9 3422 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm9 3423 ; SSE2-NEXT: movdqa %xmm1, %xmm10 3424 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm10 3425 ; SSE2-NEXT: movdqa %xmm0, %xmm11 3426 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm11 3427 ; SSE2-NEXT: pand %xmm11, %xmm0 3428 ; SSE2-NEXT: pandn %xmm4, %xmm11 3429 ; SSE2-NEXT: por %xmm0, %xmm11 3430 ; SSE2-NEXT: pand %xmm10, %xmm1 3431 ; SSE2-NEXT: pandn %xmm5, %xmm10 3432 ; SSE2-NEXT: por %xmm1, %xmm10 3433 ; SSE2-NEXT: pand %xmm9, %xmm2 3434 ; SSE2-NEXT: pandn %xmm6, %xmm9 3435 ; SSE2-NEXT: por %xmm2, %xmm9 3436 ; SSE2-NEXT: pand %xmm3, %xmm8 3437 ; SSE2-NEXT: pandn %xmm7, %xmm3 3438 ; SSE2-NEXT: por %xmm8, %xmm3 3439 ; SSE2-NEXT: movdqa %xmm11, %xmm0 3440 ; SSE2-NEXT: movdqa %xmm10, %xmm1 3441 ; SSE2-NEXT: movdqa %xmm9, %xmm2 3442 ; SSE2-NEXT: retq 3443 ; 3444 ; SSE4-LABEL: test99: 3445 ; SSE4: # BB#0: # %entry 3446 ; SSE4-NEXT: pmaxsb %xmm4, %xmm0 3447 ; SSE4-NEXT: pmaxsb %xmm5, %xmm1 3448 ; SSE4-NEXT: pmaxsb %xmm6, %xmm2 3449 ; SSE4-NEXT: pmaxsb %xmm7, %xmm3 3450 ; SSE4-NEXT: retq 3451 ; 3452 ; AVX1-LABEL: test99: 3453 ; AVX1: # BB#0: # %entry 3454 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3455 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3456 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 3457 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 3458 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3459 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3460 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3461 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 3462 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 3463 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3464 ; AVX1-NEXT: retq 3465 ; 3466 ; AVX2-LABEL: test99: 3467 ; AVX2: # BB#0: # %entry 3468 ; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 3469 ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 3470 ; AVX2-NEXT: retq 3471 ; 3472 ; AVX512BW-LABEL: test99: 3473 ; AVX512BW: # BB#0: # %entry 3474 ; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 3475 ; AVX512BW-NEXT: retq 3476 entry: 3477 %cmp = icmp sgt <64 x i8> %a, %b 3478 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3479 ret <64 x i8> %sel 3480 } 3481 3482 define <64 x i8> @test100(<64 x i8> %a, <64 x i8> %b) { 3483 ; SSE2-LABEL: test100: 3484 ; SSE2: # BB#0: # %entry 3485 ; SSE2-NEXT: movdqa %xmm3, %xmm8 3486 ; SSE2-NEXT: movdqa %xmm2, %xmm9 3487 ; SSE2-NEXT: movdqa %xmm0, %xmm10 3488 ; SSE2-NEXT: movdqa %xmm7, %xmm12 3489 ; SSE2-NEXT: pcmpgtb %xmm8, %xmm12 3490 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 3491 ; SSE2-NEXT: movdqa %xmm12, %xmm3 3492 ; SSE2-NEXT: pxor %xmm0, %xmm3 3493 ; SSE2-NEXT: movdqa %xmm6, %xmm13 3494 ; SSE2-NEXT: pcmpgtb %xmm9, %xmm13 3495 ; SSE2-NEXT: movdqa %xmm13, %xmm2 3496 ; SSE2-NEXT: pxor %xmm0, %xmm2 3497 ; SSE2-NEXT: movdqa %xmm5, %xmm14 3498 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm14 3499 ; SSE2-NEXT: movdqa %xmm14, %xmm11 3500 ; SSE2-NEXT: pxor %xmm0, %xmm11 3501 ; SSE2-NEXT: movdqa %xmm4, %xmm15 3502 ; SSE2-NEXT: pcmpgtb %xmm10, %xmm15 3503 ; SSE2-NEXT: pxor %xmm15, %xmm0 3504 ; SSE2-NEXT: pandn %xmm10, %xmm15 3505 ; SSE2-NEXT: pandn %xmm4, %xmm0 3506 ; SSE2-NEXT: por %xmm15, %xmm0 3507 ; SSE2-NEXT: pandn %xmm1, %xmm14 3508 ; SSE2-NEXT: pandn %xmm5, %xmm11 3509 ; SSE2-NEXT: por %xmm14, %xmm11 3510 ; SSE2-NEXT: pandn %xmm9, %xmm13 3511 ; SSE2-NEXT: pandn %xmm6, %xmm2 3512 ; SSE2-NEXT: por %xmm13, %xmm2 3513 ; SSE2-NEXT: pandn %xmm8, %xmm12 3514 ; SSE2-NEXT: pandn %xmm7, %xmm3 3515 ; SSE2-NEXT: por %xmm12, %xmm3 3516 ; SSE2-NEXT: movdqa %xmm11, %xmm1 3517 ; SSE2-NEXT: retq 3518 ; 3519 ; SSE4-LABEL: test100: 3520 ; SSE4: # BB#0: # %entry 3521 ; SSE4-NEXT: pmaxsb %xmm4, %xmm0 3522 ; SSE4-NEXT: pmaxsb %xmm5, %xmm1 3523 ; SSE4-NEXT: pmaxsb %xmm6, %xmm2 3524 ; SSE4-NEXT: pmaxsb %xmm7, %xmm3 3525 ; SSE4-NEXT: retq 3526 ; 3527 ; AVX1-LABEL: test100: 3528 ; AVX1: # BB#0: # %entry 3529 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3530 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3531 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 3532 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 3533 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3534 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3535 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3536 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 3537 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 3538 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3539 ; AVX1-NEXT: retq 3540 ; 3541 ; AVX2-LABEL: test100: 3542 ; AVX2: # BB#0: # %entry 3543 ; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 3544 ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 3545 ; AVX2-NEXT: retq 3546 ; 3547 ; AVX512BW-LABEL: test100: 3548 ; AVX512BW: # BB#0: # %entry 3549 ; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 3550 ; AVX512BW-NEXT: retq 3551 entry: 3552 %cmp = icmp sge <64 x i8> %a, %b 3553 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3554 ret <64 x i8> %sel 3555 } 3556 3557 define <64 x i8> @test101(<64 x i8> %a, <64 x i8> %b) { 3558 ; SSE-LABEL: test101: 3559 ; SSE: # BB#0: # %entry 3560 ; SSE-NEXT: pminub %xmm4, %xmm0 3561 ; SSE-NEXT: pminub %xmm5, %xmm1 3562 ; SSE-NEXT: pminub %xmm6, %xmm2 3563 ; SSE-NEXT: pminub %xmm7, %xmm3 3564 ; SSE-NEXT: retq 3565 ; 3566 ; AVX1-LABEL: test101: 3567 ; AVX1: # BB#0: # %entry 3568 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3569 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3570 ; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 3571 ; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 3572 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3573 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3574 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3575 ; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 3576 ; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 3577 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3578 ; AVX1-NEXT: retq 3579 ; 3580 ; AVX2-LABEL: test101: 3581 ; AVX2: # BB#0: # %entry 3582 ; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 3583 ; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 3584 ; AVX2-NEXT: retq 3585 ; 3586 ; AVX512BW-LABEL: test101: 3587 ; AVX512BW: # BB#0: # %entry 3588 ; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 3589 ; AVX512BW-NEXT: retq 3590 entry: 3591 %cmp = icmp ult <64 x i8> %a, %b 3592 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3593 ret <64 x i8> %sel 3594 } 3595 3596 define <64 x i8> @test102(<64 x i8> %a, <64 x i8> %b) { 3597 ; SSE-LABEL: test102: 3598 ; SSE: # BB#0: # %entry 3599 ; SSE-NEXT: pminub %xmm4, %xmm0 3600 ; SSE-NEXT: pminub %xmm5, %xmm1 3601 ; SSE-NEXT: pminub %xmm6, %xmm2 3602 ; SSE-NEXT: pminub %xmm7, %xmm3 3603 ; SSE-NEXT: retq 3604 ; 3605 ; AVX1-LABEL: test102: 3606 ; AVX1: # BB#0: # %entry 3607 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3608 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3609 ; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 3610 ; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 3611 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3612 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3613 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3614 ; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 3615 ; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 3616 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3617 ; AVX1-NEXT: retq 3618 ; 3619 ; AVX2-LABEL: test102: 3620 ; AVX2: # BB#0: # %entry 3621 ; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 3622 ; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 3623 ; AVX2-NEXT: retq 3624 ; 3625 ; AVX512BW-LABEL: test102: 3626 ; AVX512BW: # BB#0: # %entry 3627 ; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 3628 ; AVX512BW-NEXT: retq 3629 entry: 3630 %cmp = icmp ule <64 x i8> %a, %b 3631 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3632 ret <64 x i8> %sel 3633 } 3634 3635 define <64 x i8> @test103(<64 x i8> %a, <64 x i8> %b) { 3636 ; SSE-LABEL: test103: 3637 ; SSE: # BB#0: # %entry 3638 ; SSE-NEXT: pmaxub %xmm4, %xmm0 3639 ; SSE-NEXT: pmaxub %xmm5, %xmm1 3640 ; SSE-NEXT: pmaxub %xmm6, %xmm2 3641 ; SSE-NEXT: pmaxub %xmm7, %xmm3 3642 ; SSE-NEXT: retq 3643 ; 3644 ; AVX1-LABEL: test103: 3645 ; AVX1: # BB#0: # %entry 3646 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3647 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3648 ; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 3649 ; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 3650 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3651 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3652 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3653 ; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 3654 ; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 3655 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3656 ; AVX1-NEXT: retq 3657 ; 3658 ; AVX2-LABEL: test103: 3659 ; AVX2: # BB#0: # %entry 3660 ; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 3661 ; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 3662 ; AVX2-NEXT: retq 3663 ; 3664 ; AVX512BW-LABEL: test103: 3665 ; AVX512BW: # BB#0: # %entry 3666 ; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 3667 ; AVX512BW-NEXT: retq 3668 entry: 3669 %cmp = icmp ugt <64 x i8> %a, %b 3670 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3671 ret <64 x i8> %sel 3672 } 3673 3674 define <64 x i8> @test104(<64 x i8> %a, <64 x i8> %b) { 3675 ; SSE-LABEL: test104: 3676 ; SSE: # BB#0: # %entry 3677 ; SSE-NEXT: pmaxub %xmm4, %xmm0 3678 ; SSE-NEXT: pmaxub %xmm5, %xmm1 3679 ; SSE-NEXT: pmaxub %xmm6, %xmm2 3680 ; SSE-NEXT: pmaxub %xmm7, %xmm3 3681 ; SSE-NEXT: retq 3682 ; 3683 ; AVX1-LABEL: test104: 3684 ; AVX1: # BB#0: # %entry 3685 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3686 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3687 ; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 3688 ; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 3689 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3690 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3691 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3692 ; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 3693 ; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 3694 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3695 ; AVX1-NEXT: retq 3696 ; 3697 ; AVX2-LABEL: test104: 3698 ; AVX2: # BB#0: # %entry 3699 ; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 3700 ; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 3701 ; AVX2-NEXT: retq 3702 ; 3703 ; AVX512BW-LABEL: test104: 3704 ; AVX512BW: # BB#0: # %entry 3705 ; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 3706 ; AVX512BW-NEXT: retq 3707 entry: 3708 %cmp = icmp uge <64 x i8> %a, %b 3709 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3710 ret <64 x i8> %sel 3711 } 3712 3713 define <32 x i16> @test105(<32 x i16> %a, <32 x i16> %b) { 3714 ; SSE-LABEL: test105: 3715 ; SSE: # BB#0: # %entry 3716 ; SSE-NEXT: pminsw %xmm4, %xmm0 3717 ; SSE-NEXT: pminsw %xmm5, %xmm1 3718 ; SSE-NEXT: pminsw %xmm6, %xmm2 3719 ; SSE-NEXT: pminsw %xmm7, %xmm3 3720 ; SSE-NEXT: retq 3721 ; 3722 ; AVX1-LABEL: test105: 3723 ; AVX1: # BB#0: # %entry 3724 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3725 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3726 ; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 3727 ; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 3728 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3729 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3730 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3731 ; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 3732 ; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 3733 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3734 ; AVX1-NEXT: retq 3735 ; 3736 ; AVX2-LABEL: test105: 3737 ; AVX2: # BB#0: # %entry 3738 ; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 3739 ; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 3740 ; AVX2-NEXT: retq 3741 ; 3742 ; AVX512BW-LABEL: test105: 3743 ; AVX512BW: # BB#0: # %entry 3744 ; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 3745 ; AVX512BW-NEXT: retq 3746 entry: 3747 %cmp = icmp slt <32 x i16> %a, %b 3748 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3749 ret <32 x i16> %sel 3750 } 3751 3752 define <32 x i16> @test106(<32 x i16> %a, <32 x i16> %b) { 3753 ; SSE-LABEL: test106: 3754 ; SSE: # BB#0: # %entry 3755 ; SSE-NEXT: pminsw %xmm4, %xmm0 3756 ; SSE-NEXT: pminsw %xmm5, %xmm1 3757 ; SSE-NEXT: pminsw %xmm6, %xmm2 3758 ; SSE-NEXT: pminsw %xmm7, %xmm3 3759 ; SSE-NEXT: retq 3760 ; 3761 ; AVX1-LABEL: test106: 3762 ; AVX1: # BB#0: # %entry 3763 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3764 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3765 ; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 3766 ; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 3767 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3768 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3769 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3770 ; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 3771 ; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 3772 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3773 ; AVX1-NEXT: retq 3774 ; 3775 ; AVX2-LABEL: test106: 3776 ; AVX2: # BB#0: # %entry 3777 ; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 3778 ; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 3779 ; AVX2-NEXT: retq 3780 ; 3781 ; AVX512BW-LABEL: test106: 3782 ; AVX512BW: # BB#0: # %entry 3783 ; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 3784 ; AVX512BW-NEXT: retq 3785 entry: 3786 %cmp = icmp sle <32 x i16> %a, %b 3787 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3788 ret <32 x i16> %sel 3789 } 3790 3791 define <32 x i16> @test107(<32 x i16> %a, <32 x i16> %b) { 3792 ; SSE-LABEL: test107: 3793 ; SSE: # BB#0: # %entry 3794 ; SSE-NEXT: pmaxsw %xmm4, %xmm0 3795 ; SSE-NEXT: pmaxsw %xmm5, %xmm1 3796 ; SSE-NEXT: pmaxsw %xmm6, %xmm2 3797 ; SSE-NEXT: pmaxsw %xmm7, %xmm3 3798 ; SSE-NEXT: retq 3799 ; 3800 ; AVX1-LABEL: test107: 3801 ; AVX1: # BB#0: # %entry 3802 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3803 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3804 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 3805 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 3806 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3807 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3808 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3809 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 3810 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 3811 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3812 ; AVX1-NEXT: retq 3813 ; 3814 ; AVX2-LABEL: test107: 3815 ; AVX2: # BB#0: # %entry 3816 ; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 3817 ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 3818 ; AVX2-NEXT: retq 3819 ; 3820 ; AVX512BW-LABEL: test107: 3821 ; AVX512BW: # BB#0: # %entry 3822 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 3823 ; AVX512BW-NEXT: retq 3824 entry: 3825 %cmp = icmp sgt <32 x i16> %a, %b 3826 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3827 ret <32 x i16> %sel 3828 } 3829 3830 define <32 x i16> @test108(<32 x i16> %a, <32 x i16> %b) { 3831 ; SSE-LABEL: test108: 3832 ; SSE: # BB#0: # %entry 3833 ; SSE-NEXT: pmaxsw %xmm4, %xmm0 3834 ; SSE-NEXT: pmaxsw %xmm5, %xmm1 3835 ; SSE-NEXT: pmaxsw %xmm6, %xmm2 3836 ; SSE-NEXT: pmaxsw %xmm7, %xmm3 3837 ; SSE-NEXT: retq 3838 ; 3839 ; AVX1-LABEL: test108: 3840 ; AVX1: # BB#0: # %entry 3841 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3842 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3843 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 3844 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 3845 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3846 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3847 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3848 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 3849 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 3850 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3851 ; AVX1-NEXT: retq 3852 ; 3853 ; AVX2-LABEL: test108: 3854 ; AVX2: # BB#0: # %entry 3855 ; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 3856 ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 3857 ; AVX2-NEXT: retq 3858 ; 3859 ; AVX512BW-LABEL: test108: 3860 ; AVX512BW: # BB#0: # %entry 3861 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 3862 ; AVX512BW-NEXT: retq 3863 entry: 3864 %cmp = icmp sge <32 x i16> %a, %b 3865 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3866 ret <32 x i16> %sel 3867 } 3868 3869 define <32 x i16> @test109(<32 x i16> %a, <32 x i16> %b) { 3870 ; SSE2-LABEL: test109: 3871 ; SSE2: # BB#0: # %entry 3872 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [32768,32768,32768,32768,32768,32768,32768,32768] 3873 ; SSE2-NEXT: movdqa %xmm3, %xmm9 3874 ; SSE2-NEXT: pxor %xmm10, %xmm9 3875 ; SSE2-NEXT: movdqa %xmm7, %xmm8 3876 ; SSE2-NEXT: pxor %xmm10, %xmm8 3877 ; SSE2-NEXT: pcmpgtw %xmm9, %xmm8 3878 ; SSE2-NEXT: movdqa %xmm2, %xmm11 3879 ; SSE2-NEXT: pxor %xmm10, %xmm11 3880 ; SSE2-NEXT: movdqa %xmm6, %xmm9 3881 ; SSE2-NEXT: pxor %xmm10, %xmm9 3882 ; SSE2-NEXT: pcmpgtw %xmm11, %xmm9 3883 ; SSE2-NEXT: movdqa %xmm1, %xmm11 3884 ; SSE2-NEXT: pxor %xmm10, %xmm11 3885 ; SSE2-NEXT: movdqa %xmm5, %xmm12 3886 ; SSE2-NEXT: pxor %xmm10, %xmm12 3887 ; SSE2-NEXT: pcmpgtw %xmm11, %xmm12 3888 ; SSE2-NEXT: movdqa %xmm0, %xmm11 3889 ; SSE2-NEXT: pxor %xmm10, %xmm11 3890 ; SSE2-NEXT: pxor %xmm4, %xmm10 3891 ; SSE2-NEXT: pcmpgtw %xmm11, %xmm10 3892 ; SSE2-NEXT: pand %xmm10, %xmm0 3893 ; SSE2-NEXT: pandn %xmm4, %xmm10 3894 ; SSE2-NEXT: por %xmm10, %xmm0 3895 ; SSE2-NEXT: pand %xmm12, %xmm1 3896 ; SSE2-NEXT: pandn %xmm5, %xmm12 3897 ; SSE2-NEXT: por %xmm12, %xmm1 3898 ; SSE2-NEXT: pand %xmm9, %xmm2 3899 ; SSE2-NEXT: pandn %xmm6, %xmm9 3900 ; SSE2-NEXT: por %xmm9, %xmm2 3901 ; SSE2-NEXT: pand %xmm8, %xmm3 3902 ; SSE2-NEXT: pandn %xmm7, %xmm8 3903 ; SSE2-NEXT: por %xmm8, %xmm3 3904 ; SSE2-NEXT: retq 3905 ; 3906 ; SSE4-LABEL: test109: 3907 ; SSE4: # BB#0: # %entry 3908 ; SSE4-NEXT: pminuw %xmm4, %xmm0 3909 ; SSE4-NEXT: pminuw %xmm5, %xmm1 3910 ; SSE4-NEXT: pminuw %xmm6, %xmm2 3911 ; SSE4-NEXT: pminuw %xmm7, %xmm3 3912 ; SSE4-NEXT: retq 3913 ; 3914 ; AVX1-LABEL: test109: 3915 ; AVX1: # BB#0: # %entry 3916 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3917 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3918 ; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 3919 ; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 3920 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3921 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3922 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3923 ; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 3924 ; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 3925 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3926 ; AVX1-NEXT: retq 3927 ; 3928 ; AVX2-LABEL: test109: 3929 ; AVX2: # BB#0: # %entry 3930 ; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 3931 ; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 3932 ; AVX2-NEXT: retq 3933 ; 3934 ; AVX512BW-LABEL: test109: 3935 ; AVX512BW: # BB#0: # %entry 3936 ; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 3937 ; AVX512BW-NEXT: retq 3938 entry: 3939 %cmp = icmp ult <32 x i16> %a, %b 3940 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3941 ret <32 x i16> %sel 3942 } 3943 3944 define <32 x i16> @test110(<32 x i16> %a, <32 x i16> %b) { 3945 ; SSE2-LABEL: test110: 3946 ; SSE2: # BB#0: # %entry 3947 ; SSE2-NEXT: movdqa %xmm3, %xmm8 3948 ; SSE2-NEXT: movdqa %xmm2, %xmm9 3949 ; SSE2-NEXT: movdqa %xmm1, %xmm10 3950 ; SSE2-NEXT: psubusw %xmm7, %xmm3 3951 ; SSE2-NEXT: pxor %xmm12, %xmm12 3952 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm3 3953 ; SSE2-NEXT: psubusw %xmm6, %xmm2 3954 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm2 3955 ; SSE2-NEXT: psubusw %xmm5, %xmm1 3956 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm1 3957 ; SSE2-NEXT: movdqa %xmm0, %xmm11 3958 ; SSE2-NEXT: psubusw %xmm4, %xmm11 3959 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm11 3960 ; SSE2-NEXT: pand %xmm11, %xmm0 3961 ; SSE2-NEXT: pandn %xmm4, %xmm11 3962 ; SSE2-NEXT: por %xmm0, %xmm11 3963 ; SSE2-NEXT: pand %xmm1, %xmm10 3964 ; SSE2-NEXT: pandn %xmm5, %xmm1 3965 ; SSE2-NEXT: por %xmm10, %xmm1 3966 ; SSE2-NEXT: pand %xmm2, %xmm9 3967 ; SSE2-NEXT: pandn %xmm6, %xmm2 3968 ; SSE2-NEXT: por %xmm9, %xmm2 3969 ; SSE2-NEXT: pand %xmm3, %xmm8 3970 ; SSE2-NEXT: pandn %xmm7, %xmm3 3971 ; SSE2-NEXT: por %xmm8, %xmm3 3972 ; SSE2-NEXT: movdqa %xmm11, %xmm0 3973 ; SSE2-NEXT: retq 3974 ; 3975 ; SSE4-LABEL: test110: 3976 ; SSE4: # BB#0: # %entry 3977 ; SSE4-NEXT: pminuw %xmm4, %xmm0 3978 ; SSE4-NEXT: pminuw %xmm5, %xmm1 3979 ; SSE4-NEXT: pminuw %xmm6, %xmm2 3980 ; SSE4-NEXT: pminuw %xmm7, %xmm3 3981 ; SSE4-NEXT: retq 3982 ; 3983 ; AVX1-LABEL: test110: 3984 ; AVX1: # BB#0: # %entry 3985 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3986 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3987 ; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 3988 ; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 3989 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3990 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3991 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3992 ; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 3993 ; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 3994 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3995 ; AVX1-NEXT: retq 3996 ; 3997 ; AVX2-LABEL: test110: 3998 ; AVX2: # BB#0: # %entry 3999 ; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 4000 ; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 4001 ; AVX2-NEXT: retq 4002 ; 4003 ; AVX512BW-LABEL: test110: 4004 ; AVX512BW: # BB#0: # %entry 4005 ; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 4006 ; AVX512BW-NEXT: retq 4007 entry: 4008 %cmp = icmp ule <32 x i16> %a, %b 4009 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 4010 ret <32 x i16> %sel 4011 } 4012 4013 define <32 x i16> @test111(<32 x i16> %a, <32 x i16> %b) { 4014 ; SSE2-LABEL: test111: 4015 ; SSE2: # BB#0: # %entry 4016 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [32768,32768,32768,32768,32768,32768,32768,32768] 4017 ; SSE2-NEXT: movdqa %xmm7, %xmm9 4018 ; SSE2-NEXT: pxor %xmm11, %xmm9 4019 ; SSE2-NEXT: movdqa %xmm3, %xmm8 4020 ; SSE2-NEXT: pxor %xmm11, %xmm8 4021 ; SSE2-NEXT: pcmpgtw %xmm9, %xmm8 4022 ; SSE2-NEXT: movdqa %xmm6, %xmm10 4023 ; SSE2-NEXT: pxor %xmm11, %xmm10 4024 ; SSE2-NEXT: movdqa %xmm2, %xmm9 4025 ; SSE2-NEXT: pxor %xmm11, %xmm9 4026 ; SSE2-NEXT: pcmpgtw %xmm10, %xmm9 4027 ; SSE2-NEXT: movdqa %xmm5, %xmm12 4028 ; SSE2-NEXT: pxor %xmm11, %xmm12 4029 ; SSE2-NEXT: movdqa %xmm1, %xmm10 4030 ; SSE2-NEXT: pxor %xmm11, %xmm10 4031 ; SSE2-NEXT: pcmpgtw %xmm12, %xmm10 4032 ; SSE2-NEXT: movdqa %xmm4, %xmm12 4033 ; SSE2-NEXT: pxor %xmm11, %xmm12 4034 ; SSE2-NEXT: pxor %xmm0, %xmm11 4035 ; SSE2-NEXT: pcmpgtw %xmm12, %xmm11 4036 ; SSE2-NEXT: pand %xmm11, %xmm0 4037 ; SSE2-NEXT: pandn %xmm4, %xmm11 4038 ; SSE2-NEXT: por %xmm11, %xmm0 4039 ; SSE2-NEXT: pand %xmm10, %xmm1 4040 ; SSE2-NEXT: pandn %xmm5, %xmm10 4041 ; SSE2-NEXT: por %xmm1, %xmm10 4042 ; SSE2-NEXT: pand %xmm9, %xmm2 4043 ; SSE2-NEXT: pandn %xmm6, %xmm9 4044 ; SSE2-NEXT: por %xmm2, %xmm9 4045 ; SSE2-NEXT: pand %xmm8, %xmm3 4046 ; SSE2-NEXT: pandn %xmm7, %xmm8 4047 ; SSE2-NEXT: por %xmm3, %xmm8 4048 ; SSE2-NEXT: movdqa %xmm10, %xmm1 4049 ; SSE2-NEXT: movdqa %xmm9, %xmm2 4050 ; SSE2-NEXT: movdqa %xmm8, %xmm3 4051 ; SSE2-NEXT: retq 4052 ; 4053 ; SSE4-LABEL: test111: 4054 ; SSE4: # BB#0: # %entry 4055 ; SSE4-NEXT: pmaxuw %xmm4, %xmm0 4056 ; SSE4-NEXT: pmaxuw %xmm5, %xmm1 4057 ; SSE4-NEXT: pmaxuw %xmm6, %xmm2 4058 ; SSE4-NEXT: pmaxuw %xmm7, %xmm3 4059 ; SSE4-NEXT: retq 4060 ; 4061 ; AVX1-LABEL: test111: 4062 ; AVX1: # BB#0: # %entry 4063 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4064 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4065 ; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 4066 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 4067 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4068 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4069 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4070 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 4071 ; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 4072 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4073 ; AVX1-NEXT: retq 4074 ; 4075 ; AVX2-LABEL: test111: 4076 ; AVX2: # BB#0: # %entry 4077 ; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 4078 ; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 4079 ; AVX2-NEXT: retq 4080 ; 4081 ; AVX512BW-LABEL: test111: 4082 ; AVX512BW: # BB#0: # %entry 4083 ; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 4084 ; AVX512BW-NEXT: retq 4085 entry: 4086 %cmp = icmp ugt <32 x i16> %a, %b 4087 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 4088 ret <32 x i16> %sel 4089 } 4090 4091 define <32 x i16> @test112(<32 x i16> %a, <32 x i16> %b) { 4092 ; SSE2-LABEL: test112: 4093 ; SSE2: # BB#0: # %entry 4094 ; SSE2-NEXT: movdqa %xmm7, %xmm8 4095 ; SSE2-NEXT: psubusw %xmm3, %xmm8 4096 ; SSE2-NEXT: pxor %xmm9, %xmm9 4097 ; SSE2-NEXT: pcmpeqw %xmm9, %xmm8 4098 ; SSE2-NEXT: movdqa %xmm6, %xmm10 4099 ; SSE2-NEXT: psubusw %xmm2, %xmm10 4100 ; SSE2-NEXT: pcmpeqw %xmm9, %xmm10 4101 ; SSE2-NEXT: movdqa %xmm5, %xmm11 4102 ; SSE2-NEXT: psubusw %xmm1, %xmm11 4103 ; SSE2-NEXT: pcmpeqw %xmm9, %xmm11 4104 ; SSE2-NEXT: movdqa %xmm4, %xmm12 4105 ; SSE2-NEXT: psubusw %xmm0, %xmm12 4106 ; SSE2-NEXT: pcmpeqw %xmm9, %xmm12 4107 ; SSE2-NEXT: pand %xmm12, %xmm0 4108 ; SSE2-NEXT: pandn %xmm4, %xmm12 4109 ; SSE2-NEXT: por %xmm12, %xmm0 4110 ; SSE2-NEXT: pand %xmm11, %xmm1 4111 ; SSE2-NEXT: pandn %xmm5, %xmm11 4112 ; SSE2-NEXT: por %xmm11, %xmm1 4113 ; SSE2-NEXT: pand %xmm10, %xmm2 4114 ; SSE2-NEXT: pandn %xmm6, %xmm10 4115 ; SSE2-NEXT: por %xmm10, %xmm2 4116 ; SSE2-NEXT: pand %xmm8, %xmm3 4117 ; SSE2-NEXT: pandn %xmm7, %xmm8 4118 ; SSE2-NEXT: por %xmm8, %xmm3 4119 ; SSE2-NEXT: retq 4120 ; 4121 ; SSE4-LABEL: test112: 4122 ; SSE4: # BB#0: # %entry 4123 ; SSE4-NEXT: pmaxuw %xmm4, %xmm0 4124 ; SSE4-NEXT: pmaxuw %xmm5, %xmm1 4125 ; SSE4-NEXT: pmaxuw %xmm6, %xmm2 4126 ; SSE4-NEXT: pmaxuw %xmm7, %xmm3 4127 ; SSE4-NEXT: retq 4128 ; 4129 ; AVX1-LABEL: test112: 4130 ; AVX1: # BB#0: # %entry 4131 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4132 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4133 ; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 4134 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 4135 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4136 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4137 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4138 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 4139 ; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 4140 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4141 ; AVX1-NEXT: retq 4142 ; 4143 ; AVX2-LABEL: test112: 4144 ; AVX2: # BB#0: # %entry 4145 ; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 4146 ; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 4147 ; AVX2-NEXT: retq 4148 ; 4149 ; AVX512BW-LABEL: test112: 4150 ; AVX512BW: # BB#0: # %entry 4151 ; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 4152 ; AVX512BW-NEXT: retq 4153 entry: 4154 %cmp = icmp uge <32 x i16> %a, %b 4155 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 4156 ret <32 x i16> %sel 4157 } 4158 4159 define <16 x i32> @test113(<16 x i32> %a, <16 x i32> %b) { 4160 ; SSE2-LABEL: test113: 4161 ; SSE2: # BB#0: # %entry 4162 ; SSE2-NEXT: movdqa %xmm7, %xmm8 4163 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm8 4164 ; SSE2-NEXT: movdqa %xmm6, %xmm9 4165 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm9 4166 ; SSE2-NEXT: movdqa %xmm5, %xmm10 4167 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm10 4168 ; SSE2-NEXT: movdqa %xmm4, %xmm11 4169 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm11 4170 ; SSE2-NEXT: pand %xmm11, %xmm0 4171 ; SSE2-NEXT: pandn %xmm4, %xmm11 4172 ; SSE2-NEXT: por %xmm11, %xmm0 4173 ; SSE2-NEXT: pand %xmm10, %xmm1 4174 ; SSE2-NEXT: pandn %xmm5, %xmm10 4175 ; SSE2-NEXT: por %xmm10, %xmm1 4176 ; SSE2-NEXT: pand %xmm9, %xmm2 4177 ; SSE2-NEXT: pandn %xmm6, %xmm9 4178 ; SSE2-NEXT: por %xmm9, %xmm2 4179 ; SSE2-NEXT: pand %xmm8, %xmm3 4180 ; SSE2-NEXT: pandn %xmm7, %xmm8 4181 ; SSE2-NEXT: por %xmm8, %xmm3 4182 ; SSE2-NEXT: retq 4183 ; 4184 ; SSE4-LABEL: test113: 4185 ; SSE4: # BB#0: # %entry 4186 ; SSE4-NEXT: pminsd %xmm4, %xmm0 4187 ; SSE4-NEXT: pminsd %xmm5, %xmm1 4188 ; SSE4-NEXT: pminsd %xmm6, %xmm2 4189 ; SSE4-NEXT: pminsd %xmm7, %xmm3 4190 ; SSE4-NEXT: retq 4191 ; 4192 ; AVX1-LABEL: test113: 4193 ; AVX1: # BB#0: # %entry 4194 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4195 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4196 ; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 4197 ; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 4198 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4199 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4200 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4201 ; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 4202 ; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 4203 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4204 ; AVX1-NEXT: retq 4205 ; 4206 ; AVX2-LABEL: test113: 4207 ; AVX2: # BB#0: # %entry 4208 ; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 4209 ; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 4210 ; AVX2-NEXT: retq 4211 ; 4212 ; AVX512F-LABEL: test113: 4213 ; AVX512F: # BB#0: # %entry 4214 ; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0 4215 ; AVX512F-NEXT: retq 4216 entry: 4217 %cmp = icmp slt <16 x i32> %a, %b 4218 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4219 ret <16 x i32> %sel 4220 } 4221 4222 define <16 x i32> @test114(<16 x i32> %a, <16 x i32> %b) { 4223 ; SSE2-LABEL: test114: 4224 ; SSE2: # BB#0: # %entry 4225 ; SSE2-NEXT: movdqa %xmm3, %xmm8 4226 ; SSE2-NEXT: movdqa %xmm2, %xmm9 4227 ; SSE2-NEXT: movdqa %xmm8, %xmm12 4228 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm12 4229 ; SSE2-NEXT: pcmpeqd %xmm13, %xmm13 4230 ; SSE2-NEXT: movdqa %xmm12, %xmm3 4231 ; SSE2-NEXT: pxor %xmm13, %xmm3 4232 ; SSE2-NEXT: movdqa %xmm9, %xmm14 4233 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm14 4234 ; SSE2-NEXT: movdqa %xmm14, %xmm2 4235 ; SSE2-NEXT: pxor %xmm13, %xmm2 4236 ; SSE2-NEXT: movdqa %xmm1, %xmm15 4237 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm15 4238 ; SSE2-NEXT: movdqa %xmm15, %xmm10 4239 ; SSE2-NEXT: pxor %xmm13, %xmm10 4240 ; SSE2-NEXT: movdqa %xmm0, %xmm11 4241 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm11 4242 ; SSE2-NEXT: pxor %xmm11, %xmm13 4243 ; SSE2-NEXT: pandn %xmm0, %xmm11 4244 ; SSE2-NEXT: pandn %xmm4, %xmm13 4245 ; SSE2-NEXT: por %xmm13, %xmm11 4246 ; SSE2-NEXT: pandn %xmm1, %xmm15 4247 ; SSE2-NEXT: pandn %xmm5, %xmm10 4248 ; SSE2-NEXT: por %xmm15, %xmm10 4249 ; SSE2-NEXT: pandn %xmm9, %xmm14 4250 ; SSE2-NEXT: pandn %xmm6, %xmm2 4251 ; SSE2-NEXT: por %xmm14, %xmm2 4252 ; SSE2-NEXT: pandn %xmm8, %xmm12 4253 ; SSE2-NEXT: pandn %xmm7, %xmm3 4254 ; SSE2-NEXT: por %xmm12, %xmm3 4255 ; SSE2-NEXT: movdqa %xmm11, %xmm0 4256 ; SSE2-NEXT: movdqa %xmm10, %xmm1 4257 ; SSE2-NEXT: retq 4258 ; 4259 ; SSE4-LABEL: test114: 4260 ; SSE4: # BB#0: # %entry 4261 ; SSE4-NEXT: pminsd %xmm4, %xmm0 4262 ; SSE4-NEXT: pminsd %xmm5, %xmm1 4263 ; SSE4-NEXT: pminsd %xmm6, %xmm2 4264 ; SSE4-NEXT: pminsd %xmm7, %xmm3 4265 ; SSE4-NEXT: retq 4266 ; 4267 ; AVX1-LABEL: test114: 4268 ; AVX1: # BB#0: # %entry 4269 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4270 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4271 ; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 4272 ; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 4273 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4274 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4275 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4276 ; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 4277 ; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 4278 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4279 ; AVX1-NEXT: retq 4280 ; 4281 ; AVX2-LABEL: test114: 4282 ; AVX2: # BB#0: # %entry 4283 ; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 4284 ; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 4285 ; AVX2-NEXT: retq 4286 ; 4287 ; AVX512F-LABEL: test114: 4288 ; AVX512F: # BB#0: # %entry 4289 ; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0 4290 ; AVX512F-NEXT: retq 4291 entry: 4292 %cmp = icmp sle <16 x i32> %a, %b 4293 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4294 ret <16 x i32> %sel 4295 } 4296 4297 define <16 x i32> @test115(<16 x i32> %a, <16 x i32> %b) { 4298 ; SSE2-LABEL: test115: 4299 ; SSE2: # BB#0: # %entry 4300 ; SSE2-NEXT: movdqa %xmm3, %xmm8 4301 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm3 4302 ; SSE2-NEXT: movdqa %xmm2, %xmm9 4303 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm9 4304 ; SSE2-NEXT: movdqa %xmm1, %xmm10 4305 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm10 4306 ; SSE2-NEXT: movdqa %xmm0, %xmm11 4307 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm11 4308 ; SSE2-NEXT: pand %xmm11, %xmm0 4309 ; SSE2-NEXT: pandn %xmm4, %xmm11 4310 ; SSE2-NEXT: por %xmm0, %xmm11 4311 ; SSE2-NEXT: pand %xmm10, %xmm1 4312 ; SSE2-NEXT: pandn %xmm5, %xmm10 4313 ; SSE2-NEXT: por %xmm1, %xmm10 4314 ; SSE2-NEXT: pand %xmm9, %xmm2 4315 ; SSE2-NEXT: pandn %xmm6, %xmm9 4316 ; SSE2-NEXT: por %xmm2, %xmm9 4317 ; SSE2-NEXT: pand %xmm3, %xmm8 4318 ; SSE2-NEXT: pandn %xmm7, %xmm3 4319 ; SSE2-NEXT: por %xmm8, %xmm3 4320 ; SSE2-NEXT: movdqa %xmm11, %xmm0 4321 ; SSE2-NEXT: movdqa %xmm10, %xmm1 4322 ; SSE2-NEXT: movdqa %xmm9, %xmm2 4323 ; SSE2-NEXT: retq 4324 ; 4325 ; SSE4-LABEL: test115: 4326 ; SSE4: # BB#0: # %entry 4327 ; SSE4-NEXT: pmaxsd %xmm4, %xmm0 4328 ; SSE4-NEXT: pmaxsd %xmm5, %xmm1 4329 ; SSE4-NEXT: pmaxsd %xmm6, %xmm2 4330 ; SSE4-NEXT: pmaxsd %xmm7, %xmm3 4331 ; SSE4-NEXT: retq 4332 ; 4333 ; AVX1-LABEL: test115: 4334 ; AVX1: # BB#0: # %entry 4335 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4336 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4337 ; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 4338 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 4339 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4340 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4341 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4342 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 4343 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 4344 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4345 ; AVX1-NEXT: retq 4346 ; 4347 ; AVX2-LABEL: test115: 4348 ; AVX2: # BB#0: # %entry 4349 ; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 4350 ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 4351 ; AVX2-NEXT: retq 4352 ; 4353 ; AVX512F-LABEL: test115: 4354 ; AVX512F: # BB#0: # %entry 4355 ; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 4356 ; AVX512F-NEXT: retq 4357 entry: 4358 %cmp = icmp sgt <16 x i32> %a, %b 4359 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4360 ret <16 x i32> %sel 4361 } 4362 4363 define <16 x i32> @test116(<16 x i32> %a, <16 x i32> %b) { 4364 ; SSE2-LABEL: test116: 4365 ; SSE2: # BB#0: # %entry 4366 ; SSE2-NEXT: movdqa %xmm3, %xmm8 4367 ; SSE2-NEXT: movdqa %xmm2, %xmm9 4368 ; SSE2-NEXT: movdqa %xmm0, %xmm10 4369 ; SSE2-NEXT: movdqa %xmm7, %xmm12 4370 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm12 4371 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 4372 ; SSE2-NEXT: movdqa %xmm12, %xmm3 4373 ; SSE2-NEXT: pxor %xmm0, %xmm3 4374 ; SSE2-NEXT: movdqa %xmm6, %xmm13 4375 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm13 4376 ; SSE2-NEXT: movdqa %xmm13, %xmm2 4377 ; SSE2-NEXT: pxor %xmm0, %xmm2 4378 ; SSE2-NEXT: movdqa %xmm5, %xmm14 4379 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm14 4380 ; SSE2-NEXT: movdqa %xmm14, %xmm11 4381 ; SSE2-NEXT: pxor %xmm0, %xmm11 4382 ; SSE2-NEXT: movdqa %xmm4, %xmm15 4383 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm15 4384 ; SSE2-NEXT: pxor %xmm15, %xmm0 4385 ; SSE2-NEXT: pandn %xmm10, %xmm15 4386 ; SSE2-NEXT: pandn %xmm4, %xmm0 4387 ; SSE2-NEXT: por %xmm15, %xmm0 4388 ; SSE2-NEXT: pandn %xmm1, %xmm14 4389 ; SSE2-NEXT: pandn %xmm5, %xmm11 4390 ; SSE2-NEXT: por %xmm14, %xmm11 4391 ; SSE2-NEXT: pandn %xmm9, %xmm13 4392 ; SSE2-NEXT: pandn %xmm6, %xmm2 4393 ; SSE2-NEXT: por %xmm13, %xmm2 4394 ; SSE2-NEXT: pandn %xmm8, %xmm12 4395 ; SSE2-NEXT: pandn %xmm7, %xmm3 4396 ; SSE2-NEXT: por %xmm12, %xmm3 4397 ; SSE2-NEXT: movdqa %xmm11, %xmm1 4398 ; SSE2-NEXT: retq 4399 ; 4400 ; SSE4-LABEL: test116: 4401 ; SSE4: # BB#0: # %entry 4402 ; SSE4-NEXT: pmaxsd %xmm4, %xmm0 4403 ; SSE4-NEXT: pmaxsd %xmm5, %xmm1 4404 ; SSE4-NEXT: pmaxsd %xmm6, %xmm2 4405 ; SSE4-NEXT: pmaxsd %xmm7, %xmm3 4406 ; SSE4-NEXT: retq 4407 ; 4408 ; AVX1-LABEL: test116: 4409 ; AVX1: # BB#0: # %entry 4410 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4411 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4412 ; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 4413 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 4414 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4415 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4416 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4417 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 4418 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 4419 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4420 ; AVX1-NEXT: retq 4421 ; 4422 ; AVX2-LABEL: test116: 4423 ; AVX2: # BB#0: # %entry 4424 ; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 4425 ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 4426 ; AVX2-NEXT: retq 4427 ; 4428 ; AVX512F-LABEL: test116: 4429 ; AVX512F: # BB#0: # %entry 4430 ; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 4431 ; AVX512F-NEXT: retq 4432 entry: 4433 %cmp = icmp sge <16 x i32> %a, %b 4434 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4435 ret <16 x i32> %sel 4436 } 4437 4438 define <16 x i32> @test117(<16 x i32> %a, <16 x i32> %b) { 4439 ; SSE2-LABEL: test117: 4440 ; SSE2: # BB#0: # %entry 4441 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648] 4442 ; SSE2-NEXT: movdqa %xmm3, %xmm9 4443 ; SSE2-NEXT: pxor %xmm10, %xmm9 4444 ; SSE2-NEXT: movdqa %xmm7, %xmm8 4445 ; SSE2-NEXT: pxor %xmm10, %xmm8 4446 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm8 4447 ; SSE2-NEXT: movdqa %xmm2, %xmm11 4448 ; SSE2-NEXT: pxor %xmm10, %xmm11 4449 ; SSE2-NEXT: movdqa %xmm6, %xmm9 4450 ; SSE2-NEXT: pxor %xmm10, %xmm9 4451 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm9 4452 ; SSE2-NEXT: movdqa %xmm1, %xmm11 4453 ; SSE2-NEXT: pxor %xmm10, %xmm11 4454 ; SSE2-NEXT: movdqa %xmm5, %xmm12 4455 ; SSE2-NEXT: pxor %xmm10, %xmm12 4456 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm12 4457 ; SSE2-NEXT: movdqa %xmm0, %xmm11 4458 ; SSE2-NEXT: pxor %xmm10, %xmm11 4459 ; SSE2-NEXT: pxor %xmm4, %xmm10 4460 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm10 4461 ; SSE2-NEXT: pand %xmm10, %xmm0 4462 ; SSE2-NEXT: pandn %xmm4, %xmm10 4463 ; SSE2-NEXT: por %xmm10, %xmm0 4464 ; SSE2-NEXT: pand %xmm12, %xmm1 4465 ; SSE2-NEXT: pandn %xmm5, %xmm12 4466 ; SSE2-NEXT: por %xmm12, %xmm1 4467 ; SSE2-NEXT: pand %xmm9, %xmm2 4468 ; SSE2-NEXT: pandn %xmm6, %xmm9 4469 ; SSE2-NEXT: por %xmm9, %xmm2 4470 ; SSE2-NEXT: pand %xmm8, %xmm3 4471 ; SSE2-NEXT: pandn %xmm7, %xmm8 4472 ; SSE2-NEXT: por %xmm8, %xmm3 4473 ; SSE2-NEXT: retq 4474 ; 4475 ; SSE4-LABEL: test117: 4476 ; SSE4: # BB#0: # %entry 4477 ; SSE4-NEXT: pminud %xmm4, %xmm0 4478 ; SSE4-NEXT: pminud %xmm5, %xmm1 4479 ; SSE4-NEXT: pminud %xmm6, %xmm2 4480 ; SSE4-NEXT: pminud %xmm7, %xmm3 4481 ; SSE4-NEXT: retq 4482 ; 4483 ; AVX1-LABEL: test117: 4484 ; AVX1: # BB#0: # %entry 4485 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4486 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4487 ; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 4488 ; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 4489 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4490 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4491 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4492 ; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 4493 ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 4494 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4495 ; AVX1-NEXT: retq 4496 ; 4497 ; AVX2-LABEL: test117: 4498 ; AVX2: # BB#0: # %entry 4499 ; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 4500 ; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 4501 ; AVX2-NEXT: retq 4502 ; 4503 ; AVX512F-LABEL: test117: 4504 ; AVX512F: # BB#0: # %entry 4505 ; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0 4506 ; AVX512F-NEXT: retq 4507 entry: 4508 %cmp = icmp ult <16 x i32> %a, %b 4509 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4510 ret <16 x i32> %sel 4511 } 4512 4513 define <16 x i32> @test118(<16 x i32> %a, <16 x i32> %b) { 4514 ; SSE2-LABEL: test118: 4515 ; SSE2: # BB#0: # %entry 4516 ; SSE2-NEXT: movdqa %xmm0, %xmm10 4517 ; SSE2-NEXT: movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648] 4518 ; SSE2-NEXT: movdqa %xmm7, %xmm0 4519 ; SSE2-NEXT: pxor %xmm14, %xmm0 4520 ; SSE2-NEXT: movdqa %xmm3, %xmm12 4521 ; SSE2-NEXT: pxor %xmm14, %xmm12 4522 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm12 4523 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 4524 ; SSE2-NEXT: movdqa %xmm12, %xmm8 4525 ; SSE2-NEXT: pxor %xmm0, %xmm8 4526 ; SSE2-NEXT: movdqa %xmm6, %xmm9 4527 ; SSE2-NEXT: pxor %xmm14, %xmm9 4528 ; SSE2-NEXT: movdqa %xmm2, %xmm13 4529 ; SSE2-NEXT: pxor %xmm14, %xmm13 4530 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm13 4531 ; SSE2-NEXT: movdqa %xmm13, %xmm9 4532 ; SSE2-NEXT: pxor %xmm0, %xmm9 4533 ; SSE2-NEXT: movdqa %xmm5, %xmm11 4534 ; SSE2-NEXT: pxor %xmm14, %xmm11 4535 ; SSE2-NEXT: movdqa %xmm1, %xmm15 4536 ; SSE2-NEXT: pxor %xmm14, %xmm15 4537 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 4538 ; SSE2-NEXT: movdqa %xmm4, %xmm11 4539 ; SSE2-NEXT: pxor %xmm14, %xmm11 4540 ; SSE2-NEXT: pxor %xmm10, %xmm14 4541 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 4542 ; SSE2-NEXT: movdqa %xmm15, %xmm11 4543 ; SSE2-NEXT: pxor %xmm0, %xmm11 4544 ; SSE2-NEXT: pxor %xmm14, %xmm0 4545 ; SSE2-NEXT: pandn %xmm10, %xmm14 4546 ; SSE2-NEXT: pandn %xmm4, %xmm0 4547 ; SSE2-NEXT: por %xmm14, %xmm0 4548 ; SSE2-NEXT: pandn %xmm1, %xmm15 4549 ; SSE2-NEXT: pandn %xmm5, %xmm11 4550 ; SSE2-NEXT: por %xmm15, %xmm11 4551 ; SSE2-NEXT: pandn %xmm2, %xmm13 4552 ; SSE2-NEXT: pandn %xmm6, %xmm9 4553 ; SSE2-NEXT: por %xmm13, %xmm9 4554 ; SSE2-NEXT: pandn %xmm3, %xmm12 4555 ; SSE2-NEXT: pandn %xmm7, %xmm8 4556 ; SSE2-NEXT: por %xmm12, %xmm8 4557 ; SSE2-NEXT: movdqa %xmm11, %xmm1 4558 ; SSE2-NEXT: movdqa %xmm9, %xmm2 4559 ; SSE2-NEXT: movdqa %xmm8, %xmm3 4560 ; SSE2-NEXT: retq 4561 ; 4562 ; SSE4-LABEL: test118: 4563 ; SSE4: # BB#0: # %entry 4564 ; SSE4-NEXT: pminud %xmm4, %xmm0 4565 ; SSE4-NEXT: pminud %xmm5, %xmm1 4566 ; SSE4-NEXT: pminud %xmm6, %xmm2 4567 ; SSE4-NEXT: pminud %xmm7, %xmm3 4568 ; SSE4-NEXT: retq 4569 ; 4570 ; AVX1-LABEL: test118: 4571 ; AVX1: # BB#0: # %entry 4572 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4573 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4574 ; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 4575 ; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 4576 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4577 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4578 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4579 ; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 4580 ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 4581 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4582 ; AVX1-NEXT: retq 4583 ; 4584 ; AVX2-LABEL: test118: 4585 ; AVX2: # BB#0: # %entry 4586 ; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 4587 ; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 4588 ; AVX2-NEXT: retq 4589 ; 4590 ; AVX512F-LABEL: test118: 4591 ; AVX512F: # BB#0: # %entry 4592 ; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0 4593 ; AVX512F-NEXT: retq 4594 entry: 4595 %cmp = icmp ule <16 x i32> %a, %b 4596 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4597 ret <16 x i32> %sel 4598 } 4599 4600 define <16 x i32> @test119(<16 x i32> %a, <16 x i32> %b) { 4601 ; SSE2-LABEL: test119: 4602 ; SSE2: # BB#0: # %entry 4603 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648] 4604 ; SSE2-NEXT: movdqa %xmm7, %xmm9 4605 ; SSE2-NEXT: pxor %xmm11, %xmm9 4606 ; SSE2-NEXT: movdqa %xmm3, %xmm8 4607 ; SSE2-NEXT: pxor %xmm11, %xmm8 4608 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm8 4609 ; SSE2-NEXT: movdqa %xmm6, %xmm10 4610 ; SSE2-NEXT: pxor %xmm11, %xmm10 4611 ; SSE2-NEXT: movdqa %xmm2, %xmm9 4612 ; SSE2-NEXT: pxor %xmm11, %xmm9 4613 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm9 4614 ; SSE2-NEXT: movdqa %xmm5, %xmm12 4615 ; SSE2-NEXT: pxor %xmm11, %xmm12 4616 ; SSE2-NEXT: movdqa %xmm1, %xmm10 4617 ; SSE2-NEXT: pxor %xmm11, %xmm10 4618 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm10 4619 ; SSE2-NEXT: movdqa %xmm4, %xmm12 4620 ; SSE2-NEXT: pxor %xmm11, %xmm12 4621 ; SSE2-NEXT: pxor %xmm0, %xmm11 4622 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm11 4623 ; SSE2-NEXT: pand %xmm11, %xmm0 4624 ; SSE2-NEXT: pandn %xmm4, %xmm11 4625 ; SSE2-NEXT: por %xmm11, %xmm0 4626 ; SSE2-NEXT: pand %xmm10, %xmm1 4627 ; SSE2-NEXT: pandn %xmm5, %xmm10 4628 ; SSE2-NEXT: por %xmm1, %xmm10 4629 ; SSE2-NEXT: pand %xmm9, %xmm2 4630 ; SSE2-NEXT: pandn %xmm6, %xmm9 4631 ; SSE2-NEXT: por %xmm2, %xmm9 4632 ; SSE2-NEXT: pand %xmm8, %xmm3 4633 ; SSE2-NEXT: pandn %xmm7, %xmm8 4634 ; SSE2-NEXT: por %xmm3, %xmm8 4635 ; SSE2-NEXT: movdqa %xmm10, %xmm1 4636 ; SSE2-NEXT: movdqa %xmm9, %xmm2 4637 ; SSE2-NEXT: movdqa %xmm8, %xmm3 4638 ; SSE2-NEXT: retq 4639 ; 4640 ; SSE4-LABEL: test119: 4641 ; SSE4: # BB#0: # %entry 4642 ; SSE4-NEXT: pmaxud %xmm4, %xmm0 4643 ; SSE4-NEXT: pmaxud %xmm5, %xmm1 4644 ; SSE4-NEXT: pmaxud %xmm6, %xmm2 4645 ; SSE4-NEXT: pmaxud %xmm7, %xmm3 4646 ; SSE4-NEXT: retq 4647 ; 4648 ; AVX1-LABEL: test119: 4649 ; AVX1: # BB#0: # %entry 4650 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4651 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4652 ; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 4653 ; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 4654 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4655 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4656 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4657 ; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 4658 ; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 4659 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4660 ; AVX1-NEXT: retq 4661 ; 4662 ; AVX2-LABEL: test119: 4663 ; AVX2: # BB#0: # %entry 4664 ; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 4665 ; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 4666 ; AVX2-NEXT: retq 4667 ; 4668 ; AVX512F-LABEL: test119: 4669 ; AVX512F: # BB#0: # %entry 4670 ; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 4671 ; AVX512F-NEXT: retq 4672 entry: 4673 %cmp = icmp ugt <16 x i32> %a, %b 4674 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4675 ret <16 x i32> %sel 4676 } 4677 4678 define <16 x i32> @test120(<16 x i32> %a, <16 x i32> %b) { 4679 ; SSE2-LABEL: test120: 4680 ; SSE2: # BB#0: # %entry 4681 ; SSE2-NEXT: movdqa %xmm0, %xmm10 4682 ; SSE2-NEXT: movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648] 4683 ; SSE2-NEXT: movdqa %xmm3, %xmm0 4684 ; SSE2-NEXT: pxor %xmm14, %xmm0 4685 ; SSE2-NEXT: movdqa %xmm7, %xmm12 4686 ; SSE2-NEXT: pxor %xmm14, %xmm12 4687 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm12 4688 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 4689 ; SSE2-NEXT: movdqa %xmm12, %xmm8 4690 ; SSE2-NEXT: pxor %xmm0, %xmm8 4691 ; SSE2-NEXT: movdqa %xmm2, %xmm9 4692 ; SSE2-NEXT: pxor %xmm14, %xmm9 4693 ; SSE2-NEXT: movdqa %xmm6, %xmm13 4694 ; SSE2-NEXT: pxor %xmm14, %xmm13 4695 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm13 4696 ; SSE2-NEXT: movdqa %xmm13, %xmm9 4697 ; SSE2-NEXT: pxor %xmm0, %xmm9 4698 ; SSE2-NEXT: movdqa %xmm1, %xmm11 4699 ; SSE2-NEXT: pxor %xmm14, %xmm11 4700 ; SSE2-NEXT: movdqa %xmm5, %xmm15 4701 ; SSE2-NEXT: pxor %xmm14, %xmm15 4702 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 4703 ; SSE2-NEXT: movdqa %xmm10, %xmm11 4704 ; SSE2-NEXT: pxor %xmm14, %xmm11 4705 ; SSE2-NEXT: pxor %xmm4, %xmm14 4706 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 4707 ; SSE2-NEXT: movdqa %xmm15, %xmm11 4708 ; SSE2-NEXT: pxor %xmm0, %xmm11 4709 ; SSE2-NEXT: pxor %xmm14, %xmm0 4710 ; SSE2-NEXT: pandn %xmm10, %xmm14 4711 ; SSE2-NEXT: pandn %xmm4, %xmm0 4712 ; SSE2-NEXT: por %xmm14, %xmm0 4713 ; SSE2-NEXT: pandn %xmm1, %xmm15 4714 ; SSE2-NEXT: pandn %xmm5, %xmm11 4715 ; SSE2-NEXT: por %xmm15, %xmm11 4716 ; SSE2-NEXT: pandn %xmm2, %xmm13 4717 ; SSE2-NEXT: pandn %xmm6, %xmm9 4718 ; SSE2-NEXT: por %xmm13, %xmm9 4719 ; SSE2-NEXT: pandn %xmm3, %xmm12 4720 ; SSE2-NEXT: pandn %xmm7, %xmm8 4721 ; SSE2-NEXT: por %xmm12, %xmm8 4722 ; SSE2-NEXT: movdqa %xmm11, %xmm1 4723 ; SSE2-NEXT: movdqa %xmm9, %xmm2 4724 ; SSE2-NEXT: movdqa %xmm8, %xmm3 4725 ; SSE2-NEXT: retq 4726 ; 4727 ; SSE4-LABEL: test120: 4728 ; SSE4: # BB#0: # %entry 4729 ; SSE4-NEXT: pmaxud %xmm4, %xmm0 4730 ; SSE4-NEXT: pmaxud %xmm5, %xmm1 4731 ; SSE4-NEXT: pmaxud %xmm6, %xmm2 4732 ; SSE4-NEXT: pmaxud %xmm7, %xmm3 4733 ; SSE4-NEXT: retq 4734 ; 4735 ; AVX1-LABEL: test120: 4736 ; AVX1: # BB#0: # %entry 4737 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4738 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4739 ; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 4740 ; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 4741 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4742 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4743 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4744 ; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 4745 ; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 4746 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4747 ; AVX1-NEXT: retq 4748 ; 4749 ; AVX2-LABEL: test120: 4750 ; AVX2: # BB#0: # %entry 4751 ; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 4752 ; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 4753 ; AVX2-NEXT: retq 4754 ; 4755 ; AVX512F-LABEL: test120: 4756 ; AVX512F: # BB#0: # %entry 4757 ; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 4758 ; AVX512F-NEXT: retq 4759 entry: 4760 %cmp = icmp uge <16 x i32> %a, %b 4761 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4762 ret <16 x i32> %sel 4763 } 4764 4765 define <8 x i64> @test121(<8 x i64> %a, <8 x i64> %b) { 4766 ; SSE2-LABEL: test121: 4767 ; SSE2: # BB#0: # %entry 4768 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,0,2147483648,0] 4769 ; SSE2-NEXT: movdqa %xmm3, %xmm8 4770 ; SSE2-NEXT: pxor %xmm9, %xmm8 4771 ; SSE2-NEXT: movdqa %xmm7, %xmm10 4772 ; SSE2-NEXT: pxor %xmm9, %xmm10 4773 ; SSE2-NEXT: movdqa %xmm10, %xmm11 4774 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 4775 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4776 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm10 4777 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 4778 ; SSE2-NEXT: pand %xmm12, %xmm10 4779 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3] 4780 ; SSE2-NEXT: por %xmm10, %xmm8 4781 ; SSE2-NEXT: movdqa %xmm2, %xmm10 4782 ; SSE2-NEXT: pxor %xmm9, %xmm10 4783 ; SSE2-NEXT: movdqa %xmm6, %xmm11 4784 ; SSE2-NEXT: pxor %xmm9, %xmm11 4785 ; SSE2-NEXT: movdqa %xmm11, %xmm12 4786 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm12 4787 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 4788 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm11 4789 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3] 4790 ; SSE2-NEXT: pand %xmm13, %xmm11 4791 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3] 4792 ; SSE2-NEXT: por %xmm11, %xmm10 4793 ; SSE2-NEXT: movdqa %xmm1, %xmm11 4794 ; SSE2-NEXT: pxor %xmm9, %xmm11 4795 ; SSE2-NEXT: movdqa %xmm5, %xmm12 4796 ; SSE2-NEXT: pxor %xmm9, %xmm12 4797 ; SSE2-NEXT: movdqa %xmm12, %xmm13 4798 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 4799 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 4800 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm12 4801 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3] 4802 ; SSE2-NEXT: pand %xmm14, %xmm11 4803 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3] 4804 ; SSE2-NEXT: por %xmm11, %xmm12 4805 ; SSE2-NEXT: movdqa %xmm0, %xmm11 4806 ; SSE2-NEXT: pxor %xmm9, %xmm11 4807 ; SSE2-NEXT: pxor %xmm4, %xmm9 4808 ; SSE2-NEXT: movdqa %xmm9, %xmm13 4809 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 4810 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 4811 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm9 4812 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 4813 ; SSE2-NEXT: pand %xmm14, %xmm9 4814 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 4815 ; SSE2-NEXT: por %xmm9, %xmm11 4816 ; SSE2-NEXT: pand %xmm11, %xmm0 4817 ; SSE2-NEXT: pandn %xmm4, %xmm11 4818 ; SSE2-NEXT: por %xmm11, %xmm0 4819 ; SSE2-NEXT: pand %xmm12, %xmm1 4820 ; SSE2-NEXT: pandn %xmm5, %xmm12 4821 ; SSE2-NEXT: por %xmm12, %xmm1 4822 ; SSE2-NEXT: pand %xmm10, %xmm2 4823 ; SSE2-NEXT: pandn %xmm6, %xmm10 4824 ; SSE2-NEXT: por %xmm10, %xmm2 4825 ; SSE2-NEXT: pand %xmm8, %xmm3 4826 ; SSE2-NEXT: pandn %xmm7, %xmm8 4827 ; SSE2-NEXT: por %xmm8, %xmm3 4828 ; SSE2-NEXT: retq 4829 ; 4830 ; SSE4-LABEL: test121: 4831 ; SSE4: # BB#0: # %entry 4832 ; SSE4-NEXT: movdqa %xmm0, %xmm8 4833 ; SSE4-NEXT: movdqa %xmm7, %xmm9 4834 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm9 4835 ; SSE4-NEXT: movdqa %xmm6, %xmm10 4836 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm10 4837 ; SSE4-NEXT: movdqa %xmm5, %xmm11 4838 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm11 4839 ; SSE4-NEXT: movdqa %xmm4, %xmm0 4840 ; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 4841 ; SSE4-NEXT: blendvpd %xmm8, %xmm4 4842 ; SSE4-NEXT: movdqa %xmm11, %xmm0 4843 ; SSE4-NEXT: blendvpd %xmm1, %xmm5 4844 ; SSE4-NEXT: movdqa %xmm10, %xmm0 4845 ; SSE4-NEXT: blendvpd %xmm2, %xmm6 4846 ; SSE4-NEXT: movdqa %xmm9, %xmm0 4847 ; SSE4-NEXT: blendvpd %xmm3, %xmm7 4848 ; SSE4-NEXT: movapd %xmm4, %xmm0 4849 ; SSE4-NEXT: movapd %xmm5, %xmm1 4850 ; SSE4-NEXT: movapd %xmm6, %xmm2 4851 ; SSE4-NEXT: movapd %xmm7, %xmm3 4852 ; SSE4-NEXT: retq 4853 ; 4854 ; AVX1-LABEL: test121: 4855 ; AVX1: # BB#0: # %entry 4856 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4857 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5 4858 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4859 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm5 4860 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4861 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4862 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 4863 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 4864 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm6 4865 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5 4866 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 4867 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 4868 ; AVX1-NEXT: retq 4869 ; 4870 ; AVX2-LABEL: test121: 4871 ; AVX2: # BB#0: # %entry 4872 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm4 4873 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm5 4874 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 4875 ; AVX2-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 4876 ; AVX2-NEXT: retq 4877 ; 4878 ; AVX512F-LABEL: test121: 4879 ; AVX512F: # BB#0: # %entry 4880 ; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 4881 ; AVX512F-NEXT: retq 4882 entry: 4883 %cmp = icmp slt <8 x i64> %a, %b 4884 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4885 ret <8 x i64> %sel 4886 } 4887 4888 define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) { 4889 ; SSE2-LABEL: test122: 4890 ; SSE2: # BB#0: # %entry 4891 ; SSE2-NEXT: movdqa %xmm7, %xmm8 4892 ; SSE2-NEXT: movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill 4893 ; SSE2-NEXT: movdqa %xmm3, %xmm7 4894 ; SSE2-NEXT: movdqa %xmm2, %xmm3 4895 ; SSE2-NEXT: movdqa %xmm1, %xmm2 4896 ; SSE2-NEXT: movdqa %xmm0, %xmm9 4897 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0] 4898 ; SSE2-NEXT: pxor %xmm10, %xmm8 4899 ; SSE2-NEXT: movdqa %xmm7, %xmm0 4900 ; SSE2-NEXT: pxor %xmm10, %xmm0 4901 ; SSE2-NEXT: movdqa %xmm0, %xmm11 4902 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 4903 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4904 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 4905 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 4906 ; SSE2-NEXT: pand %xmm12, %xmm0 4907 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 4908 ; SSE2-NEXT: por %xmm0, %xmm12 4909 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 4910 ; SSE2-NEXT: movdqa %xmm12, %xmm8 4911 ; SSE2-NEXT: pxor %xmm1, %xmm8 4912 ; SSE2-NEXT: movdqa %xmm6, %xmm11 4913 ; SSE2-NEXT: pxor %xmm10, %xmm11 4914 ; SSE2-NEXT: movdqa %xmm3, %xmm13 4915 ; SSE2-NEXT: pxor %xmm10, %xmm13 4916 ; SSE2-NEXT: movdqa %xmm13, %xmm14 4917 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 4918 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 4919 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 4920 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 4921 ; SSE2-NEXT: pand %xmm15, %xmm11 4922 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 4923 ; SSE2-NEXT: por %xmm11, %xmm13 4924 ; SSE2-NEXT: movdqa %xmm5, %xmm11 4925 ; SSE2-NEXT: pxor %xmm10, %xmm11 4926 ; SSE2-NEXT: movdqa %xmm2, %xmm14 4927 ; SSE2-NEXT: pxor %xmm10, %xmm14 4928 ; SSE2-NEXT: movdqa %xmm14, %xmm15 4929 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 4930 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 4931 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 4932 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 4933 ; SSE2-NEXT: pand %xmm11, %xmm14 4934 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 4935 ; SSE2-NEXT: por %xmm14, %xmm15 4936 ; SSE2-NEXT: movdqa %xmm4, %xmm11 4937 ; SSE2-NEXT: pxor %xmm10, %xmm11 4938 ; SSE2-NEXT: pxor %xmm9, %xmm10 4939 ; SSE2-NEXT: movdqa %xmm10, %xmm14 4940 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 4941 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 4942 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 4943 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 4944 ; SSE2-NEXT: pand %xmm11, %xmm0 4945 ; SSE2-NEXT: movdqa %xmm13, %xmm10 4946 ; SSE2-NEXT: pxor %xmm1, %xmm10 4947 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 4948 ; SSE2-NEXT: por %xmm0, %xmm14 4949 ; SSE2-NEXT: movdqa %xmm15, %xmm11 4950 ; SSE2-NEXT: pxor %xmm1, %xmm11 4951 ; SSE2-NEXT: pxor %xmm14, %xmm1 4952 ; SSE2-NEXT: pandn %xmm9, %xmm14 4953 ; SSE2-NEXT: pandn %xmm4, %xmm1 4954 ; SSE2-NEXT: por %xmm14, %xmm1 4955 ; SSE2-NEXT: pandn %xmm2, %xmm15 4956 ; SSE2-NEXT: pandn %xmm5, %xmm11 4957 ; SSE2-NEXT: por %xmm15, %xmm11 4958 ; SSE2-NEXT: pandn %xmm3, %xmm13 4959 ; SSE2-NEXT: pandn %xmm6, %xmm10 4960 ; SSE2-NEXT: por %xmm13, %xmm10 4961 ; SSE2-NEXT: pandn %xmm7, %xmm12 4962 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload 4963 ; SSE2-NEXT: por %xmm12, %xmm8 4964 ; SSE2-NEXT: movdqa %xmm1, %xmm0 4965 ; SSE2-NEXT: movdqa %xmm11, %xmm1 4966 ; SSE2-NEXT: movdqa %xmm10, %xmm2 4967 ; SSE2-NEXT: movdqa %xmm8, %xmm3 4968 ; SSE2-NEXT: retq 4969 ; 4970 ; SSE4-LABEL: test122: 4971 ; SSE4: # BB#0: # %entry 4972 ; SSE4-NEXT: movdqa %xmm0, %xmm8 4973 ; SSE4-NEXT: movdqa %xmm3, %xmm9 4974 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm9 4975 ; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 4976 ; SSE4-NEXT: pxor %xmm12, %xmm9 4977 ; SSE4-NEXT: movdqa %xmm2, %xmm10 4978 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm10 4979 ; SSE4-NEXT: pxor %xmm12, %xmm10 4980 ; SSE4-NEXT: movdqa %xmm1, %xmm11 4981 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm11 4982 ; SSE4-NEXT: pxor %xmm12, %xmm11 4983 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 4984 ; SSE4-NEXT: pxor %xmm12, %xmm0 4985 ; SSE4-NEXT: blendvpd %xmm8, %xmm4 4986 ; SSE4-NEXT: movdqa %xmm11, %xmm0 4987 ; SSE4-NEXT: blendvpd %xmm1, %xmm5 4988 ; SSE4-NEXT: movdqa %xmm10, %xmm0 4989 ; SSE4-NEXT: blendvpd %xmm2, %xmm6 4990 ; SSE4-NEXT: movdqa %xmm9, %xmm0 4991 ; SSE4-NEXT: blendvpd %xmm3, %xmm7 4992 ; SSE4-NEXT: movapd %xmm4, %xmm0 4993 ; SSE4-NEXT: movapd %xmm5, %xmm1 4994 ; SSE4-NEXT: movapd %xmm6, %xmm2 4995 ; SSE4-NEXT: movapd %xmm7, %xmm3 4996 ; SSE4-NEXT: retq 4997 ; 4998 ; AVX1-LABEL: test122: 4999 ; AVX1: # BB#0: # %entry 5000 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5001 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 5002 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5003 ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5 5004 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5005 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm6 5006 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5007 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5008 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 5009 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7 5010 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5011 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5012 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm7 5013 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm5 5014 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 5015 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5016 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5017 ; AVX1-NEXT: retq 5018 ; 5019 ; AVX2-LABEL: test122: 5020 ; AVX2: # BB#0: # %entry 5021 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm4 5022 ; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5 5023 ; AVX2-NEXT: vpxor %ymm5, %ymm4, %ymm4 5024 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm6 5025 ; AVX2-NEXT: vpxor %ymm5, %ymm6, %ymm5 5026 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5027 ; AVX2-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5028 ; AVX2-NEXT: retq 5029 ; 5030 ; AVX512F-LABEL: test122: 5031 ; AVX512F: # BB#0: # %entry 5032 ; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 5033 ; AVX512F-NEXT: retq 5034 entry: 5035 %cmp = icmp sle <8 x i64> %a, %b 5036 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5037 ret <8 x i64> %sel 5038 } 5039 5040 define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) { 5041 ; SSE2-LABEL: test123: 5042 ; SSE2: # BB#0: # %entry 5043 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,0,2147483648,0] 5044 ; SSE2-NEXT: movdqa %xmm7, %xmm8 5045 ; SSE2-NEXT: pxor %xmm9, %xmm8 5046 ; SSE2-NEXT: movdqa %xmm3, %xmm10 5047 ; SSE2-NEXT: pxor %xmm9, %xmm10 5048 ; SSE2-NEXT: movdqa %xmm10, %xmm11 5049 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 5050 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5051 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm10 5052 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 5053 ; SSE2-NEXT: pand %xmm12, %xmm10 5054 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3] 5055 ; SSE2-NEXT: por %xmm10, %xmm8 5056 ; SSE2-NEXT: movdqa %xmm6, %xmm10 5057 ; SSE2-NEXT: pxor %xmm9, %xmm10 5058 ; SSE2-NEXT: movdqa %xmm2, %xmm11 5059 ; SSE2-NEXT: pxor %xmm9, %xmm11 5060 ; SSE2-NEXT: movdqa %xmm11, %xmm12 5061 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm12 5062 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 5063 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm11 5064 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3] 5065 ; SSE2-NEXT: pand %xmm13, %xmm11 5066 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3] 5067 ; SSE2-NEXT: por %xmm11, %xmm10 5068 ; SSE2-NEXT: movdqa %xmm5, %xmm11 5069 ; SSE2-NEXT: pxor %xmm9, %xmm11 5070 ; SSE2-NEXT: movdqa %xmm1, %xmm12 5071 ; SSE2-NEXT: pxor %xmm9, %xmm12 5072 ; SSE2-NEXT: movdqa %xmm12, %xmm13 5073 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 5074 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 5075 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm12 5076 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3] 5077 ; SSE2-NEXT: pand %xmm14, %xmm11 5078 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3] 5079 ; SSE2-NEXT: por %xmm11, %xmm12 5080 ; SSE2-NEXT: movdqa %xmm4, %xmm11 5081 ; SSE2-NEXT: pxor %xmm9, %xmm11 5082 ; SSE2-NEXT: pxor %xmm0, %xmm9 5083 ; SSE2-NEXT: movdqa %xmm9, %xmm13 5084 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 5085 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 5086 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm9 5087 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 5088 ; SSE2-NEXT: pand %xmm14, %xmm9 5089 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 5090 ; SSE2-NEXT: por %xmm9, %xmm11 5091 ; SSE2-NEXT: pand %xmm11, %xmm0 5092 ; SSE2-NEXT: pandn %xmm4, %xmm11 5093 ; SSE2-NEXT: por %xmm11, %xmm0 5094 ; SSE2-NEXT: pand %xmm12, %xmm1 5095 ; SSE2-NEXT: pandn %xmm5, %xmm12 5096 ; SSE2-NEXT: por %xmm12, %xmm1 5097 ; SSE2-NEXT: pand %xmm10, %xmm2 5098 ; SSE2-NEXT: pandn %xmm6, %xmm10 5099 ; SSE2-NEXT: por %xmm10, %xmm2 5100 ; SSE2-NEXT: pand %xmm8, %xmm3 5101 ; SSE2-NEXT: pandn %xmm7, %xmm8 5102 ; SSE2-NEXT: por %xmm8, %xmm3 5103 ; SSE2-NEXT: retq 5104 ; 5105 ; SSE4-LABEL: test123: 5106 ; SSE4: # BB#0: # %entry 5107 ; SSE4-NEXT: movdqa %xmm0, %xmm8 5108 ; SSE4-NEXT: movdqa %xmm3, %xmm9 5109 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm9 5110 ; SSE4-NEXT: movdqa %xmm2, %xmm10 5111 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm10 5112 ; SSE4-NEXT: movdqa %xmm1, %xmm11 5113 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm11 5114 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 5115 ; SSE4-NEXT: blendvpd %xmm8, %xmm4 5116 ; SSE4-NEXT: movdqa %xmm11, %xmm0 5117 ; SSE4-NEXT: blendvpd %xmm1, %xmm5 5118 ; SSE4-NEXT: movdqa %xmm10, %xmm0 5119 ; SSE4-NEXT: blendvpd %xmm2, %xmm6 5120 ; SSE4-NEXT: movdqa %xmm9, %xmm0 5121 ; SSE4-NEXT: blendvpd %xmm3, %xmm7 5122 ; SSE4-NEXT: movapd %xmm4, %xmm0 5123 ; SSE4-NEXT: movapd %xmm5, %xmm1 5124 ; SSE4-NEXT: movapd %xmm6, %xmm2 5125 ; SSE4-NEXT: movapd %xmm7, %xmm3 5126 ; SSE4-NEXT: retq 5127 ; 5128 ; AVX1-LABEL: test123: 5129 ; AVX1: # BB#0: # %entry 5130 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5131 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 5132 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5133 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm5 5134 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 5135 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 5136 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5137 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 5138 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm6 5139 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5 5140 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5141 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5142 ; AVX1-NEXT: retq 5143 ; 5144 ; AVX2-LABEL: test123: 5145 ; AVX2: # BB#0: # %entry 5146 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm4 5147 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm5 5148 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5149 ; AVX2-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5150 ; AVX2-NEXT: retq 5151 ; 5152 ; AVX512F-LABEL: test123: 5153 ; AVX512F: # BB#0: # %entry 5154 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 5155 ; AVX512F-NEXT: retq 5156 entry: 5157 %cmp = icmp sgt <8 x i64> %a, %b 5158 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5159 ret <8 x i64> %sel 5160 } 5161 5162 define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) { 5163 ; SSE2-LABEL: test124: 5164 ; SSE2: # BB#0: # %entry 5165 ; SSE2-NEXT: movdqa %xmm7, %xmm11 5166 ; SSE2-NEXT: movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill 5167 ; SSE2-NEXT: movdqa %xmm3, %xmm7 5168 ; SSE2-NEXT: movdqa %xmm2, %xmm3 5169 ; SSE2-NEXT: movdqa %xmm1, %xmm2 5170 ; SSE2-NEXT: movdqa %xmm0, %xmm9 5171 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0] 5172 ; SSE2-NEXT: movdqa %xmm7, %xmm8 5173 ; SSE2-NEXT: pxor %xmm10, %xmm8 5174 ; SSE2-NEXT: movdqa %xmm11, %xmm0 5175 ; SSE2-NEXT: pxor %xmm10, %xmm0 5176 ; SSE2-NEXT: movdqa %xmm0, %xmm11 5177 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 5178 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5179 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 5180 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 5181 ; SSE2-NEXT: pand %xmm12, %xmm0 5182 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 5183 ; SSE2-NEXT: por %xmm0, %xmm12 5184 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 5185 ; SSE2-NEXT: movdqa %xmm12, %xmm8 5186 ; SSE2-NEXT: pxor %xmm1, %xmm8 5187 ; SSE2-NEXT: movdqa %xmm3, %xmm11 5188 ; SSE2-NEXT: pxor %xmm10, %xmm11 5189 ; SSE2-NEXT: movdqa %xmm6, %xmm13 5190 ; SSE2-NEXT: pxor %xmm10, %xmm13 5191 ; SSE2-NEXT: movdqa %xmm13, %xmm14 5192 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 5193 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 5194 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 5195 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 5196 ; SSE2-NEXT: pand %xmm15, %xmm11 5197 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 5198 ; SSE2-NEXT: por %xmm11, %xmm13 5199 ; SSE2-NEXT: movdqa %xmm2, %xmm11 5200 ; SSE2-NEXT: pxor %xmm10, %xmm11 5201 ; SSE2-NEXT: movdqa %xmm5, %xmm14 5202 ; SSE2-NEXT: pxor %xmm10, %xmm14 5203 ; SSE2-NEXT: movdqa %xmm14, %xmm15 5204 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 5205 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 5206 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 5207 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 5208 ; SSE2-NEXT: pand %xmm11, %xmm14 5209 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 5210 ; SSE2-NEXT: por %xmm14, %xmm15 5211 ; SSE2-NEXT: movdqa %xmm9, %xmm11 5212 ; SSE2-NEXT: pxor %xmm10, %xmm11 5213 ; SSE2-NEXT: pxor %xmm4, %xmm10 5214 ; SSE2-NEXT: movdqa %xmm10, %xmm14 5215 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 5216 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 5217 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 5218 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 5219 ; SSE2-NEXT: pand %xmm11, %xmm0 5220 ; SSE2-NEXT: movdqa %xmm13, %xmm10 5221 ; SSE2-NEXT: pxor %xmm1, %xmm10 5222 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 5223 ; SSE2-NEXT: por %xmm0, %xmm14 5224 ; SSE2-NEXT: movdqa %xmm15, %xmm11 5225 ; SSE2-NEXT: pxor %xmm1, %xmm11 5226 ; SSE2-NEXT: pxor %xmm14, %xmm1 5227 ; SSE2-NEXT: pandn %xmm9, %xmm14 5228 ; SSE2-NEXT: pandn %xmm4, %xmm1 5229 ; SSE2-NEXT: por %xmm14, %xmm1 5230 ; SSE2-NEXT: pandn %xmm2, %xmm15 5231 ; SSE2-NEXT: pandn %xmm5, %xmm11 5232 ; SSE2-NEXT: por %xmm15, %xmm11 5233 ; SSE2-NEXT: pandn %xmm3, %xmm13 5234 ; SSE2-NEXT: pandn %xmm6, %xmm10 5235 ; SSE2-NEXT: por %xmm13, %xmm10 5236 ; SSE2-NEXT: pandn %xmm7, %xmm12 5237 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload 5238 ; SSE2-NEXT: por %xmm12, %xmm8 5239 ; SSE2-NEXT: movdqa %xmm1, %xmm0 5240 ; SSE2-NEXT: movdqa %xmm11, %xmm1 5241 ; SSE2-NEXT: movdqa %xmm10, %xmm2 5242 ; SSE2-NEXT: movdqa %xmm8, %xmm3 5243 ; SSE2-NEXT: retq 5244 ; 5245 ; SSE4-LABEL: test124: 5246 ; SSE4: # BB#0: # %entry 5247 ; SSE4-NEXT: movdqa %xmm0, %xmm8 5248 ; SSE4-NEXT: movdqa %xmm7, %xmm9 5249 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm9 5250 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 5251 ; SSE4-NEXT: pxor %xmm0, %xmm9 5252 ; SSE4-NEXT: movdqa %xmm6, %xmm10 5253 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm10 5254 ; SSE4-NEXT: pxor %xmm0, %xmm10 5255 ; SSE4-NEXT: movdqa %xmm5, %xmm11 5256 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm11 5257 ; SSE4-NEXT: pxor %xmm0, %xmm11 5258 ; SSE4-NEXT: movdqa %xmm4, %xmm12 5259 ; SSE4-NEXT: pcmpgtq %xmm8, %xmm12 5260 ; SSE4-NEXT: pxor %xmm12, %xmm0 5261 ; SSE4-NEXT: blendvpd %xmm8, %xmm4 5262 ; SSE4-NEXT: movdqa %xmm11, %xmm0 5263 ; SSE4-NEXT: blendvpd %xmm1, %xmm5 5264 ; SSE4-NEXT: movdqa %xmm10, %xmm0 5265 ; SSE4-NEXT: blendvpd %xmm2, %xmm6 5266 ; SSE4-NEXT: movdqa %xmm9, %xmm0 5267 ; SSE4-NEXT: blendvpd %xmm3, %xmm7 5268 ; SSE4-NEXT: movapd %xmm4, %xmm0 5269 ; SSE4-NEXT: movapd %xmm5, %xmm1 5270 ; SSE4-NEXT: movapd %xmm6, %xmm2 5271 ; SSE4-NEXT: movapd %xmm7, %xmm3 5272 ; SSE4-NEXT: retq 5273 ; 5274 ; AVX1-LABEL: test124: 5275 ; AVX1: # BB#0: # %entry 5276 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5277 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5 5278 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5279 ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5 5280 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5281 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm6 5282 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5283 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5284 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5285 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 5286 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5287 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5288 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm7 5289 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm5 5290 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 5291 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5292 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5293 ; AVX1-NEXT: retq 5294 ; 5295 ; AVX2-LABEL: test124: 5296 ; AVX2: # BB#0: # %entry 5297 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm4 5298 ; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5 5299 ; AVX2-NEXT: vpxor %ymm5, %ymm4, %ymm4 5300 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm6 5301 ; AVX2-NEXT: vpxor %ymm5, %ymm6, %ymm5 5302 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5303 ; AVX2-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5304 ; AVX2-NEXT: retq 5305 ; 5306 ; AVX512F-LABEL: test124: 5307 ; AVX512F: # BB#0: # %entry 5308 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 5309 ; AVX512F-NEXT: retq 5310 entry: 5311 %cmp = icmp sge <8 x i64> %a, %b 5312 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5313 ret <8 x i64> %sel 5314 } 5315 5316 define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) { 5317 ; SSE2-LABEL: test125: 5318 ; SSE2: # BB#0: # %entry 5319 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648] 5320 ; SSE2-NEXT: movdqa %xmm3, %xmm8 5321 ; SSE2-NEXT: pxor %xmm9, %xmm8 5322 ; SSE2-NEXT: movdqa %xmm7, %xmm10 5323 ; SSE2-NEXT: pxor %xmm9, %xmm10 5324 ; SSE2-NEXT: movdqa %xmm10, %xmm11 5325 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 5326 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5327 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm10 5328 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 5329 ; SSE2-NEXT: pand %xmm12, %xmm10 5330 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3] 5331 ; SSE2-NEXT: por %xmm10, %xmm8 5332 ; SSE2-NEXT: movdqa %xmm2, %xmm10 5333 ; SSE2-NEXT: pxor %xmm9, %xmm10 5334 ; SSE2-NEXT: movdqa %xmm6, %xmm11 5335 ; SSE2-NEXT: pxor %xmm9, %xmm11 5336 ; SSE2-NEXT: movdqa %xmm11, %xmm12 5337 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm12 5338 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 5339 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm11 5340 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3] 5341 ; SSE2-NEXT: pand %xmm13, %xmm11 5342 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3] 5343 ; SSE2-NEXT: por %xmm11, %xmm10 5344 ; SSE2-NEXT: movdqa %xmm1, %xmm11 5345 ; SSE2-NEXT: pxor %xmm9, %xmm11 5346 ; SSE2-NEXT: movdqa %xmm5, %xmm12 5347 ; SSE2-NEXT: pxor %xmm9, %xmm12 5348 ; SSE2-NEXT: movdqa %xmm12, %xmm13 5349 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 5350 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 5351 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm12 5352 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3] 5353 ; SSE2-NEXT: pand %xmm14, %xmm11 5354 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3] 5355 ; SSE2-NEXT: por %xmm11, %xmm12 5356 ; SSE2-NEXT: movdqa %xmm0, %xmm11 5357 ; SSE2-NEXT: pxor %xmm9, %xmm11 5358 ; SSE2-NEXT: pxor %xmm4, %xmm9 5359 ; SSE2-NEXT: movdqa %xmm9, %xmm13 5360 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 5361 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 5362 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm9 5363 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 5364 ; SSE2-NEXT: pand %xmm14, %xmm9 5365 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 5366 ; SSE2-NEXT: por %xmm9, %xmm11 5367 ; SSE2-NEXT: pand %xmm11, %xmm0 5368 ; SSE2-NEXT: pandn %xmm4, %xmm11 5369 ; SSE2-NEXT: por %xmm11, %xmm0 5370 ; SSE2-NEXT: pand %xmm12, %xmm1 5371 ; SSE2-NEXT: pandn %xmm5, %xmm12 5372 ; SSE2-NEXT: por %xmm12, %xmm1 5373 ; SSE2-NEXT: pand %xmm10, %xmm2 5374 ; SSE2-NEXT: pandn %xmm6, %xmm10 5375 ; SSE2-NEXT: por %xmm10, %xmm2 5376 ; SSE2-NEXT: pand %xmm8, %xmm3 5377 ; SSE2-NEXT: pandn %xmm7, %xmm8 5378 ; SSE2-NEXT: por %xmm8, %xmm3 5379 ; SSE2-NEXT: retq 5380 ; 5381 ; SSE4-LABEL: test125: 5382 ; SSE4: # BB#0: # %entry 5383 ; SSE4-NEXT: movdqa %xmm0, %xmm8 5384 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 5385 ; SSE4-NEXT: movdqa %xmm3, %xmm10 5386 ; SSE4-NEXT: pxor %xmm0, %xmm10 5387 ; SSE4-NEXT: movdqa %xmm7, %xmm9 5388 ; SSE4-NEXT: pxor %xmm0, %xmm9 5389 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 5390 ; SSE4-NEXT: movdqa %xmm2, %xmm11 5391 ; SSE4-NEXT: pxor %xmm0, %xmm11 5392 ; SSE4-NEXT: movdqa %xmm6, %xmm10 5393 ; SSE4-NEXT: pxor %xmm0, %xmm10 5394 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 5395 ; SSE4-NEXT: movdqa %xmm1, %xmm12 5396 ; SSE4-NEXT: pxor %xmm0, %xmm12 5397 ; SSE4-NEXT: movdqa %xmm5, %xmm11 5398 ; SSE4-NEXT: pxor %xmm0, %xmm11 5399 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm11 5400 ; SSE4-NEXT: movdqa %xmm8, %xmm12 5401 ; SSE4-NEXT: pxor %xmm0, %xmm12 5402 ; SSE4-NEXT: pxor %xmm4, %xmm0 5403 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm0 5404 ; SSE4-NEXT: blendvpd %xmm8, %xmm4 5405 ; SSE4-NEXT: movdqa %xmm11, %xmm0 5406 ; SSE4-NEXT: blendvpd %xmm1, %xmm5 5407 ; SSE4-NEXT: movdqa %xmm10, %xmm0 5408 ; SSE4-NEXT: blendvpd %xmm2, %xmm6 5409 ; SSE4-NEXT: movdqa %xmm9, %xmm0 5410 ; SSE4-NEXT: blendvpd %xmm3, %xmm7 5411 ; SSE4-NEXT: movapd %xmm4, %xmm0 5412 ; SSE4-NEXT: movapd %xmm5, %xmm1 5413 ; SSE4-NEXT: movapd %xmm6, %xmm2 5414 ; SSE4-NEXT: movapd %xmm7, %xmm3 5415 ; SSE4-NEXT: retq 5416 ; 5417 ; AVX1-LABEL: test125: 5418 ; AVX1: # BB#0: # %entry 5419 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5420 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5421 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 5422 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6 5423 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5424 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5425 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm6 5426 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm7 5427 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5428 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5429 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5430 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5431 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 5432 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 5433 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5434 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm7 5435 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm5 5436 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 5437 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 5438 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5439 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5440 ; AVX1-NEXT: retq 5441 ; 5442 ; AVX2-LABEL: test125: 5443 ; AVX2: # BB#0: # %entry 5444 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 5445 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm5 5446 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm6 5447 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5448 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 5449 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm4 5450 ; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm4 5451 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5452 ; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1 5453 ; AVX2-NEXT: retq 5454 ; 5455 ; AVX512F-LABEL: test125: 5456 ; AVX512F: # BB#0: # %entry 5457 ; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 5458 ; AVX512F-NEXT: retq 5459 entry: 5460 %cmp = icmp ult <8 x i64> %a, %b 5461 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5462 ret <8 x i64> %sel 5463 } 5464 5465 define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) { 5466 ; SSE2-LABEL: test126: 5467 ; SSE2: # BB#0: # %entry 5468 ; SSE2-NEXT: movdqa %xmm7, %xmm8 5469 ; SSE2-NEXT: movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill 5470 ; SSE2-NEXT: movdqa %xmm3, %xmm7 5471 ; SSE2-NEXT: movdqa %xmm2, %xmm3 5472 ; SSE2-NEXT: movdqa %xmm1, %xmm2 5473 ; SSE2-NEXT: movdqa %xmm0, %xmm9 5474 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648] 5475 ; SSE2-NEXT: pxor %xmm10, %xmm8 5476 ; SSE2-NEXT: movdqa %xmm7, %xmm0 5477 ; SSE2-NEXT: pxor %xmm10, %xmm0 5478 ; SSE2-NEXT: movdqa %xmm0, %xmm11 5479 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 5480 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5481 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 5482 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 5483 ; SSE2-NEXT: pand %xmm12, %xmm0 5484 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 5485 ; SSE2-NEXT: por %xmm0, %xmm12 5486 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 5487 ; SSE2-NEXT: movdqa %xmm12, %xmm8 5488 ; SSE2-NEXT: pxor %xmm1, %xmm8 5489 ; SSE2-NEXT: movdqa %xmm6, %xmm11 5490 ; SSE2-NEXT: pxor %xmm10, %xmm11 5491 ; SSE2-NEXT: movdqa %xmm3, %xmm13 5492 ; SSE2-NEXT: pxor %xmm10, %xmm13 5493 ; SSE2-NEXT: movdqa %xmm13, %xmm14 5494 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 5495 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 5496 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 5497 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 5498 ; SSE2-NEXT: pand %xmm15, %xmm11 5499 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 5500 ; SSE2-NEXT: por %xmm11, %xmm13 5501 ; SSE2-NEXT: movdqa %xmm5, %xmm11 5502 ; SSE2-NEXT: pxor %xmm10, %xmm11 5503 ; SSE2-NEXT: movdqa %xmm2, %xmm14 5504 ; SSE2-NEXT: pxor %xmm10, %xmm14 5505 ; SSE2-NEXT: movdqa %xmm14, %xmm15 5506 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 5507 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 5508 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 5509 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 5510 ; SSE2-NEXT: pand %xmm11, %xmm14 5511 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 5512 ; SSE2-NEXT: por %xmm14, %xmm15 5513 ; SSE2-NEXT: movdqa %xmm4, %xmm11 5514 ; SSE2-NEXT: pxor %xmm10, %xmm11 5515 ; SSE2-NEXT: pxor %xmm9, %xmm10 5516 ; SSE2-NEXT: movdqa %xmm10, %xmm14 5517 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 5518 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 5519 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 5520 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 5521 ; SSE2-NEXT: pand %xmm11, %xmm0 5522 ; SSE2-NEXT: movdqa %xmm13, %xmm10 5523 ; SSE2-NEXT: pxor %xmm1, %xmm10 5524 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 5525 ; SSE2-NEXT: por %xmm0, %xmm14 5526 ; SSE2-NEXT: movdqa %xmm15, %xmm11 5527 ; SSE2-NEXT: pxor %xmm1, %xmm11 5528 ; SSE2-NEXT: pxor %xmm14, %xmm1 5529 ; SSE2-NEXT: pandn %xmm9, %xmm14 5530 ; SSE2-NEXT: pandn %xmm4, %xmm1 5531 ; SSE2-NEXT: por %xmm14, %xmm1 5532 ; SSE2-NEXT: pandn %xmm2, %xmm15 5533 ; SSE2-NEXT: pandn %xmm5, %xmm11 5534 ; SSE2-NEXT: por %xmm15, %xmm11 5535 ; SSE2-NEXT: pandn %xmm3, %xmm13 5536 ; SSE2-NEXT: pandn %xmm6, %xmm10 5537 ; SSE2-NEXT: por %xmm13, %xmm10 5538 ; SSE2-NEXT: pandn %xmm7, %xmm12 5539 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload 5540 ; SSE2-NEXT: por %xmm12, %xmm8 5541 ; SSE2-NEXT: movdqa %xmm1, %xmm0 5542 ; SSE2-NEXT: movdqa %xmm11, %xmm1 5543 ; SSE2-NEXT: movdqa %xmm10, %xmm2 5544 ; SSE2-NEXT: movdqa %xmm8, %xmm3 5545 ; SSE2-NEXT: retq 5546 ; 5547 ; SSE4-LABEL: test126: 5548 ; SSE4: # BB#0: # %entry 5549 ; SSE4-NEXT: movdqa %xmm0, %xmm9 5550 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 5551 ; SSE4-NEXT: movdqa %xmm7, %xmm10 5552 ; SSE4-NEXT: pxor %xmm0, %xmm10 5553 ; SSE4-NEXT: movdqa %xmm3, %xmm8 5554 ; SSE4-NEXT: pxor %xmm0, %xmm8 5555 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm8 5556 ; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 5557 ; SSE4-NEXT: pxor %xmm12, %xmm8 5558 ; SSE4-NEXT: movdqa %xmm6, %xmm11 5559 ; SSE4-NEXT: pxor %xmm0, %xmm11 5560 ; SSE4-NEXT: movdqa %xmm2, %xmm10 5561 ; SSE4-NEXT: pxor %xmm0, %xmm10 5562 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 5563 ; SSE4-NEXT: pxor %xmm12, %xmm10 5564 ; SSE4-NEXT: movdqa %xmm5, %xmm13 5565 ; SSE4-NEXT: pxor %xmm0, %xmm13 5566 ; SSE4-NEXT: movdqa %xmm1, %xmm11 5567 ; SSE4-NEXT: pxor %xmm0, %xmm11 5568 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm11 5569 ; SSE4-NEXT: pxor %xmm12, %xmm11 5570 ; SSE4-NEXT: movdqa %xmm4, %xmm13 5571 ; SSE4-NEXT: pxor %xmm0, %xmm13 5572 ; SSE4-NEXT: pxor %xmm9, %xmm0 5573 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm0 5574 ; SSE4-NEXT: pxor %xmm12, %xmm0 5575 ; SSE4-NEXT: blendvpd %xmm9, %xmm4 5576 ; SSE4-NEXT: movdqa %xmm11, %xmm0 5577 ; SSE4-NEXT: blendvpd %xmm1, %xmm5 5578 ; SSE4-NEXT: movdqa %xmm10, %xmm0 5579 ; SSE4-NEXT: blendvpd %xmm2, %xmm6 5580 ; SSE4-NEXT: movdqa %xmm8, %xmm0 5581 ; SSE4-NEXT: blendvpd %xmm3, %xmm7 5582 ; SSE4-NEXT: movapd %xmm4, %xmm0 5583 ; SSE4-NEXT: movapd %xmm5, %xmm1 5584 ; SSE4-NEXT: movapd %xmm6, %xmm2 5585 ; SSE4-NEXT: movapd %xmm7, %xmm3 5586 ; SSE4-NEXT: retq 5587 ; 5588 ; AVX1-LABEL: test126: 5589 ; AVX1: # BB#0: # %entry 5590 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5591 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5592 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 5593 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6 5594 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5595 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5596 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm8, %xmm8 5597 ; AVX1-NEXT: vpxor %xmm8, %xmm4, %xmm4 5598 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm7 5599 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm6 5600 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6 5601 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 5602 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5603 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 5604 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5605 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7 5606 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 5607 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5608 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 5609 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm7 5610 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm5 5611 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 5612 ; AVX1-NEXT: vpxor %xmm8, %xmm5, %xmm5 5613 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 5614 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5615 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5616 ; AVX1-NEXT: retq 5617 ; 5618 ; AVX2-LABEL: test126: 5619 ; AVX2: # BB#0: # %entry 5620 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 5621 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm5 5622 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm6 5623 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5624 ; AVX2-NEXT: vpcmpeqd %ymm6, %ymm6, %ymm6 5625 ; AVX2-NEXT: vpxor %ymm6, %ymm5, %ymm5 5626 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm7 5627 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm4 5628 ; AVX2-NEXT: vpcmpgtq %ymm7, %ymm4, %ymm4 5629 ; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm4 5630 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5631 ; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1 5632 ; AVX2-NEXT: retq 5633 ; 5634 ; AVX512F-LABEL: test126: 5635 ; AVX512F: # BB#0: # %entry 5636 ; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 5637 ; AVX512F-NEXT: retq 5638 entry: 5639 %cmp = icmp ule <8 x i64> %a, %b 5640 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5641 ret <8 x i64> %sel 5642 } 5643 5644 define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) { 5645 ; SSE2-LABEL: test127: 5646 ; SSE2: # BB#0: # %entry 5647 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648] 5648 ; SSE2-NEXT: movdqa %xmm7, %xmm8 5649 ; SSE2-NEXT: pxor %xmm9, %xmm8 5650 ; SSE2-NEXT: movdqa %xmm3, %xmm10 5651 ; SSE2-NEXT: pxor %xmm9, %xmm10 5652 ; SSE2-NEXT: movdqa %xmm10, %xmm11 5653 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 5654 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5655 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm10 5656 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 5657 ; SSE2-NEXT: pand %xmm12, %xmm10 5658 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3] 5659 ; SSE2-NEXT: por %xmm10, %xmm8 5660 ; SSE2-NEXT: movdqa %xmm6, %xmm10 5661 ; SSE2-NEXT: pxor %xmm9, %xmm10 5662 ; SSE2-NEXT: movdqa %xmm2, %xmm11 5663 ; SSE2-NEXT: pxor %xmm9, %xmm11 5664 ; SSE2-NEXT: movdqa %xmm11, %xmm12 5665 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm12 5666 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 5667 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm11 5668 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3] 5669 ; SSE2-NEXT: pand %xmm13, %xmm11 5670 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3] 5671 ; SSE2-NEXT: por %xmm11, %xmm10 5672 ; SSE2-NEXT: movdqa %xmm5, %xmm11 5673 ; SSE2-NEXT: pxor %xmm9, %xmm11 5674 ; SSE2-NEXT: movdqa %xmm1, %xmm12 5675 ; SSE2-NEXT: pxor %xmm9, %xmm12 5676 ; SSE2-NEXT: movdqa %xmm12, %xmm13 5677 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 5678 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 5679 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm12 5680 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3] 5681 ; SSE2-NEXT: pand %xmm14, %xmm11 5682 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3] 5683 ; SSE2-NEXT: por %xmm11, %xmm12 5684 ; SSE2-NEXT: movdqa %xmm4, %xmm11 5685 ; SSE2-NEXT: pxor %xmm9, %xmm11 5686 ; SSE2-NEXT: pxor %xmm0, %xmm9 5687 ; SSE2-NEXT: movdqa %xmm9, %xmm13 5688 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 5689 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 5690 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm9 5691 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 5692 ; SSE2-NEXT: pand %xmm14, %xmm9 5693 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 5694 ; SSE2-NEXT: por %xmm9, %xmm11 5695 ; SSE2-NEXT: pand %xmm11, %xmm0 5696 ; SSE2-NEXT: pandn %xmm4, %xmm11 5697 ; SSE2-NEXT: por %xmm11, %xmm0 5698 ; SSE2-NEXT: pand %xmm12, %xmm1 5699 ; SSE2-NEXT: pandn %xmm5, %xmm12 5700 ; SSE2-NEXT: por %xmm12, %xmm1 5701 ; SSE2-NEXT: pand %xmm10, %xmm2 5702 ; SSE2-NEXT: pandn %xmm6, %xmm10 5703 ; SSE2-NEXT: por %xmm10, %xmm2 5704 ; SSE2-NEXT: pand %xmm8, %xmm3 5705 ; SSE2-NEXT: pandn %xmm7, %xmm8 5706 ; SSE2-NEXT: por %xmm8, %xmm3 5707 ; SSE2-NEXT: retq 5708 ; 5709 ; SSE4-LABEL: test127: 5710 ; SSE4: # BB#0: # %entry 5711 ; SSE4-NEXT: movdqa %xmm0, %xmm8 5712 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 5713 ; SSE4-NEXT: movdqa %xmm7, %xmm10 5714 ; SSE4-NEXT: pxor %xmm0, %xmm10 5715 ; SSE4-NEXT: movdqa %xmm3, %xmm9 5716 ; SSE4-NEXT: pxor %xmm0, %xmm9 5717 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 5718 ; SSE4-NEXT: movdqa %xmm6, %xmm11 5719 ; SSE4-NEXT: pxor %xmm0, %xmm11 5720 ; SSE4-NEXT: movdqa %xmm2, %xmm10 5721 ; SSE4-NEXT: pxor %xmm0, %xmm10 5722 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 5723 ; SSE4-NEXT: movdqa %xmm5, %xmm12 5724 ; SSE4-NEXT: pxor %xmm0, %xmm12 5725 ; SSE4-NEXT: movdqa %xmm1, %xmm11 5726 ; SSE4-NEXT: pxor %xmm0, %xmm11 5727 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm11 5728 ; SSE4-NEXT: movdqa %xmm4, %xmm12 5729 ; SSE4-NEXT: pxor %xmm0, %xmm12 5730 ; SSE4-NEXT: pxor %xmm8, %xmm0 5731 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm0 5732 ; SSE4-NEXT: blendvpd %xmm8, %xmm4 5733 ; SSE4-NEXT: movdqa %xmm11, %xmm0 5734 ; SSE4-NEXT: blendvpd %xmm1, %xmm5 5735 ; SSE4-NEXT: movdqa %xmm10, %xmm0 5736 ; SSE4-NEXT: blendvpd %xmm2, %xmm6 5737 ; SSE4-NEXT: movdqa %xmm9, %xmm0 5738 ; SSE4-NEXT: blendvpd %xmm3, %xmm7 5739 ; SSE4-NEXT: movapd %xmm4, %xmm0 5740 ; SSE4-NEXT: movapd %xmm5, %xmm1 5741 ; SSE4-NEXT: movapd %xmm6, %xmm2 5742 ; SSE4-NEXT: movapd %xmm7, %xmm3 5743 ; SSE4-NEXT: retq 5744 ; 5745 ; AVX1-LABEL: test127: 5746 ; AVX1: # BB#0: # %entry 5747 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5748 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5749 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 5750 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6 5751 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5752 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5753 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm6 5754 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm7 5755 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5756 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5757 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 5758 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5759 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7 5760 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 5761 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5762 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm7 5763 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm5 5764 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 5765 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 5766 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5767 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5768 ; AVX1-NEXT: retq 5769 ; 5770 ; AVX2-LABEL: test127: 5771 ; AVX2: # BB#0: # %entry 5772 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 5773 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm5 5774 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm6 5775 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5776 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 5777 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm4 5778 ; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm4 5779 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5780 ; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1 5781 ; AVX2-NEXT: retq 5782 ; 5783 ; AVX512F-LABEL: test127: 5784 ; AVX512F: # BB#0: # %entry 5785 ; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 5786 ; AVX512F-NEXT: retq 5787 entry: 5788 %cmp = icmp ugt <8 x i64> %a, %b 5789 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5790 ret <8 x i64> %sel 5791 } 5792 5793 define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) { 5794 ; SSE2-LABEL: test128: 5795 ; SSE2: # BB#0: # %entry 5796 ; SSE2-NEXT: movdqa %xmm7, %xmm11 5797 ; SSE2-NEXT: movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill 5798 ; SSE2-NEXT: movdqa %xmm3, %xmm7 5799 ; SSE2-NEXT: movdqa %xmm2, %xmm3 5800 ; SSE2-NEXT: movdqa %xmm1, %xmm2 5801 ; SSE2-NEXT: movdqa %xmm0, %xmm9 5802 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648] 5803 ; SSE2-NEXT: movdqa %xmm7, %xmm8 5804 ; SSE2-NEXT: pxor %xmm10, %xmm8 5805 ; SSE2-NEXT: movdqa %xmm11, %xmm0 5806 ; SSE2-NEXT: pxor %xmm10, %xmm0 5807 ; SSE2-NEXT: movdqa %xmm0, %xmm11 5808 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 5809 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5810 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 5811 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 5812 ; SSE2-NEXT: pand %xmm12, %xmm0 5813 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 5814 ; SSE2-NEXT: por %xmm0, %xmm12 5815 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 5816 ; SSE2-NEXT: movdqa %xmm12, %xmm8 5817 ; SSE2-NEXT: pxor %xmm1, %xmm8 5818 ; SSE2-NEXT: movdqa %xmm3, %xmm11 5819 ; SSE2-NEXT: pxor %xmm10, %xmm11 5820 ; SSE2-NEXT: movdqa %xmm6, %xmm13 5821 ; SSE2-NEXT: pxor %xmm10, %xmm13 5822 ; SSE2-NEXT: movdqa %xmm13, %xmm14 5823 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 5824 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 5825 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 5826 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 5827 ; SSE2-NEXT: pand %xmm15, %xmm11 5828 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 5829 ; SSE2-NEXT: por %xmm11, %xmm13 5830 ; SSE2-NEXT: movdqa %xmm2, %xmm11 5831 ; SSE2-NEXT: pxor %xmm10, %xmm11 5832 ; SSE2-NEXT: movdqa %xmm5, %xmm14 5833 ; SSE2-NEXT: pxor %xmm10, %xmm14 5834 ; SSE2-NEXT: movdqa %xmm14, %xmm15 5835 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 5836 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 5837 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 5838 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 5839 ; SSE2-NEXT: pand %xmm11, %xmm14 5840 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 5841 ; SSE2-NEXT: por %xmm14, %xmm15 5842 ; SSE2-NEXT: movdqa %xmm9, %xmm11 5843 ; SSE2-NEXT: pxor %xmm10, %xmm11 5844 ; SSE2-NEXT: pxor %xmm4, %xmm10 5845 ; SSE2-NEXT: movdqa %xmm10, %xmm14 5846 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 5847 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 5848 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 5849 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 5850 ; SSE2-NEXT: pand %xmm11, %xmm0 5851 ; SSE2-NEXT: movdqa %xmm13, %xmm10 5852 ; SSE2-NEXT: pxor %xmm1, %xmm10 5853 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 5854 ; SSE2-NEXT: por %xmm0, %xmm14 5855 ; SSE2-NEXT: movdqa %xmm15, %xmm11 5856 ; SSE2-NEXT: pxor %xmm1, %xmm11 5857 ; SSE2-NEXT: pxor %xmm14, %xmm1 5858 ; SSE2-NEXT: pandn %xmm9, %xmm14 5859 ; SSE2-NEXT: pandn %xmm4, %xmm1 5860 ; SSE2-NEXT: por %xmm14, %xmm1 5861 ; SSE2-NEXT: pandn %xmm2, %xmm15 5862 ; SSE2-NEXT: pandn %xmm5, %xmm11 5863 ; SSE2-NEXT: por %xmm15, %xmm11 5864 ; SSE2-NEXT: pandn %xmm3, %xmm13 5865 ; SSE2-NEXT: pandn %xmm6, %xmm10 5866 ; SSE2-NEXT: por %xmm13, %xmm10 5867 ; SSE2-NEXT: pandn %xmm7, %xmm12 5868 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload 5869 ; SSE2-NEXT: por %xmm12, %xmm8 5870 ; SSE2-NEXT: movdqa %xmm1, %xmm0 5871 ; SSE2-NEXT: movdqa %xmm11, %xmm1 5872 ; SSE2-NEXT: movdqa %xmm10, %xmm2 5873 ; SSE2-NEXT: movdqa %xmm8, %xmm3 5874 ; SSE2-NEXT: retq 5875 ; 5876 ; SSE4-LABEL: test128: 5877 ; SSE4: # BB#0: # %entry 5878 ; SSE4-NEXT: movdqa %xmm0, %xmm9 5879 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 5880 ; SSE4-NEXT: movdqa %xmm3, %xmm10 5881 ; SSE4-NEXT: pxor %xmm0, %xmm10 5882 ; SSE4-NEXT: movdqa %xmm7, %xmm8 5883 ; SSE4-NEXT: pxor %xmm0, %xmm8 5884 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm8 5885 ; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 5886 ; SSE4-NEXT: pxor %xmm12, %xmm8 5887 ; SSE4-NEXT: movdqa %xmm2, %xmm11 5888 ; SSE4-NEXT: pxor %xmm0, %xmm11 5889 ; SSE4-NEXT: movdqa %xmm6, %xmm10 5890 ; SSE4-NEXT: pxor %xmm0, %xmm10 5891 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 5892 ; SSE4-NEXT: pxor %xmm12, %xmm10 5893 ; SSE4-NEXT: movdqa %xmm1, %xmm13 5894 ; SSE4-NEXT: pxor %xmm0, %xmm13 5895 ; SSE4-NEXT: movdqa %xmm5, %xmm11 5896 ; SSE4-NEXT: pxor %xmm0, %xmm11 5897 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm11 5898 ; SSE4-NEXT: pxor %xmm12, %xmm11 5899 ; SSE4-NEXT: movdqa %xmm9, %xmm13 5900 ; SSE4-NEXT: pxor %xmm0, %xmm13 5901 ; SSE4-NEXT: pxor %xmm4, %xmm0 5902 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm0 5903 ; SSE4-NEXT: pxor %xmm12, %xmm0 5904 ; SSE4-NEXT: blendvpd %xmm9, %xmm4 5905 ; SSE4-NEXT: movdqa %xmm11, %xmm0 5906 ; SSE4-NEXT: blendvpd %xmm1, %xmm5 5907 ; SSE4-NEXT: movdqa %xmm10, %xmm0 5908 ; SSE4-NEXT: blendvpd %xmm2, %xmm6 5909 ; SSE4-NEXT: movdqa %xmm8, %xmm0 5910 ; SSE4-NEXT: blendvpd %xmm3, %xmm7 5911 ; SSE4-NEXT: movapd %xmm4, %xmm0 5912 ; SSE4-NEXT: movapd %xmm5, %xmm1 5913 ; SSE4-NEXT: movapd %xmm6, %xmm2 5914 ; SSE4-NEXT: movapd %xmm7, %xmm3 5915 ; SSE4-NEXT: retq 5916 ; 5917 ; AVX1-LABEL: test128: 5918 ; AVX1: # BB#0: # %entry 5919 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5920 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5921 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 5922 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6 5923 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5924 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5925 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm8, %xmm8 5926 ; AVX1-NEXT: vpxor %xmm8, %xmm4, %xmm4 5927 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm7 5928 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm6 5929 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6 5930 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 5931 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5932 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5933 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5934 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 5935 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 5936 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5937 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 5938 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm7 5939 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm5 5940 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 5941 ; AVX1-NEXT: vpxor %xmm8, %xmm5, %xmm5 5942 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 5943 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5944 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5945 ; AVX1-NEXT: retq 5946 ; 5947 ; AVX2-LABEL: test128: 5948 ; AVX2: # BB#0: # %entry 5949 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 5950 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm5 5951 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm6 5952 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5953 ; AVX2-NEXT: vpcmpeqd %ymm6, %ymm6, %ymm6 5954 ; AVX2-NEXT: vpxor %ymm6, %ymm5, %ymm5 5955 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm7 5956 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm4 5957 ; AVX2-NEXT: vpcmpgtq %ymm7, %ymm4, %ymm4 5958 ; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm4 5959 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5960 ; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1 5961 ; AVX2-NEXT: retq 5962 ; 5963 ; AVX512F-LABEL: test128: 5964 ; AVX512F: # BB#0: # %entry 5965 ; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 5966 ; AVX512F-NEXT: retq 5967 entry: 5968 %cmp = icmp uge <8 x i64> %a, %b 5969 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5970 ret <8 x i64> %sel 5971 } 5972 5973 define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) { 5974 ; SSE2-LABEL: test129: 5975 ; SSE2: # BB#0: # %entry 5976 ; SSE2-NEXT: movdqa %xmm3, %xmm8 5977 ; SSE2-NEXT: movdqa %xmm7, %xmm3 5978 ; SSE2-NEXT: pcmpgtb %xmm8, %xmm3 5979 ; SSE2-NEXT: movdqa %xmm6, %xmm9 5980 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm9 5981 ; SSE2-NEXT: movdqa %xmm5, %xmm10 5982 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm10 5983 ; SSE2-NEXT: movdqa %xmm4, %xmm11 5984 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm11 5985 ; SSE2-NEXT: pand %xmm11, %xmm4 5986 ; SSE2-NEXT: pandn %xmm0, %xmm11 5987 ; SSE2-NEXT: por %xmm4, %xmm11 5988 ; SSE2-NEXT: pand %xmm10, %xmm5 5989 ; SSE2-NEXT: pandn %xmm1, %xmm10 5990 ; SSE2-NEXT: por %xmm5, %xmm10 5991 ; SSE2-NEXT: pand %xmm9, %xmm6 5992 ; SSE2-NEXT: pandn %xmm2, %xmm9 5993 ; SSE2-NEXT: por %xmm6, %xmm9 5994 ; SSE2-NEXT: pand %xmm3, %xmm7 5995 ; SSE2-NEXT: pandn %xmm8, %xmm3 5996 ; SSE2-NEXT: por %xmm7, %xmm3 5997 ; SSE2-NEXT: movdqa %xmm11, %xmm0 5998 ; SSE2-NEXT: movdqa %xmm10, %xmm1 5999 ; SSE2-NEXT: movdqa %xmm9, %xmm2 6000 ; SSE2-NEXT: retq 6001 ; 6002 ; SSE4-LABEL: test129: 6003 ; SSE4: # BB#0: # %entry 6004 ; SSE4-NEXT: pmaxsb %xmm4, %xmm0 6005 ; SSE4-NEXT: pmaxsb %xmm5, %xmm1 6006 ; SSE4-NEXT: pmaxsb %xmm6, %xmm2 6007 ; SSE4-NEXT: pmaxsb %xmm7, %xmm3 6008 ; SSE4-NEXT: retq 6009 ; 6010 ; AVX1-LABEL: test129: 6011 ; AVX1: # BB#0: # %entry 6012 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6013 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6014 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 6015 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 6016 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6017 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6018 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6019 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 6020 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 6021 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6022 ; AVX1-NEXT: retq 6023 ; 6024 ; AVX2-LABEL: test129: 6025 ; AVX2: # BB#0: # %entry 6026 ; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 6027 ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 6028 ; AVX2-NEXT: retq 6029 ; 6030 ; AVX512BW-LABEL: test129: 6031 ; AVX512BW: # BB#0: # %entry 6032 ; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 6033 ; AVX512BW-NEXT: retq 6034 entry: 6035 %cmp = icmp slt <64 x i8> %a, %b 6036 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6037 ret <64 x i8> %sel 6038 } 6039 6040 define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) { 6041 ; SSE2-LABEL: test130: 6042 ; SSE2: # BB#0: # %entry 6043 ; SSE2-NEXT: movdqa %xmm2, %xmm8 6044 ; SSE2-NEXT: movdqa %xmm3, %xmm12 6045 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm12 6046 ; SSE2-NEXT: pcmpeqd %xmm13, %xmm13 6047 ; SSE2-NEXT: movdqa %xmm12, %xmm9 6048 ; SSE2-NEXT: pxor %xmm13, %xmm9 6049 ; SSE2-NEXT: movdqa %xmm8, %xmm14 6050 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm14 6051 ; SSE2-NEXT: movdqa %xmm14, %xmm2 6052 ; SSE2-NEXT: pxor %xmm13, %xmm2 6053 ; SSE2-NEXT: movdqa %xmm1, %xmm15 6054 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm15 6055 ; SSE2-NEXT: movdqa %xmm15, %xmm10 6056 ; SSE2-NEXT: pxor %xmm13, %xmm10 6057 ; SSE2-NEXT: movdqa %xmm0, %xmm11 6058 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm11 6059 ; SSE2-NEXT: pxor %xmm11, %xmm13 6060 ; SSE2-NEXT: pandn %xmm4, %xmm11 6061 ; SSE2-NEXT: pandn %xmm0, %xmm13 6062 ; SSE2-NEXT: por %xmm13, %xmm11 6063 ; SSE2-NEXT: pandn %xmm5, %xmm15 6064 ; SSE2-NEXT: pandn %xmm1, %xmm10 6065 ; SSE2-NEXT: por %xmm15, %xmm10 6066 ; SSE2-NEXT: pandn %xmm6, %xmm14 6067 ; SSE2-NEXT: pandn %xmm8, %xmm2 6068 ; SSE2-NEXT: por %xmm14, %xmm2 6069 ; SSE2-NEXT: pandn %xmm7, %xmm12 6070 ; SSE2-NEXT: pandn %xmm3, %xmm9 6071 ; SSE2-NEXT: por %xmm12, %xmm9 6072 ; SSE2-NEXT: movdqa %xmm11, %xmm0 6073 ; SSE2-NEXT: movdqa %xmm10, %xmm1 6074 ; SSE2-NEXT: movdqa %xmm9, %xmm3 6075 ; SSE2-NEXT: retq 6076 ; 6077 ; SSE4-LABEL: test130: 6078 ; SSE4: # BB#0: # %entry 6079 ; SSE4-NEXT: pmaxsb %xmm4, %xmm0 6080 ; SSE4-NEXT: pmaxsb %xmm5, %xmm1 6081 ; SSE4-NEXT: pmaxsb %xmm6, %xmm2 6082 ; SSE4-NEXT: pmaxsb %xmm7, %xmm3 6083 ; SSE4-NEXT: retq 6084 ; 6085 ; AVX1-LABEL: test130: 6086 ; AVX1: # BB#0: # %entry 6087 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6088 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6089 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 6090 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 6091 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6092 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6093 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6094 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 6095 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 6096 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6097 ; AVX1-NEXT: retq 6098 ; 6099 ; AVX2-LABEL: test130: 6100 ; AVX2: # BB#0: # %entry 6101 ; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 6102 ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 6103 ; AVX2-NEXT: retq 6104 ; 6105 ; AVX512BW-LABEL: test130: 6106 ; AVX512BW: # BB#0: # %entry 6107 ; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 6108 ; AVX512BW-NEXT: retq 6109 entry: 6110 %cmp = icmp sle <64 x i8> %a, %b 6111 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6112 ret <64 x i8> %sel 6113 } 6114 6115 define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) { 6116 ; SSE2-LABEL: test131: 6117 ; SSE2: # BB#0: # %entry 6118 ; SSE2-NEXT: movdqa %xmm3, %xmm8 6119 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm3 6120 ; SSE2-NEXT: movdqa %xmm2, %xmm9 6121 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm9 6122 ; SSE2-NEXT: movdqa %xmm1, %xmm10 6123 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm10 6124 ; SSE2-NEXT: movdqa %xmm0, %xmm11 6125 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm11 6126 ; SSE2-NEXT: pand %xmm11, %xmm4 6127 ; SSE2-NEXT: pandn %xmm0, %xmm11 6128 ; SSE2-NEXT: por %xmm4, %xmm11 6129 ; SSE2-NEXT: pand %xmm10, %xmm5 6130 ; SSE2-NEXT: pandn %xmm1, %xmm10 6131 ; SSE2-NEXT: por %xmm5, %xmm10 6132 ; SSE2-NEXT: pand %xmm9, %xmm6 6133 ; SSE2-NEXT: pandn %xmm2, %xmm9 6134 ; SSE2-NEXT: por %xmm6, %xmm9 6135 ; SSE2-NEXT: pand %xmm3, %xmm7 6136 ; SSE2-NEXT: pandn %xmm8, %xmm3 6137 ; SSE2-NEXT: por %xmm7, %xmm3 6138 ; SSE2-NEXT: movdqa %xmm11, %xmm0 6139 ; SSE2-NEXT: movdqa %xmm10, %xmm1 6140 ; SSE2-NEXT: movdqa %xmm9, %xmm2 6141 ; SSE2-NEXT: retq 6142 ; 6143 ; SSE4-LABEL: test131: 6144 ; SSE4: # BB#0: # %entry 6145 ; SSE4-NEXT: pminsb %xmm4, %xmm0 6146 ; SSE4-NEXT: pminsb %xmm5, %xmm1 6147 ; SSE4-NEXT: pminsb %xmm6, %xmm2 6148 ; SSE4-NEXT: pminsb %xmm7, %xmm3 6149 ; SSE4-NEXT: retq 6150 ; 6151 ; AVX1-LABEL: test131: 6152 ; AVX1: # BB#0: # %entry 6153 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6154 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6155 ; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 6156 ; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 6157 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6158 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6159 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6160 ; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 6161 ; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 6162 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6163 ; AVX1-NEXT: retq 6164 ; 6165 ; AVX2-LABEL: test131: 6166 ; AVX2: # BB#0: # %entry 6167 ; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 6168 ; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 6169 ; AVX2-NEXT: retq 6170 ; 6171 ; AVX512BW-LABEL: test131: 6172 ; AVX512BW: # BB#0: # %entry 6173 ; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 6174 ; AVX512BW-NEXT: retq 6175 entry: 6176 %cmp = icmp sgt <64 x i8> %a, %b 6177 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6178 ret <64 x i8> %sel 6179 } 6180 6181 define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) { 6182 ; SSE2-LABEL: test132: 6183 ; SSE2: # BB#0: # %entry 6184 ; SSE2-NEXT: movdqa %xmm2, %xmm8 6185 ; SSE2-NEXT: movdqa %xmm0, %xmm10 6186 ; SSE2-NEXT: movdqa %xmm7, %xmm12 6187 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm12 6188 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 6189 ; SSE2-NEXT: movdqa %xmm12, %xmm9 6190 ; SSE2-NEXT: pxor %xmm0, %xmm9 6191 ; SSE2-NEXT: movdqa %xmm6, %xmm13 6192 ; SSE2-NEXT: pcmpgtb %xmm8, %xmm13 6193 ; SSE2-NEXT: movdqa %xmm13, %xmm2 6194 ; SSE2-NEXT: pxor %xmm0, %xmm2 6195 ; SSE2-NEXT: movdqa %xmm5, %xmm14 6196 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm14 6197 ; SSE2-NEXT: movdqa %xmm14, %xmm11 6198 ; SSE2-NEXT: pxor %xmm0, %xmm11 6199 ; SSE2-NEXT: movdqa %xmm4, %xmm15 6200 ; SSE2-NEXT: pcmpgtb %xmm10, %xmm15 6201 ; SSE2-NEXT: pxor %xmm15, %xmm0 6202 ; SSE2-NEXT: pandn %xmm4, %xmm15 6203 ; SSE2-NEXT: pandn %xmm10, %xmm0 6204 ; SSE2-NEXT: por %xmm15, %xmm0 6205 ; SSE2-NEXT: pandn %xmm5, %xmm14 6206 ; SSE2-NEXT: pandn %xmm1, %xmm11 6207 ; SSE2-NEXT: por %xmm14, %xmm11 6208 ; SSE2-NEXT: pandn %xmm6, %xmm13 6209 ; SSE2-NEXT: pandn %xmm8, %xmm2 6210 ; SSE2-NEXT: por %xmm13, %xmm2 6211 ; SSE2-NEXT: pandn %xmm7, %xmm12 6212 ; SSE2-NEXT: pandn %xmm3, %xmm9 6213 ; SSE2-NEXT: por %xmm12, %xmm9 6214 ; SSE2-NEXT: movdqa %xmm11, %xmm1 6215 ; SSE2-NEXT: movdqa %xmm9, %xmm3 6216 ; SSE2-NEXT: retq 6217 ; 6218 ; SSE4-LABEL: test132: 6219 ; SSE4: # BB#0: # %entry 6220 ; SSE4-NEXT: pminsb %xmm4, %xmm0 6221 ; SSE4-NEXT: pminsb %xmm5, %xmm1 6222 ; SSE4-NEXT: pminsb %xmm6, %xmm2 6223 ; SSE4-NEXT: pminsb %xmm7, %xmm3 6224 ; SSE4-NEXT: retq 6225 ; 6226 ; AVX1-LABEL: test132: 6227 ; AVX1: # BB#0: # %entry 6228 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6229 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6230 ; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 6231 ; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 6232 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6233 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6234 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6235 ; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 6236 ; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 6237 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6238 ; AVX1-NEXT: retq 6239 ; 6240 ; AVX2-LABEL: test132: 6241 ; AVX2: # BB#0: # %entry 6242 ; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 6243 ; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 6244 ; AVX2-NEXT: retq 6245 ; 6246 ; AVX512BW-LABEL: test132: 6247 ; AVX512BW: # BB#0: # %entry 6248 ; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 6249 ; AVX512BW-NEXT: retq 6250 entry: 6251 %cmp = icmp sge <64 x i8> %a, %b 6252 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6253 ret <64 x i8> %sel 6254 } 6255 6256 define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) { 6257 ; SSE-LABEL: test133: 6258 ; SSE: # BB#0: # %entry 6259 ; SSE-NEXT: pmaxub %xmm4, %xmm0 6260 ; SSE-NEXT: pmaxub %xmm5, %xmm1 6261 ; SSE-NEXT: pmaxub %xmm6, %xmm2 6262 ; SSE-NEXT: pmaxub %xmm7, %xmm3 6263 ; SSE-NEXT: retq 6264 ; 6265 ; AVX1-LABEL: test133: 6266 ; AVX1: # BB#0: # %entry 6267 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6268 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6269 ; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 6270 ; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 6271 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6272 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6273 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6274 ; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 6275 ; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 6276 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6277 ; AVX1-NEXT: retq 6278 ; 6279 ; AVX2-LABEL: test133: 6280 ; AVX2: # BB#0: # %entry 6281 ; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 6282 ; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 6283 ; AVX2-NEXT: retq 6284 ; 6285 ; AVX512BW-LABEL: test133: 6286 ; AVX512BW: # BB#0: # %entry 6287 ; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 6288 ; AVX512BW-NEXT: retq 6289 entry: 6290 %cmp = icmp ult <64 x i8> %a, %b 6291 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6292 ret <64 x i8> %sel 6293 } 6294 6295 define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) { 6296 ; SSE-LABEL: test134: 6297 ; SSE: # BB#0: # %entry 6298 ; SSE-NEXT: pmaxub %xmm4, %xmm0 6299 ; SSE-NEXT: pmaxub %xmm5, %xmm1 6300 ; SSE-NEXT: pmaxub %xmm6, %xmm2 6301 ; SSE-NEXT: pmaxub %xmm7, %xmm3 6302 ; SSE-NEXT: retq 6303 ; 6304 ; AVX1-LABEL: test134: 6305 ; AVX1: # BB#0: # %entry 6306 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6307 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6308 ; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 6309 ; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 6310 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6311 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6312 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6313 ; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 6314 ; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 6315 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6316 ; AVX1-NEXT: retq 6317 ; 6318 ; AVX2-LABEL: test134: 6319 ; AVX2: # BB#0: # %entry 6320 ; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 6321 ; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 6322 ; AVX2-NEXT: retq 6323 ; 6324 ; AVX512BW-LABEL: test134: 6325 ; AVX512BW: # BB#0: # %entry 6326 ; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 6327 ; AVX512BW-NEXT: retq 6328 entry: 6329 %cmp = icmp ule <64 x i8> %a, %b 6330 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6331 ret <64 x i8> %sel 6332 } 6333 6334 define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) { 6335 ; SSE-LABEL: test135: 6336 ; SSE: # BB#0: # %entry 6337 ; SSE-NEXT: pminub %xmm4, %xmm0 6338 ; SSE-NEXT: pminub %xmm5, %xmm1 6339 ; SSE-NEXT: pminub %xmm6, %xmm2 6340 ; SSE-NEXT: pminub %xmm7, %xmm3 6341 ; SSE-NEXT: retq 6342 ; 6343 ; AVX1-LABEL: test135: 6344 ; AVX1: # BB#0: # %entry 6345 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6346 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6347 ; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 6348 ; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 6349 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6350 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6351 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6352 ; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 6353 ; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 6354 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6355 ; AVX1-NEXT: retq 6356 ; 6357 ; AVX2-LABEL: test135: 6358 ; AVX2: # BB#0: # %entry 6359 ; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 6360 ; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 6361 ; AVX2-NEXT: retq 6362 ; 6363 ; AVX512BW-LABEL: test135: 6364 ; AVX512BW: # BB#0: # %entry 6365 ; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 6366 ; AVX512BW-NEXT: retq 6367 entry: 6368 %cmp = icmp ugt <64 x i8> %a, %b 6369 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6370 ret <64 x i8> %sel 6371 } 6372 6373 define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) { 6374 ; SSE-LABEL: test136: 6375 ; SSE: # BB#0: # %entry 6376 ; SSE-NEXT: pminub %xmm4, %xmm0 6377 ; SSE-NEXT: pminub %xmm5, %xmm1 6378 ; SSE-NEXT: pminub %xmm6, %xmm2 6379 ; SSE-NEXT: pminub %xmm7, %xmm3 6380 ; SSE-NEXT: retq 6381 ; 6382 ; AVX1-LABEL: test136: 6383 ; AVX1: # BB#0: # %entry 6384 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6385 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6386 ; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 6387 ; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 6388 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6389 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6390 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6391 ; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 6392 ; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 6393 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6394 ; AVX1-NEXT: retq 6395 ; 6396 ; AVX2-LABEL: test136: 6397 ; AVX2: # BB#0: # %entry 6398 ; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 6399 ; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 6400 ; AVX2-NEXT: retq 6401 ; 6402 ; AVX512BW-LABEL: test136: 6403 ; AVX512BW: # BB#0: # %entry 6404 ; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 6405 ; AVX512BW-NEXT: retq 6406 entry: 6407 %cmp = icmp uge <64 x i8> %a, %b 6408 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6409 ret <64 x i8> %sel 6410 } 6411 6412 define <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) { 6413 ; SSE-LABEL: test137: 6414 ; SSE: # BB#0: # %entry 6415 ; SSE-NEXT: pmaxsw %xmm4, %xmm0 6416 ; SSE-NEXT: pmaxsw %xmm5, %xmm1 6417 ; SSE-NEXT: pmaxsw %xmm6, %xmm2 6418 ; SSE-NEXT: pmaxsw %xmm7, %xmm3 6419 ; SSE-NEXT: retq 6420 ; 6421 ; AVX1-LABEL: test137: 6422 ; AVX1: # BB#0: # %entry 6423 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6424 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6425 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 6426 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 6427 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6428 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6429 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6430 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 6431 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 6432 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6433 ; AVX1-NEXT: retq 6434 ; 6435 ; AVX2-LABEL: test137: 6436 ; AVX2: # BB#0: # %entry 6437 ; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 6438 ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 6439 ; AVX2-NEXT: retq 6440 ; 6441 ; AVX512BW-LABEL: test137: 6442 ; AVX512BW: # BB#0: # %entry 6443 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 6444 ; AVX512BW-NEXT: retq 6445 entry: 6446 %cmp = icmp slt <32 x i16> %a, %b 6447 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6448 ret <32 x i16> %sel 6449 } 6450 6451 define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) { 6452 ; SSE-LABEL: test138: 6453 ; SSE: # BB#0: # %entry 6454 ; SSE-NEXT: pmaxsw %xmm4, %xmm0 6455 ; SSE-NEXT: pmaxsw %xmm5, %xmm1 6456 ; SSE-NEXT: pmaxsw %xmm6, %xmm2 6457 ; SSE-NEXT: pmaxsw %xmm7, %xmm3 6458 ; SSE-NEXT: retq 6459 ; 6460 ; AVX1-LABEL: test138: 6461 ; AVX1: # BB#0: # %entry 6462 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6463 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6464 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 6465 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 6466 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6467 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6468 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6469 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 6470 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 6471 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6472 ; AVX1-NEXT: retq 6473 ; 6474 ; AVX2-LABEL: test138: 6475 ; AVX2: # BB#0: # %entry 6476 ; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 6477 ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 6478 ; AVX2-NEXT: retq 6479 ; 6480 ; AVX512BW-LABEL: test138: 6481 ; AVX512BW: # BB#0: # %entry 6482 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 6483 ; AVX512BW-NEXT: retq 6484 entry: 6485 %cmp = icmp sle <32 x i16> %a, %b 6486 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6487 ret <32 x i16> %sel 6488 } 6489 6490 define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) { 6491 ; SSE-LABEL: test139: 6492 ; SSE: # BB#0: # %entry 6493 ; SSE-NEXT: pminsw %xmm4, %xmm0 6494 ; SSE-NEXT: pminsw %xmm5, %xmm1 6495 ; SSE-NEXT: pminsw %xmm6, %xmm2 6496 ; SSE-NEXT: pminsw %xmm7, %xmm3 6497 ; SSE-NEXT: retq 6498 ; 6499 ; AVX1-LABEL: test139: 6500 ; AVX1: # BB#0: # %entry 6501 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6502 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6503 ; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 6504 ; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 6505 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6506 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6507 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6508 ; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 6509 ; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 6510 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6511 ; AVX1-NEXT: retq 6512 ; 6513 ; AVX2-LABEL: test139: 6514 ; AVX2: # BB#0: # %entry 6515 ; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 6516 ; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 6517 ; AVX2-NEXT: retq 6518 ; 6519 ; AVX512BW-LABEL: test139: 6520 ; AVX512BW: # BB#0: # %entry 6521 ; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 6522 ; AVX512BW-NEXT: retq 6523 entry: 6524 %cmp = icmp sgt <32 x i16> %a, %b 6525 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6526 ret <32 x i16> %sel 6527 } 6528 6529 define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) { 6530 ; SSE-LABEL: test140: 6531 ; SSE: # BB#0: # %entry 6532 ; SSE-NEXT: pminsw %xmm4, %xmm0 6533 ; SSE-NEXT: pminsw %xmm5, %xmm1 6534 ; SSE-NEXT: pminsw %xmm6, %xmm2 6535 ; SSE-NEXT: pminsw %xmm7, %xmm3 6536 ; SSE-NEXT: retq 6537 ; 6538 ; AVX1-LABEL: test140: 6539 ; AVX1: # BB#0: # %entry 6540 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6541 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6542 ; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 6543 ; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 6544 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6545 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6546 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6547 ; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 6548 ; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 6549 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6550 ; AVX1-NEXT: retq 6551 ; 6552 ; AVX2-LABEL: test140: 6553 ; AVX2: # BB#0: # %entry 6554 ; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 6555 ; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 6556 ; AVX2-NEXT: retq 6557 ; 6558 ; AVX512BW-LABEL: test140: 6559 ; AVX512BW: # BB#0: # %entry 6560 ; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 6561 ; AVX512BW-NEXT: retq 6562 entry: 6563 %cmp = icmp sge <32 x i16> %a, %b 6564 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6565 ret <32 x i16> %sel 6566 } 6567 6568 define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) { 6569 ; SSE2-LABEL: test141: 6570 ; SSE2: # BB#0: # %entry 6571 ; SSE2-NEXT: movdqa %xmm0, %xmm11 6572 ; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [32768,32768,32768,32768,32768,32768,32768,32768] 6573 ; SSE2-NEXT: movdqa %xmm3, %xmm9 6574 ; SSE2-NEXT: pxor %xmm0, %xmm9 6575 ; SSE2-NEXT: movdqa %xmm7, %xmm8 6576 ; SSE2-NEXT: pxor %xmm0, %xmm8 6577 ; SSE2-NEXT: pcmpgtw %xmm9, %xmm8 6578 ; SSE2-NEXT: movdqa %xmm2, %xmm10 6579 ; SSE2-NEXT: pxor %xmm0, %xmm10 6580 ; SSE2-NEXT: movdqa %xmm6, %xmm9 6581 ; SSE2-NEXT: pxor %xmm0, %xmm9 6582 ; SSE2-NEXT: pcmpgtw %xmm10, %xmm9 6583 ; SSE2-NEXT: movdqa %xmm1, %xmm12 6584 ; SSE2-NEXT: pxor %xmm0, %xmm12 6585 ; SSE2-NEXT: movdqa %xmm5, %xmm10 6586 ; SSE2-NEXT: pxor %xmm0, %xmm10 6587 ; SSE2-NEXT: pcmpgtw %xmm12, %xmm10 6588 ; SSE2-NEXT: movdqa %xmm11, %xmm12 6589 ; SSE2-NEXT: pxor %xmm0, %xmm12 6590 ; SSE2-NEXT: pxor %xmm4, %xmm0 6591 ; SSE2-NEXT: pcmpgtw %xmm12, %xmm0 6592 ; SSE2-NEXT: pand %xmm0, %xmm4 6593 ; SSE2-NEXT: pandn %xmm11, %xmm0 6594 ; SSE2-NEXT: por %xmm4, %xmm0 6595 ; SSE2-NEXT: pand %xmm10, %xmm5 6596 ; SSE2-NEXT: pandn %xmm1, %xmm10 6597 ; SSE2-NEXT: por %xmm5, %xmm10 6598 ; SSE2-NEXT: pand %xmm9, %xmm6 6599 ; SSE2-NEXT: pandn %xmm2, %xmm9 6600 ; SSE2-NEXT: por %xmm6, %xmm9 6601 ; SSE2-NEXT: pand %xmm8, %xmm7 6602 ; SSE2-NEXT: pandn %xmm3, %xmm8 6603 ; SSE2-NEXT: por %xmm7, %xmm8 6604 ; SSE2-NEXT: movdqa %xmm10, %xmm1 6605 ; SSE2-NEXT: movdqa %xmm9, %xmm2 6606 ; SSE2-NEXT: movdqa %xmm8, %xmm3 6607 ; SSE2-NEXT: retq 6608 ; 6609 ; SSE4-LABEL: test141: 6610 ; SSE4: # BB#0: # %entry 6611 ; SSE4-NEXT: pmaxuw %xmm4, %xmm0 6612 ; SSE4-NEXT: pmaxuw %xmm5, %xmm1 6613 ; SSE4-NEXT: pmaxuw %xmm6, %xmm2 6614 ; SSE4-NEXT: pmaxuw %xmm7, %xmm3 6615 ; SSE4-NEXT: retq 6616 ; 6617 ; AVX1-LABEL: test141: 6618 ; AVX1: # BB#0: # %entry 6619 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6620 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6621 ; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 6622 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 6623 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6624 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6625 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6626 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 6627 ; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 6628 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6629 ; AVX1-NEXT: retq 6630 ; 6631 ; AVX2-LABEL: test141: 6632 ; AVX2: # BB#0: # %entry 6633 ; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 6634 ; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 6635 ; AVX2-NEXT: retq 6636 ; 6637 ; AVX512BW-LABEL: test141: 6638 ; AVX512BW: # BB#0: # %entry 6639 ; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 6640 ; AVX512BW-NEXT: retq 6641 entry: 6642 %cmp = icmp ult <32 x i16> %a, %b 6643 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6644 ret <32 x i16> %sel 6645 } 6646 6647 define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) { 6648 ; SSE2-LABEL: test142: 6649 ; SSE2: # BB#0: # %entry 6650 ; SSE2-NEXT: movdqa %xmm3, %xmm8 6651 ; SSE2-NEXT: movdqa %xmm2, %xmm9 6652 ; SSE2-NEXT: movdqa %xmm1, %xmm10 6653 ; SSE2-NEXT: psubusw %xmm7, %xmm3 6654 ; SSE2-NEXT: pxor %xmm12, %xmm12 6655 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm3 6656 ; SSE2-NEXT: psubusw %xmm6, %xmm2 6657 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm2 6658 ; SSE2-NEXT: psubusw %xmm5, %xmm1 6659 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm1 6660 ; SSE2-NEXT: movdqa %xmm0, %xmm11 6661 ; SSE2-NEXT: psubusw %xmm4, %xmm11 6662 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm11 6663 ; SSE2-NEXT: pand %xmm11, %xmm4 6664 ; SSE2-NEXT: pandn %xmm0, %xmm11 6665 ; SSE2-NEXT: por %xmm4, %xmm11 6666 ; SSE2-NEXT: pand %xmm1, %xmm5 6667 ; SSE2-NEXT: pandn %xmm10, %xmm1 6668 ; SSE2-NEXT: por %xmm5, %xmm1 6669 ; SSE2-NEXT: pand %xmm2, %xmm6 6670 ; SSE2-NEXT: pandn %xmm9, %xmm2 6671 ; SSE2-NEXT: por %xmm6, %xmm2 6672 ; SSE2-NEXT: pand %xmm3, %xmm7 6673 ; SSE2-NEXT: pandn %xmm8, %xmm3 6674 ; SSE2-NEXT: por %xmm7, %xmm3 6675 ; SSE2-NEXT: movdqa %xmm11, %xmm0 6676 ; SSE2-NEXT: retq 6677 ; 6678 ; SSE4-LABEL: test142: 6679 ; SSE4: # BB#0: # %entry 6680 ; SSE4-NEXT: pmaxuw %xmm4, %xmm0 6681 ; SSE4-NEXT: pmaxuw %xmm5, %xmm1 6682 ; SSE4-NEXT: pmaxuw %xmm6, %xmm2 6683 ; SSE4-NEXT: pmaxuw %xmm7, %xmm3 6684 ; SSE4-NEXT: retq 6685 ; 6686 ; AVX1-LABEL: test142: 6687 ; AVX1: # BB#0: # %entry 6688 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6689 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6690 ; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 6691 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 6692 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6693 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6694 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6695 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 6696 ; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 6697 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6698 ; AVX1-NEXT: retq 6699 ; 6700 ; AVX2-LABEL: test142: 6701 ; AVX2: # BB#0: # %entry 6702 ; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 6703 ; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 6704 ; AVX2-NEXT: retq 6705 ; 6706 ; AVX512BW-LABEL: test142: 6707 ; AVX512BW: # BB#0: # %entry 6708 ; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 6709 ; AVX512BW-NEXT: retq 6710 entry: 6711 %cmp = icmp ule <32 x i16> %a, %b 6712 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6713 ret <32 x i16> %sel 6714 } 6715 6716 define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) { 6717 ; SSE2-LABEL: test143: 6718 ; SSE2: # BB#0: # %entry 6719 ; SSE2-NEXT: movdqa %xmm0, %xmm11 6720 ; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [32768,32768,32768,32768,32768,32768,32768,32768] 6721 ; SSE2-NEXT: movdqa %xmm7, %xmm9 6722 ; SSE2-NEXT: pxor %xmm0, %xmm9 6723 ; SSE2-NEXT: movdqa %xmm3, %xmm8 6724 ; SSE2-NEXT: pxor %xmm0, %xmm8 6725 ; SSE2-NEXT: pcmpgtw %xmm9, %xmm8 6726 ; SSE2-NEXT: movdqa %xmm6, %xmm10 6727 ; SSE2-NEXT: pxor %xmm0, %xmm10 6728 ; SSE2-NEXT: movdqa %xmm2, %xmm9 6729 ; SSE2-NEXT: pxor %xmm0, %xmm9 6730 ; SSE2-NEXT: pcmpgtw %xmm10, %xmm9 6731 ; SSE2-NEXT: movdqa %xmm5, %xmm12 6732 ; SSE2-NEXT: pxor %xmm0, %xmm12 6733 ; SSE2-NEXT: movdqa %xmm1, %xmm10 6734 ; SSE2-NEXT: pxor %xmm0, %xmm10 6735 ; SSE2-NEXT: pcmpgtw %xmm12, %xmm10 6736 ; SSE2-NEXT: movdqa %xmm4, %xmm12 6737 ; SSE2-NEXT: pxor %xmm0, %xmm12 6738 ; SSE2-NEXT: pxor %xmm11, %xmm0 6739 ; SSE2-NEXT: pcmpgtw %xmm12, %xmm0 6740 ; SSE2-NEXT: pand %xmm0, %xmm4 6741 ; SSE2-NEXT: pandn %xmm11, %xmm0 6742 ; SSE2-NEXT: por %xmm4, %xmm0 6743 ; SSE2-NEXT: pand %xmm10, %xmm5 6744 ; SSE2-NEXT: pandn %xmm1, %xmm10 6745 ; SSE2-NEXT: por %xmm5, %xmm10 6746 ; SSE2-NEXT: pand %xmm9, %xmm6 6747 ; SSE2-NEXT: pandn %xmm2, %xmm9 6748 ; SSE2-NEXT: por %xmm6, %xmm9 6749 ; SSE2-NEXT: pand %xmm8, %xmm7 6750 ; SSE2-NEXT: pandn %xmm3, %xmm8 6751 ; SSE2-NEXT: por %xmm7, %xmm8 6752 ; SSE2-NEXT: movdqa %xmm10, %xmm1 6753 ; SSE2-NEXT: movdqa %xmm9, %xmm2 6754 ; SSE2-NEXT: movdqa %xmm8, %xmm3 6755 ; SSE2-NEXT: retq 6756 ; 6757 ; SSE4-LABEL: test143: 6758 ; SSE4: # BB#0: # %entry 6759 ; SSE4-NEXT: pminuw %xmm4, %xmm0 6760 ; SSE4-NEXT: pminuw %xmm5, %xmm1 6761 ; SSE4-NEXT: pminuw %xmm6, %xmm2 6762 ; SSE4-NEXT: pminuw %xmm7, %xmm3 6763 ; SSE4-NEXT: retq 6764 ; 6765 ; AVX1-LABEL: test143: 6766 ; AVX1: # BB#0: # %entry 6767 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6768 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6769 ; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 6770 ; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 6771 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6772 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6773 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6774 ; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 6775 ; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 6776 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6777 ; AVX1-NEXT: retq 6778 ; 6779 ; AVX2-LABEL: test143: 6780 ; AVX2: # BB#0: # %entry 6781 ; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 6782 ; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 6783 ; AVX2-NEXT: retq 6784 ; 6785 ; AVX512BW-LABEL: test143: 6786 ; AVX512BW: # BB#0: # %entry 6787 ; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 6788 ; AVX512BW-NEXT: retq 6789 entry: 6790 %cmp = icmp ugt <32 x i16> %a, %b 6791 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6792 ret <32 x i16> %sel 6793 } 6794 6795 define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) { 6796 ; SSE2-LABEL: test144: 6797 ; SSE2: # BB#0: # %entry 6798 ; SSE2-NEXT: movdqa %xmm3, %xmm8 6799 ; SSE2-NEXT: movdqa %xmm2, %xmm9 6800 ; SSE2-NEXT: movdqa %xmm1, %xmm10 6801 ; SSE2-NEXT: movdqa %xmm7, %xmm3 6802 ; SSE2-NEXT: psubusw %xmm8, %xmm3 6803 ; SSE2-NEXT: pxor %xmm12, %xmm12 6804 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm3 6805 ; SSE2-NEXT: movdqa %xmm6, %xmm2 6806 ; SSE2-NEXT: psubusw %xmm9, %xmm2 6807 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm2 6808 ; SSE2-NEXT: movdqa %xmm5, %xmm1 6809 ; SSE2-NEXT: psubusw %xmm10, %xmm1 6810 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm1 6811 ; SSE2-NEXT: movdqa %xmm4, %xmm11 6812 ; SSE2-NEXT: psubusw %xmm0, %xmm11 6813 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm11 6814 ; SSE2-NEXT: pand %xmm11, %xmm4 6815 ; SSE2-NEXT: pandn %xmm0, %xmm11 6816 ; SSE2-NEXT: por %xmm4, %xmm11 6817 ; SSE2-NEXT: pand %xmm1, %xmm5 6818 ; SSE2-NEXT: pandn %xmm10, %xmm1 6819 ; SSE2-NEXT: por %xmm5, %xmm1 6820 ; SSE2-NEXT: pand %xmm2, %xmm6 6821 ; SSE2-NEXT: pandn %xmm9, %xmm2 6822 ; SSE2-NEXT: por %xmm6, %xmm2 6823 ; SSE2-NEXT: pand %xmm3, %xmm7 6824 ; SSE2-NEXT: pandn %xmm8, %xmm3 6825 ; SSE2-NEXT: por %xmm7, %xmm3 6826 ; SSE2-NEXT: movdqa %xmm11, %xmm0 6827 ; SSE2-NEXT: retq 6828 ; 6829 ; SSE4-LABEL: test144: 6830 ; SSE4: # BB#0: # %entry 6831 ; SSE4-NEXT: pminuw %xmm4, %xmm0 6832 ; SSE4-NEXT: pminuw %xmm5, %xmm1 6833 ; SSE4-NEXT: pminuw %xmm6, %xmm2 6834 ; SSE4-NEXT: pminuw %xmm7, %xmm3 6835 ; SSE4-NEXT: retq 6836 ; 6837 ; AVX1-LABEL: test144: 6838 ; AVX1: # BB#0: # %entry 6839 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6840 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6841 ; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 6842 ; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 6843 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6844 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6845 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6846 ; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 6847 ; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 6848 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6849 ; AVX1-NEXT: retq 6850 ; 6851 ; AVX2-LABEL: test144: 6852 ; AVX2: # BB#0: # %entry 6853 ; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 6854 ; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 6855 ; AVX2-NEXT: retq 6856 ; 6857 ; AVX512BW-LABEL: test144: 6858 ; AVX512BW: # BB#0: # %entry 6859 ; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 6860 ; AVX512BW-NEXT: retq 6861 entry: 6862 %cmp = icmp uge <32 x i16> %a, %b 6863 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6864 ret <32 x i16> %sel 6865 } 6866 6867 define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) { 6868 ; SSE2-LABEL: test145: 6869 ; SSE2: # BB#0: # %entry 6870 ; SSE2-NEXT: movdqa %xmm3, %xmm8 6871 ; SSE2-NEXT: movdqa %xmm7, %xmm3 6872 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm3 6873 ; SSE2-NEXT: movdqa %xmm6, %xmm9 6874 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm9 6875 ; SSE2-NEXT: movdqa %xmm5, %xmm10 6876 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm10 6877 ; SSE2-NEXT: movdqa %xmm4, %xmm11 6878 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm11 6879 ; SSE2-NEXT: pand %xmm11, %xmm4 6880 ; SSE2-NEXT: pandn %xmm0, %xmm11 6881 ; SSE2-NEXT: por %xmm4, %xmm11 6882 ; SSE2-NEXT: pand %xmm10, %xmm5 6883 ; SSE2-NEXT: pandn %xmm1, %xmm10 6884 ; SSE2-NEXT: por %xmm5, %xmm10 6885 ; SSE2-NEXT: pand %xmm9, %xmm6 6886 ; SSE2-NEXT: pandn %xmm2, %xmm9 6887 ; SSE2-NEXT: por %xmm6, %xmm9 6888 ; SSE2-NEXT: pand %xmm3, %xmm7 6889 ; SSE2-NEXT: pandn %xmm8, %xmm3 6890 ; SSE2-NEXT: por %xmm7, %xmm3 6891 ; SSE2-NEXT: movdqa %xmm11, %xmm0 6892 ; SSE2-NEXT: movdqa %xmm10, %xmm1 6893 ; SSE2-NEXT: movdqa %xmm9, %xmm2 6894 ; SSE2-NEXT: retq 6895 ; 6896 ; SSE4-LABEL: test145: 6897 ; SSE4: # BB#0: # %entry 6898 ; SSE4-NEXT: pmaxsd %xmm4, %xmm0 6899 ; SSE4-NEXT: pmaxsd %xmm5, %xmm1 6900 ; SSE4-NEXT: pmaxsd %xmm6, %xmm2 6901 ; SSE4-NEXT: pmaxsd %xmm7, %xmm3 6902 ; SSE4-NEXT: retq 6903 ; 6904 ; AVX1-LABEL: test145: 6905 ; AVX1: # BB#0: # %entry 6906 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6907 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6908 ; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 6909 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 6910 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6911 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6912 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6913 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 6914 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 6915 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6916 ; AVX1-NEXT: retq 6917 ; 6918 ; AVX2-LABEL: test145: 6919 ; AVX2: # BB#0: # %entry 6920 ; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 6921 ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 6922 ; AVX2-NEXT: retq 6923 ; 6924 ; AVX512F-LABEL: test145: 6925 ; AVX512F: # BB#0: # %entry 6926 ; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 6927 ; AVX512F-NEXT: retq 6928 entry: 6929 %cmp = icmp slt <16 x i32> %a, %b 6930 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6931 ret <16 x i32> %sel 6932 } 6933 6934 define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) { 6935 ; SSE2-LABEL: test146: 6936 ; SSE2: # BB#0: # %entry 6937 ; SSE2-NEXT: movdqa %xmm2, %xmm8 6938 ; SSE2-NEXT: movdqa %xmm3, %xmm12 6939 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm12 6940 ; SSE2-NEXT: pcmpeqd %xmm13, %xmm13 6941 ; SSE2-NEXT: movdqa %xmm12, %xmm9 6942 ; SSE2-NEXT: pxor %xmm13, %xmm9 6943 ; SSE2-NEXT: movdqa %xmm8, %xmm14 6944 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm14 6945 ; SSE2-NEXT: movdqa %xmm14, %xmm2 6946 ; SSE2-NEXT: pxor %xmm13, %xmm2 6947 ; SSE2-NEXT: movdqa %xmm1, %xmm15 6948 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm15 6949 ; SSE2-NEXT: movdqa %xmm15, %xmm10 6950 ; SSE2-NEXT: pxor %xmm13, %xmm10 6951 ; SSE2-NEXT: movdqa %xmm0, %xmm11 6952 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm11 6953 ; SSE2-NEXT: pxor %xmm11, %xmm13 6954 ; SSE2-NEXT: pandn %xmm4, %xmm11 6955 ; SSE2-NEXT: pandn %xmm0, %xmm13 6956 ; SSE2-NEXT: por %xmm13, %xmm11 6957 ; SSE2-NEXT: pandn %xmm5, %xmm15 6958 ; SSE2-NEXT: pandn %xmm1, %xmm10 6959 ; SSE2-NEXT: por %xmm15, %xmm10 6960 ; SSE2-NEXT: pandn %xmm6, %xmm14 6961 ; SSE2-NEXT: pandn %xmm8, %xmm2 6962 ; SSE2-NEXT: por %xmm14, %xmm2 6963 ; SSE2-NEXT: pandn %xmm7, %xmm12 6964 ; SSE2-NEXT: pandn %xmm3, %xmm9 6965 ; SSE2-NEXT: por %xmm12, %xmm9 6966 ; SSE2-NEXT: movdqa %xmm11, %xmm0 6967 ; SSE2-NEXT: movdqa %xmm10, %xmm1 6968 ; SSE2-NEXT: movdqa %xmm9, %xmm3 6969 ; SSE2-NEXT: retq 6970 ; 6971 ; SSE4-LABEL: test146: 6972 ; SSE4: # BB#0: # %entry 6973 ; SSE4-NEXT: pmaxsd %xmm4, %xmm0 6974 ; SSE4-NEXT: pmaxsd %xmm5, %xmm1 6975 ; SSE4-NEXT: pmaxsd %xmm6, %xmm2 6976 ; SSE4-NEXT: pmaxsd %xmm7, %xmm3 6977 ; SSE4-NEXT: retq 6978 ; 6979 ; AVX1-LABEL: test146: 6980 ; AVX1: # BB#0: # %entry 6981 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6982 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6983 ; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 6984 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 6985 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6986 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6987 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6988 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 6989 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 6990 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6991 ; AVX1-NEXT: retq 6992 ; 6993 ; AVX2-LABEL: test146: 6994 ; AVX2: # BB#0: # %entry 6995 ; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 6996 ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 6997 ; AVX2-NEXT: retq 6998 ; 6999 ; AVX512F-LABEL: test146: 7000 ; AVX512F: # BB#0: # %entry 7001 ; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 7002 ; AVX512F-NEXT: retq 7003 entry: 7004 %cmp = icmp sle <16 x i32> %a, %b 7005 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7006 ret <16 x i32> %sel 7007 } 7008 7009 define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) { 7010 ; SSE2-LABEL: test147: 7011 ; SSE2: # BB#0: # %entry 7012 ; SSE2-NEXT: movdqa %xmm3, %xmm8 7013 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm3 7014 ; SSE2-NEXT: movdqa %xmm2, %xmm9 7015 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm9 7016 ; SSE2-NEXT: movdqa %xmm1, %xmm10 7017 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm10 7018 ; SSE2-NEXT: movdqa %xmm0, %xmm11 7019 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm11 7020 ; SSE2-NEXT: pand %xmm11, %xmm4 7021 ; SSE2-NEXT: pandn %xmm0, %xmm11 7022 ; SSE2-NEXT: por %xmm4, %xmm11 7023 ; SSE2-NEXT: pand %xmm10, %xmm5 7024 ; SSE2-NEXT: pandn %xmm1, %xmm10 7025 ; SSE2-NEXT: por %xmm5, %xmm10 7026 ; SSE2-NEXT: pand %xmm9, %xmm6 7027 ; SSE2-NEXT: pandn %xmm2, %xmm9 7028 ; SSE2-NEXT: por %xmm6, %xmm9 7029 ; SSE2-NEXT: pand %xmm3, %xmm7 7030 ; SSE2-NEXT: pandn %xmm8, %xmm3 7031 ; SSE2-NEXT: por %xmm7, %xmm3 7032 ; SSE2-NEXT: movdqa %xmm11, %xmm0 7033 ; SSE2-NEXT: movdqa %xmm10, %xmm1 7034 ; SSE2-NEXT: movdqa %xmm9, %xmm2 7035 ; SSE2-NEXT: retq 7036 ; 7037 ; SSE4-LABEL: test147: 7038 ; SSE4: # BB#0: # %entry 7039 ; SSE4-NEXT: pminsd %xmm4, %xmm0 7040 ; SSE4-NEXT: pminsd %xmm5, %xmm1 7041 ; SSE4-NEXT: pminsd %xmm6, %xmm2 7042 ; SSE4-NEXT: pminsd %xmm7, %xmm3 7043 ; SSE4-NEXT: retq 7044 ; 7045 ; AVX1-LABEL: test147: 7046 ; AVX1: # BB#0: # %entry 7047 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7048 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7049 ; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 7050 ; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 7051 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7052 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7053 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7054 ; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 7055 ; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 7056 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7057 ; AVX1-NEXT: retq 7058 ; 7059 ; AVX2-LABEL: test147: 7060 ; AVX2: # BB#0: # %entry 7061 ; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 7062 ; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 7063 ; AVX2-NEXT: retq 7064 ; 7065 ; AVX512F-LABEL: test147: 7066 ; AVX512F: # BB#0: # %entry 7067 ; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0 7068 ; AVX512F-NEXT: retq 7069 entry: 7070 %cmp = icmp sgt <16 x i32> %a, %b 7071 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7072 ret <16 x i32> %sel 7073 } 7074 7075 define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) { 7076 ; SSE2-LABEL: test148: 7077 ; SSE2: # BB#0: # %entry 7078 ; SSE2-NEXT: movdqa %xmm2, %xmm8 7079 ; SSE2-NEXT: movdqa %xmm0, %xmm10 7080 ; SSE2-NEXT: movdqa %xmm7, %xmm12 7081 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm12 7082 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 7083 ; SSE2-NEXT: movdqa %xmm12, %xmm9 7084 ; SSE2-NEXT: pxor %xmm0, %xmm9 7085 ; SSE2-NEXT: movdqa %xmm6, %xmm13 7086 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm13 7087 ; SSE2-NEXT: movdqa %xmm13, %xmm2 7088 ; SSE2-NEXT: pxor %xmm0, %xmm2 7089 ; SSE2-NEXT: movdqa %xmm5, %xmm14 7090 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm14 7091 ; SSE2-NEXT: movdqa %xmm14, %xmm11 7092 ; SSE2-NEXT: pxor %xmm0, %xmm11 7093 ; SSE2-NEXT: movdqa %xmm4, %xmm15 7094 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm15 7095 ; SSE2-NEXT: pxor %xmm15, %xmm0 7096 ; SSE2-NEXT: pandn %xmm4, %xmm15 7097 ; SSE2-NEXT: pandn %xmm10, %xmm0 7098 ; SSE2-NEXT: por %xmm15, %xmm0 7099 ; SSE2-NEXT: pandn %xmm5, %xmm14 7100 ; SSE2-NEXT: pandn %xmm1, %xmm11 7101 ; SSE2-NEXT: por %xmm14, %xmm11 7102 ; SSE2-NEXT: pandn %xmm6, %xmm13 7103 ; SSE2-NEXT: pandn %xmm8, %xmm2 7104 ; SSE2-NEXT: por %xmm13, %xmm2 7105 ; SSE2-NEXT: pandn %xmm7, %xmm12 7106 ; SSE2-NEXT: pandn %xmm3, %xmm9 7107 ; SSE2-NEXT: por %xmm12, %xmm9 7108 ; SSE2-NEXT: movdqa %xmm11, %xmm1 7109 ; SSE2-NEXT: movdqa %xmm9, %xmm3 7110 ; SSE2-NEXT: retq 7111 ; 7112 ; SSE4-LABEL: test148: 7113 ; SSE4: # BB#0: # %entry 7114 ; SSE4-NEXT: pminsd %xmm4, %xmm0 7115 ; SSE4-NEXT: pminsd %xmm5, %xmm1 7116 ; SSE4-NEXT: pminsd %xmm6, %xmm2 7117 ; SSE4-NEXT: pminsd %xmm7, %xmm3 7118 ; SSE4-NEXT: retq 7119 ; 7120 ; AVX1-LABEL: test148: 7121 ; AVX1: # BB#0: # %entry 7122 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7123 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7124 ; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 7125 ; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 7126 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7127 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7128 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7129 ; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 7130 ; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 7131 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7132 ; AVX1-NEXT: retq 7133 ; 7134 ; AVX2-LABEL: test148: 7135 ; AVX2: # BB#0: # %entry 7136 ; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 7137 ; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 7138 ; AVX2-NEXT: retq 7139 ; 7140 ; AVX512F-LABEL: test148: 7141 ; AVX512F: # BB#0: # %entry 7142 ; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0 7143 ; AVX512F-NEXT: retq 7144 entry: 7145 %cmp = icmp sge <16 x i32> %a, %b 7146 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7147 ret <16 x i32> %sel 7148 } 7149 7150 define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) { 7151 ; SSE2-LABEL: test149: 7152 ; SSE2: # BB#0: # %entry 7153 ; SSE2-NEXT: movdqa %xmm0, %xmm11 7154 ; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648] 7155 ; SSE2-NEXT: movdqa %xmm3, %xmm9 7156 ; SSE2-NEXT: pxor %xmm0, %xmm9 7157 ; SSE2-NEXT: movdqa %xmm7, %xmm8 7158 ; SSE2-NEXT: pxor %xmm0, %xmm8 7159 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm8 7160 ; SSE2-NEXT: movdqa %xmm2, %xmm10 7161 ; SSE2-NEXT: pxor %xmm0, %xmm10 7162 ; SSE2-NEXT: movdqa %xmm6, %xmm9 7163 ; SSE2-NEXT: pxor %xmm0, %xmm9 7164 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm9 7165 ; SSE2-NEXT: movdqa %xmm1, %xmm12 7166 ; SSE2-NEXT: pxor %xmm0, %xmm12 7167 ; SSE2-NEXT: movdqa %xmm5, %xmm10 7168 ; SSE2-NEXT: pxor %xmm0, %xmm10 7169 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm10 7170 ; SSE2-NEXT: movdqa %xmm11, %xmm12 7171 ; SSE2-NEXT: pxor %xmm0, %xmm12 7172 ; SSE2-NEXT: pxor %xmm4, %xmm0 7173 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm0 7174 ; SSE2-NEXT: pand %xmm0, %xmm4 7175 ; SSE2-NEXT: pandn %xmm11, %xmm0 7176 ; SSE2-NEXT: por %xmm4, %xmm0 7177 ; SSE2-NEXT: pand %xmm10, %xmm5 7178 ; SSE2-NEXT: pandn %xmm1, %xmm10 7179 ; SSE2-NEXT: por %xmm5, %xmm10 7180 ; SSE2-NEXT: pand %xmm9, %xmm6 7181 ; SSE2-NEXT: pandn %xmm2, %xmm9 7182 ; SSE2-NEXT: por %xmm6, %xmm9 7183 ; SSE2-NEXT: pand %xmm8, %xmm7 7184 ; SSE2-NEXT: pandn %xmm3, %xmm8 7185 ; SSE2-NEXT: por %xmm7, %xmm8 7186 ; SSE2-NEXT: movdqa %xmm10, %xmm1 7187 ; SSE2-NEXT: movdqa %xmm9, %xmm2 7188 ; SSE2-NEXT: movdqa %xmm8, %xmm3 7189 ; SSE2-NEXT: retq 7190 ; 7191 ; SSE4-LABEL: test149: 7192 ; SSE4: # BB#0: # %entry 7193 ; SSE4-NEXT: pmaxud %xmm4, %xmm0 7194 ; SSE4-NEXT: pmaxud %xmm5, %xmm1 7195 ; SSE4-NEXT: pmaxud %xmm6, %xmm2 7196 ; SSE4-NEXT: pmaxud %xmm7, %xmm3 7197 ; SSE4-NEXT: retq 7198 ; 7199 ; AVX1-LABEL: test149: 7200 ; AVX1: # BB#0: # %entry 7201 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7202 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7203 ; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 7204 ; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 7205 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7206 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7207 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7208 ; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 7209 ; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 7210 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7211 ; AVX1-NEXT: retq 7212 ; 7213 ; AVX2-LABEL: test149: 7214 ; AVX2: # BB#0: # %entry 7215 ; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 7216 ; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 7217 ; AVX2-NEXT: retq 7218 ; 7219 ; AVX512F-LABEL: test149: 7220 ; AVX512F: # BB#0: # %entry 7221 ; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 7222 ; AVX512F-NEXT: retq 7223 entry: 7224 %cmp = icmp ult <16 x i32> %a, %b 7225 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7226 ret <16 x i32> %sel 7227 } 7228 7229 define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) { 7230 ; SSE2-LABEL: test150: 7231 ; SSE2: # BB#0: # %entry 7232 ; SSE2-NEXT: movdqa %xmm0, %xmm10 7233 ; SSE2-NEXT: movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648] 7234 ; SSE2-NEXT: movdqa %xmm7, %xmm0 7235 ; SSE2-NEXT: pxor %xmm14, %xmm0 7236 ; SSE2-NEXT: movdqa %xmm3, %xmm12 7237 ; SSE2-NEXT: pxor %xmm14, %xmm12 7238 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm12 7239 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 7240 ; SSE2-NEXT: movdqa %xmm12, %xmm8 7241 ; SSE2-NEXT: pxor %xmm0, %xmm8 7242 ; SSE2-NEXT: movdqa %xmm6, %xmm9 7243 ; SSE2-NEXT: pxor %xmm14, %xmm9 7244 ; SSE2-NEXT: movdqa %xmm2, %xmm13 7245 ; SSE2-NEXT: pxor %xmm14, %xmm13 7246 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm13 7247 ; SSE2-NEXT: movdqa %xmm13, %xmm9 7248 ; SSE2-NEXT: pxor %xmm0, %xmm9 7249 ; SSE2-NEXT: movdqa %xmm5, %xmm11 7250 ; SSE2-NEXT: pxor %xmm14, %xmm11 7251 ; SSE2-NEXT: movdqa %xmm1, %xmm15 7252 ; SSE2-NEXT: pxor %xmm14, %xmm15 7253 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 7254 ; SSE2-NEXT: movdqa %xmm4, %xmm11 7255 ; SSE2-NEXT: pxor %xmm14, %xmm11 7256 ; SSE2-NEXT: pxor %xmm10, %xmm14 7257 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 7258 ; SSE2-NEXT: movdqa %xmm15, %xmm11 7259 ; SSE2-NEXT: pxor %xmm0, %xmm11 7260 ; SSE2-NEXT: pxor %xmm14, %xmm0 7261 ; SSE2-NEXT: pandn %xmm4, %xmm14 7262 ; SSE2-NEXT: pandn %xmm10, %xmm0 7263 ; SSE2-NEXT: por %xmm14, %xmm0 7264 ; SSE2-NEXT: pandn %xmm5, %xmm15 7265 ; SSE2-NEXT: pandn %xmm1, %xmm11 7266 ; SSE2-NEXT: por %xmm15, %xmm11 7267 ; SSE2-NEXT: pandn %xmm6, %xmm13 7268 ; SSE2-NEXT: pandn %xmm2, %xmm9 7269 ; SSE2-NEXT: por %xmm13, %xmm9 7270 ; SSE2-NEXT: pandn %xmm7, %xmm12 7271 ; SSE2-NEXT: pandn %xmm3, %xmm8 7272 ; SSE2-NEXT: por %xmm12, %xmm8 7273 ; SSE2-NEXT: movdqa %xmm11, %xmm1 7274 ; SSE2-NEXT: movdqa %xmm9, %xmm2 7275 ; SSE2-NEXT: movdqa %xmm8, %xmm3 7276 ; SSE2-NEXT: retq 7277 ; 7278 ; SSE4-LABEL: test150: 7279 ; SSE4: # BB#0: # %entry 7280 ; SSE4-NEXT: pmaxud %xmm4, %xmm0 7281 ; SSE4-NEXT: pmaxud %xmm5, %xmm1 7282 ; SSE4-NEXT: pmaxud %xmm6, %xmm2 7283 ; SSE4-NEXT: pmaxud %xmm7, %xmm3 7284 ; SSE4-NEXT: retq 7285 ; 7286 ; AVX1-LABEL: test150: 7287 ; AVX1: # BB#0: # %entry 7288 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7289 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7290 ; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 7291 ; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 7292 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7293 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7294 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7295 ; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 7296 ; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 7297 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7298 ; AVX1-NEXT: retq 7299 ; 7300 ; AVX2-LABEL: test150: 7301 ; AVX2: # BB#0: # %entry 7302 ; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 7303 ; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 7304 ; AVX2-NEXT: retq 7305 ; 7306 ; AVX512F-LABEL: test150: 7307 ; AVX512F: # BB#0: # %entry 7308 ; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 7309 ; AVX512F-NEXT: retq 7310 entry: 7311 %cmp = icmp ule <16 x i32> %a, %b 7312 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7313 ret <16 x i32> %sel 7314 } 7315 7316 define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) { 7317 ; SSE2-LABEL: test151: 7318 ; SSE2: # BB#0: # %entry 7319 ; SSE2-NEXT: movdqa %xmm0, %xmm11 7320 ; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648] 7321 ; SSE2-NEXT: movdqa %xmm7, %xmm9 7322 ; SSE2-NEXT: pxor %xmm0, %xmm9 7323 ; SSE2-NEXT: movdqa %xmm3, %xmm8 7324 ; SSE2-NEXT: pxor %xmm0, %xmm8 7325 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm8 7326 ; SSE2-NEXT: movdqa %xmm6, %xmm10 7327 ; SSE2-NEXT: pxor %xmm0, %xmm10 7328 ; SSE2-NEXT: movdqa %xmm2, %xmm9 7329 ; SSE2-NEXT: pxor %xmm0, %xmm9 7330 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm9 7331 ; SSE2-NEXT: movdqa %xmm5, %xmm12 7332 ; SSE2-NEXT: pxor %xmm0, %xmm12 7333 ; SSE2-NEXT: movdqa %xmm1, %xmm10 7334 ; SSE2-NEXT: pxor %xmm0, %xmm10 7335 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm10 7336 ; SSE2-NEXT: movdqa %xmm4, %xmm12 7337 ; SSE2-NEXT: pxor %xmm0, %xmm12 7338 ; SSE2-NEXT: pxor %xmm11, %xmm0 7339 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm0 7340 ; SSE2-NEXT: pand %xmm0, %xmm4 7341 ; SSE2-NEXT: pandn %xmm11, %xmm0 7342 ; SSE2-NEXT: por %xmm4, %xmm0 7343 ; SSE2-NEXT: pand %xmm10, %xmm5 7344 ; SSE2-NEXT: pandn %xmm1, %xmm10 7345 ; SSE2-NEXT: por %xmm5, %xmm10 7346 ; SSE2-NEXT: pand %xmm9, %xmm6 7347 ; SSE2-NEXT: pandn %xmm2, %xmm9 7348 ; SSE2-NEXT: por %xmm6, %xmm9 7349 ; SSE2-NEXT: pand %xmm8, %xmm7 7350 ; SSE2-NEXT: pandn %xmm3, %xmm8 7351 ; SSE2-NEXT: por %xmm7, %xmm8 7352 ; SSE2-NEXT: movdqa %xmm10, %xmm1 7353 ; SSE2-NEXT: movdqa %xmm9, %xmm2 7354 ; SSE2-NEXT: movdqa %xmm8, %xmm3 7355 ; SSE2-NEXT: retq 7356 ; 7357 ; SSE4-LABEL: test151: 7358 ; SSE4: # BB#0: # %entry 7359 ; SSE4-NEXT: pminud %xmm4, %xmm0 7360 ; SSE4-NEXT: pminud %xmm5, %xmm1 7361 ; SSE4-NEXT: pminud %xmm6, %xmm2 7362 ; SSE4-NEXT: pminud %xmm7, %xmm3 7363 ; SSE4-NEXT: retq 7364 ; 7365 ; AVX1-LABEL: test151: 7366 ; AVX1: # BB#0: # %entry 7367 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7368 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7369 ; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 7370 ; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 7371 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7372 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7373 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7374 ; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 7375 ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 7376 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7377 ; AVX1-NEXT: retq 7378 ; 7379 ; AVX2-LABEL: test151: 7380 ; AVX2: # BB#0: # %entry 7381 ; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 7382 ; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 7383 ; AVX2-NEXT: retq 7384 ; 7385 ; AVX512F-LABEL: test151: 7386 ; AVX512F: # BB#0: # %entry 7387 ; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0 7388 ; AVX512F-NEXT: retq 7389 entry: 7390 %cmp = icmp ugt <16 x i32> %a, %b 7391 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7392 ret <16 x i32> %sel 7393 } 7394 7395 define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) { 7396 ; SSE2-LABEL: test152: 7397 ; SSE2: # BB#0: # %entry 7398 ; SSE2-NEXT: movdqa %xmm0, %xmm10 7399 ; SSE2-NEXT: movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648] 7400 ; SSE2-NEXT: movdqa %xmm3, %xmm0 7401 ; SSE2-NEXT: pxor %xmm14, %xmm0 7402 ; SSE2-NEXT: movdqa %xmm7, %xmm12 7403 ; SSE2-NEXT: pxor %xmm14, %xmm12 7404 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm12 7405 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 7406 ; SSE2-NEXT: movdqa %xmm12, %xmm8 7407 ; SSE2-NEXT: pxor %xmm0, %xmm8 7408 ; SSE2-NEXT: movdqa %xmm2, %xmm9 7409 ; SSE2-NEXT: pxor %xmm14, %xmm9 7410 ; SSE2-NEXT: movdqa %xmm6, %xmm13 7411 ; SSE2-NEXT: pxor %xmm14, %xmm13 7412 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm13 7413 ; SSE2-NEXT: movdqa %xmm13, %xmm9 7414 ; SSE2-NEXT: pxor %xmm0, %xmm9 7415 ; SSE2-NEXT: movdqa %xmm1, %xmm11 7416 ; SSE2-NEXT: pxor %xmm14, %xmm11 7417 ; SSE2-NEXT: movdqa %xmm5, %xmm15 7418 ; SSE2-NEXT: pxor %xmm14, %xmm15 7419 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 7420 ; SSE2-NEXT: movdqa %xmm10, %xmm11 7421 ; SSE2-NEXT: pxor %xmm14, %xmm11 7422 ; SSE2-NEXT: pxor %xmm4, %xmm14 7423 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 7424 ; SSE2-NEXT: movdqa %xmm15, %xmm11 7425 ; SSE2-NEXT: pxor %xmm0, %xmm11 7426 ; SSE2-NEXT: pxor %xmm14, %xmm0 7427 ; SSE2-NEXT: pandn %xmm4, %xmm14 7428 ; SSE2-NEXT: pandn %xmm10, %xmm0 7429 ; SSE2-NEXT: por %xmm14, %xmm0 7430 ; SSE2-NEXT: pandn %xmm5, %xmm15 7431 ; SSE2-NEXT: pandn %xmm1, %xmm11 7432 ; SSE2-NEXT: por %xmm15, %xmm11 7433 ; SSE2-NEXT: pandn %xmm6, %xmm13 7434 ; SSE2-NEXT: pandn %xmm2, %xmm9 7435 ; SSE2-NEXT: por %xmm13, %xmm9 7436 ; SSE2-NEXT: pandn %xmm7, %xmm12 7437 ; SSE2-NEXT: pandn %xmm3, %xmm8 7438 ; SSE2-NEXT: por %xmm12, %xmm8 7439 ; SSE2-NEXT: movdqa %xmm11, %xmm1 7440 ; SSE2-NEXT: movdqa %xmm9, %xmm2 7441 ; SSE2-NEXT: movdqa %xmm8, %xmm3 7442 ; SSE2-NEXT: retq 7443 ; 7444 ; SSE4-LABEL: test152: 7445 ; SSE4: # BB#0: # %entry 7446 ; SSE4-NEXT: pminud %xmm4, %xmm0 7447 ; SSE4-NEXT: pminud %xmm5, %xmm1 7448 ; SSE4-NEXT: pminud %xmm6, %xmm2 7449 ; SSE4-NEXT: pminud %xmm7, %xmm3 7450 ; SSE4-NEXT: retq 7451 ; 7452 ; AVX1-LABEL: test152: 7453 ; AVX1: # BB#0: # %entry 7454 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7455 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7456 ; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 7457 ; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 7458 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7459 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7460 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7461 ; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 7462 ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 7463 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7464 ; AVX1-NEXT: retq 7465 ; 7466 ; AVX2-LABEL: test152: 7467 ; AVX2: # BB#0: # %entry 7468 ; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 7469 ; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 7470 ; AVX2-NEXT: retq 7471 ; 7472 ; AVX512F-LABEL: test152: 7473 ; AVX512F: # BB#0: # %entry 7474 ; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0 7475 ; AVX512F-NEXT: retq 7476 entry: 7477 %cmp = icmp uge <16 x i32> %a, %b 7478 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7479 ret <16 x i32> %sel 7480 } 7481 7482 ; ----------------------- 7483 7484 define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) { 7485 ; SSE2-LABEL: test153: 7486 ; SSE2: # BB#0: # %entry 7487 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,0,2147483648,0] 7488 ; SSE2-NEXT: movdqa %xmm3, %xmm8 7489 ; SSE2-NEXT: pxor %xmm11, %xmm8 7490 ; SSE2-NEXT: movdqa %xmm7, %xmm9 7491 ; SSE2-NEXT: pxor %xmm11, %xmm9 7492 ; SSE2-NEXT: movdqa %xmm9, %xmm10 7493 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm10 7494 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2] 7495 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm9 7496 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 7497 ; SSE2-NEXT: pand %xmm12, %xmm9 7498 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3] 7499 ; SSE2-NEXT: por %xmm9, %xmm8 7500 ; SSE2-NEXT: movdqa %xmm2, %xmm9 7501 ; SSE2-NEXT: pxor %xmm11, %xmm9 7502 ; SSE2-NEXT: movdqa %xmm6, %xmm10 7503 ; SSE2-NEXT: pxor %xmm11, %xmm10 7504 ; SSE2-NEXT: movdqa %xmm10, %xmm12 7505 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm12 7506 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 7507 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7508 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 7509 ; SSE2-NEXT: pand %xmm13, %xmm10 7510 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3] 7511 ; SSE2-NEXT: por %xmm10, %xmm9 7512 ; SSE2-NEXT: movdqa %xmm1, %xmm10 7513 ; SSE2-NEXT: pxor %xmm11, %xmm10 7514 ; SSE2-NEXT: movdqa %xmm5, %xmm12 7515 ; SSE2-NEXT: pxor %xmm11, %xmm12 7516 ; SSE2-NEXT: movdqa %xmm12, %xmm13 7517 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm13 7518 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 7519 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm12 7520 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3] 7521 ; SSE2-NEXT: pand %xmm14, %xmm12 7522 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3] 7523 ; SSE2-NEXT: por %xmm12, %xmm10 7524 ; SSE2-NEXT: movdqa %xmm0, %xmm12 7525 ; SSE2-NEXT: pxor %xmm11, %xmm12 7526 ; SSE2-NEXT: pxor %xmm4, %xmm11 7527 ; SSE2-NEXT: movdqa %xmm11, %xmm13 7528 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm13 7529 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 7530 ; SSE2-NEXT: pcmpeqd %xmm12, %xmm11 7531 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 7532 ; SSE2-NEXT: pand %xmm14, %xmm12 7533 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 7534 ; SSE2-NEXT: por %xmm12, %xmm11 7535 ; SSE2-NEXT: pand %xmm11, %xmm4 7536 ; SSE2-NEXT: pandn %xmm0, %xmm11 7537 ; SSE2-NEXT: por %xmm4, %xmm11 7538 ; SSE2-NEXT: pand %xmm10, %xmm5 7539 ; SSE2-NEXT: pandn %xmm1, %xmm10 7540 ; SSE2-NEXT: por %xmm5, %xmm10 7541 ; SSE2-NEXT: pand %xmm9, %xmm6 7542 ; SSE2-NEXT: pandn %xmm2, %xmm9 7543 ; SSE2-NEXT: por %xmm6, %xmm9 7544 ; SSE2-NEXT: pand %xmm8, %xmm7 7545 ; SSE2-NEXT: pandn %xmm3, %xmm8 7546 ; SSE2-NEXT: por %xmm7, %xmm8 7547 ; SSE2-NEXT: movdqa %xmm11, %xmm0 7548 ; SSE2-NEXT: movdqa %xmm10, %xmm1 7549 ; SSE2-NEXT: movdqa %xmm9, %xmm2 7550 ; SSE2-NEXT: movdqa %xmm8, %xmm3 7551 ; SSE2-NEXT: retq 7552 ; 7553 ; SSE4-LABEL: test153: 7554 ; SSE4: # BB#0: # %entry 7555 ; SSE4-NEXT: movdqa %xmm0, %xmm8 7556 ; SSE4-NEXT: movdqa %xmm7, %xmm9 7557 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm9 7558 ; SSE4-NEXT: movdqa %xmm6, %xmm10 7559 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm10 7560 ; SSE4-NEXT: movdqa %xmm5, %xmm11 7561 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm11 7562 ; SSE4-NEXT: movdqa %xmm4, %xmm0 7563 ; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 7564 ; SSE4-NEXT: blendvpd %xmm4, %xmm8 7565 ; SSE4-NEXT: movdqa %xmm11, %xmm0 7566 ; SSE4-NEXT: blendvpd %xmm5, %xmm1 7567 ; SSE4-NEXT: movdqa %xmm10, %xmm0 7568 ; SSE4-NEXT: blendvpd %xmm6, %xmm2 7569 ; SSE4-NEXT: movdqa %xmm9, %xmm0 7570 ; SSE4-NEXT: blendvpd %xmm7, %xmm3 7571 ; SSE4-NEXT: movapd %xmm8, %xmm0 7572 ; SSE4-NEXT: retq 7573 ; 7574 ; AVX1-LABEL: test153: 7575 ; AVX1: # BB#0: # %entry 7576 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7577 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5 7578 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7579 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm5 7580 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7581 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7582 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 7583 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 7584 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm6 7585 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5 7586 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 7587 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 7588 ; AVX1-NEXT: retq 7589 ; 7590 ; AVX2-LABEL: test153: 7591 ; AVX2: # BB#0: # %entry 7592 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm4 7593 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm5 7594 ; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 7595 ; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 7596 ; AVX2-NEXT: retq 7597 ; 7598 ; AVX512F-LABEL: test153: 7599 ; AVX512F: # BB#0: # %entry 7600 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 7601 ; AVX512F-NEXT: retq 7602 entry: 7603 %cmp = icmp slt <8 x i64> %a, %b 7604 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7605 ret <8 x i64> %sel 7606 } 7607 7608 define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) { 7609 ; SSE2-LABEL: test154: 7610 ; SSE2: # BB#0: # %entry 7611 ; SSE2-NEXT: movdqa %xmm7, %xmm8 7612 ; SSE2-NEXT: movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill 7613 ; SSE2-NEXT: movdqa %xmm3, %xmm7 7614 ; SSE2-NEXT: movdqa %xmm2, %xmm3 7615 ; SSE2-NEXT: movdqa %xmm1, %xmm2 7616 ; SSE2-NEXT: movdqa %xmm0, %xmm9 7617 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0] 7618 ; SSE2-NEXT: pxor %xmm10, %xmm8 7619 ; SSE2-NEXT: movdqa %xmm7, %xmm0 7620 ; SSE2-NEXT: pxor %xmm10, %xmm0 7621 ; SSE2-NEXT: movdqa %xmm0, %xmm11 7622 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 7623 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7624 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 7625 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 7626 ; SSE2-NEXT: pand %xmm12, %xmm0 7627 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 7628 ; SSE2-NEXT: por %xmm0, %xmm12 7629 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 7630 ; SSE2-NEXT: movdqa %xmm12, %xmm8 7631 ; SSE2-NEXT: pxor %xmm1, %xmm8 7632 ; SSE2-NEXT: movdqa %xmm6, %xmm11 7633 ; SSE2-NEXT: pxor %xmm10, %xmm11 7634 ; SSE2-NEXT: movdqa %xmm3, %xmm13 7635 ; SSE2-NEXT: pxor %xmm10, %xmm13 7636 ; SSE2-NEXT: movdqa %xmm13, %xmm14 7637 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 7638 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 7639 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 7640 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 7641 ; SSE2-NEXT: pand %xmm15, %xmm11 7642 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 7643 ; SSE2-NEXT: por %xmm11, %xmm13 7644 ; SSE2-NEXT: movdqa %xmm5, %xmm11 7645 ; SSE2-NEXT: pxor %xmm10, %xmm11 7646 ; SSE2-NEXT: movdqa %xmm2, %xmm14 7647 ; SSE2-NEXT: pxor %xmm10, %xmm14 7648 ; SSE2-NEXT: movdqa %xmm14, %xmm15 7649 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 7650 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 7651 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 7652 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 7653 ; SSE2-NEXT: pand %xmm11, %xmm14 7654 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 7655 ; SSE2-NEXT: por %xmm14, %xmm15 7656 ; SSE2-NEXT: movdqa %xmm4, %xmm11 7657 ; SSE2-NEXT: pxor %xmm10, %xmm11 7658 ; SSE2-NEXT: pxor %xmm9, %xmm10 7659 ; SSE2-NEXT: movdqa %xmm10, %xmm14 7660 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 7661 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 7662 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 7663 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 7664 ; SSE2-NEXT: pand %xmm11, %xmm0 7665 ; SSE2-NEXT: movdqa %xmm13, %xmm10 7666 ; SSE2-NEXT: pxor %xmm1, %xmm10 7667 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 7668 ; SSE2-NEXT: por %xmm0, %xmm14 7669 ; SSE2-NEXT: movdqa %xmm15, %xmm11 7670 ; SSE2-NEXT: pxor %xmm1, %xmm11 7671 ; SSE2-NEXT: pxor %xmm14, %xmm1 7672 ; SSE2-NEXT: pandn %xmm4, %xmm14 7673 ; SSE2-NEXT: pandn %xmm9, %xmm1 7674 ; SSE2-NEXT: por %xmm14, %xmm1 7675 ; SSE2-NEXT: pandn %xmm5, %xmm15 7676 ; SSE2-NEXT: pandn %xmm2, %xmm11 7677 ; SSE2-NEXT: por %xmm15, %xmm11 7678 ; SSE2-NEXT: pandn %xmm6, %xmm13 7679 ; SSE2-NEXT: pandn %xmm3, %xmm10 7680 ; SSE2-NEXT: por %xmm13, %xmm10 7681 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload 7682 ; SSE2-NEXT: pandn %xmm7, %xmm8 7683 ; SSE2-NEXT: por %xmm12, %xmm8 7684 ; SSE2-NEXT: movdqa %xmm1, %xmm0 7685 ; SSE2-NEXT: movdqa %xmm11, %xmm1 7686 ; SSE2-NEXT: movdqa %xmm10, %xmm2 7687 ; SSE2-NEXT: movdqa %xmm8, %xmm3 7688 ; SSE2-NEXT: retq 7689 ; 7690 ; SSE4-LABEL: test154: 7691 ; SSE4: # BB#0: # %entry 7692 ; SSE4-NEXT: movdqa %xmm0, %xmm8 7693 ; SSE4-NEXT: movdqa %xmm3, %xmm9 7694 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm9 7695 ; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 7696 ; SSE4-NEXT: pxor %xmm12, %xmm9 7697 ; SSE4-NEXT: movdqa %xmm2, %xmm10 7698 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm10 7699 ; SSE4-NEXT: pxor %xmm12, %xmm10 7700 ; SSE4-NEXT: movdqa %xmm1, %xmm11 7701 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm11 7702 ; SSE4-NEXT: pxor %xmm12, %xmm11 7703 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7704 ; SSE4-NEXT: pxor %xmm12, %xmm0 7705 ; SSE4-NEXT: blendvpd %xmm4, %xmm8 7706 ; SSE4-NEXT: movdqa %xmm11, %xmm0 7707 ; SSE4-NEXT: blendvpd %xmm5, %xmm1 7708 ; SSE4-NEXT: movdqa %xmm10, %xmm0 7709 ; SSE4-NEXT: blendvpd %xmm6, %xmm2 7710 ; SSE4-NEXT: movdqa %xmm9, %xmm0 7711 ; SSE4-NEXT: blendvpd %xmm7, %xmm3 7712 ; SSE4-NEXT: movapd %xmm8, %xmm0 7713 ; SSE4-NEXT: retq 7714 ; 7715 ; AVX1-LABEL: test154: 7716 ; AVX1: # BB#0: # %entry 7717 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7718 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 7719 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7720 ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5 7721 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7722 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm6 7723 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7724 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 7725 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 7726 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7 7727 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 7728 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7729 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm7 7730 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm5 7731 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 7732 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 7733 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 7734 ; AVX1-NEXT: retq 7735 ; 7736 ; AVX2-LABEL: test154: 7737 ; AVX2: # BB#0: # %entry 7738 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm4 7739 ; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5 7740 ; AVX2-NEXT: vpxor %ymm5, %ymm4, %ymm4 7741 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm6 7742 ; AVX2-NEXT: vpxor %ymm5, %ymm6, %ymm5 7743 ; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 7744 ; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 7745 ; AVX2-NEXT: retq 7746 ; 7747 ; AVX512F-LABEL: test154: 7748 ; AVX512F: # BB#0: # %entry 7749 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 7750 ; AVX512F-NEXT: retq 7751 entry: 7752 %cmp = icmp sle <8 x i64> %a, %b 7753 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7754 ret <8 x i64> %sel 7755 } 7756 7757 define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) { 7758 ; SSE2-LABEL: test155: 7759 ; SSE2: # BB#0: # %entry 7760 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,0,2147483648,0] 7761 ; SSE2-NEXT: movdqa %xmm7, %xmm8 7762 ; SSE2-NEXT: pxor %xmm11, %xmm8 7763 ; SSE2-NEXT: movdqa %xmm3, %xmm9 7764 ; SSE2-NEXT: pxor %xmm11, %xmm9 7765 ; SSE2-NEXT: movdqa %xmm9, %xmm10 7766 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm10 7767 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2] 7768 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm9 7769 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 7770 ; SSE2-NEXT: pand %xmm12, %xmm9 7771 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3] 7772 ; SSE2-NEXT: por %xmm9, %xmm8 7773 ; SSE2-NEXT: movdqa %xmm6, %xmm9 7774 ; SSE2-NEXT: pxor %xmm11, %xmm9 7775 ; SSE2-NEXT: movdqa %xmm2, %xmm10 7776 ; SSE2-NEXT: pxor %xmm11, %xmm10 7777 ; SSE2-NEXT: movdqa %xmm10, %xmm12 7778 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm12 7779 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 7780 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7781 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 7782 ; SSE2-NEXT: pand %xmm13, %xmm10 7783 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3] 7784 ; SSE2-NEXT: por %xmm10, %xmm9 7785 ; SSE2-NEXT: movdqa %xmm5, %xmm10 7786 ; SSE2-NEXT: pxor %xmm11, %xmm10 7787 ; SSE2-NEXT: movdqa %xmm1, %xmm12 7788 ; SSE2-NEXT: pxor %xmm11, %xmm12 7789 ; SSE2-NEXT: movdqa %xmm12, %xmm13 7790 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm13 7791 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 7792 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm12 7793 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3] 7794 ; SSE2-NEXT: pand %xmm14, %xmm12 7795 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3] 7796 ; SSE2-NEXT: por %xmm12, %xmm10 7797 ; SSE2-NEXT: movdqa %xmm4, %xmm12 7798 ; SSE2-NEXT: pxor %xmm11, %xmm12 7799 ; SSE2-NEXT: pxor %xmm0, %xmm11 7800 ; SSE2-NEXT: movdqa %xmm11, %xmm13 7801 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm13 7802 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 7803 ; SSE2-NEXT: pcmpeqd %xmm12, %xmm11 7804 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 7805 ; SSE2-NEXT: pand %xmm14, %xmm12 7806 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 7807 ; SSE2-NEXT: por %xmm12, %xmm11 7808 ; SSE2-NEXT: pand %xmm11, %xmm4 7809 ; SSE2-NEXT: pandn %xmm0, %xmm11 7810 ; SSE2-NEXT: por %xmm4, %xmm11 7811 ; SSE2-NEXT: pand %xmm10, %xmm5 7812 ; SSE2-NEXT: pandn %xmm1, %xmm10 7813 ; SSE2-NEXT: por %xmm5, %xmm10 7814 ; SSE2-NEXT: pand %xmm9, %xmm6 7815 ; SSE2-NEXT: pandn %xmm2, %xmm9 7816 ; SSE2-NEXT: por %xmm6, %xmm9 7817 ; SSE2-NEXT: pand %xmm8, %xmm7 7818 ; SSE2-NEXT: pandn %xmm3, %xmm8 7819 ; SSE2-NEXT: por %xmm7, %xmm8 7820 ; SSE2-NEXT: movdqa %xmm11, %xmm0 7821 ; SSE2-NEXT: movdqa %xmm10, %xmm1 7822 ; SSE2-NEXT: movdqa %xmm9, %xmm2 7823 ; SSE2-NEXT: movdqa %xmm8, %xmm3 7824 ; SSE2-NEXT: retq 7825 ; 7826 ; SSE4-LABEL: test155: 7827 ; SSE4: # BB#0: # %entry 7828 ; SSE4-NEXT: movdqa %xmm0, %xmm8 7829 ; SSE4-NEXT: movdqa %xmm3, %xmm9 7830 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm9 7831 ; SSE4-NEXT: movdqa %xmm2, %xmm10 7832 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm10 7833 ; SSE4-NEXT: movdqa %xmm1, %xmm11 7834 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm11 7835 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7836 ; SSE4-NEXT: blendvpd %xmm4, %xmm8 7837 ; SSE4-NEXT: movdqa %xmm11, %xmm0 7838 ; SSE4-NEXT: blendvpd %xmm5, %xmm1 7839 ; SSE4-NEXT: movdqa %xmm10, %xmm0 7840 ; SSE4-NEXT: blendvpd %xmm6, %xmm2 7841 ; SSE4-NEXT: movdqa %xmm9, %xmm0 7842 ; SSE4-NEXT: blendvpd %xmm7, %xmm3 7843 ; SSE4-NEXT: movapd %xmm8, %xmm0 7844 ; SSE4-NEXT: retq 7845 ; 7846 ; AVX1-LABEL: test155: 7847 ; AVX1: # BB#0: # %entry 7848 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7849 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 7850 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7851 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm5 7852 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7853 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 7854 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 7855 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 7856 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm6 7857 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5 7858 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 7859 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 7860 ; AVX1-NEXT: retq 7861 ; 7862 ; AVX2-LABEL: test155: 7863 ; AVX2: # BB#0: # %entry 7864 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm4 7865 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm5 7866 ; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 7867 ; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 7868 ; AVX2-NEXT: retq 7869 ; 7870 ; AVX512F-LABEL: test155: 7871 ; AVX512F: # BB#0: # %entry 7872 ; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 7873 ; AVX512F-NEXT: retq 7874 entry: 7875 %cmp = icmp sgt <8 x i64> %a, %b 7876 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7877 ret <8 x i64> %sel 7878 } 7879 7880 define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) { 7881 ; SSE2-LABEL: test156: 7882 ; SSE2: # BB#0: # %entry 7883 ; SSE2-NEXT: movdqa %xmm7, %xmm11 7884 ; SSE2-NEXT: movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill 7885 ; SSE2-NEXT: movdqa %xmm3, %xmm7 7886 ; SSE2-NEXT: movdqa %xmm2, %xmm3 7887 ; SSE2-NEXT: movdqa %xmm1, %xmm2 7888 ; SSE2-NEXT: movdqa %xmm0, %xmm9 7889 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0] 7890 ; SSE2-NEXT: movdqa %xmm7, %xmm8 7891 ; SSE2-NEXT: pxor %xmm10, %xmm8 7892 ; SSE2-NEXT: movdqa %xmm11, %xmm0 7893 ; SSE2-NEXT: pxor %xmm10, %xmm0 7894 ; SSE2-NEXT: movdqa %xmm0, %xmm11 7895 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 7896 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7897 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 7898 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 7899 ; SSE2-NEXT: pand %xmm12, %xmm0 7900 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 7901 ; SSE2-NEXT: por %xmm0, %xmm12 7902 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 7903 ; SSE2-NEXT: movdqa %xmm12, %xmm8 7904 ; SSE2-NEXT: pxor %xmm1, %xmm8 7905 ; SSE2-NEXT: movdqa %xmm3, %xmm11 7906 ; SSE2-NEXT: pxor %xmm10, %xmm11 7907 ; SSE2-NEXT: movdqa %xmm6, %xmm13 7908 ; SSE2-NEXT: pxor %xmm10, %xmm13 7909 ; SSE2-NEXT: movdqa %xmm13, %xmm14 7910 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 7911 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 7912 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 7913 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 7914 ; SSE2-NEXT: pand %xmm15, %xmm11 7915 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 7916 ; SSE2-NEXT: por %xmm11, %xmm13 7917 ; SSE2-NEXT: movdqa %xmm2, %xmm11 7918 ; SSE2-NEXT: pxor %xmm10, %xmm11 7919 ; SSE2-NEXT: movdqa %xmm5, %xmm14 7920 ; SSE2-NEXT: pxor %xmm10, %xmm14 7921 ; SSE2-NEXT: movdqa %xmm14, %xmm15 7922 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 7923 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 7924 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 7925 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 7926 ; SSE2-NEXT: pand %xmm11, %xmm14 7927 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 7928 ; SSE2-NEXT: por %xmm14, %xmm15 7929 ; SSE2-NEXT: movdqa %xmm9, %xmm11 7930 ; SSE2-NEXT: pxor %xmm10, %xmm11 7931 ; SSE2-NEXT: pxor %xmm4, %xmm10 7932 ; SSE2-NEXT: movdqa %xmm10, %xmm14 7933 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 7934 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 7935 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 7936 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 7937 ; SSE2-NEXT: pand %xmm11, %xmm0 7938 ; SSE2-NEXT: movdqa %xmm13, %xmm10 7939 ; SSE2-NEXT: pxor %xmm1, %xmm10 7940 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 7941 ; SSE2-NEXT: por %xmm0, %xmm14 7942 ; SSE2-NEXT: movdqa %xmm15, %xmm11 7943 ; SSE2-NEXT: pxor %xmm1, %xmm11 7944 ; SSE2-NEXT: pxor %xmm14, %xmm1 7945 ; SSE2-NEXT: pandn %xmm4, %xmm14 7946 ; SSE2-NEXT: pandn %xmm9, %xmm1 7947 ; SSE2-NEXT: por %xmm14, %xmm1 7948 ; SSE2-NEXT: pandn %xmm5, %xmm15 7949 ; SSE2-NEXT: pandn %xmm2, %xmm11 7950 ; SSE2-NEXT: por %xmm15, %xmm11 7951 ; SSE2-NEXT: pandn %xmm6, %xmm13 7952 ; SSE2-NEXT: pandn %xmm3, %xmm10 7953 ; SSE2-NEXT: por %xmm13, %xmm10 7954 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload 7955 ; SSE2-NEXT: pandn %xmm7, %xmm8 7956 ; SSE2-NEXT: por %xmm12, %xmm8 7957 ; SSE2-NEXT: movdqa %xmm1, %xmm0 7958 ; SSE2-NEXT: movdqa %xmm11, %xmm1 7959 ; SSE2-NEXT: movdqa %xmm10, %xmm2 7960 ; SSE2-NEXT: movdqa %xmm8, %xmm3 7961 ; SSE2-NEXT: retq 7962 ; 7963 ; SSE4-LABEL: test156: 7964 ; SSE4: # BB#0: # %entry 7965 ; SSE4-NEXT: movdqa %xmm0, %xmm8 7966 ; SSE4-NEXT: movdqa %xmm7, %xmm9 7967 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm9 7968 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 7969 ; SSE4-NEXT: pxor %xmm0, %xmm9 7970 ; SSE4-NEXT: movdqa %xmm6, %xmm10 7971 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm10 7972 ; SSE4-NEXT: pxor %xmm0, %xmm10 7973 ; SSE4-NEXT: movdqa %xmm5, %xmm11 7974 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm11 7975 ; SSE4-NEXT: pxor %xmm0, %xmm11 7976 ; SSE4-NEXT: movdqa %xmm4, %xmm12 7977 ; SSE4-NEXT: pcmpgtq %xmm8, %xmm12 7978 ; SSE4-NEXT: pxor %xmm12, %xmm0 7979 ; SSE4-NEXT: blendvpd %xmm4, %xmm8 7980 ; SSE4-NEXT: movdqa %xmm11, %xmm0 7981 ; SSE4-NEXT: blendvpd %xmm5, %xmm1 7982 ; SSE4-NEXT: movdqa %xmm10, %xmm0 7983 ; SSE4-NEXT: blendvpd %xmm6, %xmm2 7984 ; SSE4-NEXT: movdqa %xmm9, %xmm0 7985 ; SSE4-NEXT: blendvpd %xmm7, %xmm3 7986 ; SSE4-NEXT: movapd %xmm8, %xmm0 7987 ; SSE4-NEXT: retq 7988 ; 7989 ; AVX1-LABEL: test156: 7990 ; AVX1: # BB#0: # %entry 7991 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7992 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5 7993 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7994 ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5 7995 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7996 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm6 7997 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7998 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 7999 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 8000 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 8001 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8002 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 8003 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm7 8004 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm5 8005 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 8006 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 8007 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 8008 ; AVX1-NEXT: retq 8009 ; 8010 ; AVX2-LABEL: test156: 8011 ; AVX2: # BB#0: # %entry 8012 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm4 8013 ; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5 8014 ; AVX2-NEXT: vpxor %ymm5, %ymm4, %ymm4 8015 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm6 8016 ; AVX2-NEXT: vpxor %ymm5, %ymm6, %ymm5 8017 ; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 8018 ; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 8019 ; AVX2-NEXT: retq 8020 ; 8021 ; AVX512F-LABEL: test156: 8022 ; AVX512F: # BB#0: # %entry 8023 ; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 8024 ; AVX512F-NEXT: retq 8025 entry: 8026 %cmp = icmp sge <8 x i64> %a, %b 8027 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 8028 ret <8 x i64> %sel 8029 } 8030 8031 define <8 x i64> @test157(<8 x i64> %a, <8 x i64> %b) { 8032 ; SSE2-LABEL: test157: 8033 ; SSE2: # BB#0: # %entry 8034 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648] 8035 ; SSE2-NEXT: movdqa %xmm3, %xmm8 8036 ; SSE2-NEXT: pxor %xmm11, %xmm8 8037 ; SSE2-NEXT: movdqa %xmm7, %xmm9 8038 ; SSE2-NEXT: pxor %xmm11, %xmm9 8039 ; SSE2-NEXT: movdqa %xmm9, %xmm10 8040 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm10 8041 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2] 8042 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm9 8043 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 8044 ; SSE2-NEXT: pand %xmm12, %xmm9 8045 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3] 8046 ; SSE2-NEXT: por %xmm9, %xmm8 8047 ; SSE2-NEXT: movdqa %xmm2, %xmm9 8048 ; SSE2-NEXT: pxor %xmm11, %xmm9 8049 ; SSE2-NEXT: movdqa %xmm6, %xmm10 8050 ; SSE2-NEXT: pxor %xmm11, %xmm10 8051 ; SSE2-NEXT: movdqa %xmm10, %xmm12 8052 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm12 8053 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 8054 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 8055 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 8056 ; SSE2-NEXT: pand %xmm13, %xmm10 8057 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3] 8058 ; SSE2-NEXT: por %xmm10, %xmm9 8059 ; SSE2-NEXT: movdqa %xmm1, %xmm10 8060 ; SSE2-NEXT: pxor %xmm11, %xmm10 8061 ; SSE2-NEXT: movdqa %xmm5, %xmm12 8062 ; SSE2-NEXT: pxor %xmm11, %xmm12 8063 ; SSE2-NEXT: movdqa %xmm12, %xmm13 8064 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm13 8065 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 8066 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm12 8067 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3] 8068 ; SSE2-NEXT: pand %xmm14, %xmm12 8069 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3] 8070 ; SSE2-NEXT: por %xmm12, %xmm10 8071 ; SSE2-NEXT: movdqa %xmm0, %xmm12 8072 ; SSE2-NEXT: pxor %xmm11, %xmm12 8073 ; SSE2-NEXT: pxor %xmm4, %xmm11 8074 ; SSE2-NEXT: movdqa %xmm11, %xmm13 8075 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm13 8076 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 8077 ; SSE2-NEXT: pcmpeqd %xmm12, %xmm11 8078 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 8079 ; SSE2-NEXT: pand %xmm14, %xmm12 8080 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 8081 ; SSE2-NEXT: por %xmm12, %xmm11 8082 ; SSE2-NEXT: pand %xmm11, %xmm4 8083 ; SSE2-NEXT: pandn %xmm0, %xmm11 8084 ; SSE2-NEXT: por %xmm4, %xmm11 8085 ; SSE2-NEXT: pand %xmm10, %xmm5 8086 ; SSE2-NEXT: pandn %xmm1, %xmm10 8087 ; SSE2-NEXT: por %xmm5, %xmm10 8088 ; SSE2-NEXT: pand %xmm9, %xmm6 8089 ; SSE2-NEXT: pandn %xmm2, %xmm9 8090 ; SSE2-NEXT: por %xmm6, %xmm9 8091 ; SSE2-NEXT: pand %xmm8, %xmm7 8092 ; SSE2-NEXT: pandn %xmm3, %xmm8 8093 ; SSE2-NEXT: por %xmm7, %xmm8 8094 ; SSE2-NEXT: movdqa %xmm11, %xmm0 8095 ; SSE2-NEXT: movdqa %xmm10, %xmm1 8096 ; SSE2-NEXT: movdqa %xmm9, %xmm2 8097 ; SSE2-NEXT: movdqa %xmm8, %xmm3 8098 ; SSE2-NEXT: retq 8099 ; 8100 ; SSE4-LABEL: test157: 8101 ; SSE4: # BB#0: # %entry 8102 ; SSE4-NEXT: movdqa %xmm0, %xmm8 8103 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 8104 ; SSE4-NEXT: movdqa %xmm3, %xmm10 8105 ; SSE4-NEXT: pxor %xmm0, %xmm10 8106 ; SSE4-NEXT: movdqa %xmm7, %xmm9 8107 ; SSE4-NEXT: pxor %xmm0, %xmm9 8108 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 8109 ; SSE4-NEXT: movdqa %xmm2, %xmm11 8110 ; SSE4-NEXT: pxor %xmm0, %xmm11 8111 ; SSE4-NEXT: movdqa %xmm6, %xmm10 8112 ; SSE4-NEXT: pxor %xmm0, %xmm10 8113 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 8114 ; SSE4-NEXT: movdqa %xmm1, %xmm12 8115 ; SSE4-NEXT: pxor %xmm0, %xmm12 8116 ; SSE4-NEXT: movdqa %xmm5, %xmm11 8117 ; SSE4-NEXT: pxor %xmm0, %xmm11 8118 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm11 8119 ; SSE4-NEXT: movdqa %xmm8, %xmm12 8120 ; SSE4-NEXT: pxor %xmm0, %xmm12 8121 ; SSE4-NEXT: pxor %xmm4, %xmm0 8122 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm0 8123 ; SSE4-NEXT: blendvpd %xmm4, %xmm8 8124 ; SSE4-NEXT: movdqa %xmm11, %xmm0 8125 ; SSE4-NEXT: blendvpd %xmm5, %xmm1 8126 ; SSE4-NEXT: movdqa %xmm10, %xmm0 8127 ; SSE4-NEXT: blendvpd %xmm6, %xmm2 8128 ; SSE4-NEXT: movdqa %xmm9, %xmm0 8129 ; SSE4-NEXT: blendvpd %xmm7, %xmm3 8130 ; SSE4-NEXT: movapd %xmm8, %xmm0 8131 ; SSE4-NEXT: retq 8132 ; 8133 ; AVX1-LABEL: test157: 8134 ; AVX1: # BB#0: # %entry 8135 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 8136 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8137 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 8138 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6 8139 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8140 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 8141 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm6 8142 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm7 8143 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8144 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 8145 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 8146 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8147 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 8148 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 8149 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8150 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm7 8151 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm5 8152 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 8153 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 8154 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 8155 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 8156 ; AVX1-NEXT: retq 8157 ; 8158 ; AVX2-LABEL: test157: 8159 ; AVX2: # BB#0: # %entry 8160 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 8161 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm5 8162 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm6 8163 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 8164 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 8165 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm4 8166 ; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm4 8167 ; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0 8168 ; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm1, %ymm1 8169 ; AVX2-NEXT: retq 8170 ; 8171 ; AVX512F-LABEL: test157: 8172 ; AVX512F: # BB#0: # %entry 8173 ; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 8174 ; AVX512F-NEXT: retq 8175 entry: 8176 %cmp = icmp ult <8 x i64> %a, %b 8177 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 8178 ret <8 x i64> %sel 8179 } 8180 8181 define <8 x i64> @test158(<8 x i64> %a, <8 x i64> %b) { 8182 ; SSE2-LABEL: test158: 8183 ; SSE2: # BB#0: # %entry 8184 ; SSE2-NEXT: movdqa %xmm7, %xmm8 8185 ; SSE2-NEXT: movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill 8186 ; SSE2-NEXT: movdqa %xmm3, %xmm7 8187 ; SSE2-NEXT: movdqa %xmm2, %xmm3 8188 ; SSE2-NEXT: movdqa %xmm1, %xmm2 8189 ; SSE2-NEXT: movdqa %xmm0, %xmm9 8190 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648] 8191 ; SSE2-NEXT: pxor %xmm10, %xmm8 8192 ; SSE2-NEXT: movdqa %xmm7, %xmm0 8193 ; SSE2-NEXT: pxor %xmm10, %xmm0 8194 ; SSE2-NEXT: movdqa %xmm0, %xmm11 8195 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 8196 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 8197 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 8198 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 8199 ; SSE2-NEXT: pand %xmm12, %xmm0 8200 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 8201 ; SSE2-NEXT: por %xmm0, %xmm12 8202 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 8203 ; SSE2-NEXT: movdqa %xmm12, %xmm8 8204 ; SSE2-NEXT: pxor %xmm1, %xmm8 8205 ; SSE2-NEXT: movdqa %xmm6, %xmm11 8206 ; SSE2-NEXT: pxor %xmm10, %xmm11 8207 ; SSE2-NEXT: movdqa %xmm3, %xmm13 8208 ; SSE2-NEXT: pxor %xmm10, %xmm13 8209 ; SSE2-NEXT: movdqa %xmm13, %xmm14 8210 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 8211 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 8212 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 8213 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 8214 ; SSE2-NEXT: pand %xmm15, %xmm11 8215 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 8216 ; SSE2-NEXT: por %xmm11, %xmm13 8217 ; SSE2-NEXT: movdqa %xmm5, %xmm11 8218 ; SSE2-NEXT: pxor %xmm10, %xmm11 8219 ; SSE2-NEXT: movdqa %xmm2, %xmm14 8220 ; SSE2-NEXT: pxor %xmm10, %xmm14 8221 ; SSE2-NEXT: movdqa %xmm14, %xmm15 8222 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 8223 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 8224 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 8225 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 8226 ; SSE2-NEXT: pand %xmm11, %xmm14 8227 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 8228 ; SSE2-NEXT: por %xmm14, %xmm15 8229 ; SSE2-NEXT: movdqa %xmm4, %xmm11 8230 ; SSE2-NEXT: pxor %xmm10, %xmm11 8231 ; SSE2-NEXT: pxor %xmm9, %xmm10 8232 ; SSE2-NEXT: movdqa %xmm10, %xmm14 8233 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 8234 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 8235 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 8236 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 8237 ; SSE2-NEXT: pand %xmm11, %xmm0 8238 ; SSE2-NEXT: movdqa %xmm13, %xmm10 8239 ; SSE2-NEXT: pxor %xmm1, %xmm10 8240 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 8241 ; SSE2-NEXT: por %xmm0, %xmm14 8242 ; SSE2-NEXT: movdqa %xmm15, %xmm11 8243 ; SSE2-NEXT: pxor %xmm1, %xmm11 8244 ; SSE2-NEXT: pxor %xmm14, %xmm1 8245 ; SSE2-NEXT: pandn %xmm4, %xmm14 8246 ; SSE2-NEXT: pandn %xmm9, %xmm1 8247 ; SSE2-NEXT: por %xmm14, %xmm1 8248 ; SSE2-NEXT: pandn %xmm5, %xmm15 8249 ; SSE2-NEXT: pandn %xmm2, %xmm11 8250 ; SSE2-NEXT: por %xmm15, %xmm11 8251 ; SSE2-NEXT: pandn %xmm6, %xmm13 8252 ; SSE2-NEXT: pandn %xmm3, %xmm10 8253 ; SSE2-NEXT: por %xmm13, %xmm10 8254 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload 8255 ; SSE2-NEXT: pandn %xmm7, %xmm8 8256 ; SSE2-NEXT: por %xmm12, %xmm8 8257 ; SSE2-NEXT: movdqa %xmm1, %xmm0 8258 ; SSE2-NEXT: movdqa %xmm11, %xmm1 8259 ; SSE2-NEXT: movdqa %xmm10, %xmm2 8260 ; SSE2-NEXT: movdqa %xmm8, %xmm3 8261 ; SSE2-NEXT: retq 8262 ; 8263 ; SSE4-LABEL: test158: 8264 ; SSE4: # BB#0: # %entry 8265 ; SSE4-NEXT: movdqa %xmm0, %xmm8 8266 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 8267 ; SSE4-NEXT: movdqa %xmm7, %xmm10 8268 ; SSE4-NEXT: pxor %xmm0, %xmm10 8269 ; SSE4-NEXT: movdqa %xmm3, %xmm9 8270 ; SSE4-NEXT: pxor %xmm0, %xmm9 8271 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 8272 ; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 8273 ; SSE4-NEXT: pxor %xmm12, %xmm9 8274 ; SSE4-NEXT: movdqa %xmm6, %xmm11 8275 ; SSE4-NEXT: pxor %xmm0, %xmm11 8276 ; SSE4-NEXT: movdqa %xmm2, %xmm10 8277 ; SSE4-NEXT: pxor %xmm0, %xmm10 8278 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 8279 ; SSE4-NEXT: pxor %xmm12, %xmm10 8280 ; SSE4-NEXT: movdqa %xmm5, %xmm13 8281 ; SSE4-NEXT: pxor %xmm0, %xmm13 8282 ; SSE4-NEXT: movdqa %xmm1, %xmm11 8283 ; SSE4-NEXT: pxor %xmm0, %xmm11 8284 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm11 8285 ; SSE4-NEXT: pxor %xmm12, %xmm11 8286 ; SSE4-NEXT: movdqa %xmm4, %xmm13 8287 ; SSE4-NEXT: pxor %xmm0, %xmm13 8288 ; SSE4-NEXT: pxor %xmm8, %xmm0 8289 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm0 8290 ; SSE4-NEXT: pxor %xmm12, %xmm0 8291 ; SSE4-NEXT: blendvpd %xmm4, %xmm8 8292 ; SSE4-NEXT: movdqa %xmm11, %xmm0 8293 ; SSE4-NEXT: blendvpd %xmm5, %xmm1 8294 ; SSE4-NEXT: movdqa %xmm10, %xmm0 8295 ; SSE4-NEXT: blendvpd %xmm6, %xmm2 8296 ; SSE4-NEXT: movdqa %xmm9, %xmm0 8297 ; SSE4-NEXT: blendvpd %xmm7, %xmm3 8298 ; SSE4-NEXT: movapd %xmm8, %xmm0 8299 ; SSE4-NEXT: retq 8300 ; 8301 ; AVX1-LABEL: test158: 8302 ; AVX1: # BB#0: # %entry 8303 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 8304 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8305 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 8306 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6 8307 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8308 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 8309 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm8, %xmm8 8310 ; AVX1-NEXT: vpxor %xmm8, %xmm4, %xmm4 8311 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm7 8312 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm6 8313 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6 8314 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 8315 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 8316 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 8317 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8318 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7 8319 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 8320 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8321 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 8322 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm7 8323 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm5 8324 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 8325 ; AVX1-NEXT: vpxor %xmm8, %xmm5, %xmm5 8326 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 8327 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 8328 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 8329 ; AVX1-NEXT: retq 8330 ; 8331 ; AVX2-LABEL: test158: 8332 ; AVX2: # BB#0: # %entry 8333 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 8334 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm5 8335 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm6 8336 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 8337 ; AVX2-NEXT: vpcmpeqd %ymm6, %ymm6, %ymm6 8338 ; AVX2-NEXT: vpxor %ymm6, %ymm5, %ymm5 8339 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm7 8340 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm4 8341 ; AVX2-NEXT: vpcmpgtq %ymm7, %ymm4, %ymm4 8342 ; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm4 8343 ; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0 8344 ; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm1, %ymm1 8345 ; AVX2-NEXT: retq 8346 ; 8347 ; AVX512F-LABEL: test158: 8348 ; AVX512F: # BB#0: # %entry 8349 ; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 8350 ; AVX512F-NEXT: retq 8351 entry: 8352 %cmp = icmp ule <8 x i64> %a, %b 8353 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 8354 ret <8 x i64> %sel 8355 } 8356 8357 define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) { 8358 ; SSE2-LABEL: test159: 8359 ; SSE2: # BB#0: # %entry 8360 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648] 8361 ; SSE2-NEXT: movdqa %xmm7, %xmm8 8362 ; SSE2-NEXT: pxor %xmm11, %xmm8 8363 ; SSE2-NEXT: movdqa %xmm3, %xmm9 8364 ; SSE2-NEXT: pxor %xmm11, %xmm9 8365 ; SSE2-NEXT: movdqa %xmm9, %xmm10 8366 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm10 8367 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2] 8368 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm9 8369 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 8370 ; SSE2-NEXT: pand %xmm12, %xmm9 8371 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3] 8372 ; SSE2-NEXT: por %xmm9, %xmm8 8373 ; SSE2-NEXT: movdqa %xmm6, %xmm9 8374 ; SSE2-NEXT: pxor %xmm11, %xmm9 8375 ; SSE2-NEXT: movdqa %xmm2, %xmm10 8376 ; SSE2-NEXT: pxor %xmm11, %xmm10 8377 ; SSE2-NEXT: movdqa %xmm10, %xmm12 8378 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm12 8379 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 8380 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 8381 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 8382 ; SSE2-NEXT: pand %xmm13, %xmm10 8383 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3] 8384 ; SSE2-NEXT: por %xmm10, %xmm9 8385 ; SSE2-NEXT: movdqa %xmm5, %xmm10 8386 ; SSE2-NEXT: pxor %xmm11, %xmm10 8387 ; SSE2-NEXT: movdqa %xmm1, %xmm12 8388 ; SSE2-NEXT: pxor %xmm11, %xmm12 8389 ; SSE2-NEXT: movdqa %xmm12, %xmm13 8390 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm13 8391 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 8392 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm12 8393 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3] 8394 ; SSE2-NEXT: pand %xmm14, %xmm12 8395 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3] 8396 ; SSE2-NEXT: por %xmm12, %xmm10 8397 ; SSE2-NEXT: movdqa %xmm4, %xmm12 8398 ; SSE2-NEXT: pxor %xmm11, %xmm12 8399 ; SSE2-NEXT: pxor %xmm0, %xmm11 8400 ; SSE2-NEXT: movdqa %xmm11, %xmm13 8401 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm13 8402 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 8403 ; SSE2-NEXT: pcmpeqd %xmm12, %xmm11 8404 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 8405 ; SSE2-NEXT: pand %xmm14, %xmm12 8406 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 8407 ; SSE2-NEXT: por %xmm12, %xmm11 8408 ; SSE2-NEXT: pand %xmm11, %xmm4 8409 ; SSE2-NEXT: pandn %xmm0, %xmm11 8410 ; SSE2-NEXT: por %xmm4, %xmm11 8411 ; SSE2-NEXT: pand %xmm10, %xmm5 8412 ; SSE2-NEXT: pandn %xmm1, %xmm10 8413 ; SSE2-NEXT: por %xmm5, %xmm10 8414 ; SSE2-NEXT: pand %xmm9, %xmm6 8415 ; SSE2-NEXT: pandn %xmm2, %xmm9 8416 ; SSE2-NEXT: por %xmm6, %xmm9 8417 ; SSE2-NEXT: pand %xmm8, %xmm7 8418 ; SSE2-NEXT: pandn %xmm3, %xmm8 8419 ; SSE2-NEXT: por %xmm7, %xmm8 8420 ; SSE2-NEXT: movdqa %xmm11, %xmm0 8421 ; SSE2-NEXT: movdqa %xmm10, %xmm1 8422 ; SSE2-NEXT: movdqa %xmm9, %xmm2 8423 ; SSE2-NEXT: movdqa %xmm8, %xmm3 8424 ; SSE2-NEXT: retq 8425 ; 8426 ; SSE4-LABEL: test159: 8427 ; SSE4: # BB#0: # %entry 8428 ; SSE4-NEXT: movdqa %xmm0, %xmm8 8429 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 8430 ; SSE4-NEXT: movdqa %xmm7, %xmm10 8431 ; SSE4-NEXT: pxor %xmm0, %xmm10 8432 ; SSE4-NEXT: movdqa %xmm3, %xmm9 8433 ; SSE4-NEXT: pxor %xmm0, %xmm9 8434 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 8435 ; SSE4-NEXT: movdqa %xmm6, %xmm11 8436 ; SSE4-NEXT: pxor %xmm0, %xmm11 8437 ; SSE4-NEXT: movdqa %xmm2, %xmm10 8438 ; SSE4-NEXT: pxor %xmm0, %xmm10 8439 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 8440 ; SSE4-NEXT: movdqa %xmm5, %xmm12 8441 ; SSE4-NEXT: pxor %xmm0, %xmm12 8442 ; SSE4-NEXT: movdqa %xmm1, %xmm11 8443 ; SSE4-NEXT: pxor %xmm0, %xmm11 8444 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm11 8445 ; SSE4-NEXT: movdqa %xmm4, %xmm12 8446 ; SSE4-NEXT: pxor %xmm0, %xmm12 8447 ; SSE4-NEXT: pxor %xmm8, %xmm0 8448 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm0 8449 ; SSE4-NEXT: blendvpd %xmm4, %xmm8 8450 ; SSE4-NEXT: movdqa %xmm11, %xmm0 8451 ; SSE4-NEXT: blendvpd %xmm5, %xmm1 8452 ; SSE4-NEXT: movdqa %xmm10, %xmm0 8453 ; SSE4-NEXT: blendvpd %xmm6, %xmm2 8454 ; SSE4-NEXT: movdqa %xmm9, %xmm0 8455 ; SSE4-NEXT: blendvpd %xmm7, %xmm3 8456 ; SSE4-NEXT: movapd %xmm8, %xmm0 8457 ; SSE4-NEXT: retq 8458 ; 8459 ; AVX1-LABEL: test159: 8460 ; AVX1: # BB#0: # %entry 8461 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 8462 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8463 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 8464 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6 8465 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8466 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 8467 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm6 8468 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm7 8469 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8470 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 8471 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 8472 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8473 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7 8474 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 8475 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8476 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm7 8477 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm5 8478 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 8479 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 8480 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 8481 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 8482 ; AVX1-NEXT: retq 8483 ; 8484 ; AVX2-LABEL: test159: 8485 ; AVX2: # BB#0: # %entry 8486 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 8487 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm5 8488 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm6 8489 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 8490 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 8491 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm4 8492 ; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm4 8493 ; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0 8494 ; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm1, %ymm1 8495 ; AVX2-NEXT: retq 8496 ; 8497 ; AVX512F-LABEL: test159: 8498 ; AVX512F: # BB#0: # %entry 8499 ; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 8500 ; AVX512F-NEXT: retq 8501 entry: 8502 %cmp = icmp ugt <8 x i64> %a, %b 8503 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 8504 ret <8 x i64> %sel 8505 } 8506 8507 define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) { 8508 ; SSE2-LABEL: test160: 8509 ; SSE2: # BB#0: # %entry 8510 ; SSE2-NEXT: movdqa %xmm7, %xmm11 8511 ; SSE2-NEXT: movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill 8512 ; SSE2-NEXT: movdqa %xmm3, %xmm7 8513 ; SSE2-NEXT: movdqa %xmm2, %xmm3 8514 ; SSE2-NEXT: movdqa %xmm1, %xmm2 8515 ; SSE2-NEXT: movdqa %xmm0, %xmm9 8516 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648] 8517 ; SSE2-NEXT: movdqa %xmm7, %xmm8 8518 ; SSE2-NEXT: pxor %xmm10, %xmm8 8519 ; SSE2-NEXT: movdqa %xmm11, %xmm0 8520 ; SSE2-NEXT: pxor %xmm10, %xmm0 8521 ; SSE2-NEXT: movdqa %xmm0, %xmm11 8522 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 8523 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 8524 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 8525 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 8526 ; SSE2-NEXT: pand %xmm12, %xmm0 8527 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 8528 ; SSE2-NEXT: por %xmm0, %xmm12 8529 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 8530 ; SSE2-NEXT: movdqa %xmm12, %xmm8 8531 ; SSE2-NEXT: pxor %xmm1, %xmm8 8532 ; SSE2-NEXT: movdqa %xmm3, %xmm11 8533 ; SSE2-NEXT: pxor %xmm10, %xmm11 8534 ; SSE2-NEXT: movdqa %xmm6, %xmm13 8535 ; SSE2-NEXT: pxor %xmm10, %xmm13 8536 ; SSE2-NEXT: movdqa %xmm13, %xmm14 8537 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 8538 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 8539 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 8540 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 8541 ; SSE2-NEXT: pand %xmm15, %xmm11 8542 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 8543 ; SSE2-NEXT: por %xmm11, %xmm13 8544 ; SSE2-NEXT: movdqa %xmm2, %xmm11 8545 ; SSE2-NEXT: pxor %xmm10, %xmm11 8546 ; SSE2-NEXT: movdqa %xmm5, %xmm14 8547 ; SSE2-NEXT: pxor %xmm10, %xmm14 8548 ; SSE2-NEXT: movdqa %xmm14, %xmm15 8549 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 8550 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 8551 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 8552 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 8553 ; SSE2-NEXT: pand %xmm11, %xmm14 8554 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 8555 ; SSE2-NEXT: por %xmm14, %xmm15 8556 ; SSE2-NEXT: movdqa %xmm9, %xmm11 8557 ; SSE2-NEXT: pxor %xmm10, %xmm11 8558 ; SSE2-NEXT: pxor %xmm4, %xmm10 8559 ; SSE2-NEXT: movdqa %xmm10, %xmm14 8560 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 8561 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 8562 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 8563 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 8564 ; SSE2-NEXT: pand %xmm11, %xmm0 8565 ; SSE2-NEXT: movdqa %xmm13, %xmm10 8566 ; SSE2-NEXT: pxor %xmm1, %xmm10 8567 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 8568 ; SSE2-NEXT: por %xmm0, %xmm14 8569 ; SSE2-NEXT: movdqa %xmm15, %xmm11 8570 ; SSE2-NEXT: pxor %xmm1, %xmm11 8571 ; SSE2-NEXT: pxor %xmm14, %xmm1 8572 ; SSE2-NEXT: pandn %xmm4, %xmm14 8573 ; SSE2-NEXT: pandn %xmm9, %xmm1 8574 ; SSE2-NEXT: por %xmm14, %xmm1 8575 ; SSE2-NEXT: pandn %xmm5, %xmm15 8576 ; SSE2-NEXT: pandn %xmm2, %xmm11 8577 ; SSE2-NEXT: por %xmm15, %xmm11 8578 ; SSE2-NEXT: pandn %xmm6, %xmm13 8579 ; SSE2-NEXT: pandn %xmm3, %xmm10 8580 ; SSE2-NEXT: por %xmm13, %xmm10 8581 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload 8582 ; SSE2-NEXT: pandn %xmm7, %xmm8 8583 ; SSE2-NEXT: por %xmm12, %xmm8 8584 ; SSE2-NEXT: movdqa %xmm1, %xmm0 8585 ; SSE2-NEXT: movdqa %xmm11, %xmm1 8586 ; SSE2-NEXT: movdqa %xmm10, %xmm2 8587 ; SSE2-NEXT: movdqa %xmm8, %xmm3 8588 ; SSE2-NEXT: retq 8589 ; 8590 ; SSE4-LABEL: test160: 8591 ; SSE4: # BB#0: # %entry 8592 ; SSE4-NEXT: movdqa %xmm0, %xmm8 8593 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 8594 ; SSE4-NEXT: movdqa %xmm3, %xmm10 8595 ; SSE4-NEXT: pxor %xmm0, %xmm10 8596 ; SSE4-NEXT: movdqa %xmm7, %xmm9 8597 ; SSE4-NEXT: pxor %xmm0, %xmm9 8598 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 8599 ; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 8600 ; SSE4-NEXT: pxor %xmm12, %xmm9 8601 ; SSE4-NEXT: movdqa %xmm2, %xmm11 8602 ; SSE4-NEXT: pxor %xmm0, %xmm11 8603 ; SSE4-NEXT: movdqa %xmm6, %xmm10 8604 ; SSE4-NEXT: pxor %xmm0, %xmm10 8605 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 8606 ; SSE4-NEXT: pxor %xmm12, %xmm10 8607 ; SSE4-NEXT: movdqa %xmm1, %xmm13 8608 ; SSE4-NEXT: pxor %xmm0, %xmm13 8609 ; SSE4-NEXT: movdqa %xmm5, %xmm11 8610 ; SSE4-NEXT: pxor %xmm0, %xmm11 8611 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm11 8612 ; SSE4-NEXT: pxor %xmm12, %xmm11 8613 ; SSE4-NEXT: movdqa %xmm8, %xmm13 8614 ; SSE4-NEXT: pxor %xmm0, %xmm13 8615 ; SSE4-NEXT: pxor %xmm4, %xmm0 8616 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm0 8617 ; SSE4-NEXT: pxor %xmm12, %xmm0 8618 ; SSE4-NEXT: blendvpd %xmm4, %xmm8 8619 ; SSE4-NEXT: movdqa %xmm11, %xmm0 8620 ; SSE4-NEXT: blendvpd %xmm5, %xmm1 8621 ; SSE4-NEXT: movdqa %xmm10, %xmm0 8622 ; SSE4-NEXT: blendvpd %xmm6, %xmm2 8623 ; SSE4-NEXT: movdqa %xmm9, %xmm0 8624 ; SSE4-NEXT: blendvpd %xmm7, %xmm3 8625 ; SSE4-NEXT: movapd %xmm8, %xmm0 8626 ; SSE4-NEXT: retq 8627 ; 8628 ; AVX1-LABEL: test160: 8629 ; AVX1: # BB#0: # %entry 8630 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 8631 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8632 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 8633 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6 8634 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8635 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 8636 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm8, %xmm8 8637 ; AVX1-NEXT: vpxor %xmm8, %xmm4, %xmm4 8638 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm7 8639 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm6 8640 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6 8641 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 8642 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 8643 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 8644 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8645 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 8646 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 8647 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8648 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 8649 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm7 8650 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm5 8651 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 8652 ; AVX1-NEXT: vpxor %xmm8, %xmm5, %xmm5 8653 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 8654 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 8655 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 8656 ; AVX1-NEXT: retq 8657 ; 8658 ; AVX2-LABEL: test160: 8659 ; AVX2: # BB#0: # %entry 8660 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 8661 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm5 8662 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm6 8663 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 8664 ; AVX2-NEXT: vpcmpeqd %ymm6, %ymm6, %ymm6 8665 ; AVX2-NEXT: vpxor %ymm6, %ymm5, %ymm5 8666 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm7 8667 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm4 8668 ; AVX2-NEXT: vpcmpgtq %ymm7, %ymm4, %ymm4 8669 ; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm4 8670 ; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0 8671 ; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm1, %ymm1 8672 ; AVX2-NEXT: retq 8673 ; 8674 ; AVX512F-LABEL: test160: 8675 ; AVX512F: # BB#0: # %entry 8676 ; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 8677 ; AVX512F-NEXT: retq 8678 entry: 8679 %cmp = icmp uge <8 x i64> %a, %b 8680 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 8681 ret <8 x i64> %sel 8682 } 8683 8684 define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) { 8685 ; SSE2-LABEL: test161: 8686 ; SSE2: # BB#0: # %entry 8687 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 8688 ; SSE2-NEXT: movdqa %xmm1, %xmm5 8689 ; SSE2-NEXT: pxor %xmm4, %xmm5 8690 ; SSE2-NEXT: movdqa %xmm3, %xmm6 8691 ; SSE2-NEXT: pxor %xmm4, %xmm6 8692 ; SSE2-NEXT: movdqa %xmm6, %xmm7 8693 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8694 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8695 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8696 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8697 ; SSE2-NEXT: pand %xmm8, %xmm5 8698 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8699 ; SSE2-NEXT: por %xmm5, %xmm6 8700 ; SSE2-NEXT: movdqa %xmm0, %xmm5 8701 ; SSE2-NEXT: pxor %xmm4, %xmm5 8702 ; SSE2-NEXT: pxor %xmm2, %xmm4 8703 ; SSE2-NEXT: movdqa %xmm4, %xmm7 8704 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8705 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8706 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm4 8707 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 8708 ; SSE2-NEXT: pand %xmm8, %xmm4 8709 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 8710 ; SSE2-NEXT: por %xmm4, %xmm5 8711 ; SSE2-NEXT: pand %xmm5, %xmm0 8712 ; SSE2-NEXT: pandn %xmm2, %xmm5 8713 ; SSE2-NEXT: por %xmm5, %xmm0 8714 ; SSE2-NEXT: pand %xmm6, %xmm1 8715 ; SSE2-NEXT: pandn %xmm3, %xmm6 8716 ; SSE2-NEXT: por %xmm6, %xmm1 8717 ; SSE2-NEXT: retq 8718 ; 8719 ; SSE4-LABEL: test161: 8720 ; SSE4: # BB#0: # %entry 8721 ; SSE4-NEXT: movdqa %xmm0, %xmm4 8722 ; SSE4-NEXT: movdqa %xmm3, %xmm5 8723 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm5 8724 ; SSE4-NEXT: movdqa %xmm2, %xmm0 8725 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 8726 ; SSE4-NEXT: blendvpd %xmm4, %xmm2 8727 ; SSE4-NEXT: movdqa %xmm5, %xmm0 8728 ; SSE4-NEXT: blendvpd %xmm1, %xmm3 8729 ; SSE4-NEXT: movapd %xmm2, %xmm0 8730 ; SSE4-NEXT: movapd %xmm3, %xmm1 8731 ; SSE4-NEXT: retq 8732 ; 8733 ; AVX1-LABEL: test161: 8734 ; AVX1: # BB#0: # %entry 8735 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8736 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 8737 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8738 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 8739 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8740 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8741 ; AVX1-NEXT: retq 8742 ; 8743 ; AVX2-LABEL: test161: 8744 ; AVX2: # BB#0: # %entry 8745 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 8746 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8747 ; AVX2-NEXT: retq 8748 ; 8749 ; AVX512BW-LABEL: test161: 8750 ; AVX512BW: # BB#0: # %entry 8751 ; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 8752 ; AVX512BW-NEXT: retq 8753 entry: 8754 %cmp = icmp slt <4 x i64> %a, %b 8755 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8756 ret <4 x i64> %sel 8757 } 8758 8759 define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) { 8760 ; SSE2-LABEL: test162: 8761 ; SSE2: # BB#0: # %entry 8762 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0] 8763 ; SSE2-NEXT: movdqa %xmm3, %xmm4 8764 ; SSE2-NEXT: pxor %xmm7, %xmm4 8765 ; SSE2-NEXT: movdqa %xmm1, %xmm5 8766 ; SSE2-NEXT: pxor %xmm7, %xmm5 8767 ; SSE2-NEXT: movdqa %xmm5, %xmm6 8768 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 8769 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 8770 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 8771 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8772 ; SSE2-NEXT: pand %xmm8, %xmm4 8773 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 8774 ; SSE2-NEXT: por %xmm4, %xmm8 8775 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 8776 ; SSE2-NEXT: movdqa %xmm8, %xmm9 8777 ; SSE2-NEXT: pxor %xmm4, %xmm9 8778 ; SSE2-NEXT: movdqa %xmm2, %xmm6 8779 ; SSE2-NEXT: pxor %xmm7, %xmm6 8780 ; SSE2-NEXT: pxor %xmm0, %xmm7 8781 ; SSE2-NEXT: movdqa %xmm7, %xmm5 8782 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 8783 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 8784 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 8785 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8786 ; SSE2-NEXT: pand %xmm10, %xmm6 8787 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 8788 ; SSE2-NEXT: por %xmm6, %xmm5 8789 ; SSE2-NEXT: pxor %xmm5, %xmm4 8790 ; SSE2-NEXT: pandn %xmm0, %xmm5 8791 ; SSE2-NEXT: pandn %xmm2, %xmm4 8792 ; SSE2-NEXT: por %xmm5, %xmm4 8793 ; SSE2-NEXT: pandn %xmm1, %xmm8 8794 ; SSE2-NEXT: pandn %xmm3, %xmm9 8795 ; SSE2-NEXT: por %xmm8, %xmm9 8796 ; SSE2-NEXT: movdqa %xmm4, %xmm0 8797 ; SSE2-NEXT: movdqa %xmm9, %xmm1 8798 ; SSE2-NEXT: retq 8799 ; 8800 ; SSE4-LABEL: test162: 8801 ; SSE4: # BB#0: # %entry 8802 ; SSE4-NEXT: movdqa %xmm0, %xmm4 8803 ; SSE4-NEXT: movdqa %xmm1, %xmm5 8804 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm5 8805 ; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 8806 ; SSE4-NEXT: pxor %xmm6, %xmm5 8807 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8808 ; SSE4-NEXT: pxor %xmm6, %xmm0 8809 ; SSE4-NEXT: blendvpd %xmm4, %xmm2 8810 ; SSE4-NEXT: movdqa %xmm5, %xmm0 8811 ; SSE4-NEXT: blendvpd %xmm1, %xmm3 8812 ; SSE4-NEXT: movapd %xmm2, %xmm0 8813 ; SSE4-NEXT: movapd %xmm3, %xmm1 8814 ; SSE4-NEXT: retq 8815 ; 8816 ; AVX1-LABEL: test162: 8817 ; AVX1: # BB#0: # %entry 8818 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8819 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8820 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8821 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 8822 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8823 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm4 8824 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm3 8825 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8826 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8827 ; AVX1-NEXT: retq 8828 ; 8829 ; AVX2-LABEL: test162: 8830 ; AVX2: # BB#0: # %entry 8831 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8832 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 8833 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 8834 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8835 ; AVX2-NEXT: retq 8836 ; 8837 ; AVX512BW-LABEL: test162: 8838 ; AVX512BW: # BB#0: # %entry 8839 ; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 8840 ; AVX512BW-NEXT: retq 8841 entry: 8842 %cmp = icmp sle <4 x i64> %a, %b 8843 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8844 ret <4 x i64> %sel 8845 } 8846 8847 define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) { 8848 ; SSE2-LABEL: test163: 8849 ; SSE2: # BB#0: # %entry 8850 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 8851 ; SSE2-NEXT: movdqa %xmm3, %xmm5 8852 ; SSE2-NEXT: pxor %xmm4, %xmm5 8853 ; SSE2-NEXT: movdqa %xmm1, %xmm6 8854 ; SSE2-NEXT: pxor %xmm4, %xmm6 8855 ; SSE2-NEXT: movdqa %xmm6, %xmm7 8856 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8857 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8858 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8859 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8860 ; SSE2-NEXT: pand %xmm8, %xmm5 8861 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8862 ; SSE2-NEXT: por %xmm5, %xmm6 8863 ; SSE2-NEXT: movdqa %xmm2, %xmm5 8864 ; SSE2-NEXT: pxor %xmm4, %xmm5 8865 ; SSE2-NEXT: pxor %xmm0, %xmm4 8866 ; SSE2-NEXT: movdqa %xmm4, %xmm7 8867 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8868 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8869 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm4 8870 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 8871 ; SSE2-NEXT: pand %xmm8, %xmm4 8872 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 8873 ; SSE2-NEXT: por %xmm4, %xmm5 8874 ; SSE2-NEXT: pand %xmm5, %xmm0 8875 ; SSE2-NEXT: pandn %xmm2, %xmm5 8876 ; SSE2-NEXT: por %xmm5, %xmm0 8877 ; SSE2-NEXT: pand %xmm6, %xmm1 8878 ; SSE2-NEXT: pandn %xmm3, %xmm6 8879 ; SSE2-NEXT: por %xmm6, %xmm1 8880 ; SSE2-NEXT: retq 8881 ; 8882 ; SSE4-LABEL: test163: 8883 ; SSE4: # BB#0: # %entry 8884 ; SSE4-NEXT: movdqa %xmm0, %xmm4 8885 ; SSE4-NEXT: movdqa %xmm1, %xmm5 8886 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm5 8887 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8888 ; SSE4-NEXT: blendvpd %xmm4, %xmm2 8889 ; SSE4-NEXT: movdqa %xmm5, %xmm0 8890 ; SSE4-NEXT: blendvpd %xmm1, %xmm3 8891 ; SSE4-NEXT: movapd %xmm2, %xmm0 8892 ; SSE4-NEXT: movapd %xmm3, %xmm1 8893 ; SSE4-NEXT: retq 8894 ; 8895 ; AVX1-LABEL: test163: 8896 ; AVX1: # BB#0: # %entry 8897 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8898 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8899 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8900 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 8901 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8902 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8903 ; AVX1-NEXT: retq 8904 ; 8905 ; AVX2-LABEL: test163: 8906 ; AVX2: # BB#0: # %entry 8907 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8908 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8909 ; AVX2-NEXT: retq 8910 ; 8911 ; AVX512BW-LABEL: test163: 8912 ; AVX512BW: # BB#0: # %entry 8913 ; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 8914 ; AVX512BW-NEXT: retq 8915 entry: 8916 %cmp = icmp sgt <4 x i64> %a, %b 8917 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8918 ret <4 x i64> %sel 8919 } 8920 8921 define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) { 8922 ; SSE2-LABEL: test164: 8923 ; SSE2: # BB#0: # %entry 8924 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0] 8925 ; SSE2-NEXT: movdqa %xmm1, %xmm4 8926 ; SSE2-NEXT: pxor %xmm7, %xmm4 8927 ; SSE2-NEXT: movdqa %xmm3, %xmm5 8928 ; SSE2-NEXT: pxor %xmm7, %xmm5 8929 ; SSE2-NEXT: movdqa %xmm5, %xmm6 8930 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 8931 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 8932 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 8933 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8934 ; SSE2-NEXT: pand %xmm8, %xmm4 8935 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 8936 ; SSE2-NEXT: por %xmm4, %xmm8 8937 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 8938 ; SSE2-NEXT: movdqa %xmm8, %xmm9 8939 ; SSE2-NEXT: pxor %xmm4, %xmm9 8940 ; SSE2-NEXT: movdqa %xmm0, %xmm6 8941 ; SSE2-NEXT: pxor %xmm7, %xmm6 8942 ; SSE2-NEXT: pxor %xmm2, %xmm7 8943 ; SSE2-NEXT: movdqa %xmm7, %xmm5 8944 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 8945 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 8946 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 8947 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8948 ; SSE2-NEXT: pand %xmm10, %xmm6 8949 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 8950 ; SSE2-NEXT: por %xmm6, %xmm5 8951 ; SSE2-NEXT: pxor %xmm5, %xmm4 8952 ; SSE2-NEXT: pandn %xmm0, %xmm5 8953 ; SSE2-NEXT: pandn %xmm2, %xmm4 8954 ; SSE2-NEXT: por %xmm5, %xmm4 8955 ; SSE2-NEXT: pandn %xmm1, %xmm8 8956 ; SSE2-NEXT: pandn %xmm3, %xmm9 8957 ; SSE2-NEXT: por %xmm8, %xmm9 8958 ; SSE2-NEXT: movdqa %xmm4, %xmm0 8959 ; SSE2-NEXT: movdqa %xmm9, %xmm1 8960 ; SSE2-NEXT: retq 8961 ; 8962 ; SSE4-LABEL: test164: 8963 ; SSE4: # BB#0: # %entry 8964 ; SSE4-NEXT: movdqa %xmm0, %xmm4 8965 ; SSE4-NEXT: movdqa %xmm3, %xmm5 8966 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm5 8967 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 8968 ; SSE4-NEXT: pxor %xmm0, %xmm5 8969 ; SSE4-NEXT: movdqa %xmm2, %xmm6 8970 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm6 8971 ; SSE4-NEXT: pxor %xmm6, %xmm0 8972 ; SSE4-NEXT: blendvpd %xmm4, %xmm2 8973 ; SSE4-NEXT: movdqa %xmm5, %xmm0 8974 ; SSE4-NEXT: blendvpd %xmm1, %xmm3 8975 ; SSE4-NEXT: movapd %xmm2, %xmm0 8976 ; SSE4-NEXT: movapd %xmm3, %xmm1 8977 ; SSE4-NEXT: retq 8978 ; 8979 ; AVX1-LABEL: test164: 8980 ; AVX1: # BB#0: # %entry 8981 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8982 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 8983 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8984 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 8985 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8986 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm4 8987 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm3 8988 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8989 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8990 ; AVX1-NEXT: retq 8991 ; 8992 ; AVX2-LABEL: test164: 8993 ; AVX2: # BB#0: # %entry 8994 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 8995 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 8996 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 8997 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8998 ; AVX2-NEXT: retq 8999 ; 9000 ; AVX512BW-LABEL: test164: 9001 ; AVX512BW: # BB#0: # %entry 9002 ; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 9003 ; AVX512BW-NEXT: retq 9004 entry: 9005 %cmp = icmp sge <4 x i64> %a, %b 9006 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 9007 ret <4 x i64> %sel 9008 } 9009 9010 define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) { 9011 ; SSE2-LABEL: test165: 9012 ; SSE2: # BB#0: # %entry 9013 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 9014 ; SSE2-NEXT: movdqa %xmm1, %xmm5 9015 ; SSE2-NEXT: pxor %xmm4, %xmm5 9016 ; SSE2-NEXT: movdqa %xmm3, %xmm6 9017 ; SSE2-NEXT: pxor %xmm4, %xmm6 9018 ; SSE2-NEXT: movdqa %xmm6, %xmm7 9019 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 9020 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9021 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 9022 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 9023 ; SSE2-NEXT: pand %xmm8, %xmm5 9024 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9025 ; SSE2-NEXT: por %xmm5, %xmm6 9026 ; SSE2-NEXT: movdqa %xmm0, %xmm5 9027 ; SSE2-NEXT: pxor %xmm4, %xmm5 9028 ; SSE2-NEXT: pxor %xmm2, %xmm4 9029 ; SSE2-NEXT: movdqa %xmm4, %xmm7 9030 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 9031 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9032 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm4 9033 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 9034 ; SSE2-NEXT: pand %xmm8, %xmm4 9035 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 9036 ; SSE2-NEXT: por %xmm4, %xmm5 9037 ; SSE2-NEXT: pand %xmm5, %xmm0 9038 ; SSE2-NEXT: pandn %xmm2, %xmm5 9039 ; SSE2-NEXT: por %xmm5, %xmm0 9040 ; SSE2-NEXT: pand %xmm6, %xmm1 9041 ; SSE2-NEXT: pandn %xmm3, %xmm6 9042 ; SSE2-NEXT: por %xmm6, %xmm1 9043 ; SSE2-NEXT: retq 9044 ; 9045 ; SSE4-LABEL: test165: 9046 ; SSE4: # BB#0: # %entry 9047 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9048 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9049 ; SSE4-NEXT: movdqa %xmm1, %xmm6 9050 ; SSE4-NEXT: pxor %xmm0, %xmm6 9051 ; SSE4-NEXT: movdqa %xmm3, %xmm5 9052 ; SSE4-NEXT: pxor %xmm0, %xmm5 9053 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9054 ; SSE4-NEXT: movdqa %xmm4, %xmm6 9055 ; SSE4-NEXT: pxor %xmm0, %xmm6 9056 ; SSE4-NEXT: pxor %xmm2, %xmm0 9057 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9058 ; SSE4-NEXT: blendvpd %xmm4, %xmm2 9059 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9060 ; SSE4-NEXT: blendvpd %xmm1, %xmm3 9061 ; SSE4-NEXT: movapd %xmm2, %xmm0 9062 ; SSE4-NEXT: movapd %xmm3, %xmm1 9063 ; SSE4-NEXT: retq 9064 ; 9065 ; AVX1-LABEL: test165: 9066 ; AVX1: # BB#0: # %entry 9067 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9068 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9069 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9070 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 9071 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9072 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9073 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm4 9074 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3 9075 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9076 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9077 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9078 ; AVX1-NEXT: retq 9079 ; 9080 ; AVX2-LABEL: test165: 9081 ; AVX2: # BB#0: # %entry 9082 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9083 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 9084 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 9085 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9086 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9087 ; AVX2-NEXT: retq 9088 ; 9089 ; AVX512BW-LABEL: test165: 9090 ; AVX512BW: # BB#0: # %entry 9091 ; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 9092 ; AVX512BW-NEXT: retq 9093 entry: 9094 %cmp = icmp ult <4 x i64> %a, %b 9095 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 9096 ret <4 x i64> %sel 9097 } 9098 9099 define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) { 9100 ; SSE2-LABEL: test166: 9101 ; SSE2: # BB#0: # %entry 9102 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648] 9103 ; SSE2-NEXT: movdqa %xmm3, %xmm4 9104 ; SSE2-NEXT: pxor %xmm7, %xmm4 9105 ; SSE2-NEXT: movdqa %xmm1, %xmm5 9106 ; SSE2-NEXT: pxor %xmm7, %xmm5 9107 ; SSE2-NEXT: movdqa %xmm5, %xmm6 9108 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 9109 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 9110 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 9111 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9112 ; SSE2-NEXT: pand %xmm8, %xmm4 9113 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 9114 ; SSE2-NEXT: por %xmm4, %xmm8 9115 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 9116 ; SSE2-NEXT: movdqa %xmm8, %xmm9 9117 ; SSE2-NEXT: pxor %xmm4, %xmm9 9118 ; SSE2-NEXT: movdqa %xmm2, %xmm6 9119 ; SSE2-NEXT: pxor %xmm7, %xmm6 9120 ; SSE2-NEXT: pxor %xmm0, %xmm7 9121 ; SSE2-NEXT: movdqa %xmm7, %xmm5 9122 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 9123 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 9124 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 9125 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9126 ; SSE2-NEXT: pand %xmm10, %xmm6 9127 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 9128 ; SSE2-NEXT: por %xmm6, %xmm5 9129 ; SSE2-NEXT: pxor %xmm5, %xmm4 9130 ; SSE2-NEXT: pandn %xmm0, %xmm5 9131 ; SSE2-NEXT: pandn %xmm2, %xmm4 9132 ; SSE2-NEXT: por %xmm5, %xmm4 9133 ; SSE2-NEXT: pandn %xmm1, %xmm8 9134 ; SSE2-NEXT: pandn %xmm3, %xmm9 9135 ; SSE2-NEXT: por %xmm8, %xmm9 9136 ; SSE2-NEXT: movdqa %xmm4, %xmm0 9137 ; SSE2-NEXT: movdqa %xmm9, %xmm1 9138 ; SSE2-NEXT: retq 9139 ; 9140 ; SSE4-LABEL: test166: 9141 ; SSE4: # BB#0: # %entry 9142 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9143 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9144 ; SSE4-NEXT: movdqa %xmm3, %xmm6 9145 ; SSE4-NEXT: pxor %xmm0, %xmm6 9146 ; SSE4-NEXT: movdqa %xmm1, %xmm5 9147 ; SSE4-NEXT: pxor %xmm0, %xmm5 9148 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9149 ; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 9150 ; SSE4-NEXT: pxor %xmm6, %xmm5 9151 ; SSE4-NEXT: movdqa %xmm2, %xmm7 9152 ; SSE4-NEXT: pxor %xmm0, %xmm7 9153 ; SSE4-NEXT: pxor %xmm4, %xmm0 9154 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 9155 ; SSE4-NEXT: pxor %xmm6, %xmm0 9156 ; SSE4-NEXT: blendvpd %xmm4, %xmm2 9157 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9158 ; SSE4-NEXT: blendvpd %xmm1, %xmm3 9159 ; SSE4-NEXT: movapd %xmm2, %xmm0 9160 ; SSE4-NEXT: movapd %xmm3, %xmm1 9161 ; SSE4-NEXT: retq 9162 ; 9163 ; AVX1-LABEL: test166: 9164 ; AVX1: # BB#0: # %entry 9165 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9166 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9167 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9168 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 9169 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9170 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9171 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4 9172 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2 9173 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm5 9174 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3 9175 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3 9176 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3 9177 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9178 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9179 ; AVX1-NEXT: retq 9180 ; 9181 ; AVX2-LABEL: test166: 9182 ; AVX2: # BB#0: # %entry 9183 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9184 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 9185 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 9186 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9187 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 9188 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 9189 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9190 ; AVX2-NEXT: retq 9191 ; 9192 ; AVX512BW-LABEL: test166: 9193 ; AVX512BW: # BB#0: # %entry 9194 ; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 9195 ; AVX512BW-NEXT: retq 9196 entry: 9197 %cmp = icmp ule <4 x i64> %a, %b 9198 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 9199 ret <4 x i64> %sel 9200 } 9201 9202 define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) { 9203 ; SSE2-LABEL: test167: 9204 ; SSE2: # BB#0: # %entry 9205 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 9206 ; SSE2-NEXT: movdqa %xmm3, %xmm5 9207 ; SSE2-NEXT: pxor %xmm4, %xmm5 9208 ; SSE2-NEXT: movdqa %xmm1, %xmm6 9209 ; SSE2-NEXT: pxor %xmm4, %xmm6 9210 ; SSE2-NEXT: movdqa %xmm6, %xmm7 9211 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 9212 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9213 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 9214 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 9215 ; SSE2-NEXT: pand %xmm8, %xmm5 9216 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9217 ; SSE2-NEXT: por %xmm5, %xmm6 9218 ; SSE2-NEXT: movdqa %xmm2, %xmm5 9219 ; SSE2-NEXT: pxor %xmm4, %xmm5 9220 ; SSE2-NEXT: pxor %xmm0, %xmm4 9221 ; SSE2-NEXT: movdqa %xmm4, %xmm7 9222 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 9223 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9224 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm4 9225 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 9226 ; SSE2-NEXT: pand %xmm8, %xmm4 9227 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 9228 ; SSE2-NEXT: por %xmm4, %xmm5 9229 ; SSE2-NEXT: pand %xmm5, %xmm0 9230 ; SSE2-NEXT: pandn %xmm2, %xmm5 9231 ; SSE2-NEXT: por %xmm5, %xmm0 9232 ; SSE2-NEXT: pand %xmm6, %xmm1 9233 ; SSE2-NEXT: pandn %xmm3, %xmm6 9234 ; SSE2-NEXT: por %xmm6, %xmm1 9235 ; SSE2-NEXT: retq 9236 ; 9237 ; SSE4-LABEL: test167: 9238 ; SSE4: # BB#0: # %entry 9239 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9240 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9241 ; SSE4-NEXT: movdqa %xmm3, %xmm6 9242 ; SSE4-NEXT: pxor %xmm0, %xmm6 9243 ; SSE4-NEXT: movdqa %xmm1, %xmm5 9244 ; SSE4-NEXT: pxor %xmm0, %xmm5 9245 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9246 ; SSE4-NEXT: movdqa %xmm2, %xmm6 9247 ; SSE4-NEXT: pxor %xmm0, %xmm6 9248 ; SSE4-NEXT: pxor %xmm4, %xmm0 9249 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9250 ; SSE4-NEXT: blendvpd %xmm4, %xmm2 9251 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9252 ; SSE4-NEXT: blendvpd %xmm1, %xmm3 9253 ; SSE4-NEXT: movapd %xmm2, %xmm0 9254 ; SSE4-NEXT: movapd %xmm3, %xmm1 9255 ; SSE4-NEXT: retq 9256 ; 9257 ; AVX1-LABEL: test167: 9258 ; AVX1: # BB#0: # %entry 9259 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9260 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9261 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9262 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 9263 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9264 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9265 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm4 9266 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3 9267 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9268 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9269 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9270 ; AVX1-NEXT: retq 9271 ; 9272 ; AVX2-LABEL: test167: 9273 ; AVX2: # BB#0: # %entry 9274 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9275 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 9276 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 9277 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9278 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9279 ; AVX2-NEXT: retq 9280 ; 9281 ; AVX512BW-LABEL: test167: 9282 ; AVX512BW: # BB#0: # %entry 9283 ; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 9284 ; AVX512BW-NEXT: retq 9285 entry: 9286 %cmp = icmp ugt <4 x i64> %a, %b 9287 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 9288 ret <4 x i64> %sel 9289 } 9290 9291 define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) { 9292 ; SSE2-LABEL: test168: 9293 ; SSE2: # BB#0: # %entry 9294 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648] 9295 ; SSE2-NEXT: movdqa %xmm1, %xmm4 9296 ; SSE2-NEXT: pxor %xmm7, %xmm4 9297 ; SSE2-NEXT: movdqa %xmm3, %xmm5 9298 ; SSE2-NEXT: pxor %xmm7, %xmm5 9299 ; SSE2-NEXT: movdqa %xmm5, %xmm6 9300 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 9301 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 9302 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 9303 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9304 ; SSE2-NEXT: pand %xmm8, %xmm4 9305 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 9306 ; SSE2-NEXT: por %xmm4, %xmm8 9307 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 9308 ; SSE2-NEXT: movdqa %xmm8, %xmm9 9309 ; SSE2-NEXT: pxor %xmm4, %xmm9 9310 ; SSE2-NEXT: movdqa %xmm0, %xmm6 9311 ; SSE2-NEXT: pxor %xmm7, %xmm6 9312 ; SSE2-NEXT: pxor %xmm2, %xmm7 9313 ; SSE2-NEXT: movdqa %xmm7, %xmm5 9314 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 9315 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 9316 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 9317 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9318 ; SSE2-NEXT: pand %xmm10, %xmm6 9319 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 9320 ; SSE2-NEXT: por %xmm6, %xmm5 9321 ; SSE2-NEXT: pxor %xmm5, %xmm4 9322 ; SSE2-NEXT: pandn %xmm0, %xmm5 9323 ; SSE2-NEXT: pandn %xmm2, %xmm4 9324 ; SSE2-NEXT: por %xmm5, %xmm4 9325 ; SSE2-NEXT: pandn %xmm1, %xmm8 9326 ; SSE2-NEXT: pandn %xmm3, %xmm9 9327 ; SSE2-NEXT: por %xmm8, %xmm9 9328 ; SSE2-NEXT: movdqa %xmm4, %xmm0 9329 ; SSE2-NEXT: movdqa %xmm9, %xmm1 9330 ; SSE2-NEXT: retq 9331 ; 9332 ; SSE4-LABEL: test168: 9333 ; SSE4: # BB#0: # %entry 9334 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9335 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9336 ; SSE4-NEXT: movdqa %xmm1, %xmm6 9337 ; SSE4-NEXT: pxor %xmm0, %xmm6 9338 ; SSE4-NEXT: movdqa %xmm3, %xmm5 9339 ; SSE4-NEXT: pxor %xmm0, %xmm5 9340 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9341 ; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 9342 ; SSE4-NEXT: pxor %xmm6, %xmm5 9343 ; SSE4-NEXT: movdqa %xmm4, %xmm7 9344 ; SSE4-NEXT: pxor %xmm0, %xmm7 9345 ; SSE4-NEXT: pxor %xmm2, %xmm0 9346 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 9347 ; SSE4-NEXT: pxor %xmm6, %xmm0 9348 ; SSE4-NEXT: blendvpd %xmm4, %xmm2 9349 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9350 ; SSE4-NEXT: blendvpd %xmm1, %xmm3 9351 ; SSE4-NEXT: movapd %xmm2, %xmm0 9352 ; SSE4-NEXT: movapd %xmm3, %xmm1 9353 ; SSE4-NEXT: retq 9354 ; 9355 ; AVX1-LABEL: test168: 9356 ; AVX1: # BB#0: # %entry 9357 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9358 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9359 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9360 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 9361 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9362 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9363 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4 9364 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2 9365 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm5 9366 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3 9367 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3 9368 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3 9369 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9370 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9371 ; AVX1-NEXT: retq 9372 ; 9373 ; AVX2-LABEL: test168: 9374 ; AVX2: # BB#0: # %entry 9375 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9376 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 9377 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 9378 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9379 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 9380 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 9381 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9382 ; AVX2-NEXT: retq 9383 ; 9384 ; AVX512BW-LABEL: test168: 9385 ; AVX512BW: # BB#0: # %entry 9386 ; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 9387 ; AVX512BW-NEXT: retq 9388 entry: 9389 %cmp = icmp uge <4 x i64> %a, %b 9390 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 9391 ret <4 x i64> %sel 9392 } 9393 9394 define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) { 9395 ; SSE2-LABEL: test169: 9396 ; SSE2: # BB#0: # %entry 9397 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,0,2147483648,0] 9398 ; SSE2-NEXT: movdqa %xmm1, %xmm4 9399 ; SSE2-NEXT: pxor %xmm5, %xmm4 9400 ; SSE2-NEXT: movdqa %xmm3, %xmm6 9401 ; SSE2-NEXT: pxor %xmm5, %xmm6 9402 ; SSE2-NEXT: movdqa %xmm6, %xmm7 9403 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 9404 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9405 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm6 9406 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 9407 ; SSE2-NEXT: pand %xmm8, %xmm6 9408 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3] 9409 ; SSE2-NEXT: por %xmm6, %xmm4 9410 ; SSE2-NEXT: movdqa %xmm0, %xmm6 9411 ; SSE2-NEXT: pxor %xmm5, %xmm6 9412 ; SSE2-NEXT: pxor %xmm2, %xmm5 9413 ; SSE2-NEXT: movdqa %xmm5, %xmm7 9414 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm7 9415 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9416 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm5 9417 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3] 9418 ; SSE2-NEXT: pand %xmm8, %xmm6 9419 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 9420 ; SSE2-NEXT: por %xmm6, %xmm5 9421 ; SSE2-NEXT: pand %xmm5, %xmm2 9422 ; SSE2-NEXT: pandn %xmm0, %xmm5 9423 ; SSE2-NEXT: por %xmm2, %xmm5 9424 ; SSE2-NEXT: pand %xmm4, %xmm3 9425 ; SSE2-NEXT: pandn %xmm1, %xmm4 9426 ; SSE2-NEXT: por %xmm3, %xmm4 9427 ; SSE2-NEXT: movdqa %xmm5, %xmm0 9428 ; SSE2-NEXT: movdqa %xmm4, %xmm1 9429 ; SSE2-NEXT: retq 9430 ; 9431 ; SSE4-LABEL: test169: 9432 ; SSE4: # BB#0: # %entry 9433 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9434 ; SSE4-NEXT: movdqa %xmm3, %xmm5 9435 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm5 9436 ; SSE4-NEXT: movdqa %xmm2, %xmm0 9437 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 9438 ; SSE4-NEXT: blendvpd %xmm2, %xmm4 9439 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9440 ; SSE4-NEXT: blendvpd %xmm3, %xmm1 9441 ; SSE4-NEXT: movapd %xmm4, %xmm0 9442 ; SSE4-NEXT: retq 9443 ; 9444 ; AVX1-LABEL: test169: 9445 ; AVX1: # BB#0: # %entry 9446 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9447 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 9448 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 9449 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 9450 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9451 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9452 ; AVX1-NEXT: retq 9453 ; 9454 ; AVX2-LABEL: test169: 9455 ; AVX2: # BB#0: # %entry 9456 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 9457 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9458 ; AVX2-NEXT: retq 9459 ; 9460 ; AVX512BW-LABEL: test169: 9461 ; AVX512BW: # BB#0: # %entry 9462 ; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 9463 ; AVX512BW-NEXT: retq 9464 entry: 9465 %cmp = icmp slt <4 x i64> %a, %b 9466 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9467 ret <4 x i64> %sel 9468 } 9469 9470 define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) { 9471 ; SSE2-LABEL: test170: 9472 ; SSE2: # BB#0: # %entry 9473 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0] 9474 ; SSE2-NEXT: movdqa %xmm3, %xmm4 9475 ; SSE2-NEXT: pxor %xmm7, %xmm4 9476 ; SSE2-NEXT: movdqa %xmm1, %xmm5 9477 ; SSE2-NEXT: pxor %xmm7, %xmm5 9478 ; SSE2-NEXT: movdqa %xmm5, %xmm6 9479 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 9480 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 9481 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 9482 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9483 ; SSE2-NEXT: pand %xmm8, %xmm4 9484 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 9485 ; SSE2-NEXT: por %xmm4, %xmm8 9486 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 9487 ; SSE2-NEXT: movdqa %xmm8, %xmm9 9488 ; SSE2-NEXT: pxor %xmm4, %xmm9 9489 ; SSE2-NEXT: movdqa %xmm2, %xmm6 9490 ; SSE2-NEXT: pxor %xmm7, %xmm6 9491 ; SSE2-NEXT: pxor %xmm0, %xmm7 9492 ; SSE2-NEXT: movdqa %xmm7, %xmm5 9493 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 9494 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 9495 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 9496 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9497 ; SSE2-NEXT: pand %xmm10, %xmm6 9498 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 9499 ; SSE2-NEXT: por %xmm6, %xmm5 9500 ; SSE2-NEXT: pxor %xmm5, %xmm4 9501 ; SSE2-NEXT: pandn %xmm2, %xmm5 9502 ; SSE2-NEXT: pandn %xmm0, %xmm4 9503 ; SSE2-NEXT: por %xmm5, %xmm4 9504 ; SSE2-NEXT: pandn %xmm3, %xmm8 9505 ; SSE2-NEXT: pandn %xmm1, %xmm9 9506 ; SSE2-NEXT: por %xmm8, %xmm9 9507 ; SSE2-NEXT: movdqa %xmm4, %xmm0 9508 ; SSE2-NEXT: movdqa %xmm9, %xmm1 9509 ; SSE2-NEXT: retq 9510 ; 9511 ; SSE4-LABEL: test170: 9512 ; SSE4: # BB#0: # %entry 9513 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9514 ; SSE4-NEXT: movdqa %xmm1, %xmm5 9515 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm5 9516 ; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 9517 ; SSE4-NEXT: pxor %xmm6, %xmm5 9518 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9519 ; SSE4-NEXT: pxor %xmm6, %xmm0 9520 ; SSE4-NEXT: blendvpd %xmm2, %xmm4 9521 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9522 ; SSE4-NEXT: blendvpd %xmm3, %xmm1 9523 ; SSE4-NEXT: movapd %xmm4, %xmm0 9524 ; SSE4-NEXT: retq 9525 ; 9526 ; AVX1-LABEL: test170: 9527 ; AVX1: # BB#0: # %entry 9528 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9529 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 9530 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 9531 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 9532 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 9533 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm4 9534 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm3 9535 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9536 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9537 ; AVX1-NEXT: retq 9538 ; 9539 ; AVX2-LABEL: test170: 9540 ; AVX2: # BB#0: # %entry 9541 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 9542 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 9543 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 9544 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9545 ; AVX2-NEXT: retq 9546 ; 9547 ; AVX512BW-LABEL: test170: 9548 ; AVX512BW: # BB#0: # %entry 9549 ; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 9550 ; AVX512BW-NEXT: retq 9551 entry: 9552 %cmp = icmp sle <4 x i64> %a, %b 9553 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9554 ret <4 x i64> %sel 9555 } 9556 9557 define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) { 9558 ; SSE2-LABEL: test171: 9559 ; SSE2: # BB#0: # %entry 9560 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,0,2147483648,0] 9561 ; SSE2-NEXT: movdqa %xmm3, %xmm4 9562 ; SSE2-NEXT: pxor %xmm5, %xmm4 9563 ; SSE2-NEXT: movdqa %xmm1, %xmm6 9564 ; SSE2-NEXT: pxor %xmm5, %xmm6 9565 ; SSE2-NEXT: movdqa %xmm6, %xmm7 9566 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 9567 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9568 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm6 9569 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 9570 ; SSE2-NEXT: pand %xmm8, %xmm6 9571 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3] 9572 ; SSE2-NEXT: por %xmm6, %xmm4 9573 ; SSE2-NEXT: movdqa %xmm2, %xmm6 9574 ; SSE2-NEXT: pxor %xmm5, %xmm6 9575 ; SSE2-NEXT: pxor %xmm0, %xmm5 9576 ; SSE2-NEXT: movdqa %xmm5, %xmm7 9577 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm7 9578 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9579 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm5 9580 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3] 9581 ; SSE2-NEXT: pand %xmm8, %xmm6 9582 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 9583 ; SSE2-NEXT: por %xmm6, %xmm5 9584 ; SSE2-NEXT: pand %xmm5, %xmm2 9585 ; SSE2-NEXT: pandn %xmm0, %xmm5 9586 ; SSE2-NEXT: por %xmm2, %xmm5 9587 ; SSE2-NEXT: pand %xmm4, %xmm3 9588 ; SSE2-NEXT: pandn %xmm1, %xmm4 9589 ; SSE2-NEXT: por %xmm3, %xmm4 9590 ; SSE2-NEXT: movdqa %xmm5, %xmm0 9591 ; SSE2-NEXT: movdqa %xmm4, %xmm1 9592 ; SSE2-NEXT: retq 9593 ; 9594 ; SSE4-LABEL: test171: 9595 ; SSE4: # BB#0: # %entry 9596 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9597 ; SSE4-NEXT: movdqa %xmm1, %xmm5 9598 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm5 9599 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9600 ; SSE4-NEXT: blendvpd %xmm2, %xmm4 9601 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9602 ; SSE4-NEXT: blendvpd %xmm3, %xmm1 9603 ; SSE4-NEXT: movapd %xmm4, %xmm0 9604 ; SSE4-NEXT: retq 9605 ; 9606 ; AVX1-LABEL: test171: 9607 ; AVX1: # BB#0: # %entry 9608 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9609 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 9610 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 9611 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 9612 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9613 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9614 ; AVX1-NEXT: retq 9615 ; 9616 ; AVX2-LABEL: test171: 9617 ; AVX2: # BB#0: # %entry 9618 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 9619 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9620 ; AVX2-NEXT: retq 9621 ; 9622 ; AVX512BW-LABEL: test171: 9623 ; AVX512BW: # BB#0: # %entry 9624 ; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 9625 ; AVX512BW-NEXT: retq 9626 entry: 9627 %cmp = icmp sgt <4 x i64> %a, %b 9628 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9629 ret <4 x i64> %sel 9630 } 9631 9632 define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) { 9633 ; SSE2-LABEL: test172: 9634 ; SSE2: # BB#0: # %entry 9635 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0] 9636 ; SSE2-NEXT: movdqa %xmm1, %xmm4 9637 ; SSE2-NEXT: pxor %xmm7, %xmm4 9638 ; SSE2-NEXT: movdqa %xmm3, %xmm5 9639 ; SSE2-NEXT: pxor %xmm7, %xmm5 9640 ; SSE2-NEXT: movdqa %xmm5, %xmm6 9641 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 9642 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 9643 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 9644 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9645 ; SSE2-NEXT: pand %xmm8, %xmm4 9646 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 9647 ; SSE2-NEXT: por %xmm4, %xmm8 9648 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 9649 ; SSE2-NEXT: movdqa %xmm8, %xmm9 9650 ; SSE2-NEXT: pxor %xmm4, %xmm9 9651 ; SSE2-NEXT: movdqa %xmm0, %xmm6 9652 ; SSE2-NEXT: pxor %xmm7, %xmm6 9653 ; SSE2-NEXT: pxor %xmm2, %xmm7 9654 ; SSE2-NEXT: movdqa %xmm7, %xmm5 9655 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 9656 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 9657 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 9658 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9659 ; SSE2-NEXT: pand %xmm10, %xmm6 9660 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 9661 ; SSE2-NEXT: por %xmm6, %xmm5 9662 ; SSE2-NEXT: pxor %xmm5, %xmm4 9663 ; SSE2-NEXT: pandn %xmm2, %xmm5 9664 ; SSE2-NEXT: pandn %xmm0, %xmm4 9665 ; SSE2-NEXT: por %xmm5, %xmm4 9666 ; SSE2-NEXT: pandn %xmm3, %xmm8 9667 ; SSE2-NEXT: pandn %xmm1, %xmm9 9668 ; SSE2-NEXT: por %xmm8, %xmm9 9669 ; SSE2-NEXT: movdqa %xmm4, %xmm0 9670 ; SSE2-NEXT: movdqa %xmm9, %xmm1 9671 ; SSE2-NEXT: retq 9672 ; 9673 ; SSE4-LABEL: test172: 9674 ; SSE4: # BB#0: # %entry 9675 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9676 ; SSE4-NEXT: movdqa %xmm3, %xmm5 9677 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm5 9678 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 9679 ; SSE4-NEXT: pxor %xmm0, %xmm5 9680 ; SSE4-NEXT: movdqa %xmm2, %xmm6 9681 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm6 9682 ; SSE4-NEXT: pxor %xmm6, %xmm0 9683 ; SSE4-NEXT: blendvpd %xmm2, %xmm4 9684 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9685 ; SSE4-NEXT: blendvpd %xmm3, %xmm1 9686 ; SSE4-NEXT: movapd %xmm4, %xmm0 9687 ; SSE4-NEXT: retq 9688 ; 9689 ; AVX1-LABEL: test172: 9690 ; AVX1: # BB#0: # %entry 9691 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9692 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 9693 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 9694 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 9695 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 9696 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm4 9697 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm3 9698 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9699 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9700 ; AVX1-NEXT: retq 9701 ; 9702 ; AVX2-LABEL: test172: 9703 ; AVX2: # BB#0: # %entry 9704 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 9705 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 9706 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 9707 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9708 ; AVX2-NEXT: retq 9709 ; 9710 ; AVX512BW-LABEL: test172: 9711 ; AVX512BW: # BB#0: # %entry 9712 ; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 9713 ; AVX512BW-NEXT: retq 9714 entry: 9715 %cmp = icmp sge <4 x i64> %a, %b 9716 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9717 ret <4 x i64> %sel 9718 } 9719 9720 define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) { 9721 ; SSE2-LABEL: test173: 9722 ; SSE2: # BB#0: # %entry 9723 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 9724 ; SSE2-NEXT: movdqa %xmm1, %xmm4 9725 ; SSE2-NEXT: pxor %xmm5, %xmm4 9726 ; SSE2-NEXT: movdqa %xmm3, %xmm6 9727 ; SSE2-NEXT: pxor %xmm5, %xmm6 9728 ; SSE2-NEXT: movdqa %xmm6, %xmm7 9729 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 9730 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9731 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm6 9732 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 9733 ; SSE2-NEXT: pand %xmm8, %xmm6 9734 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3] 9735 ; SSE2-NEXT: por %xmm6, %xmm4 9736 ; SSE2-NEXT: movdqa %xmm0, %xmm6 9737 ; SSE2-NEXT: pxor %xmm5, %xmm6 9738 ; SSE2-NEXT: pxor %xmm2, %xmm5 9739 ; SSE2-NEXT: movdqa %xmm5, %xmm7 9740 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm7 9741 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9742 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm5 9743 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3] 9744 ; SSE2-NEXT: pand %xmm8, %xmm6 9745 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 9746 ; SSE2-NEXT: por %xmm6, %xmm5 9747 ; SSE2-NEXT: pand %xmm5, %xmm2 9748 ; SSE2-NEXT: pandn %xmm0, %xmm5 9749 ; SSE2-NEXT: por %xmm2, %xmm5 9750 ; SSE2-NEXT: pand %xmm4, %xmm3 9751 ; SSE2-NEXT: pandn %xmm1, %xmm4 9752 ; SSE2-NEXT: por %xmm3, %xmm4 9753 ; SSE2-NEXT: movdqa %xmm5, %xmm0 9754 ; SSE2-NEXT: movdqa %xmm4, %xmm1 9755 ; SSE2-NEXT: retq 9756 ; 9757 ; SSE4-LABEL: test173: 9758 ; SSE4: # BB#0: # %entry 9759 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9760 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9761 ; SSE4-NEXT: movdqa %xmm1, %xmm6 9762 ; SSE4-NEXT: pxor %xmm0, %xmm6 9763 ; SSE4-NEXT: movdqa %xmm3, %xmm5 9764 ; SSE4-NEXT: pxor %xmm0, %xmm5 9765 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9766 ; SSE4-NEXT: movdqa %xmm4, %xmm6 9767 ; SSE4-NEXT: pxor %xmm0, %xmm6 9768 ; SSE4-NEXT: pxor %xmm2, %xmm0 9769 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9770 ; SSE4-NEXT: blendvpd %xmm2, %xmm4 9771 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9772 ; SSE4-NEXT: blendvpd %xmm3, %xmm1 9773 ; SSE4-NEXT: movapd %xmm4, %xmm0 9774 ; SSE4-NEXT: retq 9775 ; 9776 ; AVX1-LABEL: test173: 9777 ; AVX1: # BB#0: # %entry 9778 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9779 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9780 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9781 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 9782 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9783 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9784 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm4 9785 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3 9786 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9787 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9788 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9789 ; AVX1-NEXT: retq 9790 ; 9791 ; AVX2-LABEL: test173: 9792 ; AVX2: # BB#0: # %entry 9793 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9794 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 9795 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 9796 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9797 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9798 ; AVX2-NEXT: retq 9799 ; 9800 ; AVX512BW-LABEL: test173: 9801 ; AVX512BW: # BB#0: # %entry 9802 ; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 9803 ; AVX512BW-NEXT: retq 9804 entry: 9805 %cmp = icmp ult <4 x i64> %a, %b 9806 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9807 ret <4 x i64> %sel 9808 } 9809 9810 define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) { 9811 ; SSE2-LABEL: test174: 9812 ; SSE2: # BB#0: # %entry 9813 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648] 9814 ; SSE2-NEXT: movdqa %xmm3, %xmm4 9815 ; SSE2-NEXT: pxor %xmm7, %xmm4 9816 ; SSE2-NEXT: movdqa %xmm1, %xmm5 9817 ; SSE2-NEXT: pxor %xmm7, %xmm5 9818 ; SSE2-NEXT: movdqa %xmm5, %xmm6 9819 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 9820 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 9821 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 9822 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9823 ; SSE2-NEXT: pand %xmm8, %xmm4 9824 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 9825 ; SSE2-NEXT: por %xmm4, %xmm8 9826 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 9827 ; SSE2-NEXT: movdqa %xmm8, %xmm9 9828 ; SSE2-NEXT: pxor %xmm4, %xmm9 9829 ; SSE2-NEXT: movdqa %xmm2, %xmm6 9830 ; SSE2-NEXT: pxor %xmm7, %xmm6 9831 ; SSE2-NEXT: pxor %xmm0, %xmm7 9832 ; SSE2-NEXT: movdqa %xmm7, %xmm5 9833 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 9834 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 9835 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 9836 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9837 ; SSE2-NEXT: pand %xmm10, %xmm6 9838 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 9839 ; SSE2-NEXT: por %xmm6, %xmm5 9840 ; SSE2-NEXT: pxor %xmm5, %xmm4 9841 ; SSE2-NEXT: pandn %xmm2, %xmm5 9842 ; SSE2-NEXT: pandn %xmm0, %xmm4 9843 ; SSE2-NEXT: por %xmm5, %xmm4 9844 ; SSE2-NEXT: pandn %xmm3, %xmm8 9845 ; SSE2-NEXT: pandn %xmm1, %xmm9 9846 ; SSE2-NEXT: por %xmm8, %xmm9 9847 ; SSE2-NEXT: movdqa %xmm4, %xmm0 9848 ; SSE2-NEXT: movdqa %xmm9, %xmm1 9849 ; SSE2-NEXT: retq 9850 ; 9851 ; SSE4-LABEL: test174: 9852 ; SSE4: # BB#0: # %entry 9853 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9854 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9855 ; SSE4-NEXT: movdqa %xmm3, %xmm6 9856 ; SSE4-NEXT: pxor %xmm0, %xmm6 9857 ; SSE4-NEXT: movdqa %xmm1, %xmm5 9858 ; SSE4-NEXT: pxor %xmm0, %xmm5 9859 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9860 ; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 9861 ; SSE4-NEXT: pxor %xmm6, %xmm5 9862 ; SSE4-NEXT: movdqa %xmm2, %xmm7 9863 ; SSE4-NEXT: pxor %xmm0, %xmm7 9864 ; SSE4-NEXT: pxor %xmm4, %xmm0 9865 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 9866 ; SSE4-NEXT: pxor %xmm6, %xmm0 9867 ; SSE4-NEXT: blendvpd %xmm2, %xmm4 9868 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9869 ; SSE4-NEXT: blendvpd %xmm3, %xmm1 9870 ; SSE4-NEXT: movapd %xmm4, %xmm0 9871 ; SSE4-NEXT: retq 9872 ; 9873 ; AVX1-LABEL: test174: 9874 ; AVX1: # BB#0: # %entry 9875 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9876 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9877 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9878 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 9879 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9880 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9881 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4 9882 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2 9883 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm5 9884 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3 9885 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3 9886 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3 9887 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9888 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9889 ; AVX1-NEXT: retq 9890 ; 9891 ; AVX2-LABEL: test174: 9892 ; AVX2: # BB#0: # %entry 9893 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9894 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 9895 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 9896 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9897 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 9898 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 9899 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9900 ; AVX2-NEXT: retq 9901 ; 9902 ; AVX512BW-LABEL: test174: 9903 ; AVX512BW: # BB#0: # %entry 9904 ; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 9905 ; AVX512BW-NEXT: retq 9906 entry: 9907 %cmp = icmp ule <4 x i64> %a, %b 9908 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9909 ret <4 x i64> %sel 9910 } 9911 9912 define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) { 9913 ; SSE2-LABEL: test175: 9914 ; SSE2: # BB#0: # %entry 9915 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 9916 ; SSE2-NEXT: movdqa %xmm3, %xmm4 9917 ; SSE2-NEXT: pxor %xmm5, %xmm4 9918 ; SSE2-NEXT: movdqa %xmm1, %xmm6 9919 ; SSE2-NEXT: pxor %xmm5, %xmm6 9920 ; SSE2-NEXT: movdqa %xmm6, %xmm7 9921 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 9922 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9923 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm6 9924 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 9925 ; SSE2-NEXT: pand %xmm8, %xmm6 9926 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3] 9927 ; SSE2-NEXT: por %xmm6, %xmm4 9928 ; SSE2-NEXT: movdqa %xmm2, %xmm6 9929 ; SSE2-NEXT: pxor %xmm5, %xmm6 9930 ; SSE2-NEXT: pxor %xmm0, %xmm5 9931 ; SSE2-NEXT: movdqa %xmm5, %xmm7 9932 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm7 9933 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9934 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm5 9935 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3] 9936 ; SSE2-NEXT: pand %xmm8, %xmm6 9937 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 9938 ; SSE2-NEXT: por %xmm6, %xmm5 9939 ; SSE2-NEXT: pand %xmm5, %xmm2 9940 ; SSE2-NEXT: pandn %xmm0, %xmm5 9941 ; SSE2-NEXT: por %xmm2, %xmm5 9942 ; SSE2-NEXT: pand %xmm4, %xmm3 9943 ; SSE2-NEXT: pandn %xmm1, %xmm4 9944 ; SSE2-NEXT: por %xmm3, %xmm4 9945 ; SSE2-NEXT: movdqa %xmm5, %xmm0 9946 ; SSE2-NEXT: movdqa %xmm4, %xmm1 9947 ; SSE2-NEXT: retq 9948 ; 9949 ; SSE4-LABEL: test175: 9950 ; SSE4: # BB#0: # %entry 9951 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9952 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9953 ; SSE4-NEXT: movdqa %xmm3, %xmm6 9954 ; SSE4-NEXT: pxor %xmm0, %xmm6 9955 ; SSE4-NEXT: movdqa %xmm1, %xmm5 9956 ; SSE4-NEXT: pxor %xmm0, %xmm5 9957 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9958 ; SSE4-NEXT: movdqa %xmm2, %xmm6 9959 ; SSE4-NEXT: pxor %xmm0, %xmm6 9960 ; SSE4-NEXT: pxor %xmm4, %xmm0 9961 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9962 ; SSE4-NEXT: blendvpd %xmm2, %xmm4 9963 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9964 ; SSE4-NEXT: blendvpd %xmm3, %xmm1 9965 ; SSE4-NEXT: movapd %xmm4, %xmm0 9966 ; SSE4-NEXT: retq 9967 ; 9968 ; AVX1-LABEL: test175: 9969 ; AVX1: # BB#0: # %entry 9970 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9971 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9972 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9973 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 9974 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9975 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9976 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm4 9977 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3 9978 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9979 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9980 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9981 ; AVX1-NEXT: retq 9982 ; 9983 ; AVX2-LABEL: test175: 9984 ; AVX2: # BB#0: # %entry 9985 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9986 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 9987 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 9988 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9989 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9990 ; AVX2-NEXT: retq 9991 ; 9992 ; AVX512BW-LABEL: test175: 9993 ; AVX512BW: # BB#0: # %entry 9994 ; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 9995 ; AVX512BW-NEXT: retq 9996 entry: 9997 %cmp = icmp ugt <4 x i64> %a, %b 9998 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9999 ret <4 x i64> %sel 10000 } 10001 10002 define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) { 10003 ; SSE2-LABEL: test176: 10004 ; SSE2: # BB#0: # %entry 10005 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648] 10006 ; SSE2-NEXT: movdqa %xmm1, %xmm4 10007 ; SSE2-NEXT: pxor %xmm7, %xmm4 10008 ; SSE2-NEXT: movdqa %xmm3, %xmm5 10009 ; SSE2-NEXT: pxor %xmm7, %xmm5 10010 ; SSE2-NEXT: movdqa %xmm5, %xmm6 10011 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 10012 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 10013 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 10014 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 10015 ; SSE2-NEXT: pand %xmm8, %xmm4 10016 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 10017 ; SSE2-NEXT: por %xmm4, %xmm8 10018 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 10019 ; SSE2-NEXT: movdqa %xmm8, %xmm9 10020 ; SSE2-NEXT: pxor %xmm4, %xmm9 10021 ; SSE2-NEXT: movdqa %xmm0, %xmm6 10022 ; SSE2-NEXT: pxor %xmm7, %xmm6 10023 ; SSE2-NEXT: pxor %xmm2, %xmm7 10024 ; SSE2-NEXT: movdqa %xmm7, %xmm5 10025 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 10026 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 10027 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 10028 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 10029 ; SSE2-NEXT: pand %xmm10, %xmm6 10030 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 10031 ; SSE2-NEXT: por %xmm6, %xmm5 10032 ; SSE2-NEXT: pxor %xmm5, %xmm4 10033 ; SSE2-NEXT: pandn %xmm2, %xmm5 10034 ; SSE2-NEXT: pandn %xmm0, %xmm4 10035 ; SSE2-NEXT: por %xmm5, %xmm4 10036 ; SSE2-NEXT: pandn %xmm3, %xmm8 10037 ; SSE2-NEXT: pandn %xmm1, %xmm9 10038 ; SSE2-NEXT: por %xmm8, %xmm9 10039 ; SSE2-NEXT: movdqa %xmm4, %xmm0 10040 ; SSE2-NEXT: movdqa %xmm9, %xmm1 10041 ; SSE2-NEXT: retq 10042 ; 10043 ; SSE4-LABEL: test176: 10044 ; SSE4: # BB#0: # %entry 10045 ; SSE4-NEXT: movdqa %xmm0, %xmm4 10046 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10047 ; SSE4-NEXT: movdqa %xmm1, %xmm6 10048 ; SSE4-NEXT: pxor %xmm0, %xmm6 10049 ; SSE4-NEXT: movdqa %xmm3, %xmm5 10050 ; SSE4-NEXT: pxor %xmm0, %xmm5 10051 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 10052 ; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 10053 ; SSE4-NEXT: pxor %xmm6, %xmm5 10054 ; SSE4-NEXT: movdqa %xmm4, %xmm7 10055 ; SSE4-NEXT: pxor %xmm0, %xmm7 10056 ; SSE4-NEXT: pxor %xmm2, %xmm0 10057 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 10058 ; SSE4-NEXT: pxor %xmm6, %xmm0 10059 ; SSE4-NEXT: blendvpd %xmm2, %xmm4 10060 ; SSE4-NEXT: movdqa %xmm5, %xmm0 10061 ; SSE4-NEXT: blendvpd %xmm3, %xmm1 10062 ; SSE4-NEXT: movapd %xmm4, %xmm0 10063 ; SSE4-NEXT: retq 10064 ; 10065 ; AVX1-LABEL: test176: 10066 ; AVX1: # BB#0: # %entry 10067 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 10068 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 10069 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 10070 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 10071 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 10072 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 10073 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4 10074 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2 10075 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm5 10076 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3 10077 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3 10078 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3 10079 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 10080 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 10081 ; AVX1-NEXT: retq 10082 ; 10083 ; AVX2-LABEL: test176: 10084 ; AVX2: # BB#0: # %entry 10085 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 10086 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 10087 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 10088 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 10089 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 10090 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 10091 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 10092 ; AVX2-NEXT: retq 10093 ; 10094 ; AVX512BW-LABEL: test176: 10095 ; AVX512BW: # BB#0: # %entry 10096 ; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 10097 ; AVX512BW-NEXT: retq 10098 entry: 10099 %cmp = icmp uge <4 x i64> %a, %b 10100 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 10101 ret <4 x i64> %sel 10102 } 10103 10104 define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) { 10105 ; SSE2-LABEL: test177: 10106 ; SSE2: # BB#0: # %entry 10107 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10108 ; SSE2-NEXT: movdqa %xmm0, %xmm3 10109 ; SSE2-NEXT: pxor %xmm2, %xmm3 10110 ; SSE2-NEXT: pxor %xmm1, %xmm2 10111 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10112 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10113 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10114 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10115 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10116 ; SSE2-NEXT: pand %xmm5, %xmm2 10117 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10118 ; SSE2-NEXT: por %xmm2, %xmm3 10119 ; SSE2-NEXT: pand %xmm3, %xmm0 10120 ; SSE2-NEXT: pandn %xmm1, %xmm3 10121 ; SSE2-NEXT: por %xmm3, %xmm0 10122 ; SSE2-NEXT: retq 10123 ; 10124 ; SSE4-LABEL: test177: 10125 ; SSE4: # BB#0: # %entry 10126 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10127 ; SSE4-NEXT: movdqa %xmm1, %xmm0 10128 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 10129 ; SSE4-NEXT: blendvpd %xmm2, %xmm1 10130 ; SSE4-NEXT: movapd %xmm1, %xmm0 10131 ; SSE4-NEXT: retq 10132 ; 10133 ; AVX1-LABEL: test177: 10134 ; AVX1: # BB#0: # %entry 10135 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10136 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10137 ; AVX1-NEXT: retq 10138 ; 10139 ; AVX2-LABEL: test177: 10140 ; AVX2: # BB#0: # %entry 10141 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10142 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10143 ; AVX2-NEXT: retq 10144 ; 10145 ; AVX512BW-LABEL: test177: 10146 ; AVX512BW: # BB#0: # %entry 10147 ; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 10148 ; AVX512BW-NEXT: retq 10149 entry: 10150 %cmp = icmp slt <2 x i64> %a, %b 10151 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10152 ret <2 x i64> %sel 10153 } 10154 10155 define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) { 10156 ; SSE2-LABEL: test178: 10157 ; SSE2: # BB#0: # %entry 10158 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10159 ; SSE2-NEXT: movdqa %xmm1, %xmm3 10160 ; SSE2-NEXT: pxor %xmm2, %xmm3 10161 ; SSE2-NEXT: pxor %xmm0, %xmm2 10162 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10163 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10164 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10165 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10166 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10167 ; SSE2-NEXT: pand %xmm5, %xmm2 10168 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10169 ; SSE2-NEXT: por %xmm2, %xmm3 10170 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10171 ; SSE2-NEXT: pxor %xmm3, %xmm2 10172 ; SSE2-NEXT: pandn %xmm0, %xmm3 10173 ; SSE2-NEXT: pandn %xmm1, %xmm2 10174 ; SSE2-NEXT: por %xmm3, %xmm2 10175 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10176 ; SSE2-NEXT: retq 10177 ; 10178 ; SSE4-LABEL: test178: 10179 ; SSE4: # BB#0: # %entry 10180 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10181 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 10182 ; SSE4-NEXT: pcmpeqd %xmm3, %xmm3 10183 ; SSE4-NEXT: pxor %xmm3, %xmm0 10184 ; SSE4-NEXT: blendvpd %xmm2, %xmm1 10185 ; SSE4-NEXT: movapd %xmm1, %xmm0 10186 ; SSE4-NEXT: retq 10187 ; 10188 ; AVX1-LABEL: test178: 10189 ; AVX1: # BB#0: # %entry 10190 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10191 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10192 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10193 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10194 ; AVX1-NEXT: retq 10195 ; 10196 ; AVX2-LABEL: test178: 10197 ; AVX2: # BB#0: # %entry 10198 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10199 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10200 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10201 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10202 ; AVX2-NEXT: retq 10203 ; 10204 ; AVX512BW-LABEL: test178: 10205 ; AVX512BW: # BB#0: # %entry 10206 ; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 10207 ; AVX512BW-NEXT: retq 10208 entry: 10209 %cmp = icmp sle <2 x i64> %a, %b 10210 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10211 ret <2 x i64> %sel 10212 } 10213 10214 define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) { 10215 ; SSE2-LABEL: test179: 10216 ; SSE2: # BB#0: # %entry 10217 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10218 ; SSE2-NEXT: movdqa %xmm1, %xmm3 10219 ; SSE2-NEXT: pxor %xmm2, %xmm3 10220 ; SSE2-NEXT: pxor %xmm0, %xmm2 10221 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10222 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10223 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10224 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10225 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10226 ; SSE2-NEXT: pand %xmm5, %xmm2 10227 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10228 ; SSE2-NEXT: por %xmm2, %xmm3 10229 ; SSE2-NEXT: pand %xmm3, %xmm0 10230 ; SSE2-NEXT: pandn %xmm1, %xmm3 10231 ; SSE2-NEXT: por %xmm3, %xmm0 10232 ; SSE2-NEXT: retq 10233 ; 10234 ; SSE4-LABEL: test179: 10235 ; SSE4: # BB#0: # %entry 10236 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10237 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 10238 ; SSE4-NEXT: blendvpd %xmm2, %xmm1 10239 ; SSE4-NEXT: movapd %xmm1, %xmm0 10240 ; SSE4-NEXT: retq 10241 ; 10242 ; AVX1-LABEL: test179: 10243 ; AVX1: # BB#0: # %entry 10244 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10245 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10246 ; AVX1-NEXT: retq 10247 ; 10248 ; AVX2-LABEL: test179: 10249 ; AVX2: # BB#0: # %entry 10250 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10251 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10252 ; AVX2-NEXT: retq 10253 ; 10254 ; AVX512BW-LABEL: test179: 10255 ; AVX512BW: # BB#0: # %entry 10256 ; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 10257 ; AVX512BW-NEXT: retq 10258 entry: 10259 %cmp = icmp sgt <2 x i64> %a, %b 10260 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10261 ret <2 x i64> %sel 10262 } 10263 10264 define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) { 10265 ; SSE2-LABEL: test180: 10266 ; SSE2: # BB#0: # %entry 10267 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10268 ; SSE2-NEXT: movdqa %xmm0, %xmm3 10269 ; SSE2-NEXT: pxor %xmm2, %xmm3 10270 ; SSE2-NEXT: pxor %xmm1, %xmm2 10271 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10272 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10273 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10274 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10275 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10276 ; SSE2-NEXT: pand %xmm5, %xmm2 10277 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10278 ; SSE2-NEXT: por %xmm2, %xmm3 10279 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10280 ; SSE2-NEXT: pxor %xmm3, %xmm2 10281 ; SSE2-NEXT: pandn %xmm0, %xmm3 10282 ; SSE2-NEXT: pandn %xmm1, %xmm2 10283 ; SSE2-NEXT: por %xmm3, %xmm2 10284 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10285 ; SSE2-NEXT: retq 10286 ; 10287 ; SSE4-LABEL: test180: 10288 ; SSE4: # BB#0: # %entry 10289 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10290 ; SSE4-NEXT: movdqa %xmm1, %xmm3 10291 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm3 10292 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 10293 ; SSE4-NEXT: pxor %xmm3, %xmm0 10294 ; SSE4-NEXT: blendvpd %xmm2, %xmm1 10295 ; SSE4-NEXT: movapd %xmm1, %xmm0 10296 ; SSE4-NEXT: retq 10297 ; 10298 ; AVX1-LABEL: test180: 10299 ; AVX1: # BB#0: # %entry 10300 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10301 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10302 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10303 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10304 ; AVX1-NEXT: retq 10305 ; 10306 ; AVX2-LABEL: test180: 10307 ; AVX2: # BB#0: # %entry 10308 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10309 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10310 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10311 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10312 ; AVX2-NEXT: retq 10313 ; 10314 ; AVX512BW-LABEL: test180: 10315 ; AVX512BW: # BB#0: # %entry 10316 ; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 10317 ; AVX512BW-NEXT: retq 10318 entry: 10319 %cmp = icmp sge <2 x i64> %a, %b 10320 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10321 ret <2 x i64> %sel 10322 } 10323 10324 define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) { 10325 ; SSE2-LABEL: test181: 10326 ; SSE2: # BB#0: # %entry 10327 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10328 ; SSE2-NEXT: movdqa %xmm0, %xmm3 10329 ; SSE2-NEXT: pxor %xmm2, %xmm3 10330 ; SSE2-NEXT: pxor %xmm1, %xmm2 10331 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10332 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10333 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10334 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10335 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10336 ; SSE2-NEXT: pand %xmm5, %xmm2 10337 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10338 ; SSE2-NEXT: por %xmm2, %xmm3 10339 ; SSE2-NEXT: pand %xmm3, %xmm0 10340 ; SSE2-NEXT: pandn %xmm1, %xmm3 10341 ; SSE2-NEXT: por %xmm3, %xmm0 10342 ; SSE2-NEXT: retq 10343 ; 10344 ; SSE4-LABEL: test181: 10345 ; SSE4: # BB#0: # %entry 10346 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10347 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10348 ; SSE4-NEXT: movdqa %xmm2, %xmm3 10349 ; SSE4-NEXT: pxor %xmm0, %xmm3 10350 ; SSE4-NEXT: pxor %xmm1, %xmm0 10351 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10352 ; SSE4-NEXT: blendvpd %xmm2, %xmm1 10353 ; SSE4-NEXT: movapd %xmm1, %xmm0 10354 ; SSE4-NEXT: retq 10355 ; 10356 ; AVX1-LABEL: test181: 10357 ; AVX1: # BB#0: # %entry 10358 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10359 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 10360 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 10361 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10362 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10363 ; AVX1-NEXT: retq 10364 ; 10365 ; AVX2-LABEL: test181: 10366 ; AVX2: # BB#0: # %entry 10367 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10368 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 10369 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 10370 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10371 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10372 ; AVX2-NEXT: retq 10373 ; 10374 ; AVX512BW-LABEL: test181: 10375 ; AVX512BW: # BB#0: # %entry 10376 ; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 10377 ; AVX512BW-NEXT: retq 10378 entry: 10379 %cmp = icmp ult <2 x i64> %a, %b 10380 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10381 ret <2 x i64> %sel 10382 } 10383 10384 define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) { 10385 ; SSE2-LABEL: test182: 10386 ; SSE2: # BB#0: # %entry 10387 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10388 ; SSE2-NEXT: movdqa %xmm1, %xmm3 10389 ; SSE2-NEXT: pxor %xmm2, %xmm3 10390 ; SSE2-NEXT: pxor %xmm0, %xmm2 10391 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10392 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10393 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10394 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10395 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10396 ; SSE2-NEXT: pand %xmm5, %xmm2 10397 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10398 ; SSE2-NEXT: por %xmm2, %xmm3 10399 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10400 ; SSE2-NEXT: pxor %xmm3, %xmm2 10401 ; SSE2-NEXT: pandn %xmm0, %xmm3 10402 ; SSE2-NEXT: pandn %xmm1, %xmm2 10403 ; SSE2-NEXT: por %xmm3, %xmm2 10404 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10405 ; SSE2-NEXT: retq 10406 ; 10407 ; SSE4-LABEL: test182: 10408 ; SSE4: # BB#0: # %entry 10409 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10410 ; SSE4-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 10411 ; SSE4-NEXT: movdqa %xmm1, %xmm0 10412 ; SSE4-NEXT: pxor %xmm3, %xmm0 10413 ; SSE4-NEXT: pxor %xmm2, %xmm3 10414 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm3 10415 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 10416 ; SSE4-NEXT: pxor %xmm3, %xmm0 10417 ; SSE4-NEXT: blendvpd %xmm2, %xmm1 10418 ; SSE4-NEXT: movapd %xmm1, %xmm0 10419 ; SSE4-NEXT: retq 10420 ; 10421 ; AVX1-LABEL: test182: 10422 ; AVX1: # BB#0: # %entry 10423 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10424 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 10425 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 10426 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10427 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10428 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10429 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10430 ; AVX1-NEXT: retq 10431 ; 10432 ; AVX2-LABEL: test182: 10433 ; AVX2: # BB#0: # %entry 10434 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10435 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 10436 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 10437 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10438 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10439 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10440 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10441 ; AVX2-NEXT: retq 10442 ; 10443 ; AVX512BW-LABEL: test182: 10444 ; AVX512BW: # BB#0: # %entry 10445 ; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 10446 ; AVX512BW-NEXT: retq 10447 entry: 10448 %cmp = icmp ule <2 x i64> %a, %b 10449 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10450 ret <2 x i64> %sel 10451 } 10452 10453 define <2 x i64> @test183(<2 x i64> %a, <2 x i64> %b) { 10454 ; SSE2-LABEL: test183: 10455 ; SSE2: # BB#0: # %entry 10456 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10457 ; SSE2-NEXT: movdqa %xmm1, %xmm3 10458 ; SSE2-NEXT: pxor %xmm2, %xmm3 10459 ; SSE2-NEXT: pxor %xmm0, %xmm2 10460 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10461 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10462 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10463 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10464 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10465 ; SSE2-NEXT: pand %xmm5, %xmm2 10466 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10467 ; SSE2-NEXT: por %xmm2, %xmm3 10468 ; SSE2-NEXT: pand %xmm3, %xmm0 10469 ; SSE2-NEXT: pandn %xmm1, %xmm3 10470 ; SSE2-NEXT: por %xmm3, %xmm0 10471 ; SSE2-NEXT: retq 10472 ; 10473 ; SSE4-LABEL: test183: 10474 ; SSE4: # BB#0: # %entry 10475 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10476 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10477 ; SSE4-NEXT: movdqa %xmm1, %xmm3 10478 ; SSE4-NEXT: pxor %xmm0, %xmm3 10479 ; SSE4-NEXT: pxor %xmm2, %xmm0 10480 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10481 ; SSE4-NEXT: blendvpd %xmm2, %xmm1 10482 ; SSE4-NEXT: movapd %xmm1, %xmm0 10483 ; SSE4-NEXT: retq 10484 ; 10485 ; AVX1-LABEL: test183: 10486 ; AVX1: # BB#0: # %entry 10487 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10488 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 10489 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 10490 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10491 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10492 ; AVX1-NEXT: retq 10493 ; 10494 ; AVX2-LABEL: test183: 10495 ; AVX2: # BB#0: # %entry 10496 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10497 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 10498 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 10499 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10500 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10501 ; AVX2-NEXT: retq 10502 ; 10503 ; AVX512BW-LABEL: test183: 10504 ; AVX512BW: # BB#0: # %entry 10505 ; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 10506 ; AVX512BW-NEXT: retq 10507 entry: 10508 %cmp = icmp ugt <2 x i64> %a, %b 10509 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10510 ret <2 x i64> %sel 10511 } 10512 10513 define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) { 10514 ; SSE2-LABEL: test184: 10515 ; SSE2: # BB#0: # %entry 10516 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10517 ; SSE2-NEXT: movdqa %xmm0, %xmm3 10518 ; SSE2-NEXT: pxor %xmm2, %xmm3 10519 ; SSE2-NEXT: pxor %xmm1, %xmm2 10520 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10521 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10522 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10523 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10524 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10525 ; SSE2-NEXT: pand %xmm5, %xmm2 10526 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10527 ; SSE2-NEXT: por %xmm2, %xmm3 10528 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10529 ; SSE2-NEXT: pxor %xmm3, %xmm2 10530 ; SSE2-NEXT: pandn %xmm0, %xmm3 10531 ; SSE2-NEXT: pandn %xmm1, %xmm2 10532 ; SSE2-NEXT: por %xmm3, %xmm2 10533 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10534 ; SSE2-NEXT: retq 10535 ; 10536 ; SSE4-LABEL: test184: 10537 ; SSE4: # BB#0: # %entry 10538 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10539 ; SSE4-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 10540 ; SSE4-NEXT: pxor %xmm3, %xmm0 10541 ; SSE4-NEXT: pxor %xmm1, %xmm3 10542 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm3 10543 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 10544 ; SSE4-NEXT: pxor %xmm3, %xmm0 10545 ; SSE4-NEXT: blendvpd %xmm2, %xmm1 10546 ; SSE4-NEXT: movapd %xmm1, %xmm0 10547 ; SSE4-NEXT: retq 10548 ; 10549 ; AVX1-LABEL: test184: 10550 ; AVX1: # BB#0: # %entry 10551 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10552 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 10553 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 10554 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10555 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10556 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10557 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10558 ; AVX1-NEXT: retq 10559 ; 10560 ; AVX2-LABEL: test184: 10561 ; AVX2: # BB#0: # %entry 10562 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10563 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 10564 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 10565 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10566 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10567 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10568 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10569 ; AVX2-NEXT: retq 10570 ; 10571 ; AVX512BW-LABEL: test184: 10572 ; AVX512BW: # BB#0: # %entry 10573 ; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 10574 ; AVX512BW-NEXT: retq 10575 entry: 10576 %cmp = icmp uge <2 x i64> %a, %b 10577 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10578 ret <2 x i64> %sel 10579 } 10580 10581 define <2 x i64> @test185(<2 x i64> %a, <2 x i64> %b) { 10582 ; SSE2-LABEL: test185: 10583 ; SSE2: # BB#0: # %entry 10584 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10585 ; SSE2-NEXT: movdqa %xmm0, %xmm3 10586 ; SSE2-NEXT: pxor %xmm2, %xmm3 10587 ; SSE2-NEXT: pxor %xmm1, %xmm2 10588 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10589 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10590 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10591 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10592 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3] 10593 ; SSE2-NEXT: pand %xmm5, %xmm3 10594 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 10595 ; SSE2-NEXT: por %xmm3, %xmm2 10596 ; SSE2-NEXT: pand %xmm2, %xmm1 10597 ; SSE2-NEXT: pandn %xmm0, %xmm2 10598 ; SSE2-NEXT: por %xmm1, %xmm2 10599 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10600 ; SSE2-NEXT: retq 10601 ; 10602 ; SSE4-LABEL: test185: 10603 ; SSE4: # BB#0: # %entry 10604 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10605 ; SSE4-NEXT: movdqa %xmm1, %xmm0 10606 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 10607 ; SSE4-NEXT: blendvpd %xmm1, %xmm2 10608 ; SSE4-NEXT: movapd %xmm2, %xmm0 10609 ; SSE4-NEXT: retq 10610 ; 10611 ; AVX1-LABEL: test185: 10612 ; AVX1: # BB#0: # %entry 10613 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10614 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10615 ; AVX1-NEXT: retq 10616 ; 10617 ; AVX2-LABEL: test185: 10618 ; AVX2: # BB#0: # %entry 10619 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10620 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10621 ; AVX2-NEXT: retq 10622 ; 10623 ; AVX512BW-LABEL: test185: 10624 ; AVX512BW: # BB#0: # %entry 10625 ; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 10626 ; AVX512BW-NEXT: retq 10627 entry: 10628 %cmp = icmp slt <2 x i64> %a, %b 10629 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10630 ret <2 x i64> %sel 10631 } 10632 10633 define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) { 10634 ; SSE2-LABEL: test186: 10635 ; SSE2: # BB#0: # %entry 10636 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10637 ; SSE2-NEXT: movdqa %xmm1, %xmm3 10638 ; SSE2-NEXT: pxor %xmm2, %xmm3 10639 ; SSE2-NEXT: pxor %xmm0, %xmm2 10640 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10641 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10642 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10643 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10644 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10645 ; SSE2-NEXT: pand %xmm5, %xmm2 10646 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10647 ; SSE2-NEXT: por %xmm2, %xmm3 10648 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10649 ; SSE2-NEXT: pxor %xmm3, %xmm2 10650 ; SSE2-NEXT: pandn %xmm1, %xmm3 10651 ; SSE2-NEXT: pandn %xmm0, %xmm2 10652 ; SSE2-NEXT: por %xmm3, %xmm2 10653 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10654 ; SSE2-NEXT: retq 10655 ; 10656 ; SSE4-LABEL: test186: 10657 ; SSE4: # BB#0: # %entry 10658 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10659 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 10660 ; SSE4-NEXT: pcmpeqd %xmm3, %xmm3 10661 ; SSE4-NEXT: pxor %xmm3, %xmm0 10662 ; SSE4-NEXT: blendvpd %xmm1, %xmm2 10663 ; SSE4-NEXT: movapd %xmm2, %xmm0 10664 ; SSE4-NEXT: retq 10665 ; 10666 ; AVX1-LABEL: test186: 10667 ; AVX1: # BB#0: # %entry 10668 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10669 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10670 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10671 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10672 ; AVX1-NEXT: retq 10673 ; 10674 ; AVX2-LABEL: test186: 10675 ; AVX2: # BB#0: # %entry 10676 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10677 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10678 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10679 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10680 ; AVX2-NEXT: retq 10681 ; 10682 ; AVX512BW-LABEL: test186: 10683 ; AVX512BW: # BB#0: # %entry 10684 ; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 10685 ; AVX512BW-NEXT: retq 10686 entry: 10687 %cmp = icmp sle <2 x i64> %a, %b 10688 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10689 ret <2 x i64> %sel 10690 } 10691 10692 define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) { 10693 ; SSE2-LABEL: test187: 10694 ; SSE2: # BB#0: # %entry 10695 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10696 ; SSE2-NEXT: movdqa %xmm1, %xmm3 10697 ; SSE2-NEXT: pxor %xmm2, %xmm3 10698 ; SSE2-NEXT: pxor %xmm0, %xmm2 10699 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10700 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10701 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10702 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10703 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3] 10704 ; SSE2-NEXT: pand %xmm5, %xmm3 10705 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 10706 ; SSE2-NEXT: por %xmm3, %xmm2 10707 ; SSE2-NEXT: pand %xmm2, %xmm1 10708 ; SSE2-NEXT: pandn %xmm0, %xmm2 10709 ; SSE2-NEXT: por %xmm1, %xmm2 10710 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10711 ; SSE2-NEXT: retq 10712 ; 10713 ; SSE4-LABEL: test187: 10714 ; SSE4: # BB#0: # %entry 10715 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10716 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 10717 ; SSE4-NEXT: blendvpd %xmm1, %xmm2 10718 ; SSE4-NEXT: movapd %xmm2, %xmm0 10719 ; SSE4-NEXT: retq 10720 ; 10721 ; AVX1-LABEL: test187: 10722 ; AVX1: # BB#0: # %entry 10723 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10724 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10725 ; AVX1-NEXT: retq 10726 ; 10727 ; AVX2-LABEL: test187: 10728 ; AVX2: # BB#0: # %entry 10729 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10730 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10731 ; AVX2-NEXT: retq 10732 ; 10733 ; AVX512BW-LABEL: test187: 10734 ; AVX512BW: # BB#0: # %entry 10735 ; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 10736 ; AVX512BW-NEXT: retq 10737 entry: 10738 %cmp = icmp sgt <2 x i64> %a, %b 10739 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10740 ret <2 x i64> %sel 10741 } 10742 10743 define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) { 10744 ; SSE2-LABEL: test188: 10745 ; SSE2: # BB#0: # %entry 10746 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10747 ; SSE2-NEXT: movdqa %xmm0, %xmm3 10748 ; SSE2-NEXT: pxor %xmm2, %xmm3 10749 ; SSE2-NEXT: pxor %xmm1, %xmm2 10750 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10751 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10752 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10753 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10754 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10755 ; SSE2-NEXT: pand %xmm5, %xmm2 10756 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10757 ; SSE2-NEXT: por %xmm2, %xmm3 10758 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10759 ; SSE2-NEXT: pxor %xmm3, %xmm2 10760 ; SSE2-NEXT: pandn %xmm1, %xmm3 10761 ; SSE2-NEXT: pandn %xmm0, %xmm2 10762 ; SSE2-NEXT: por %xmm3, %xmm2 10763 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10764 ; SSE2-NEXT: retq 10765 ; 10766 ; SSE4-LABEL: test188: 10767 ; SSE4: # BB#0: # %entry 10768 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10769 ; SSE4-NEXT: movdqa %xmm1, %xmm3 10770 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm3 10771 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 10772 ; SSE4-NEXT: pxor %xmm3, %xmm0 10773 ; SSE4-NEXT: blendvpd %xmm1, %xmm2 10774 ; SSE4-NEXT: movapd %xmm2, %xmm0 10775 ; SSE4-NEXT: retq 10776 ; 10777 ; AVX1-LABEL: test188: 10778 ; AVX1: # BB#0: # %entry 10779 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10780 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10781 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10782 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10783 ; AVX1-NEXT: retq 10784 ; 10785 ; AVX2-LABEL: test188: 10786 ; AVX2: # BB#0: # %entry 10787 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10788 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10789 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10790 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10791 ; AVX2-NEXT: retq 10792 ; 10793 ; AVX512BW-LABEL: test188: 10794 ; AVX512BW: # BB#0: # %entry 10795 ; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 10796 ; AVX512BW-NEXT: retq 10797 entry: 10798 %cmp = icmp sge <2 x i64> %a, %b 10799 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10800 ret <2 x i64> %sel 10801 } 10802 10803 define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) { 10804 ; SSE2-LABEL: test189: 10805 ; SSE2: # BB#0: # %entry 10806 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10807 ; SSE2-NEXT: movdqa %xmm0, %xmm3 10808 ; SSE2-NEXT: pxor %xmm2, %xmm3 10809 ; SSE2-NEXT: pxor %xmm1, %xmm2 10810 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10811 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10812 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10813 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10814 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3] 10815 ; SSE2-NEXT: pand %xmm5, %xmm3 10816 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 10817 ; SSE2-NEXT: por %xmm3, %xmm2 10818 ; SSE2-NEXT: pand %xmm2, %xmm1 10819 ; SSE2-NEXT: pandn %xmm0, %xmm2 10820 ; SSE2-NEXT: por %xmm1, %xmm2 10821 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10822 ; SSE2-NEXT: retq 10823 ; 10824 ; SSE4-LABEL: test189: 10825 ; SSE4: # BB#0: # %entry 10826 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10827 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10828 ; SSE4-NEXT: movdqa %xmm2, %xmm3 10829 ; SSE4-NEXT: pxor %xmm0, %xmm3 10830 ; SSE4-NEXT: pxor %xmm1, %xmm0 10831 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10832 ; SSE4-NEXT: blendvpd %xmm1, %xmm2 10833 ; SSE4-NEXT: movapd %xmm2, %xmm0 10834 ; SSE4-NEXT: retq 10835 ; 10836 ; AVX1-LABEL: test189: 10837 ; AVX1: # BB#0: # %entry 10838 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10839 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 10840 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 10841 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10842 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10843 ; AVX1-NEXT: retq 10844 ; 10845 ; AVX2-LABEL: test189: 10846 ; AVX2: # BB#0: # %entry 10847 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10848 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 10849 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 10850 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10851 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10852 ; AVX2-NEXT: retq 10853 ; 10854 ; AVX512BW-LABEL: test189: 10855 ; AVX512BW: # BB#0: # %entry 10856 ; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 10857 ; AVX512BW-NEXT: retq 10858 entry: 10859 %cmp = icmp ult <2 x i64> %a, %b 10860 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10861 ret <2 x i64> %sel 10862 } 10863 10864 define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) { 10865 ; SSE2-LABEL: test190: 10866 ; SSE2: # BB#0: # %entry 10867 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10868 ; SSE2-NEXT: movdqa %xmm1, %xmm3 10869 ; SSE2-NEXT: pxor %xmm2, %xmm3 10870 ; SSE2-NEXT: pxor %xmm0, %xmm2 10871 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10872 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10873 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10874 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10875 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10876 ; SSE2-NEXT: pand %xmm5, %xmm2 10877 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10878 ; SSE2-NEXT: por %xmm2, %xmm3 10879 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10880 ; SSE2-NEXT: pxor %xmm3, %xmm2 10881 ; SSE2-NEXT: pandn %xmm1, %xmm3 10882 ; SSE2-NEXT: pandn %xmm0, %xmm2 10883 ; SSE2-NEXT: por %xmm3, %xmm2 10884 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10885 ; SSE2-NEXT: retq 10886 ; 10887 ; SSE4-LABEL: test190: 10888 ; SSE4: # BB#0: # %entry 10889 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10890 ; SSE4-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 10891 ; SSE4-NEXT: movdqa %xmm1, %xmm0 10892 ; SSE4-NEXT: pxor %xmm3, %xmm0 10893 ; SSE4-NEXT: pxor %xmm2, %xmm3 10894 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm3 10895 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 10896 ; SSE4-NEXT: pxor %xmm3, %xmm0 10897 ; SSE4-NEXT: blendvpd %xmm1, %xmm2 10898 ; SSE4-NEXT: movapd %xmm2, %xmm0 10899 ; SSE4-NEXT: retq 10900 ; 10901 ; AVX1-LABEL: test190: 10902 ; AVX1: # BB#0: # %entry 10903 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10904 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 10905 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 10906 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10907 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10908 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10909 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10910 ; AVX1-NEXT: retq 10911 ; 10912 ; AVX2-LABEL: test190: 10913 ; AVX2: # BB#0: # %entry 10914 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10915 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 10916 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 10917 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10918 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10919 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10920 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10921 ; AVX2-NEXT: retq 10922 ; 10923 ; AVX512BW-LABEL: test190: 10924 ; AVX512BW: # BB#0: # %entry 10925 ; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 10926 ; AVX512BW-NEXT: retq 10927 entry: 10928 %cmp = icmp ule <2 x i64> %a, %b 10929 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10930 ret <2 x i64> %sel 10931 } 10932 10933 define <2 x i64> @test191(<2 x i64> %a, <2 x i64> %b) { 10934 ; SSE2-LABEL: test191: 10935 ; SSE2: # BB#0: # %entry 10936 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10937 ; SSE2-NEXT: movdqa %xmm1, %xmm3 10938 ; SSE2-NEXT: pxor %xmm2, %xmm3 10939 ; SSE2-NEXT: pxor %xmm0, %xmm2 10940 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10941 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10942 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10943 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10944 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3] 10945 ; SSE2-NEXT: pand %xmm5, %xmm3 10946 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 10947 ; SSE2-NEXT: por %xmm3, %xmm2 10948 ; SSE2-NEXT: pand %xmm2, %xmm1 10949 ; SSE2-NEXT: pandn %xmm0, %xmm2 10950 ; SSE2-NEXT: por %xmm1, %xmm2 10951 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10952 ; SSE2-NEXT: retq 10953 ; 10954 ; SSE4-LABEL: test191: 10955 ; SSE4: # BB#0: # %entry 10956 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10957 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10958 ; SSE4-NEXT: movdqa %xmm1, %xmm3 10959 ; SSE4-NEXT: pxor %xmm0, %xmm3 10960 ; SSE4-NEXT: pxor %xmm2, %xmm0 10961 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10962 ; SSE4-NEXT: blendvpd %xmm1, %xmm2 10963 ; SSE4-NEXT: movapd %xmm2, %xmm0 10964 ; SSE4-NEXT: retq 10965 ; 10966 ; AVX1-LABEL: test191: 10967 ; AVX1: # BB#0: # %entry 10968 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10969 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 10970 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 10971 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10972 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10973 ; AVX1-NEXT: retq 10974 ; 10975 ; AVX2-LABEL: test191: 10976 ; AVX2: # BB#0: # %entry 10977 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10978 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 10979 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 10980 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10981 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10982 ; AVX2-NEXT: retq 10983 ; 10984 ; AVX512BW-LABEL: test191: 10985 ; AVX512BW: # BB#0: # %entry 10986 ; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 10987 ; AVX512BW-NEXT: retq 10988 entry: 10989 %cmp = icmp ugt <2 x i64> %a, %b 10990 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10991 ret <2 x i64> %sel 10992 } 10993 10994 define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) { 10995 ; SSE2-LABEL: test192: 10996 ; SSE2: # BB#0: # %entry 10997 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10998 ; SSE2-NEXT: movdqa %xmm0, %xmm3 10999 ; SSE2-NEXT: pxor %xmm2, %xmm3 11000 ; SSE2-NEXT: pxor %xmm1, %xmm2 11001 ; SSE2-NEXT: movdqa %xmm2, %xmm4 11002 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 11003 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 11004 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 11005 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 11006 ; SSE2-NEXT: pand %xmm5, %xmm2 11007 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 11008 ; SSE2-NEXT: por %xmm2, %xmm3 11009 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 11010 ; SSE2-NEXT: pxor %xmm3, %xmm2 11011 ; SSE2-NEXT: pandn %xmm1, %xmm3 11012 ; SSE2-NEXT: pandn %xmm0, %xmm2 11013 ; SSE2-NEXT: por %xmm3, %xmm2 11014 ; SSE2-NEXT: movdqa %xmm2, %xmm0 11015 ; SSE2-NEXT: retq 11016 ; 11017 ; SSE4-LABEL: test192: 11018 ; SSE4: # BB#0: # %entry 11019 ; SSE4-NEXT: movdqa %xmm0, %xmm2 11020 ; SSE4-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 11021 ; SSE4-NEXT: pxor %xmm3, %xmm0 11022 ; SSE4-NEXT: pxor %xmm1, %xmm3 11023 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm3 11024 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 11025 ; SSE4-NEXT: pxor %xmm3, %xmm0 11026 ; SSE4-NEXT: blendvpd %xmm1, %xmm2 11027 ; SSE4-NEXT: movapd %xmm2, %xmm0 11028 ; SSE4-NEXT: retq 11029 ; 11030 ; AVX1-LABEL: test192: 11031 ; AVX1: # BB#0: # %entry 11032 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 11033 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 11034 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 11035 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 11036 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 11037 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 11038 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 11039 ; AVX1-NEXT: retq 11040 ; 11041 ; AVX2-LABEL: test192: 11042 ; AVX2: # BB#0: # %entry 11043 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 11044 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 11045 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 11046 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 11047 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 11048 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 11049 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 11050 ; AVX2-NEXT: retq 11051 ; 11052 ; AVX512BW-LABEL: test192: 11053 ; AVX512BW: # BB#0: # %entry 11054 ; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 11055 ; AVX512BW-NEXT: retq 11056 entry: 11057 %cmp = icmp uge <2 x i64> %a, %b 11058 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 11059 ret <2 x i64> %sel 11060 } 11061