1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2 3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE4 4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1 5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2 6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=knl | FileCheck %s --check-prefix=AVX --check-prefix=AVX512F 7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=skx | FileCheck %s --check-prefix=AVX --check-prefix=AVX512F --check-prefix=AVX512BW --check-prefix=AVX512VL 8 9 define <16 x i8> @test1(<16 x i8> %a, <16 x i8> %b) { 10 ; SSE2-LABEL: test1: 11 ; SSE2: # BB#0: # %entry 12 ; SSE2-NEXT: movdqa %xmm1, %xmm2 13 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm2 14 ; SSE2-NEXT: pand %xmm2, %xmm0 15 ; SSE2-NEXT: pandn %xmm1, %xmm2 16 ; SSE2-NEXT: por %xmm2, %xmm0 17 ; SSE2-NEXT: retq 18 ; 19 ; SSE4-LABEL: test1: 20 ; SSE4: # BB#0: # %entry 21 ; SSE4-NEXT: pminsb %xmm1, %xmm0 22 ; SSE4-NEXT: retq 23 ; 24 ; AVX-LABEL: test1: 25 ; AVX: # BB#0: # %entry 26 ; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0 27 ; AVX-NEXT: retq 28 entry: 29 %cmp = icmp slt <16 x i8> %a, %b 30 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 31 ret <16 x i8> %sel 32 } 33 34 define <16 x i8> @test2(<16 x i8> %a, <16 x i8> %b) { 35 ; SSE2-LABEL: test2: 36 ; SSE2: # BB#0: # %entry 37 ; SSE2-NEXT: movdqa %xmm0, %xmm2 38 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 39 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm3 40 ; SSE2-NEXT: pxor %xmm2, %xmm3 41 ; SSE2-NEXT: pandn %xmm0, %xmm2 42 ; SSE2-NEXT: pandn %xmm1, %xmm3 43 ; SSE2-NEXT: por %xmm3, %xmm2 44 ; SSE2-NEXT: movdqa %xmm2, %xmm0 45 ; SSE2-NEXT: retq 46 ; 47 ; SSE4-LABEL: test2: 48 ; SSE4: # BB#0: # %entry 49 ; SSE4-NEXT: pminsb %xmm1, %xmm0 50 ; SSE4-NEXT: retq 51 ; 52 ; AVX-LABEL: test2: 53 ; AVX: # BB#0: # %entry 54 ; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0 55 ; AVX-NEXT: retq 56 entry: 57 %cmp = icmp sle <16 x i8> %a, %b 58 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 59 ret <16 x i8> %sel 60 } 61 62 define <16 x i8> @test3(<16 x i8> %a, <16 x i8> %b) { 63 ; SSE2-LABEL: test3: 64 ; SSE2: # BB#0: # %entry 65 ; SSE2-NEXT: movdqa %xmm0, %xmm2 66 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 67 ; SSE2-NEXT: pand %xmm2, %xmm0 68 ; SSE2-NEXT: pandn %xmm1, %xmm2 69 ; SSE2-NEXT: por %xmm0, %xmm2 70 ; SSE2-NEXT: movdqa %xmm2, %xmm0 71 ; SSE2-NEXT: retq 72 ; 73 ; SSE4-LABEL: test3: 74 ; SSE4: # BB#0: # %entry 75 ; SSE4-NEXT: pmaxsb %xmm1, %xmm0 76 ; SSE4-NEXT: retq 77 ; 78 ; AVX-LABEL: test3: 79 ; AVX: # BB#0: # %entry 80 ; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 81 ; AVX-NEXT: retq 82 entry: 83 %cmp = icmp sgt <16 x i8> %a, %b 84 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 85 ret <16 x i8> %sel 86 } 87 88 define <16 x i8> @test4(<16 x i8> %a, <16 x i8> %b) { 89 ; SSE2-LABEL: test4: 90 ; SSE2: # BB#0: # %entry 91 ; SSE2-NEXT: movdqa %xmm1, %xmm3 92 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm3 93 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 94 ; SSE2-NEXT: pxor %xmm3, %xmm2 95 ; SSE2-NEXT: pandn %xmm0, %xmm3 96 ; SSE2-NEXT: pandn %xmm1, %xmm2 97 ; SSE2-NEXT: por %xmm3, %xmm2 98 ; SSE2-NEXT: movdqa %xmm2, %xmm0 99 ; SSE2-NEXT: retq 100 ; 101 ; SSE4-LABEL: test4: 102 ; SSE4: # BB#0: # %entry 103 ; SSE4-NEXT: pmaxsb %xmm1, %xmm0 104 ; SSE4-NEXT: retq 105 ; 106 ; AVX-LABEL: test4: 107 ; AVX: # BB#0: # %entry 108 ; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 109 ; AVX-NEXT: retq 110 entry: 111 %cmp = icmp sge <16 x i8> %a, %b 112 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 113 ret <16 x i8> %sel 114 } 115 116 define <16 x i8> @test5(<16 x i8> %a, <16 x i8> %b) { 117 ; SSE-LABEL: test5: 118 ; SSE: # BB#0: # %entry 119 ; SSE-NEXT: pminub %xmm1, %xmm0 120 ; SSE-NEXT: retq 121 ; 122 ; AVX-LABEL: test5: 123 ; AVX: # BB#0: # %entry 124 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 125 ; AVX-NEXT: retq 126 entry: 127 %cmp = icmp ult <16 x i8> %a, %b 128 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 129 ret <16 x i8> %sel 130 } 131 132 define <16 x i8> @test6(<16 x i8> %a, <16 x i8> %b) { 133 ; SSE-LABEL: test6: 134 ; SSE: # BB#0: # %entry 135 ; SSE-NEXT: pminub %xmm1, %xmm0 136 ; SSE-NEXT: retq 137 ; 138 ; AVX-LABEL: test6: 139 ; AVX: # BB#0: # %entry 140 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 141 ; AVX-NEXT: retq 142 entry: 143 %cmp = icmp ule <16 x i8> %a, %b 144 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 145 ret <16 x i8> %sel 146 } 147 148 define <16 x i8> @test7(<16 x i8> %a, <16 x i8> %b) { 149 ; SSE-LABEL: test7: 150 ; SSE: # BB#0: # %entry 151 ; SSE-NEXT: pmaxub %xmm1, %xmm0 152 ; SSE-NEXT: retq 153 ; 154 ; AVX-LABEL: test7: 155 ; AVX: # BB#0: # %entry 156 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 157 ; AVX-NEXT: retq 158 entry: 159 %cmp = icmp ugt <16 x i8> %a, %b 160 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 161 ret <16 x i8> %sel 162 } 163 164 define <16 x i8> @test8(<16 x i8> %a, <16 x i8> %b) { 165 ; SSE-LABEL: test8: 166 ; SSE: # BB#0: # %entry 167 ; SSE-NEXT: pmaxub %xmm1, %xmm0 168 ; SSE-NEXT: retq 169 ; 170 ; AVX-LABEL: test8: 171 ; AVX: # BB#0: # %entry 172 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 173 ; AVX-NEXT: retq 174 entry: 175 %cmp = icmp uge <16 x i8> %a, %b 176 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 177 ret <16 x i8> %sel 178 } 179 180 define <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) { 181 ; SSE-LABEL: test9: 182 ; SSE: # BB#0: # %entry 183 ; SSE-NEXT: pminsw %xmm1, %xmm0 184 ; SSE-NEXT: retq 185 ; 186 ; AVX-LABEL: test9: 187 ; AVX: # BB#0: # %entry 188 ; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 189 ; AVX-NEXT: retq 190 entry: 191 %cmp = icmp slt <8 x i16> %a, %b 192 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 193 ret <8 x i16> %sel 194 } 195 196 define <8 x i16> @test10(<8 x i16> %a, <8 x i16> %b) { 197 ; SSE-LABEL: test10: 198 ; SSE: # BB#0: # %entry 199 ; SSE-NEXT: pminsw %xmm1, %xmm0 200 ; SSE-NEXT: retq 201 ; 202 ; AVX-LABEL: test10: 203 ; AVX: # BB#0: # %entry 204 ; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 205 ; AVX-NEXT: retq 206 entry: 207 %cmp = icmp sle <8 x i16> %a, %b 208 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 209 ret <8 x i16> %sel 210 } 211 212 define <8 x i16> @test11(<8 x i16> %a, <8 x i16> %b) { 213 ; SSE-LABEL: test11: 214 ; SSE: # BB#0: # %entry 215 ; SSE-NEXT: pmaxsw %xmm1, %xmm0 216 ; SSE-NEXT: retq 217 ; 218 ; AVX-LABEL: test11: 219 ; AVX: # BB#0: # %entry 220 ; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 221 ; AVX-NEXT: retq 222 entry: 223 %cmp = icmp sgt <8 x i16> %a, %b 224 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 225 ret <8 x i16> %sel 226 } 227 228 define <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) { 229 ; SSE-LABEL: test12: 230 ; SSE: # BB#0: # %entry 231 ; SSE-NEXT: pmaxsw %xmm1, %xmm0 232 ; SSE-NEXT: retq 233 ; 234 ; AVX-LABEL: test12: 235 ; AVX: # BB#0: # %entry 236 ; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 237 ; AVX-NEXT: retq 238 entry: 239 %cmp = icmp sge <8 x i16> %a, %b 240 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 241 ret <8 x i16> %sel 242 } 243 244 define <8 x i16> @test13(<8 x i16> %a, <8 x i16> %b) { 245 ; SSE2-LABEL: test13: 246 ; SSE2: # BB#0: # %entry 247 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 248 ; SSE2-NEXT: movdqa %xmm0, %xmm3 249 ; SSE2-NEXT: pxor %xmm2, %xmm3 250 ; SSE2-NEXT: pxor %xmm1, %xmm2 251 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm2 252 ; SSE2-NEXT: pand %xmm2, %xmm0 253 ; SSE2-NEXT: pandn %xmm1, %xmm2 254 ; SSE2-NEXT: por %xmm2, %xmm0 255 ; SSE2-NEXT: retq 256 ; 257 ; SSE4-LABEL: test13: 258 ; SSE4: # BB#0: # %entry 259 ; SSE4-NEXT: pminuw %xmm1, %xmm0 260 ; SSE4-NEXT: retq 261 ; 262 ; AVX-LABEL: test13: 263 ; AVX: # BB#0: # %entry 264 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 265 ; AVX-NEXT: retq 266 entry: 267 %cmp = icmp ult <8 x i16> %a, %b 268 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 269 ret <8 x i16> %sel 270 } 271 272 define <8 x i16> @test14(<8 x i16> %a, <8 x i16> %b) { 273 ; SSE2-LABEL: test14: 274 ; SSE2: # BB#0: # %entry 275 ; SSE2-NEXT: movdqa %xmm0, %xmm2 276 ; SSE2-NEXT: psubusw %xmm1, %xmm2 277 ; SSE2-NEXT: pxor %xmm3, %xmm3 278 ; SSE2-NEXT: pcmpeqw %xmm2, %xmm3 279 ; SSE2-NEXT: pand %xmm3, %xmm0 280 ; SSE2-NEXT: pandn %xmm1, %xmm3 281 ; SSE2-NEXT: por %xmm3, %xmm0 282 ; SSE2-NEXT: retq 283 ; 284 ; SSE4-LABEL: test14: 285 ; SSE4: # BB#0: # %entry 286 ; SSE4-NEXT: pminuw %xmm1, %xmm0 287 ; SSE4-NEXT: retq 288 ; 289 ; AVX-LABEL: test14: 290 ; AVX: # BB#0: # %entry 291 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 292 ; AVX-NEXT: retq 293 entry: 294 %cmp = icmp ule <8 x i16> %a, %b 295 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 296 ret <8 x i16> %sel 297 } 298 299 define <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) { 300 ; SSE2-LABEL: test15: 301 ; SSE2: # BB#0: # %entry 302 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 303 ; SSE2-NEXT: movdqa %xmm1, %xmm3 304 ; SSE2-NEXT: pxor %xmm2, %xmm3 305 ; SSE2-NEXT: pxor %xmm0, %xmm2 306 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm2 307 ; SSE2-NEXT: pand %xmm2, %xmm0 308 ; SSE2-NEXT: pandn %xmm1, %xmm2 309 ; SSE2-NEXT: por %xmm2, %xmm0 310 ; SSE2-NEXT: retq 311 ; 312 ; SSE4-LABEL: test15: 313 ; SSE4: # BB#0: # %entry 314 ; SSE4-NEXT: pmaxuw %xmm1, %xmm0 315 ; SSE4-NEXT: retq 316 ; 317 ; AVX-LABEL: test15: 318 ; AVX: # BB#0: # %entry 319 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 320 ; AVX-NEXT: retq 321 entry: 322 %cmp = icmp ugt <8 x i16> %a, %b 323 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 324 ret <8 x i16> %sel 325 } 326 327 define <8 x i16> @test16(<8 x i16> %a, <8 x i16> %b) { 328 ; SSE2-LABEL: test16: 329 ; SSE2: # BB#0: # %entry 330 ; SSE2-NEXT: movdqa %xmm1, %xmm2 331 ; SSE2-NEXT: psubusw %xmm0, %xmm2 332 ; SSE2-NEXT: pxor %xmm3, %xmm3 333 ; SSE2-NEXT: pcmpeqw %xmm2, %xmm3 334 ; SSE2-NEXT: pand %xmm3, %xmm0 335 ; SSE2-NEXT: pandn %xmm1, %xmm3 336 ; SSE2-NEXT: por %xmm3, %xmm0 337 ; SSE2-NEXT: retq 338 ; 339 ; SSE4-LABEL: test16: 340 ; SSE4: # BB#0: # %entry 341 ; SSE4-NEXT: pmaxuw %xmm1, %xmm0 342 ; SSE4-NEXT: retq 343 ; 344 ; AVX-LABEL: test16: 345 ; AVX: # BB#0: # %entry 346 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 347 ; AVX-NEXT: retq 348 entry: 349 %cmp = icmp uge <8 x i16> %a, %b 350 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 351 ret <8 x i16> %sel 352 } 353 354 define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) { 355 ; SSE2-LABEL: test17: 356 ; SSE2: # BB#0: # %entry 357 ; SSE2-NEXT: movdqa %xmm1, %xmm2 358 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 359 ; SSE2-NEXT: pand %xmm2, %xmm0 360 ; SSE2-NEXT: pandn %xmm1, %xmm2 361 ; SSE2-NEXT: por %xmm2, %xmm0 362 ; SSE2-NEXT: retq 363 ; 364 ; SSE4-LABEL: test17: 365 ; SSE4: # BB#0: # %entry 366 ; SSE4-NEXT: pminsd %xmm1, %xmm0 367 ; SSE4-NEXT: retq 368 ; 369 ; AVX-LABEL: test17: 370 ; AVX: # BB#0: # %entry 371 ; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 372 ; AVX-NEXT: retq 373 entry: 374 %cmp = icmp slt <4 x i32> %a, %b 375 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 376 ret <4 x i32> %sel 377 } 378 379 define <4 x i32> @test18(<4 x i32> %a, <4 x i32> %b) { 380 ; SSE2-LABEL: test18: 381 ; SSE2: # BB#0: # %entry 382 ; SSE2-NEXT: movdqa %xmm0, %xmm2 383 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 384 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm3 385 ; SSE2-NEXT: pxor %xmm2, %xmm3 386 ; SSE2-NEXT: pandn %xmm0, %xmm2 387 ; SSE2-NEXT: pandn %xmm1, %xmm3 388 ; SSE2-NEXT: por %xmm3, %xmm2 389 ; SSE2-NEXT: movdqa %xmm2, %xmm0 390 ; SSE2-NEXT: retq 391 ; 392 ; SSE4-LABEL: test18: 393 ; SSE4: # BB#0: # %entry 394 ; SSE4-NEXT: pminsd %xmm1, %xmm0 395 ; SSE4-NEXT: retq 396 ; 397 ; AVX-LABEL: test18: 398 ; AVX: # BB#0: # %entry 399 ; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 400 ; AVX-NEXT: retq 401 entry: 402 %cmp = icmp sle <4 x i32> %a, %b 403 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 404 ret <4 x i32> %sel 405 } 406 407 define <4 x i32> @test19(<4 x i32> %a, <4 x i32> %b) { 408 ; SSE2-LABEL: test19: 409 ; SSE2: # BB#0: # %entry 410 ; SSE2-NEXT: movdqa %xmm0, %xmm2 411 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 412 ; SSE2-NEXT: pand %xmm2, %xmm0 413 ; SSE2-NEXT: pandn %xmm1, %xmm2 414 ; SSE2-NEXT: por %xmm0, %xmm2 415 ; SSE2-NEXT: movdqa %xmm2, %xmm0 416 ; SSE2-NEXT: retq 417 ; 418 ; SSE4-LABEL: test19: 419 ; SSE4: # BB#0: # %entry 420 ; SSE4-NEXT: pmaxsd %xmm1, %xmm0 421 ; SSE4-NEXT: retq 422 ; 423 ; AVX-LABEL: test19: 424 ; AVX: # BB#0: # %entry 425 ; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 426 ; AVX-NEXT: retq 427 entry: 428 %cmp = icmp sgt <4 x i32> %a, %b 429 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 430 ret <4 x i32> %sel 431 } 432 433 define <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b) { 434 ; SSE2-LABEL: test20: 435 ; SSE2: # BB#0: # %entry 436 ; SSE2-NEXT: movdqa %xmm1, %xmm3 437 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm3 438 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 439 ; SSE2-NEXT: pxor %xmm3, %xmm2 440 ; SSE2-NEXT: pandn %xmm0, %xmm3 441 ; SSE2-NEXT: pandn %xmm1, %xmm2 442 ; SSE2-NEXT: por %xmm3, %xmm2 443 ; SSE2-NEXT: movdqa %xmm2, %xmm0 444 ; SSE2-NEXT: retq 445 ; 446 ; SSE4-LABEL: test20: 447 ; SSE4: # BB#0: # %entry 448 ; SSE4-NEXT: pmaxsd %xmm1, %xmm0 449 ; SSE4-NEXT: retq 450 ; 451 ; AVX-LABEL: test20: 452 ; AVX: # BB#0: # %entry 453 ; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 454 ; AVX-NEXT: retq 455 entry: 456 %cmp = icmp sge <4 x i32> %a, %b 457 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 458 ret <4 x i32> %sel 459 } 460 461 define <4 x i32> @test21(<4 x i32> %a, <4 x i32> %b) { 462 ; SSE2-LABEL: test21: 463 ; SSE2: # BB#0: # %entry 464 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 465 ; SSE2-NEXT: movdqa %xmm0, %xmm3 466 ; SSE2-NEXT: pxor %xmm2, %xmm3 467 ; SSE2-NEXT: pxor %xmm1, %xmm2 468 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 469 ; SSE2-NEXT: pand %xmm2, %xmm0 470 ; SSE2-NEXT: pandn %xmm1, %xmm2 471 ; SSE2-NEXT: por %xmm2, %xmm0 472 ; SSE2-NEXT: retq 473 ; 474 ; SSE4-LABEL: test21: 475 ; SSE4: # BB#0: # %entry 476 ; SSE4-NEXT: pminud %xmm1, %xmm0 477 ; SSE4-NEXT: retq 478 ; 479 ; AVX-LABEL: test21: 480 ; AVX: # BB#0: # %entry 481 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 482 ; AVX-NEXT: retq 483 entry: 484 %cmp = icmp ult <4 x i32> %a, %b 485 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 486 ret <4 x i32> %sel 487 } 488 489 define <4 x i32> @test22(<4 x i32> %a, <4 x i32> %b) { 490 ; SSE2-LABEL: test22: 491 ; SSE2: # BB#0: # %entry 492 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648] 493 ; SSE2-NEXT: movdqa %xmm1, %xmm2 494 ; SSE2-NEXT: pxor %xmm3, %xmm2 495 ; SSE2-NEXT: pxor %xmm0, %xmm3 496 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3 497 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 498 ; SSE2-NEXT: pxor %xmm3, %xmm2 499 ; SSE2-NEXT: pandn %xmm0, %xmm3 500 ; SSE2-NEXT: pandn %xmm1, %xmm2 501 ; SSE2-NEXT: por %xmm3, %xmm2 502 ; SSE2-NEXT: movdqa %xmm2, %xmm0 503 ; SSE2-NEXT: retq 504 ; 505 ; SSE4-LABEL: test22: 506 ; SSE4: # BB#0: # %entry 507 ; SSE4-NEXT: pminud %xmm1, %xmm0 508 ; SSE4-NEXT: retq 509 ; 510 ; AVX-LABEL: test22: 511 ; AVX: # BB#0: # %entry 512 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 513 ; AVX-NEXT: retq 514 entry: 515 %cmp = icmp ule <4 x i32> %a, %b 516 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 517 ret <4 x i32> %sel 518 } 519 520 define <4 x i32> @test23(<4 x i32> %a, <4 x i32> %b) { 521 ; SSE2-LABEL: test23: 522 ; SSE2: # BB#0: # %entry 523 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 524 ; SSE2-NEXT: movdqa %xmm1, %xmm3 525 ; SSE2-NEXT: pxor %xmm2, %xmm3 526 ; SSE2-NEXT: pxor %xmm0, %xmm2 527 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 528 ; SSE2-NEXT: pand %xmm2, %xmm0 529 ; SSE2-NEXT: pandn %xmm1, %xmm2 530 ; SSE2-NEXT: por %xmm2, %xmm0 531 ; SSE2-NEXT: retq 532 ; 533 ; SSE4-LABEL: test23: 534 ; SSE4: # BB#0: # %entry 535 ; SSE4-NEXT: pmaxud %xmm1, %xmm0 536 ; SSE4-NEXT: retq 537 ; 538 ; AVX-LABEL: test23: 539 ; AVX: # BB#0: # %entry 540 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 541 ; AVX-NEXT: retq 542 entry: 543 %cmp = icmp ugt <4 x i32> %a, %b 544 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 545 ret <4 x i32> %sel 546 } 547 548 define <4 x i32> @test24(<4 x i32> %a, <4 x i32> %b) { 549 ; SSE2-LABEL: test24: 550 ; SSE2: # BB#0: # %entry 551 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648] 552 ; SSE2-NEXT: movdqa %xmm0, %xmm2 553 ; SSE2-NEXT: pxor %xmm3, %xmm2 554 ; SSE2-NEXT: pxor %xmm1, %xmm3 555 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3 556 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 557 ; SSE2-NEXT: pxor %xmm3, %xmm2 558 ; SSE2-NEXT: pandn %xmm0, %xmm3 559 ; SSE2-NEXT: pandn %xmm1, %xmm2 560 ; SSE2-NEXT: por %xmm3, %xmm2 561 ; SSE2-NEXT: movdqa %xmm2, %xmm0 562 ; SSE2-NEXT: retq 563 ; 564 ; SSE4-LABEL: test24: 565 ; SSE4: # BB#0: # %entry 566 ; SSE4-NEXT: pmaxud %xmm1, %xmm0 567 ; SSE4-NEXT: retq 568 ; 569 ; AVX-LABEL: test24: 570 ; AVX: # BB#0: # %entry 571 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 572 ; AVX-NEXT: retq 573 entry: 574 %cmp = icmp uge <4 x i32> %a, %b 575 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 576 ret <4 x i32> %sel 577 } 578 579 define <32 x i8> @test25(<32 x i8> %a, <32 x i8> %b) { 580 ; SSE2-LABEL: test25: 581 ; SSE2: # BB#0: # %entry 582 ; SSE2-NEXT: movdqa %xmm3, %xmm4 583 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 584 ; SSE2-NEXT: movdqa %xmm2, %xmm5 585 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm5 586 ; SSE2-NEXT: pand %xmm5, %xmm0 587 ; SSE2-NEXT: pandn %xmm2, %xmm5 588 ; SSE2-NEXT: por %xmm5, %xmm0 589 ; SSE2-NEXT: pand %xmm4, %xmm1 590 ; SSE2-NEXT: pandn %xmm3, %xmm4 591 ; SSE2-NEXT: por %xmm4, %xmm1 592 ; SSE2-NEXT: retq 593 ; 594 ; SSE4-LABEL: test25: 595 ; SSE4: # BB#0: # %entry 596 ; SSE4-NEXT: pminsb %xmm2, %xmm0 597 ; SSE4-NEXT: pminsb %xmm3, %xmm1 598 ; SSE4-NEXT: retq 599 ; 600 ; AVX1-LABEL: test25: 601 ; AVX1: # BB#0: # %entry 602 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 603 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 604 ; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 605 ; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 606 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 607 ; AVX1-NEXT: retq 608 ; 609 ; AVX2-LABEL: test25: 610 ; AVX2: # BB#0: # %entry 611 ; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 612 ; AVX2-NEXT: retq 613 ; 614 ; AVX512F-LABEL: test25: 615 ; AVX512F: # BB#0: # %entry 616 ; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 617 ; AVX512F-NEXT: retq 618 entry: 619 %cmp = icmp slt <32 x i8> %a, %b 620 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 621 ret <32 x i8> %sel 622 } 623 624 define <32 x i8> @test26(<32 x i8> %a, <32 x i8> %b) { 625 ; SSE2-LABEL: test26: 626 ; SSE2: # BB#0: # %entry 627 ; SSE2-NEXT: movdqa %xmm1, %xmm6 628 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm6 629 ; SSE2-NEXT: pcmpeqd %xmm7, %xmm7 630 ; SSE2-NEXT: movdqa %xmm6, %xmm4 631 ; SSE2-NEXT: pxor %xmm7, %xmm4 632 ; SSE2-NEXT: movdqa %xmm0, %xmm5 633 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm5 634 ; SSE2-NEXT: pxor %xmm5, %xmm7 635 ; SSE2-NEXT: pandn %xmm0, %xmm5 636 ; SSE2-NEXT: pandn %xmm2, %xmm7 637 ; SSE2-NEXT: por %xmm7, %xmm5 638 ; SSE2-NEXT: pandn %xmm1, %xmm6 639 ; SSE2-NEXT: pandn %xmm3, %xmm4 640 ; SSE2-NEXT: por %xmm6, %xmm4 641 ; SSE2-NEXT: movdqa %xmm5, %xmm0 642 ; SSE2-NEXT: movdqa %xmm4, %xmm1 643 ; SSE2-NEXT: retq 644 ; 645 ; SSE4-LABEL: test26: 646 ; SSE4: # BB#0: # %entry 647 ; SSE4-NEXT: pminsb %xmm2, %xmm0 648 ; SSE4-NEXT: pminsb %xmm3, %xmm1 649 ; SSE4-NEXT: retq 650 ; 651 ; AVX1-LABEL: test26: 652 ; AVX1: # BB#0: # %entry 653 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 654 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 655 ; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 656 ; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 657 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 658 ; AVX1-NEXT: retq 659 ; 660 ; AVX2-LABEL: test26: 661 ; AVX2: # BB#0: # %entry 662 ; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 663 ; AVX2-NEXT: retq 664 ; 665 ; AVX512F-LABEL: test26: 666 ; AVX512F: # BB#0: # %entry 667 ; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 668 ; AVX512F-NEXT: retq 669 entry: 670 %cmp = icmp sle <32 x i8> %a, %b 671 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 672 ret <32 x i8> %sel 673 } 674 675 define <32 x i8> @test27(<32 x i8> %a, <32 x i8> %b) { 676 ; SSE2-LABEL: test27: 677 ; SSE2: # BB#0: # %entry 678 ; SSE2-NEXT: movdqa %xmm1, %xmm4 679 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 680 ; SSE2-NEXT: movdqa %xmm0, %xmm5 681 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm5 682 ; SSE2-NEXT: pand %xmm5, %xmm0 683 ; SSE2-NEXT: pandn %xmm2, %xmm5 684 ; SSE2-NEXT: por %xmm0, %xmm5 685 ; SSE2-NEXT: pand %xmm4, %xmm1 686 ; SSE2-NEXT: pandn %xmm3, %xmm4 687 ; SSE2-NEXT: por %xmm1, %xmm4 688 ; SSE2-NEXT: movdqa %xmm5, %xmm0 689 ; SSE2-NEXT: movdqa %xmm4, %xmm1 690 ; SSE2-NEXT: retq 691 ; 692 ; SSE4-LABEL: test27: 693 ; SSE4: # BB#0: # %entry 694 ; SSE4-NEXT: pmaxsb %xmm2, %xmm0 695 ; SSE4-NEXT: pmaxsb %xmm3, %xmm1 696 ; SSE4-NEXT: retq 697 ; 698 ; AVX1-LABEL: test27: 699 ; AVX1: # BB#0: # %entry 700 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 701 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 702 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 703 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 704 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 705 ; AVX1-NEXT: retq 706 ; 707 ; AVX2-LABEL: test27: 708 ; AVX2: # BB#0: # %entry 709 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 710 ; AVX2-NEXT: retq 711 ; 712 ; AVX512F-LABEL: test27: 713 ; AVX512F: # BB#0: # %entry 714 ; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 715 ; AVX512F-NEXT: retq 716 entry: 717 %cmp = icmp sgt <32 x i8> %a, %b 718 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 719 ret <32 x i8> %sel 720 } 721 722 define <32 x i8> @test28(<32 x i8> %a, <32 x i8> %b) { 723 ; SSE2-LABEL: test28: 724 ; SSE2: # BB#0: # %entry 725 ; SSE2-NEXT: movdqa %xmm3, %xmm6 726 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm6 727 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 728 ; SSE2-NEXT: movdqa %xmm6, %xmm5 729 ; SSE2-NEXT: pxor %xmm4, %xmm5 730 ; SSE2-NEXT: movdqa %xmm2, %xmm7 731 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm7 732 ; SSE2-NEXT: pxor %xmm7, %xmm4 733 ; SSE2-NEXT: pandn %xmm0, %xmm7 734 ; SSE2-NEXT: pandn %xmm2, %xmm4 735 ; SSE2-NEXT: por %xmm7, %xmm4 736 ; SSE2-NEXT: pandn %xmm1, %xmm6 737 ; SSE2-NEXT: pandn %xmm3, %xmm5 738 ; SSE2-NEXT: por %xmm6, %xmm5 739 ; SSE2-NEXT: movdqa %xmm4, %xmm0 740 ; SSE2-NEXT: movdqa %xmm5, %xmm1 741 ; SSE2-NEXT: retq 742 ; 743 ; SSE4-LABEL: test28: 744 ; SSE4: # BB#0: # %entry 745 ; SSE4-NEXT: pmaxsb %xmm2, %xmm0 746 ; SSE4-NEXT: pmaxsb %xmm3, %xmm1 747 ; SSE4-NEXT: retq 748 ; 749 ; AVX1-LABEL: test28: 750 ; AVX1: # BB#0: # %entry 751 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 752 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 753 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 754 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 755 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 756 ; AVX1-NEXT: retq 757 ; 758 ; AVX2-LABEL: test28: 759 ; AVX2: # BB#0: # %entry 760 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 761 ; AVX2-NEXT: retq 762 ; 763 ; AVX512F-LABEL: test28: 764 ; AVX512F: # BB#0: # %entry 765 ; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 766 ; AVX512F-NEXT: retq 767 entry: 768 %cmp = icmp sge <32 x i8> %a, %b 769 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 770 ret <32 x i8> %sel 771 } 772 773 define <32 x i8> @test29(<32 x i8> %a, <32 x i8> %b) { 774 ; SSE-LABEL: test29: 775 ; SSE: # BB#0: # %entry 776 ; SSE-NEXT: pminub %xmm2, %xmm0 777 ; SSE-NEXT: pminub %xmm3, %xmm1 778 ; SSE-NEXT: retq 779 ; 780 ; AVX1-LABEL: test29: 781 ; AVX1: # BB#0: # %entry 782 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 783 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 784 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 785 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 786 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 787 ; AVX1-NEXT: retq 788 ; 789 ; AVX2-LABEL: test29: 790 ; AVX2: # BB#0: # %entry 791 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 792 ; AVX2-NEXT: retq 793 ; 794 ; AVX512F-LABEL: test29: 795 ; AVX512F: # BB#0: # %entry 796 ; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 797 ; AVX512F-NEXT: retq 798 entry: 799 %cmp = icmp ult <32 x i8> %a, %b 800 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 801 ret <32 x i8> %sel 802 } 803 804 define <32 x i8> @test30(<32 x i8> %a, <32 x i8> %b) { 805 ; SSE-LABEL: test30: 806 ; SSE: # BB#0: # %entry 807 ; SSE-NEXT: pminub %xmm2, %xmm0 808 ; SSE-NEXT: pminub %xmm3, %xmm1 809 ; SSE-NEXT: retq 810 ; 811 ; AVX1-LABEL: test30: 812 ; AVX1: # BB#0: # %entry 813 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 814 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 815 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 816 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 817 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 818 ; AVX1-NEXT: retq 819 ; 820 ; AVX2-LABEL: test30: 821 ; AVX2: # BB#0: # %entry 822 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 823 ; AVX2-NEXT: retq 824 ; 825 ; AVX512F-LABEL: test30: 826 ; AVX512F: # BB#0: # %entry 827 ; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 828 ; AVX512F-NEXT: retq 829 entry: 830 %cmp = icmp ule <32 x i8> %a, %b 831 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 832 ret <32 x i8> %sel 833 } 834 835 define <32 x i8> @test31(<32 x i8> %a, <32 x i8> %b) { 836 ; SSE-LABEL: test31: 837 ; SSE: # BB#0: # %entry 838 ; SSE-NEXT: pmaxub %xmm2, %xmm0 839 ; SSE-NEXT: pmaxub %xmm3, %xmm1 840 ; SSE-NEXT: retq 841 ; 842 ; AVX1-LABEL: test31: 843 ; AVX1: # BB#0: # %entry 844 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 845 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 846 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 847 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 848 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 849 ; AVX1-NEXT: retq 850 ; 851 ; AVX2-LABEL: test31: 852 ; AVX2: # BB#0: # %entry 853 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 854 ; AVX2-NEXT: retq 855 ; 856 ; AVX512F-LABEL: test31: 857 ; AVX512F: # BB#0: # %entry 858 ; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 859 ; AVX512F-NEXT: retq 860 entry: 861 %cmp = icmp ugt <32 x i8> %a, %b 862 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 863 ret <32 x i8> %sel 864 } 865 866 define <32 x i8> @test32(<32 x i8> %a, <32 x i8> %b) { 867 ; SSE-LABEL: test32: 868 ; SSE: # BB#0: # %entry 869 ; SSE-NEXT: pmaxub %xmm2, %xmm0 870 ; SSE-NEXT: pmaxub %xmm3, %xmm1 871 ; SSE-NEXT: retq 872 ; 873 ; AVX1-LABEL: test32: 874 ; AVX1: # BB#0: # %entry 875 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 876 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 877 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 878 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 879 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 880 ; AVX1-NEXT: retq 881 ; 882 ; AVX2-LABEL: test32: 883 ; AVX2: # BB#0: # %entry 884 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 885 ; AVX2-NEXT: retq 886 ; 887 ; AVX512F-LABEL: test32: 888 ; AVX512F: # BB#0: # %entry 889 ; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 890 ; AVX512F-NEXT: retq 891 entry: 892 %cmp = icmp uge <32 x i8> %a, %b 893 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 894 ret <32 x i8> %sel 895 } 896 897 define <16 x i16> @test33(<16 x i16> %a, <16 x i16> %b) { 898 ; SSE-LABEL: test33: 899 ; SSE: # BB#0: # %entry 900 ; SSE-NEXT: pminsw %xmm2, %xmm0 901 ; SSE-NEXT: pminsw %xmm3, %xmm1 902 ; SSE-NEXT: retq 903 ; 904 ; AVX1-LABEL: test33: 905 ; AVX1: # BB#0: # %entry 906 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 907 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 908 ; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 909 ; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 910 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 911 ; AVX1-NEXT: retq 912 ; 913 ; AVX2-LABEL: test33: 914 ; AVX2: # BB#0: # %entry 915 ; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 916 ; AVX2-NEXT: retq 917 ; 918 ; AVX512F-LABEL: test33: 919 ; AVX512F: # BB#0: # %entry 920 ; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 921 ; AVX512F-NEXT: retq 922 entry: 923 %cmp = icmp slt <16 x i16> %a, %b 924 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 925 ret <16 x i16> %sel 926 } 927 928 define <16 x i16> @test34(<16 x i16> %a, <16 x i16> %b) { 929 ; SSE-LABEL: test34: 930 ; SSE: # BB#0: # %entry 931 ; SSE-NEXT: pminsw %xmm2, %xmm0 932 ; SSE-NEXT: pminsw %xmm3, %xmm1 933 ; SSE-NEXT: retq 934 ; 935 ; AVX1-LABEL: test34: 936 ; AVX1: # BB#0: # %entry 937 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 938 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 939 ; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 940 ; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 941 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 942 ; AVX1-NEXT: retq 943 ; 944 ; AVX2-LABEL: test34: 945 ; AVX2: # BB#0: # %entry 946 ; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 947 ; AVX2-NEXT: retq 948 ; 949 ; AVX512F-LABEL: test34: 950 ; AVX512F: # BB#0: # %entry 951 ; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 952 ; AVX512F-NEXT: retq 953 entry: 954 %cmp = icmp sle <16 x i16> %a, %b 955 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 956 ret <16 x i16> %sel 957 } 958 959 define <16 x i16> @test35(<16 x i16> %a, <16 x i16> %b) { 960 ; SSE-LABEL: test35: 961 ; SSE: # BB#0: # %entry 962 ; SSE-NEXT: pmaxsw %xmm2, %xmm0 963 ; SSE-NEXT: pmaxsw %xmm3, %xmm1 964 ; SSE-NEXT: retq 965 ; 966 ; AVX1-LABEL: test35: 967 ; AVX1: # BB#0: # %entry 968 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 969 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 970 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 971 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 972 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 973 ; AVX1-NEXT: retq 974 ; 975 ; AVX2-LABEL: test35: 976 ; AVX2: # BB#0: # %entry 977 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 978 ; AVX2-NEXT: retq 979 ; 980 ; AVX512F-LABEL: test35: 981 ; AVX512F: # BB#0: # %entry 982 ; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 983 ; AVX512F-NEXT: retq 984 entry: 985 %cmp = icmp sgt <16 x i16> %a, %b 986 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 987 ret <16 x i16> %sel 988 } 989 990 define <16 x i16> @test36(<16 x i16> %a, <16 x i16> %b) { 991 ; SSE-LABEL: test36: 992 ; SSE: # BB#0: # %entry 993 ; SSE-NEXT: pmaxsw %xmm2, %xmm0 994 ; SSE-NEXT: pmaxsw %xmm3, %xmm1 995 ; SSE-NEXT: retq 996 ; 997 ; AVX1-LABEL: test36: 998 ; AVX1: # BB#0: # %entry 999 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1000 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1001 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 1002 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 1003 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1004 ; AVX1-NEXT: retq 1005 ; 1006 ; AVX2-LABEL: test36: 1007 ; AVX2: # BB#0: # %entry 1008 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 1009 ; AVX2-NEXT: retq 1010 ; 1011 ; AVX512F-LABEL: test36: 1012 ; AVX512F: # BB#0: # %entry 1013 ; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 1014 ; AVX512F-NEXT: retq 1015 entry: 1016 %cmp = icmp sge <16 x i16> %a, %b 1017 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1018 ret <16 x i16> %sel 1019 } 1020 1021 define <16 x i16> @test37(<16 x i16> %a, <16 x i16> %b) { 1022 ; SSE2-LABEL: test37: 1023 ; SSE2: # BB#0: # %entry 1024 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 1025 ; SSE2-NEXT: movdqa %xmm1, %xmm5 1026 ; SSE2-NEXT: pxor %xmm4, %xmm5 1027 ; SSE2-NEXT: movdqa %xmm3, %xmm6 1028 ; SSE2-NEXT: pxor %xmm4, %xmm6 1029 ; SSE2-NEXT: pcmpgtw %xmm5, %xmm6 1030 ; SSE2-NEXT: movdqa %xmm0, %xmm5 1031 ; SSE2-NEXT: pxor %xmm4, %xmm5 1032 ; SSE2-NEXT: pxor %xmm2, %xmm4 1033 ; SSE2-NEXT: pcmpgtw %xmm5, %xmm4 1034 ; SSE2-NEXT: pand %xmm4, %xmm0 1035 ; SSE2-NEXT: pandn %xmm2, %xmm4 1036 ; SSE2-NEXT: por %xmm4, %xmm0 1037 ; SSE2-NEXT: pand %xmm6, %xmm1 1038 ; SSE2-NEXT: pandn %xmm3, %xmm6 1039 ; SSE2-NEXT: por %xmm6, %xmm1 1040 ; SSE2-NEXT: retq 1041 ; 1042 ; SSE4-LABEL: test37: 1043 ; SSE4: # BB#0: # %entry 1044 ; SSE4-NEXT: pminuw %xmm2, %xmm0 1045 ; SSE4-NEXT: pminuw %xmm3, %xmm1 1046 ; SSE4-NEXT: retq 1047 ; 1048 ; AVX1-LABEL: test37: 1049 ; AVX1: # BB#0: # %entry 1050 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1051 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1052 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 1053 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1054 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1055 ; AVX1-NEXT: retq 1056 ; 1057 ; AVX2-LABEL: test37: 1058 ; AVX2: # BB#0: # %entry 1059 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1060 ; AVX2-NEXT: retq 1061 ; 1062 ; AVX512F-LABEL: test37: 1063 ; AVX512F: # BB#0: # %entry 1064 ; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1065 ; AVX512F-NEXT: retq 1066 entry: 1067 %cmp = icmp ult <16 x i16> %a, %b 1068 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1069 ret <16 x i16> %sel 1070 } 1071 1072 define <16 x i16> @test38(<16 x i16> %a, <16 x i16> %b) { 1073 ; SSE2-LABEL: test38: 1074 ; SSE2: # BB#0: # %entry 1075 ; SSE2-NEXT: movdqa %xmm1, %xmm4 1076 ; SSE2-NEXT: psubusw %xmm3, %xmm4 1077 ; SSE2-NEXT: pxor %xmm6, %xmm6 1078 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm4 1079 ; SSE2-NEXT: movdqa %xmm0, %xmm5 1080 ; SSE2-NEXT: psubusw %xmm2, %xmm5 1081 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm5 1082 ; SSE2-NEXT: pand %xmm5, %xmm0 1083 ; SSE2-NEXT: pandn %xmm2, %xmm5 1084 ; SSE2-NEXT: por %xmm0, %xmm5 1085 ; SSE2-NEXT: pand %xmm4, %xmm1 1086 ; SSE2-NEXT: pandn %xmm3, %xmm4 1087 ; SSE2-NEXT: por %xmm1, %xmm4 1088 ; SSE2-NEXT: movdqa %xmm5, %xmm0 1089 ; SSE2-NEXT: movdqa %xmm4, %xmm1 1090 ; SSE2-NEXT: retq 1091 ; 1092 ; SSE4-LABEL: test38: 1093 ; SSE4: # BB#0: # %entry 1094 ; SSE4-NEXT: pminuw %xmm2, %xmm0 1095 ; SSE4-NEXT: pminuw %xmm3, %xmm1 1096 ; SSE4-NEXT: retq 1097 ; 1098 ; AVX1-LABEL: test38: 1099 ; AVX1: # BB#0: # %entry 1100 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1101 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1102 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 1103 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1104 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1105 ; AVX1-NEXT: retq 1106 ; 1107 ; AVX2-LABEL: test38: 1108 ; AVX2: # BB#0: # %entry 1109 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1110 ; AVX2-NEXT: retq 1111 ; 1112 ; AVX512F-LABEL: test38: 1113 ; AVX512F: # BB#0: # %entry 1114 ; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1115 ; AVX512F-NEXT: retq 1116 entry: 1117 %cmp = icmp ule <16 x i16> %a, %b 1118 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1119 ret <16 x i16> %sel 1120 } 1121 1122 define <16 x i16> @test39(<16 x i16> %a, <16 x i16> %b) { 1123 ; SSE2-LABEL: test39: 1124 ; SSE2: # BB#0: # %entry 1125 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768] 1126 ; SSE2-NEXT: movdqa %xmm3, %xmm6 1127 ; SSE2-NEXT: pxor %xmm5, %xmm6 1128 ; SSE2-NEXT: movdqa %xmm1, %xmm4 1129 ; SSE2-NEXT: pxor %xmm5, %xmm4 1130 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm4 1131 ; SSE2-NEXT: movdqa %xmm2, %xmm6 1132 ; SSE2-NEXT: pxor %xmm5, %xmm6 1133 ; SSE2-NEXT: pxor %xmm0, %xmm5 1134 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm5 1135 ; SSE2-NEXT: pand %xmm5, %xmm0 1136 ; SSE2-NEXT: pandn %xmm2, %xmm5 1137 ; SSE2-NEXT: por %xmm5, %xmm0 1138 ; SSE2-NEXT: pand %xmm4, %xmm1 1139 ; SSE2-NEXT: pandn %xmm3, %xmm4 1140 ; SSE2-NEXT: por %xmm1, %xmm4 1141 ; SSE2-NEXT: movdqa %xmm4, %xmm1 1142 ; SSE2-NEXT: retq 1143 ; 1144 ; SSE4-LABEL: test39: 1145 ; SSE4: # BB#0: # %entry 1146 ; SSE4-NEXT: pmaxuw %xmm2, %xmm0 1147 ; SSE4-NEXT: pmaxuw %xmm3, %xmm1 1148 ; SSE4-NEXT: retq 1149 ; 1150 ; AVX1-LABEL: test39: 1151 ; AVX1: # BB#0: # %entry 1152 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1153 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1154 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 1155 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1156 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1157 ; AVX1-NEXT: retq 1158 ; 1159 ; AVX2-LABEL: test39: 1160 ; AVX2: # BB#0: # %entry 1161 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1162 ; AVX2-NEXT: retq 1163 ; 1164 ; AVX512F-LABEL: test39: 1165 ; AVX512F: # BB#0: # %entry 1166 ; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1167 ; AVX512F-NEXT: retq 1168 entry: 1169 %cmp = icmp ugt <16 x i16> %a, %b 1170 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1171 ret <16 x i16> %sel 1172 } 1173 1174 define <16 x i16> @test40(<16 x i16> %a, <16 x i16> %b) { 1175 ; SSE2-LABEL: test40: 1176 ; SSE2: # BB#0: # %entry 1177 ; SSE2-NEXT: movdqa %xmm3, %xmm4 1178 ; SSE2-NEXT: psubusw %xmm1, %xmm4 1179 ; SSE2-NEXT: pxor %xmm5, %xmm5 1180 ; SSE2-NEXT: pcmpeqw %xmm5, %xmm4 1181 ; SSE2-NEXT: movdqa %xmm2, %xmm6 1182 ; SSE2-NEXT: psubusw %xmm0, %xmm6 1183 ; SSE2-NEXT: pcmpeqw %xmm5, %xmm6 1184 ; SSE2-NEXT: pand %xmm6, %xmm0 1185 ; SSE2-NEXT: pandn %xmm2, %xmm6 1186 ; SSE2-NEXT: por %xmm6, %xmm0 1187 ; SSE2-NEXT: pand %xmm4, %xmm1 1188 ; SSE2-NEXT: pandn %xmm3, %xmm4 1189 ; SSE2-NEXT: por %xmm4, %xmm1 1190 ; SSE2-NEXT: retq 1191 ; 1192 ; SSE4-LABEL: test40: 1193 ; SSE4: # BB#0: # %entry 1194 ; SSE4-NEXT: pmaxuw %xmm2, %xmm0 1195 ; SSE4-NEXT: pmaxuw %xmm3, %xmm1 1196 ; SSE4-NEXT: retq 1197 ; 1198 ; AVX1-LABEL: test40: 1199 ; AVX1: # BB#0: # %entry 1200 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1201 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1202 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 1203 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1204 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1205 ; AVX1-NEXT: retq 1206 ; 1207 ; AVX2-LABEL: test40: 1208 ; AVX2: # BB#0: # %entry 1209 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1210 ; AVX2-NEXT: retq 1211 ; 1212 ; AVX512F-LABEL: test40: 1213 ; AVX512F: # BB#0: # %entry 1214 ; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1215 ; AVX512F-NEXT: retq 1216 entry: 1217 %cmp = icmp uge <16 x i16> %a, %b 1218 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1219 ret <16 x i16> %sel 1220 } 1221 1222 define <8 x i32> @test41(<8 x i32> %a, <8 x i32> %b) { 1223 ; SSE2-LABEL: test41: 1224 ; SSE2: # BB#0: # %entry 1225 ; SSE2-NEXT: movdqa %xmm3, %xmm4 1226 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 1227 ; SSE2-NEXT: movdqa %xmm2, %xmm5 1228 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 1229 ; SSE2-NEXT: pand %xmm5, %xmm0 1230 ; SSE2-NEXT: pandn %xmm2, %xmm5 1231 ; SSE2-NEXT: por %xmm5, %xmm0 1232 ; SSE2-NEXT: pand %xmm4, %xmm1 1233 ; SSE2-NEXT: pandn %xmm3, %xmm4 1234 ; SSE2-NEXT: por %xmm4, %xmm1 1235 ; SSE2-NEXT: retq 1236 ; 1237 ; SSE4-LABEL: test41: 1238 ; SSE4: # BB#0: # %entry 1239 ; SSE4-NEXT: pminsd %xmm2, %xmm0 1240 ; SSE4-NEXT: pminsd %xmm3, %xmm1 1241 ; SSE4-NEXT: retq 1242 ; 1243 ; AVX1-LABEL: test41: 1244 ; AVX1: # BB#0: # %entry 1245 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1246 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1247 ; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 1248 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1249 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1250 ; AVX1-NEXT: retq 1251 ; 1252 ; AVX2-LABEL: test41: 1253 ; AVX2: # BB#0: # %entry 1254 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1255 ; AVX2-NEXT: retq 1256 ; 1257 ; AVX512F-LABEL: test41: 1258 ; AVX512F: # BB#0: # %entry 1259 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1260 ; AVX512F-NEXT: retq 1261 entry: 1262 %cmp = icmp slt <8 x i32> %a, %b 1263 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1264 ret <8 x i32> %sel 1265 } 1266 1267 define <8 x i32> @test42(<8 x i32> %a, <8 x i32> %b) { 1268 ; SSE2-LABEL: test42: 1269 ; SSE2: # BB#0: # %entry 1270 ; SSE2-NEXT: movdqa %xmm1, %xmm6 1271 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm6 1272 ; SSE2-NEXT: pcmpeqd %xmm7, %xmm7 1273 ; SSE2-NEXT: movdqa %xmm6, %xmm4 1274 ; SSE2-NEXT: pxor %xmm7, %xmm4 1275 ; SSE2-NEXT: movdqa %xmm0, %xmm5 1276 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 1277 ; SSE2-NEXT: pxor %xmm5, %xmm7 1278 ; SSE2-NEXT: pandn %xmm0, %xmm5 1279 ; SSE2-NEXT: pandn %xmm2, %xmm7 1280 ; SSE2-NEXT: por %xmm7, %xmm5 1281 ; SSE2-NEXT: pandn %xmm1, %xmm6 1282 ; SSE2-NEXT: pandn %xmm3, %xmm4 1283 ; SSE2-NEXT: por %xmm6, %xmm4 1284 ; SSE2-NEXT: movdqa %xmm5, %xmm0 1285 ; SSE2-NEXT: movdqa %xmm4, %xmm1 1286 ; SSE2-NEXT: retq 1287 ; 1288 ; SSE4-LABEL: test42: 1289 ; SSE4: # BB#0: # %entry 1290 ; SSE4-NEXT: pminsd %xmm2, %xmm0 1291 ; SSE4-NEXT: pminsd %xmm3, %xmm1 1292 ; SSE4-NEXT: retq 1293 ; 1294 ; AVX1-LABEL: test42: 1295 ; AVX1: # BB#0: # %entry 1296 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1297 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1298 ; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 1299 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1300 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1301 ; AVX1-NEXT: retq 1302 ; 1303 ; AVX2-LABEL: test42: 1304 ; AVX2: # BB#0: # %entry 1305 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1306 ; AVX2-NEXT: retq 1307 ; 1308 ; AVX512F-LABEL: test42: 1309 ; AVX512F: # BB#0: # %entry 1310 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1311 ; AVX512F-NEXT: retq 1312 entry: 1313 %cmp = icmp sle <8 x i32> %a, %b 1314 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1315 ret <8 x i32> %sel 1316 } 1317 1318 define <8 x i32> @test43(<8 x i32> %a, <8 x i32> %b) { 1319 ; SSE2-LABEL: test43: 1320 ; SSE2: # BB#0: # %entry 1321 ; SSE2-NEXT: movdqa %xmm1, %xmm4 1322 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 1323 ; SSE2-NEXT: movdqa %xmm0, %xmm5 1324 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 1325 ; SSE2-NEXT: pand %xmm5, %xmm0 1326 ; SSE2-NEXT: pandn %xmm2, %xmm5 1327 ; SSE2-NEXT: por %xmm0, %xmm5 1328 ; SSE2-NEXT: pand %xmm4, %xmm1 1329 ; SSE2-NEXT: pandn %xmm3, %xmm4 1330 ; SSE2-NEXT: por %xmm1, %xmm4 1331 ; SSE2-NEXT: movdqa %xmm5, %xmm0 1332 ; SSE2-NEXT: movdqa %xmm4, %xmm1 1333 ; SSE2-NEXT: retq 1334 ; 1335 ; SSE4-LABEL: test43: 1336 ; SSE4: # BB#0: # %entry 1337 ; SSE4-NEXT: pmaxsd %xmm2, %xmm0 1338 ; SSE4-NEXT: pmaxsd %xmm3, %xmm1 1339 ; SSE4-NEXT: retq 1340 ; 1341 ; AVX1-LABEL: test43: 1342 ; AVX1: # BB#0: # %entry 1343 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1344 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1345 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 1346 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1347 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1348 ; AVX1-NEXT: retq 1349 ; 1350 ; AVX2-LABEL: test43: 1351 ; AVX2: # BB#0: # %entry 1352 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1353 ; AVX2-NEXT: retq 1354 ; 1355 ; AVX512F-LABEL: test43: 1356 ; AVX512F: # BB#0: # %entry 1357 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1358 ; AVX512F-NEXT: retq 1359 entry: 1360 %cmp = icmp sgt <8 x i32> %a, %b 1361 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1362 ret <8 x i32> %sel 1363 } 1364 1365 define <8 x i32> @test44(<8 x i32> %a, <8 x i32> %b) { 1366 ; SSE2-LABEL: test44: 1367 ; SSE2: # BB#0: # %entry 1368 ; SSE2-NEXT: movdqa %xmm3, %xmm6 1369 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm6 1370 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 1371 ; SSE2-NEXT: movdqa %xmm6, %xmm5 1372 ; SSE2-NEXT: pxor %xmm4, %xmm5 1373 ; SSE2-NEXT: movdqa %xmm2, %xmm7 1374 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm7 1375 ; SSE2-NEXT: pxor %xmm7, %xmm4 1376 ; SSE2-NEXT: pandn %xmm0, %xmm7 1377 ; SSE2-NEXT: pandn %xmm2, %xmm4 1378 ; SSE2-NEXT: por %xmm7, %xmm4 1379 ; SSE2-NEXT: pandn %xmm1, %xmm6 1380 ; SSE2-NEXT: pandn %xmm3, %xmm5 1381 ; SSE2-NEXT: por %xmm6, %xmm5 1382 ; SSE2-NEXT: movdqa %xmm4, %xmm0 1383 ; SSE2-NEXT: movdqa %xmm5, %xmm1 1384 ; SSE2-NEXT: retq 1385 ; 1386 ; SSE4-LABEL: test44: 1387 ; SSE4: # BB#0: # %entry 1388 ; SSE4-NEXT: pmaxsd %xmm2, %xmm0 1389 ; SSE4-NEXT: pmaxsd %xmm3, %xmm1 1390 ; SSE4-NEXT: retq 1391 ; 1392 ; AVX1-LABEL: test44: 1393 ; AVX1: # BB#0: # %entry 1394 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1395 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1396 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 1397 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1398 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1399 ; AVX1-NEXT: retq 1400 ; 1401 ; AVX2-LABEL: test44: 1402 ; AVX2: # BB#0: # %entry 1403 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1404 ; AVX2-NEXT: retq 1405 ; 1406 ; AVX512F-LABEL: test44: 1407 ; AVX512F: # BB#0: # %entry 1408 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1409 ; AVX512F-NEXT: retq 1410 entry: 1411 %cmp = icmp sge <8 x i32> %a, %b 1412 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1413 ret <8 x i32> %sel 1414 } 1415 1416 define <8 x i32> @test45(<8 x i32> %a, <8 x i32> %b) { 1417 ; SSE2-LABEL: test45: 1418 ; SSE2: # BB#0: # %entry 1419 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 1420 ; SSE2-NEXT: movdqa %xmm1, %xmm5 1421 ; SSE2-NEXT: pxor %xmm4, %xmm5 1422 ; SSE2-NEXT: movdqa %xmm3, %xmm6 1423 ; SSE2-NEXT: pxor %xmm4, %xmm6 1424 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 1425 ; SSE2-NEXT: movdqa %xmm0, %xmm5 1426 ; SSE2-NEXT: pxor %xmm4, %xmm5 1427 ; SSE2-NEXT: pxor %xmm2, %xmm4 1428 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 1429 ; SSE2-NEXT: pand %xmm4, %xmm0 1430 ; SSE2-NEXT: pandn %xmm2, %xmm4 1431 ; SSE2-NEXT: por %xmm4, %xmm0 1432 ; SSE2-NEXT: pand %xmm6, %xmm1 1433 ; SSE2-NEXT: pandn %xmm3, %xmm6 1434 ; SSE2-NEXT: por %xmm6, %xmm1 1435 ; SSE2-NEXT: retq 1436 ; 1437 ; SSE4-LABEL: test45: 1438 ; SSE4: # BB#0: # %entry 1439 ; SSE4-NEXT: pminud %xmm2, %xmm0 1440 ; SSE4-NEXT: pminud %xmm3, %xmm1 1441 ; SSE4-NEXT: retq 1442 ; 1443 ; AVX1-LABEL: test45: 1444 ; AVX1: # BB#0: # %entry 1445 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1446 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1447 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 1448 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 1449 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1450 ; AVX1-NEXT: retq 1451 ; 1452 ; AVX2-LABEL: test45: 1453 ; AVX2: # BB#0: # %entry 1454 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 1455 ; AVX2-NEXT: retq 1456 ; 1457 ; AVX512F-LABEL: test45: 1458 ; AVX512F: # BB#0: # %entry 1459 ; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0 1460 ; AVX512F-NEXT: retq 1461 entry: 1462 %cmp = icmp ult <8 x i32> %a, %b 1463 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1464 ret <8 x i32> %sel 1465 } 1466 1467 define <8 x i32> @test46(<8 x i32> %a, <8 x i32> %b) { 1468 ; SSE2-LABEL: test46: 1469 ; SSE2: # BB#0: # %entry 1470 ; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648] 1471 ; SSE2-NEXT: movdqa %xmm3, %xmm4 1472 ; SSE2-NEXT: pxor %xmm6, %xmm4 1473 ; SSE2-NEXT: movdqa %xmm1, %xmm7 1474 ; SSE2-NEXT: pxor %xmm6, %xmm7 1475 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 1476 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 1477 ; SSE2-NEXT: movdqa %xmm7, %xmm5 1478 ; SSE2-NEXT: pxor %xmm4, %xmm5 1479 ; SSE2-NEXT: movdqa %xmm2, %xmm8 1480 ; SSE2-NEXT: pxor %xmm6, %xmm8 1481 ; SSE2-NEXT: pxor %xmm0, %xmm6 1482 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm6 1483 ; SSE2-NEXT: pxor %xmm6, %xmm4 1484 ; SSE2-NEXT: pandn %xmm0, %xmm6 1485 ; SSE2-NEXT: pandn %xmm2, %xmm4 1486 ; SSE2-NEXT: por %xmm6, %xmm4 1487 ; SSE2-NEXT: pandn %xmm1, %xmm7 1488 ; SSE2-NEXT: pandn %xmm3, %xmm5 1489 ; SSE2-NEXT: por %xmm7, %xmm5 1490 ; SSE2-NEXT: movdqa %xmm4, %xmm0 1491 ; SSE2-NEXT: movdqa %xmm5, %xmm1 1492 ; SSE2-NEXT: retq 1493 ; 1494 ; SSE4-LABEL: test46: 1495 ; SSE4: # BB#0: # %entry 1496 ; SSE4-NEXT: pminud %xmm2, %xmm0 1497 ; SSE4-NEXT: pminud %xmm3, %xmm1 1498 ; SSE4-NEXT: retq 1499 ; 1500 ; AVX1-LABEL: test46: 1501 ; AVX1: # BB#0: # %entry 1502 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1503 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1504 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 1505 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 1506 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1507 ; AVX1-NEXT: retq 1508 ; 1509 ; AVX2-LABEL: test46: 1510 ; AVX2: # BB#0: # %entry 1511 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 1512 ; AVX2-NEXT: retq 1513 ; 1514 ; AVX512F-LABEL: test46: 1515 ; AVX512F: # BB#0: # %entry 1516 ; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0 1517 ; AVX512F-NEXT: retq 1518 entry: 1519 %cmp = icmp ule <8 x i32> %a, %b 1520 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1521 ret <8 x i32> %sel 1522 } 1523 1524 define <8 x i32> @test47(<8 x i32> %a, <8 x i32> %b) { 1525 ; SSE2-LABEL: test47: 1526 ; SSE2: # BB#0: # %entry 1527 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 1528 ; SSE2-NEXT: movdqa %xmm3, %xmm6 1529 ; SSE2-NEXT: pxor %xmm5, %xmm6 1530 ; SSE2-NEXT: movdqa %xmm1, %xmm4 1531 ; SSE2-NEXT: pxor %xmm5, %xmm4 1532 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 1533 ; SSE2-NEXT: movdqa %xmm2, %xmm6 1534 ; SSE2-NEXT: pxor %xmm5, %xmm6 1535 ; SSE2-NEXT: pxor %xmm0, %xmm5 1536 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 1537 ; SSE2-NEXT: pand %xmm5, %xmm0 1538 ; SSE2-NEXT: pandn %xmm2, %xmm5 1539 ; SSE2-NEXT: por %xmm5, %xmm0 1540 ; SSE2-NEXT: pand %xmm4, %xmm1 1541 ; SSE2-NEXT: pandn %xmm3, %xmm4 1542 ; SSE2-NEXT: por %xmm1, %xmm4 1543 ; SSE2-NEXT: movdqa %xmm4, %xmm1 1544 ; SSE2-NEXT: retq 1545 ; 1546 ; SSE4-LABEL: test47: 1547 ; SSE4: # BB#0: # %entry 1548 ; SSE4-NEXT: pmaxud %xmm2, %xmm0 1549 ; SSE4-NEXT: pmaxud %xmm3, %xmm1 1550 ; SSE4-NEXT: retq 1551 ; 1552 ; AVX1-LABEL: test47: 1553 ; AVX1: # BB#0: # %entry 1554 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1555 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1556 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 1557 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 1558 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1559 ; AVX1-NEXT: retq 1560 ; 1561 ; AVX2-LABEL: test47: 1562 ; AVX2: # BB#0: # %entry 1563 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1564 ; AVX2-NEXT: retq 1565 ; 1566 ; AVX512F-LABEL: test47: 1567 ; AVX512F: # BB#0: # %entry 1568 ; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1569 ; AVX512F-NEXT: retq 1570 entry: 1571 %cmp = icmp ugt <8 x i32> %a, %b 1572 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1573 ret <8 x i32> %sel 1574 } 1575 1576 define <8 x i32> @test48(<8 x i32> %a, <8 x i32> %b) { 1577 ; SSE2-LABEL: test48: 1578 ; SSE2: # BB#0: # %entry 1579 ; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648] 1580 ; SSE2-NEXT: movdqa %xmm1, %xmm4 1581 ; SSE2-NEXT: pxor %xmm6, %xmm4 1582 ; SSE2-NEXT: movdqa %xmm3, %xmm7 1583 ; SSE2-NEXT: pxor %xmm6, %xmm7 1584 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 1585 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 1586 ; SSE2-NEXT: movdqa %xmm7, %xmm5 1587 ; SSE2-NEXT: pxor %xmm4, %xmm5 1588 ; SSE2-NEXT: movdqa %xmm0, %xmm8 1589 ; SSE2-NEXT: pxor %xmm6, %xmm8 1590 ; SSE2-NEXT: pxor %xmm2, %xmm6 1591 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm6 1592 ; SSE2-NEXT: pxor %xmm6, %xmm4 1593 ; SSE2-NEXT: pandn %xmm0, %xmm6 1594 ; SSE2-NEXT: pandn %xmm2, %xmm4 1595 ; SSE2-NEXT: por %xmm6, %xmm4 1596 ; SSE2-NEXT: pandn %xmm1, %xmm7 1597 ; SSE2-NEXT: pandn %xmm3, %xmm5 1598 ; SSE2-NEXT: por %xmm7, %xmm5 1599 ; SSE2-NEXT: movdqa %xmm4, %xmm0 1600 ; SSE2-NEXT: movdqa %xmm5, %xmm1 1601 ; SSE2-NEXT: retq 1602 ; 1603 ; SSE4-LABEL: test48: 1604 ; SSE4: # BB#0: # %entry 1605 ; SSE4-NEXT: pmaxud %xmm2, %xmm0 1606 ; SSE4-NEXT: pmaxud %xmm3, %xmm1 1607 ; SSE4-NEXT: retq 1608 ; 1609 ; AVX1-LABEL: test48: 1610 ; AVX1: # BB#0: # %entry 1611 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1612 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1613 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 1614 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 1615 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1616 ; AVX1-NEXT: retq 1617 ; 1618 ; AVX2-LABEL: test48: 1619 ; AVX2: # BB#0: # %entry 1620 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1621 ; AVX2-NEXT: retq 1622 ; 1623 ; AVX512F-LABEL: test48: 1624 ; AVX512F: # BB#0: # %entry 1625 ; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1626 ; AVX512F-NEXT: retq 1627 entry: 1628 %cmp = icmp uge <8 x i32> %a, %b 1629 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1630 ret <8 x i32> %sel 1631 } 1632 1633 define <16 x i8> @test49(<16 x i8> %a, <16 x i8> %b) { 1634 ; SSE2-LABEL: test49: 1635 ; SSE2: # BB#0: # %entry 1636 ; SSE2-NEXT: movdqa %xmm1, %xmm2 1637 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm2 1638 ; SSE2-NEXT: pand %xmm2, %xmm1 1639 ; SSE2-NEXT: pandn %xmm0, %xmm2 1640 ; SSE2-NEXT: por %xmm1, %xmm2 1641 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1642 ; SSE2-NEXT: retq 1643 ; 1644 ; SSE4-LABEL: test49: 1645 ; SSE4: # BB#0: # %entry 1646 ; SSE4-NEXT: pmaxsb %xmm1, %xmm0 1647 ; SSE4-NEXT: retq 1648 ; 1649 ; AVX-LABEL: test49: 1650 ; AVX: # BB#0: # %entry 1651 ; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 1652 ; AVX-NEXT: retq 1653 entry: 1654 %cmp = icmp slt <16 x i8> %a, %b 1655 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1656 ret <16 x i8> %sel 1657 } 1658 1659 define <16 x i8> @test50(<16 x i8> %a, <16 x i8> %b) { 1660 ; SSE2-LABEL: test50: 1661 ; SSE2: # BB#0: # %entry 1662 ; SSE2-NEXT: movdqa %xmm0, %xmm2 1663 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 1664 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm3 1665 ; SSE2-NEXT: pxor %xmm2, %xmm3 1666 ; SSE2-NEXT: pandn %xmm1, %xmm2 1667 ; SSE2-NEXT: pandn %xmm0, %xmm3 1668 ; SSE2-NEXT: por %xmm3, %xmm2 1669 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1670 ; SSE2-NEXT: retq 1671 ; 1672 ; SSE4-LABEL: test50: 1673 ; SSE4: # BB#0: # %entry 1674 ; SSE4-NEXT: pmaxsb %xmm1, %xmm0 1675 ; SSE4-NEXT: retq 1676 ; 1677 ; AVX-LABEL: test50: 1678 ; AVX: # BB#0: # %entry 1679 ; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 1680 ; AVX-NEXT: retq 1681 entry: 1682 %cmp = icmp sle <16 x i8> %a, %b 1683 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1684 ret <16 x i8> %sel 1685 } 1686 1687 define <16 x i8> @test51(<16 x i8> %a, <16 x i8> %b) { 1688 ; SSE2-LABEL: test51: 1689 ; SSE2: # BB#0: # %entry 1690 ; SSE2-NEXT: movdqa %xmm0, %xmm2 1691 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 1692 ; SSE2-NEXT: pand %xmm2, %xmm1 1693 ; SSE2-NEXT: pandn %xmm0, %xmm2 1694 ; SSE2-NEXT: por %xmm1, %xmm2 1695 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1696 ; SSE2-NEXT: retq 1697 ; 1698 ; SSE4-LABEL: test51: 1699 ; SSE4: # BB#0: # %entry 1700 ; SSE4-NEXT: pminsb %xmm1, %xmm0 1701 ; SSE4-NEXT: retq 1702 ; 1703 ; AVX-LABEL: test51: 1704 ; AVX: # BB#0: # %entry 1705 ; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0 1706 ; AVX-NEXT: retq 1707 entry: 1708 %cmp = icmp sgt <16 x i8> %a, %b 1709 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1710 ret <16 x i8> %sel 1711 } 1712 1713 define <16 x i8> @test52(<16 x i8> %a, <16 x i8> %b) { 1714 ; SSE2-LABEL: test52: 1715 ; SSE2: # BB#0: # %entry 1716 ; SSE2-NEXT: movdqa %xmm1, %xmm3 1717 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm3 1718 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 1719 ; SSE2-NEXT: pxor %xmm3, %xmm2 1720 ; SSE2-NEXT: pandn %xmm1, %xmm3 1721 ; SSE2-NEXT: pandn %xmm0, %xmm2 1722 ; SSE2-NEXT: por %xmm3, %xmm2 1723 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1724 ; SSE2-NEXT: retq 1725 ; 1726 ; SSE4-LABEL: test52: 1727 ; SSE4: # BB#0: # %entry 1728 ; SSE4-NEXT: pminsb %xmm1, %xmm0 1729 ; SSE4-NEXT: retq 1730 ; 1731 ; AVX-LABEL: test52: 1732 ; AVX: # BB#0: # %entry 1733 ; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0 1734 ; AVX-NEXT: retq 1735 entry: 1736 %cmp = icmp sge <16 x i8> %a, %b 1737 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1738 ret <16 x i8> %sel 1739 } 1740 1741 define <16 x i8> @test53(<16 x i8> %a, <16 x i8> %b) { 1742 ; SSE-LABEL: test53: 1743 ; SSE: # BB#0: # %entry 1744 ; SSE-NEXT: pmaxub %xmm1, %xmm0 1745 ; SSE-NEXT: retq 1746 ; 1747 ; AVX-LABEL: test53: 1748 ; AVX: # BB#0: # %entry 1749 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 1750 ; AVX-NEXT: retq 1751 entry: 1752 %cmp = icmp ult <16 x i8> %a, %b 1753 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1754 ret <16 x i8> %sel 1755 } 1756 1757 define <16 x i8> @test54(<16 x i8> %a, <16 x i8> %b) { 1758 ; SSE-LABEL: test54: 1759 ; SSE: # BB#0: # %entry 1760 ; SSE-NEXT: pmaxub %xmm1, %xmm0 1761 ; SSE-NEXT: retq 1762 ; 1763 ; AVX-LABEL: test54: 1764 ; AVX: # BB#0: # %entry 1765 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 1766 ; AVX-NEXT: retq 1767 entry: 1768 %cmp = icmp ule <16 x i8> %a, %b 1769 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1770 ret <16 x i8> %sel 1771 } 1772 1773 define <16 x i8> @test55(<16 x i8> %a, <16 x i8> %b) { 1774 ; SSE-LABEL: test55: 1775 ; SSE: # BB#0: # %entry 1776 ; SSE-NEXT: pminub %xmm1, %xmm0 1777 ; SSE-NEXT: retq 1778 ; 1779 ; AVX-LABEL: test55: 1780 ; AVX: # BB#0: # %entry 1781 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 1782 ; AVX-NEXT: retq 1783 entry: 1784 %cmp = icmp ugt <16 x i8> %a, %b 1785 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1786 ret <16 x i8> %sel 1787 } 1788 1789 define <16 x i8> @test56(<16 x i8> %a, <16 x i8> %b) { 1790 ; SSE-LABEL: test56: 1791 ; SSE: # BB#0: # %entry 1792 ; SSE-NEXT: pminub %xmm1, %xmm0 1793 ; SSE-NEXT: retq 1794 ; 1795 ; AVX-LABEL: test56: 1796 ; AVX: # BB#0: # %entry 1797 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 1798 ; AVX-NEXT: retq 1799 entry: 1800 %cmp = icmp uge <16 x i8> %a, %b 1801 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1802 ret <16 x i8> %sel 1803 } 1804 1805 define <8 x i16> @test57(<8 x i16> %a, <8 x i16> %b) { 1806 ; SSE-LABEL: test57: 1807 ; SSE: # BB#0: # %entry 1808 ; SSE-NEXT: pmaxsw %xmm1, %xmm0 1809 ; SSE-NEXT: retq 1810 ; 1811 ; AVX-LABEL: test57: 1812 ; AVX: # BB#0: # %entry 1813 ; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 1814 ; AVX-NEXT: retq 1815 entry: 1816 %cmp = icmp slt <8 x i16> %a, %b 1817 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1818 ret <8 x i16> %sel 1819 } 1820 1821 define <8 x i16> @test58(<8 x i16> %a, <8 x i16> %b) { 1822 ; SSE-LABEL: test58: 1823 ; SSE: # BB#0: # %entry 1824 ; SSE-NEXT: pmaxsw %xmm1, %xmm0 1825 ; SSE-NEXT: retq 1826 ; 1827 ; AVX-LABEL: test58: 1828 ; AVX: # BB#0: # %entry 1829 ; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 1830 ; AVX-NEXT: retq 1831 entry: 1832 %cmp = icmp sle <8 x i16> %a, %b 1833 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1834 ret <8 x i16> %sel 1835 } 1836 1837 define <8 x i16> @test59(<8 x i16> %a, <8 x i16> %b) { 1838 ; SSE-LABEL: test59: 1839 ; SSE: # BB#0: # %entry 1840 ; SSE-NEXT: pminsw %xmm1, %xmm0 1841 ; SSE-NEXT: retq 1842 ; 1843 ; AVX-LABEL: test59: 1844 ; AVX: # BB#0: # %entry 1845 ; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 1846 ; AVX-NEXT: retq 1847 entry: 1848 %cmp = icmp sgt <8 x i16> %a, %b 1849 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1850 ret <8 x i16> %sel 1851 } 1852 1853 define <8 x i16> @test60(<8 x i16> %a, <8 x i16> %b) { 1854 ; SSE-LABEL: test60: 1855 ; SSE: # BB#0: # %entry 1856 ; SSE-NEXT: pminsw %xmm1, %xmm0 1857 ; SSE-NEXT: retq 1858 ; 1859 ; AVX-LABEL: test60: 1860 ; AVX: # BB#0: # %entry 1861 ; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 1862 ; AVX-NEXT: retq 1863 entry: 1864 %cmp = icmp sge <8 x i16> %a, %b 1865 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1866 ret <8 x i16> %sel 1867 } 1868 1869 define <8 x i16> @test61(<8 x i16> %a, <8 x i16> %b) { 1870 ; SSE2-LABEL: test61: 1871 ; SSE2: # BB#0: # %entry 1872 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 1873 ; SSE2-NEXT: movdqa %xmm0, %xmm3 1874 ; SSE2-NEXT: pxor %xmm2, %xmm3 1875 ; SSE2-NEXT: pxor %xmm1, %xmm2 1876 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm2 1877 ; SSE2-NEXT: pand %xmm2, %xmm1 1878 ; SSE2-NEXT: pandn %xmm0, %xmm2 1879 ; SSE2-NEXT: por %xmm1, %xmm2 1880 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1881 ; SSE2-NEXT: retq 1882 ; 1883 ; SSE4-LABEL: test61: 1884 ; SSE4: # BB#0: # %entry 1885 ; SSE4-NEXT: pmaxuw %xmm1, %xmm0 1886 ; SSE4-NEXT: retq 1887 ; 1888 ; AVX-LABEL: test61: 1889 ; AVX: # BB#0: # %entry 1890 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1891 ; AVX-NEXT: retq 1892 entry: 1893 %cmp = icmp ult <8 x i16> %a, %b 1894 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1895 ret <8 x i16> %sel 1896 } 1897 1898 define <8 x i16> @test62(<8 x i16> %a, <8 x i16> %b) { 1899 ; SSE2-LABEL: test62: 1900 ; SSE2: # BB#0: # %entry 1901 ; SSE2-NEXT: movdqa %xmm0, %xmm3 1902 ; SSE2-NEXT: psubusw %xmm1, %xmm3 1903 ; SSE2-NEXT: pxor %xmm2, %xmm2 1904 ; SSE2-NEXT: pcmpeqw %xmm3, %xmm2 1905 ; SSE2-NEXT: pand %xmm2, %xmm1 1906 ; SSE2-NEXT: pandn %xmm0, %xmm2 1907 ; SSE2-NEXT: por %xmm1, %xmm2 1908 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1909 ; SSE2-NEXT: retq 1910 ; 1911 ; SSE4-LABEL: test62: 1912 ; SSE4: # BB#0: # %entry 1913 ; SSE4-NEXT: pmaxuw %xmm1, %xmm0 1914 ; SSE4-NEXT: retq 1915 ; 1916 ; AVX-LABEL: test62: 1917 ; AVX: # BB#0: # %entry 1918 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1919 ; AVX-NEXT: retq 1920 entry: 1921 %cmp = icmp ule <8 x i16> %a, %b 1922 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1923 ret <8 x i16> %sel 1924 } 1925 1926 define <8 x i16> @test63(<8 x i16> %a, <8 x i16> %b) { 1927 ; SSE2-LABEL: test63: 1928 ; SSE2: # BB#0: # %entry 1929 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 1930 ; SSE2-NEXT: movdqa %xmm1, %xmm3 1931 ; SSE2-NEXT: pxor %xmm2, %xmm3 1932 ; SSE2-NEXT: pxor %xmm0, %xmm2 1933 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm2 1934 ; SSE2-NEXT: pand %xmm2, %xmm1 1935 ; SSE2-NEXT: pandn %xmm0, %xmm2 1936 ; SSE2-NEXT: por %xmm1, %xmm2 1937 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1938 ; SSE2-NEXT: retq 1939 ; 1940 ; SSE4-LABEL: test63: 1941 ; SSE4: # BB#0: # %entry 1942 ; SSE4-NEXT: pminuw %xmm1, %xmm0 1943 ; SSE4-NEXT: retq 1944 ; 1945 ; AVX-LABEL: test63: 1946 ; AVX: # BB#0: # %entry 1947 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1948 ; AVX-NEXT: retq 1949 entry: 1950 %cmp = icmp ugt <8 x i16> %a, %b 1951 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1952 ret <8 x i16> %sel 1953 } 1954 1955 define <8 x i16> @test64(<8 x i16> %a, <8 x i16> %b) { 1956 ; SSE2-LABEL: test64: 1957 ; SSE2: # BB#0: # %entry 1958 ; SSE2-NEXT: movdqa %xmm1, %xmm3 1959 ; SSE2-NEXT: psubusw %xmm0, %xmm3 1960 ; SSE2-NEXT: pxor %xmm2, %xmm2 1961 ; SSE2-NEXT: pcmpeqw %xmm3, %xmm2 1962 ; SSE2-NEXT: pand %xmm2, %xmm1 1963 ; SSE2-NEXT: pandn %xmm0, %xmm2 1964 ; SSE2-NEXT: por %xmm1, %xmm2 1965 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1966 ; SSE2-NEXT: retq 1967 ; 1968 ; SSE4-LABEL: test64: 1969 ; SSE4: # BB#0: # %entry 1970 ; SSE4-NEXT: pminuw %xmm1, %xmm0 1971 ; SSE4-NEXT: retq 1972 ; 1973 ; AVX-LABEL: test64: 1974 ; AVX: # BB#0: # %entry 1975 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1976 ; AVX-NEXT: retq 1977 entry: 1978 %cmp = icmp uge <8 x i16> %a, %b 1979 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1980 ret <8 x i16> %sel 1981 } 1982 1983 define <4 x i32> @test65(<4 x i32> %a, <4 x i32> %b) { 1984 ; SSE2-LABEL: test65: 1985 ; SSE2: # BB#0: # %entry 1986 ; SSE2-NEXT: movdqa %xmm1, %xmm2 1987 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 1988 ; SSE2-NEXT: pand %xmm2, %xmm1 1989 ; SSE2-NEXT: pandn %xmm0, %xmm2 1990 ; SSE2-NEXT: por %xmm1, %xmm2 1991 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1992 ; SSE2-NEXT: retq 1993 ; 1994 ; SSE4-LABEL: test65: 1995 ; SSE4: # BB#0: # %entry 1996 ; SSE4-NEXT: pmaxsd %xmm1, %xmm0 1997 ; SSE4-NEXT: retq 1998 ; 1999 ; AVX-LABEL: test65: 2000 ; AVX: # BB#0: # %entry 2001 ; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2002 ; AVX-NEXT: retq 2003 entry: 2004 %cmp = icmp slt <4 x i32> %a, %b 2005 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2006 ret <4 x i32> %sel 2007 } 2008 2009 define <4 x i32> @test66(<4 x i32> %a, <4 x i32> %b) { 2010 ; SSE2-LABEL: test66: 2011 ; SSE2: # BB#0: # %entry 2012 ; SSE2-NEXT: movdqa %xmm0, %xmm2 2013 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 2014 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm3 2015 ; SSE2-NEXT: pxor %xmm2, %xmm3 2016 ; SSE2-NEXT: pandn %xmm1, %xmm2 2017 ; SSE2-NEXT: pandn %xmm0, %xmm3 2018 ; SSE2-NEXT: por %xmm3, %xmm2 2019 ; SSE2-NEXT: movdqa %xmm2, %xmm0 2020 ; SSE2-NEXT: retq 2021 ; 2022 ; SSE4-LABEL: test66: 2023 ; SSE4: # BB#0: # %entry 2024 ; SSE4-NEXT: pmaxsd %xmm1, %xmm0 2025 ; SSE4-NEXT: retq 2026 ; 2027 ; AVX-LABEL: test66: 2028 ; AVX: # BB#0: # %entry 2029 ; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2030 ; AVX-NEXT: retq 2031 entry: 2032 %cmp = icmp sle <4 x i32> %a, %b 2033 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2034 ret <4 x i32> %sel 2035 } 2036 2037 define <4 x i32> @test67(<4 x i32> %a, <4 x i32> %b) { 2038 ; SSE2-LABEL: test67: 2039 ; SSE2: # BB#0: # %entry 2040 ; SSE2-NEXT: movdqa %xmm0, %xmm2 2041 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 2042 ; SSE2-NEXT: pand %xmm2, %xmm1 2043 ; SSE2-NEXT: pandn %xmm0, %xmm2 2044 ; SSE2-NEXT: por %xmm1, %xmm2 2045 ; SSE2-NEXT: movdqa %xmm2, %xmm0 2046 ; SSE2-NEXT: retq 2047 ; 2048 ; SSE4-LABEL: test67: 2049 ; SSE4: # BB#0: # %entry 2050 ; SSE4-NEXT: pminsd %xmm1, %xmm0 2051 ; SSE4-NEXT: retq 2052 ; 2053 ; AVX-LABEL: test67: 2054 ; AVX: # BB#0: # %entry 2055 ; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 2056 ; AVX-NEXT: retq 2057 entry: 2058 %cmp = icmp sgt <4 x i32> %a, %b 2059 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2060 ret <4 x i32> %sel 2061 } 2062 2063 define <4 x i32> @test68(<4 x i32> %a, <4 x i32> %b) { 2064 ; SSE2-LABEL: test68: 2065 ; SSE2: # BB#0: # %entry 2066 ; SSE2-NEXT: movdqa %xmm1, %xmm3 2067 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm3 2068 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 2069 ; SSE2-NEXT: pxor %xmm3, %xmm2 2070 ; SSE2-NEXT: pandn %xmm1, %xmm3 2071 ; SSE2-NEXT: pandn %xmm0, %xmm2 2072 ; SSE2-NEXT: por %xmm3, %xmm2 2073 ; SSE2-NEXT: movdqa %xmm2, %xmm0 2074 ; SSE2-NEXT: retq 2075 ; 2076 ; SSE4-LABEL: test68: 2077 ; SSE4: # BB#0: # %entry 2078 ; SSE4-NEXT: pminsd %xmm1, %xmm0 2079 ; SSE4-NEXT: retq 2080 ; 2081 ; AVX-LABEL: test68: 2082 ; AVX: # BB#0: # %entry 2083 ; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 2084 ; AVX-NEXT: retq 2085 entry: 2086 %cmp = icmp sge <4 x i32> %a, %b 2087 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2088 ret <4 x i32> %sel 2089 } 2090 2091 define <4 x i32> @test69(<4 x i32> %a, <4 x i32> %b) { 2092 ; SSE2-LABEL: test69: 2093 ; SSE2: # BB#0: # %entry 2094 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 2095 ; SSE2-NEXT: movdqa %xmm0, %xmm3 2096 ; SSE2-NEXT: pxor %xmm2, %xmm3 2097 ; SSE2-NEXT: pxor %xmm1, %xmm2 2098 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2099 ; SSE2-NEXT: pand %xmm2, %xmm1 2100 ; SSE2-NEXT: pandn %xmm0, %xmm2 2101 ; SSE2-NEXT: por %xmm1, %xmm2 2102 ; SSE2-NEXT: movdqa %xmm2, %xmm0 2103 ; SSE2-NEXT: retq 2104 ; 2105 ; SSE4-LABEL: test69: 2106 ; SSE4: # BB#0: # %entry 2107 ; SSE4-NEXT: pmaxud %xmm1, %xmm0 2108 ; SSE4-NEXT: retq 2109 ; 2110 ; AVX-LABEL: test69: 2111 ; AVX: # BB#0: # %entry 2112 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 2113 ; AVX-NEXT: retq 2114 entry: 2115 %cmp = icmp ult <4 x i32> %a, %b 2116 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2117 ret <4 x i32> %sel 2118 } 2119 2120 define <4 x i32> @test70(<4 x i32> %a, <4 x i32> %b) { 2121 ; SSE2-LABEL: test70: 2122 ; SSE2: # BB#0: # %entry 2123 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648] 2124 ; SSE2-NEXT: movdqa %xmm1, %xmm2 2125 ; SSE2-NEXT: pxor %xmm3, %xmm2 2126 ; SSE2-NEXT: pxor %xmm0, %xmm3 2127 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3 2128 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 2129 ; SSE2-NEXT: pxor %xmm3, %xmm2 2130 ; SSE2-NEXT: pandn %xmm1, %xmm3 2131 ; SSE2-NEXT: pandn %xmm0, %xmm2 2132 ; SSE2-NEXT: por %xmm3, %xmm2 2133 ; SSE2-NEXT: movdqa %xmm2, %xmm0 2134 ; SSE2-NEXT: retq 2135 ; 2136 ; SSE4-LABEL: test70: 2137 ; SSE4: # BB#0: # %entry 2138 ; SSE4-NEXT: pmaxud %xmm1, %xmm0 2139 ; SSE4-NEXT: retq 2140 ; 2141 ; AVX-LABEL: test70: 2142 ; AVX: # BB#0: # %entry 2143 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 2144 ; AVX-NEXT: retq 2145 entry: 2146 %cmp = icmp ule <4 x i32> %a, %b 2147 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2148 ret <4 x i32> %sel 2149 } 2150 2151 define <4 x i32> @test71(<4 x i32> %a, <4 x i32> %b) { 2152 ; SSE2-LABEL: test71: 2153 ; SSE2: # BB#0: # %entry 2154 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 2155 ; SSE2-NEXT: movdqa %xmm1, %xmm3 2156 ; SSE2-NEXT: pxor %xmm2, %xmm3 2157 ; SSE2-NEXT: pxor %xmm0, %xmm2 2158 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2159 ; SSE2-NEXT: pand %xmm2, %xmm1 2160 ; SSE2-NEXT: pandn %xmm0, %xmm2 2161 ; SSE2-NEXT: por %xmm1, %xmm2 2162 ; SSE2-NEXT: movdqa %xmm2, %xmm0 2163 ; SSE2-NEXT: retq 2164 ; 2165 ; SSE4-LABEL: test71: 2166 ; SSE4: # BB#0: # %entry 2167 ; SSE4-NEXT: pminud %xmm1, %xmm0 2168 ; SSE4-NEXT: retq 2169 ; 2170 ; AVX-LABEL: test71: 2171 ; AVX: # BB#0: # %entry 2172 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 2173 ; AVX-NEXT: retq 2174 entry: 2175 %cmp = icmp ugt <4 x i32> %a, %b 2176 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2177 ret <4 x i32> %sel 2178 } 2179 2180 define <4 x i32> @test72(<4 x i32> %a, <4 x i32> %b) { 2181 ; SSE2-LABEL: test72: 2182 ; SSE2: # BB#0: # %entry 2183 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648] 2184 ; SSE2-NEXT: movdqa %xmm0, %xmm2 2185 ; SSE2-NEXT: pxor %xmm3, %xmm2 2186 ; SSE2-NEXT: pxor %xmm1, %xmm3 2187 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3 2188 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 2189 ; SSE2-NEXT: pxor %xmm3, %xmm2 2190 ; SSE2-NEXT: pandn %xmm1, %xmm3 2191 ; SSE2-NEXT: pandn %xmm0, %xmm2 2192 ; SSE2-NEXT: por %xmm3, %xmm2 2193 ; SSE2-NEXT: movdqa %xmm2, %xmm0 2194 ; SSE2-NEXT: retq 2195 ; 2196 ; SSE4-LABEL: test72: 2197 ; SSE4: # BB#0: # %entry 2198 ; SSE4-NEXT: pminud %xmm1, %xmm0 2199 ; SSE4-NEXT: retq 2200 ; 2201 ; AVX-LABEL: test72: 2202 ; AVX: # BB#0: # %entry 2203 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 2204 ; AVX-NEXT: retq 2205 entry: 2206 %cmp = icmp uge <4 x i32> %a, %b 2207 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2208 ret <4 x i32> %sel 2209 } 2210 2211 define <32 x i8> @test73(<32 x i8> %a, <32 x i8> %b) { 2212 ; SSE2-LABEL: test73: 2213 ; SSE2: # BB#0: # %entry 2214 ; SSE2-NEXT: movdqa %xmm3, %xmm4 2215 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 2216 ; SSE2-NEXT: movdqa %xmm2, %xmm5 2217 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm5 2218 ; SSE2-NEXT: pand %xmm5, %xmm2 2219 ; SSE2-NEXT: pandn %xmm0, %xmm5 2220 ; SSE2-NEXT: por %xmm2, %xmm5 2221 ; SSE2-NEXT: pand %xmm4, %xmm3 2222 ; SSE2-NEXT: pandn %xmm1, %xmm4 2223 ; SSE2-NEXT: por %xmm3, %xmm4 2224 ; SSE2-NEXT: movdqa %xmm5, %xmm0 2225 ; SSE2-NEXT: movdqa %xmm4, %xmm1 2226 ; SSE2-NEXT: retq 2227 ; 2228 ; SSE4-LABEL: test73: 2229 ; SSE4: # BB#0: # %entry 2230 ; SSE4-NEXT: pmaxsb %xmm2, %xmm0 2231 ; SSE4-NEXT: pmaxsb %xmm3, %xmm1 2232 ; SSE4-NEXT: retq 2233 ; 2234 ; AVX1-LABEL: test73: 2235 ; AVX1: # BB#0: # %entry 2236 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2237 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2238 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 2239 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 2240 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2241 ; AVX1-NEXT: retq 2242 ; 2243 ; AVX2-LABEL: test73: 2244 ; AVX2: # BB#0: # %entry 2245 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2246 ; AVX2-NEXT: retq 2247 ; 2248 ; AVX512F-LABEL: test73: 2249 ; AVX512F: # BB#0: # %entry 2250 ; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2251 ; AVX512F-NEXT: retq 2252 entry: 2253 %cmp = icmp slt <32 x i8> %a, %b 2254 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2255 ret <32 x i8> %sel 2256 } 2257 2258 define <32 x i8> @test74(<32 x i8> %a, <32 x i8> %b) { 2259 ; SSE2-LABEL: test74: 2260 ; SSE2: # BB#0: # %entry 2261 ; SSE2-NEXT: movdqa %xmm1, %xmm6 2262 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm6 2263 ; SSE2-NEXT: pcmpeqd %xmm7, %xmm7 2264 ; SSE2-NEXT: movdqa %xmm6, %xmm4 2265 ; SSE2-NEXT: pxor %xmm7, %xmm4 2266 ; SSE2-NEXT: movdqa %xmm0, %xmm5 2267 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm5 2268 ; SSE2-NEXT: pxor %xmm5, %xmm7 2269 ; SSE2-NEXT: pandn %xmm2, %xmm5 2270 ; SSE2-NEXT: pandn %xmm0, %xmm7 2271 ; SSE2-NEXT: por %xmm7, %xmm5 2272 ; SSE2-NEXT: pandn %xmm3, %xmm6 2273 ; SSE2-NEXT: pandn %xmm1, %xmm4 2274 ; SSE2-NEXT: por %xmm6, %xmm4 2275 ; SSE2-NEXT: movdqa %xmm5, %xmm0 2276 ; SSE2-NEXT: movdqa %xmm4, %xmm1 2277 ; SSE2-NEXT: retq 2278 ; 2279 ; SSE4-LABEL: test74: 2280 ; SSE4: # BB#0: # %entry 2281 ; SSE4-NEXT: pmaxsb %xmm2, %xmm0 2282 ; SSE4-NEXT: pmaxsb %xmm3, %xmm1 2283 ; SSE4-NEXT: retq 2284 ; 2285 ; AVX1-LABEL: test74: 2286 ; AVX1: # BB#0: # %entry 2287 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2288 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2289 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 2290 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 2291 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2292 ; AVX1-NEXT: retq 2293 ; 2294 ; AVX2-LABEL: test74: 2295 ; AVX2: # BB#0: # %entry 2296 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2297 ; AVX2-NEXT: retq 2298 ; 2299 ; AVX512F-LABEL: test74: 2300 ; AVX512F: # BB#0: # %entry 2301 ; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2302 ; AVX512F-NEXT: retq 2303 entry: 2304 %cmp = icmp sle <32 x i8> %a, %b 2305 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2306 ret <32 x i8> %sel 2307 } 2308 2309 define <32 x i8> @test75(<32 x i8> %a, <32 x i8> %b) { 2310 ; SSE2-LABEL: test75: 2311 ; SSE2: # BB#0: # %entry 2312 ; SSE2-NEXT: movdqa %xmm1, %xmm4 2313 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 2314 ; SSE2-NEXT: movdqa %xmm0, %xmm5 2315 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm5 2316 ; SSE2-NEXT: pand %xmm5, %xmm2 2317 ; SSE2-NEXT: pandn %xmm0, %xmm5 2318 ; SSE2-NEXT: por %xmm2, %xmm5 2319 ; SSE2-NEXT: pand %xmm4, %xmm3 2320 ; SSE2-NEXT: pandn %xmm1, %xmm4 2321 ; SSE2-NEXT: por %xmm3, %xmm4 2322 ; SSE2-NEXT: movdqa %xmm5, %xmm0 2323 ; SSE2-NEXT: movdqa %xmm4, %xmm1 2324 ; SSE2-NEXT: retq 2325 ; 2326 ; SSE4-LABEL: test75: 2327 ; SSE4: # BB#0: # %entry 2328 ; SSE4-NEXT: pminsb %xmm2, %xmm0 2329 ; SSE4-NEXT: pminsb %xmm3, %xmm1 2330 ; SSE4-NEXT: retq 2331 ; 2332 ; AVX1-LABEL: test75: 2333 ; AVX1: # BB#0: # %entry 2334 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2335 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2336 ; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 2337 ; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 2338 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2339 ; AVX1-NEXT: retq 2340 ; 2341 ; AVX2-LABEL: test75: 2342 ; AVX2: # BB#0: # %entry 2343 ; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2344 ; AVX2-NEXT: retq 2345 ; 2346 ; AVX512F-LABEL: test75: 2347 ; AVX512F: # BB#0: # %entry 2348 ; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2349 ; AVX512F-NEXT: retq 2350 entry: 2351 %cmp = icmp sgt <32 x i8> %a, %b 2352 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2353 ret <32 x i8> %sel 2354 } 2355 2356 define <32 x i8> @test76(<32 x i8> %a, <32 x i8> %b) { 2357 ; SSE2-LABEL: test76: 2358 ; SSE2: # BB#0: # %entry 2359 ; SSE2-NEXT: movdqa %xmm3, %xmm6 2360 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm6 2361 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 2362 ; SSE2-NEXT: movdqa %xmm6, %xmm5 2363 ; SSE2-NEXT: pxor %xmm4, %xmm5 2364 ; SSE2-NEXT: movdqa %xmm2, %xmm7 2365 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm7 2366 ; SSE2-NEXT: pxor %xmm7, %xmm4 2367 ; SSE2-NEXT: pandn %xmm2, %xmm7 2368 ; SSE2-NEXT: pandn %xmm0, %xmm4 2369 ; SSE2-NEXT: por %xmm7, %xmm4 2370 ; SSE2-NEXT: pandn %xmm3, %xmm6 2371 ; SSE2-NEXT: pandn %xmm1, %xmm5 2372 ; SSE2-NEXT: por %xmm6, %xmm5 2373 ; SSE2-NEXT: movdqa %xmm4, %xmm0 2374 ; SSE2-NEXT: movdqa %xmm5, %xmm1 2375 ; SSE2-NEXT: retq 2376 ; 2377 ; SSE4-LABEL: test76: 2378 ; SSE4: # BB#0: # %entry 2379 ; SSE4-NEXT: pminsb %xmm2, %xmm0 2380 ; SSE4-NEXT: pminsb %xmm3, %xmm1 2381 ; SSE4-NEXT: retq 2382 ; 2383 ; AVX1-LABEL: test76: 2384 ; AVX1: # BB#0: # %entry 2385 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2386 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2387 ; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 2388 ; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 2389 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2390 ; AVX1-NEXT: retq 2391 ; 2392 ; AVX2-LABEL: test76: 2393 ; AVX2: # BB#0: # %entry 2394 ; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2395 ; AVX2-NEXT: retq 2396 ; 2397 ; AVX512F-LABEL: test76: 2398 ; AVX512F: # BB#0: # %entry 2399 ; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2400 ; AVX512F-NEXT: retq 2401 entry: 2402 %cmp = icmp sge <32 x i8> %a, %b 2403 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2404 ret <32 x i8> %sel 2405 } 2406 2407 define <32 x i8> @test77(<32 x i8> %a, <32 x i8> %b) { 2408 ; SSE-LABEL: test77: 2409 ; SSE: # BB#0: # %entry 2410 ; SSE-NEXT: pmaxub %xmm2, %xmm0 2411 ; SSE-NEXT: pmaxub %xmm3, %xmm1 2412 ; SSE-NEXT: retq 2413 ; 2414 ; AVX1-LABEL: test77: 2415 ; AVX1: # BB#0: # %entry 2416 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2417 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2418 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 2419 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 2420 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2421 ; AVX1-NEXT: retq 2422 ; 2423 ; AVX2-LABEL: test77: 2424 ; AVX2: # BB#0: # %entry 2425 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2426 ; AVX2-NEXT: retq 2427 ; 2428 ; AVX512F-LABEL: test77: 2429 ; AVX512F: # BB#0: # %entry 2430 ; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2431 ; AVX512F-NEXT: retq 2432 entry: 2433 %cmp = icmp ult <32 x i8> %a, %b 2434 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2435 ret <32 x i8> %sel 2436 } 2437 2438 define <32 x i8> @test78(<32 x i8> %a, <32 x i8> %b) { 2439 ; SSE-LABEL: test78: 2440 ; SSE: # BB#0: # %entry 2441 ; SSE-NEXT: pmaxub %xmm2, %xmm0 2442 ; SSE-NEXT: pmaxub %xmm3, %xmm1 2443 ; SSE-NEXT: retq 2444 ; 2445 ; AVX1-LABEL: test78: 2446 ; AVX1: # BB#0: # %entry 2447 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2448 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2449 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 2450 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 2451 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2452 ; AVX1-NEXT: retq 2453 ; 2454 ; AVX2-LABEL: test78: 2455 ; AVX2: # BB#0: # %entry 2456 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2457 ; AVX2-NEXT: retq 2458 ; 2459 ; AVX512F-LABEL: test78: 2460 ; AVX512F: # BB#0: # %entry 2461 ; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2462 ; AVX512F-NEXT: retq 2463 entry: 2464 %cmp = icmp ule <32 x i8> %a, %b 2465 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2466 ret <32 x i8> %sel 2467 } 2468 2469 define <32 x i8> @test79(<32 x i8> %a, <32 x i8> %b) { 2470 ; SSE-LABEL: test79: 2471 ; SSE: # BB#0: # %entry 2472 ; SSE-NEXT: pminub %xmm2, %xmm0 2473 ; SSE-NEXT: pminub %xmm3, %xmm1 2474 ; SSE-NEXT: retq 2475 ; 2476 ; AVX1-LABEL: test79: 2477 ; AVX1: # BB#0: # %entry 2478 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2479 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2480 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 2481 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 2482 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2483 ; AVX1-NEXT: retq 2484 ; 2485 ; AVX2-LABEL: test79: 2486 ; AVX2: # BB#0: # %entry 2487 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 2488 ; AVX2-NEXT: retq 2489 ; 2490 ; AVX512F-LABEL: test79: 2491 ; AVX512F: # BB#0: # %entry 2492 ; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 2493 ; AVX512F-NEXT: retq 2494 entry: 2495 %cmp = icmp ugt <32 x i8> %a, %b 2496 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2497 ret <32 x i8> %sel 2498 } 2499 2500 define <32 x i8> @test80(<32 x i8> %a, <32 x i8> %b) { 2501 ; SSE-LABEL: test80: 2502 ; SSE: # BB#0: # %entry 2503 ; SSE-NEXT: pminub %xmm2, %xmm0 2504 ; SSE-NEXT: pminub %xmm3, %xmm1 2505 ; SSE-NEXT: retq 2506 ; 2507 ; AVX1-LABEL: test80: 2508 ; AVX1: # BB#0: # %entry 2509 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2510 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2511 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 2512 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 2513 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2514 ; AVX1-NEXT: retq 2515 ; 2516 ; AVX2-LABEL: test80: 2517 ; AVX2: # BB#0: # %entry 2518 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 2519 ; AVX2-NEXT: retq 2520 ; 2521 ; AVX512F-LABEL: test80: 2522 ; AVX512F: # BB#0: # %entry 2523 ; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 2524 ; AVX512F-NEXT: retq 2525 entry: 2526 %cmp = icmp uge <32 x i8> %a, %b 2527 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2528 ret <32 x i8> %sel 2529 } 2530 2531 define <16 x i16> @test81(<16 x i16> %a, <16 x i16> %b) { 2532 ; SSE-LABEL: test81: 2533 ; SSE: # BB#0: # %entry 2534 ; SSE-NEXT: pmaxsw %xmm2, %xmm0 2535 ; SSE-NEXT: pmaxsw %xmm3, %xmm1 2536 ; SSE-NEXT: retq 2537 ; 2538 ; AVX1-LABEL: test81: 2539 ; AVX1: # BB#0: # %entry 2540 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2541 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2542 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 2543 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 2544 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2545 ; AVX1-NEXT: retq 2546 ; 2547 ; AVX2-LABEL: test81: 2548 ; AVX2: # BB#0: # %entry 2549 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2550 ; AVX2-NEXT: retq 2551 ; 2552 ; AVX512F-LABEL: test81: 2553 ; AVX512F: # BB#0: # %entry 2554 ; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2555 ; AVX512F-NEXT: retq 2556 entry: 2557 %cmp = icmp slt <16 x i16> %a, %b 2558 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2559 ret <16 x i16> %sel 2560 } 2561 2562 define <16 x i16> @test82(<16 x i16> %a, <16 x i16> %b) { 2563 ; SSE-LABEL: test82: 2564 ; SSE: # BB#0: # %entry 2565 ; SSE-NEXT: pmaxsw %xmm2, %xmm0 2566 ; SSE-NEXT: pmaxsw %xmm3, %xmm1 2567 ; SSE-NEXT: retq 2568 ; 2569 ; AVX1-LABEL: test82: 2570 ; AVX1: # BB#0: # %entry 2571 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2572 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2573 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 2574 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 2575 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2576 ; AVX1-NEXT: retq 2577 ; 2578 ; AVX2-LABEL: test82: 2579 ; AVX2: # BB#0: # %entry 2580 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2581 ; AVX2-NEXT: retq 2582 ; 2583 ; AVX512F-LABEL: test82: 2584 ; AVX512F: # BB#0: # %entry 2585 ; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2586 ; AVX512F-NEXT: retq 2587 entry: 2588 %cmp = icmp sle <16 x i16> %a, %b 2589 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2590 ret <16 x i16> %sel 2591 } 2592 2593 define <16 x i16> @test83(<16 x i16> %a, <16 x i16> %b) { 2594 ; SSE-LABEL: test83: 2595 ; SSE: # BB#0: # %entry 2596 ; SSE-NEXT: pminsw %xmm2, %xmm0 2597 ; SSE-NEXT: pminsw %xmm3, %xmm1 2598 ; SSE-NEXT: retq 2599 ; 2600 ; AVX1-LABEL: test83: 2601 ; AVX1: # BB#0: # %entry 2602 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2603 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2604 ; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 2605 ; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 2606 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2607 ; AVX1-NEXT: retq 2608 ; 2609 ; AVX2-LABEL: test83: 2610 ; AVX2: # BB#0: # %entry 2611 ; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2612 ; AVX2-NEXT: retq 2613 ; 2614 ; AVX512F-LABEL: test83: 2615 ; AVX512F: # BB#0: # %entry 2616 ; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2617 ; AVX512F-NEXT: retq 2618 entry: 2619 %cmp = icmp sgt <16 x i16> %a, %b 2620 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2621 ret <16 x i16> %sel 2622 } 2623 2624 define <16 x i16> @test84(<16 x i16> %a, <16 x i16> %b) { 2625 ; SSE-LABEL: test84: 2626 ; SSE: # BB#0: # %entry 2627 ; SSE-NEXT: pminsw %xmm2, %xmm0 2628 ; SSE-NEXT: pminsw %xmm3, %xmm1 2629 ; SSE-NEXT: retq 2630 ; 2631 ; AVX1-LABEL: test84: 2632 ; AVX1: # BB#0: # %entry 2633 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2634 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2635 ; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 2636 ; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 2637 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2638 ; AVX1-NEXT: retq 2639 ; 2640 ; AVX2-LABEL: test84: 2641 ; AVX2: # BB#0: # %entry 2642 ; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2643 ; AVX2-NEXT: retq 2644 ; 2645 ; AVX512F-LABEL: test84: 2646 ; AVX512F: # BB#0: # %entry 2647 ; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2648 ; AVX512F-NEXT: retq 2649 entry: 2650 %cmp = icmp sge <16 x i16> %a, %b 2651 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2652 ret <16 x i16> %sel 2653 } 2654 2655 define <16 x i16> @test85(<16 x i16> %a, <16 x i16> %b) { 2656 ; SSE2-LABEL: test85: 2657 ; SSE2: # BB#0: # %entry 2658 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 2659 ; SSE2-NEXT: movdqa %xmm1, %xmm6 2660 ; SSE2-NEXT: pxor %xmm4, %xmm6 2661 ; SSE2-NEXT: movdqa %xmm3, %xmm5 2662 ; SSE2-NEXT: pxor %xmm4, %xmm5 2663 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm5 2664 ; SSE2-NEXT: movdqa %xmm0, %xmm6 2665 ; SSE2-NEXT: pxor %xmm4, %xmm6 2666 ; SSE2-NEXT: pxor %xmm2, %xmm4 2667 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm4 2668 ; SSE2-NEXT: pand %xmm4, %xmm2 2669 ; SSE2-NEXT: pandn %xmm0, %xmm4 2670 ; SSE2-NEXT: por %xmm2, %xmm4 2671 ; SSE2-NEXT: pand %xmm5, %xmm3 2672 ; SSE2-NEXT: pandn %xmm1, %xmm5 2673 ; SSE2-NEXT: por %xmm3, %xmm5 2674 ; SSE2-NEXT: movdqa %xmm4, %xmm0 2675 ; SSE2-NEXT: movdqa %xmm5, %xmm1 2676 ; SSE2-NEXT: retq 2677 ; 2678 ; SSE4-LABEL: test85: 2679 ; SSE4: # BB#0: # %entry 2680 ; SSE4-NEXT: pmaxuw %xmm2, %xmm0 2681 ; SSE4-NEXT: pmaxuw %xmm3, %xmm1 2682 ; SSE4-NEXT: retq 2683 ; 2684 ; AVX1-LABEL: test85: 2685 ; AVX1: # BB#0: # %entry 2686 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2687 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2688 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 2689 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 2690 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2691 ; AVX1-NEXT: retq 2692 ; 2693 ; AVX2-LABEL: test85: 2694 ; AVX2: # BB#0: # %entry 2695 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2696 ; AVX2-NEXT: retq 2697 ; 2698 ; AVX512F-LABEL: test85: 2699 ; AVX512F: # BB#0: # %entry 2700 ; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2701 ; AVX512F-NEXT: retq 2702 entry: 2703 %cmp = icmp ult <16 x i16> %a, %b 2704 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2705 ret <16 x i16> %sel 2706 } 2707 2708 define <16 x i16> @test86(<16 x i16> %a, <16 x i16> %b) { 2709 ; SSE2-LABEL: test86: 2710 ; SSE2: # BB#0: # %entry 2711 ; SSE2-NEXT: movdqa %xmm1, %xmm4 2712 ; SSE2-NEXT: psubusw %xmm3, %xmm4 2713 ; SSE2-NEXT: pxor %xmm6, %xmm6 2714 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm4 2715 ; SSE2-NEXT: movdqa %xmm0, %xmm5 2716 ; SSE2-NEXT: psubusw %xmm2, %xmm5 2717 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm5 2718 ; SSE2-NEXT: pand %xmm5, %xmm2 2719 ; SSE2-NEXT: pandn %xmm0, %xmm5 2720 ; SSE2-NEXT: por %xmm2, %xmm5 2721 ; SSE2-NEXT: pand %xmm4, %xmm3 2722 ; SSE2-NEXT: pandn %xmm1, %xmm4 2723 ; SSE2-NEXT: por %xmm3, %xmm4 2724 ; SSE2-NEXT: movdqa %xmm5, %xmm0 2725 ; SSE2-NEXT: movdqa %xmm4, %xmm1 2726 ; SSE2-NEXT: retq 2727 ; 2728 ; SSE4-LABEL: test86: 2729 ; SSE4: # BB#0: # %entry 2730 ; SSE4-NEXT: pmaxuw %xmm2, %xmm0 2731 ; SSE4-NEXT: pmaxuw %xmm3, %xmm1 2732 ; SSE4-NEXT: retq 2733 ; 2734 ; AVX1-LABEL: test86: 2735 ; AVX1: # BB#0: # %entry 2736 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2737 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2738 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 2739 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 2740 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2741 ; AVX1-NEXT: retq 2742 ; 2743 ; AVX2-LABEL: test86: 2744 ; AVX2: # BB#0: # %entry 2745 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2746 ; AVX2-NEXT: retq 2747 ; 2748 ; AVX512F-LABEL: test86: 2749 ; AVX512F: # BB#0: # %entry 2750 ; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2751 ; AVX512F-NEXT: retq 2752 entry: 2753 %cmp = icmp ule <16 x i16> %a, %b 2754 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2755 ret <16 x i16> %sel 2756 } 2757 2758 define <16 x i16> @test87(<16 x i16> %a, <16 x i16> %b) { 2759 ; SSE2-LABEL: test87: 2760 ; SSE2: # BB#0: # %entry 2761 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 2762 ; SSE2-NEXT: movdqa %xmm3, %xmm6 2763 ; SSE2-NEXT: pxor %xmm4, %xmm6 2764 ; SSE2-NEXT: movdqa %xmm1, %xmm5 2765 ; SSE2-NEXT: pxor %xmm4, %xmm5 2766 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm5 2767 ; SSE2-NEXT: movdqa %xmm2, %xmm6 2768 ; SSE2-NEXT: pxor %xmm4, %xmm6 2769 ; SSE2-NEXT: pxor %xmm0, %xmm4 2770 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm4 2771 ; SSE2-NEXT: pand %xmm4, %xmm2 2772 ; SSE2-NEXT: pandn %xmm0, %xmm4 2773 ; SSE2-NEXT: por %xmm2, %xmm4 2774 ; SSE2-NEXT: pand %xmm5, %xmm3 2775 ; SSE2-NEXT: pandn %xmm1, %xmm5 2776 ; SSE2-NEXT: por %xmm3, %xmm5 2777 ; SSE2-NEXT: movdqa %xmm4, %xmm0 2778 ; SSE2-NEXT: movdqa %xmm5, %xmm1 2779 ; SSE2-NEXT: retq 2780 ; 2781 ; SSE4-LABEL: test87: 2782 ; SSE4: # BB#0: # %entry 2783 ; SSE4-NEXT: pminuw %xmm2, %xmm0 2784 ; SSE4-NEXT: pminuw %xmm3, %xmm1 2785 ; SSE4-NEXT: retq 2786 ; 2787 ; AVX1-LABEL: test87: 2788 ; AVX1: # BB#0: # %entry 2789 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2790 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2791 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 2792 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 2793 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2794 ; AVX1-NEXT: retq 2795 ; 2796 ; AVX2-LABEL: test87: 2797 ; AVX2: # BB#0: # %entry 2798 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2799 ; AVX2-NEXT: retq 2800 ; 2801 ; AVX512F-LABEL: test87: 2802 ; AVX512F: # BB#0: # %entry 2803 ; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2804 ; AVX512F-NEXT: retq 2805 entry: 2806 %cmp = icmp ugt <16 x i16> %a, %b 2807 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2808 ret <16 x i16> %sel 2809 } 2810 2811 define <16 x i16> @test88(<16 x i16> %a, <16 x i16> %b) { 2812 ; SSE2-LABEL: test88: 2813 ; SSE2: # BB#0: # %entry 2814 ; SSE2-NEXT: movdqa %xmm3, %xmm4 2815 ; SSE2-NEXT: psubusw %xmm1, %xmm4 2816 ; SSE2-NEXT: pxor %xmm6, %xmm6 2817 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm4 2818 ; SSE2-NEXT: movdqa %xmm2, %xmm5 2819 ; SSE2-NEXT: psubusw %xmm0, %xmm5 2820 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm5 2821 ; SSE2-NEXT: pand %xmm5, %xmm2 2822 ; SSE2-NEXT: pandn %xmm0, %xmm5 2823 ; SSE2-NEXT: por %xmm2, %xmm5 2824 ; SSE2-NEXT: pand %xmm4, %xmm3 2825 ; SSE2-NEXT: pandn %xmm1, %xmm4 2826 ; SSE2-NEXT: por %xmm3, %xmm4 2827 ; SSE2-NEXT: movdqa %xmm5, %xmm0 2828 ; SSE2-NEXT: movdqa %xmm4, %xmm1 2829 ; SSE2-NEXT: retq 2830 ; 2831 ; SSE4-LABEL: test88: 2832 ; SSE4: # BB#0: # %entry 2833 ; SSE4-NEXT: pminuw %xmm2, %xmm0 2834 ; SSE4-NEXT: pminuw %xmm3, %xmm1 2835 ; SSE4-NEXT: retq 2836 ; 2837 ; AVX1-LABEL: test88: 2838 ; AVX1: # BB#0: # %entry 2839 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2840 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2841 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 2842 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 2843 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2844 ; AVX1-NEXT: retq 2845 ; 2846 ; AVX2-LABEL: test88: 2847 ; AVX2: # BB#0: # %entry 2848 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2849 ; AVX2-NEXT: retq 2850 ; 2851 ; AVX512F-LABEL: test88: 2852 ; AVX512F: # BB#0: # %entry 2853 ; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2854 ; AVX512F-NEXT: retq 2855 entry: 2856 %cmp = icmp uge <16 x i16> %a, %b 2857 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2858 ret <16 x i16> %sel 2859 } 2860 2861 define <8 x i32> @test89(<8 x i32> %a, <8 x i32> %b) { 2862 ; SSE2-LABEL: test89: 2863 ; SSE2: # BB#0: # %entry 2864 ; SSE2-NEXT: movdqa %xmm3, %xmm4 2865 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 2866 ; SSE2-NEXT: movdqa %xmm2, %xmm5 2867 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 2868 ; SSE2-NEXT: pand %xmm5, %xmm2 2869 ; SSE2-NEXT: pandn %xmm0, %xmm5 2870 ; SSE2-NEXT: por %xmm2, %xmm5 2871 ; SSE2-NEXT: pand %xmm4, %xmm3 2872 ; SSE2-NEXT: pandn %xmm1, %xmm4 2873 ; SSE2-NEXT: por %xmm3, %xmm4 2874 ; SSE2-NEXT: movdqa %xmm5, %xmm0 2875 ; SSE2-NEXT: movdqa %xmm4, %xmm1 2876 ; SSE2-NEXT: retq 2877 ; 2878 ; SSE4-LABEL: test89: 2879 ; SSE4: # BB#0: # %entry 2880 ; SSE4-NEXT: pmaxsd %xmm2, %xmm0 2881 ; SSE4-NEXT: pmaxsd %xmm3, %xmm1 2882 ; SSE4-NEXT: retq 2883 ; 2884 ; AVX1-LABEL: test89: 2885 ; AVX1: # BB#0: # %entry 2886 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2887 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2888 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 2889 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2890 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2891 ; AVX1-NEXT: retq 2892 ; 2893 ; AVX2-LABEL: test89: 2894 ; AVX2: # BB#0: # %entry 2895 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2896 ; AVX2-NEXT: retq 2897 ; 2898 ; AVX512F-LABEL: test89: 2899 ; AVX512F: # BB#0: # %entry 2900 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2901 ; AVX512F-NEXT: retq 2902 entry: 2903 %cmp = icmp slt <8 x i32> %a, %b 2904 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2905 ret <8 x i32> %sel 2906 } 2907 2908 define <8 x i32> @test90(<8 x i32> %a, <8 x i32> %b) { 2909 ; SSE2-LABEL: test90: 2910 ; SSE2: # BB#0: # %entry 2911 ; SSE2-NEXT: movdqa %xmm1, %xmm6 2912 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm6 2913 ; SSE2-NEXT: pcmpeqd %xmm7, %xmm7 2914 ; SSE2-NEXT: movdqa %xmm6, %xmm4 2915 ; SSE2-NEXT: pxor %xmm7, %xmm4 2916 ; SSE2-NEXT: movdqa %xmm0, %xmm5 2917 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 2918 ; SSE2-NEXT: pxor %xmm5, %xmm7 2919 ; SSE2-NEXT: pandn %xmm2, %xmm5 2920 ; SSE2-NEXT: pandn %xmm0, %xmm7 2921 ; SSE2-NEXT: por %xmm7, %xmm5 2922 ; SSE2-NEXT: pandn %xmm3, %xmm6 2923 ; SSE2-NEXT: pandn %xmm1, %xmm4 2924 ; SSE2-NEXT: por %xmm6, %xmm4 2925 ; SSE2-NEXT: movdqa %xmm5, %xmm0 2926 ; SSE2-NEXT: movdqa %xmm4, %xmm1 2927 ; SSE2-NEXT: retq 2928 ; 2929 ; SSE4-LABEL: test90: 2930 ; SSE4: # BB#0: # %entry 2931 ; SSE4-NEXT: pmaxsd %xmm2, %xmm0 2932 ; SSE4-NEXT: pmaxsd %xmm3, %xmm1 2933 ; SSE4-NEXT: retq 2934 ; 2935 ; AVX1-LABEL: test90: 2936 ; AVX1: # BB#0: # %entry 2937 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2938 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2939 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 2940 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2941 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2942 ; AVX1-NEXT: retq 2943 ; 2944 ; AVX2-LABEL: test90: 2945 ; AVX2: # BB#0: # %entry 2946 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2947 ; AVX2-NEXT: retq 2948 ; 2949 ; AVX512F-LABEL: test90: 2950 ; AVX512F: # BB#0: # %entry 2951 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2952 ; AVX512F-NEXT: retq 2953 entry: 2954 %cmp = icmp sle <8 x i32> %a, %b 2955 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2956 ret <8 x i32> %sel 2957 } 2958 2959 define <8 x i32> @test91(<8 x i32> %a, <8 x i32> %b) { 2960 ; SSE2-LABEL: test91: 2961 ; SSE2: # BB#0: # %entry 2962 ; SSE2-NEXT: movdqa %xmm1, %xmm4 2963 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 2964 ; SSE2-NEXT: movdqa %xmm0, %xmm5 2965 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 2966 ; SSE2-NEXT: pand %xmm5, %xmm2 2967 ; SSE2-NEXT: pandn %xmm0, %xmm5 2968 ; SSE2-NEXT: por %xmm2, %xmm5 2969 ; SSE2-NEXT: pand %xmm4, %xmm3 2970 ; SSE2-NEXT: pandn %xmm1, %xmm4 2971 ; SSE2-NEXT: por %xmm3, %xmm4 2972 ; SSE2-NEXT: movdqa %xmm5, %xmm0 2973 ; SSE2-NEXT: movdqa %xmm4, %xmm1 2974 ; SSE2-NEXT: retq 2975 ; 2976 ; SSE4-LABEL: test91: 2977 ; SSE4: # BB#0: # %entry 2978 ; SSE4-NEXT: pminsd %xmm2, %xmm0 2979 ; SSE4-NEXT: pminsd %xmm3, %xmm1 2980 ; SSE4-NEXT: retq 2981 ; 2982 ; AVX1-LABEL: test91: 2983 ; AVX1: # BB#0: # %entry 2984 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2985 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2986 ; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 2987 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 2988 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2989 ; AVX1-NEXT: retq 2990 ; 2991 ; AVX2-LABEL: test91: 2992 ; AVX2: # BB#0: # %entry 2993 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2994 ; AVX2-NEXT: retq 2995 ; 2996 ; AVX512F-LABEL: test91: 2997 ; AVX512F: # BB#0: # %entry 2998 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2999 ; AVX512F-NEXT: retq 3000 entry: 3001 %cmp = icmp sgt <8 x i32> %a, %b 3002 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3003 ret <8 x i32> %sel 3004 } 3005 3006 define <8 x i32> @test92(<8 x i32> %a, <8 x i32> %b) { 3007 ; SSE2-LABEL: test92: 3008 ; SSE2: # BB#0: # %entry 3009 ; SSE2-NEXT: movdqa %xmm3, %xmm6 3010 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm6 3011 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 3012 ; SSE2-NEXT: movdqa %xmm6, %xmm5 3013 ; SSE2-NEXT: pxor %xmm4, %xmm5 3014 ; SSE2-NEXT: movdqa %xmm2, %xmm7 3015 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm7 3016 ; SSE2-NEXT: pxor %xmm7, %xmm4 3017 ; SSE2-NEXT: pandn %xmm2, %xmm7 3018 ; SSE2-NEXT: pandn %xmm0, %xmm4 3019 ; SSE2-NEXT: por %xmm7, %xmm4 3020 ; SSE2-NEXT: pandn %xmm3, %xmm6 3021 ; SSE2-NEXT: pandn %xmm1, %xmm5 3022 ; SSE2-NEXT: por %xmm6, %xmm5 3023 ; SSE2-NEXT: movdqa %xmm4, %xmm0 3024 ; SSE2-NEXT: movdqa %xmm5, %xmm1 3025 ; SSE2-NEXT: retq 3026 ; 3027 ; SSE4-LABEL: test92: 3028 ; SSE4: # BB#0: # %entry 3029 ; SSE4-NEXT: pminsd %xmm2, %xmm0 3030 ; SSE4-NEXT: pminsd %xmm3, %xmm1 3031 ; SSE4-NEXT: retq 3032 ; 3033 ; AVX1-LABEL: test92: 3034 ; AVX1: # BB#0: # %entry 3035 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3036 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3037 ; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 3038 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 3039 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3040 ; AVX1-NEXT: retq 3041 ; 3042 ; AVX2-LABEL: test92: 3043 ; AVX2: # BB#0: # %entry 3044 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 3045 ; AVX2-NEXT: retq 3046 ; 3047 ; AVX512F-LABEL: test92: 3048 ; AVX512F: # BB#0: # %entry 3049 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 3050 ; AVX512F-NEXT: retq 3051 entry: 3052 %cmp = icmp sge <8 x i32> %a, %b 3053 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3054 ret <8 x i32> %sel 3055 } 3056 3057 define <8 x i32> @test93(<8 x i32> %a, <8 x i32> %b) { 3058 ; SSE2-LABEL: test93: 3059 ; SSE2: # BB#0: # %entry 3060 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 3061 ; SSE2-NEXT: movdqa %xmm1, %xmm6 3062 ; SSE2-NEXT: pxor %xmm4, %xmm6 3063 ; SSE2-NEXT: movdqa %xmm3, %xmm5 3064 ; SSE2-NEXT: pxor %xmm4, %xmm5 3065 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 3066 ; SSE2-NEXT: movdqa %xmm0, %xmm6 3067 ; SSE2-NEXT: pxor %xmm4, %xmm6 3068 ; SSE2-NEXT: pxor %xmm2, %xmm4 3069 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 3070 ; SSE2-NEXT: pand %xmm4, %xmm2 3071 ; SSE2-NEXT: pandn %xmm0, %xmm4 3072 ; SSE2-NEXT: por %xmm2, %xmm4 3073 ; SSE2-NEXT: pand %xmm5, %xmm3 3074 ; SSE2-NEXT: pandn %xmm1, %xmm5 3075 ; SSE2-NEXT: por %xmm3, %xmm5 3076 ; SSE2-NEXT: movdqa %xmm4, %xmm0 3077 ; SSE2-NEXT: movdqa %xmm5, %xmm1 3078 ; SSE2-NEXT: retq 3079 ; 3080 ; SSE4-LABEL: test93: 3081 ; SSE4: # BB#0: # %entry 3082 ; SSE4-NEXT: pmaxud %xmm2, %xmm0 3083 ; SSE4-NEXT: pmaxud %xmm3, %xmm1 3084 ; SSE4-NEXT: retq 3085 ; 3086 ; AVX1-LABEL: test93: 3087 ; AVX1: # BB#0: # %entry 3088 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3089 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3090 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 3091 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 3092 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3093 ; AVX1-NEXT: retq 3094 ; 3095 ; AVX2-LABEL: test93: 3096 ; AVX2: # BB#0: # %entry 3097 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 3098 ; AVX2-NEXT: retq 3099 ; 3100 ; AVX512F-LABEL: test93: 3101 ; AVX512F: # BB#0: # %entry 3102 ; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 3103 ; AVX512F-NEXT: retq 3104 entry: 3105 %cmp = icmp ult <8 x i32> %a, %b 3106 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3107 ret <8 x i32> %sel 3108 } 3109 3110 define <8 x i32> @test94(<8 x i32> %a, <8 x i32> %b) { 3111 ; SSE2-LABEL: test94: 3112 ; SSE2: # BB#0: # %entry 3113 ; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648] 3114 ; SSE2-NEXT: movdqa %xmm3, %xmm4 3115 ; SSE2-NEXT: pxor %xmm6, %xmm4 3116 ; SSE2-NEXT: movdqa %xmm1, %xmm7 3117 ; SSE2-NEXT: pxor %xmm6, %xmm7 3118 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 3119 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 3120 ; SSE2-NEXT: movdqa %xmm7, %xmm5 3121 ; SSE2-NEXT: pxor %xmm4, %xmm5 3122 ; SSE2-NEXT: movdqa %xmm2, %xmm8 3123 ; SSE2-NEXT: pxor %xmm6, %xmm8 3124 ; SSE2-NEXT: pxor %xmm0, %xmm6 3125 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm6 3126 ; SSE2-NEXT: pxor %xmm6, %xmm4 3127 ; SSE2-NEXT: pandn %xmm2, %xmm6 3128 ; SSE2-NEXT: pandn %xmm0, %xmm4 3129 ; SSE2-NEXT: por %xmm6, %xmm4 3130 ; SSE2-NEXT: pandn %xmm3, %xmm7 3131 ; SSE2-NEXT: pandn %xmm1, %xmm5 3132 ; SSE2-NEXT: por %xmm7, %xmm5 3133 ; SSE2-NEXT: movdqa %xmm4, %xmm0 3134 ; SSE2-NEXT: movdqa %xmm5, %xmm1 3135 ; SSE2-NEXT: retq 3136 ; 3137 ; SSE4-LABEL: test94: 3138 ; SSE4: # BB#0: # %entry 3139 ; SSE4-NEXT: pmaxud %xmm2, %xmm0 3140 ; SSE4-NEXT: pmaxud %xmm3, %xmm1 3141 ; SSE4-NEXT: retq 3142 ; 3143 ; AVX1-LABEL: test94: 3144 ; AVX1: # BB#0: # %entry 3145 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3146 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3147 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 3148 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 3149 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3150 ; AVX1-NEXT: retq 3151 ; 3152 ; AVX2-LABEL: test94: 3153 ; AVX2: # BB#0: # %entry 3154 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 3155 ; AVX2-NEXT: retq 3156 ; 3157 ; AVX512F-LABEL: test94: 3158 ; AVX512F: # BB#0: # %entry 3159 ; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 3160 ; AVX512F-NEXT: retq 3161 entry: 3162 %cmp = icmp ule <8 x i32> %a, %b 3163 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3164 ret <8 x i32> %sel 3165 } 3166 3167 define <8 x i32> @test95(<8 x i32> %a, <8 x i32> %b) { 3168 ; SSE2-LABEL: test95: 3169 ; SSE2: # BB#0: # %entry 3170 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 3171 ; SSE2-NEXT: movdqa %xmm3, %xmm6 3172 ; SSE2-NEXT: pxor %xmm4, %xmm6 3173 ; SSE2-NEXT: movdqa %xmm1, %xmm5 3174 ; SSE2-NEXT: pxor %xmm4, %xmm5 3175 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 3176 ; SSE2-NEXT: movdqa %xmm2, %xmm6 3177 ; SSE2-NEXT: pxor %xmm4, %xmm6 3178 ; SSE2-NEXT: pxor %xmm0, %xmm4 3179 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 3180 ; SSE2-NEXT: pand %xmm4, %xmm2 3181 ; SSE2-NEXT: pandn %xmm0, %xmm4 3182 ; SSE2-NEXT: por %xmm2, %xmm4 3183 ; SSE2-NEXT: pand %xmm5, %xmm3 3184 ; SSE2-NEXT: pandn %xmm1, %xmm5 3185 ; SSE2-NEXT: por %xmm3, %xmm5 3186 ; SSE2-NEXT: movdqa %xmm4, %xmm0 3187 ; SSE2-NEXT: movdqa %xmm5, %xmm1 3188 ; SSE2-NEXT: retq 3189 ; 3190 ; SSE4-LABEL: test95: 3191 ; SSE4: # BB#0: # %entry 3192 ; SSE4-NEXT: pminud %xmm2, %xmm0 3193 ; SSE4-NEXT: pminud %xmm3, %xmm1 3194 ; SSE4-NEXT: retq 3195 ; 3196 ; AVX1-LABEL: test95: 3197 ; AVX1: # BB#0: # %entry 3198 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3199 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3200 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 3201 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 3202 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3203 ; AVX1-NEXT: retq 3204 ; 3205 ; AVX2-LABEL: test95: 3206 ; AVX2: # BB#0: # %entry 3207 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 3208 ; AVX2-NEXT: retq 3209 ; 3210 ; AVX512F-LABEL: test95: 3211 ; AVX512F: # BB#0: # %entry 3212 ; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0 3213 ; AVX512F-NEXT: retq 3214 entry: 3215 %cmp = icmp ugt <8 x i32> %a, %b 3216 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3217 ret <8 x i32> %sel 3218 } 3219 3220 define <8 x i32> @test96(<8 x i32> %a, <8 x i32> %b) { 3221 ; SSE2-LABEL: test96: 3222 ; SSE2: # BB#0: # %entry 3223 ; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648] 3224 ; SSE2-NEXT: movdqa %xmm1, %xmm4 3225 ; SSE2-NEXT: pxor %xmm6, %xmm4 3226 ; SSE2-NEXT: movdqa %xmm3, %xmm7 3227 ; SSE2-NEXT: pxor %xmm6, %xmm7 3228 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 3229 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 3230 ; SSE2-NEXT: movdqa %xmm7, %xmm5 3231 ; SSE2-NEXT: pxor %xmm4, %xmm5 3232 ; SSE2-NEXT: movdqa %xmm0, %xmm8 3233 ; SSE2-NEXT: pxor %xmm6, %xmm8 3234 ; SSE2-NEXT: pxor %xmm2, %xmm6 3235 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm6 3236 ; SSE2-NEXT: pxor %xmm6, %xmm4 3237 ; SSE2-NEXT: pandn %xmm2, %xmm6 3238 ; SSE2-NEXT: pandn %xmm0, %xmm4 3239 ; SSE2-NEXT: por %xmm6, %xmm4 3240 ; SSE2-NEXT: pandn %xmm3, %xmm7 3241 ; SSE2-NEXT: pandn %xmm1, %xmm5 3242 ; SSE2-NEXT: por %xmm7, %xmm5 3243 ; SSE2-NEXT: movdqa %xmm4, %xmm0 3244 ; SSE2-NEXT: movdqa %xmm5, %xmm1 3245 ; SSE2-NEXT: retq 3246 ; 3247 ; SSE4-LABEL: test96: 3248 ; SSE4: # BB#0: # %entry 3249 ; SSE4-NEXT: pminud %xmm2, %xmm0 3250 ; SSE4-NEXT: pminud %xmm3, %xmm1 3251 ; SSE4-NEXT: retq 3252 ; 3253 ; AVX1-LABEL: test96: 3254 ; AVX1: # BB#0: # %entry 3255 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3256 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3257 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 3258 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 3259 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3260 ; AVX1-NEXT: retq 3261 ; 3262 ; AVX2-LABEL: test96: 3263 ; AVX2: # BB#0: # %entry 3264 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 3265 ; AVX2-NEXT: retq 3266 ; 3267 ; AVX512F-LABEL: test96: 3268 ; AVX512F: # BB#0: # %entry 3269 ; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0 3270 ; AVX512F-NEXT: retq 3271 entry: 3272 %cmp = icmp uge <8 x i32> %a, %b 3273 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3274 ret <8 x i32> %sel 3275 } 3276 3277 ; ---------------------------- 3278 3279 define <64 x i8> @test97(<64 x i8> %a, <64 x i8> %b) { 3280 ; SSE2-LABEL: test97: 3281 ; SSE2: # BB#0: # %entry 3282 ; SSE2-NEXT: movdqa %xmm7, %xmm8 3283 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm8 3284 ; SSE2-NEXT: movdqa %xmm6, %xmm9 3285 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm9 3286 ; SSE2-NEXT: movdqa %xmm5, %xmm10 3287 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm10 3288 ; SSE2-NEXT: movdqa %xmm4, %xmm11 3289 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm11 3290 ; SSE2-NEXT: pand %xmm11, %xmm0 3291 ; SSE2-NEXT: pandn %xmm4, %xmm11 3292 ; SSE2-NEXT: por %xmm11, %xmm0 3293 ; SSE2-NEXT: pand %xmm10, %xmm1 3294 ; SSE2-NEXT: pandn %xmm5, %xmm10 3295 ; SSE2-NEXT: por %xmm10, %xmm1 3296 ; SSE2-NEXT: pand %xmm9, %xmm2 3297 ; SSE2-NEXT: pandn %xmm6, %xmm9 3298 ; SSE2-NEXT: por %xmm9, %xmm2 3299 ; SSE2-NEXT: pand %xmm8, %xmm3 3300 ; SSE2-NEXT: pandn %xmm7, %xmm8 3301 ; SSE2-NEXT: por %xmm8, %xmm3 3302 ; SSE2-NEXT: retq 3303 ; 3304 ; SSE4-LABEL: test97: 3305 ; SSE4: # BB#0: # %entry 3306 ; SSE4-NEXT: pminsb %xmm4, %xmm0 3307 ; SSE4-NEXT: pminsb %xmm5, %xmm1 3308 ; SSE4-NEXT: pminsb %xmm6, %xmm2 3309 ; SSE4-NEXT: pminsb %xmm7, %xmm3 3310 ; SSE4-NEXT: retq 3311 ; 3312 ; AVX1-LABEL: test97: 3313 ; AVX1: # BB#0: # %entry 3314 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3315 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3316 ; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 3317 ; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 3318 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3319 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3320 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3321 ; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 3322 ; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 3323 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3324 ; AVX1-NEXT: retq 3325 ; 3326 ; AVX2-LABEL: test97: 3327 ; AVX2: # BB#0: # %entry 3328 ; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 3329 ; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 3330 ; AVX2-NEXT: retq 3331 ; 3332 ; AVX512BW-LABEL: test97: 3333 ; AVX512BW: # BB#0: # %entry 3334 ; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 3335 ; AVX512BW-NEXT: retq 3336 entry: 3337 %cmp = icmp slt <64 x i8> %a, %b 3338 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3339 ret <64 x i8> %sel 3340 } 3341 3342 define <64 x i8> @test98(<64 x i8> %a, <64 x i8> %b) { 3343 ; SSE2-LABEL: test98: 3344 ; SSE2: # BB#0: # %entry 3345 ; SSE2-NEXT: movdqa %xmm3, %xmm8 3346 ; SSE2-NEXT: movdqa %xmm2, %xmm9 3347 ; SSE2-NEXT: movdqa %xmm8, %xmm12 3348 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm12 3349 ; SSE2-NEXT: pcmpeqd %xmm13, %xmm13 3350 ; SSE2-NEXT: movdqa %xmm12, %xmm3 3351 ; SSE2-NEXT: pxor %xmm13, %xmm3 3352 ; SSE2-NEXT: movdqa %xmm9, %xmm14 3353 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm14 3354 ; SSE2-NEXT: movdqa %xmm14, %xmm2 3355 ; SSE2-NEXT: pxor %xmm13, %xmm2 3356 ; SSE2-NEXT: movdqa %xmm1, %xmm15 3357 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm15 3358 ; SSE2-NEXT: movdqa %xmm15, %xmm10 3359 ; SSE2-NEXT: pxor %xmm13, %xmm10 3360 ; SSE2-NEXT: movdqa %xmm0, %xmm11 3361 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm11 3362 ; SSE2-NEXT: pxor %xmm11, %xmm13 3363 ; SSE2-NEXT: pandn %xmm0, %xmm11 3364 ; SSE2-NEXT: pandn %xmm4, %xmm13 3365 ; SSE2-NEXT: por %xmm13, %xmm11 3366 ; SSE2-NEXT: pandn %xmm1, %xmm15 3367 ; SSE2-NEXT: pandn %xmm5, %xmm10 3368 ; SSE2-NEXT: por %xmm15, %xmm10 3369 ; SSE2-NEXT: pandn %xmm9, %xmm14 3370 ; SSE2-NEXT: pandn %xmm6, %xmm2 3371 ; SSE2-NEXT: por %xmm14, %xmm2 3372 ; SSE2-NEXT: pandn %xmm8, %xmm12 3373 ; SSE2-NEXT: pandn %xmm7, %xmm3 3374 ; SSE2-NEXT: por %xmm12, %xmm3 3375 ; SSE2-NEXT: movdqa %xmm11, %xmm0 3376 ; SSE2-NEXT: movdqa %xmm10, %xmm1 3377 ; SSE2-NEXT: retq 3378 ; 3379 ; SSE4-LABEL: test98: 3380 ; SSE4: # BB#0: # %entry 3381 ; SSE4-NEXT: pminsb %xmm4, %xmm0 3382 ; SSE4-NEXT: pminsb %xmm5, %xmm1 3383 ; SSE4-NEXT: pminsb %xmm6, %xmm2 3384 ; SSE4-NEXT: pminsb %xmm7, %xmm3 3385 ; SSE4-NEXT: retq 3386 ; 3387 ; AVX1-LABEL: test98: 3388 ; AVX1: # BB#0: # %entry 3389 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3390 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3391 ; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 3392 ; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 3393 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3394 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3395 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3396 ; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 3397 ; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 3398 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3399 ; AVX1-NEXT: retq 3400 ; 3401 ; AVX2-LABEL: test98: 3402 ; AVX2: # BB#0: # %entry 3403 ; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 3404 ; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 3405 ; AVX2-NEXT: retq 3406 ; 3407 ; AVX512BW-LABEL: test98: 3408 ; AVX512BW: # BB#0: # %entry 3409 ; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 3410 ; AVX512BW-NEXT: retq 3411 entry: 3412 %cmp = icmp sle <64 x i8> %a, %b 3413 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3414 ret <64 x i8> %sel 3415 } 3416 3417 define <64 x i8> @test99(<64 x i8> %a, <64 x i8> %b) { 3418 ; SSE2-LABEL: test99: 3419 ; SSE2: # BB#0: # %entry 3420 ; SSE2-NEXT: movdqa %xmm3, %xmm8 3421 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm3 3422 ; SSE2-NEXT: movdqa %xmm2, %xmm9 3423 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm9 3424 ; SSE2-NEXT: movdqa %xmm1, %xmm10 3425 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm10 3426 ; SSE2-NEXT: movdqa %xmm0, %xmm11 3427 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm11 3428 ; SSE2-NEXT: pand %xmm11, %xmm0 3429 ; SSE2-NEXT: pandn %xmm4, %xmm11 3430 ; SSE2-NEXT: por %xmm0, %xmm11 3431 ; SSE2-NEXT: pand %xmm10, %xmm1 3432 ; SSE2-NEXT: pandn %xmm5, %xmm10 3433 ; SSE2-NEXT: por %xmm1, %xmm10 3434 ; SSE2-NEXT: pand %xmm9, %xmm2 3435 ; SSE2-NEXT: pandn %xmm6, %xmm9 3436 ; SSE2-NEXT: por %xmm2, %xmm9 3437 ; SSE2-NEXT: pand %xmm3, %xmm8 3438 ; SSE2-NEXT: pandn %xmm7, %xmm3 3439 ; SSE2-NEXT: por %xmm8, %xmm3 3440 ; SSE2-NEXT: movdqa %xmm11, %xmm0 3441 ; SSE2-NEXT: movdqa %xmm10, %xmm1 3442 ; SSE2-NEXT: movdqa %xmm9, %xmm2 3443 ; SSE2-NEXT: retq 3444 ; 3445 ; SSE4-LABEL: test99: 3446 ; SSE4: # BB#0: # %entry 3447 ; SSE4-NEXT: pmaxsb %xmm4, %xmm0 3448 ; SSE4-NEXT: pmaxsb %xmm5, %xmm1 3449 ; SSE4-NEXT: pmaxsb %xmm6, %xmm2 3450 ; SSE4-NEXT: pmaxsb %xmm7, %xmm3 3451 ; SSE4-NEXT: retq 3452 ; 3453 ; AVX1-LABEL: test99: 3454 ; AVX1: # BB#0: # %entry 3455 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3456 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3457 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 3458 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 3459 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3460 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3461 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3462 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 3463 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 3464 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3465 ; AVX1-NEXT: retq 3466 ; 3467 ; AVX2-LABEL: test99: 3468 ; AVX2: # BB#0: # %entry 3469 ; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 3470 ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 3471 ; AVX2-NEXT: retq 3472 ; 3473 ; AVX512BW-LABEL: test99: 3474 ; AVX512BW: # BB#0: # %entry 3475 ; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 3476 ; AVX512BW-NEXT: retq 3477 entry: 3478 %cmp = icmp sgt <64 x i8> %a, %b 3479 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3480 ret <64 x i8> %sel 3481 } 3482 3483 define <64 x i8> @test100(<64 x i8> %a, <64 x i8> %b) { 3484 ; SSE2-LABEL: test100: 3485 ; SSE2: # BB#0: # %entry 3486 ; SSE2-NEXT: movdqa %xmm3, %xmm8 3487 ; SSE2-NEXT: movdqa %xmm2, %xmm9 3488 ; SSE2-NEXT: movdqa %xmm0, %xmm10 3489 ; SSE2-NEXT: movdqa %xmm7, %xmm12 3490 ; SSE2-NEXT: pcmpgtb %xmm8, %xmm12 3491 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 3492 ; SSE2-NEXT: movdqa %xmm12, %xmm3 3493 ; SSE2-NEXT: pxor %xmm0, %xmm3 3494 ; SSE2-NEXT: movdqa %xmm6, %xmm13 3495 ; SSE2-NEXT: pcmpgtb %xmm9, %xmm13 3496 ; SSE2-NEXT: movdqa %xmm13, %xmm2 3497 ; SSE2-NEXT: pxor %xmm0, %xmm2 3498 ; SSE2-NEXT: movdqa %xmm5, %xmm14 3499 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm14 3500 ; SSE2-NEXT: movdqa %xmm14, %xmm11 3501 ; SSE2-NEXT: pxor %xmm0, %xmm11 3502 ; SSE2-NEXT: movdqa %xmm4, %xmm15 3503 ; SSE2-NEXT: pcmpgtb %xmm10, %xmm15 3504 ; SSE2-NEXT: pxor %xmm15, %xmm0 3505 ; SSE2-NEXT: pandn %xmm10, %xmm15 3506 ; SSE2-NEXT: pandn %xmm4, %xmm0 3507 ; SSE2-NEXT: por %xmm15, %xmm0 3508 ; SSE2-NEXT: pandn %xmm1, %xmm14 3509 ; SSE2-NEXT: pandn %xmm5, %xmm11 3510 ; SSE2-NEXT: por %xmm14, %xmm11 3511 ; SSE2-NEXT: pandn %xmm9, %xmm13 3512 ; SSE2-NEXT: pandn %xmm6, %xmm2 3513 ; SSE2-NEXT: por %xmm13, %xmm2 3514 ; SSE2-NEXT: pandn %xmm8, %xmm12 3515 ; SSE2-NEXT: pandn %xmm7, %xmm3 3516 ; SSE2-NEXT: por %xmm12, %xmm3 3517 ; SSE2-NEXT: movdqa %xmm11, %xmm1 3518 ; SSE2-NEXT: retq 3519 ; 3520 ; SSE4-LABEL: test100: 3521 ; SSE4: # BB#0: # %entry 3522 ; SSE4-NEXT: pmaxsb %xmm4, %xmm0 3523 ; SSE4-NEXT: pmaxsb %xmm5, %xmm1 3524 ; SSE4-NEXT: pmaxsb %xmm6, %xmm2 3525 ; SSE4-NEXT: pmaxsb %xmm7, %xmm3 3526 ; SSE4-NEXT: retq 3527 ; 3528 ; AVX1-LABEL: test100: 3529 ; AVX1: # BB#0: # %entry 3530 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3531 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3532 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 3533 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 3534 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3535 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3536 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3537 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 3538 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 3539 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3540 ; AVX1-NEXT: retq 3541 ; 3542 ; AVX2-LABEL: test100: 3543 ; AVX2: # BB#0: # %entry 3544 ; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 3545 ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 3546 ; AVX2-NEXT: retq 3547 ; 3548 ; AVX512BW-LABEL: test100: 3549 ; AVX512BW: # BB#0: # %entry 3550 ; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 3551 ; AVX512BW-NEXT: retq 3552 entry: 3553 %cmp = icmp sge <64 x i8> %a, %b 3554 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3555 ret <64 x i8> %sel 3556 } 3557 3558 define <64 x i8> @test101(<64 x i8> %a, <64 x i8> %b) { 3559 ; SSE-LABEL: test101: 3560 ; SSE: # BB#0: # %entry 3561 ; SSE-NEXT: pminub %xmm4, %xmm0 3562 ; SSE-NEXT: pminub %xmm5, %xmm1 3563 ; SSE-NEXT: pminub %xmm6, %xmm2 3564 ; SSE-NEXT: pminub %xmm7, %xmm3 3565 ; SSE-NEXT: retq 3566 ; 3567 ; AVX1-LABEL: test101: 3568 ; AVX1: # BB#0: # %entry 3569 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3570 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3571 ; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 3572 ; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 3573 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3574 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3575 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3576 ; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 3577 ; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 3578 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3579 ; AVX1-NEXT: retq 3580 ; 3581 ; AVX2-LABEL: test101: 3582 ; AVX2: # BB#0: # %entry 3583 ; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 3584 ; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 3585 ; AVX2-NEXT: retq 3586 ; 3587 ; AVX512BW-LABEL: test101: 3588 ; AVX512BW: # BB#0: # %entry 3589 ; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 3590 ; AVX512BW-NEXT: retq 3591 entry: 3592 %cmp = icmp ult <64 x i8> %a, %b 3593 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3594 ret <64 x i8> %sel 3595 } 3596 3597 define <64 x i8> @test102(<64 x i8> %a, <64 x i8> %b) { 3598 ; SSE-LABEL: test102: 3599 ; SSE: # BB#0: # %entry 3600 ; SSE-NEXT: pminub %xmm4, %xmm0 3601 ; SSE-NEXT: pminub %xmm5, %xmm1 3602 ; SSE-NEXT: pminub %xmm6, %xmm2 3603 ; SSE-NEXT: pminub %xmm7, %xmm3 3604 ; SSE-NEXT: retq 3605 ; 3606 ; AVX1-LABEL: test102: 3607 ; AVX1: # BB#0: # %entry 3608 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3609 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3610 ; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 3611 ; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 3612 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3613 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3614 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3615 ; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 3616 ; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 3617 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3618 ; AVX1-NEXT: retq 3619 ; 3620 ; AVX2-LABEL: test102: 3621 ; AVX2: # BB#0: # %entry 3622 ; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 3623 ; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 3624 ; AVX2-NEXT: retq 3625 ; 3626 ; AVX512BW-LABEL: test102: 3627 ; AVX512BW: # BB#0: # %entry 3628 ; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 3629 ; AVX512BW-NEXT: retq 3630 entry: 3631 %cmp = icmp ule <64 x i8> %a, %b 3632 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3633 ret <64 x i8> %sel 3634 } 3635 3636 define <64 x i8> @test103(<64 x i8> %a, <64 x i8> %b) { 3637 ; SSE-LABEL: test103: 3638 ; SSE: # BB#0: # %entry 3639 ; SSE-NEXT: pmaxub %xmm4, %xmm0 3640 ; SSE-NEXT: pmaxub %xmm5, %xmm1 3641 ; SSE-NEXT: pmaxub %xmm6, %xmm2 3642 ; SSE-NEXT: pmaxub %xmm7, %xmm3 3643 ; SSE-NEXT: retq 3644 ; 3645 ; AVX1-LABEL: test103: 3646 ; AVX1: # BB#0: # %entry 3647 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3648 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3649 ; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 3650 ; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 3651 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3652 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3653 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3654 ; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 3655 ; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 3656 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3657 ; AVX1-NEXT: retq 3658 ; 3659 ; AVX2-LABEL: test103: 3660 ; AVX2: # BB#0: # %entry 3661 ; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 3662 ; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 3663 ; AVX2-NEXT: retq 3664 ; 3665 ; AVX512BW-LABEL: test103: 3666 ; AVX512BW: # BB#0: # %entry 3667 ; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 3668 ; AVX512BW-NEXT: retq 3669 entry: 3670 %cmp = icmp ugt <64 x i8> %a, %b 3671 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3672 ret <64 x i8> %sel 3673 } 3674 3675 define <64 x i8> @test104(<64 x i8> %a, <64 x i8> %b) { 3676 ; SSE-LABEL: test104: 3677 ; SSE: # BB#0: # %entry 3678 ; SSE-NEXT: pmaxub %xmm4, %xmm0 3679 ; SSE-NEXT: pmaxub %xmm5, %xmm1 3680 ; SSE-NEXT: pmaxub %xmm6, %xmm2 3681 ; SSE-NEXT: pmaxub %xmm7, %xmm3 3682 ; SSE-NEXT: retq 3683 ; 3684 ; AVX1-LABEL: test104: 3685 ; AVX1: # BB#0: # %entry 3686 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3687 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3688 ; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 3689 ; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 3690 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3691 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3692 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3693 ; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 3694 ; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 3695 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3696 ; AVX1-NEXT: retq 3697 ; 3698 ; AVX2-LABEL: test104: 3699 ; AVX2: # BB#0: # %entry 3700 ; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 3701 ; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 3702 ; AVX2-NEXT: retq 3703 ; 3704 ; AVX512BW-LABEL: test104: 3705 ; AVX512BW: # BB#0: # %entry 3706 ; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 3707 ; AVX512BW-NEXT: retq 3708 entry: 3709 %cmp = icmp uge <64 x i8> %a, %b 3710 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3711 ret <64 x i8> %sel 3712 } 3713 3714 define <32 x i16> @test105(<32 x i16> %a, <32 x i16> %b) { 3715 ; SSE-LABEL: test105: 3716 ; SSE: # BB#0: # %entry 3717 ; SSE-NEXT: pminsw %xmm4, %xmm0 3718 ; SSE-NEXT: pminsw %xmm5, %xmm1 3719 ; SSE-NEXT: pminsw %xmm6, %xmm2 3720 ; SSE-NEXT: pminsw %xmm7, %xmm3 3721 ; SSE-NEXT: retq 3722 ; 3723 ; AVX1-LABEL: test105: 3724 ; AVX1: # BB#0: # %entry 3725 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3726 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3727 ; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 3728 ; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 3729 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3730 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3731 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3732 ; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 3733 ; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 3734 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3735 ; AVX1-NEXT: retq 3736 ; 3737 ; AVX2-LABEL: test105: 3738 ; AVX2: # BB#0: # %entry 3739 ; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 3740 ; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 3741 ; AVX2-NEXT: retq 3742 ; 3743 ; AVX512BW-LABEL: test105: 3744 ; AVX512BW: # BB#0: # %entry 3745 ; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 3746 ; AVX512BW-NEXT: retq 3747 entry: 3748 %cmp = icmp slt <32 x i16> %a, %b 3749 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3750 ret <32 x i16> %sel 3751 } 3752 3753 define <32 x i16> @test106(<32 x i16> %a, <32 x i16> %b) { 3754 ; SSE-LABEL: test106: 3755 ; SSE: # BB#0: # %entry 3756 ; SSE-NEXT: pminsw %xmm4, %xmm0 3757 ; SSE-NEXT: pminsw %xmm5, %xmm1 3758 ; SSE-NEXT: pminsw %xmm6, %xmm2 3759 ; SSE-NEXT: pminsw %xmm7, %xmm3 3760 ; SSE-NEXT: retq 3761 ; 3762 ; AVX1-LABEL: test106: 3763 ; AVX1: # BB#0: # %entry 3764 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3765 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3766 ; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 3767 ; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 3768 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3769 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3770 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3771 ; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 3772 ; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 3773 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3774 ; AVX1-NEXT: retq 3775 ; 3776 ; AVX2-LABEL: test106: 3777 ; AVX2: # BB#0: # %entry 3778 ; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 3779 ; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 3780 ; AVX2-NEXT: retq 3781 ; 3782 ; AVX512BW-LABEL: test106: 3783 ; AVX512BW: # BB#0: # %entry 3784 ; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 3785 ; AVX512BW-NEXT: retq 3786 entry: 3787 %cmp = icmp sle <32 x i16> %a, %b 3788 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3789 ret <32 x i16> %sel 3790 } 3791 3792 define <32 x i16> @test107(<32 x i16> %a, <32 x i16> %b) { 3793 ; SSE-LABEL: test107: 3794 ; SSE: # BB#0: # %entry 3795 ; SSE-NEXT: pmaxsw %xmm4, %xmm0 3796 ; SSE-NEXT: pmaxsw %xmm5, %xmm1 3797 ; SSE-NEXT: pmaxsw %xmm6, %xmm2 3798 ; SSE-NEXT: pmaxsw %xmm7, %xmm3 3799 ; SSE-NEXT: retq 3800 ; 3801 ; AVX1-LABEL: test107: 3802 ; AVX1: # BB#0: # %entry 3803 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3804 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3805 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 3806 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 3807 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3808 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3809 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3810 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 3811 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 3812 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3813 ; AVX1-NEXT: retq 3814 ; 3815 ; AVX2-LABEL: test107: 3816 ; AVX2: # BB#0: # %entry 3817 ; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 3818 ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 3819 ; AVX2-NEXT: retq 3820 ; 3821 ; AVX512BW-LABEL: test107: 3822 ; AVX512BW: # BB#0: # %entry 3823 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 3824 ; AVX512BW-NEXT: retq 3825 entry: 3826 %cmp = icmp sgt <32 x i16> %a, %b 3827 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3828 ret <32 x i16> %sel 3829 } 3830 3831 define <32 x i16> @test108(<32 x i16> %a, <32 x i16> %b) { 3832 ; SSE-LABEL: test108: 3833 ; SSE: # BB#0: # %entry 3834 ; SSE-NEXT: pmaxsw %xmm4, %xmm0 3835 ; SSE-NEXT: pmaxsw %xmm5, %xmm1 3836 ; SSE-NEXT: pmaxsw %xmm6, %xmm2 3837 ; SSE-NEXT: pmaxsw %xmm7, %xmm3 3838 ; SSE-NEXT: retq 3839 ; 3840 ; AVX1-LABEL: test108: 3841 ; AVX1: # BB#0: # %entry 3842 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3843 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3844 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 3845 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 3846 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3847 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3848 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3849 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 3850 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 3851 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3852 ; AVX1-NEXT: retq 3853 ; 3854 ; AVX2-LABEL: test108: 3855 ; AVX2: # BB#0: # %entry 3856 ; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 3857 ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 3858 ; AVX2-NEXT: retq 3859 ; 3860 ; AVX512BW-LABEL: test108: 3861 ; AVX512BW: # BB#0: # %entry 3862 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 3863 ; AVX512BW-NEXT: retq 3864 entry: 3865 %cmp = icmp sge <32 x i16> %a, %b 3866 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3867 ret <32 x i16> %sel 3868 } 3869 3870 define <32 x i16> @test109(<32 x i16> %a, <32 x i16> %b) { 3871 ; SSE2-LABEL: test109: 3872 ; SSE2: # BB#0: # %entry 3873 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [32768,32768,32768,32768,32768,32768,32768,32768] 3874 ; SSE2-NEXT: movdqa %xmm3, %xmm9 3875 ; SSE2-NEXT: pxor %xmm10, %xmm9 3876 ; SSE2-NEXT: movdqa %xmm7, %xmm8 3877 ; SSE2-NEXT: pxor %xmm10, %xmm8 3878 ; SSE2-NEXT: pcmpgtw %xmm9, %xmm8 3879 ; SSE2-NEXT: movdqa %xmm2, %xmm11 3880 ; SSE2-NEXT: pxor %xmm10, %xmm11 3881 ; SSE2-NEXT: movdqa %xmm6, %xmm9 3882 ; SSE2-NEXT: pxor %xmm10, %xmm9 3883 ; SSE2-NEXT: pcmpgtw %xmm11, %xmm9 3884 ; SSE2-NEXT: movdqa %xmm1, %xmm11 3885 ; SSE2-NEXT: pxor %xmm10, %xmm11 3886 ; SSE2-NEXT: movdqa %xmm5, %xmm12 3887 ; SSE2-NEXT: pxor %xmm10, %xmm12 3888 ; SSE2-NEXT: pcmpgtw %xmm11, %xmm12 3889 ; SSE2-NEXT: movdqa %xmm0, %xmm11 3890 ; SSE2-NEXT: pxor %xmm10, %xmm11 3891 ; SSE2-NEXT: pxor %xmm4, %xmm10 3892 ; SSE2-NEXT: pcmpgtw %xmm11, %xmm10 3893 ; SSE2-NEXT: pand %xmm10, %xmm0 3894 ; SSE2-NEXT: pandn %xmm4, %xmm10 3895 ; SSE2-NEXT: por %xmm10, %xmm0 3896 ; SSE2-NEXT: pand %xmm12, %xmm1 3897 ; SSE2-NEXT: pandn %xmm5, %xmm12 3898 ; SSE2-NEXT: por %xmm12, %xmm1 3899 ; SSE2-NEXT: pand %xmm9, %xmm2 3900 ; SSE2-NEXT: pandn %xmm6, %xmm9 3901 ; SSE2-NEXT: por %xmm9, %xmm2 3902 ; SSE2-NEXT: pand %xmm8, %xmm3 3903 ; SSE2-NEXT: pandn %xmm7, %xmm8 3904 ; SSE2-NEXT: por %xmm8, %xmm3 3905 ; SSE2-NEXT: retq 3906 ; 3907 ; SSE4-LABEL: test109: 3908 ; SSE4: # BB#0: # %entry 3909 ; SSE4-NEXT: pminuw %xmm4, %xmm0 3910 ; SSE4-NEXT: pminuw %xmm5, %xmm1 3911 ; SSE4-NEXT: pminuw %xmm6, %xmm2 3912 ; SSE4-NEXT: pminuw %xmm7, %xmm3 3913 ; SSE4-NEXT: retq 3914 ; 3915 ; AVX1-LABEL: test109: 3916 ; AVX1: # BB#0: # %entry 3917 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3918 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3919 ; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 3920 ; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 3921 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3922 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3923 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3924 ; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 3925 ; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 3926 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3927 ; AVX1-NEXT: retq 3928 ; 3929 ; AVX2-LABEL: test109: 3930 ; AVX2: # BB#0: # %entry 3931 ; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 3932 ; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 3933 ; AVX2-NEXT: retq 3934 ; 3935 ; AVX512BW-LABEL: test109: 3936 ; AVX512BW: # BB#0: # %entry 3937 ; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 3938 ; AVX512BW-NEXT: retq 3939 entry: 3940 %cmp = icmp ult <32 x i16> %a, %b 3941 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3942 ret <32 x i16> %sel 3943 } 3944 3945 define <32 x i16> @test110(<32 x i16> %a, <32 x i16> %b) { 3946 ; SSE2-LABEL: test110: 3947 ; SSE2: # BB#0: # %entry 3948 ; SSE2-NEXT: movdqa %xmm3, %xmm8 3949 ; SSE2-NEXT: movdqa %xmm2, %xmm9 3950 ; SSE2-NEXT: movdqa %xmm1, %xmm10 3951 ; SSE2-NEXT: psubusw %xmm7, %xmm3 3952 ; SSE2-NEXT: pxor %xmm12, %xmm12 3953 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm3 3954 ; SSE2-NEXT: psubusw %xmm6, %xmm2 3955 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm2 3956 ; SSE2-NEXT: psubusw %xmm5, %xmm1 3957 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm1 3958 ; SSE2-NEXT: movdqa %xmm0, %xmm11 3959 ; SSE2-NEXT: psubusw %xmm4, %xmm11 3960 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm11 3961 ; SSE2-NEXT: pand %xmm11, %xmm0 3962 ; SSE2-NEXT: pandn %xmm4, %xmm11 3963 ; SSE2-NEXT: por %xmm0, %xmm11 3964 ; SSE2-NEXT: pand %xmm1, %xmm10 3965 ; SSE2-NEXT: pandn %xmm5, %xmm1 3966 ; SSE2-NEXT: por %xmm10, %xmm1 3967 ; SSE2-NEXT: pand %xmm2, %xmm9 3968 ; SSE2-NEXT: pandn %xmm6, %xmm2 3969 ; SSE2-NEXT: por %xmm9, %xmm2 3970 ; SSE2-NEXT: pand %xmm3, %xmm8 3971 ; SSE2-NEXT: pandn %xmm7, %xmm3 3972 ; SSE2-NEXT: por %xmm8, %xmm3 3973 ; SSE2-NEXT: movdqa %xmm11, %xmm0 3974 ; SSE2-NEXT: retq 3975 ; 3976 ; SSE4-LABEL: test110: 3977 ; SSE4: # BB#0: # %entry 3978 ; SSE4-NEXT: pminuw %xmm4, %xmm0 3979 ; SSE4-NEXT: pminuw %xmm5, %xmm1 3980 ; SSE4-NEXT: pminuw %xmm6, %xmm2 3981 ; SSE4-NEXT: pminuw %xmm7, %xmm3 3982 ; SSE4-NEXT: retq 3983 ; 3984 ; AVX1-LABEL: test110: 3985 ; AVX1: # BB#0: # %entry 3986 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3987 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3988 ; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 3989 ; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 3990 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3991 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3992 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3993 ; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 3994 ; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 3995 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3996 ; AVX1-NEXT: retq 3997 ; 3998 ; AVX2-LABEL: test110: 3999 ; AVX2: # BB#0: # %entry 4000 ; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 4001 ; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 4002 ; AVX2-NEXT: retq 4003 ; 4004 ; AVX512BW-LABEL: test110: 4005 ; AVX512BW: # BB#0: # %entry 4006 ; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 4007 ; AVX512BW-NEXT: retq 4008 entry: 4009 %cmp = icmp ule <32 x i16> %a, %b 4010 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 4011 ret <32 x i16> %sel 4012 } 4013 4014 define <32 x i16> @test111(<32 x i16> %a, <32 x i16> %b) { 4015 ; SSE2-LABEL: test111: 4016 ; SSE2: # BB#0: # %entry 4017 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [32768,32768,32768,32768,32768,32768,32768,32768] 4018 ; SSE2-NEXT: movdqa %xmm7, %xmm9 4019 ; SSE2-NEXT: pxor %xmm11, %xmm9 4020 ; SSE2-NEXT: movdqa %xmm3, %xmm8 4021 ; SSE2-NEXT: pxor %xmm11, %xmm8 4022 ; SSE2-NEXT: pcmpgtw %xmm9, %xmm8 4023 ; SSE2-NEXT: movdqa %xmm6, %xmm10 4024 ; SSE2-NEXT: pxor %xmm11, %xmm10 4025 ; SSE2-NEXT: movdqa %xmm2, %xmm9 4026 ; SSE2-NEXT: pxor %xmm11, %xmm9 4027 ; SSE2-NEXT: pcmpgtw %xmm10, %xmm9 4028 ; SSE2-NEXT: movdqa %xmm5, %xmm12 4029 ; SSE2-NEXT: pxor %xmm11, %xmm12 4030 ; SSE2-NEXT: movdqa %xmm1, %xmm10 4031 ; SSE2-NEXT: pxor %xmm11, %xmm10 4032 ; SSE2-NEXT: pcmpgtw %xmm12, %xmm10 4033 ; SSE2-NEXT: movdqa %xmm4, %xmm12 4034 ; SSE2-NEXT: pxor %xmm11, %xmm12 4035 ; SSE2-NEXT: pxor %xmm0, %xmm11 4036 ; SSE2-NEXT: pcmpgtw %xmm12, %xmm11 4037 ; SSE2-NEXT: pand %xmm11, %xmm0 4038 ; SSE2-NEXT: pandn %xmm4, %xmm11 4039 ; SSE2-NEXT: por %xmm11, %xmm0 4040 ; SSE2-NEXT: pand %xmm10, %xmm1 4041 ; SSE2-NEXT: pandn %xmm5, %xmm10 4042 ; SSE2-NEXT: por %xmm1, %xmm10 4043 ; SSE2-NEXT: pand %xmm9, %xmm2 4044 ; SSE2-NEXT: pandn %xmm6, %xmm9 4045 ; SSE2-NEXT: por %xmm2, %xmm9 4046 ; SSE2-NEXT: pand %xmm8, %xmm3 4047 ; SSE2-NEXT: pandn %xmm7, %xmm8 4048 ; SSE2-NEXT: por %xmm3, %xmm8 4049 ; SSE2-NEXT: movdqa %xmm10, %xmm1 4050 ; SSE2-NEXT: movdqa %xmm9, %xmm2 4051 ; SSE2-NEXT: movdqa %xmm8, %xmm3 4052 ; SSE2-NEXT: retq 4053 ; 4054 ; SSE4-LABEL: test111: 4055 ; SSE4: # BB#0: # %entry 4056 ; SSE4-NEXT: pmaxuw %xmm4, %xmm0 4057 ; SSE4-NEXT: pmaxuw %xmm5, %xmm1 4058 ; SSE4-NEXT: pmaxuw %xmm6, %xmm2 4059 ; SSE4-NEXT: pmaxuw %xmm7, %xmm3 4060 ; SSE4-NEXT: retq 4061 ; 4062 ; AVX1-LABEL: test111: 4063 ; AVX1: # BB#0: # %entry 4064 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4065 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4066 ; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 4067 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 4068 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4069 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4070 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4071 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 4072 ; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 4073 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4074 ; AVX1-NEXT: retq 4075 ; 4076 ; AVX2-LABEL: test111: 4077 ; AVX2: # BB#0: # %entry 4078 ; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 4079 ; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 4080 ; AVX2-NEXT: retq 4081 ; 4082 ; AVX512BW-LABEL: test111: 4083 ; AVX512BW: # BB#0: # %entry 4084 ; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 4085 ; AVX512BW-NEXT: retq 4086 entry: 4087 %cmp = icmp ugt <32 x i16> %a, %b 4088 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 4089 ret <32 x i16> %sel 4090 } 4091 4092 define <32 x i16> @test112(<32 x i16> %a, <32 x i16> %b) { 4093 ; SSE2-LABEL: test112: 4094 ; SSE2: # BB#0: # %entry 4095 ; SSE2-NEXT: movdqa %xmm7, %xmm8 4096 ; SSE2-NEXT: psubusw %xmm3, %xmm8 4097 ; SSE2-NEXT: pxor %xmm9, %xmm9 4098 ; SSE2-NEXT: pcmpeqw %xmm9, %xmm8 4099 ; SSE2-NEXT: movdqa %xmm6, %xmm10 4100 ; SSE2-NEXT: psubusw %xmm2, %xmm10 4101 ; SSE2-NEXT: pcmpeqw %xmm9, %xmm10 4102 ; SSE2-NEXT: movdqa %xmm5, %xmm11 4103 ; SSE2-NEXT: psubusw %xmm1, %xmm11 4104 ; SSE2-NEXT: pcmpeqw %xmm9, %xmm11 4105 ; SSE2-NEXT: movdqa %xmm4, %xmm12 4106 ; SSE2-NEXT: psubusw %xmm0, %xmm12 4107 ; SSE2-NEXT: pcmpeqw %xmm9, %xmm12 4108 ; SSE2-NEXT: pand %xmm12, %xmm0 4109 ; SSE2-NEXT: pandn %xmm4, %xmm12 4110 ; SSE2-NEXT: por %xmm12, %xmm0 4111 ; SSE2-NEXT: pand %xmm11, %xmm1 4112 ; SSE2-NEXT: pandn %xmm5, %xmm11 4113 ; SSE2-NEXT: por %xmm11, %xmm1 4114 ; SSE2-NEXT: pand %xmm10, %xmm2 4115 ; SSE2-NEXT: pandn %xmm6, %xmm10 4116 ; SSE2-NEXT: por %xmm10, %xmm2 4117 ; SSE2-NEXT: pand %xmm8, %xmm3 4118 ; SSE2-NEXT: pandn %xmm7, %xmm8 4119 ; SSE2-NEXT: por %xmm8, %xmm3 4120 ; SSE2-NEXT: retq 4121 ; 4122 ; SSE4-LABEL: test112: 4123 ; SSE4: # BB#0: # %entry 4124 ; SSE4-NEXT: pmaxuw %xmm4, %xmm0 4125 ; SSE4-NEXT: pmaxuw %xmm5, %xmm1 4126 ; SSE4-NEXT: pmaxuw %xmm6, %xmm2 4127 ; SSE4-NEXT: pmaxuw %xmm7, %xmm3 4128 ; SSE4-NEXT: retq 4129 ; 4130 ; AVX1-LABEL: test112: 4131 ; AVX1: # BB#0: # %entry 4132 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4133 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4134 ; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 4135 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 4136 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4137 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4138 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4139 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 4140 ; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 4141 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4142 ; AVX1-NEXT: retq 4143 ; 4144 ; AVX2-LABEL: test112: 4145 ; AVX2: # BB#0: # %entry 4146 ; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 4147 ; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 4148 ; AVX2-NEXT: retq 4149 ; 4150 ; AVX512BW-LABEL: test112: 4151 ; AVX512BW: # BB#0: # %entry 4152 ; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 4153 ; AVX512BW-NEXT: retq 4154 entry: 4155 %cmp = icmp uge <32 x i16> %a, %b 4156 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 4157 ret <32 x i16> %sel 4158 } 4159 4160 define <16 x i32> @test113(<16 x i32> %a, <16 x i32> %b) { 4161 ; SSE2-LABEL: test113: 4162 ; SSE2: # BB#0: # %entry 4163 ; SSE2-NEXT: movdqa %xmm7, %xmm8 4164 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm8 4165 ; SSE2-NEXT: movdqa %xmm6, %xmm9 4166 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm9 4167 ; SSE2-NEXT: movdqa %xmm5, %xmm10 4168 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm10 4169 ; SSE2-NEXT: movdqa %xmm4, %xmm11 4170 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm11 4171 ; SSE2-NEXT: pand %xmm11, %xmm0 4172 ; SSE2-NEXT: pandn %xmm4, %xmm11 4173 ; SSE2-NEXT: por %xmm11, %xmm0 4174 ; SSE2-NEXT: pand %xmm10, %xmm1 4175 ; SSE2-NEXT: pandn %xmm5, %xmm10 4176 ; SSE2-NEXT: por %xmm10, %xmm1 4177 ; SSE2-NEXT: pand %xmm9, %xmm2 4178 ; SSE2-NEXT: pandn %xmm6, %xmm9 4179 ; SSE2-NEXT: por %xmm9, %xmm2 4180 ; SSE2-NEXT: pand %xmm8, %xmm3 4181 ; SSE2-NEXT: pandn %xmm7, %xmm8 4182 ; SSE2-NEXT: por %xmm8, %xmm3 4183 ; SSE2-NEXT: retq 4184 ; 4185 ; SSE4-LABEL: test113: 4186 ; SSE4: # BB#0: # %entry 4187 ; SSE4-NEXT: pminsd %xmm4, %xmm0 4188 ; SSE4-NEXT: pminsd %xmm5, %xmm1 4189 ; SSE4-NEXT: pminsd %xmm6, %xmm2 4190 ; SSE4-NEXT: pminsd %xmm7, %xmm3 4191 ; SSE4-NEXT: retq 4192 ; 4193 ; AVX1-LABEL: test113: 4194 ; AVX1: # BB#0: # %entry 4195 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4196 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4197 ; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 4198 ; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 4199 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4200 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4201 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4202 ; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 4203 ; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 4204 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4205 ; AVX1-NEXT: retq 4206 ; 4207 ; AVX2-LABEL: test113: 4208 ; AVX2: # BB#0: # %entry 4209 ; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 4210 ; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 4211 ; AVX2-NEXT: retq 4212 ; 4213 ; AVX512F-LABEL: test113: 4214 ; AVX512F: # BB#0: # %entry 4215 ; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0 4216 ; AVX512F-NEXT: retq 4217 entry: 4218 %cmp = icmp slt <16 x i32> %a, %b 4219 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4220 ret <16 x i32> %sel 4221 } 4222 4223 define <16 x i32> @test114(<16 x i32> %a, <16 x i32> %b) { 4224 ; SSE2-LABEL: test114: 4225 ; SSE2: # BB#0: # %entry 4226 ; SSE2-NEXT: movdqa %xmm3, %xmm8 4227 ; SSE2-NEXT: movdqa %xmm2, %xmm9 4228 ; SSE2-NEXT: movdqa %xmm8, %xmm12 4229 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm12 4230 ; SSE2-NEXT: pcmpeqd %xmm13, %xmm13 4231 ; SSE2-NEXT: movdqa %xmm12, %xmm3 4232 ; SSE2-NEXT: pxor %xmm13, %xmm3 4233 ; SSE2-NEXT: movdqa %xmm9, %xmm14 4234 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm14 4235 ; SSE2-NEXT: movdqa %xmm14, %xmm2 4236 ; SSE2-NEXT: pxor %xmm13, %xmm2 4237 ; SSE2-NEXT: movdqa %xmm1, %xmm15 4238 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm15 4239 ; SSE2-NEXT: movdqa %xmm15, %xmm10 4240 ; SSE2-NEXT: pxor %xmm13, %xmm10 4241 ; SSE2-NEXT: movdqa %xmm0, %xmm11 4242 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm11 4243 ; SSE2-NEXT: pxor %xmm11, %xmm13 4244 ; SSE2-NEXT: pandn %xmm0, %xmm11 4245 ; SSE2-NEXT: pandn %xmm4, %xmm13 4246 ; SSE2-NEXT: por %xmm13, %xmm11 4247 ; SSE2-NEXT: pandn %xmm1, %xmm15 4248 ; SSE2-NEXT: pandn %xmm5, %xmm10 4249 ; SSE2-NEXT: por %xmm15, %xmm10 4250 ; SSE2-NEXT: pandn %xmm9, %xmm14 4251 ; SSE2-NEXT: pandn %xmm6, %xmm2 4252 ; SSE2-NEXT: por %xmm14, %xmm2 4253 ; SSE2-NEXT: pandn %xmm8, %xmm12 4254 ; SSE2-NEXT: pandn %xmm7, %xmm3 4255 ; SSE2-NEXT: por %xmm12, %xmm3 4256 ; SSE2-NEXT: movdqa %xmm11, %xmm0 4257 ; SSE2-NEXT: movdqa %xmm10, %xmm1 4258 ; SSE2-NEXT: retq 4259 ; 4260 ; SSE4-LABEL: test114: 4261 ; SSE4: # BB#0: # %entry 4262 ; SSE4-NEXT: pminsd %xmm4, %xmm0 4263 ; SSE4-NEXT: pminsd %xmm5, %xmm1 4264 ; SSE4-NEXT: pminsd %xmm6, %xmm2 4265 ; SSE4-NEXT: pminsd %xmm7, %xmm3 4266 ; SSE4-NEXT: retq 4267 ; 4268 ; AVX1-LABEL: test114: 4269 ; AVX1: # BB#0: # %entry 4270 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4271 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4272 ; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 4273 ; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 4274 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4275 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4276 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4277 ; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 4278 ; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 4279 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4280 ; AVX1-NEXT: retq 4281 ; 4282 ; AVX2-LABEL: test114: 4283 ; AVX2: # BB#0: # %entry 4284 ; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 4285 ; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 4286 ; AVX2-NEXT: retq 4287 ; 4288 ; AVX512F-LABEL: test114: 4289 ; AVX512F: # BB#0: # %entry 4290 ; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0 4291 ; AVX512F-NEXT: retq 4292 entry: 4293 %cmp = icmp sle <16 x i32> %a, %b 4294 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4295 ret <16 x i32> %sel 4296 } 4297 4298 define <16 x i32> @test115(<16 x i32> %a, <16 x i32> %b) { 4299 ; SSE2-LABEL: test115: 4300 ; SSE2: # BB#0: # %entry 4301 ; SSE2-NEXT: movdqa %xmm3, %xmm8 4302 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm3 4303 ; SSE2-NEXT: movdqa %xmm2, %xmm9 4304 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm9 4305 ; SSE2-NEXT: movdqa %xmm1, %xmm10 4306 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm10 4307 ; SSE2-NEXT: movdqa %xmm0, %xmm11 4308 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm11 4309 ; SSE2-NEXT: pand %xmm11, %xmm0 4310 ; SSE2-NEXT: pandn %xmm4, %xmm11 4311 ; SSE2-NEXT: por %xmm0, %xmm11 4312 ; SSE2-NEXT: pand %xmm10, %xmm1 4313 ; SSE2-NEXT: pandn %xmm5, %xmm10 4314 ; SSE2-NEXT: por %xmm1, %xmm10 4315 ; SSE2-NEXT: pand %xmm9, %xmm2 4316 ; SSE2-NEXT: pandn %xmm6, %xmm9 4317 ; SSE2-NEXT: por %xmm2, %xmm9 4318 ; SSE2-NEXT: pand %xmm3, %xmm8 4319 ; SSE2-NEXT: pandn %xmm7, %xmm3 4320 ; SSE2-NEXT: por %xmm8, %xmm3 4321 ; SSE2-NEXT: movdqa %xmm11, %xmm0 4322 ; SSE2-NEXT: movdqa %xmm10, %xmm1 4323 ; SSE2-NEXT: movdqa %xmm9, %xmm2 4324 ; SSE2-NEXT: retq 4325 ; 4326 ; SSE4-LABEL: test115: 4327 ; SSE4: # BB#0: # %entry 4328 ; SSE4-NEXT: pmaxsd %xmm4, %xmm0 4329 ; SSE4-NEXT: pmaxsd %xmm5, %xmm1 4330 ; SSE4-NEXT: pmaxsd %xmm6, %xmm2 4331 ; SSE4-NEXT: pmaxsd %xmm7, %xmm3 4332 ; SSE4-NEXT: retq 4333 ; 4334 ; AVX1-LABEL: test115: 4335 ; AVX1: # BB#0: # %entry 4336 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4337 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4338 ; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 4339 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 4340 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4341 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4342 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4343 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 4344 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 4345 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4346 ; AVX1-NEXT: retq 4347 ; 4348 ; AVX2-LABEL: test115: 4349 ; AVX2: # BB#0: # %entry 4350 ; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 4351 ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 4352 ; AVX2-NEXT: retq 4353 ; 4354 ; AVX512F-LABEL: test115: 4355 ; AVX512F: # BB#0: # %entry 4356 ; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 4357 ; AVX512F-NEXT: retq 4358 entry: 4359 %cmp = icmp sgt <16 x i32> %a, %b 4360 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4361 ret <16 x i32> %sel 4362 } 4363 4364 define <16 x i32> @test116(<16 x i32> %a, <16 x i32> %b) { 4365 ; SSE2-LABEL: test116: 4366 ; SSE2: # BB#0: # %entry 4367 ; SSE2-NEXT: movdqa %xmm3, %xmm8 4368 ; SSE2-NEXT: movdqa %xmm2, %xmm9 4369 ; SSE2-NEXT: movdqa %xmm0, %xmm10 4370 ; SSE2-NEXT: movdqa %xmm7, %xmm12 4371 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm12 4372 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 4373 ; SSE2-NEXT: movdqa %xmm12, %xmm3 4374 ; SSE2-NEXT: pxor %xmm0, %xmm3 4375 ; SSE2-NEXT: movdqa %xmm6, %xmm13 4376 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm13 4377 ; SSE2-NEXT: movdqa %xmm13, %xmm2 4378 ; SSE2-NEXT: pxor %xmm0, %xmm2 4379 ; SSE2-NEXT: movdqa %xmm5, %xmm14 4380 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm14 4381 ; SSE2-NEXT: movdqa %xmm14, %xmm11 4382 ; SSE2-NEXT: pxor %xmm0, %xmm11 4383 ; SSE2-NEXT: movdqa %xmm4, %xmm15 4384 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm15 4385 ; SSE2-NEXT: pxor %xmm15, %xmm0 4386 ; SSE2-NEXT: pandn %xmm10, %xmm15 4387 ; SSE2-NEXT: pandn %xmm4, %xmm0 4388 ; SSE2-NEXT: por %xmm15, %xmm0 4389 ; SSE2-NEXT: pandn %xmm1, %xmm14 4390 ; SSE2-NEXT: pandn %xmm5, %xmm11 4391 ; SSE2-NEXT: por %xmm14, %xmm11 4392 ; SSE2-NEXT: pandn %xmm9, %xmm13 4393 ; SSE2-NEXT: pandn %xmm6, %xmm2 4394 ; SSE2-NEXT: por %xmm13, %xmm2 4395 ; SSE2-NEXT: pandn %xmm8, %xmm12 4396 ; SSE2-NEXT: pandn %xmm7, %xmm3 4397 ; SSE2-NEXT: por %xmm12, %xmm3 4398 ; SSE2-NEXT: movdqa %xmm11, %xmm1 4399 ; SSE2-NEXT: retq 4400 ; 4401 ; SSE4-LABEL: test116: 4402 ; SSE4: # BB#0: # %entry 4403 ; SSE4-NEXT: pmaxsd %xmm4, %xmm0 4404 ; SSE4-NEXT: pmaxsd %xmm5, %xmm1 4405 ; SSE4-NEXT: pmaxsd %xmm6, %xmm2 4406 ; SSE4-NEXT: pmaxsd %xmm7, %xmm3 4407 ; SSE4-NEXT: retq 4408 ; 4409 ; AVX1-LABEL: test116: 4410 ; AVX1: # BB#0: # %entry 4411 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4412 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4413 ; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 4414 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 4415 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4416 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4417 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4418 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 4419 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 4420 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4421 ; AVX1-NEXT: retq 4422 ; 4423 ; AVX2-LABEL: test116: 4424 ; AVX2: # BB#0: # %entry 4425 ; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 4426 ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 4427 ; AVX2-NEXT: retq 4428 ; 4429 ; AVX512F-LABEL: test116: 4430 ; AVX512F: # BB#0: # %entry 4431 ; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 4432 ; AVX512F-NEXT: retq 4433 entry: 4434 %cmp = icmp sge <16 x i32> %a, %b 4435 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4436 ret <16 x i32> %sel 4437 } 4438 4439 define <16 x i32> @test117(<16 x i32> %a, <16 x i32> %b) { 4440 ; SSE2-LABEL: test117: 4441 ; SSE2: # BB#0: # %entry 4442 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648] 4443 ; SSE2-NEXT: movdqa %xmm3, %xmm9 4444 ; SSE2-NEXT: pxor %xmm10, %xmm9 4445 ; SSE2-NEXT: movdqa %xmm7, %xmm8 4446 ; SSE2-NEXT: pxor %xmm10, %xmm8 4447 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm8 4448 ; SSE2-NEXT: movdqa %xmm2, %xmm11 4449 ; SSE2-NEXT: pxor %xmm10, %xmm11 4450 ; SSE2-NEXT: movdqa %xmm6, %xmm9 4451 ; SSE2-NEXT: pxor %xmm10, %xmm9 4452 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm9 4453 ; SSE2-NEXT: movdqa %xmm1, %xmm11 4454 ; SSE2-NEXT: pxor %xmm10, %xmm11 4455 ; SSE2-NEXT: movdqa %xmm5, %xmm12 4456 ; SSE2-NEXT: pxor %xmm10, %xmm12 4457 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm12 4458 ; SSE2-NEXT: movdqa %xmm0, %xmm11 4459 ; SSE2-NEXT: pxor %xmm10, %xmm11 4460 ; SSE2-NEXT: pxor %xmm4, %xmm10 4461 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm10 4462 ; SSE2-NEXT: pand %xmm10, %xmm0 4463 ; SSE2-NEXT: pandn %xmm4, %xmm10 4464 ; SSE2-NEXT: por %xmm10, %xmm0 4465 ; SSE2-NEXT: pand %xmm12, %xmm1 4466 ; SSE2-NEXT: pandn %xmm5, %xmm12 4467 ; SSE2-NEXT: por %xmm12, %xmm1 4468 ; SSE2-NEXT: pand %xmm9, %xmm2 4469 ; SSE2-NEXT: pandn %xmm6, %xmm9 4470 ; SSE2-NEXT: por %xmm9, %xmm2 4471 ; SSE2-NEXT: pand %xmm8, %xmm3 4472 ; SSE2-NEXT: pandn %xmm7, %xmm8 4473 ; SSE2-NEXT: por %xmm8, %xmm3 4474 ; SSE2-NEXT: retq 4475 ; 4476 ; SSE4-LABEL: test117: 4477 ; SSE4: # BB#0: # %entry 4478 ; SSE4-NEXT: pminud %xmm4, %xmm0 4479 ; SSE4-NEXT: pminud %xmm5, %xmm1 4480 ; SSE4-NEXT: pminud %xmm6, %xmm2 4481 ; SSE4-NEXT: pminud %xmm7, %xmm3 4482 ; SSE4-NEXT: retq 4483 ; 4484 ; AVX1-LABEL: test117: 4485 ; AVX1: # BB#0: # %entry 4486 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4487 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4488 ; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 4489 ; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 4490 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4491 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4492 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4493 ; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 4494 ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 4495 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4496 ; AVX1-NEXT: retq 4497 ; 4498 ; AVX2-LABEL: test117: 4499 ; AVX2: # BB#0: # %entry 4500 ; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 4501 ; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 4502 ; AVX2-NEXT: retq 4503 ; 4504 ; AVX512F-LABEL: test117: 4505 ; AVX512F: # BB#0: # %entry 4506 ; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0 4507 ; AVX512F-NEXT: retq 4508 entry: 4509 %cmp = icmp ult <16 x i32> %a, %b 4510 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4511 ret <16 x i32> %sel 4512 } 4513 4514 define <16 x i32> @test118(<16 x i32> %a, <16 x i32> %b) { 4515 ; SSE2-LABEL: test118: 4516 ; SSE2: # BB#0: # %entry 4517 ; SSE2-NEXT: movdqa %xmm0, %xmm10 4518 ; SSE2-NEXT: movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648] 4519 ; SSE2-NEXT: movdqa %xmm7, %xmm0 4520 ; SSE2-NEXT: pxor %xmm14, %xmm0 4521 ; SSE2-NEXT: movdqa %xmm3, %xmm12 4522 ; SSE2-NEXT: pxor %xmm14, %xmm12 4523 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm12 4524 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 4525 ; SSE2-NEXT: movdqa %xmm12, %xmm8 4526 ; SSE2-NEXT: pxor %xmm0, %xmm8 4527 ; SSE2-NEXT: movdqa %xmm6, %xmm9 4528 ; SSE2-NEXT: pxor %xmm14, %xmm9 4529 ; SSE2-NEXT: movdqa %xmm2, %xmm13 4530 ; SSE2-NEXT: pxor %xmm14, %xmm13 4531 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm13 4532 ; SSE2-NEXT: movdqa %xmm13, %xmm9 4533 ; SSE2-NEXT: pxor %xmm0, %xmm9 4534 ; SSE2-NEXT: movdqa %xmm5, %xmm11 4535 ; SSE2-NEXT: pxor %xmm14, %xmm11 4536 ; SSE2-NEXT: movdqa %xmm1, %xmm15 4537 ; SSE2-NEXT: pxor %xmm14, %xmm15 4538 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 4539 ; SSE2-NEXT: movdqa %xmm4, %xmm11 4540 ; SSE2-NEXT: pxor %xmm14, %xmm11 4541 ; SSE2-NEXT: pxor %xmm10, %xmm14 4542 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 4543 ; SSE2-NEXT: movdqa %xmm15, %xmm11 4544 ; SSE2-NEXT: pxor %xmm0, %xmm11 4545 ; SSE2-NEXT: pxor %xmm14, %xmm0 4546 ; SSE2-NEXT: pandn %xmm10, %xmm14 4547 ; SSE2-NEXT: pandn %xmm4, %xmm0 4548 ; SSE2-NEXT: por %xmm14, %xmm0 4549 ; SSE2-NEXT: pandn %xmm1, %xmm15 4550 ; SSE2-NEXT: pandn %xmm5, %xmm11 4551 ; SSE2-NEXT: por %xmm15, %xmm11 4552 ; SSE2-NEXT: pandn %xmm2, %xmm13 4553 ; SSE2-NEXT: pandn %xmm6, %xmm9 4554 ; SSE2-NEXT: por %xmm13, %xmm9 4555 ; SSE2-NEXT: pandn %xmm3, %xmm12 4556 ; SSE2-NEXT: pandn %xmm7, %xmm8 4557 ; SSE2-NEXT: por %xmm12, %xmm8 4558 ; SSE2-NEXT: movdqa %xmm11, %xmm1 4559 ; SSE2-NEXT: movdqa %xmm9, %xmm2 4560 ; SSE2-NEXT: movdqa %xmm8, %xmm3 4561 ; SSE2-NEXT: retq 4562 ; 4563 ; SSE4-LABEL: test118: 4564 ; SSE4: # BB#0: # %entry 4565 ; SSE4-NEXT: pminud %xmm4, %xmm0 4566 ; SSE4-NEXT: pminud %xmm5, %xmm1 4567 ; SSE4-NEXT: pminud %xmm6, %xmm2 4568 ; SSE4-NEXT: pminud %xmm7, %xmm3 4569 ; SSE4-NEXT: retq 4570 ; 4571 ; AVX1-LABEL: test118: 4572 ; AVX1: # BB#0: # %entry 4573 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4574 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4575 ; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 4576 ; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 4577 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4578 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4579 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4580 ; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 4581 ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 4582 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4583 ; AVX1-NEXT: retq 4584 ; 4585 ; AVX2-LABEL: test118: 4586 ; AVX2: # BB#0: # %entry 4587 ; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 4588 ; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 4589 ; AVX2-NEXT: retq 4590 ; 4591 ; AVX512F-LABEL: test118: 4592 ; AVX512F: # BB#0: # %entry 4593 ; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0 4594 ; AVX512F-NEXT: retq 4595 entry: 4596 %cmp = icmp ule <16 x i32> %a, %b 4597 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4598 ret <16 x i32> %sel 4599 } 4600 4601 define <16 x i32> @test119(<16 x i32> %a, <16 x i32> %b) { 4602 ; SSE2-LABEL: test119: 4603 ; SSE2: # BB#0: # %entry 4604 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648] 4605 ; SSE2-NEXT: movdqa %xmm7, %xmm9 4606 ; SSE2-NEXT: pxor %xmm11, %xmm9 4607 ; SSE2-NEXT: movdqa %xmm3, %xmm8 4608 ; SSE2-NEXT: pxor %xmm11, %xmm8 4609 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm8 4610 ; SSE2-NEXT: movdqa %xmm6, %xmm10 4611 ; SSE2-NEXT: pxor %xmm11, %xmm10 4612 ; SSE2-NEXT: movdqa %xmm2, %xmm9 4613 ; SSE2-NEXT: pxor %xmm11, %xmm9 4614 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm9 4615 ; SSE2-NEXT: movdqa %xmm5, %xmm12 4616 ; SSE2-NEXT: pxor %xmm11, %xmm12 4617 ; SSE2-NEXT: movdqa %xmm1, %xmm10 4618 ; SSE2-NEXT: pxor %xmm11, %xmm10 4619 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm10 4620 ; SSE2-NEXT: movdqa %xmm4, %xmm12 4621 ; SSE2-NEXT: pxor %xmm11, %xmm12 4622 ; SSE2-NEXT: pxor %xmm0, %xmm11 4623 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm11 4624 ; SSE2-NEXT: pand %xmm11, %xmm0 4625 ; SSE2-NEXT: pandn %xmm4, %xmm11 4626 ; SSE2-NEXT: por %xmm11, %xmm0 4627 ; SSE2-NEXT: pand %xmm10, %xmm1 4628 ; SSE2-NEXT: pandn %xmm5, %xmm10 4629 ; SSE2-NEXT: por %xmm1, %xmm10 4630 ; SSE2-NEXT: pand %xmm9, %xmm2 4631 ; SSE2-NEXT: pandn %xmm6, %xmm9 4632 ; SSE2-NEXT: por %xmm2, %xmm9 4633 ; SSE2-NEXT: pand %xmm8, %xmm3 4634 ; SSE2-NEXT: pandn %xmm7, %xmm8 4635 ; SSE2-NEXT: por %xmm3, %xmm8 4636 ; SSE2-NEXT: movdqa %xmm10, %xmm1 4637 ; SSE2-NEXT: movdqa %xmm9, %xmm2 4638 ; SSE2-NEXT: movdqa %xmm8, %xmm3 4639 ; SSE2-NEXT: retq 4640 ; 4641 ; SSE4-LABEL: test119: 4642 ; SSE4: # BB#0: # %entry 4643 ; SSE4-NEXT: pmaxud %xmm4, %xmm0 4644 ; SSE4-NEXT: pmaxud %xmm5, %xmm1 4645 ; SSE4-NEXT: pmaxud %xmm6, %xmm2 4646 ; SSE4-NEXT: pmaxud %xmm7, %xmm3 4647 ; SSE4-NEXT: retq 4648 ; 4649 ; AVX1-LABEL: test119: 4650 ; AVX1: # BB#0: # %entry 4651 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4652 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4653 ; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 4654 ; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 4655 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4656 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4657 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4658 ; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 4659 ; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 4660 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4661 ; AVX1-NEXT: retq 4662 ; 4663 ; AVX2-LABEL: test119: 4664 ; AVX2: # BB#0: # %entry 4665 ; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 4666 ; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 4667 ; AVX2-NEXT: retq 4668 ; 4669 ; AVX512F-LABEL: test119: 4670 ; AVX512F: # BB#0: # %entry 4671 ; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 4672 ; AVX512F-NEXT: retq 4673 entry: 4674 %cmp = icmp ugt <16 x i32> %a, %b 4675 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4676 ret <16 x i32> %sel 4677 } 4678 4679 define <16 x i32> @test120(<16 x i32> %a, <16 x i32> %b) { 4680 ; SSE2-LABEL: test120: 4681 ; SSE2: # BB#0: # %entry 4682 ; SSE2-NEXT: movdqa %xmm0, %xmm10 4683 ; SSE2-NEXT: movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648] 4684 ; SSE2-NEXT: movdqa %xmm3, %xmm0 4685 ; SSE2-NEXT: pxor %xmm14, %xmm0 4686 ; SSE2-NEXT: movdqa %xmm7, %xmm12 4687 ; SSE2-NEXT: pxor %xmm14, %xmm12 4688 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm12 4689 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 4690 ; SSE2-NEXT: movdqa %xmm12, %xmm8 4691 ; SSE2-NEXT: pxor %xmm0, %xmm8 4692 ; SSE2-NEXT: movdqa %xmm2, %xmm9 4693 ; SSE2-NEXT: pxor %xmm14, %xmm9 4694 ; SSE2-NEXT: movdqa %xmm6, %xmm13 4695 ; SSE2-NEXT: pxor %xmm14, %xmm13 4696 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm13 4697 ; SSE2-NEXT: movdqa %xmm13, %xmm9 4698 ; SSE2-NEXT: pxor %xmm0, %xmm9 4699 ; SSE2-NEXT: movdqa %xmm1, %xmm11 4700 ; SSE2-NEXT: pxor %xmm14, %xmm11 4701 ; SSE2-NEXT: movdqa %xmm5, %xmm15 4702 ; SSE2-NEXT: pxor %xmm14, %xmm15 4703 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 4704 ; SSE2-NEXT: movdqa %xmm10, %xmm11 4705 ; SSE2-NEXT: pxor %xmm14, %xmm11 4706 ; SSE2-NEXT: pxor %xmm4, %xmm14 4707 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 4708 ; SSE2-NEXT: movdqa %xmm15, %xmm11 4709 ; SSE2-NEXT: pxor %xmm0, %xmm11 4710 ; SSE2-NEXT: pxor %xmm14, %xmm0 4711 ; SSE2-NEXT: pandn %xmm10, %xmm14 4712 ; SSE2-NEXT: pandn %xmm4, %xmm0 4713 ; SSE2-NEXT: por %xmm14, %xmm0 4714 ; SSE2-NEXT: pandn %xmm1, %xmm15 4715 ; SSE2-NEXT: pandn %xmm5, %xmm11 4716 ; SSE2-NEXT: por %xmm15, %xmm11 4717 ; SSE2-NEXT: pandn %xmm2, %xmm13 4718 ; SSE2-NEXT: pandn %xmm6, %xmm9 4719 ; SSE2-NEXT: por %xmm13, %xmm9 4720 ; SSE2-NEXT: pandn %xmm3, %xmm12 4721 ; SSE2-NEXT: pandn %xmm7, %xmm8 4722 ; SSE2-NEXT: por %xmm12, %xmm8 4723 ; SSE2-NEXT: movdqa %xmm11, %xmm1 4724 ; SSE2-NEXT: movdqa %xmm9, %xmm2 4725 ; SSE2-NEXT: movdqa %xmm8, %xmm3 4726 ; SSE2-NEXT: retq 4727 ; 4728 ; SSE4-LABEL: test120: 4729 ; SSE4: # BB#0: # %entry 4730 ; SSE4-NEXT: pmaxud %xmm4, %xmm0 4731 ; SSE4-NEXT: pmaxud %xmm5, %xmm1 4732 ; SSE4-NEXT: pmaxud %xmm6, %xmm2 4733 ; SSE4-NEXT: pmaxud %xmm7, %xmm3 4734 ; SSE4-NEXT: retq 4735 ; 4736 ; AVX1-LABEL: test120: 4737 ; AVX1: # BB#0: # %entry 4738 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4739 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4740 ; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 4741 ; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 4742 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4743 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4744 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4745 ; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 4746 ; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 4747 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4748 ; AVX1-NEXT: retq 4749 ; 4750 ; AVX2-LABEL: test120: 4751 ; AVX2: # BB#0: # %entry 4752 ; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 4753 ; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 4754 ; AVX2-NEXT: retq 4755 ; 4756 ; AVX512F-LABEL: test120: 4757 ; AVX512F: # BB#0: # %entry 4758 ; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 4759 ; AVX512F-NEXT: retq 4760 entry: 4761 %cmp = icmp uge <16 x i32> %a, %b 4762 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4763 ret <16 x i32> %sel 4764 } 4765 4766 define <8 x i64> @test121(<8 x i64> %a, <8 x i64> %b) { 4767 ; SSE2-LABEL: test121: 4768 ; SSE2: # BB#0: # %entry 4769 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,0,2147483648,0] 4770 ; SSE2-NEXT: movdqa %xmm3, %xmm8 4771 ; SSE2-NEXT: pxor %xmm9, %xmm8 4772 ; SSE2-NEXT: movdqa %xmm7, %xmm10 4773 ; SSE2-NEXT: pxor %xmm9, %xmm10 4774 ; SSE2-NEXT: movdqa %xmm10, %xmm11 4775 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 4776 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4777 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm10 4778 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 4779 ; SSE2-NEXT: pand %xmm12, %xmm10 4780 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3] 4781 ; SSE2-NEXT: por %xmm10, %xmm8 4782 ; SSE2-NEXT: movdqa %xmm2, %xmm10 4783 ; SSE2-NEXT: pxor %xmm9, %xmm10 4784 ; SSE2-NEXT: movdqa %xmm6, %xmm11 4785 ; SSE2-NEXT: pxor %xmm9, %xmm11 4786 ; SSE2-NEXT: movdqa %xmm11, %xmm12 4787 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm12 4788 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 4789 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm11 4790 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3] 4791 ; SSE2-NEXT: pand %xmm13, %xmm11 4792 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3] 4793 ; SSE2-NEXT: por %xmm11, %xmm10 4794 ; SSE2-NEXT: movdqa %xmm1, %xmm11 4795 ; SSE2-NEXT: pxor %xmm9, %xmm11 4796 ; SSE2-NEXT: movdqa %xmm5, %xmm12 4797 ; SSE2-NEXT: pxor %xmm9, %xmm12 4798 ; SSE2-NEXT: movdqa %xmm12, %xmm13 4799 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 4800 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 4801 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm12 4802 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3] 4803 ; SSE2-NEXT: pand %xmm14, %xmm11 4804 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3] 4805 ; SSE2-NEXT: por %xmm11, %xmm12 4806 ; SSE2-NEXT: movdqa %xmm0, %xmm11 4807 ; SSE2-NEXT: pxor %xmm9, %xmm11 4808 ; SSE2-NEXT: pxor %xmm4, %xmm9 4809 ; SSE2-NEXT: movdqa %xmm9, %xmm13 4810 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 4811 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 4812 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm9 4813 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 4814 ; SSE2-NEXT: pand %xmm14, %xmm9 4815 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 4816 ; SSE2-NEXT: por %xmm9, %xmm11 4817 ; SSE2-NEXT: pand %xmm11, %xmm0 4818 ; SSE2-NEXT: pandn %xmm4, %xmm11 4819 ; SSE2-NEXT: por %xmm11, %xmm0 4820 ; SSE2-NEXT: pand %xmm12, %xmm1 4821 ; SSE2-NEXT: pandn %xmm5, %xmm12 4822 ; SSE2-NEXT: por %xmm12, %xmm1 4823 ; SSE2-NEXT: pand %xmm10, %xmm2 4824 ; SSE2-NEXT: pandn %xmm6, %xmm10 4825 ; SSE2-NEXT: por %xmm10, %xmm2 4826 ; SSE2-NEXT: pand %xmm8, %xmm3 4827 ; SSE2-NEXT: pandn %xmm7, %xmm8 4828 ; SSE2-NEXT: por %xmm8, %xmm3 4829 ; SSE2-NEXT: retq 4830 ; 4831 ; SSE4-LABEL: test121: 4832 ; SSE4: # BB#0: # %entry 4833 ; SSE4-NEXT: movdqa %xmm0, %xmm8 4834 ; SSE4-NEXT: movdqa %xmm7, %xmm9 4835 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm9 4836 ; SSE4-NEXT: movdqa %xmm6, %xmm10 4837 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm10 4838 ; SSE4-NEXT: movdqa %xmm5, %xmm11 4839 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm11 4840 ; SSE4-NEXT: movdqa %xmm4, %xmm0 4841 ; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 4842 ; SSE4-NEXT: blendvpd %xmm8, %xmm4 4843 ; SSE4-NEXT: movdqa %xmm11, %xmm0 4844 ; SSE4-NEXT: blendvpd %xmm1, %xmm5 4845 ; SSE4-NEXT: movdqa %xmm10, %xmm0 4846 ; SSE4-NEXT: blendvpd %xmm2, %xmm6 4847 ; SSE4-NEXT: movdqa %xmm9, %xmm0 4848 ; SSE4-NEXT: blendvpd %xmm3, %xmm7 4849 ; SSE4-NEXT: movapd %xmm4, %xmm0 4850 ; SSE4-NEXT: movapd %xmm5, %xmm1 4851 ; SSE4-NEXT: movapd %xmm6, %xmm2 4852 ; SSE4-NEXT: movapd %xmm7, %xmm3 4853 ; SSE4-NEXT: retq 4854 ; 4855 ; AVX1-LABEL: test121: 4856 ; AVX1: # BB#0: # %entry 4857 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4858 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5 4859 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4860 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm5 4861 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4862 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4863 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 4864 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 4865 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm6 4866 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5 4867 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 4868 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 4869 ; AVX1-NEXT: retq 4870 ; 4871 ; AVX2-LABEL: test121: 4872 ; AVX2: # BB#0: # %entry 4873 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm4 4874 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm5 4875 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 4876 ; AVX2-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 4877 ; AVX2-NEXT: retq 4878 ; 4879 ; AVX512F-LABEL: test121: 4880 ; AVX512F: # BB#0: # %entry 4881 ; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 4882 ; AVX512F-NEXT: retq 4883 entry: 4884 %cmp = icmp slt <8 x i64> %a, %b 4885 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4886 ret <8 x i64> %sel 4887 } 4888 4889 define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) { 4890 ; SSE2-LABEL: test122: 4891 ; SSE2: # BB#0: # %entry 4892 ; SSE2-NEXT: movdqa %xmm7, %xmm8 4893 ; SSE2-NEXT: movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill 4894 ; SSE2-NEXT: movdqa %xmm3, %xmm7 4895 ; SSE2-NEXT: movdqa %xmm2, %xmm3 4896 ; SSE2-NEXT: movdqa %xmm1, %xmm2 4897 ; SSE2-NEXT: movdqa %xmm0, %xmm9 4898 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0] 4899 ; SSE2-NEXT: pxor %xmm10, %xmm8 4900 ; SSE2-NEXT: movdqa %xmm7, %xmm0 4901 ; SSE2-NEXT: pxor %xmm10, %xmm0 4902 ; SSE2-NEXT: movdqa %xmm0, %xmm11 4903 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 4904 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4905 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 4906 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 4907 ; SSE2-NEXT: pand %xmm12, %xmm0 4908 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 4909 ; SSE2-NEXT: por %xmm0, %xmm12 4910 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 4911 ; SSE2-NEXT: movdqa %xmm12, %xmm8 4912 ; SSE2-NEXT: pxor %xmm1, %xmm8 4913 ; SSE2-NEXT: movdqa %xmm6, %xmm11 4914 ; SSE2-NEXT: pxor %xmm10, %xmm11 4915 ; SSE2-NEXT: movdqa %xmm3, %xmm13 4916 ; SSE2-NEXT: pxor %xmm10, %xmm13 4917 ; SSE2-NEXT: movdqa %xmm13, %xmm14 4918 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 4919 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 4920 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 4921 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 4922 ; SSE2-NEXT: pand %xmm15, %xmm11 4923 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 4924 ; SSE2-NEXT: por %xmm11, %xmm13 4925 ; SSE2-NEXT: movdqa %xmm5, %xmm11 4926 ; SSE2-NEXT: pxor %xmm10, %xmm11 4927 ; SSE2-NEXT: movdqa %xmm2, %xmm14 4928 ; SSE2-NEXT: pxor %xmm10, %xmm14 4929 ; SSE2-NEXT: movdqa %xmm14, %xmm15 4930 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 4931 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 4932 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 4933 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 4934 ; SSE2-NEXT: pand %xmm11, %xmm14 4935 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 4936 ; SSE2-NEXT: por %xmm14, %xmm15 4937 ; SSE2-NEXT: movdqa %xmm4, %xmm11 4938 ; SSE2-NEXT: pxor %xmm10, %xmm11 4939 ; SSE2-NEXT: pxor %xmm9, %xmm10 4940 ; SSE2-NEXT: movdqa %xmm10, %xmm14 4941 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 4942 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 4943 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 4944 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 4945 ; SSE2-NEXT: pand %xmm11, %xmm0 4946 ; SSE2-NEXT: movdqa %xmm13, %xmm10 4947 ; SSE2-NEXT: pxor %xmm1, %xmm10 4948 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 4949 ; SSE2-NEXT: por %xmm0, %xmm14 4950 ; SSE2-NEXT: movdqa %xmm15, %xmm11 4951 ; SSE2-NEXT: pxor %xmm1, %xmm11 4952 ; SSE2-NEXT: pxor %xmm14, %xmm1 4953 ; SSE2-NEXT: pandn %xmm9, %xmm14 4954 ; SSE2-NEXT: pandn %xmm4, %xmm1 4955 ; SSE2-NEXT: por %xmm14, %xmm1 4956 ; SSE2-NEXT: pandn %xmm2, %xmm15 4957 ; SSE2-NEXT: pandn %xmm5, %xmm11 4958 ; SSE2-NEXT: por %xmm15, %xmm11 4959 ; SSE2-NEXT: pandn %xmm3, %xmm13 4960 ; SSE2-NEXT: pandn %xmm6, %xmm10 4961 ; SSE2-NEXT: por %xmm13, %xmm10 4962 ; SSE2-NEXT: pandn %xmm7, %xmm12 4963 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload 4964 ; SSE2-NEXT: por %xmm12, %xmm8 4965 ; SSE2-NEXT: movdqa %xmm1, %xmm0 4966 ; SSE2-NEXT: movdqa %xmm11, %xmm1 4967 ; SSE2-NEXT: movdqa %xmm10, %xmm2 4968 ; SSE2-NEXT: movdqa %xmm8, %xmm3 4969 ; SSE2-NEXT: retq 4970 ; 4971 ; SSE4-LABEL: test122: 4972 ; SSE4: # BB#0: # %entry 4973 ; SSE4-NEXT: movdqa %xmm0, %xmm8 4974 ; SSE4-NEXT: movdqa %xmm3, %xmm9 4975 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm9 4976 ; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 4977 ; SSE4-NEXT: pxor %xmm12, %xmm9 4978 ; SSE4-NEXT: movdqa %xmm2, %xmm10 4979 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm10 4980 ; SSE4-NEXT: pxor %xmm12, %xmm10 4981 ; SSE4-NEXT: movdqa %xmm1, %xmm11 4982 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm11 4983 ; SSE4-NEXT: pxor %xmm12, %xmm11 4984 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 4985 ; SSE4-NEXT: pxor %xmm12, %xmm0 4986 ; SSE4-NEXT: blendvpd %xmm8, %xmm4 4987 ; SSE4-NEXT: movdqa %xmm11, %xmm0 4988 ; SSE4-NEXT: blendvpd %xmm1, %xmm5 4989 ; SSE4-NEXT: movdqa %xmm10, %xmm0 4990 ; SSE4-NEXT: blendvpd %xmm2, %xmm6 4991 ; SSE4-NEXT: movdqa %xmm9, %xmm0 4992 ; SSE4-NEXT: blendvpd %xmm3, %xmm7 4993 ; SSE4-NEXT: movapd %xmm4, %xmm0 4994 ; SSE4-NEXT: movapd %xmm5, %xmm1 4995 ; SSE4-NEXT: movapd %xmm6, %xmm2 4996 ; SSE4-NEXT: movapd %xmm7, %xmm3 4997 ; SSE4-NEXT: retq 4998 ; 4999 ; AVX1-LABEL: test122: 5000 ; AVX1: # BB#0: # %entry 5001 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5002 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 5003 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5004 ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5 5005 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5006 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm6 5007 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5008 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5009 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 5010 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7 5011 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5012 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5013 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm7 5014 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm5 5015 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 5016 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5017 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5018 ; AVX1-NEXT: retq 5019 ; 5020 ; AVX2-LABEL: test122: 5021 ; AVX2: # BB#0: # %entry 5022 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm4 5023 ; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5 5024 ; AVX2-NEXT: vpxor %ymm5, %ymm4, %ymm4 5025 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm6 5026 ; AVX2-NEXT: vpxor %ymm5, %ymm6, %ymm5 5027 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5028 ; AVX2-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5029 ; AVX2-NEXT: retq 5030 ; 5031 ; AVX512F-LABEL: test122: 5032 ; AVX512F: # BB#0: # %entry 5033 ; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 5034 ; AVX512F-NEXT: retq 5035 entry: 5036 %cmp = icmp sle <8 x i64> %a, %b 5037 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5038 ret <8 x i64> %sel 5039 } 5040 5041 define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) { 5042 ; SSE2-LABEL: test123: 5043 ; SSE2: # BB#0: # %entry 5044 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,0,2147483648,0] 5045 ; SSE2-NEXT: movdqa %xmm7, %xmm8 5046 ; SSE2-NEXT: pxor %xmm9, %xmm8 5047 ; SSE2-NEXT: movdqa %xmm3, %xmm10 5048 ; SSE2-NEXT: pxor %xmm9, %xmm10 5049 ; SSE2-NEXT: movdqa %xmm10, %xmm11 5050 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 5051 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5052 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm10 5053 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 5054 ; SSE2-NEXT: pand %xmm12, %xmm10 5055 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3] 5056 ; SSE2-NEXT: por %xmm10, %xmm8 5057 ; SSE2-NEXT: movdqa %xmm6, %xmm10 5058 ; SSE2-NEXT: pxor %xmm9, %xmm10 5059 ; SSE2-NEXT: movdqa %xmm2, %xmm11 5060 ; SSE2-NEXT: pxor %xmm9, %xmm11 5061 ; SSE2-NEXT: movdqa %xmm11, %xmm12 5062 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm12 5063 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 5064 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm11 5065 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3] 5066 ; SSE2-NEXT: pand %xmm13, %xmm11 5067 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3] 5068 ; SSE2-NEXT: por %xmm11, %xmm10 5069 ; SSE2-NEXT: movdqa %xmm5, %xmm11 5070 ; SSE2-NEXT: pxor %xmm9, %xmm11 5071 ; SSE2-NEXT: movdqa %xmm1, %xmm12 5072 ; SSE2-NEXT: pxor %xmm9, %xmm12 5073 ; SSE2-NEXT: movdqa %xmm12, %xmm13 5074 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 5075 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 5076 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm12 5077 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3] 5078 ; SSE2-NEXT: pand %xmm14, %xmm11 5079 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3] 5080 ; SSE2-NEXT: por %xmm11, %xmm12 5081 ; SSE2-NEXT: movdqa %xmm4, %xmm11 5082 ; SSE2-NEXT: pxor %xmm9, %xmm11 5083 ; SSE2-NEXT: pxor %xmm0, %xmm9 5084 ; SSE2-NEXT: movdqa %xmm9, %xmm13 5085 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 5086 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 5087 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm9 5088 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 5089 ; SSE2-NEXT: pand %xmm14, %xmm9 5090 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 5091 ; SSE2-NEXT: por %xmm9, %xmm11 5092 ; SSE2-NEXT: pand %xmm11, %xmm0 5093 ; SSE2-NEXT: pandn %xmm4, %xmm11 5094 ; SSE2-NEXT: por %xmm11, %xmm0 5095 ; SSE2-NEXT: pand %xmm12, %xmm1 5096 ; SSE2-NEXT: pandn %xmm5, %xmm12 5097 ; SSE2-NEXT: por %xmm12, %xmm1 5098 ; SSE2-NEXT: pand %xmm10, %xmm2 5099 ; SSE2-NEXT: pandn %xmm6, %xmm10 5100 ; SSE2-NEXT: por %xmm10, %xmm2 5101 ; SSE2-NEXT: pand %xmm8, %xmm3 5102 ; SSE2-NEXT: pandn %xmm7, %xmm8 5103 ; SSE2-NEXT: por %xmm8, %xmm3 5104 ; SSE2-NEXT: retq 5105 ; 5106 ; SSE4-LABEL: test123: 5107 ; SSE4: # BB#0: # %entry 5108 ; SSE4-NEXT: movdqa %xmm0, %xmm8 5109 ; SSE4-NEXT: movdqa %xmm3, %xmm9 5110 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm9 5111 ; SSE4-NEXT: movdqa %xmm2, %xmm10 5112 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm10 5113 ; SSE4-NEXT: movdqa %xmm1, %xmm11 5114 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm11 5115 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 5116 ; SSE4-NEXT: blendvpd %xmm8, %xmm4 5117 ; SSE4-NEXT: movdqa %xmm11, %xmm0 5118 ; SSE4-NEXT: blendvpd %xmm1, %xmm5 5119 ; SSE4-NEXT: movdqa %xmm10, %xmm0 5120 ; SSE4-NEXT: blendvpd %xmm2, %xmm6 5121 ; SSE4-NEXT: movdqa %xmm9, %xmm0 5122 ; SSE4-NEXT: blendvpd %xmm3, %xmm7 5123 ; SSE4-NEXT: movapd %xmm4, %xmm0 5124 ; SSE4-NEXT: movapd %xmm5, %xmm1 5125 ; SSE4-NEXT: movapd %xmm6, %xmm2 5126 ; SSE4-NEXT: movapd %xmm7, %xmm3 5127 ; SSE4-NEXT: retq 5128 ; 5129 ; AVX1-LABEL: test123: 5130 ; AVX1: # BB#0: # %entry 5131 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5132 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 5133 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5134 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm5 5135 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 5136 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 5137 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5138 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 5139 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm6 5140 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5 5141 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5142 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5143 ; AVX1-NEXT: retq 5144 ; 5145 ; AVX2-LABEL: test123: 5146 ; AVX2: # BB#0: # %entry 5147 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm4 5148 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm5 5149 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5150 ; AVX2-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5151 ; AVX2-NEXT: retq 5152 ; 5153 ; AVX512F-LABEL: test123: 5154 ; AVX512F: # BB#0: # %entry 5155 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 5156 ; AVX512F-NEXT: retq 5157 entry: 5158 %cmp = icmp sgt <8 x i64> %a, %b 5159 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5160 ret <8 x i64> %sel 5161 } 5162 5163 define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) { 5164 ; SSE2-LABEL: test124: 5165 ; SSE2: # BB#0: # %entry 5166 ; SSE2-NEXT: movdqa %xmm7, %xmm11 5167 ; SSE2-NEXT: movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill 5168 ; SSE2-NEXT: movdqa %xmm3, %xmm7 5169 ; SSE2-NEXT: movdqa %xmm2, %xmm3 5170 ; SSE2-NEXT: movdqa %xmm1, %xmm2 5171 ; SSE2-NEXT: movdqa %xmm0, %xmm9 5172 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0] 5173 ; SSE2-NEXT: movdqa %xmm7, %xmm8 5174 ; SSE2-NEXT: pxor %xmm10, %xmm8 5175 ; SSE2-NEXT: movdqa %xmm11, %xmm0 5176 ; SSE2-NEXT: pxor %xmm10, %xmm0 5177 ; SSE2-NEXT: movdqa %xmm0, %xmm11 5178 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 5179 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5180 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 5181 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 5182 ; SSE2-NEXT: pand %xmm12, %xmm0 5183 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 5184 ; SSE2-NEXT: por %xmm0, %xmm12 5185 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 5186 ; SSE2-NEXT: movdqa %xmm12, %xmm8 5187 ; SSE2-NEXT: pxor %xmm1, %xmm8 5188 ; SSE2-NEXT: movdqa %xmm3, %xmm11 5189 ; SSE2-NEXT: pxor %xmm10, %xmm11 5190 ; SSE2-NEXT: movdqa %xmm6, %xmm13 5191 ; SSE2-NEXT: pxor %xmm10, %xmm13 5192 ; SSE2-NEXT: movdqa %xmm13, %xmm14 5193 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 5194 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 5195 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 5196 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 5197 ; SSE2-NEXT: pand %xmm15, %xmm11 5198 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 5199 ; SSE2-NEXT: por %xmm11, %xmm13 5200 ; SSE2-NEXT: movdqa %xmm2, %xmm11 5201 ; SSE2-NEXT: pxor %xmm10, %xmm11 5202 ; SSE2-NEXT: movdqa %xmm5, %xmm14 5203 ; SSE2-NEXT: pxor %xmm10, %xmm14 5204 ; SSE2-NEXT: movdqa %xmm14, %xmm15 5205 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 5206 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 5207 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 5208 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 5209 ; SSE2-NEXT: pand %xmm11, %xmm14 5210 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 5211 ; SSE2-NEXT: por %xmm14, %xmm15 5212 ; SSE2-NEXT: movdqa %xmm9, %xmm11 5213 ; SSE2-NEXT: pxor %xmm10, %xmm11 5214 ; SSE2-NEXT: pxor %xmm4, %xmm10 5215 ; SSE2-NEXT: movdqa %xmm10, %xmm14 5216 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 5217 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 5218 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 5219 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 5220 ; SSE2-NEXT: pand %xmm11, %xmm0 5221 ; SSE2-NEXT: movdqa %xmm13, %xmm10 5222 ; SSE2-NEXT: pxor %xmm1, %xmm10 5223 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 5224 ; SSE2-NEXT: por %xmm0, %xmm14 5225 ; SSE2-NEXT: movdqa %xmm15, %xmm11 5226 ; SSE2-NEXT: pxor %xmm1, %xmm11 5227 ; SSE2-NEXT: pxor %xmm14, %xmm1 5228 ; SSE2-NEXT: pandn %xmm9, %xmm14 5229 ; SSE2-NEXT: pandn %xmm4, %xmm1 5230 ; SSE2-NEXT: por %xmm14, %xmm1 5231 ; SSE2-NEXT: pandn %xmm2, %xmm15 5232 ; SSE2-NEXT: pandn %xmm5, %xmm11 5233 ; SSE2-NEXT: por %xmm15, %xmm11 5234 ; SSE2-NEXT: pandn %xmm3, %xmm13 5235 ; SSE2-NEXT: pandn %xmm6, %xmm10 5236 ; SSE2-NEXT: por %xmm13, %xmm10 5237 ; SSE2-NEXT: pandn %xmm7, %xmm12 5238 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload 5239 ; SSE2-NEXT: por %xmm12, %xmm8 5240 ; SSE2-NEXT: movdqa %xmm1, %xmm0 5241 ; SSE2-NEXT: movdqa %xmm11, %xmm1 5242 ; SSE2-NEXT: movdqa %xmm10, %xmm2 5243 ; SSE2-NEXT: movdqa %xmm8, %xmm3 5244 ; SSE2-NEXT: retq 5245 ; 5246 ; SSE4-LABEL: test124: 5247 ; SSE4: # BB#0: # %entry 5248 ; SSE4-NEXT: movdqa %xmm0, %xmm8 5249 ; SSE4-NEXT: movdqa %xmm7, %xmm9 5250 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm9 5251 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 5252 ; SSE4-NEXT: pxor %xmm0, %xmm9 5253 ; SSE4-NEXT: movdqa %xmm6, %xmm10 5254 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm10 5255 ; SSE4-NEXT: pxor %xmm0, %xmm10 5256 ; SSE4-NEXT: movdqa %xmm5, %xmm11 5257 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm11 5258 ; SSE4-NEXT: pxor %xmm0, %xmm11 5259 ; SSE4-NEXT: movdqa %xmm4, %xmm12 5260 ; SSE4-NEXT: pcmpgtq %xmm8, %xmm12 5261 ; SSE4-NEXT: pxor %xmm12, %xmm0 5262 ; SSE4-NEXT: blendvpd %xmm8, %xmm4 5263 ; SSE4-NEXT: movdqa %xmm11, %xmm0 5264 ; SSE4-NEXT: blendvpd %xmm1, %xmm5 5265 ; SSE4-NEXT: movdqa %xmm10, %xmm0 5266 ; SSE4-NEXT: blendvpd %xmm2, %xmm6 5267 ; SSE4-NEXT: movdqa %xmm9, %xmm0 5268 ; SSE4-NEXT: blendvpd %xmm3, %xmm7 5269 ; SSE4-NEXT: movapd %xmm4, %xmm0 5270 ; SSE4-NEXT: movapd %xmm5, %xmm1 5271 ; SSE4-NEXT: movapd %xmm6, %xmm2 5272 ; SSE4-NEXT: movapd %xmm7, %xmm3 5273 ; SSE4-NEXT: retq 5274 ; 5275 ; AVX1-LABEL: test124: 5276 ; AVX1: # BB#0: # %entry 5277 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5278 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5 5279 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5280 ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5 5281 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5282 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm6 5283 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5284 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5285 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5286 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 5287 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5288 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5289 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm7 5290 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm5 5291 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 5292 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5293 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5294 ; AVX1-NEXT: retq 5295 ; 5296 ; AVX2-LABEL: test124: 5297 ; AVX2: # BB#0: # %entry 5298 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm4 5299 ; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5 5300 ; AVX2-NEXT: vpxor %ymm5, %ymm4, %ymm4 5301 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm6 5302 ; AVX2-NEXT: vpxor %ymm5, %ymm6, %ymm5 5303 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5304 ; AVX2-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5305 ; AVX2-NEXT: retq 5306 ; 5307 ; AVX512F-LABEL: test124: 5308 ; AVX512F: # BB#0: # %entry 5309 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 5310 ; AVX512F-NEXT: retq 5311 entry: 5312 %cmp = icmp sge <8 x i64> %a, %b 5313 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5314 ret <8 x i64> %sel 5315 } 5316 5317 define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) { 5318 ; SSE2-LABEL: test125: 5319 ; SSE2: # BB#0: # %entry 5320 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648] 5321 ; SSE2-NEXT: movdqa %xmm3, %xmm8 5322 ; SSE2-NEXT: pxor %xmm9, %xmm8 5323 ; SSE2-NEXT: movdqa %xmm7, %xmm10 5324 ; SSE2-NEXT: pxor %xmm9, %xmm10 5325 ; SSE2-NEXT: movdqa %xmm10, %xmm11 5326 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 5327 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5328 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm10 5329 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 5330 ; SSE2-NEXT: pand %xmm12, %xmm10 5331 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3] 5332 ; SSE2-NEXT: por %xmm10, %xmm8 5333 ; SSE2-NEXT: movdqa %xmm2, %xmm10 5334 ; SSE2-NEXT: pxor %xmm9, %xmm10 5335 ; SSE2-NEXT: movdqa %xmm6, %xmm11 5336 ; SSE2-NEXT: pxor %xmm9, %xmm11 5337 ; SSE2-NEXT: movdqa %xmm11, %xmm12 5338 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm12 5339 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 5340 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm11 5341 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3] 5342 ; SSE2-NEXT: pand %xmm13, %xmm11 5343 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3] 5344 ; SSE2-NEXT: por %xmm11, %xmm10 5345 ; SSE2-NEXT: movdqa %xmm1, %xmm11 5346 ; SSE2-NEXT: pxor %xmm9, %xmm11 5347 ; SSE2-NEXT: movdqa %xmm5, %xmm12 5348 ; SSE2-NEXT: pxor %xmm9, %xmm12 5349 ; SSE2-NEXT: movdqa %xmm12, %xmm13 5350 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 5351 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 5352 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm12 5353 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3] 5354 ; SSE2-NEXT: pand %xmm14, %xmm11 5355 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3] 5356 ; SSE2-NEXT: por %xmm11, %xmm12 5357 ; SSE2-NEXT: movdqa %xmm0, %xmm11 5358 ; SSE2-NEXT: pxor %xmm9, %xmm11 5359 ; SSE2-NEXT: pxor %xmm4, %xmm9 5360 ; SSE2-NEXT: movdqa %xmm9, %xmm13 5361 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 5362 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 5363 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm9 5364 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 5365 ; SSE2-NEXT: pand %xmm14, %xmm9 5366 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 5367 ; SSE2-NEXT: por %xmm9, %xmm11 5368 ; SSE2-NEXT: pand %xmm11, %xmm0 5369 ; SSE2-NEXT: pandn %xmm4, %xmm11 5370 ; SSE2-NEXT: por %xmm11, %xmm0 5371 ; SSE2-NEXT: pand %xmm12, %xmm1 5372 ; SSE2-NEXT: pandn %xmm5, %xmm12 5373 ; SSE2-NEXT: por %xmm12, %xmm1 5374 ; SSE2-NEXT: pand %xmm10, %xmm2 5375 ; SSE2-NEXT: pandn %xmm6, %xmm10 5376 ; SSE2-NEXT: por %xmm10, %xmm2 5377 ; SSE2-NEXT: pand %xmm8, %xmm3 5378 ; SSE2-NEXT: pandn %xmm7, %xmm8 5379 ; SSE2-NEXT: por %xmm8, %xmm3 5380 ; SSE2-NEXT: retq 5381 ; 5382 ; SSE4-LABEL: test125: 5383 ; SSE4: # BB#0: # %entry 5384 ; SSE4-NEXT: movdqa %xmm0, %xmm8 5385 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 5386 ; SSE4-NEXT: movdqa %xmm3, %xmm10 5387 ; SSE4-NEXT: pxor %xmm0, %xmm10 5388 ; SSE4-NEXT: movdqa %xmm7, %xmm9 5389 ; SSE4-NEXT: pxor %xmm0, %xmm9 5390 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 5391 ; SSE4-NEXT: movdqa %xmm2, %xmm11 5392 ; SSE4-NEXT: pxor %xmm0, %xmm11 5393 ; SSE4-NEXT: movdqa %xmm6, %xmm10 5394 ; SSE4-NEXT: pxor %xmm0, %xmm10 5395 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 5396 ; SSE4-NEXT: movdqa %xmm1, %xmm12 5397 ; SSE4-NEXT: pxor %xmm0, %xmm12 5398 ; SSE4-NEXT: movdqa %xmm5, %xmm11 5399 ; SSE4-NEXT: pxor %xmm0, %xmm11 5400 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm11 5401 ; SSE4-NEXT: movdqa %xmm8, %xmm12 5402 ; SSE4-NEXT: pxor %xmm0, %xmm12 5403 ; SSE4-NEXT: pxor %xmm4, %xmm0 5404 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm0 5405 ; SSE4-NEXT: blendvpd %xmm8, %xmm4 5406 ; SSE4-NEXT: movdqa %xmm11, %xmm0 5407 ; SSE4-NEXT: blendvpd %xmm1, %xmm5 5408 ; SSE4-NEXT: movdqa %xmm10, %xmm0 5409 ; SSE4-NEXT: blendvpd %xmm2, %xmm6 5410 ; SSE4-NEXT: movdqa %xmm9, %xmm0 5411 ; SSE4-NEXT: blendvpd %xmm3, %xmm7 5412 ; SSE4-NEXT: movapd %xmm4, %xmm0 5413 ; SSE4-NEXT: movapd %xmm5, %xmm1 5414 ; SSE4-NEXT: movapd %xmm6, %xmm2 5415 ; SSE4-NEXT: movapd %xmm7, %xmm3 5416 ; SSE4-NEXT: retq 5417 ; 5418 ; AVX1-LABEL: test125: 5419 ; AVX1: # BB#0: # %entry 5420 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5421 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5422 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 5423 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6 5424 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5425 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5426 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm6 5427 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm7 5428 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5429 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5430 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5431 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5432 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 5433 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 5434 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5435 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm7 5436 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm5 5437 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 5438 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 5439 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5440 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5441 ; AVX1-NEXT: retq 5442 ; 5443 ; AVX2-LABEL: test125: 5444 ; AVX2: # BB#0: # %entry 5445 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 5446 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm5 5447 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm6 5448 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5449 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 5450 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm4 5451 ; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm4 5452 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5453 ; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1 5454 ; AVX2-NEXT: retq 5455 ; 5456 ; AVX512F-LABEL: test125: 5457 ; AVX512F: # BB#0: # %entry 5458 ; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 5459 ; AVX512F-NEXT: retq 5460 entry: 5461 %cmp = icmp ult <8 x i64> %a, %b 5462 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5463 ret <8 x i64> %sel 5464 } 5465 5466 define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) { 5467 ; SSE2-LABEL: test126: 5468 ; SSE2: # BB#0: # %entry 5469 ; SSE2-NEXT: movdqa %xmm7, %xmm8 5470 ; SSE2-NEXT: movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill 5471 ; SSE2-NEXT: movdqa %xmm3, %xmm7 5472 ; SSE2-NEXT: movdqa %xmm2, %xmm3 5473 ; SSE2-NEXT: movdqa %xmm1, %xmm2 5474 ; SSE2-NEXT: movdqa %xmm0, %xmm9 5475 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648] 5476 ; SSE2-NEXT: pxor %xmm10, %xmm8 5477 ; SSE2-NEXT: movdqa %xmm7, %xmm0 5478 ; SSE2-NEXT: pxor %xmm10, %xmm0 5479 ; SSE2-NEXT: movdqa %xmm0, %xmm11 5480 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 5481 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5482 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 5483 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 5484 ; SSE2-NEXT: pand %xmm12, %xmm0 5485 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 5486 ; SSE2-NEXT: por %xmm0, %xmm12 5487 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 5488 ; SSE2-NEXT: movdqa %xmm12, %xmm8 5489 ; SSE2-NEXT: pxor %xmm1, %xmm8 5490 ; SSE2-NEXT: movdqa %xmm6, %xmm11 5491 ; SSE2-NEXT: pxor %xmm10, %xmm11 5492 ; SSE2-NEXT: movdqa %xmm3, %xmm13 5493 ; SSE2-NEXT: pxor %xmm10, %xmm13 5494 ; SSE2-NEXT: movdqa %xmm13, %xmm14 5495 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 5496 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 5497 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 5498 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 5499 ; SSE2-NEXT: pand %xmm15, %xmm11 5500 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 5501 ; SSE2-NEXT: por %xmm11, %xmm13 5502 ; SSE2-NEXT: movdqa %xmm5, %xmm11 5503 ; SSE2-NEXT: pxor %xmm10, %xmm11 5504 ; SSE2-NEXT: movdqa %xmm2, %xmm14 5505 ; SSE2-NEXT: pxor %xmm10, %xmm14 5506 ; SSE2-NEXT: movdqa %xmm14, %xmm15 5507 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 5508 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 5509 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 5510 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 5511 ; SSE2-NEXT: pand %xmm11, %xmm14 5512 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 5513 ; SSE2-NEXT: por %xmm14, %xmm15 5514 ; SSE2-NEXT: movdqa %xmm4, %xmm11 5515 ; SSE2-NEXT: pxor %xmm10, %xmm11 5516 ; SSE2-NEXT: pxor %xmm9, %xmm10 5517 ; SSE2-NEXT: movdqa %xmm10, %xmm14 5518 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 5519 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 5520 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 5521 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 5522 ; SSE2-NEXT: pand %xmm11, %xmm0 5523 ; SSE2-NEXT: movdqa %xmm13, %xmm10 5524 ; SSE2-NEXT: pxor %xmm1, %xmm10 5525 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 5526 ; SSE2-NEXT: por %xmm0, %xmm14 5527 ; SSE2-NEXT: movdqa %xmm15, %xmm11 5528 ; SSE2-NEXT: pxor %xmm1, %xmm11 5529 ; SSE2-NEXT: pxor %xmm14, %xmm1 5530 ; SSE2-NEXT: pandn %xmm9, %xmm14 5531 ; SSE2-NEXT: pandn %xmm4, %xmm1 5532 ; SSE2-NEXT: por %xmm14, %xmm1 5533 ; SSE2-NEXT: pandn %xmm2, %xmm15 5534 ; SSE2-NEXT: pandn %xmm5, %xmm11 5535 ; SSE2-NEXT: por %xmm15, %xmm11 5536 ; SSE2-NEXT: pandn %xmm3, %xmm13 5537 ; SSE2-NEXT: pandn %xmm6, %xmm10 5538 ; SSE2-NEXT: por %xmm13, %xmm10 5539 ; SSE2-NEXT: pandn %xmm7, %xmm12 5540 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload 5541 ; SSE2-NEXT: por %xmm12, %xmm8 5542 ; SSE2-NEXT: movdqa %xmm1, %xmm0 5543 ; SSE2-NEXT: movdqa %xmm11, %xmm1 5544 ; SSE2-NEXT: movdqa %xmm10, %xmm2 5545 ; SSE2-NEXT: movdqa %xmm8, %xmm3 5546 ; SSE2-NEXT: retq 5547 ; 5548 ; SSE4-LABEL: test126: 5549 ; SSE4: # BB#0: # %entry 5550 ; SSE4-NEXT: movdqa %xmm0, %xmm9 5551 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 5552 ; SSE4-NEXT: movdqa %xmm7, %xmm10 5553 ; SSE4-NEXT: pxor %xmm0, %xmm10 5554 ; SSE4-NEXT: movdqa %xmm3, %xmm8 5555 ; SSE4-NEXT: pxor %xmm0, %xmm8 5556 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm8 5557 ; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 5558 ; SSE4-NEXT: pxor %xmm12, %xmm8 5559 ; SSE4-NEXT: movdqa %xmm6, %xmm11 5560 ; SSE4-NEXT: pxor %xmm0, %xmm11 5561 ; SSE4-NEXT: movdqa %xmm2, %xmm10 5562 ; SSE4-NEXT: pxor %xmm0, %xmm10 5563 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 5564 ; SSE4-NEXT: pxor %xmm12, %xmm10 5565 ; SSE4-NEXT: movdqa %xmm5, %xmm13 5566 ; SSE4-NEXT: pxor %xmm0, %xmm13 5567 ; SSE4-NEXT: movdqa %xmm1, %xmm11 5568 ; SSE4-NEXT: pxor %xmm0, %xmm11 5569 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm11 5570 ; SSE4-NEXT: pxor %xmm12, %xmm11 5571 ; SSE4-NEXT: movdqa %xmm4, %xmm13 5572 ; SSE4-NEXT: pxor %xmm0, %xmm13 5573 ; SSE4-NEXT: pxor %xmm9, %xmm0 5574 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm0 5575 ; SSE4-NEXT: pxor %xmm12, %xmm0 5576 ; SSE4-NEXT: blendvpd %xmm9, %xmm4 5577 ; SSE4-NEXT: movdqa %xmm11, %xmm0 5578 ; SSE4-NEXT: blendvpd %xmm1, %xmm5 5579 ; SSE4-NEXT: movdqa %xmm10, %xmm0 5580 ; SSE4-NEXT: blendvpd %xmm2, %xmm6 5581 ; SSE4-NEXT: movdqa %xmm8, %xmm0 5582 ; SSE4-NEXT: blendvpd %xmm3, %xmm7 5583 ; SSE4-NEXT: movapd %xmm4, %xmm0 5584 ; SSE4-NEXT: movapd %xmm5, %xmm1 5585 ; SSE4-NEXT: movapd %xmm6, %xmm2 5586 ; SSE4-NEXT: movapd %xmm7, %xmm3 5587 ; SSE4-NEXT: retq 5588 ; 5589 ; AVX1-LABEL: test126: 5590 ; AVX1: # BB#0: # %entry 5591 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5592 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5593 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 5594 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6 5595 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5596 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5597 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm8, %xmm8 5598 ; AVX1-NEXT: vpxor %xmm8, %xmm4, %xmm4 5599 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm7 5600 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm6 5601 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6 5602 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 5603 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5604 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 5605 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5606 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7 5607 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 5608 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5609 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 5610 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm7 5611 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm5 5612 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 5613 ; AVX1-NEXT: vpxor %xmm8, %xmm5, %xmm5 5614 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 5615 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5616 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5617 ; AVX1-NEXT: retq 5618 ; 5619 ; AVX2-LABEL: test126: 5620 ; AVX2: # BB#0: # %entry 5621 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 5622 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm5 5623 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm6 5624 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5625 ; AVX2-NEXT: vpcmpeqd %ymm6, %ymm6, %ymm6 5626 ; AVX2-NEXT: vpxor %ymm6, %ymm5, %ymm5 5627 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm7 5628 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm4 5629 ; AVX2-NEXT: vpcmpgtq %ymm7, %ymm4, %ymm4 5630 ; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm4 5631 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5632 ; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1 5633 ; AVX2-NEXT: retq 5634 ; 5635 ; AVX512F-LABEL: test126: 5636 ; AVX512F: # BB#0: # %entry 5637 ; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 5638 ; AVX512F-NEXT: retq 5639 entry: 5640 %cmp = icmp ule <8 x i64> %a, %b 5641 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5642 ret <8 x i64> %sel 5643 } 5644 5645 define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) { 5646 ; SSE2-LABEL: test127: 5647 ; SSE2: # BB#0: # %entry 5648 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648] 5649 ; SSE2-NEXT: movdqa %xmm7, %xmm8 5650 ; SSE2-NEXT: pxor %xmm9, %xmm8 5651 ; SSE2-NEXT: movdqa %xmm3, %xmm10 5652 ; SSE2-NEXT: pxor %xmm9, %xmm10 5653 ; SSE2-NEXT: movdqa %xmm10, %xmm11 5654 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 5655 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5656 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm10 5657 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 5658 ; SSE2-NEXT: pand %xmm12, %xmm10 5659 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3] 5660 ; SSE2-NEXT: por %xmm10, %xmm8 5661 ; SSE2-NEXT: movdqa %xmm6, %xmm10 5662 ; SSE2-NEXT: pxor %xmm9, %xmm10 5663 ; SSE2-NEXT: movdqa %xmm2, %xmm11 5664 ; SSE2-NEXT: pxor %xmm9, %xmm11 5665 ; SSE2-NEXT: movdqa %xmm11, %xmm12 5666 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm12 5667 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 5668 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm11 5669 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3] 5670 ; SSE2-NEXT: pand %xmm13, %xmm11 5671 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3] 5672 ; SSE2-NEXT: por %xmm11, %xmm10 5673 ; SSE2-NEXT: movdqa %xmm5, %xmm11 5674 ; SSE2-NEXT: pxor %xmm9, %xmm11 5675 ; SSE2-NEXT: movdqa %xmm1, %xmm12 5676 ; SSE2-NEXT: pxor %xmm9, %xmm12 5677 ; SSE2-NEXT: movdqa %xmm12, %xmm13 5678 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 5679 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 5680 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm12 5681 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3] 5682 ; SSE2-NEXT: pand %xmm14, %xmm11 5683 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3] 5684 ; SSE2-NEXT: por %xmm11, %xmm12 5685 ; SSE2-NEXT: movdqa %xmm4, %xmm11 5686 ; SSE2-NEXT: pxor %xmm9, %xmm11 5687 ; SSE2-NEXT: pxor %xmm0, %xmm9 5688 ; SSE2-NEXT: movdqa %xmm9, %xmm13 5689 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 5690 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 5691 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm9 5692 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 5693 ; SSE2-NEXT: pand %xmm14, %xmm9 5694 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 5695 ; SSE2-NEXT: por %xmm9, %xmm11 5696 ; SSE2-NEXT: pand %xmm11, %xmm0 5697 ; SSE2-NEXT: pandn %xmm4, %xmm11 5698 ; SSE2-NEXT: por %xmm11, %xmm0 5699 ; SSE2-NEXT: pand %xmm12, %xmm1 5700 ; SSE2-NEXT: pandn %xmm5, %xmm12 5701 ; SSE2-NEXT: por %xmm12, %xmm1 5702 ; SSE2-NEXT: pand %xmm10, %xmm2 5703 ; SSE2-NEXT: pandn %xmm6, %xmm10 5704 ; SSE2-NEXT: por %xmm10, %xmm2 5705 ; SSE2-NEXT: pand %xmm8, %xmm3 5706 ; SSE2-NEXT: pandn %xmm7, %xmm8 5707 ; SSE2-NEXT: por %xmm8, %xmm3 5708 ; SSE2-NEXT: retq 5709 ; 5710 ; SSE4-LABEL: test127: 5711 ; SSE4: # BB#0: # %entry 5712 ; SSE4-NEXT: movdqa %xmm0, %xmm8 5713 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 5714 ; SSE4-NEXT: movdqa %xmm7, %xmm10 5715 ; SSE4-NEXT: pxor %xmm0, %xmm10 5716 ; SSE4-NEXT: movdqa %xmm3, %xmm9 5717 ; SSE4-NEXT: pxor %xmm0, %xmm9 5718 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 5719 ; SSE4-NEXT: movdqa %xmm6, %xmm11 5720 ; SSE4-NEXT: pxor %xmm0, %xmm11 5721 ; SSE4-NEXT: movdqa %xmm2, %xmm10 5722 ; SSE4-NEXT: pxor %xmm0, %xmm10 5723 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 5724 ; SSE4-NEXT: movdqa %xmm5, %xmm12 5725 ; SSE4-NEXT: pxor %xmm0, %xmm12 5726 ; SSE4-NEXT: movdqa %xmm1, %xmm11 5727 ; SSE4-NEXT: pxor %xmm0, %xmm11 5728 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm11 5729 ; SSE4-NEXT: movdqa %xmm4, %xmm12 5730 ; SSE4-NEXT: pxor %xmm0, %xmm12 5731 ; SSE4-NEXT: pxor %xmm8, %xmm0 5732 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm0 5733 ; SSE4-NEXT: blendvpd %xmm8, %xmm4 5734 ; SSE4-NEXT: movdqa %xmm11, %xmm0 5735 ; SSE4-NEXT: blendvpd %xmm1, %xmm5 5736 ; SSE4-NEXT: movdqa %xmm10, %xmm0 5737 ; SSE4-NEXT: blendvpd %xmm2, %xmm6 5738 ; SSE4-NEXT: movdqa %xmm9, %xmm0 5739 ; SSE4-NEXT: blendvpd %xmm3, %xmm7 5740 ; SSE4-NEXT: movapd %xmm4, %xmm0 5741 ; SSE4-NEXT: movapd %xmm5, %xmm1 5742 ; SSE4-NEXT: movapd %xmm6, %xmm2 5743 ; SSE4-NEXT: movapd %xmm7, %xmm3 5744 ; SSE4-NEXT: retq 5745 ; 5746 ; AVX1-LABEL: test127: 5747 ; AVX1: # BB#0: # %entry 5748 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5749 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5750 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 5751 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6 5752 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5753 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5754 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm6 5755 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm7 5756 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5757 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5758 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 5759 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5760 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7 5761 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 5762 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5763 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm7 5764 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm5 5765 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 5766 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 5767 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5768 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5769 ; AVX1-NEXT: retq 5770 ; 5771 ; AVX2-LABEL: test127: 5772 ; AVX2: # BB#0: # %entry 5773 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 5774 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm5 5775 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm6 5776 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5777 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 5778 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm4 5779 ; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm4 5780 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5781 ; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1 5782 ; AVX2-NEXT: retq 5783 ; 5784 ; AVX512F-LABEL: test127: 5785 ; AVX512F: # BB#0: # %entry 5786 ; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 5787 ; AVX512F-NEXT: retq 5788 entry: 5789 %cmp = icmp ugt <8 x i64> %a, %b 5790 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5791 ret <8 x i64> %sel 5792 } 5793 5794 define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) { 5795 ; SSE2-LABEL: test128: 5796 ; SSE2: # BB#0: # %entry 5797 ; SSE2-NEXT: movdqa %xmm7, %xmm11 5798 ; SSE2-NEXT: movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill 5799 ; SSE2-NEXT: movdqa %xmm3, %xmm7 5800 ; SSE2-NEXT: movdqa %xmm2, %xmm3 5801 ; SSE2-NEXT: movdqa %xmm1, %xmm2 5802 ; SSE2-NEXT: movdqa %xmm0, %xmm9 5803 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648] 5804 ; SSE2-NEXT: movdqa %xmm7, %xmm8 5805 ; SSE2-NEXT: pxor %xmm10, %xmm8 5806 ; SSE2-NEXT: movdqa %xmm11, %xmm0 5807 ; SSE2-NEXT: pxor %xmm10, %xmm0 5808 ; SSE2-NEXT: movdqa %xmm0, %xmm11 5809 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 5810 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5811 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 5812 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 5813 ; SSE2-NEXT: pand %xmm12, %xmm0 5814 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 5815 ; SSE2-NEXT: por %xmm0, %xmm12 5816 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 5817 ; SSE2-NEXT: movdqa %xmm12, %xmm8 5818 ; SSE2-NEXT: pxor %xmm1, %xmm8 5819 ; SSE2-NEXT: movdqa %xmm3, %xmm11 5820 ; SSE2-NEXT: pxor %xmm10, %xmm11 5821 ; SSE2-NEXT: movdqa %xmm6, %xmm13 5822 ; SSE2-NEXT: pxor %xmm10, %xmm13 5823 ; SSE2-NEXT: movdqa %xmm13, %xmm14 5824 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 5825 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 5826 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 5827 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 5828 ; SSE2-NEXT: pand %xmm15, %xmm11 5829 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 5830 ; SSE2-NEXT: por %xmm11, %xmm13 5831 ; SSE2-NEXT: movdqa %xmm2, %xmm11 5832 ; SSE2-NEXT: pxor %xmm10, %xmm11 5833 ; SSE2-NEXT: movdqa %xmm5, %xmm14 5834 ; SSE2-NEXT: pxor %xmm10, %xmm14 5835 ; SSE2-NEXT: movdqa %xmm14, %xmm15 5836 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 5837 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 5838 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 5839 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 5840 ; SSE2-NEXT: pand %xmm11, %xmm14 5841 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 5842 ; SSE2-NEXT: por %xmm14, %xmm15 5843 ; SSE2-NEXT: movdqa %xmm9, %xmm11 5844 ; SSE2-NEXT: pxor %xmm10, %xmm11 5845 ; SSE2-NEXT: pxor %xmm4, %xmm10 5846 ; SSE2-NEXT: movdqa %xmm10, %xmm14 5847 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 5848 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 5849 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 5850 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 5851 ; SSE2-NEXT: pand %xmm11, %xmm0 5852 ; SSE2-NEXT: movdqa %xmm13, %xmm10 5853 ; SSE2-NEXT: pxor %xmm1, %xmm10 5854 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 5855 ; SSE2-NEXT: por %xmm0, %xmm14 5856 ; SSE2-NEXT: movdqa %xmm15, %xmm11 5857 ; SSE2-NEXT: pxor %xmm1, %xmm11 5858 ; SSE2-NEXT: pxor %xmm14, %xmm1 5859 ; SSE2-NEXT: pandn %xmm9, %xmm14 5860 ; SSE2-NEXT: pandn %xmm4, %xmm1 5861 ; SSE2-NEXT: por %xmm14, %xmm1 5862 ; SSE2-NEXT: pandn %xmm2, %xmm15 5863 ; SSE2-NEXT: pandn %xmm5, %xmm11 5864 ; SSE2-NEXT: por %xmm15, %xmm11 5865 ; SSE2-NEXT: pandn %xmm3, %xmm13 5866 ; SSE2-NEXT: pandn %xmm6, %xmm10 5867 ; SSE2-NEXT: por %xmm13, %xmm10 5868 ; SSE2-NEXT: pandn %xmm7, %xmm12 5869 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload 5870 ; SSE2-NEXT: por %xmm12, %xmm8 5871 ; SSE2-NEXT: movdqa %xmm1, %xmm0 5872 ; SSE2-NEXT: movdqa %xmm11, %xmm1 5873 ; SSE2-NEXT: movdqa %xmm10, %xmm2 5874 ; SSE2-NEXT: movdqa %xmm8, %xmm3 5875 ; SSE2-NEXT: retq 5876 ; 5877 ; SSE4-LABEL: test128: 5878 ; SSE4: # BB#0: # %entry 5879 ; SSE4-NEXT: movdqa %xmm0, %xmm9 5880 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 5881 ; SSE4-NEXT: movdqa %xmm3, %xmm10 5882 ; SSE4-NEXT: pxor %xmm0, %xmm10 5883 ; SSE4-NEXT: movdqa %xmm7, %xmm8 5884 ; SSE4-NEXT: pxor %xmm0, %xmm8 5885 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm8 5886 ; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 5887 ; SSE4-NEXT: pxor %xmm12, %xmm8 5888 ; SSE4-NEXT: movdqa %xmm2, %xmm11 5889 ; SSE4-NEXT: pxor %xmm0, %xmm11 5890 ; SSE4-NEXT: movdqa %xmm6, %xmm10 5891 ; SSE4-NEXT: pxor %xmm0, %xmm10 5892 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 5893 ; SSE4-NEXT: pxor %xmm12, %xmm10 5894 ; SSE4-NEXT: movdqa %xmm1, %xmm13 5895 ; SSE4-NEXT: pxor %xmm0, %xmm13 5896 ; SSE4-NEXT: movdqa %xmm5, %xmm11 5897 ; SSE4-NEXT: pxor %xmm0, %xmm11 5898 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm11 5899 ; SSE4-NEXT: pxor %xmm12, %xmm11 5900 ; SSE4-NEXT: movdqa %xmm9, %xmm13 5901 ; SSE4-NEXT: pxor %xmm0, %xmm13 5902 ; SSE4-NEXT: pxor %xmm4, %xmm0 5903 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm0 5904 ; SSE4-NEXT: pxor %xmm12, %xmm0 5905 ; SSE4-NEXT: blendvpd %xmm9, %xmm4 5906 ; SSE4-NEXT: movdqa %xmm11, %xmm0 5907 ; SSE4-NEXT: blendvpd %xmm1, %xmm5 5908 ; SSE4-NEXT: movdqa %xmm10, %xmm0 5909 ; SSE4-NEXT: blendvpd %xmm2, %xmm6 5910 ; SSE4-NEXT: movdqa %xmm8, %xmm0 5911 ; SSE4-NEXT: blendvpd %xmm3, %xmm7 5912 ; SSE4-NEXT: movapd %xmm4, %xmm0 5913 ; SSE4-NEXT: movapd %xmm5, %xmm1 5914 ; SSE4-NEXT: movapd %xmm6, %xmm2 5915 ; SSE4-NEXT: movapd %xmm7, %xmm3 5916 ; SSE4-NEXT: retq 5917 ; 5918 ; AVX1-LABEL: test128: 5919 ; AVX1: # BB#0: # %entry 5920 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5921 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5922 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 5923 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6 5924 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5925 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5926 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm8, %xmm8 5927 ; AVX1-NEXT: vpxor %xmm8, %xmm4, %xmm4 5928 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm7 5929 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm6 5930 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6 5931 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 5932 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5933 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5934 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5935 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 5936 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 5937 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5938 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 5939 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm7 5940 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm5 5941 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 5942 ; AVX1-NEXT: vpxor %xmm8, %xmm5, %xmm5 5943 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 5944 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5945 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5946 ; AVX1-NEXT: retq 5947 ; 5948 ; AVX2-LABEL: test128: 5949 ; AVX2: # BB#0: # %entry 5950 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 5951 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm5 5952 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm6 5953 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5954 ; AVX2-NEXT: vpcmpeqd %ymm6, %ymm6, %ymm6 5955 ; AVX2-NEXT: vpxor %ymm6, %ymm5, %ymm5 5956 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm7 5957 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm4 5958 ; AVX2-NEXT: vpcmpgtq %ymm7, %ymm4, %ymm4 5959 ; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm4 5960 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5961 ; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1 5962 ; AVX2-NEXT: retq 5963 ; 5964 ; AVX512F-LABEL: test128: 5965 ; AVX512F: # BB#0: # %entry 5966 ; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 5967 ; AVX512F-NEXT: retq 5968 entry: 5969 %cmp = icmp uge <8 x i64> %a, %b 5970 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5971 ret <8 x i64> %sel 5972 } 5973 5974 define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) { 5975 ; SSE2-LABEL: test129: 5976 ; SSE2: # BB#0: # %entry 5977 ; SSE2-NEXT: movdqa %xmm3, %xmm8 5978 ; SSE2-NEXT: movdqa %xmm7, %xmm3 5979 ; SSE2-NEXT: pcmpgtb %xmm8, %xmm3 5980 ; SSE2-NEXT: movdqa %xmm6, %xmm9 5981 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm9 5982 ; SSE2-NEXT: movdqa %xmm5, %xmm10 5983 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm10 5984 ; SSE2-NEXT: movdqa %xmm4, %xmm11 5985 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm11 5986 ; SSE2-NEXT: pand %xmm11, %xmm4 5987 ; SSE2-NEXT: pandn %xmm0, %xmm11 5988 ; SSE2-NEXT: por %xmm4, %xmm11 5989 ; SSE2-NEXT: pand %xmm10, %xmm5 5990 ; SSE2-NEXT: pandn %xmm1, %xmm10 5991 ; SSE2-NEXT: por %xmm5, %xmm10 5992 ; SSE2-NEXT: pand %xmm9, %xmm6 5993 ; SSE2-NEXT: pandn %xmm2, %xmm9 5994 ; SSE2-NEXT: por %xmm6, %xmm9 5995 ; SSE2-NEXT: pand %xmm3, %xmm7 5996 ; SSE2-NEXT: pandn %xmm8, %xmm3 5997 ; SSE2-NEXT: por %xmm7, %xmm3 5998 ; SSE2-NEXT: movdqa %xmm11, %xmm0 5999 ; SSE2-NEXT: movdqa %xmm10, %xmm1 6000 ; SSE2-NEXT: movdqa %xmm9, %xmm2 6001 ; SSE2-NEXT: retq 6002 ; 6003 ; SSE4-LABEL: test129: 6004 ; SSE4: # BB#0: # %entry 6005 ; SSE4-NEXT: pmaxsb %xmm4, %xmm0 6006 ; SSE4-NEXT: pmaxsb %xmm5, %xmm1 6007 ; SSE4-NEXT: pmaxsb %xmm6, %xmm2 6008 ; SSE4-NEXT: pmaxsb %xmm7, %xmm3 6009 ; SSE4-NEXT: retq 6010 ; 6011 ; AVX1-LABEL: test129: 6012 ; AVX1: # BB#0: # %entry 6013 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6014 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6015 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 6016 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 6017 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6018 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6019 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6020 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 6021 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 6022 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6023 ; AVX1-NEXT: retq 6024 ; 6025 ; AVX2-LABEL: test129: 6026 ; AVX2: # BB#0: # %entry 6027 ; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 6028 ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 6029 ; AVX2-NEXT: retq 6030 ; 6031 ; AVX512BW-LABEL: test129: 6032 ; AVX512BW: # BB#0: # %entry 6033 ; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 6034 ; AVX512BW-NEXT: retq 6035 entry: 6036 %cmp = icmp slt <64 x i8> %a, %b 6037 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6038 ret <64 x i8> %sel 6039 } 6040 6041 define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) { 6042 ; SSE2-LABEL: test130: 6043 ; SSE2: # BB#0: # %entry 6044 ; SSE2-NEXT: movdqa %xmm2, %xmm8 6045 ; SSE2-NEXT: movdqa %xmm3, %xmm12 6046 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm12 6047 ; SSE2-NEXT: pcmpeqd %xmm13, %xmm13 6048 ; SSE2-NEXT: movdqa %xmm12, %xmm9 6049 ; SSE2-NEXT: pxor %xmm13, %xmm9 6050 ; SSE2-NEXT: movdqa %xmm8, %xmm14 6051 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm14 6052 ; SSE2-NEXT: movdqa %xmm14, %xmm2 6053 ; SSE2-NEXT: pxor %xmm13, %xmm2 6054 ; SSE2-NEXT: movdqa %xmm1, %xmm15 6055 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm15 6056 ; SSE2-NEXT: movdqa %xmm15, %xmm10 6057 ; SSE2-NEXT: pxor %xmm13, %xmm10 6058 ; SSE2-NEXT: movdqa %xmm0, %xmm11 6059 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm11 6060 ; SSE2-NEXT: pxor %xmm11, %xmm13 6061 ; SSE2-NEXT: pandn %xmm4, %xmm11 6062 ; SSE2-NEXT: pandn %xmm0, %xmm13 6063 ; SSE2-NEXT: por %xmm13, %xmm11 6064 ; SSE2-NEXT: pandn %xmm5, %xmm15 6065 ; SSE2-NEXT: pandn %xmm1, %xmm10 6066 ; SSE2-NEXT: por %xmm15, %xmm10 6067 ; SSE2-NEXT: pandn %xmm6, %xmm14 6068 ; SSE2-NEXT: pandn %xmm8, %xmm2 6069 ; SSE2-NEXT: por %xmm14, %xmm2 6070 ; SSE2-NEXT: pandn %xmm7, %xmm12 6071 ; SSE2-NEXT: pandn %xmm3, %xmm9 6072 ; SSE2-NEXT: por %xmm12, %xmm9 6073 ; SSE2-NEXT: movdqa %xmm11, %xmm0 6074 ; SSE2-NEXT: movdqa %xmm10, %xmm1 6075 ; SSE2-NEXT: movdqa %xmm9, %xmm3 6076 ; SSE2-NEXT: retq 6077 ; 6078 ; SSE4-LABEL: test130: 6079 ; SSE4: # BB#0: # %entry 6080 ; SSE4-NEXT: pmaxsb %xmm4, %xmm0 6081 ; SSE4-NEXT: pmaxsb %xmm5, %xmm1 6082 ; SSE4-NEXT: pmaxsb %xmm6, %xmm2 6083 ; SSE4-NEXT: pmaxsb %xmm7, %xmm3 6084 ; SSE4-NEXT: retq 6085 ; 6086 ; AVX1-LABEL: test130: 6087 ; AVX1: # BB#0: # %entry 6088 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6089 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6090 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 6091 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 6092 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6093 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6094 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6095 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 6096 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 6097 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6098 ; AVX1-NEXT: retq 6099 ; 6100 ; AVX2-LABEL: test130: 6101 ; AVX2: # BB#0: # %entry 6102 ; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 6103 ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 6104 ; AVX2-NEXT: retq 6105 ; 6106 ; AVX512BW-LABEL: test130: 6107 ; AVX512BW: # BB#0: # %entry 6108 ; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 6109 ; AVX512BW-NEXT: retq 6110 entry: 6111 %cmp = icmp sle <64 x i8> %a, %b 6112 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6113 ret <64 x i8> %sel 6114 } 6115 6116 define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) { 6117 ; SSE2-LABEL: test131: 6118 ; SSE2: # BB#0: # %entry 6119 ; SSE2-NEXT: movdqa %xmm3, %xmm8 6120 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm3 6121 ; SSE2-NEXT: movdqa %xmm2, %xmm9 6122 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm9 6123 ; SSE2-NEXT: movdqa %xmm1, %xmm10 6124 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm10 6125 ; SSE2-NEXT: movdqa %xmm0, %xmm11 6126 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm11 6127 ; SSE2-NEXT: pand %xmm11, %xmm4 6128 ; SSE2-NEXT: pandn %xmm0, %xmm11 6129 ; SSE2-NEXT: por %xmm4, %xmm11 6130 ; SSE2-NEXT: pand %xmm10, %xmm5 6131 ; SSE2-NEXT: pandn %xmm1, %xmm10 6132 ; SSE2-NEXT: por %xmm5, %xmm10 6133 ; SSE2-NEXT: pand %xmm9, %xmm6 6134 ; SSE2-NEXT: pandn %xmm2, %xmm9 6135 ; SSE2-NEXT: por %xmm6, %xmm9 6136 ; SSE2-NEXT: pand %xmm3, %xmm7 6137 ; SSE2-NEXT: pandn %xmm8, %xmm3 6138 ; SSE2-NEXT: por %xmm7, %xmm3 6139 ; SSE2-NEXT: movdqa %xmm11, %xmm0 6140 ; SSE2-NEXT: movdqa %xmm10, %xmm1 6141 ; SSE2-NEXT: movdqa %xmm9, %xmm2 6142 ; SSE2-NEXT: retq 6143 ; 6144 ; SSE4-LABEL: test131: 6145 ; SSE4: # BB#0: # %entry 6146 ; SSE4-NEXT: pminsb %xmm4, %xmm0 6147 ; SSE4-NEXT: pminsb %xmm5, %xmm1 6148 ; SSE4-NEXT: pminsb %xmm6, %xmm2 6149 ; SSE4-NEXT: pminsb %xmm7, %xmm3 6150 ; SSE4-NEXT: retq 6151 ; 6152 ; AVX1-LABEL: test131: 6153 ; AVX1: # BB#0: # %entry 6154 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6155 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6156 ; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 6157 ; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 6158 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6159 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6160 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6161 ; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 6162 ; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 6163 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6164 ; AVX1-NEXT: retq 6165 ; 6166 ; AVX2-LABEL: test131: 6167 ; AVX2: # BB#0: # %entry 6168 ; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 6169 ; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 6170 ; AVX2-NEXT: retq 6171 ; 6172 ; AVX512BW-LABEL: test131: 6173 ; AVX512BW: # BB#0: # %entry 6174 ; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 6175 ; AVX512BW-NEXT: retq 6176 entry: 6177 %cmp = icmp sgt <64 x i8> %a, %b 6178 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6179 ret <64 x i8> %sel 6180 } 6181 6182 define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) { 6183 ; SSE2-LABEL: test132: 6184 ; SSE2: # BB#0: # %entry 6185 ; SSE2-NEXT: movdqa %xmm2, %xmm8 6186 ; SSE2-NEXT: movdqa %xmm0, %xmm10 6187 ; SSE2-NEXT: movdqa %xmm7, %xmm12 6188 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm12 6189 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 6190 ; SSE2-NEXT: movdqa %xmm12, %xmm9 6191 ; SSE2-NEXT: pxor %xmm0, %xmm9 6192 ; SSE2-NEXT: movdqa %xmm6, %xmm13 6193 ; SSE2-NEXT: pcmpgtb %xmm8, %xmm13 6194 ; SSE2-NEXT: movdqa %xmm13, %xmm2 6195 ; SSE2-NEXT: pxor %xmm0, %xmm2 6196 ; SSE2-NEXT: movdqa %xmm5, %xmm14 6197 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm14 6198 ; SSE2-NEXT: movdqa %xmm14, %xmm11 6199 ; SSE2-NEXT: pxor %xmm0, %xmm11 6200 ; SSE2-NEXT: movdqa %xmm4, %xmm15 6201 ; SSE2-NEXT: pcmpgtb %xmm10, %xmm15 6202 ; SSE2-NEXT: pxor %xmm15, %xmm0 6203 ; SSE2-NEXT: pandn %xmm4, %xmm15 6204 ; SSE2-NEXT: pandn %xmm10, %xmm0 6205 ; SSE2-NEXT: por %xmm15, %xmm0 6206 ; SSE2-NEXT: pandn %xmm5, %xmm14 6207 ; SSE2-NEXT: pandn %xmm1, %xmm11 6208 ; SSE2-NEXT: por %xmm14, %xmm11 6209 ; SSE2-NEXT: pandn %xmm6, %xmm13 6210 ; SSE2-NEXT: pandn %xmm8, %xmm2 6211 ; SSE2-NEXT: por %xmm13, %xmm2 6212 ; SSE2-NEXT: pandn %xmm7, %xmm12 6213 ; SSE2-NEXT: pandn %xmm3, %xmm9 6214 ; SSE2-NEXT: por %xmm12, %xmm9 6215 ; SSE2-NEXT: movdqa %xmm11, %xmm1 6216 ; SSE2-NEXT: movdqa %xmm9, %xmm3 6217 ; SSE2-NEXT: retq 6218 ; 6219 ; SSE4-LABEL: test132: 6220 ; SSE4: # BB#0: # %entry 6221 ; SSE4-NEXT: pminsb %xmm4, %xmm0 6222 ; SSE4-NEXT: pminsb %xmm5, %xmm1 6223 ; SSE4-NEXT: pminsb %xmm6, %xmm2 6224 ; SSE4-NEXT: pminsb %xmm7, %xmm3 6225 ; SSE4-NEXT: retq 6226 ; 6227 ; AVX1-LABEL: test132: 6228 ; AVX1: # BB#0: # %entry 6229 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6230 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6231 ; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 6232 ; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 6233 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6234 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6235 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6236 ; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 6237 ; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 6238 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6239 ; AVX1-NEXT: retq 6240 ; 6241 ; AVX2-LABEL: test132: 6242 ; AVX2: # BB#0: # %entry 6243 ; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 6244 ; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 6245 ; AVX2-NEXT: retq 6246 ; 6247 ; AVX512BW-LABEL: test132: 6248 ; AVX512BW: # BB#0: # %entry 6249 ; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 6250 ; AVX512BW-NEXT: retq 6251 entry: 6252 %cmp = icmp sge <64 x i8> %a, %b 6253 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6254 ret <64 x i8> %sel 6255 } 6256 6257 define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) { 6258 ; SSE-LABEL: test133: 6259 ; SSE: # BB#0: # %entry 6260 ; SSE-NEXT: pmaxub %xmm4, %xmm0 6261 ; SSE-NEXT: pmaxub %xmm5, %xmm1 6262 ; SSE-NEXT: pmaxub %xmm6, %xmm2 6263 ; SSE-NEXT: pmaxub %xmm7, %xmm3 6264 ; SSE-NEXT: retq 6265 ; 6266 ; AVX1-LABEL: test133: 6267 ; AVX1: # BB#0: # %entry 6268 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6269 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6270 ; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 6271 ; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 6272 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6273 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6274 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6275 ; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 6276 ; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 6277 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6278 ; AVX1-NEXT: retq 6279 ; 6280 ; AVX2-LABEL: test133: 6281 ; AVX2: # BB#0: # %entry 6282 ; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 6283 ; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 6284 ; AVX2-NEXT: retq 6285 ; 6286 ; AVX512BW-LABEL: test133: 6287 ; AVX512BW: # BB#0: # %entry 6288 ; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 6289 ; AVX512BW-NEXT: retq 6290 entry: 6291 %cmp = icmp ult <64 x i8> %a, %b 6292 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6293 ret <64 x i8> %sel 6294 } 6295 6296 define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) { 6297 ; SSE-LABEL: test134: 6298 ; SSE: # BB#0: # %entry 6299 ; SSE-NEXT: pmaxub %xmm4, %xmm0 6300 ; SSE-NEXT: pmaxub %xmm5, %xmm1 6301 ; SSE-NEXT: pmaxub %xmm6, %xmm2 6302 ; SSE-NEXT: pmaxub %xmm7, %xmm3 6303 ; SSE-NEXT: retq 6304 ; 6305 ; AVX1-LABEL: test134: 6306 ; AVX1: # BB#0: # %entry 6307 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6308 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6309 ; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 6310 ; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 6311 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6312 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6313 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6314 ; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 6315 ; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 6316 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6317 ; AVX1-NEXT: retq 6318 ; 6319 ; AVX2-LABEL: test134: 6320 ; AVX2: # BB#0: # %entry 6321 ; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 6322 ; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 6323 ; AVX2-NEXT: retq 6324 ; 6325 ; AVX512BW-LABEL: test134: 6326 ; AVX512BW: # BB#0: # %entry 6327 ; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 6328 ; AVX512BW-NEXT: retq 6329 entry: 6330 %cmp = icmp ule <64 x i8> %a, %b 6331 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6332 ret <64 x i8> %sel 6333 } 6334 6335 define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) { 6336 ; SSE-LABEL: test135: 6337 ; SSE: # BB#0: # %entry 6338 ; SSE-NEXT: pminub %xmm4, %xmm0 6339 ; SSE-NEXT: pminub %xmm5, %xmm1 6340 ; SSE-NEXT: pminub %xmm6, %xmm2 6341 ; SSE-NEXT: pminub %xmm7, %xmm3 6342 ; SSE-NEXT: retq 6343 ; 6344 ; AVX1-LABEL: test135: 6345 ; AVX1: # BB#0: # %entry 6346 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6347 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6348 ; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 6349 ; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 6350 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6351 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6352 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6353 ; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 6354 ; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 6355 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6356 ; AVX1-NEXT: retq 6357 ; 6358 ; AVX2-LABEL: test135: 6359 ; AVX2: # BB#0: # %entry 6360 ; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 6361 ; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 6362 ; AVX2-NEXT: retq 6363 ; 6364 ; AVX512BW-LABEL: test135: 6365 ; AVX512BW: # BB#0: # %entry 6366 ; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 6367 ; AVX512BW-NEXT: retq 6368 entry: 6369 %cmp = icmp ugt <64 x i8> %a, %b 6370 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6371 ret <64 x i8> %sel 6372 } 6373 6374 define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) { 6375 ; SSE-LABEL: test136: 6376 ; SSE: # BB#0: # %entry 6377 ; SSE-NEXT: pminub %xmm4, %xmm0 6378 ; SSE-NEXT: pminub %xmm5, %xmm1 6379 ; SSE-NEXT: pminub %xmm6, %xmm2 6380 ; SSE-NEXT: pminub %xmm7, %xmm3 6381 ; SSE-NEXT: retq 6382 ; 6383 ; AVX1-LABEL: test136: 6384 ; AVX1: # BB#0: # %entry 6385 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6386 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6387 ; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 6388 ; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 6389 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6390 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6391 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6392 ; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 6393 ; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 6394 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6395 ; AVX1-NEXT: retq 6396 ; 6397 ; AVX2-LABEL: test136: 6398 ; AVX2: # BB#0: # %entry 6399 ; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 6400 ; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 6401 ; AVX2-NEXT: retq 6402 ; 6403 ; AVX512BW-LABEL: test136: 6404 ; AVX512BW: # BB#0: # %entry 6405 ; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 6406 ; AVX512BW-NEXT: retq 6407 entry: 6408 %cmp = icmp uge <64 x i8> %a, %b 6409 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6410 ret <64 x i8> %sel 6411 } 6412 6413 define <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) { 6414 ; SSE-LABEL: test137: 6415 ; SSE: # BB#0: # %entry 6416 ; SSE-NEXT: pmaxsw %xmm4, %xmm0 6417 ; SSE-NEXT: pmaxsw %xmm5, %xmm1 6418 ; SSE-NEXT: pmaxsw %xmm6, %xmm2 6419 ; SSE-NEXT: pmaxsw %xmm7, %xmm3 6420 ; SSE-NEXT: retq 6421 ; 6422 ; AVX1-LABEL: test137: 6423 ; AVX1: # BB#0: # %entry 6424 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6425 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6426 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 6427 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 6428 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6429 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6430 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6431 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 6432 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 6433 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6434 ; AVX1-NEXT: retq 6435 ; 6436 ; AVX2-LABEL: test137: 6437 ; AVX2: # BB#0: # %entry 6438 ; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 6439 ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 6440 ; AVX2-NEXT: retq 6441 ; 6442 ; AVX512BW-LABEL: test137: 6443 ; AVX512BW: # BB#0: # %entry 6444 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 6445 ; AVX512BW-NEXT: retq 6446 entry: 6447 %cmp = icmp slt <32 x i16> %a, %b 6448 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6449 ret <32 x i16> %sel 6450 } 6451 6452 define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) { 6453 ; SSE-LABEL: test138: 6454 ; SSE: # BB#0: # %entry 6455 ; SSE-NEXT: pmaxsw %xmm4, %xmm0 6456 ; SSE-NEXT: pmaxsw %xmm5, %xmm1 6457 ; SSE-NEXT: pmaxsw %xmm6, %xmm2 6458 ; SSE-NEXT: pmaxsw %xmm7, %xmm3 6459 ; SSE-NEXT: retq 6460 ; 6461 ; AVX1-LABEL: test138: 6462 ; AVX1: # BB#0: # %entry 6463 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6464 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6465 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 6466 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 6467 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6468 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6469 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6470 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 6471 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 6472 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6473 ; AVX1-NEXT: retq 6474 ; 6475 ; AVX2-LABEL: test138: 6476 ; AVX2: # BB#0: # %entry 6477 ; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 6478 ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 6479 ; AVX2-NEXT: retq 6480 ; 6481 ; AVX512BW-LABEL: test138: 6482 ; AVX512BW: # BB#0: # %entry 6483 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 6484 ; AVX512BW-NEXT: retq 6485 entry: 6486 %cmp = icmp sle <32 x i16> %a, %b 6487 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6488 ret <32 x i16> %sel 6489 } 6490 6491 define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) { 6492 ; SSE-LABEL: test139: 6493 ; SSE: # BB#0: # %entry 6494 ; SSE-NEXT: pminsw %xmm4, %xmm0 6495 ; SSE-NEXT: pminsw %xmm5, %xmm1 6496 ; SSE-NEXT: pminsw %xmm6, %xmm2 6497 ; SSE-NEXT: pminsw %xmm7, %xmm3 6498 ; SSE-NEXT: retq 6499 ; 6500 ; AVX1-LABEL: test139: 6501 ; AVX1: # BB#0: # %entry 6502 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6503 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6504 ; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 6505 ; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 6506 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6507 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6508 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6509 ; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 6510 ; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 6511 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6512 ; AVX1-NEXT: retq 6513 ; 6514 ; AVX2-LABEL: test139: 6515 ; AVX2: # BB#0: # %entry 6516 ; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 6517 ; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 6518 ; AVX2-NEXT: retq 6519 ; 6520 ; AVX512BW-LABEL: test139: 6521 ; AVX512BW: # BB#0: # %entry 6522 ; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 6523 ; AVX512BW-NEXT: retq 6524 entry: 6525 %cmp = icmp sgt <32 x i16> %a, %b 6526 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6527 ret <32 x i16> %sel 6528 } 6529 6530 define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) { 6531 ; SSE-LABEL: test140: 6532 ; SSE: # BB#0: # %entry 6533 ; SSE-NEXT: pminsw %xmm4, %xmm0 6534 ; SSE-NEXT: pminsw %xmm5, %xmm1 6535 ; SSE-NEXT: pminsw %xmm6, %xmm2 6536 ; SSE-NEXT: pminsw %xmm7, %xmm3 6537 ; SSE-NEXT: retq 6538 ; 6539 ; AVX1-LABEL: test140: 6540 ; AVX1: # BB#0: # %entry 6541 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6542 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6543 ; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 6544 ; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 6545 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6546 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6547 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6548 ; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 6549 ; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 6550 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6551 ; AVX1-NEXT: retq 6552 ; 6553 ; AVX2-LABEL: test140: 6554 ; AVX2: # BB#0: # %entry 6555 ; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 6556 ; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 6557 ; AVX2-NEXT: retq 6558 ; 6559 ; AVX512BW-LABEL: test140: 6560 ; AVX512BW: # BB#0: # %entry 6561 ; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 6562 ; AVX512BW-NEXT: retq 6563 entry: 6564 %cmp = icmp sge <32 x i16> %a, %b 6565 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6566 ret <32 x i16> %sel 6567 } 6568 6569 define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) { 6570 ; SSE2-LABEL: test141: 6571 ; SSE2: # BB#0: # %entry 6572 ; SSE2-NEXT: movdqa %xmm0, %xmm11 6573 ; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [32768,32768,32768,32768,32768,32768,32768,32768] 6574 ; SSE2-NEXT: movdqa %xmm3, %xmm9 6575 ; SSE2-NEXT: pxor %xmm0, %xmm9 6576 ; SSE2-NEXT: movdqa %xmm7, %xmm8 6577 ; SSE2-NEXT: pxor %xmm0, %xmm8 6578 ; SSE2-NEXT: pcmpgtw %xmm9, %xmm8 6579 ; SSE2-NEXT: movdqa %xmm2, %xmm10 6580 ; SSE2-NEXT: pxor %xmm0, %xmm10 6581 ; SSE2-NEXT: movdqa %xmm6, %xmm9 6582 ; SSE2-NEXT: pxor %xmm0, %xmm9 6583 ; SSE2-NEXT: pcmpgtw %xmm10, %xmm9 6584 ; SSE2-NEXT: movdqa %xmm1, %xmm12 6585 ; SSE2-NEXT: pxor %xmm0, %xmm12 6586 ; SSE2-NEXT: movdqa %xmm5, %xmm10 6587 ; SSE2-NEXT: pxor %xmm0, %xmm10 6588 ; SSE2-NEXT: pcmpgtw %xmm12, %xmm10 6589 ; SSE2-NEXT: movdqa %xmm11, %xmm12 6590 ; SSE2-NEXT: pxor %xmm0, %xmm12 6591 ; SSE2-NEXT: pxor %xmm4, %xmm0 6592 ; SSE2-NEXT: pcmpgtw %xmm12, %xmm0 6593 ; SSE2-NEXT: pand %xmm0, %xmm4 6594 ; SSE2-NEXT: pandn %xmm11, %xmm0 6595 ; SSE2-NEXT: por %xmm4, %xmm0 6596 ; SSE2-NEXT: pand %xmm10, %xmm5 6597 ; SSE2-NEXT: pandn %xmm1, %xmm10 6598 ; SSE2-NEXT: por %xmm5, %xmm10 6599 ; SSE2-NEXT: pand %xmm9, %xmm6 6600 ; SSE2-NEXT: pandn %xmm2, %xmm9 6601 ; SSE2-NEXT: por %xmm6, %xmm9 6602 ; SSE2-NEXT: pand %xmm8, %xmm7 6603 ; SSE2-NEXT: pandn %xmm3, %xmm8 6604 ; SSE2-NEXT: por %xmm7, %xmm8 6605 ; SSE2-NEXT: movdqa %xmm10, %xmm1 6606 ; SSE2-NEXT: movdqa %xmm9, %xmm2 6607 ; SSE2-NEXT: movdqa %xmm8, %xmm3 6608 ; SSE2-NEXT: retq 6609 ; 6610 ; SSE4-LABEL: test141: 6611 ; SSE4: # BB#0: # %entry 6612 ; SSE4-NEXT: pmaxuw %xmm4, %xmm0 6613 ; SSE4-NEXT: pmaxuw %xmm5, %xmm1 6614 ; SSE4-NEXT: pmaxuw %xmm6, %xmm2 6615 ; SSE4-NEXT: pmaxuw %xmm7, %xmm3 6616 ; SSE4-NEXT: retq 6617 ; 6618 ; AVX1-LABEL: test141: 6619 ; AVX1: # BB#0: # %entry 6620 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6621 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6622 ; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 6623 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 6624 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6625 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6626 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6627 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 6628 ; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 6629 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6630 ; AVX1-NEXT: retq 6631 ; 6632 ; AVX2-LABEL: test141: 6633 ; AVX2: # BB#0: # %entry 6634 ; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 6635 ; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 6636 ; AVX2-NEXT: retq 6637 ; 6638 ; AVX512BW-LABEL: test141: 6639 ; AVX512BW: # BB#0: # %entry 6640 ; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 6641 ; AVX512BW-NEXT: retq 6642 entry: 6643 %cmp = icmp ult <32 x i16> %a, %b 6644 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6645 ret <32 x i16> %sel 6646 } 6647 6648 define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) { 6649 ; SSE2-LABEL: test142: 6650 ; SSE2: # BB#0: # %entry 6651 ; SSE2-NEXT: movdqa %xmm3, %xmm8 6652 ; SSE2-NEXT: movdqa %xmm2, %xmm9 6653 ; SSE2-NEXT: movdqa %xmm1, %xmm10 6654 ; SSE2-NEXT: psubusw %xmm7, %xmm3 6655 ; SSE2-NEXT: pxor %xmm12, %xmm12 6656 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm3 6657 ; SSE2-NEXT: psubusw %xmm6, %xmm2 6658 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm2 6659 ; SSE2-NEXT: psubusw %xmm5, %xmm1 6660 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm1 6661 ; SSE2-NEXT: movdqa %xmm0, %xmm11 6662 ; SSE2-NEXT: psubusw %xmm4, %xmm11 6663 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm11 6664 ; SSE2-NEXT: pand %xmm11, %xmm4 6665 ; SSE2-NEXT: pandn %xmm0, %xmm11 6666 ; SSE2-NEXT: por %xmm4, %xmm11 6667 ; SSE2-NEXT: pand %xmm1, %xmm5 6668 ; SSE2-NEXT: pandn %xmm10, %xmm1 6669 ; SSE2-NEXT: por %xmm5, %xmm1 6670 ; SSE2-NEXT: pand %xmm2, %xmm6 6671 ; SSE2-NEXT: pandn %xmm9, %xmm2 6672 ; SSE2-NEXT: por %xmm6, %xmm2 6673 ; SSE2-NEXT: pand %xmm3, %xmm7 6674 ; SSE2-NEXT: pandn %xmm8, %xmm3 6675 ; SSE2-NEXT: por %xmm7, %xmm3 6676 ; SSE2-NEXT: movdqa %xmm11, %xmm0 6677 ; SSE2-NEXT: retq 6678 ; 6679 ; SSE4-LABEL: test142: 6680 ; SSE4: # BB#0: # %entry 6681 ; SSE4-NEXT: pmaxuw %xmm4, %xmm0 6682 ; SSE4-NEXT: pmaxuw %xmm5, %xmm1 6683 ; SSE4-NEXT: pmaxuw %xmm6, %xmm2 6684 ; SSE4-NEXT: pmaxuw %xmm7, %xmm3 6685 ; SSE4-NEXT: retq 6686 ; 6687 ; AVX1-LABEL: test142: 6688 ; AVX1: # BB#0: # %entry 6689 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6690 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6691 ; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 6692 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 6693 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6694 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6695 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6696 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 6697 ; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 6698 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6699 ; AVX1-NEXT: retq 6700 ; 6701 ; AVX2-LABEL: test142: 6702 ; AVX2: # BB#0: # %entry 6703 ; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 6704 ; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 6705 ; AVX2-NEXT: retq 6706 ; 6707 ; AVX512BW-LABEL: test142: 6708 ; AVX512BW: # BB#0: # %entry 6709 ; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 6710 ; AVX512BW-NEXT: retq 6711 entry: 6712 %cmp = icmp ule <32 x i16> %a, %b 6713 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6714 ret <32 x i16> %sel 6715 } 6716 6717 define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) { 6718 ; SSE2-LABEL: test143: 6719 ; SSE2: # BB#0: # %entry 6720 ; SSE2-NEXT: movdqa %xmm0, %xmm11 6721 ; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [32768,32768,32768,32768,32768,32768,32768,32768] 6722 ; SSE2-NEXT: movdqa %xmm7, %xmm9 6723 ; SSE2-NEXT: pxor %xmm0, %xmm9 6724 ; SSE2-NEXT: movdqa %xmm3, %xmm8 6725 ; SSE2-NEXT: pxor %xmm0, %xmm8 6726 ; SSE2-NEXT: pcmpgtw %xmm9, %xmm8 6727 ; SSE2-NEXT: movdqa %xmm6, %xmm10 6728 ; SSE2-NEXT: pxor %xmm0, %xmm10 6729 ; SSE2-NEXT: movdqa %xmm2, %xmm9 6730 ; SSE2-NEXT: pxor %xmm0, %xmm9 6731 ; SSE2-NEXT: pcmpgtw %xmm10, %xmm9 6732 ; SSE2-NEXT: movdqa %xmm5, %xmm12 6733 ; SSE2-NEXT: pxor %xmm0, %xmm12 6734 ; SSE2-NEXT: movdqa %xmm1, %xmm10 6735 ; SSE2-NEXT: pxor %xmm0, %xmm10 6736 ; SSE2-NEXT: pcmpgtw %xmm12, %xmm10 6737 ; SSE2-NEXT: movdqa %xmm4, %xmm12 6738 ; SSE2-NEXT: pxor %xmm0, %xmm12 6739 ; SSE2-NEXT: pxor %xmm11, %xmm0 6740 ; SSE2-NEXT: pcmpgtw %xmm12, %xmm0 6741 ; SSE2-NEXT: pand %xmm0, %xmm4 6742 ; SSE2-NEXT: pandn %xmm11, %xmm0 6743 ; SSE2-NEXT: por %xmm4, %xmm0 6744 ; SSE2-NEXT: pand %xmm10, %xmm5 6745 ; SSE2-NEXT: pandn %xmm1, %xmm10 6746 ; SSE2-NEXT: por %xmm5, %xmm10 6747 ; SSE2-NEXT: pand %xmm9, %xmm6 6748 ; SSE2-NEXT: pandn %xmm2, %xmm9 6749 ; SSE2-NEXT: por %xmm6, %xmm9 6750 ; SSE2-NEXT: pand %xmm8, %xmm7 6751 ; SSE2-NEXT: pandn %xmm3, %xmm8 6752 ; SSE2-NEXT: por %xmm7, %xmm8 6753 ; SSE2-NEXT: movdqa %xmm10, %xmm1 6754 ; SSE2-NEXT: movdqa %xmm9, %xmm2 6755 ; SSE2-NEXT: movdqa %xmm8, %xmm3 6756 ; SSE2-NEXT: retq 6757 ; 6758 ; SSE4-LABEL: test143: 6759 ; SSE4: # BB#0: # %entry 6760 ; SSE4-NEXT: pminuw %xmm4, %xmm0 6761 ; SSE4-NEXT: pminuw %xmm5, %xmm1 6762 ; SSE4-NEXT: pminuw %xmm6, %xmm2 6763 ; SSE4-NEXT: pminuw %xmm7, %xmm3 6764 ; SSE4-NEXT: retq 6765 ; 6766 ; AVX1-LABEL: test143: 6767 ; AVX1: # BB#0: # %entry 6768 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6769 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6770 ; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 6771 ; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 6772 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6773 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6774 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6775 ; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 6776 ; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 6777 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6778 ; AVX1-NEXT: retq 6779 ; 6780 ; AVX2-LABEL: test143: 6781 ; AVX2: # BB#0: # %entry 6782 ; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 6783 ; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 6784 ; AVX2-NEXT: retq 6785 ; 6786 ; AVX512BW-LABEL: test143: 6787 ; AVX512BW: # BB#0: # %entry 6788 ; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 6789 ; AVX512BW-NEXT: retq 6790 entry: 6791 %cmp = icmp ugt <32 x i16> %a, %b 6792 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6793 ret <32 x i16> %sel 6794 } 6795 6796 define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) { 6797 ; SSE2-LABEL: test144: 6798 ; SSE2: # BB#0: # %entry 6799 ; SSE2-NEXT: movdqa %xmm3, %xmm8 6800 ; SSE2-NEXT: movdqa %xmm2, %xmm9 6801 ; SSE2-NEXT: movdqa %xmm1, %xmm10 6802 ; SSE2-NEXT: movdqa %xmm7, %xmm3 6803 ; SSE2-NEXT: psubusw %xmm8, %xmm3 6804 ; SSE2-NEXT: pxor %xmm12, %xmm12 6805 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm3 6806 ; SSE2-NEXT: movdqa %xmm6, %xmm2 6807 ; SSE2-NEXT: psubusw %xmm9, %xmm2 6808 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm2 6809 ; SSE2-NEXT: movdqa %xmm5, %xmm1 6810 ; SSE2-NEXT: psubusw %xmm10, %xmm1 6811 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm1 6812 ; SSE2-NEXT: movdqa %xmm4, %xmm11 6813 ; SSE2-NEXT: psubusw %xmm0, %xmm11 6814 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm11 6815 ; SSE2-NEXT: pand %xmm11, %xmm4 6816 ; SSE2-NEXT: pandn %xmm0, %xmm11 6817 ; SSE2-NEXT: por %xmm4, %xmm11 6818 ; SSE2-NEXT: pand %xmm1, %xmm5 6819 ; SSE2-NEXT: pandn %xmm10, %xmm1 6820 ; SSE2-NEXT: por %xmm5, %xmm1 6821 ; SSE2-NEXT: pand %xmm2, %xmm6 6822 ; SSE2-NEXT: pandn %xmm9, %xmm2 6823 ; SSE2-NEXT: por %xmm6, %xmm2 6824 ; SSE2-NEXT: pand %xmm3, %xmm7 6825 ; SSE2-NEXT: pandn %xmm8, %xmm3 6826 ; SSE2-NEXT: por %xmm7, %xmm3 6827 ; SSE2-NEXT: movdqa %xmm11, %xmm0 6828 ; SSE2-NEXT: retq 6829 ; 6830 ; SSE4-LABEL: test144: 6831 ; SSE4: # BB#0: # %entry 6832 ; SSE4-NEXT: pminuw %xmm4, %xmm0 6833 ; SSE4-NEXT: pminuw %xmm5, %xmm1 6834 ; SSE4-NEXT: pminuw %xmm6, %xmm2 6835 ; SSE4-NEXT: pminuw %xmm7, %xmm3 6836 ; SSE4-NEXT: retq 6837 ; 6838 ; AVX1-LABEL: test144: 6839 ; AVX1: # BB#0: # %entry 6840 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6841 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6842 ; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 6843 ; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 6844 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6845 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6846 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6847 ; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 6848 ; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 6849 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6850 ; AVX1-NEXT: retq 6851 ; 6852 ; AVX2-LABEL: test144: 6853 ; AVX2: # BB#0: # %entry 6854 ; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 6855 ; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 6856 ; AVX2-NEXT: retq 6857 ; 6858 ; AVX512BW-LABEL: test144: 6859 ; AVX512BW: # BB#0: # %entry 6860 ; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 6861 ; AVX512BW-NEXT: retq 6862 entry: 6863 %cmp = icmp uge <32 x i16> %a, %b 6864 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6865 ret <32 x i16> %sel 6866 } 6867 6868 define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) { 6869 ; SSE2-LABEL: test145: 6870 ; SSE2: # BB#0: # %entry 6871 ; SSE2-NEXT: movdqa %xmm3, %xmm8 6872 ; SSE2-NEXT: movdqa %xmm7, %xmm3 6873 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm3 6874 ; SSE2-NEXT: movdqa %xmm6, %xmm9 6875 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm9 6876 ; SSE2-NEXT: movdqa %xmm5, %xmm10 6877 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm10 6878 ; SSE2-NEXT: movdqa %xmm4, %xmm11 6879 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm11 6880 ; SSE2-NEXT: pand %xmm11, %xmm4 6881 ; SSE2-NEXT: pandn %xmm0, %xmm11 6882 ; SSE2-NEXT: por %xmm4, %xmm11 6883 ; SSE2-NEXT: pand %xmm10, %xmm5 6884 ; SSE2-NEXT: pandn %xmm1, %xmm10 6885 ; SSE2-NEXT: por %xmm5, %xmm10 6886 ; SSE2-NEXT: pand %xmm9, %xmm6 6887 ; SSE2-NEXT: pandn %xmm2, %xmm9 6888 ; SSE2-NEXT: por %xmm6, %xmm9 6889 ; SSE2-NEXT: pand %xmm3, %xmm7 6890 ; SSE2-NEXT: pandn %xmm8, %xmm3 6891 ; SSE2-NEXT: por %xmm7, %xmm3 6892 ; SSE2-NEXT: movdqa %xmm11, %xmm0 6893 ; SSE2-NEXT: movdqa %xmm10, %xmm1 6894 ; SSE2-NEXT: movdqa %xmm9, %xmm2 6895 ; SSE2-NEXT: retq 6896 ; 6897 ; SSE4-LABEL: test145: 6898 ; SSE4: # BB#0: # %entry 6899 ; SSE4-NEXT: pmaxsd %xmm4, %xmm0 6900 ; SSE4-NEXT: pmaxsd %xmm5, %xmm1 6901 ; SSE4-NEXT: pmaxsd %xmm6, %xmm2 6902 ; SSE4-NEXT: pmaxsd %xmm7, %xmm3 6903 ; SSE4-NEXT: retq 6904 ; 6905 ; AVX1-LABEL: test145: 6906 ; AVX1: # BB#0: # %entry 6907 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6908 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6909 ; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 6910 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 6911 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6912 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6913 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6914 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 6915 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 6916 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6917 ; AVX1-NEXT: retq 6918 ; 6919 ; AVX2-LABEL: test145: 6920 ; AVX2: # BB#0: # %entry 6921 ; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 6922 ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 6923 ; AVX2-NEXT: retq 6924 ; 6925 ; AVX512F-LABEL: test145: 6926 ; AVX512F: # BB#0: # %entry 6927 ; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 6928 ; AVX512F-NEXT: retq 6929 entry: 6930 %cmp = icmp slt <16 x i32> %a, %b 6931 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6932 ret <16 x i32> %sel 6933 } 6934 6935 define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) { 6936 ; SSE2-LABEL: test146: 6937 ; SSE2: # BB#0: # %entry 6938 ; SSE2-NEXT: movdqa %xmm2, %xmm8 6939 ; SSE2-NEXT: movdqa %xmm3, %xmm12 6940 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm12 6941 ; SSE2-NEXT: pcmpeqd %xmm13, %xmm13 6942 ; SSE2-NEXT: movdqa %xmm12, %xmm9 6943 ; SSE2-NEXT: pxor %xmm13, %xmm9 6944 ; SSE2-NEXT: movdqa %xmm8, %xmm14 6945 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm14 6946 ; SSE2-NEXT: movdqa %xmm14, %xmm2 6947 ; SSE2-NEXT: pxor %xmm13, %xmm2 6948 ; SSE2-NEXT: movdqa %xmm1, %xmm15 6949 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm15 6950 ; SSE2-NEXT: movdqa %xmm15, %xmm10 6951 ; SSE2-NEXT: pxor %xmm13, %xmm10 6952 ; SSE2-NEXT: movdqa %xmm0, %xmm11 6953 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm11 6954 ; SSE2-NEXT: pxor %xmm11, %xmm13 6955 ; SSE2-NEXT: pandn %xmm4, %xmm11 6956 ; SSE2-NEXT: pandn %xmm0, %xmm13 6957 ; SSE2-NEXT: por %xmm13, %xmm11 6958 ; SSE2-NEXT: pandn %xmm5, %xmm15 6959 ; SSE2-NEXT: pandn %xmm1, %xmm10 6960 ; SSE2-NEXT: por %xmm15, %xmm10 6961 ; SSE2-NEXT: pandn %xmm6, %xmm14 6962 ; SSE2-NEXT: pandn %xmm8, %xmm2 6963 ; SSE2-NEXT: por %xmm14, %xmm2 6964 ; SSE2-NEXT: pandn %xmm7, %xmm12 6965 ; SSE2-NEXT: pandn %xmm3, %xmm9 6966 ; SSE2-NEXT: por %xmm12, %xmm9 6967 ; SSE2-NEXT: movdqa %xmm11, %xmm0 6968 ; SSE2-NEXT: movdqa %xmm10, %xmm1 6969 ; SSE2-NEXT: movdqa %xmm9, %xmm3 6970 ; SSE2-NEXT: retq 6971 ; 6972 ; SSE4-LABEL: test146: 6973 ; SSE4: # BB#0: # %entry 6974 ; SSE4-NEXT: pmaxsd %xmm4, %xmm0 6975 ; SSE4-NEXT: pmaxsd %xmm5, %xmm1 6976 ; SSE4-NEXT: pmaxsd %xmm6, %xmm2 6977 ; SSE4-NEXT: pmaxsd %xmm7, %xmm3 6978 ; SSE4-NEXT: retq 6979 ; 6980 ; AVX1-LABEL: test146: 6981 ; AVX1: # BB#0: # %entry 6982 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6983 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6984 ; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 6985 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 6986 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6987 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6988 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6989 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 6990 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 6991 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6992 ; AVX1-NEXT: retq 6993 ; 6994 ; AVX2-LABEL: test146: 6995 ; AVX2: # BB#0: # %entry 6996 ; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 6997 ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 6998 ; AVX2-NEXT: retq 6999 ; 7000 ; AVX512F-LABEL: test146: 7001 ; AVX512F: # BB#0: # %entry 7002 ; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 7003 ; AVX512F-NEXT: retq 7004 entry: 7005 %cmp = icmp sle <16 x i32> %a, %b 7006 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7007 ret <16 x i32> %sel 7008 } 7009 7010 define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) { 7011 ; SSE2-LABEL: test147: 7012 ; SSE2: # BB#0: # %entry 7013 ; SSE2-NEXT: movdqa %xmm3, %xmm8 7014 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm3 7015 ; SSE2-NEXT: movdqa %xmm2, %xmm9 7016 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm9 7017 ; SSE2-NEXT: movdqa %xmm1, %xmm10 7018 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm10 7019 ; SSE2-NEXT: movdqa %xmm0, %xmm11 7020 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm11 7021 ; SSE2-NEXT: pand %xmm11, %xmm4 7022 ; SSE2-NEXT: pandn %xmm0, %xmm11 7023 ; SSE2-NEXT: por %xmm4, %xmm11 7024 ; SSE2-NEXT: pand %xmm10, %xmm5 7025 ; SSE2-NEXT: pandn %xmm1, %xmm10 7026 ; SSE2-NEXT: por %xmm5, %xmm10 7027 ; SSE2-NEXT: pand %xmm9, %xmm6 7028 ; SSE2-NEXT: pandn %xmm2, %xmm9 7029 ; SSE2-NEXT: por %xmm6, %xmm9 7030 ; SSE2-NEXT: pand %xmm3, %xmm7 7031 ; SSE2-NEXT: pandn %xmm8, %xmm3 7032 ; SSE2-NEXT: por %xmm7, %xmm3 7033 ; SSE2-NEXT: movdqa %xmm11, %xmm0 7034 ; SSE2-NEXT: movdqa %xmm10, %xmm1 7035 ; SSE2-NEXT: movdqa %xmm9, %xmm2 7036 ; SSE2-NEXT: retq 7037 ; 7038 ; SSE4-LABEL: test147: 7039 ; SSE4: # BB#0: # %entry 7040 ; SSE4-NEXT: pminsd %xmm4, %xmm0 7041 ; SSE4-NEXT: pminsd %xmm5, %xmm1 7042 ; SSE4-NEXT: pminsd %xmm6, %xmm2 7043 ; SSE4-NEXT: pminsd %xmm7, %xmm3 7044 ; SSE4-NEXT: retq 7045 ; 7046 ; AVX1-LABEL: test147: 7047 ; AVX1: # BB#0: # %entry 7048 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7049 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7050 ; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 7051 ; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 7052 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7053 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7054 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7055 ; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 7056 ; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 7057 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7058 ; AVX1-NEXT: retq 7059 ; 7060 ; AVX2-LABEL: test147: 7061 ; AVX2: # BB#0: # %entry 7062 ; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 7063 ; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 7064 ; AVX2-NEXT: retq 7065 ; 7066 ; AVX512F-LABEL: test147: 7067 ; AVX512F: # BB#0: # %entry 7068 ; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0 7069 ; AVX512F-NEXT: retq 7070 entry: 7071 %cmp = icmp sgt <16 x i32> %a, %b 7072 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7073 ret <16 x i32> %sel 7074 } 7075 7076 define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) { 7077 ; SSE2-LABEL: test148: 7078 ; SSE2: # BB#0: # %entry 7079 ; SSE2-NEXT: movdqa %xmm2, %xmm8 7080 ; SSE2-NEXT: movdqa %xmm0, %xmm10 7081 ; SSE2-NEXT: movdqa %xmm7, %xmm12 7082 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm12 7083 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 7084 ; SSE2-NEXT: movdqa %xmm12, %xmm9 7085 ; SSE2-NEXT: pxor %xmm0, %xmm9 7086 ; SSE2-NEXT: movdqa %xmm6, %xmm13 7087 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm13 7088 ; SSE2-NEXT: movdqa %xmm13, %xmm2 7089 ; SSE2-NEXT: pxor %xmm0, %xmm2 7090 ; SSE2-NEXT: movdqa %xmm5, %xmm14 7091 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm14 7092 ; SSE2-NEXT: movdqa %xmm14, %xmm11 7093 ; SSE2-NEXT: pxor %xmm0, %xmm11 7094 ; SSE2-NEXT: movdqa %xmm4, %xmm15 7095 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm15 7096 ; SSE2-NEXT: pxor %xmm15, %xmm0 7097 ; SSE2-NEXT: pandn %xmm4, %xmm15 7098 ; SSE2-NEXT: pandn %xmm10, %xmm0 7099 ; SSE2-NEXT: por %xmm15, %xmm0 7100 ; SSE2-NEXT: pandn %xmm5, %xmm14 7101 ; SSE2-NEXT: pandn %xmm1, %xmm11 7102 ; SSE2-NEXT: por %xmm14, %xmm11 7103 ; SSE2-NEXT: pandn %xmm6, %xmm13 7104 ; SSE2-NEXT: pandn %xmm8, %xmm2 7105 ; SSE2-NEXT: por %xmm13, %xmm2 7106 ; SSE2-NEXT: pandn %xmm7, %xmm12 7107 ; SSE2-NEXT: pandn %xmm3, %xmm9 7108 ; SSE2-NEXT: por %xmm12, %xmm9 7109 ; SSE2-NEXT: movdqa %xmm11, %xmm1 7110 ; SSE2-NEXT: movdqa %xmm9, %xmm3 7111 ; SSE2-NEXT: retq 7112 ; 7113 ; SSE4-LABEL: test148: 7114 ; SSE4: # BB#0: # %entry 7115 ; SSE4-NEXT: pminsd %xmm4, %xmm0 7116 ; SSE4-NEXT: pminsd %xmm5, %xmm1 7117 ; SSE4-NEXT: pminsd %xmm6, %xmm2 7118 ; SSE4-NEXT: pminsd %xmm7, %xmm3 7119 ; SSE4-NEXT: retq 7120 ; 7121 ; AVX1-LABEL: test148: 7122 ; AVX1: # BB#0: # %entry 7123 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7124 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7125 ; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 7126 ; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 7127 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7128 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7129 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7130 ; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 7131 ; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 7132 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7133 ; AVX1-NEXT: retq 7134 ; 7135 ; AVX2-LABEL: test148: 7136 ; AVX2: # BB#0: # %entry 7137 ; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 7138 ; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 7139 ; AVX2-NEXT: retq 7140 ; 7141 ; AVX512F-LABEL: test148: 7142 ; AVX512F: # BB#0: # %entry 7143 ; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0 7144 ; AVX512F-NEXT: retq 7145 entry: 7146 %cmp = icmp sge <16 x i32> %a, %b 7147 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7148 ret <16 x i32> %sel 7149 } 7150 7151 define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) { 7152 ; SSE2-LABEL: test149: 7153 ; SSE2: # BB#0: # %entry 7154 ; SSE2-NEXT: movdqa %xmm0, %xmm11 7155 ; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648] 7156 ; SSE2-NEXT: movdqa %xmm3, %xmm9 7157 ; SSE2-NEXT: pxor %xmm0, %xmm9 7158 ; SSE2-NEXT: movdqa %xmm7, %xmm8 7159 ; SSE2-NEXT: pxor %xmm0, %xmm8 7160 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm8 7161 ; SSE2-NEXT: movdqa %xmm2, %xmm10 7162 ; SSE2-NEXT: pxor %xmm0, %xmm10 7163 ; SSE2-NEXT: movdqa %xmm6, %xmm9 7164 ; SSE2-NEXT: pxor %xmm0, %xmm9 7165 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm9 7166 ; SSE2-NEXT: movdqa %xmm1, %xmm12 7167 ; SSE2-NEXT: pxor %xmm0, %xmm12 7168 ; SSE2-NEXT: movdqa %xmm5, %xmm10 7169 ; SSE2-NEXT: pxor %xmm0, %xmm10 7170 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm10 7171 ; SSE2-NEXT: movdqa %xmm11, %xmm12 7172 ; SSE2-NEXT: pxor %xmm0, %xmm12 7173 ; SSE2-NEXT: pxor %xmm4, %xmm0 7174 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm0 7175 ; SSE2-NEXT: pand %xmm0, %xmm4 7176 ; SSE2-NEXT: pandn %xmm11, %xmm0 7177 ; SSE2-NEXT: por %xmm4, %xmm0 7178 ; SSE2-NEXT: pand %xmm10, %xmm5 7179 ; SSE2-NEXT: pandn %xmm1, %xmm10 7180 ; SSE2-NEXT: por %xmm5, %xmm10 7181 ; SSE2-NEXT: pand %xmm9, %xmm6 7182 ; SSE2-NEXT: pandn %xmm2, %xmm9 7183 ; SSE2-NEXT: por %xmm6, %xmm9 7184 ; SSE2-NEXT: pand %xmm8, %xmm7 7185 ; SSE2-NEXT: pandn %xmm3, %xmm8 7186 ; SSE2-NEXT: por %xmm7, %xmm8 7187 ; SSE2-NEXT: movdqa %xmm10, %xmm1 7188 ; SSE2-NEXT: movdqa %xmm9, %xmm2 7189 ; SSE2-NEXT: movdqa %xmm8, %xmm3 7190 ; SSE2-NEXT: retq 7191 ; 7192 ; SSE4-LABEL: test149: 7193 ; SSE4: # BB#0: # %entry 7194 ; SSE4-NEXT: pmaxud %xmm4, %xmm0 7195 ; SSE4-NEXT: pmaxud %xmm5, %xmm1 7196 ; SSE4-NEXT: pmaxud %xmm6, %xmm2 7197 ; SSE4-NEXT: pmaxud %xmm7, %xmm3 7198 ; SSE4-NEXT: retq 7199 ; 7200 ; AVX1-LABEL: test149: 7201 ; AVX1: # BB#0: # %entry 7202 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7203 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7204 ; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 7205 ; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 7206 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7207 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7208 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7209 ; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 7210 ; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 7211 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7212 ; AVX1-NEXT: retq 7213 ; 7214 ; AVX2-LABEL: test149: 7215 ; AVX2: # BB#0: # %entry 7216 ; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 7217 ; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 7218 ; AVX2-NEXT: retq 7219 ; 7220 ; AVX512F-LABEL: test149: 7221 ; AVX512F: # BB#0: # %entry 7222 ; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 7223 ; AVX512F-NEXT: retq 7224 entry: 7225 %cmp = icmp ult <16 x i32> %a, %b 7226 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7227 ret <16 x i32> %sel 7228 } 7229 7230 define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) { 7231 ; SSE2-LABEL: test150: 7232 ; SSE2: # BB#0: # %entry 7233 ; SSE2-NEXT: movdqa %xmm0, %xmm10 7234 ; SSE2-NEXT: movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648] 7235 ; SSE2-NEXT: movdqa %xmm7, %xmm0 7236 ; SSE2-NEXT: pxor %xmm14, %xmm0 7237 ; SSE2-NEXT: movdqa %xmm3, %xmm12 7238 ; SSE2-NEXT: pxor %xmm14, %xmm12 7239 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm12 7240 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 7241 ; SSE2-NEXT: movdqa %xmm12, %xmm8 7242 ; SSE2-NEXT: pxor %xmm0, %xmm8 7243 ; SSE2-NEXT: movdqa %xmm6, %xmm9 7244 ; SSE2-NEXT: pxor %xmm14, %xmm9 7245 ; SSE2-NEXT: movdqa %xmm2, %xmm13 7246 ; SSE2-NEXT: pxor %xmm14, %xmm13 7247 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm13 7248 ; SSE2-NEXT: movdqa %xmm13, %xmm9 7249 ; SSE2-NEXT: pxor %xmm0, %xmm9 7250 ; SSE2-NEXT: movdqa %xmm5, %xmm11 7251 ; SSE2-NEXT: pxor %xmm14, %xmm11 7252 ; SSE2-NEXT: movdqa %xmm1, %xmm15 7253 ; SSE2-NEXT: pxor %xmm14, %xmm15 7254 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 7255 ; SSE2-NEXT: movdqa %xmm4, %xmm11 7256 ; SSE2-NEXT: pxor %xmm14, %xmm11 7257 ; SSE2-NEXT: pxor %xmm10, %xmm14 7258 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 7259 ; SSE2-NEXT: movdqa %xmm15, %xmm11 7260 ; SSE2-NEXT: pxor %xmm0, %xmm11 7261 ; SSE2-NEXT: pxor %xmm14, %xmm0 7262 ; SSE2-NEXT: pandn %xmm4, %xmm14 7263 ; SSE2-NEXT: pandn %xmm10, %xmm0 7264 ; SSE2-NEXT: por %xmm14, %xmm0 7265 ; SSE2-NEXT: pandn %xmm5, %xmm15 7266 ; SSE2-NEXT: pandn %xmm1, %xmm11 7267 ; SSE2-NEXT: por %xmm15, %xmm11 7268 ; SSE2-NEXT: pandn %xmm6, %xmm13 7269 ; SSE2-NEXT: pandn %xmm2, %xmm9 7270 ; SSE2-NEXT: por %xmm13, %xmm9 7271 ; SSE2-NEXT: pandn %xmm7, %xmm12 7272 ; SSE2-NEXT: pandn %xmm3, %xmm8 7273 ; SSE2-NEXT: por %xmm12, %xmm8 7274 ; SSE2-NEXT: movdqa %xmm11, %xmm1 7275 ; SSE2-NEXT: movdqa %xmm9, %xmm2 7276 ; SSE2-NEXT: movdqa %xmm8, %xmm3 7277 ; SSE2-NEXT: retq 7278 ; 7279 ; SSE4-LABEL: test150: 7280 ; SSE4: # BB#0: # %entry 7281 ; SSE4-NEXT: pmaxud %xmm4, %xmm0 7282 ; SSE4-NEXT: pmaxud %xmm5, %xmm1 7283 ; SSE4-NEXT: pmaxud %xmm6, %xmm2 7284 ; SSE4-NEXT: pmaxud %xmm7, %xmm3 7285 ; SSE4-NEXT: retq 7286 ; 7287 ; AVX1-LABEL: test150: 7288 ; AVX1: # BB#0: # %entry 7289 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7290 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7291 ; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 7292 ; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 7293 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7294 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7295 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7296 ; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 7297 ; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 7298 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7299 ; AVX1-NEXT: retq 7300 ; 7301 ; AVX2-LABEL: test150: 7302 ; AVX2: # BB#0: # %entry 7303 ; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 7304 ; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 7305 ; AVX2-NEXT: retq 7306 ; 7307 ; AVX512F-LABEL: test150: 7308 ; AVX512F: # BB#0: # %entry 7309 ; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 7310 ; AVX512F-NEXT: retq 7311 entry: 7312 %cmp = icmp ule <16 x i32> %a, %b 7313 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7314 ret <16 x i32> %sel 7315 } 7316 7317 define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) { 7318 ; SSE2-LABEL: test151: 7319 ; SSE2: # BB#0: # %entry 7320 ; SSE2-NEXT: movdqa %xmm0, %xmm11 7321 ; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648] 7322 ; SSE2-NEXT: movdqa %xmm7, %xmm9 7323 ; SSE2-NEXT: pxor %xmm0, %xmm9 7324 ; SSE2-NEXT: movdqa %xmm3, %xmm8 7325 ; SSE2-NEXT: pxor %xmm0, %xmm8 7326 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm8 7327 ; SSE2-NEXT: movdqa %xmm6, %xmm10 7328 ; SSE2-NEXT: pxor %xmm0, %xmm10 7329 ; SSE2-NEXT: movdqa %xmm2, %xmm9 7330 ; SSE2-NEXT: pxor %xmm0, %xmm9 7331 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm9 7332 ; SSE2-NEXT: movdqa %xmm5, %xmm12 7333 ; SSE2-NEXT: pxor %xmm0, %xmm12 7334 ; SSE2-NEXT: movdqa %xmm1, %xmm10 7335 ; SSE2-NEXT: pxor %xmm0, %xmm10 7336 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm10 7337 ; SSE2-NEXT: movdqa %xmm4, %xmm12 7338 ; SSE2-NEXT: pxor %xmm0, %xmm12 7339 ; SSE2-NEXT: pxor %xmm11, %xmm0 7340 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm0 7341 ; SSE2-NEXT: pand %xmm0, %xmm4 7342 ; SSE2-NEXT: pandn %xmm11, %xmm0 7343 ; SSE2-NEXT: por %xmm4, %xmm0 7344 ; SSE2-NEXT: pand %xmm10, %xmm5 7345 ; SSE2-NEXT: pandn %xmm1, %xmm10 7346 ; SSE2-NEXT: por %xmm5, %xmm10 7347 ; SSE2-NEXT: pand %xmm9, %xmm6 7348 ; SSE2-NEXT: pandn %xmm2, %xmm9 7349 ; SSE2-NEXT: por %xmm6, %xmm9 7350 ; SSE2-NEXT: pand %xmm8, %xmm7 7351 ; SSE2-NEXT: pandn %xmm3, %xmm8 7352 ; SSE2-NEXT: por %xmm7, %xmm8 7353 ; SSE2-NEXT: movdqa %xmm10, %xmm1 7354 ; SSE2-NEXT: movdqa %xmm9, %xmm2 7355 ; SSE2-NEXT: movdqa %xmm8, %xmm3 7356 ; SSE2-NEXT: retq 7357 ; 7358 ; SSE4-LABEL: test151: 7359 ; SSE4: # BB#0: # %entry 7360 ; SSE4-NEXT: pminud %xmm4, %xmm0 7361 ; SSE4-NEXT: pminud %xmm5, %xmm1 7362 ; SSE4-NEXT: pminud %xmm6, %xmm2 7363 ; SSE4-NEXT: pminud %xmm7, %xmm3 7364 ; SSE4-NEXT: retq 7365 ; 7366 ; AVX1-LABEL: test151: 7367 ; AVX1: # BB#0: # %entry 7368 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7369 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7370 ; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 7371 ; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 7372 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7373 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7374 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7375 ; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 7376 ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 7377 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7378 ; AVX1-NEXT: retq 7379 ; 7380 ; AVX2-LABEL: test151: 7381 ; AVX2: # BB#0: # %entry 7382 ; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 7383 ; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 7384 ; AVX2-NEXT: retq 7385 ; 7386 ; AVX512F-LABEL: test151: 7387 ; AVX512F: # BB#0: # %entry 7388 ; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0 7389 ; AVX512F-NEXT: retq 7390 entry: 7391 %cmp = icmp ugt <16 x i32> %a, %b 7392 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7393 ret <16 x i32> %sel 7394 } 7395 7396 define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) { 7397 ; SSE2-LABEL: test152: 7398 ; SSE2: # BB#0: # %entry 7399 ; SSE2-NEXT: movdqa %xmm0, %xmm10 7400 ; SSE2-NEXT: movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648] 7401 ; SSE2-NEXT: movdqa %xmm3, %xmm0 7402 ; SSE2-NEXT: pxor %xmm14, %xmm0 7403 ; SSE2-NEXT: movdqa %xmm7, %xmm12 7404 ; SSE2-NEXT: pxor %xmm14, %xmm12 7405 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm12 7406 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 7407 ; SSE2-NEXT: movdqa %xmm12, %xmm8 7408 ; SSE2-NEXT: pxor %xmm0, %xmm8 7409 ; SSE2-NEXT: movdqa %xmm2, %xmm9 7410 ; SSE2-NEXT: pxor %xmm14, %xmm9 7411 ; SSE2-NEXT: movdqa %xmm6, %xmm13 7412 ; SSE2-NEXT: pxor %xmm14, %xmm13 7413 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm13 7414 ; SSE2-NEXT: movdqa %xmm13, %xmm9 7415 ; SSE2-NEXT: pxor %xmm0, %xmm9 7416 ; SSE2-NEXT: movdqa %xmm1, %xmm11 7417 ; SSE2-NEXT: pxor %xmm14, %xmm11 7418 ; SSE2-NEXT: movdqa %xmm5, %xmm15 7419 ; SSE2-NEXT: pxor %xmm14, %xmm15 7420 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 7421 ; SSE2-NEXT: movdqa %xmm10, %xmm11 7422 ; SSE2-NEXT: pxor %xmm14, %xmm11 7423 ; SSE2-NEXT: pxor %xmm4, %xmm14 7424 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 7425 ; SSE2-NEXT: movdqa %xmm15, %xmm11 7426 ; SSE2-NEXT: pxor %xmm0, %xmm11 7427 ; SSE2-NEXT: pxor %xmm14, %xmm0 7428 ; SSE2-NEXT: pandn %xmm4, %xmm14 7429 ; SSE2-NEXT: pandn %xmm10, %xmm0 7430 ; SSE2-NEXT: por %xmm14, %xmm0 7431 ; SSE2-NEXT: pandn %xmm5, %xmm15 7432 ; SSE2-NEXT: pandn %xmm1, %xmm11 7433 ; SSE2-NEXT: por %xmm15, %xmm11 7434 ; SSE2-NEXT: pandn %xmm6, %xmm13 7435 ; SSE2-NEXT: pandn %xmm2, %xmm9 7436 ; SSE2-NEXT: por %xmm13, %xmm9 7437 ; SSE2-NEXT: pandn %xmm7, %xmm12 7438 ; SSE2-NEXT: pandn %xmm3, %xmm8 7439 ; SSE2-NEXT: por %xmm12, %xmm8 7440 ; SSE2-NEXT: movdqa %xmm11, %xmm1 7441 ; SSE2-NEXT: movdqa %xmm9, %xmm2 7442 ; SSE2-NEXT: movdqa %xmm8, %xmm3 7443 ; SSE2-NEXT: retq 7444 ; 7445 ; SSE4-LABEL: test152: 7446 ; SSE4: # BB#0: # %entry 7447 ; SSE4-NEXT: pminud %xmm4, %xmm0 7448 ; SSE4-NEXT: pminud %xmm5, %xmm1 7449 ; SSE4-NEXT: pminud %xmm6, %xmm2 7450 ; SSE4-NEXT: pminud %xmm7, %xmm3 7451 ; SSE4-NEXT: retq 7452 ; 7453 ; AVX1-LABEL: test152: 7454 ; AVX1: # BB#0: # %entry 7455 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7456 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7457 ; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 7458 ; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 7459 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7460 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7461 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7462 ; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 7463 ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 7464 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7465 ; AVX1-NEXT: retq 7466 ; 7467 ; AVX2-LABEL: test152: 7468 ; AVX2: # BB#0: # %entry 7469 ; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 7470 ; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 7471 ; AVX2-NEXT: retq 7472 ; 7473 ; AVX512F-LABEL: test152: 7474 ; AVX512F: # BB#0: # %entry 7475 ; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0 7476 ; AVX512F-NEXT: retq 7477 entry: 7478 %cmp = icmp uge <16 x i32> %a, %b 7479 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7480 ret <16 x i32> %sel 7481 } 7482 7483 ; ----------------------- 7484 7485 define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) { 7486 ; SSE2-LABEL: test153: 7487 ; SSE2: # BB#0: # %entry 7488 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,0,2147483648,0] 7489 ; SSE2-NEXT: movdqa %xmm3, %xmm8 7490 ; SSE2-NEXT: pxor %xmm11, %xmm8 7491 ; SSE2-NEXT: movdqa %xmm7, %xmm9 7492 ; SSE2-NEXT: pxor %xmm11, %xmm9 7493 ; SSE2-NEXT: movdqa %xmm9, %xmm10 7494 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm10 7495 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2] 7496 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm9 7497 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 7498 ; SSE2-NEXT: pand %xmm12, %xmm9 7499 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3] 7500 ; SSE2-NEXT: por %xmm9, %xmm8 7501 ; SSE2-NEXT: movdqa %xmm2, %xmm9 7502 ; SSE2-NEXT: pxor %xmm11, %xmm9 7503 ; SSE2-NEXT: movdqa %xmm6, %xmm10 7504 ; SSE2-NEXT: pxor %xmm11, %xmm10 7505 ; SSE2-NEXT: movdqa %xmm10, %xmm12 7506 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm12 7507 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 7508 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7509 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 7510 ; SSE2-NEXT: pand %xmm13, %xmm10 7511 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3] 7512 ; SSE2-NEXT: por %xmm10, %xmm9 7513 ; SSE2-NEXT: movdqa %xmm1, %xmm10 7514 ; SSE2-NEXT: pxor %xmm11, %xmm10 7515 ; SSE2-NEXT: movdqa %xmm5, %xmm12 7516 ; SSE2-NEXT: pxor %xmm11, %xmm12 7517 ; SSE2-NEXT: movdqa %xmm12, %xmm13 7518 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm13 7519 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 7520 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm12 7521 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3] 7522 ; SSE2-NEXT: pand %xmm14, %xmm12 7523 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3] 7524 ; SSE2-NEXT: por %xmm12, %xmm10 7525 ; SSE2-NEXT: movdqa %xmm0, %xmm12 7526 ; SSE2-NEXT: pxor %xmm11, %xmm12 7527 ; SSE2-NEXT: pxor %xmm4, %xmm11 7528 ; SSE2-NEXT: movdqa %xmm11, %xmm13 7529 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm13 7530 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 7531 ; SSE2-NEXT: pcmpeqd %xmm12, %xmm11 7532 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 7533 ; SSE2-NEXT: pand %xmm14, %xmm12 7534 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 7535 ; SSE2-NEXT: por %xmm12, %xmm11 7536 ; SSE2-NEXT: pand %xmm11, %xmm4 7537 ; SSE2-NEXT: pandn %xmm0, %xmm11 7538 ; SSE2-NEXT: por %xmm4, %xmm11 7539 ; SSE2-NEXT: pand %xmm10, %xmm5 7540 ; SSE2-NEXT: pandn %xmm1, %xmm10 7541 ; SSE2-NEXT: por %xmm5, %xmm10 7542 ; SSE2-NEXT: pand %xmm9, %xmm6 7543 ; SSE2-NEXT: pandn %xmm2, %xmm9 7544 ; SSE2-NEXT: por %xmm6, %xmm9 7545 ; SSE2-NEXT: pand %xmm8, %xmm7 7546 ; SSE2-NEXT: pandn %xmm3, %xmm8 7547 ; SSE2-NEXT: por %xmm7, %xmm8 7548 ; SSE2-NEXT: movdqa %xmm11, %xmm0 7549 ; SSE2-NEXT: movdqa %xmm10, %xmm1 7550 ; SSE2-NEXT: movdqa %xmm9, %xmm2 7551 ; SSE2-NEXT: movdqa %xmm8, %xmm3 7552 ; SSE2-NEXT: retq 7553 ; 7554 ; SSE4-LABEL: test153: 7555 ; SSE4: # BB#0: # %entry 7556 ; SSE4-NEXT: movdqa %xmm0, %xmm8 7557 ; SSE4-NEXT: movdqa %xmm7, %xmm9 7558 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm9 7559 ; SSE4-NEXT: movdqa %xmm6, %xmm10 7560 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm10 7561 ; SSE4-NEXT: movdqa %xmm5, %xmm11 7562 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm11 7563 ; SSE4-NEXT: movdqa %xmm4, %xmm0 7564 ; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 7565 ; SSE4-NEXT: blendvpd %xmm4, %xmm8 7566 ; SSE4-NEXT: movdqa %xmm11, %xmm0 7567 ; SSE4-NEXT: blendvpd %xmm5, %xmm1 7568 ; SSE4-NEXT: movdqa %xmm10, %xmm0 7569 ; SSE4-NEXT: blendvpd %xmm6, %xmm2 7570 ; SSE4-NEXT: movdqa %xmm9, %xmm0 7571 ; SSE4-NEXT: blendvpd %xmm7, %xmm3 7572 ; SSE4-NEXT: movapd %xmm8, %xmm0 7573 ; SSE4-NEXT: retq 7574 ; 7575 ; AVX1-LABEL: test153: 7576 ; AVX1: # BB#0: # %entry 7577 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7578 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5 7579 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7580 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm5 7581 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7582 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7583 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 7584 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 7585 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm6 7586 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5 7587 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 7588 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 7589 ; AVX1-NEXT: retq 7590 ; 7591 ; AVX2-LABEL: test153: 7592 ; AVX2: # BB#0: # %entry 7593 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm4 7594 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm5 7595 ; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 7596 ; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 7597 ; AVX2-NEXT: retq 7598 ; 7599 ; AVX512F-LABEL: test153: 7600 ; AVX512F: # BB#0: # %entry 7601 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 7602 ; AVX512F-NEXT: retq 7603 entry: 7604 %cmp = icmp slt <8 x i64> %a, %b 7605 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7606 ret <8 x i64> %sel 7607 } 7608 7609 define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) { 7610 ; SSE2-LABEL: test154: 7611 ; SSE2: # BB#0: # %entry 7612 ; SSE2-NEXT: movdqa %xmm7, %xmm8 7613 ; SSE2-NEXT: movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill 7614 ; SSE2-NEXT: movdqa %xmm3, %xmm7 7615 ; SSE2-NEXT: movdqa %xmm2, %xmm3 7616 ; SSE2-NEXT: movdqa %xmm1, %xmm2 7617 ; SSE2-NEXT: movdqa %xmm0, %xmm9 7618 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0] 7619 ; SSE2-NEXT: pxor %xmm10, %xmm8 7620 ; SSE2-NEXT: movdqa %xmm7, %xmm0 7621 ; SSE2-NEXT: pxor %xmm10, %xmm0 7622 ; SSE2-NEXT: movdqa %xmm0, %xmm11 7623 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 7624 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7625 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 7626 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 7627 ; SSE2-NEXT: pand %xmm12, %xmm0 7628 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 7629 ; SSE2-NEXT: por %xmm0, %xmm12 7630 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 7631 ; SSE2-NEXT: movdqa %xmm12, %xmm8 7632 ; SSE2-NEXT: pxor %xmm1, %xmm8 7633 ; SSE2-NEXT: movdqa %xmm6, %xmm11 7634 ; SSE2-NEXT: pxor %xmm10, %xmm11 7635 ; SSE2-NEXT: movdqa %xmm3, %xmm13 7636 ; SSE2-NEXT: pxor %xmm10, %xmm13 7637 ; SSE2-NEXT: movdqa %xmm13, %xmm14 7638 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 7639 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 7640 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 7641 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 7642 ; SSE2-NEXT: pand %xmm15, %xmm11 7643 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 7644 ; SSE2-NEXT: por %xmm11, %xmm13 7645 ; SSE2-NEXT: movdqa %xmm5, %xmm11 7646 ; SSE2-NEXT: pxor %xmm10, %xmm11 7647 ; SSE2-NEXT: movdqa %xmm2, %xmm14 7648 ; SSE2-NEXT: pxor %xmm10, %xmm14 7649 ; SSE2-NEXT: movdqa %xmm14, %xmm15 7650 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 7651 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 7652 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 7653 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 7654 ; SSE2-NEXT: pand %xmm11, %xmm14 7655 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 7656 ; SSE2-NEXT: por %xmm14, %xmm15 7657 ; SSE2-NEXT: movdqa %xmm4, %xmm11 7658 ; SSE2-NEXT: pxor %xmm10, %xmm11 7659 ; SSE2-NEXT: pxor %xmm9, %xmm10 7660 ; SSE2-NEXT: movdqa %xmm10, %xmm14 7661 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 7662 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 7663 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 7664 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 7665 ; SSE2-NEXT: pand %xmm11, %xmm0 7666 ; SSE2-NEXT: movdqa %xmm13, %xmm10 7667 ; SSE2-NEXT: pxor %xmm1, %xmm10 7668 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 7669 ; SSE2-NEXT: por %xmm0, %xmm14 7670 ; SSE2-NEXT: movdqa %xmm15, %xmm11 7671 ; SSE2-NEXT: pxor %xmm1, %xmm11 7672 ; SSE2-NEXT: pxor %xmm14, %xmm1 7673 ; SSE2-NEXT: pandn %xmm4, %xmm14 7674 ; SSE2-NEXT: pandn %xmm9, %xmm1 7675 ; SSE2-NEXT: por %xmm14, %xmm1 7676 ; SSE2-NEXT: pandn %xmm5, %xmm15 7677 ; SSE2-NEXT: pandn %xmm2, %xmm11 7678 ; SSE2-NEXT: por %xmm15, %xmm11 7679 ; SSE2-NEXT: pandn %xmm6, %xmm13 7680 ; SSE2-NEXT: pandn %xmm3, %xmm10 7681 ; SSE2-NEXT: por %xmm13, %xmm10 7682 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload 7683 ; SSE2-NEXT: pandn %xmm7, %xmm8 7684 ; SSE2-NEXT: por %xmm12, %xmm8 7685 ; SSE2-NEXT: movdqa %xmm1, %xmm0 7686 ; SSE2-NEXT: movdqa %xmm11, %xmm1 7687 ; SSE2-NEXT: movdqa %xmm10, %xmm2 7688 ; SSE2-NEXT: movdqa %xmm8, %xmm3 7689 ; SSE2-NEXT: retq 7690 ; 7691 ; SSE4-LABEL: test154: 7692 ; SSE4: # BB#0: # %entry 7693 ; SSE4-NEXT: movdqa %xmm0, %xmm8 7694 ; SSE4-NEXT: movdqa %xmm3, %xmm9 7695 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm9 7696 ; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 7697 ; SSE4-NEXT: pxor %xmm12, %xmm9 7698 ; SSE4-NEXT: movdqa %xmm2, %xmm10 7699 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm10 7700 ; SSE4-NEXT: pxor %xmm12, %xmm10 7701 ; SSE4-NEXT: movdqa %xmm1, %xmm11 7702 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm11 7703 ; SSE4-NEXT: pxor %xmm12, %xmm11 7704 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7705 ; SSE4-NEXT: pxor %xmm12, %xmm0 7706 ; SSE4-NEXT: blendvpd %xmm4, %xmm8 7707 ; SSE4-NEXT: movdqa %xmm11, %xmm0 7708 ; SSE4-NEXT: blendvpd %xmm5, %xmm1 7709 ; SSE4-NEXT: movdqa %xmm10, %xmm0 7710 ; SSE4-NEXT: blendvpd %xmm6, %xmm2 7711 ; SSE4-NEXT: movdqa %xmm9, %xmm0 7712 ; SSE4-NEXT: blendvpd %xmm7, %xmm3 7713 ; SSE4-NEXT: movapd %xmm8, %xmm0 7714 ; SSE4-NEXT: retq 7715 ; 7716 ; AVX1-LABEL: test154: 7717 ; AVX1: # BB#0: # %entry 7718 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7719 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 7720 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7721 ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5 7722 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7723 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm6 7724 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7725 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 7726 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 7727 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7 7728 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 7729 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7730 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm7 7731 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm5 7732 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 7733 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 7734 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 7735 ; AVX1-NEXT: retq 7736 ; 7737 ; AVX2-LABEL: test154: 7738 ; AVX2: # BB#0: # %entry 7739 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm4 7740 ; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5 7741 ; AVX2-NEXT: vpxor %ymm5, %ymm4, %ymm4 7742 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm6 7743 ; AVX2-NEXT: vpxor %ymm5, %ymm6, %ymm5 7744 ; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 7745 ; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 7746 ; AVX2-NEXT: retq 7747 ; 7748 ; AVX512F-LABEL: test154: 7749 ; AVX512F: # BB#0: # %entry 7750 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 7751 ; AVX512F-NEXT: retq 7752 entry: 7753 %cmp = icmp sle <8 x i64> %a, %b 7754 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7755 ret <8 x i64> %sel 7756 } 7757 7758 define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) { 7759 ; SSE2-LABEL: test155: 7760 ; SSE2: # BB#0: # %entry 7761 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,0,2147483648,0] 7762 ; SSE2-NEXT: movdqa %xmm7, %xmm8 7763 ; SSE2-NEXT: pxor %xmm11, %xmm8 7764 ; SSE2-NEXT: movdqa %xmm3, %xmm9 7765 ; SSE2-NEXT: pxor %xmm11, %xmm9 7766 ; SSE2-NEXT: movdqa %xmm9, %xmm10 7767 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm10 7768 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2] 7769 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm9 7770 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 7771 ; SSE2-NEXT: pand %xmm12, %xmm9 7772 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3] 7773 ; SSE2-NEXT: por %xmm9, %xmm8 7774 ; SSE2-NEXT: movdqa %xmm6, %xmm9 7775 ; SSE2-NEXT: pxor %xmm11, %xmm9 7776 ; SSE2-NEXT: movdqa %xmm2, %xmm10 7777 ; SSE2-NEXT: pxor %xmm11, %xmm10 7778 ; SSE2-NEXT: movdqa %xmm10, %xmm12 7779 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm12 7780 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 7781 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7782 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 7783 ; SSE2-NEXT: pand %xmm13, %xmm10 7784 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3] 7785 ; SSE2-NEXT: por %xmm10, %xmm9 7786 ; SSE2-NEXT: movdqa %xmm5, %xmm10 7787 ; SSE2-NEXT: pxor %xmm11, %xmm10 7788 ; SSE2-NEXT: movdqa %xmm1, %xmm12 7789 ; SSE2-NEXT: pxor %xmm11, %xmm12 7790 ; SSE2-NEXT: movdqa %xmm12, %xmm13 7791 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm13 7792 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 7793 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm12 7794 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3] 7795 ; SSE2-NEXT: pand %xmm14, %xmm12 7796 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3] 7797 ; SSE2-NEXT: por %xmm12, %xmm10 7798 ; SSE2-NEXT: movdqa %xmm4, %xmm12 7799 ; SSE2-NEXT: pxor %xmm11, %xmm12 7800 ; SSE2-NEXT: pxor %xmm0, %xmm11 7801 ; SSE2-NEXT: movdqa %xmm11, %xmm13 7802 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm13 7803 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 7804 ; SSE2-NEXT: pcmpeqd %xmm12, %xmm11 7805 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 7806 ; SSE2-NEXT: pand %xmm14, %xmm12 7807 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 7808 ; SSE2-NEXT: por %xmm12, %xmm11 7809 ; SSE2-NEXT: pand %xmm11, %xmm4 7810 ; SSE2-NEXT: pandn %xmm0, %xmm11 7811 ; SSE2-NEXT: por %xmm4, %xmm11 7812 ; SSE2-NEXT: pand %xmm10, %xmm5 7813 ; SSE2-NEXT: pandn %xmm1, %xmm10 7814 ; SSE2-NEXT: por %xmm5, %xmm10 7815 ; SSE2-NEXT: pand %xmm9, %xmm6 7816 ; SSE2-NEXT: pandn %xmm2, %xmm9 7817 ; SSE2-NEXT: por %xmm6, %xmm9 7818 ; SSE2-NEXT: pand %xmm8, %xmm7 7819 ; SSE2-NEXT: pandn %xmm3, %xmm8 7820 ; SSE2-NEXT: por %xmm7, %xmm8 7821 ; SSE2-NEXT: movdqa %xmm11, %xmm0 7822 ; SSE2-NEXT: movdqa %xmm10, %xmm1 7823 ; SSE2-NEXT: movdqa %xmm9, %xmm2 7824 ; SSE2-NEXT: movdqa %xmm8, %xmm3 7825 ; SSE2-NEXT: retq 7826 ; 7827 ; SSE4-LABEL: test155: 7828 ; SSE4: # BB#0: # %entry 7829 ; SSE4-NEXT: movdqa %xmm0, %xmm8 7830 ; SSE4-NEXT: movdqa %xmm3, %xmm9 7831 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm9 7832 ; SSE4-NEXT: movdqa %xmm2, %xmm10 7833 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm10 7834 ; SSE4-NEXT: movdqa %xmm1, %xmm11 7835 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm11 7836 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7837 ; SSE4-NEXT: blendvpd %xmm4, %xmm8 7838 ; SSE4-NEXT: movdqa %xmm11, %xmm0 7839 ; SSE4-NEXT: blendvpd %xmm5, %xmm1 7840 ; SSE4-NEXT: movdqa %xmm10, %xmm0 7841 ; SSE4-NEXT: blendvpd %xmm6, %xmm2 7842 ; SSE4-NEXT: movdqa %xmm9, %xmm0 7843 ; SSE4-NEXT: blendvpd %xmm7, %xmm3 7844 ; SSE4-NEXT: movapd %xmm8, %xmm0 7845 ; SSE4-NEXT: retq 7846 ; 7847 ; AVX1-LABEL: test155: 7848 ; AVX1: # BB#0: # %entry 7849 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7850 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 7851 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7852 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm5 7853 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7854 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 7855 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 7856 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 7857 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm6 7858 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5 7859 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 7860 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 7861 ; AVX1-NEXT: retq 7862 ; 7863 ; AVX2-LABEL: test155: 7864 ; AVX2: # BB#0: # %entry 7865 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm4 7866 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm5 7867 ; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 7868 ; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 7869 ; AVX2-NEXT: retq 7870 ; 7871 ; AVX512F-LABEL: test155: 7872 ; AVX512F: # BB#0: # %entry 7873 ; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 7874 ; AVX512F-NEXT: retq 7875 entry: 7876 %cmp = icmp sgt <8 x i64> %a, %b 7877 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7878 ret <8 x i64> %sel 7879 } 7880 7881 define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) { 7882 ; SSE2-LABEL: test156: 7883 ; SSE2: # BB#0: # %entry 7884 ; SSE2-NEXT: movdqa %xmm7, %xmm11 7885 ; SSE2-NEXT: movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill 7886 ; SSE2-NEXT: movdqa %xmm3, %xmm7 7887 ; SSE2-NEXT: movdqa %xmm2, %xmm3 7888 ; SSE2-NEXT: movdqa %xmm1, %xmm2 7889 ; SSE2-NEXT: movdqa %xmm0, %xmm9 7890 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0] 7891 ; SSE2-NEXT: movdqa %xmm7, %xmm8 7892 ; SSE2-NEXT: pxor %xmm10, %xmm8 7893 ; SSE2-NEXT: movdqa %xmm11, %xmm0 7894 ; SSE2-NEXT: pxor %xmm10, %xmm0 7895 ; SSE2-NEXT: movdqa %xmm0, %xmm11 7896 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 7897 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7898 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 7899 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 7900 ; SSE2-NEXT: pand %xmm12, %xmm0 7901 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 7902 ; SSE2-NEXT: por %xmm0, %xmm12 7903 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 7904 ; SSE2-NEXT: movdqa %xmm12, %xmm8 7905 ; SSE2-NEXT: pxor %xmm1, %xmm8 7906 ; SSE2-NEXT: movdqa %xmm3, %xmm11 7907 ; SSE2-NEXT: pxor %xmm10, %xmm11 7908 ; SSE2-NEXT: movdqa %xmm6, %xmm13 7909 ; SSE2-NEXT: pxor %xmm10, %xmm13 7910 ; SSE2-NEXT: movdqa %xmm13, %xmm14 7911 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 7912 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 7913 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 7914 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 7915 ; SSE2-NEXT: pand %xmm15, %xmm11 7916 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 7917 ; SSE2-NEXT: por %xmm11, %xmm13 7918 ; SSE2-NEXT: movdqa %xmm2, %xmm11 7919 ; SSE2-NEXT: pxor %xmm10, %xmm11 7920 ; SSE2-NEXT: movdqa %xmm5, %xmm14 7921 ; SSE2-NEXT: pxor %xmm10, %xmm14 7922 ; SSE2-NEXT: movdqa %xmm14, %xmm15 7923 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 7924 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 7925 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 7926 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 7927 ; SSE2-NEXT: pand %xmm11, %xmm14 7928 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 7929 ; SSE2-NEXT: por %xmm14, %xmm15 7930 ; SSE2-NEXT: movdqa %xmm9, %xmm11 7931 ; SSE2-NEXT: pxor %xmm10, %xmm11 7932 ; SSE2-NEXT: pxor %xmm4, %xmm10 7933 ; SSE2-NEXT: movdqa %xmm10, %xmm14 7934 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 7935 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 7936 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 7937 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 7938 ; SSE2-NEXT: pand %xmm11, %xmm0 7939 ; SSE2-NEXT: movdqa %xmm13, %xmm10 7940 ; SSE2-NEXT: pxor %xmm1, %xmm10 7941 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 7942 ; SSE2-NEXT: por %xmm0, %xmm14 7943 ; SSE2-NEXT: movdqa %xmm15, %xmm11 7944 ; SSE2-NEXT: pxor %xmm1, %xmm11 7945 ; SSE2-NEXT: pxor %xmm14, %xmm1 7946 ; SSE2-NEXT: pandn %xmm4, %xmm14 7947 ; SSE2-NEXT: pandn %xmm9, %xmm1 7948 ; SSE2-NEXT: por %xmm14, %xmm1 7949 ; SSE2-NEXT: pandn %xmm5, %xmm15 7950 ; SSE2-NEXT: pandn %xmm2, %xmm11 7951 ; SSE2-NEXT: por %xmm15, %xmm11 7952 ; SSE2-NEXT: pandn %xmm6, %xmm13 7953 ; SSE2-NEXT: pandn %xmm3, %xmm10 7954 ; SSE2-NEXT: por %xmm13, %xmm10 7955 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload 7956 ; SSE2-NEXT: pandn %xmm7, %xmm8 7957 ; SSE2-NEXT: por %xmm12, %xmm8 7958 ; SSE2-NEXT: movdqa %xmm1, %xmm0 7959 ; SSE2-NEXT: movdqa %xmm11, %xmm1 7960 ; SSE2-NEXT: movdqa %xmm10, %xmm2 7961 ; SSE2-NEXT: movdqa %xmm8, %xmm3 7962 ; SSE2-NEXT: retq 7963 ; 7964 ; SSE4-LABEL: test156: 7965 ; SSE4: # BB#0: # %entry 7966 ; SSE4-NEXT: movdqa %xmm0, %xmm8 7967 ; SSE4-NEXT: movdqa %xmm7, %xmm9 7968 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm9 7969 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 7970 ; SSE4-NEXT: pxor %xmm0, %xmm9 7971 ; SSE4-NEXT: movdqa %xmm6, %xmm10 7972 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm10 7973 ; SSE4-NEXT: pxor %xmm0, %xmm10 7974 ; SSE4-NEXT: movdqa %xmm5, %xmm11 7975 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm11 7976 ; SSE4-NEXT: pxor %xmm0, %xmm11 7977 ; SSE4-NEXT: movdqa %xmm4, %xmm12 7978 ; SSE4-NEXT: pcmpgtq %xmm8, %xmm12 7979 ; SSE4-NEXT: pxor %xmm12, %xmm0 7980 ; SSE4-NEXT: blendvpd %xmm4, %xmm8 7981 ; SSE4-NEXT: movdqa %xmm11, %xmm0 7982 ; SSE4-NEXT: blendvpd %xmm5, %xmm1 7983 ; SSE4-NEXT: movdqa %xmm10, %xmm0 7984 ; SSE4-NEXT: blendvpd %xmm6, %xmm2 7985 ; SSE4-NEXT: movdqa %xmm9, %xmm0 7986 ; SSE4-NEXT: blendvpd %xmm7, %xmm3 7987 ; SSE4-NEXT: movapd %xmm8, %xmm0 7988 ; SSE4-NEXT: retq 7989 ; 7990 ; AVX1-LABEL: test156: 7991 ; AVX1: # BB#0: # %entry 7992 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7993 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5 7994 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7995 ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5 7996 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7997 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm6 7998 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7999 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 8000 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 8001 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 8002 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8003 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 8004 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm7 8005 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm5 8006 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 8007 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 8008 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 8009 ; AVX1-NEXT: retq 8010 ; 8011 ; AVX2-LABEL: test156: 8012 ; AVX2: # BB#0: # %entry 8013 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm4 8014 ; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5 8015 ; AVX2-NEXT: vpxor %ymm5, %ymm4, %ymm4 8016 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm6 8017 ; AVX2-NEXT: vpxor %ymm5, %ymm6, %ymm5 8018 ; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 8019 ; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 8020 ; AVX2-NEXT: retq 8021 ; 8022 ; AVX512F-LABEL: test156: 8023 ; AVX512F: # BB#0: # %entry 8024 ; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 8025 ; AVX512F-NEXT: retq 8026 entry: 8027 %cmp = icmp sge <8 x i64> %a, %b 8028 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 8029 ret <8 x i64> %sel 8030 } 8031 8032 define <8 x i64> @test157(<8 x i64> %a, <8 x i64> %b) { 8033 ; SSE2-LABEL: test157: 8034 ; SSE2: # BB#0: # %entry 8035 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648] 8036 ; SSE2-NEXT: movdqa %xmm3, %xmm8 8037 ; SSE2-NEXT: pxor %xmm11, %xmm8 8038 ; SSE2-NEXT: movdqa %xmm7, %xmm9 8039 ; SSE2-NEXT: pxor %xmm11, %xmm9 8040 ; SSE2-NEXT: movdqa %xmm9, %xmm10 8041 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm10 8042 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2] 8043 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm9 8044 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 8045 ; SSE2-NEXT: pand %xmm12, %xmm9 8046 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3] 8047 ; SSE2-NEXT: por %xmm9, %xmm8 8048 ; SSE2-NEXT: movdqa %xmm2, %xmm9 8049 ; SSE2-NEXT: pxor %xmm11, %xmm9 8050 ; SSE2-NEXT: movdqa %xmm6, %xmm10 8051 ; SSE2-NEXT: pxor %xmm11, %xmm10 8052 ; SSE2-NEXT: movdqa %xmm10, %xmm12 8053 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm12 8054 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 8055 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 8056 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 8057 ; SSE2-NEXT: pand %xmm13, %xmm10 8058 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3] 8059 ; SSE2-NEXT: por %xmm10, %xmm9 8060 ; SSE2-NEXT: movdqa %xmm1, %xmm10 8061 ; SSE2-NEXT: pxor %xmm11, %xmm10 8062 ; SSE2-NEXT: movdqa %xmm5, %xmm12 8063 ; SSE2-NEXT: pxor %xmm11, %xmm12 8064 ; SSE2-NEXT: movdqa %xmm12, %xmm13 8065 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm13 8066 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 8067 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm12 8068 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3] 8069 ; SSE2-NEXT: pand %xmm14, %xmm12 8070 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3] 8071 ; SSE2-NEXT: por %xmm12, %xmm10 8072 ; SSE2-NEXT: movdqa %xmm0, %xmm12 8073 ; SSE2-NEXT: pxor %xmm11, %xmm12 8074 ; SSE2-NEXT: pxor %xmm4, %xmm11 8075 ; SSE2-NEXT: movdqa %xmm11, %xmm13 8076 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm13 8077 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 8078 ; SSE2-NEXT: pcmpeqd %xmm12, %xmm11 8079 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 8080 ; SSE2-NEXT: pand %xmm14, %xmm12 8081 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 8082 ; SSE2-NEXT: por %xmm12, %xmm11 8083 ; SSE2-NEXT: pand %xmm11, %xmm4 8084 ; SSE2-NEXT: pandn %xmm0, %xmm11 8085 ; SSE2-NEXT: por %xmm4, %xmm11 8086 ; SSE2-NEXT: pand %xmm10, %xmm5 8087 ; SSE2-NEXT: pandn %xmm1, %xmm10 8088 ; SSE2-NEXT: por %xmm5, %xmm10 8089 ; SSE2-NEXT: pand %xmm9, %xmm6 8090 ; SSE2-NEXT: pandn %xmm2, %xmm9 8091 ; SSE2-NEXT: por %xmm6, %xmm9 8092 ; SSE2-NEXT: pand %xmm8, %xmm7 8093 ; SSE2-NEXT: pandn %xmm3, %xmm8 8094 ; SSE2-NEXT: por %xmm7, %xmm8 8095 ; SSE2-NEXT: movdqa %xmm11, %xmm0 8096 ; SSE2-NEXT: movdqa %xmm10, %xmm1 8097 ; SSE2-NEXT: movdqa %xmm9, %xmm2 8098 ; SSE2-NEXT: movdqa %xmm8, %xmm3 8099 ; SSE2-NEXT: retq 8100 ; 8101 ; SSE4-LABEL: test157: 8102 ; SSE4: # BB#0: # %entry 8103 ; SSE4-NEXT: movdqa %xmm0, %xmm8 8104 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 8105 ; SSE4-NEXT: movdqa %xmm3, %xmm10 8106 ; SSE4-NEXT: pxor %xmm0, %xmm10 8107 ; SSE4-NEXT: movdqa %xmm7, %xmm9 8108 ; SSE4-NEXT: pxor %xmm0, %xmm9 8109 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 8110 ; SSE4-NEXT: movdqa %xmm2, %xmm11 8111 ; SSE4-NEXT: pxor %xmm0, %xmm11 8112 ; SSE4-NEXT: movdqa %xmm6, %xmm10 8113 ; SSE4-NEXT: pxor %xmm0, %xmm10 8114 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 8115 ; SSE4-NEXT: movdqa %xmm1, %xmm12 8116 ; SSE4-NEXT: pxor %xmm0, %xmm12 8117 ; SSE4-NEXT: movdqa %xmm5, %xmm11 8118 ; SSE4-NEXT: pxor %xmm0, %xmm11 8119 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm11 8120 ; SSE4-NEXT: movdqa %xmm8, %xmm12 8121 ; SSE4-NEXT: pxor %xmm0, %xmm12 8122 ; SSE4-NEXT: pxor %xmm4, %xmm0 8123 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm0 8124 ; SSE4-NEXT: blendvpd %xmm4, %xmm8 8125 ; SSE4-NEXT: movdqa %xmm11, %xmm0 8126 ; SSE4-NEXT: blendvpd %xmm5, %xmm1 8127 ; SSE4-NEXT: movdqa %xmm10, %xmm0 8128 ; SSE4-NEXT: blendvpd %xmm6, %xmm2 8129 ; SSE4-NEXT: movdqa %xmm9, %xmm0 8130 ; SSE4-NEXT: blendvpd %xmm7, %xmm3 8131 ; SSE4-NEXT: movapd %xmm8, %xmm0 8132 ; SSE4-NEXT: retq 8133 ; 8134 ; AVX1-LABEL: test157: 8135 ; AVX1: # BB#0: # %entry 8136 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 8137 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8138 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 8139 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6 8140 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8141 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 8142 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm6 8143 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm7 8144 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8145 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 8146 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 8147 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8148 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 8149 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 8150 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8151 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm7 8152 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm5 8153 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 8154 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 8155 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 8156 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 8157 ; AVX1-NEXT: retq 8158 ; 8159 ; AVX2-LABEL: test157: 8160 ; AVX2: # BB#0: # %entry 8161 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 8162 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm5 8163 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm6 8164 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 8165 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 8166 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm4 8167 ; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm4 8168 ; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0 8169 ; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm1, %ymm1 8170 ; AVX2-NEXT: retq 8171 ; 8172 ; AVX512F-LABEL: test157: 8173 ; AVX512F: # BB#0: # %entry 8174 ; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 8175 ; AVX512F-NEXT: retq 8176 entry: 8177 %cmp = icmp ult <8 x i64> %a, %b 8178 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 8179 ret <8 x i64> %sel 8180 } 8181 8182 define <8 x i64> @test158(<8 x i64> %a, <8 x i64> %b) { 8183 ; SSE2-LABEL: test158: 8184 ; SSE2: # BB#0: # %entry 8185 ; SSE2-NEXT: movdqa %xmm7, %xmm8 8186 ; SSE2-NEXT: movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill 8187 ; SSE2-NEXT: movdqa %xmm3, %xmm7 8188 ; SSE2-NEXT: movdqa %xmm2, %xmm3 8189 ; SSE2-NEXT: movdqa %xmm1, %xmm2 8190 ; SSE2-NEXT: movdqa %xmm0, %xmm9 8191 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648] 8192 ; SSE2-NEXT: pxor %xmm10, %xmm8 8193 ; SSE2-NEXT: movdqa %xmm7, %xmm0 8194 ; SSE2-NEXT: pxor %xmm10, %xmm0 8195 ; SSE2-NEXT: movdqa %xmm0, %xmm11 8196 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 8197 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 8198 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 8199 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 8200 ; SSE2-NEXT: pand %xmm12, %xmm0 8201 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 8202 ; SSE2-NEXT: por %xmm0, %xmm12 8203 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 8204 ; SSE2-NEXT: movdqa %xmm12, %xmm8 8205 ; SSE2-NEXT: pxor %xmm1, %xmm8 8206 ; SSE2-NEXT: movdqa %xmm6, %xmm11 8207 ; SSE2-NEXT: pxor %xmm10, %xmm11 8208 ; SSE2-NEXT: movdqa %xmm3, %xmm13 8209 ; SSE2-NEXT: pxor %xmm10, %xmm13 8210 ; SSE2-NEXT: movdqa %xmm13, %xmm14 8211 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 8212 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 8213 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 8214 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 8215 ; SSE2-NEXT: pand %xmm15, %xmm11 8216 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 8217 ; SSE2-NEXT: por %xmm11, %xmm13 8218 ; SSE2-NEXT: movdqa %xmm5, %xmm11 8219 ; SSE2-NEXT: pxor %xmm10, %xmm11 8220 ; SSE2-NEXT: movdqa %xmm2, %xmm14 8221 ; SSE2-NEXT: pxor %xmm10, %xmm14 8222 ; SSE2-NEXT: movdqa %xmm14, %xmm15 8223 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 8224 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 8225 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 8226 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 8227 ; SSE2-NEXT: pand %xmm11, %xmm14 8228 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 8229 ; SSE2-NEXT: por %xmm14, %xmm15 8230 ; SSE2-NEXT: movdqa %xmm4, %xmm11 8231 ; SSE2-NEXT: pxor %xmm10, %xmm11 8232 ; SSE2-NEXT: pxor %xmm9, %xmm10 8233 ; SSE2-NEXT: movdqa %xmm10, %xmm14 8234 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 8235 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 8236 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 8237 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 8238 ; SSE2-NEXT: pand %xmm11, %xmm0 8239 ; SSE2-NEXT: movdqa %xmm13, %xmm10 8240 ; SSE2-NEXT: pxor %xmm1, %xmm10 8241 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 8242 ; SSE2-NEXT: por %xmm0, %xmm14 8243 ; SSE2-NEXT: movdqa %xmm15, %xmm11 8244 ; SSE2-NEXT: pxor %xmm1, %xmm11 8245 ; SSE2-NEXT: pxor %xmm14, %xmm1 8246 ; SSE2-NEXT: pandn %xmm4, %xmm14 8247 ; SSE2-NEXT: pandn %xmm9, %xmm1 8248 ; SSE2-NEXT: por %xmm14, %xmm1 8249 ; SSE2-NEXT: pandn %xmm5, %xmm15 8250 ; SSE2-NEXT: pandn %xmm2, %xmm11 8251 ; SSE2-NEXT: por %xmm15, %xmm11 8252 ; SSE2-NEXT: pandn %xmm6, %xmm13 8253 ; SSE2-NEXT: pandn %xmm3, %xmm10 8254 ; SSE2-NEXT: por %xmm13, %xmm10 8255 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload 8256 ; SSE2-NEXT: pandn %xmm7, %xmm8 8257 ; SSE2-NEXT: por %xmm12, %xmm8 8258 ; SSE2-NEXT: movdqa %xmm1, %xmm0 8259 ; SSE2-NEXT: movdqa %xmm11, %xmm1 8260 ; SSE2-NEXT: movdqa %xmm10, %xmm2 8261 ; SSE2-NEXT: movdqa %xmm8, %xmm3 8262 ; SSE2-NEXT: retq 8263 ; 8264 ; SSE4-LABEL: test158: 8265 ; SSE4: # BB#0: # %entry 8266 ; SSE4-NEXT: movdqa %xmm0, %xmm8 8267 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 8268 ; SSE4-NEXT: movdqa %xmm7, %xmm10 8269 ; SSE4-NEXT: pxor %xmm0, %xmm10 8270 ; SSE4-NEXT: movdqa %xmm3, %xmm9 8271 ; SSE4-NEXT: pxor %xmm0, %xmm9 8272 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 8273 ; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 8274 ; SSE4-NEXT: pxor %xmm12, %xmm9 8275 ; SSE4-NEXT: movdqa %xmm6, %xmm11 8276 ; SSE4-NEXT: pxor %xmm0, %xmm11 8277 ; SSE4-NEXT: movdqa %xmm2, %xmm10 8278 ; SSE4-NEXT: pxor %xmm0, %xmm10 8279 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 8280 ; SSE4-NEXT: pxor %xmm12, %xmm10 8281 ; SSE4-NEXT: movdqa %xmm5, %xmm13 8282 ; SSE4-NEXT: pxor %xmm0, %xmm13 8283 ; SSE4-NEXT: movdqa %xmm1, %xmm11 8284 ; SSE4-NEXT: pxor %xmm0, %xmm11 8285 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm11 8286 ; SSE4-NEXT: pxor %xmm12, %xmm11 8287 ; SSE4-NEXT: movdqa %xmm4, %xmm13 8288 ; SSE4-NEXT: pxor %xmm0, %xmm13 8289 ; SSE4-NEXT: pxor %xmm8, %xmm0 8290 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm0 8291 ; SSE4-NEXT: pxor %xmm12, %xmm0 8292 ; SSE4-NEXT: blendvpd %xmm4, %xmm8 8293 ; SSE4-NEXT: movdqa %xmm11, %xmm0 8294 ; SSE4-NEXT: blendvpd %xmm5, %xmm1 8295 ; SSE4-NEXT: movdqa %xmm10, %xmm0 8296 ; SSE4-NEXT: blendvpd %xmm6, %xmm2 8297 ; SSE4-NEXT: movdqa %xmm9, %xmm0 8298 ; SSE4-NEXT: blendvpd %xmm7, %xmm3 8299 ; SSE4-NEXT: movapd %xmm8, %xmm0 8300 ; SSE4-NEXT: retq 8301 ; 8302 ; AVX1-LABEL: test158: 8303 ; AVX1: # BB#0: # %entry 8304 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 8305 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8306 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 8307 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6 8308 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8309 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 8310 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm8, %xmm8 8311 ; AVX1-NEXT: vpxor %xmm8, %xmm4, %xmm4 8312 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm7 8313 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm6 8314 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6 8315 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 8316 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 8317 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 8318 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8319 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7 8320 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 8321 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8322 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 8323 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm7 8324 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm5 8325 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 8326 ; AVX1-NEXT: vpxor %xmm8, %xmm5, %xmm5 8327 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 8328 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 8329 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 8330 ; AVX1-NEXT: retq 8331 ; 8332 ; AVX2-LABEL: test158: 8333 ; AVX2: # BB#0: # %entry 8334 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 8335 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm5 8336 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm6 8337 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 8338 ; AVX2-NEXT: vpcmpeqd %ymm6, %ymm6, %ymm6 8339 ; AVX2-NEXT: vpxor %ymm6, %ymm5, %ymm5 8340 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm7 8341 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm4 8342 ; AVX2-NEXT: vpcmpgtq %ymm7, %ymm4, %ymm4 8343 ; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm4 8344 ; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0 8345 ; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm1, %ymm1 8346 ; AVX2-NEXT: retq 8347 ; 8348 ; AVX512F-LABEL: test158: 8349 ; AVX512F: # BB#0: # %entry 8350 ; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 8351 ; AVX512F-NEXT: retq 8352 entry: 8353 %cmp = icmp ule <8 x i64> %a, %b 8354 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 8355 ret <8 x i64> %sel 8356 } 8357 8358 define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) { 8359 ; SSE2-LABEL: test159: 8360 ; SSE2: # BB#0: # %entry 8361 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648] 8362 ; SSE2-NEXT: movdqa %xmm7, %xmm8 8363 ; SSE2-NEXT: pxor %xmm11, %xmm8 8364 ; SSE2-NEXT: movdqa %xmm3, %xmm9 8365 ; SSE2-NEXT: pxor %xmm11, %xmm9 8366 ; SSE2-NEXT: movdqa %xmm9, %xmm10 8367 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm10 8368 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2] 8369 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm9 8370 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 8371 ; SSE2-NEXT: pand %xmm12, %xmm9 8372 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3] 8373 ; SSE2-NEXT: por %xmm9, %xmm8 8374 ; SSE2-NEXT: movdqa %xmm6, %xmm9 8375 ; SSE2-NEXT: pxor %xmm11, %xmm9 8376 ; SSE2-NEXT: movdqa %xmm2, %xmm10 8377 ; SSE2-NEXT: pxor %xmm11, %xmm10 8378 ; SSE2-NEXT: movdqa %xmm10, %xmm12 8379 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm12 8380 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 8381 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 8382 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 8383 ; SSE2-NEXT: pand %xmm13, %xmm10 8384 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3] 8385 ; SSE2-NEXT: por %xmm10, %xmm9 8386 ; SSE2-NEXT: movdqa %xmm5, %xmm10 8387 ; SSE2-NEXT: pxor %xmm11, %xmm10 8388 ; SSE2-NEXT: movdqa %xmm1, %xmm12 8389 ; SSE2-NEXT: pxor %xmm11, %xmm12 8390 ; SSE2-NEXT: movdqa %xmm12, %xmm13 8391 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm13 8392 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 8393 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm12 8394 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3] 8395 ; SSE2-NEXT: pand %xmm14, %xmm12 8396 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3] 8397 ; SSE2-NEXT: por %xmm12, %xmm10 8398 ; SSE2-NEXT: movdqa %xmm4, %xmm12 8399 ; SSE2-NEXT: pxor %xmm11, %xmm12 8400 ; SSE2-NEXT: pxor %xmm0, %xmm11 8401 ; SSE2-NEXT: movdqa %xmm11, %xmm13 8402 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm13 8403 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 8404 ; SSE2-NEXT: pcmpeqd %xmm12, %xmm11 8405 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 8406 ; SSE2-NEXT: pand %xmm14, %xmm12 8407 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 8408 ; SSE2-NEXT: por %xmm12, %xmm11 8409 ; SSE2-NEXT: pand %xmm11, %xmm4 8410 ; SSE2-NEXT: pandn %xmm0, %xmm11 8411 ; SSE2-NEXT: por %xmm4, %xmm11 8412 ; SSE2-NEXT: pand %xmm10, %xmm5 8413 ; SSE2-NEXT: pandn %xmm1, %xmm10 8414 ; SSE2-NEXT: por %xmm5, %xmm10 8415 ; SSE2-NEXT: pand %xmm9, %xmm6 8416 ; SSE2-NEXT: pandn %xmm2, %xmm9 8417 ; SSE2-NEXT: por %xmm6, %xmm9 8418 ; SSE2-NEXT: pand %xmm8, %xmm7 8419 ; SSE2-NEXT: pandn %xmm3, %xmm8 8420 ; SSE2-NEXT: por %xmm7, %xmm8 8421 ; SSE2-NEXT: movdqa %xmm11, %xmm0 8422 ; SSE2-NEXT: movdqa %xmm10, %xmm1 8423 ; SSE2-NEXT: movdqa %xmm9, %xmm2 8424 ; SSE2-NEXT: movdqa %xmm8, %xmm3 8425 ; SSE2-NEXT: retq 8426 ; 8427 ; SSE4-LABEL: test159: 8428 ; SSE4: # BB#0: # %entry 8429 ; SSE4-NEXT: movdqa %xmm0, %xmm8 8430 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 8431 ; SSE4-NEXT: movdqa %xmm7, %xmm10 8432 ; SSE4-NEXT: pxor %xmm0, %xmm10 8433 ; SSE4-NEXT: movdqa %xmm3, %xmm9 8434 ; SSE4-NEXT: pxor %xmm0, %xmm9 8435 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 8436 ; SSE4-NEXT: movdqa %xmm6, %xmm11 8437 ; SSE4-NEXT: pxor %xmm0, %xmm11 8438 ; SSE4-NEXT: movdqa %xmm2, %xmm10 8439 ; SSE4-NEXT: pxor %xmm0, %xmm10 8440 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 8441 ; SSE4-NEXT: movdqa %xmm5, %xmm12 8442 ; SSE4-NEXT: pxor %xmm0, %xmm12 8443 ; SSE4-NEXT: movdqa %xmm1, %xmm11 8444 ; SSE4-NEXT: pxor %xmm0, %xmm11 8445 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm11 8446 ; SSE4-NEXT: movdqa %xmm4, %xmm12 8447 ; SSE4-NEXT: pxor %xmm0, %xmm12 8448 ; SSE4-NEXT: pxor %xmm8, %xmm0 8449 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm0 8450 ; SSE4-NEXT: blendvpd %xmm4, %xmm8 8451 ; SSE4-NEXT: movdqa %xmm11, %xmm0 8452 ; SSE4-NEXT: blendvpd %xmm5, %xmm1 8453 ; SSE4-NEXT: movdqa %xmm10, %xmm0 8454 ; SSE4-NEXT: blendvpd %xmm6, %xmm2 8455 ; SSE4-NEXT: movdqa %xmm9, %xmm0 8456 ; SSE4-NEXT: blendvpd %xmm7, %xmm3 8457 ; SSE4-NEXT: movapd %xmm8, %xmm0 8458 ; SSE4-NEXT: retq 8459 ; 8460 ; AVX1-LABEL: test159: 8461 ; AVX1: # BB#0: # %entry 8462 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 8463 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8464 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 8465 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6 8466 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8467 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 8468 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm6 8469 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm7 8470 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8471 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 8472 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 8473 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8474 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7 8475 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 8476 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8477 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm7 8478 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm5 8479 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 8480 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 8481 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 8482 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 8483 ; AVX1-NEXT: retq 8484 ; 8485 ; AVX2-LABEL: test159: 8486 ; AVX2: # BB#0: # %entry 8487 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 8488 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm5 8489 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm6 8490 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 8491 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 8492 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm4 8493 ; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm4 8494 ; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0 8495 ; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm1, %ymm1 8496 ; AVX2-NEXT: retq 8497 ; 8498 ; AVX512F-LABEL: test159: 8499 ; AVX512F: # BB#0: # %entry 8500 ; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 8501 ; AVX512F-NEXT: retq 8502 entry: 8503 %cmp = icmp ugt <8 x i64> %a, %b 8504 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 8505 ret <8 x i64> %sel 8506 } 8507 8508 define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) { 8509 ; SSE2-LABEL: test160: 8510 ; SSE2: # BB#0: # %entry 8511 ; SSE2-NEXT: movdqa %xmm7, %xmm11 8512 ; SSE2-NEXT: movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill 8513 ; SSE2-NEXT: movdqa %xmm3, %xmm7 8514 ; SSE2-NEXT: movdqa %xmm2, %xmm3 8515 ; SSE2-NEXT: movdqa %xmm1, %xmm2 8516 ; SSE2-NEXT: movdqa %xmm0, %xmm9 8517 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648] 8518 ; SSE2-NEXT: movdqa %xmm7, %xmm8 8519 ; SSE2-NEXT: pxor %xmm10, %xmm8 8520 ; SSE2-NEXT: movdqa %xmm11, %xmm0 8521 ; SSE2-NEXT: pxor %xmm10, %xmm0 8522 ; SSE2-NEXT: movdqa %xmm0, %xmm11 8523 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 8524 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 8525 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 8526 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 8527 ; SSE2-NEXT: pand %xmm12, %xmm0 8528 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 8529 ; SSE2-NEXT: por %xmm0, %xmm12 8530 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 8531 ; SSE2-NEXT: movdqa %xmm12, %xmm8 8532 ; SSE2-NEXT: pxor %xmm1, %xmm8 8533 ; SSE2-NEXT: movdqa %xmm3, %xmm11 8534 ; SSE2-NEXT: pxor %xmm10, %xmm11 8535 ; SSE2-NEXT: movdqa %xmm6, %xmm13 8536 ; SSE2-NEXT: pxor %xmm10, %xmm13 8537 ; SSE2-NEXT: movdqa %xmm13, %xmm14 8538 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 8539 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 8540 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 8541 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 8542 ; SSE2-NEXT: pand %xmm15, %xmm11 8543 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 8544 ; SSE2-NEXT: por %xmm11, %xmm13 8545 ; SSE2-NEXT: movdqa %xmm2, %xmm11 8546 ; SSE2-NEXT: pxor %xmm10, %xmm11 8547 ; SSE2-NEXT: movdqa %xmm5, %xmm14 8548 ; SSE2-NEXT: pxor %xmm10, %xmm14 8549 ; SSE2-NEXT: movdqa %xmm14, %xmm15 8550 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 8551 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 8552 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 8553 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 8554 ; SSE2-NEXT: pand %xmm11, %xmm14 8555 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 8556 ; SSE2-NEXT: por %xmm14, %xmm15 8557 ; SSE2-NEXT: movdqa %xmm9, %xmm11 8558 ; SSE2-NEXT: pxor %xmm10, %xmm11 8559 ; SSE2-NEXT: pxor %xmm4, %xmm10 8560 ; SSE2-NEXT: movdqa %xmm10, %xmm14 8561 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 8562 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 8563 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 8564 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 8565 ; SSE2-NEXT: pand %xmm11, %xmm0 8566 ; SSE2-NEXT: movdqa %xmm13, %xmm10 8567 ; SSE2-NEXT: pxor %xmm1, %xmm10 8568 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 8569 ; SSE2-NEXT: por %xmm0, %xmm14 8570 ; SSE2-NEXT: movdqa %xmm15, %xmm11 8571 ; SSE2-NEXT: pxor %xmm1, %xmm11 8572 ; SSE2-NEXT: pxor %xmm14, %xmm1 8573 ; SSE2-NEXT: pandn %xmm4, %xmm14 8574 ; SSE2-NEXT: pandn %xmm9, %xmm1 8575 ; SSE2-NEXT: por %xmm14, %xmm1 8576 ; SSE2-NEXT: pandn %xmm5, %xmm15 8577 ; SSE2-NEXT: pandn %xmm2, %xmm11 8578 ; SSE2-NEXT: por %xmm15, %xmm11 8579 ; SSE2-NEXT: pandn %xmm6, %xmm13 8580 ; SSE2-NEXT: pandn %xmm3, %xmm10 8581 ; SSE2-NEXT: por %xmm13, %xmm10 8582 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload 8583 ; SSE2-NEXT: pandn %xmm7, %xmm8 8584 ; SSE2-NEXT: por %xmm12, %xmm8 8585 ; SSE2-NEXT: movdqa %xmm1, %xmm0 8586 ; SSE2-NEXT: movdqa %xmm11, %xmm1 8587 ; SSE2-NEXT: movdqa %xmm10, %xmm2 8588 ; SSE2-NEXT: movdqa %xmm8, %xmm3 8589 ; SSE2-NEXT: retq 8590 ; 8591 ; SSE4-LABEL: test160: 8592 ; SSE4: # BB#0: # %entry 8593 ; SSE4-NEXT: movdqa %xmm0, %xmm8 8594 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 8595 ; SSE4-NEXT: movdqa %xmm3, %xmm10 8596 ; SSE4-NEXT: pxor %xmm0, %xmm10 8597 ; SSE4-NEXT: movdqa %xmm7, %xmm9 8598 ; SSE4-NEXT: pxor %xmm0, %xmm9 8599 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 8600 ; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 8601 ; SSE4-NEXT: pxor %xmm12, %xmm9 8602 ; SSE4-NEXT: movdqa %xmm2, %xmm11 8603 ; SSE4-NEXT: pxor %xmm0, %xmm11 8604 ; SSE4-NEXT: movdqa %xmm6, %xmm10 8605 ; SSE4-NEXT: pxor %xmm0, %xmm10 8606 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 8607 ; SSE4-NEXT: pxor %xmm12, %xmm10 8608 ; SSE4-NEXT: movdqa %xmm1, %xmm13 8609 ; SSE4-NEXT: pxor %xmm0, %xmm13 8610 ; SSE4-NEXT: movdqa %xmm5, %xmm11 8611 ; SSE4-NEXT: pxor %xmm0, %xmm11 8612 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm11 8613 ; SSE4-NEXT: pxor %xmm12, %xmm11 8614 ; SSE4-NEXT: movdqa %xmm8, %xmm13 8615 ; SSE4-NEXT: pxor %xmm0, %xmm13 8616 ; SSE4-NEXT: pxor %xmm4, %xmm0 8617 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm0 8618 ; SSE4-NEXT: pxor %xmm12, %xmm0 8619 ; SSE4-NEXT: blendvpd %xmm4, %xmm8 8620 ; SSE4-NEXT: movdqa %xmm11, %xmm0 8621 ; SSE4-NEXT: blendvpd %xmm5, %xmm1 8622 ; SSE4-NEXT: movdqa %xmm10, %xmm0 8623 ; SSE4-NEXT: blendvpd %xmm6, %xmm2 8624 ; SSE4-NEXT: movdqa %xmm9, %xmm0 8625 ; SSE4-NEXT: blendvpd %xmm7, %xmm3 8626 ; SSE4-NEXT: movapd %xmm8, %xmm0 8627 ; SSE4-NEXT: retq 8628 ; 8629 ; AVX1-LABEL: test160: 8630 ; AVX1: # BB#0: # %entry 8631 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 8632 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8633 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 8634 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6 8635 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8636 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 8637 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm8, %xmm8 8638 ; AVX1-NEXT: vpxor %xmm8, %xmm4, %xmm4 8639 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm7 8640 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm6 8641 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6 8642 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 8643 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 8644 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 8645 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8646 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 8647 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 8648 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8649 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 8650 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm7 8651 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm5 8652 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 8653 ; AVX1-NEXT: vpxor %xmm8, %xmm5, %xmm5 8654 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 8655 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 8656 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 8657 ; AVX1-NEXT: retq 8658 ; 8659 ; AVX2-LABEL: test160: 8660 ; AVX2: # BB#0: # %entry 8661 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 8662 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm5 8663 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm6 8664 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 8665 ; AVX2-NEXT: vpcmpeqd %ymm6, %ymm6, %ymm6 8666 ; AVX2-NEXT: vpxor %ymm6, %ymm5, %ymm5 8667 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm7 8668 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm4 8669 ; AVX2-NEXT: vpcmpgtq %ymm7, %ymm4, %ymm4 8670 ; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm4 8671 ; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0 8672 ; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm1, %ymm1 8673 ; AVX2-NEXT: retq 8674 ; 8675 ; AVX512F-LABEL: test160: 8676 ; AVX512F: # BB#0: # %entry 8677 ; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 8678 ; AVX512F-NEXT: retq 8679 entry: 8680 %cmp = icmp uge <8 x i64> %a, %b 8681 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 8682 ret <8 x i64> %sel 8683 } 8684 8685 define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) { 8686 ; SSE2-LABEL: test161: 8687 ; SSE2: # BB#0: # %entry 8688 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 8689 ; SSE2-NEXT: movdqa %xmm1, %xmm5 8690 ; SSE2-NEXT: pxor %xmm4, %xmm5 8691 ; SSE2-NEXT: movdqa %xmm3, %xmm6 8692 ; SSE2-NEXT: pxor %xmm4, %xmm6 8693 ; SSE2-NEXT: movdqa %xmm6, %xmm7 8694 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8695 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8696 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8697 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8698 ; SSE2-NEXT: pand %xmm8, %xmm5 8699 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8700 ; SSE2-NEXT: por %xmm5, %xmm6 8701 ; SSE2-NEXT: movdqa %xmm0, %xmm5 8702 ; SSE2-NEXT: pxor %xmm4, %xmm5 8703 ; SSE2-NEXT: pxor %xmm2, %xmm4 8704 ; SSE2-NEXT: movdqa %xmm4, %xmm7 8705 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8706 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8707 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm4 8708 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 8709 ; SSE2-NEXT: pand %xmm8, %xmm4 8710 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 8711 ; SSE2-NEXT: por %xmm4, %xmm5 8712 ; SSE2-NEXT: pand %xmm5, %xmm0 8713 ; SSE2-NEXT: pandn %xmm2, %xmm5 8714 ; SSE2-NEXT: por %xmm5, %xmm0 8715 ; SSE2-NEXT: pand %xmm6, %xmm1 8716 ; SSE2-NEXT: pandn %xmm3, %xmm6 8717 ; SSE2-NEXT: por %xmm6, %xmm1 8718 ; SSE2-NEXT: retq 8719 ; 8720 ; SSE4-LABEL: test161: 8721 ; SSE4: # BB#0: # %entry 8722 ; SSE4-NEXT: movdqa %xmm0, %xmm4 8723 ; SSE4-NEXT: movdqa %xmm3, %xmm5 8724 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm5 8725 ; SSE4-NEXT: movdqa %xmm2, %xmm0 8726 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 8727 ; SSE4-NEXT: blendvpd %xmm4, %xmm2 8728 ; SSE4-NEXT: movdqa %xmm5, %xmm0 8729 ; SSE4-NEXT: blendvpd %xmm1, %xmm3 8730 ; SSE4-NEXT: movapd %xmm2, %xmm0 8731 ; SSE4-NEXT: movapd %xmm3, %xmm1 8732 ; SSE4-NEXT: retq 8733 ; 8734 ; AVX1-LABEL: test161: 8735 ; AVX1: # BB#0: # %entry 8736 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8737 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 8738 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8739 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 8740 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8741 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8742 ; AVX1-NEXT: retq 8743 ; 8744 ; AVX2-LABEL: test161: 8745 ; AVX2: # BB#0: # %entry 8746 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 8747 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8748 ; AVX2-NEXT: retq 8749 ; 8750 ; AVX512BW-LABEL: test161: 8751 ; AVX512BW: # BB#0: # %entry 8752 ; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 8753 ; AVX512BW-NEXT: retq 8754 entry: 8755 %cmp = icmp slt <4 x i64> %a, %b 8756 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8757 ret <4 x i64> %sel 8758 } 8759 8760 define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) { 8761 ; SSE2-LABEL: test162: 8762 ; SSE2: # BB#0: # %entry 8763 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0] 8764 ; SSE2-NEXT: movdqa %xmm3, %xmm4 8765 ; SSE2-NEXT: pxor %xmm7, %xmm4 8766 ; SSE2-NEXT: movdqa %xmm1, %xmm5 8767 ; SSE2-NEXT: pxor %xmm7, %xmm5 8768 ; SSE2-NEXT: movdqa %xmm5, %xmm6 8769 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 8770 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 8771 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 8772 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8773 ; SSE2-NEXT: pand %xmm8, %xmm4 8774 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 8775 ; SSE2-NEXT: por %xmm4, %xmm8 8776 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 8777 ; SSE2-NEXT: movdqa %xmm8, %xmm9 8778 ; SSE2-NEXT: pxor %xmm4, %xmm9 8779 ; SSE2-NEXT: movdqa %xmm2, %xmm6 8780 ; SSE2-NEXT: pxor %xmm7, %xmm6 8781 ; SSE2-NEXT: pxor %xmm0, %xmm7 8782 ; SSE2-NEXT: movdqa %xmm7, %xmm5 8783 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 8784 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 8785 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 8786 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8787 ; SSE2-NEXT: pand %xmm10, %xmm6 8788 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 8789 ; SSE2-NEXT: por %xmm6, %xmm5 8790 ; SSE2-NEXT: pxor %xmm5, %xmm4 8791 ; SSE2-NEXT: pandn %xmm0, %xmm5 8792 ; SSE2-NEXT: pandn %xmm2, %xmm4 8793 ; SSE2-NEXT: por %xmm5, %xmm4 8794 ; SSE2-NEXT: pandn %xmm1, %xmm8 8795 ; SSE2-NEXT: pandn %xmm3, %xmm9 8796 ; SSE2-NEXT: por %xmm8, %xmm9 8797 ; SSE2-NEXT: movdqa %xmm4, %xmm0 8798 ; SSE2-NEXT: movdqa %xmm9, %xmm1 8799 ; SSE2-NEXT: retq 8800 ; 8801 ; SSE4-LABEL: test162: 8802 ; SSE4: # BB#0: # %entry 8803 ; SSE4-NEXT: movdqa %xmm0, %xmm4 8804 ; SSE4-NEXT: movdqa %xmm1, %xmm5 8805 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm5 8806 ; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 8807 ; SSE4-NEXT: pxor %xmm6, %xmm5 8808 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8809 ; SSE4-NEXT: pxor %xmm6, %xmm0 8810 ; SSE4-NEXT: blendvpd %xmm4, %xmm2 8811 ; SSE4-NEXT: movdqa %xmm5, %xmm0 8812 ; SSE4-NEXT: blendvpd %xmm1, %xmm3 8813 ; SSE4-NEXT: movapd %xmm2, %xmm0 8814 ; SSE4-NEXT: movapd %xmm3, %xmm1 8815 ; SSE4-NEXT: retq 8816 ; 8817 ; AVX1-LABEL: test162: 8818 ; AVX1: # BB#0: # %entry 8819 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8820 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8821 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8822 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 8823 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8824 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm4 8825 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm3 8826 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8827 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8828 ; AVX1-NEXT: retq 8829 ; 8830 ; AVX2-LABEL: test162: 8831 ; AVX2: # BB#0: # %entry 8832 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8833 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 8834 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 8835 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8836 ; AVX2-NEXT: retq 8837 ; 8838 ; AVX512BW-LABEL: test162: 8839 ; AVX512BW: # BB#0: # %entry 8840 ; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 8841 ; AVX512BW-NEXT: retq 8842 entry: 8843 %cmp = icmp sle <4 x i64> %a, %b 8844 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8845 ret <4 x i64> %sel 8846 } 8847 8848 define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) { 8849 ; SSE2-LABEL: test163: 8850 ; SSE2: # BB#0: # %entry 8851 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 8852 ; SSE2-NEXT: movdqa %xmm3, %xmm5 8853 ; SSE2-NEXT: pxor %xmm4, %xmm5 8854 ; SSE2-NEXT: movdqa %xmm1, %xmm6 8855 ; SSE2-NEXT: pxor %xmm4, %xmm6 8856 ; SSE2-NEXT: movdqa %xmm6, %xmm7 8857 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8858 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8859 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8860 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8861 ; SSE2-NEXT: pand %xmm8, %xmm5 8862 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8863 ; SSE2-NEXT: por %xmm5, %xmm6 8864 ; SSE2-NEXT: movdqa %xmm2, %xmm5 8865 ; SSE2-NEXT: pxor %xmm4, %xmm5 8866 ; SSE2-NEXT: pxor %xmm0, %xmm4 8867 ; SSE2-NEXT: movdqa %xmm4, %xmm7 8868 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8869 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8870 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm4 8871 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 8872 ; SSE2-NEXT: pand %xmm8, %xmm4 8873 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 8874 ; SSE2-NEXT: por %xmm4, %xmm5 8875 ; SSE2-NEXT: pand %xmm5, %xmm0 8876 ; SSE2-NEXT: pandn %xmm2, %xmm5 8877 ; SSE2-NEXT: por %xmm5, %xmm0 8878 ; SSE2-NEXT: pand %xmm6, %xmm1 8879 ; SSE2-NEXT: pandn %xmm3, %xmm6 8880 ; SSE2-NEXT: por %xmm6, %xmm1 8881 ; SSE2-NEXT: retq 8882 ; 8883 ; SSE4-LABEL: test163: 8884 ; SSE4: # BB#0: # %entry 8885 ; SSE4-NEXT: movdqa %xmm0, %xmm4 8886 ; SSE4-NEXT: movdqa %xmm1, %xmm5 8887 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm5 8888 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8889 ; SSE4-NEXT: blendvpd %xmm4, %xmm2 8890 ; SSE4-NEXT: movdqa %xmm5, %xmm0 8891 ; SSE4-NEXT: blendvpd %xmm1, %xmm3 8892 ; SSE4-NEXT: movapd %xmm2, %xmm0 8893 ; SSE4-NEXT: movapd %xmm3, %xmm1 8894 ; SSE4-NEXT: retq 8895 ; 8896 ; AVX1-LABEL: test163: 8897 ; AVX1: # BB#0: # %entry 8898 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8899 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8900 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8901 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 8902 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8903 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8904 ; AVX1-NEXT: retq 8905 ; 8906 ; AVX2-LABEL: test163: 8907 ; AVX2: # BB#0: # %entry 8908 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8909 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8910 ; AVX2-NEXT: retq 8911 ; 8912 ; AVX512BW-LABEL: test163: 8913 ; AVX512BW: # BB#0: # %entry 8914 ; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 8915 ; AVX512BW-NEXT: retq 8916 entry: 8917 %cmp = icmp sgt <4 x i64> %a, %b 8918 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8919 ret <4 x i64> %sel 8920 } 8921 8922 define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) { 8923 ; SSE2-LABEL: test164: 8924 ; SSE2: # BB#0: # %entry 8925 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0] 8926 ; SSE2-NEXT: movdqa %xmm1, %xmm4 8927 ; SSE2-NEXT: pxor %xmm7, %xmm4 8928 ; SSE2-NEXT: movdqa %xmm3, %xmm5 8929 ; SSE2-NEXT: pxor %xmm7, %xmm5 8930 ; SSE2-NEXT: movdqa %xmm5, %xmm6 8931 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 8932 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 8933 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 8934 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8935 ; SSE2-NEXT: pand %xmm8, %xmm4 8936 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 8937 ; SSE2-NEXT: por %xmm4, %xmm8 8938 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 8939 ; SSE2-NEXT: movdqa %xmm8, %xmm9 8940 ; SSE2-NEXT: pxor %xmm4, %xmm9 8941 ; SSE2-NEXT: movdqa %xmm0, %xmm6 8942 ; SSE2-NEXT: pxor %xmm7, %xmm6 8943 ; SSE2-NEXT: pxor %xmm2, %xmm7 8944 ; SSE2-NEXT: movdqa %xmm7, %xmm5 8945 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 8946 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 8947 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 8948 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8949 ; SSE2-NEXT: pand %xmm10, %xmm6 8950 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 8951 ; SSE2-NEXT: por %xmm6, %xmm5 8952 ; SSE2-NEXT: pxor %xmm5, %xmm4 8953 ; SSE2-NEXT: pandn %xmm0, %xmm5 8954 ; SSE2-NEXT: pandn %xmm2, %xmm4 8955 ; SSE2-NEXT: por %xmm5, %xmm4 8956 ; SSE2-NEXT: pandn %xmm1, %xmm8 8957 ; SSE2-NEXT: pandn %xmm3, %xmm9 8958 ; SSE2-NEXT: por %xmm8, %xmm9 8959 ; SSE2-NEXT: movdqa %xmm4, %xmm0 8960 ; SSE2-NEXT: movdqa %xmm9, %xmm1 8961 ; SSE2-NEXT: retq 8962 ; 8963 ; SSE4-LABEL: test164: 8964 ; SSE4: # BB#0: # %entry 8965 ; SSE4-NEXT: movdqa %xmm0, %xmm4 8966 ; SSE4-NEXT: movdqa %xmm3, %xmm5 8967 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm5 8968 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 8969 ; SSE4-NEXT: pxor %xmm0, %xmm5 8970 ; SSE4-NEXT: movdqa %xmm2, %xmm6 8971 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm6 8972 ; SSE4-NEXT: pxor %xmm6, %xmm0 8973 ; SSE4-NEXT: blendvpd %xmm4, %xmm2 8974 ; SSE4-NEXT: movdqa %xmm5, %xmm0 8975 ; SSE4-NEXT: blendvpd %xmm1, %xmm3 8976 ; SSE4-NEXT: movapd %xmm2, %xmm0 8977 ; SSE4-NEXT: movapd %xmm3, %xmm1 8978 ; SSE4-NEXT: retq 8979 ; 8980 ; AVX1-LABEL: test164: 8981 ; AVX1: # BB#0: # %entry 8982 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8983 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 8984 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8985 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 8986 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8987 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm4 8988 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm3 8989 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8990 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8991 ; AVX1-NEXT: retq 8992 ; 8993 ; AVX2-LABEL: test164: 8994 ; AVX2: # BB#0: # %entry 8995 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 8996 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 8997 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 8998 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8999 ; AVX2-NEXT: retq 9000 ; 9001 ; AVX512BW-LABEL: test164: 9002 ; AVX512BW: # BB#0: # %entry 9003 ; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 9004 ; AVX512BW-NEXT: retq 9005 entry: 9006 %cmp = icmp sge <4 x i64> %a, %b 9007 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 9008 ret <4 x i64> %sel 9009 } 9010 9011 define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) { 9012 ; SSE2-LABEL: test165: 9013 ; SSE2: # BB#0: # %entry 9014 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 9015 ; SSE2-NEXT: movdqa %xmm1, %xmm5 9016 ; SSE2-NEXT: pxor %xmm4, %xmm5 9017 ; SSE2-NEXT: movdqa %xmm3, %xmm6 9018 ; SSE2-NEXT: pxor %xmm4, %xmm6 9019 ; SSE2-NEXT: movdqa %xmm6, %xmm7 9020 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 9021 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9022 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 9023 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 9024 ; SSE2-NEXT: pand %xmm8, %xmm5 9025 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9026 ; SSE2-NEXT: por %xmm5, %xmm6 9027 ; SSE2-NEXT: movdqa %xmm0, %xmm5 9028 ; SSE2-NEXT: pxor %xmm4, %xmm5 9029 ; SSE2-NEXT: pxor %xmm2, %xmm4 9030 ; SSE2-NEXT: movdqa %xmm4, %xmm7 9031 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 9032 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9033 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm4 9034 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 9035 ; SSE2-NEXT: pand %xmm8, %xmm4 9036 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 9037 ; SSE2-NEXT: por %xmm4, %xmm5 9038 ; SSE2-NEXT: pand %xmm5, %xmm0 9039 ; SSE2-NEXT: pandn %xmm2, %xmm5 9040 ; SSE2-NEXT: por %xmm5, %xmm0 9041 ; SSE2-NEXT: pand %xmm6, %xmm1 9042 ; SSE2-NEXT: pandn %xmm3, %xmm6 9043 ; SSE2-NEXT: por %xmm6, %xmm1 9044 ; SSE2-NEXT: retq 9045 ; 9046 ; SSE4-LABEL: test165: 9047 ; SSE4: # BB#0: # %entry 9048 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9049 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9050 ; SSE4-NEXT: movdqa %xmm1, %xmm6 9051 ; SSE4-NEXT: pxor %xmm0, %xmm6 9052 ; SSE4-NEXT: movdqa %xmm3, %xmm5 9053 ; SSE4-NEXT: pxor %xmm0, %xmm5 9054 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9055 ; SSE4-NEXT: movdqa %xmm4, %xmm6 9056 ; SSE4-NEXT: pxor %xmm0, %xmm6 9057 ; SSE4-NEXT: pxor %xmm2, %xmm0 9058 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9059 ; SSE4-NEXT: blendvpd %xmm4, %xmm2 9060 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9061 ; SSE4-NEXT: blendvpd %xmm1, %xmm3 9062 ; SSE4-NEXT: movapd %xmm2, %xmm0 9063 ; SSE4-NEXT: movapd %xmm3, %xmm1 9064 ; SSE4-NEXT: retq 9065 ; 9066 ; AVX1-LABEL: test165: 9067 ; AVX1: # BB#0: # %entry 9068 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9069 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9070 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9071 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 9072 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9073 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9074 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm4 9075 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3 9076 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9077 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9078 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9079 ; AVX1-NEXT: retq 9080 ; 9081 ; AVX2-LABEL: test165: 9082 ; AVX2: # BB#0: # %entry 9083 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9084 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 9085 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 9086 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9087 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9088 ; AVX2-NEXT: retq 9089 ; 9090 ; AVX512BW-LABEL: test165: 9091 ; AVX512BW: # BB#0: # %entry 9092 ; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 9093 ; AVX512BW-NEXT: retq 9094 entry: 9095 %cmp = icmp ult <4 x i64> %a, %b 9096 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 9097 ret <4 x i64> %sel 9098 } 9099 9100 define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) { 9101 ; SSE2-LABEL: test166: 9102 ; SSE2: # BB#0: # %entry 9103 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648] 9104 ; SSE2-NEXT: movdqa %xmm3, %xmm4 9105 ; SSE2-NEXT: pxor %xmm7, %xmm4 9106 ; SSE2-NEXT: movdqa %xmm1, %xmm5 9107 ; SSE2-NEXT: pxor %xmm7, %xmm5 9108 ; SSE2-NEXT: movdqa %xmm5, %xmm6 9109 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 9110 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 9111 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 9112 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9113 ; SSE2-NEXT: pand %xmm8, %xmm4 9114 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 9115 ; SSE2-NEXT: por %xmm4, %xmm8 9116 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 9117 ; SSE2-NEXT: movdqa %xmm8, %xmm9 9118 ; SSE2-NEXT: pxor %xmm4, %xmm9 9119 ; SSE2-NEXT: movdqa %xmm2, %xmm6 9120 ; SSE2-NEXT: pxor %xmm7, %xmm6 9121 ; SSE2-NEXT: pxor %xmm0, %xmm7 9122 ; SSE2-NEXT: movdqa %xmm7, %xmm5 9123 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 9124 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 9125 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 9126 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9127 ; SSE2-NEXT: pand %xmm10, %xmm6 9128 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 9129 ; SSE2-NEXT: por %xmm6, %xmm5 9130 ; SSE2-NEXT: pxor %xmm5, %xmm4 9131 ; SSE2-NEXT: pandn %xmm0, %xmm5 9132 ; SSE2-NEXT: pandn %xmm2, %xmm4 9133 ; SSE2-NEXT: por %xmm5, %xmm4 9134 ; SSE2-NEXT: pandn %xmm1, %xmm8 9135 ; SSE2-NEXT: pandn %xmm3, %xmm9 9136 ; SSE2-NEXT: por %xmm8, %xmm9 9137 ; SSE2-NEXT: movdqa %xmm4, %xmm0 9138 ; SSE2-NEXT: movdqa %xmm9, %xmm1 9139 ; SSE2-NEXT: retq 9140 ; 9141 ; SSE4-LABEL: test166: 9142 ; SSE4: # BB#0: # %entry 9143 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9144 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9145 ; SSE4-NEXT: movdqa %xmm3, %xmm6 9146 ; SSE4-NEXT: pxor %xmm0, %xmm6 9147 ; SSE4-NEXT: movdqa %xmm1, %xmm5 9148 ; SSE4-NEXT: pxor %xmm0, %xmm5 9149 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9150 ; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 9151 ; SSE4-NEXT: pxor %xmm6, %xmm5 9152 ; SSE4-NEXT: movdqa %xmm2, %xmm7 9153 ; SSE4-NEXT: pxor %xmm0, %xmm7 9154 ; SSE4-NEXT: pxor %xmm4, %xmm0 9155 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 9156 ; SSE4-NEXT: pxor %xmm6, %xmm0 9157 ; SSE4-NEXT: blendvpd %xmm4, %xmm2 9158 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9159 ; SSE4-NEXT: blendvpd %xmm1, %xmm3 9160 ; SSE4-NEXT: movapd %xmm2, %xmm0 9161 ; SSE4-NEXT: movapd %xmm3, %xmm1 9162 ; SSE4-NEXT: retq 9163 ; 9164 ; AVX1-LABEL: test166: 9165 ; AVX1: # BB#0: # %entry 9166 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9167 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9168 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9169 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 9170 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9171 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9172 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4 9173 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2 9174 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm5 9175 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3 9176 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3 9177 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3 9178 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9179 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9180 ; AVX1-NEXT: retq 9181 ; 9182 ; AVX2-LABEL: test166: 9183 ; AVX2: # BB#0: # %entry 9184 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9185 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 9186 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 9187 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9188 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 9189 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 9190 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9191 ; AVX2-NEXT: retq 9192 ; 9193 ; AVX512BW-LABEL: test166: 9194 ; AVX512BW: # BB#0: # %entry 9195 ; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 9196 ; AVX512BW-NEXT: retq 9197 entry: 9198 %cmp = icmp ule <4 x i64> %a, %b 9199 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 9200 ret <4 x i64> %sel 9201 } 9202 9203 define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) { 9204 ; SSE2-LABEL: test167: 9205 ; SSE2: # BB#0: # %entry 9206 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 9207 ; SSE2-NEXT: movdqa %xmm3, %xmm5 9208 ; SSE2-NEXT: pxor %xmm4, %xmm5 9209 ; SSE2-NEXT: movdqa %xmm1, %xmm6 9210 ; SSE2-NEXT: pxor %xmm4, %xmm6 9211 ; SSE2-NEXT: movdqa %xmm6, %xmm7 9212 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 9213 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9214 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 9215 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 9216 ; SSE2-NEXT: pand %xmm8, %xmm5 9217 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9218 ; SSE2-NEXT: por %xmm5, %xmm6 9219 ; SSE2-NEXT: movdqa %xmm2, %xmm5 9220 ; SSE2-NEXT: pxor %xmm4, %xmm5 9221 ; SSE2-NEXT: pxor %xmm0, %xmm4 9222 ; SSE2-NEXT: movdqa %xmm4, %xmm7 9223 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 9224 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9225 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm4 9226 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 9227 ; SSE2-NEXT: pand %xmm8, %xmm4 9228 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 9229 ; SSE2-NEXT: por %xmm4, %xmm5 9230 ; SSE2-NEXT: pand %xmm5, %xmm0 9231 ; SSE2-NEXT: pandn %xmm2, %xmm5 9232 ; SSE2-NEXT: por %xmm5, %xmm0 9233 ; SSE2-NEXT: pand %xmm6, %xmm1 9234 ; SSE2-NEXT: pandn %xmm3, %xmm6 9235 ; SSE2-NEXT: por %xmm6, %xmm1 9236 ; SSE2-NEXT: retq 9237 ; 9238 ; SSE4-LABEL: test167: 9239 ; SSE4: # BB#0: # %entry 9240 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9241 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9242 ; SSE4-NEXT: movdqa %xmm3, %xmm6 9243 ; SSE4-NEXT: pxor %xmm0, %xmm6 9244 ; SSE4-NEXT: movdqa %xmm1, %xmm5 9245 ; SSE4-NEXT: pxor %xmm0, %xmm5 9246 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9247 ; SSE4-NEXT: movdqa %xmm2, %xmm6 9248 ; SSE4-NEXT: pxor %xmm0, %xmm6 9249 ; SSE4-NEXT: pxor %xmm4, %xmm0 9250 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9251 ; SSE4-NEXT: blendvpd %xmm4, %xmm2 9252 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9253 ; SSE4-NEXT: blendvpd %xmm1, %xmm3 9254 ; SSE4-NEXT: movapd %xmm2, %xmm0 9255 ; SSE4-NEXT: movapd %xmm3, %xmm1 9256 ; SSE4-NEXT: retq 9257 ; 9258 ; AVX1-LABEL: test167: 9259 ; AVX1: # BB#0: # %entry 9260 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9261 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9262 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9263 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 9264 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9265 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9266 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm4 9267 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3 9268 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9269 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9270 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9271 ; AVX1-NEXT: retq 9272 ; 9273 ; AVX2-LABEL: test167: 9274 ; AVX2: # BB#0: # %entry 9275 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9276 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 9277 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 9278 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9279 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9280 ; AVX2-NEXT: retq 9281 ; 9282 ; AVX512BW-LABEL: test167: 9283 ; AVX512BW: # BB#0: # %entry 9284 ; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 9285 ; AVX512BW-NEXT: retq 9286 entry: 9287 %cmp = icmp ugt <4 x i64> %a, %b 9288 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 9289 ret <4 x i64> %sel 9290 } 9291 9292 define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) { 9293 ; SSE2-LABEL: test168: 9294 ; SSE2: # BB#0: # %entry 9295 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648] 9296 ; SSE2-NEXT: movdqa %xmm1, %xmm4 9297 ; SSE2-NEXT: pxor %xmm7, %xmm4 9298 ; SSE2-NEXT: movdqa %xmm3, %xmm5 9299 ; SSE2-NEXT: pxor %xmm7, %xmm5 9300 ; SSE2-NEXT: movdqa %xmm5, %xmm6 9301 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 9302 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 9303 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 9304 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9305 ; SSE2-NEXT: pand %xmm8, %xmm4 9306 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 9307 ; SSE2-NEXT: por %xmm4, %xmm8 9308 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 9309 ; SSE2-NEXT: movdqa %xmm8, %xmm9 9310 ; SSE2-NEXT: pxor %xmm4, %xmm9 9311 ; SSE2-NEXT: movdqa %xmm0, %xmm6 9312 ; SSE2-NEXT: pxor %xmm7, %xmm6 9313 ; SSE2-NEXT: pxor %xmm2, %xmm7 9314 ; SSE2-NEXT: movdqa %xmm7, %xmm5 9315 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 9316 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 9317 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 9318 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9319 ; SSE2-NEXT: pand %xmm10, %xmm6 9320 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 9321 ; SSE2-NEXT: por %xmm6, %xmm5 9322 ; SSE2-NEXT: pxor %xmm5, %xmm4 9323 ; SSE2-NEXT: pandn %xmm0, %xmm5 9324 ; SSE2-NEXT: pandn %xmm2, %xmm4 9325 ; SSE2-NEXT: por %xmm5, %xmm4 9326 ; SSE2-NEXT: pandn %xmm1, %xmm8 9327 ; SSE2-NEXT: pandn %xmm3, %xmm9 9328 ; SSE2-NEXT: por %xmm8, %xmm9 9329 ; SSE2-NEXT: movdqa %xmm4, %xmm0 9330 ; SSE2-NEXT: movdqa %xmm9, %xmm1 9331 ; SSE2-NEXT: retq 9332 ; 9333 ; SSE4-LABEL: test168: 9334 ; SSE4: # BB#0: # %entry 9335 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9336 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9337 ; SSE4-NEXT: movdqa %xmm1, %xmm6 9338 ; SSE4-NEXT: pxor %xmm0, %xmm6 9339 ; SSE4-NEXT: movdqa %xmm3, %xmm5 9340 ; SSE4-NEXT: pxor %xmm0, %xmm5 9341 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9342 ; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 9343 ; SSE4-NEXT: pxor %xmm6, %xmm5 9344 ; SSE4-NEXT: movdqa %xmm4, %xmm7 9345 ; SSE4-NEXT: pxor %xmm0, %xmm7 9346 ; SSE4-NEXT: pxor %xmm2, %xmm0 9347 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 9348 ; SSE4-NEXT: pxor %xmm6, %xmm0 9349 ; SSE4-NEXT: blendvpd %xmm4, %xmm2 9350 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9351 ; SSE4-NEXT: blendvpd %xmm1, %xmm3 9352 ; SSE4-NEXT: movapd %xmm2, %xmm0 9353 ; SSE4-NEXT: movapd %xmm3, %xmm1 9354 ; SSE4-NEXT: retq 9355 ; 9356 ; AVX1-LABEL: test168: 9357 ; AVX1: # BB#0: # %entry 9358 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9359 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9360 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9361 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 9362 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9363 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9364 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4 9365 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2 9366 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm5 9367 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3 9368 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3 9369 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3 9370 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9371 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9372 ; AVX1-NEXT: retq 9373 ; 9374 ; AVX2-LABEL: test168: 9375 ; AVX2: # BB#0: # %entry 9376 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9377 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 9378 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 9379 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9380 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 9381 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 9382 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9383 ; AVX2-NEXT: retq 9384 ; 9385 ; AVX512BW-LABEL: test168: 9386 ; AVX512BW: # BB#0: # %entry 9387 ; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 9388 ; AVX512BW-NEXT: retq 9389 entry: 9390 %cmp = icmp uge <4 x i64> %a, %b 9391 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 9392 ret <4 x i64> %sel 9393 } 9394 9395 define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) { 9396 ; SSE2-LABEL: test169: 9397 ; SSE2: # BB#0: # %entry 9398 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,0,2147483648,0] 9399 ; SSE2-NEXT: movdqa %xmm1, %xmm4 9400 ; SSE2-NEXT: pxor %xmm5, %xmm4 9401 ; SSE2-NEXT: movdqa %xmm3, %xmm6 9402 ; SSE2-NEXT: pxor %xmm5, %xmm6 9403 ; SSE2-NEXT: movdqa %xmm6, %xmm7 9404 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 9405 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9406 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm6 9407 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 9408 ; SSE2-NEXT: pand %xmm8, %xmm6 9409 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3] 9410 ; SSE2-NEXT: por %xmm6, %xmm4 9411 ; SSE2-NEXT: movdqa %xmm0, %xmm6 9412 ; SSE2-NEXT: pxor %xmm5, %xmm6 9413 ; SSE2-NEXT: pxor %xmm2, %xmm5 9414 ; SSE2-NEXT: movdqa %xmm5, %xmm7 9415 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm7 9416 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9417 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm5 9418 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3] 9419 ; SSE2-NEXT: pand %xmm8, %xmm6 9420 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 9421 ; SSE2-NEXT: por %xmm6, %xmm5 9422 ; SSE2-NEXT: pand %xmm5, %xmm2 9423 ; SSE2-NEXT: pandn %xmm0, %xmm5 9424 ; SSE2-NEXT: por %xmm2, %xmm5 9425 ; SSE2-NEXT: pand %xmm4, %xmm3 9426 ; SSE2-NEXT: pandn %xmm1, %xmm4 9427 ; SSE2-NEXT: por %xmm3, %xmm4 9428 ; SSE2-NEXT: movdqa %xmm5, %xmm0 9429 ; SSE2-NEXT: movdqa %xmm4, %xmm1 9430 ; SSE2-NEXT: retq 9431 ; 9432 ; SSE4-LABEL: test169: 9433 ; SSE4: # BB#0: # %entry 9434 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9435 ; SSE4-NEXT: movdqa %xmm3, %xmm5 9436 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm5 9437 ; SSE4-NEXT: movdqa %xmm2, %xmm0 9438 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 9439 ; SSE4-NEXT: blendvpd %xmm2, %xmm4 9440 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9441 ; SSE4-NEXT: blendvpd %xmm3, %xmm1 9442 ; SSE4-NEXT: movapd %xmm4, %xmm0 9443 ; SSE4-NEXT: retq 9444 ; 9445 ; AVX1-LABEL: test169: 9446 ; AVX1: # BB#0: # %entry 9447 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9448 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 9449 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 9450 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 9451 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9452 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9453 ; AVX1-NEXT: retq 9454 ; 9455 ; AVX2-LABEL: test169: 9456 ; AVX2: # BB#0: # %entry 9457 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 9458 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9459 ; AVX2-NEXT: retq 9460 ; 9461 ; AVX512BW-LABEL: test169: 9462 ; AVX512BW: # BB#0: # %entry 9463 ; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 9464 ; AVX512BW-NEXT: retq 9465 entry: 9466 %cmp = icmp slt <4 x i64> %a, %b 9467 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9468 ret <4 x i64> %sel 9469 } 9470 9471 define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) { 9472 ; SSE2-LABEL: test170: 9473 ; SSE2: # BB#0: # %entry 9474 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0] 9475 ; SSE2-NEXT: movdqa %xmm3, %xmm4 9476 ; SSE2-NEXT: pxor %xmm7, %xmm4 9477 ; SSE2-NEXT: movdqa %xmm1, %xmm5 9478 ; SSE2-NEXT: pxor %xmm7, %xmm5 9479 ; SSE2-NEXT: movdqa %xmm5, %xmm6 9480 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 9481 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 9482 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 9483 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9484 ; SSE2-NEXT: pand %xmm8, %xmm4 9485 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 9486 ; SSE2-NEXT: por %xmm4, %xmm8 9487 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 9488 ; SSE2-NEXT: movdqa %xmm8, %xmm9 9489 ; SSE2-NEXT: pxor %xmm4, %xmm9 9490 ; SSE2-NEXT: movdqa %xmm2, %xmm6 9491 ; SSE2-NEXT: pxor %xmm7, %xmm6 9492 ; SSE2-NEXT: pxor %xmm0, %xmm7 9493 ; SSE2-NEXT: movdqa %xmm7, %xmm5 9494 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 9495 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 9496 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 9497 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9498 ; SSE2-NEXT: pand %xmm10, %xmm6 9499 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 9500 ; SSE2-NEXT: por %xmm6, %xmm5 9501 ; SSE2-NEXT: pxor %xmm5, %xmm4 9502 ; SSE2-NEXT: pandn %xmm2, %xmm5 9503 ; SSE2-NEXT: pandn %xmm0, %xmm4 9504 ; SSE2-NEXT: por %xmm5, %xmm4 9505 ; SSE2-NEXT: pandn %xmm3, %xmm8 9506 ; SSE2-NEXT: pandn %xmm1, %xmm9 9507 ; SSE2-NEXT: por %xmm8, %xmm9 9508 ; SSE2-NEXT: movdqa %xmm4, %xmm0 9509 ; SSE2-NEXT: movdqa %xmm9, %xmm1 9510 ; SSE2-NEXT: retq 9511 ; 9512 ; SSE4-LABEL: test170: 9513 ; SSE4: # BB#0: # %entry 9514 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9515 ; SSE4-NEXT: movdqa %xmm1, %xmm5 9516 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm5 9517 ; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 9518 ; SSE4-NEXT: pxor %xmm6, %xmm5 9519 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9520 ; SSE4-NEXT: pxor %xmm6, %xmm0 9521 ; SSE4-NEXT: blendvpd %xmm2, %xmm4 9522 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9523 ; SSE4-NEXT: blendvpd %xmm3, %xmm1 9524 ; SSE4-NEXT: movapd %xmm4, %xmm0 9525 ; SSE4-NEXT: retq 9526 ; 9527 ; AVX1-LABEL: test170: 9528 ; AVX1: # BB#0: # %entry 9529 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9530 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 9531 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 9532 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 9533 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 9534 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm4 9535 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm3 9536 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9537 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9538 ; AVX1-NEXT: retq 9539 ; 9540 ; AVX2-LABEL: test170: 9541 ; AVX2: # BB#0: # %entry 9542 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 9543 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 9544 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 9545 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9546 ; AVX2-NEXT: retq 9547 ; 9548 ; AVX512BW-LABEL: test170: 9549 ; AVX512BW: # BB#0: # %entry 9550 ; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 9551 ; AVX512BW-NEXT: retq 9552 entry: 9553 %cmp = icmp sle <4 x i64> %a, %b 9554 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9555 ret <4 x i64> %sel 9556 } 9557 9558 define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) { 9559 ; SSE2-LABEL: test171: 9560 ; SSE2: # BB#0: # %entry 9561 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,0,2147483648,0] 9562 ; SSE2-NEXT: movdqa %xmm3, %xmm4 9563 ; SSE2-NEXT: pxor %xmm5, %xmm4 9564 ; SSE2-NEXT: movdqa %xmm1, %xmm6 9565 ; SSE2-NEXT: pxor %xmm5, %xmm6 9566 ; SSE2-NEXT: movdqa %xmm6, %xmm7 9567 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 9568 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9569 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm6 9570 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 9571 ; SSE2-NEXT: pand %xmm8, %xmm6 9572 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3] 9573 ; SSE2-NEXT: por %xmm6, %xmm4 9574 ; SSE2-NEXT: movdqa %xmm2, %xmm6 9575 ; SSE2-NEXT: pxor %xmm5, %xmm6 9576 ; SSE2-NEXT: pxor %xmm0, %xmm5 9577 ; SSE2-NEXT: movdqa %xmm5, %xmm7 9578 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm7 9579 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9580 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm5 9581 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3] 9582 ; SSE2-NEXT: pand %xmm8, %xmm6 9583 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 9584 ; SSE2-NEXT: por %xmm6, %xmm5 9585 ; SSE2-NEXT: pand %xmm5, %xmm2 9586 ; SSE2-NEXT: pandn %xmm0, %xmm5 9587 ; SSE2-NEXT: por %xmm2, %xmm5 9588 ; SSE2-NEXT: pand %xmm4, %xmm3 9589 ; SSE2-NEXT: pandn %xmm1, %xmm4 9590 ; SSE2-NEXT: por %xmm3, %xmm4 9591 ; SSE2-NEXT: movdqa %xmm5, %xmm0 9592 ; SSE2-NEXT: movdqa %xmm4, %xmm1 9593 ; SSE2-NEXT: retq 9594 ; 9595 ; SSE4-LABEL: test171: 9596 ; SSE4: # BB#0: # %entry 9597 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9598 ; SSE4-NEXT: movdqa %xmm1, %xmm5 9599 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm5 9600 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9601 ; SSE4-NEXT: blendvpd %xmm2, %xmm4 9602 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9603 ; SSE4-NEXT: blendvpd %xmm3, %xmm1 9604 ; SSE4-NEXT: movapd %xmm4, %xmm0 9605 ; SSE4-NEXT: retq 9606 ; 9607 ; AVX1-LABEL: test171: 9608 ; AVX1: # BB#0: # %entry 9609 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9610 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 9611 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 9612 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 9613 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9614 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9615 ; AVX1-NEXT: retq 9616 ; 9617 ; AVX2-LABEL: test171: 9618 ; AVX2: # BB#0: # %entry 9619 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 9620 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9621 ; AVX2-NEXT: retq 9622 ; 9623 ; AVX512BW-LABEL: test171: 9624 ; AVX512BW: # BB#0: # %entry 9625 ; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 9626 ; AVX512BW-NEXT: retq 9627 entry: 9628 %cmp = icmp sgt <4 x i64> %a, %b 9629 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9630 ret <4 x i64> %sel 9631 } 9632 9633 define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) { 9634 ; SSE2-LABEL: test172: 9635 ; SSE2: # BB#0: # %entry 9636 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0] 9637 ; SSE2-NEXT: movdqa %xmm1, %xmm4 9638 ; SSE2-NEXT: pxor %xmm7, %xmm4 9639 ; SSE2-NEXT: movdqa %xmm3, %xmm5 9640 ; SSE2-NEXT: pxor %xmm7, %xmm5 9641 ; SSE2-NEXT: movdqa %xmm5, %xmm6 9642 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 9643 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 9644 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 9645 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9646 ; SSE2-NEXT: pand %xmm8, %xmm4 9647 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 9648 ; SSE2-NEXT: por %xmm4, %xmm8 9649 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 9650 ; SSE2-NEXT: movdqa %xmm8, %xmm9 9651 ; SSE2-NEXT: pxor %xmm4, %xmm9 9652 ; SSE2-NEXT: movdqa %xmm0, %xmm6 9653 ; SSE2-NEXT: pxor %xmm7, %xmm6 9654 ; SSE2-NEXT: pxor %xmm2, %xmm7 9655 ; SSE2-NEXT: movdqa %xmm7, %xmm5 9656 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 9657 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 9658 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 9659 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9660 ; SSE2-NEXT: pand %xmm10, %xmm6 9661 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 9662 ; SSE2-NEXT: por %xmm6, %xmm5 9663 ; SSE2-NEXT: pxor %xmm5, %xmm4 9664 ; SSE2-NEXT: pandn %xmm2, %xmm5 9665 ; SSE2-NEXT: pandn %xmm0, %xmm4 9666 ; SSE2-NEXT: por %xmm5, %xmm4 9667 ; SSE2-NEXT: pandn %xmm3, %xmm8 9668 ; SSE2-NEXT: pandn %xmm1, %xmm9 9669 ; SSE2-NEXT: por %xmm8, %xmm9 9670 ; SSE2-NEXT: movdqa %xmm4, %xmm0 9671 ; SSE2-NEXT: movdqa %xmm9, %xmm1 9672 ; SSE2-NEXT: retq 9673 ; 9674 ; SSE4-LABEL: test172: 9675 ; SSE4: # BB#0: # %entry 9676 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9677 ; SSE4-NEXT: movdqa %xmm3, %xmm5 9678 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm5 9679 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 9680 ; SSE4-NEXT: pxor %xmm0, %xmm5 9681 ; SSE4-NEXT: movdqa %xmm2, %xmm6 9682 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm6 9683 ; SSE4-NEXT: pxor %xmm6, %xmm0 9684 ; SSE4-NEXT: blendvpd %xmm2, %xmm4 9685 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9686 ; SSE4-NEXT: blendvpd %xmm3, %xmm1 9687 ; SSE4-NEXT: movapd %xmm4, %xmm0 9688 ; SSE4-NEXT: retq 9689 ; 9690 ; AVX1-LABEL: test172: 9691 ; AVX1: # BB#0: # %entry 9692 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9693 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 9694 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 9695 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 9696 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 9697 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm4 9698 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm3 9699 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9700 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9701 ; AVX1-NEXT: retq 9702 ; 9703 ; AVX2-LABEL: test172: 9704 ; AVX2: # BB#0: # %entry 9705 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 9706 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 9707 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 9708 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9709 ; AVX2-NEXT: retq 9710 ; 9711 ; AVX512BW-LABEL: test172: 9712 ; AVX512BW: # BB#0: # %entry 9713 ; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 9714 ; AVX512BW-NEXT: retq 9715 entry: 9716 %cmp = icmp sge <4 x i64> %a, %b 9717 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9718 ret <4 x i64> %sel 9719 } 9720 9721 define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) { 9722 ; SSE2-LABEL: test173: 9723 ; SSE2: # BB#0: # %entry 9724 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 9725 ; SSE2-NEXT: movdqa %xmm1, %xmm4 9726 ; SSE2-NEXT: pxor %xmm5, %xmm4 9727 ; SSE2-NEXT: movdqa %xmm3, %xmm6 9728 ; SSE2-NEXT: pxor %xmm5, %xmm6 9729 ; SSE2-NEXT: movdqa %xmm6, %xmm7 9730 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 9731 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9732 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm6 9733 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 9734 ; SSE2-NEXT: pand %xmm8, %xmm6 9735 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3] 9736 ; SSE2-NEXT: por %xmm6, %xmm4 9737 ; SSE2-NEXT: movdqa %xmm0, %xmm6 9738 ; SSE2-NEXT: pxor %xmm5, %xmm6 9739 ; SSE2-NEXT: pxor %xmm2, %xmm5 9740 ; SSE2-NEXT: movdqa %xmm5, %xmm7 9741 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm7 9742 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9743 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm5 9744 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3] 9745 ; SSE2-NEXT: pand %xmm8, %xmm6 9746 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 9747 ; SSE2-NEXT: por %xmm6, %xmm5 9748 ; SSE2-NEXT: pand %xmm5, %xmm2 9749 ; SSE2-NEXT: pandn %xmm0, %xmm5 9750 ; SSE2-NEXT: por %xmm2, %xmm5 9751 ; SSE2-NEXT: pand %xmm4, %xmm3 9752 ; SSE2-NEXT: pandn %xmm1, %xmm4 9753 ; SSE2-NEXT: por %xmm3, %xmm4 9754 ; SSE2-NEXT: movdqa %xmm5, %xmm0 9755 ; SSE2-NEXT: movdqa %xmm4, %xmm1 9756 ; SSE2-NEXT: retq 9757 ; 9758 ; SSE4-LABEL: test173: 9759 ; SSE4: # BB#0: # %entry 9760 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9761 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9762 ; SSE4-NEXT: movdqa %xmm1, %xmm6 9763 ; SSE4-NEXT: pxor %xmm0, %xmm6 9764 ; SSE4-NEXT: movdqa %xmm3, %xmm5 9765 ; SSE4-NEXT: pxor %xmm0, %xmm5 9766 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9767 ; SSE4-NEXT: movdqa %xmm4, %xmm6 9768 ; SSE4-NEXT: pxor %xmm0, %xmm6 9769 ; SSE4-NEXT: pxor %xmm2, %xmm0 9770 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9771 ; SSE4-NEXT: blendvpd %xmm2, %xmm4 9772 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9773 ; SSE4-NEXT: blendvpd %xmm3, %xmm1 9774 ; SSE4-NEXT: movapd %xmm4, %xmm0 9775 ; SSE4-NEXT: retq 9776 ; 9777 ; AVX1-LABEL: test173: 9778 ; AVX1: # BB#0: # %entry 9779 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9780 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9781 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9782 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 9783 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9784 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9785 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm4 9786 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3 9787 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9788 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9789 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9790 ; AVX1-NEXT: retq 9791 ; 9792 ; AVX2-LABEL: test173: 9793 ; AVX2: # BB#0: # %entry 9794 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9795 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 9796 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 9797 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9798 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9799 ; AVX2-NEXT: retq 9800 ; 9801 ; AVX512BW-LABEL: test173: 9802 ; AVX512BW: # BB#0: # %entry 9803 ; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 9804 ; AVX512BW-NEXT: retq 9805 entry: 9806 %cmp = icmp ult <4 x i64> %a, %b 9807 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9808 ret <4 x i64> %sel 9809 } 9810 9811 define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) { 9812 ; SSE2-LABEL: test174: 9813 ; SSE2: # BB#0: # %entry 9814 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648] 9815 ; SSE2-NEXT: movdqa %xmm3, %xmm4 9816 ; SSE2-NEXT: pxor %xmm7, %xmm4 9817 ; SSE2-NEXT: movdqa %xmm1, %xmm5 9818 ; SSE2-NEXT: pxor %xmm7, %xmm5 9819 ; SSE2-NEXT: movdqa %xmm5, %xmm6 9820 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 9821 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 9822 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 9823 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9824 ; SSE2-NEXT: pand %xmm8, %xmm4 9825 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 9826 ; SSE2-NEXT: por %xmm4, %xmm8 9827 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 9828 ; SSE2-NEXT: movdqa %xmm8, %xmm9 9829 ; SSE2-NEXT: pxor %xmm4, %xmm9 9830 ; SSE2-NEXT: movdqa %xmm2, %xmm6 9831 ; SSE2-NEXT: pxor %xmm7, %xmm6 9832 ; SSE2-NEXT: pxor %xmm0, %xmm7 9833 ; SSE2-NEXT: movdqa %xmm7, %xmm5 9834 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 9835 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 9836 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 9837 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9838 ; SSE2-NEXT: pand %xmm10, %xmm6 9839 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 9840 ; SSE2-NEXT: por %xmm6, %xmm5 9841 ; SSE2-NEXT: pxor %xmm5, %xmm4 9842 ; SSE2-NEXT: pandn %xmm2, %xmm5 9843 ; SSE2-NEXT: pandn %xmm0, %xmm4 9844 ; SSE2-NEXT: por %xmm5, %xmm4 9845 ; SSE2-NEXT: pandn %xmm3, %xmm8 9846 ; SSE2-NEXT: pandn %xmm1, %xmm9 9847 ; SSE2-NEXT: por %xmm8, %xmm9 9848 ; SSE2-NEXT: movdqa %xmm4, %xmm0 9849 ; SSE2-NEXT: movdqa %xmm9, %xmm1 9850 ; SSE2-NEXT: retq 9851 ; 9852 ; SSE4-LABEL: test174: 9853 ; SSE4: # BB#0: # %entry 9854 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9855 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9856 ; SSE4-NEXT: movdqa %xmm3, %xmm6 9857 ; SSE4-NEXT: pxor %xmm0, %xmm6 9858 ; SSE4-NEXT: movdqa %xmm1, %xmm5 9859 ; SSE4-NEXT: pxor %xmm0, %xmm5 9860 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9861 ; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 9862 ; SSE4-NEXT: pxor %xmm6, %xmm5 9863 ; SSE4-NEXT: movdqa %xmm2, %xmm7 9864 ; SSE4-NEXT: pxor %xmm0, %xmm7 9865 ; SSE4-NEXT: pxor %xmm4, %xmm0 9866 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 9867 ; SSE4-NEXT: pxor %xmm6, %xmm0 9868 ; SSE4-NEXT: blendvpd %xmm2, %xmm4 9869 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9870 ; SSE4-NEXT: blendvpd %xmm3, %xmm1 9871 ; SSE4-NEXT: movapd %xmm4, %xmm0 9872 ; SSE4-NEXT: retq 9873 ; 9874 ; AVX1-LABEL: test174: 9875 ; AVX1: # BB#0: # %entry 9876 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9877 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9878 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9879 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 9880 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9881 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9882 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4 9883 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2 9884 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm5 9885 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3 9886 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3 9887 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3 9888 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9889 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9890 ; AVX1-NEXT: retq 9891 ; 9892 ; AVX2-LABEL: test174: 9893 ; AVX2: # BB#0: # %entry 9894 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9895 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 9896 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 9897 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9898 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 9899 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 9900 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9901 ; AVX2-NEXT: retq 9902 ; 9903 ; AVX512BW-LABEL: test174: 9904 ; AVX512BW: # BB#0: # %entry 9905 ; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 9906 ; AVX512BW-NEXT: retq 9907 entry: 9908 %cmp = icmp ule <4 x i64> %a, %b 9909 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9910 ret <4 x i64> %sel 9911 } 9912 9913 define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) { 9914 ; SSE2-LABEL: test175: 9915 ; SSE2: # BB#0: # %entry 9916 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 9917 ; SSE2-NEXT: movdqa %xmm3, %xmm4 9918 ; SSE2-NEXT: pxor %xmm5, %xmm4 9919 ; SSE2-NEXT: movdqa %xmm1, %xmm6 9920 ; SSE2-NEXT: pxor %xmm5, %xmm6 9921 ; SSE2-NEXT: movdqa %xmm6, %xmm7 9922 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 9923 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9924 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm6 9925 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 9926 ; SSE2-NEXT: pand %xmm8, %xmm6 9927 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3] 9928 ; SSE2-NEXT: por %xmm6, %xmm4 9929 ; SSE2-NEXT: movdqa %xmm2, %xmm6 9930 ; SSE2-NEXT: pxor %xmm5, %xmm6 9931 ; SSE2-NEXT: pxor %xmm0, %xmm5 9932 ; SSE2-NEXT: movdqa %xmm5, %xmm7 9933 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm7 9934 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9935 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm5 9936 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3] 9937 ; SSE2-NEXT: pand %xmm8, %xmm6 9938 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 9939 ; SSE2-NEXT: por %xmm6, %xmm5 9940 ; SSE2-NEXT: pand %xmm5, %xmm2 9941 ; SSE2-NEXT: pandn %xmm0, %xmm5 9942 ; SSE2-NEXT: por %xmm2, %xmm5 9943 ; SSE2-NEXT: pand %xmm4, %xmm3 9944 ; SSE2-NEXT: pandn %xmm1, %xmm4 9945 ; SSE2-NEXT: por %xmm3, %xmm4 9946 ; SSE2-NEXT: movdqa %xmm5, %xmm0 9947 ; SSE2-NEXT: movdqa %xmm4, %xmm1 9948 ; SSE2-NEXT: retq 9949 ; 9950 ; SSE4-LABEL: test175: 9951 ; SSE4: # BB#0: # %entry 9952 ; SSE4-NEXT: movdqa %xmm0, %xmm4 9953 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9954 ; SSE4-NEXT: movdqa %xmm3, %xmm6 9955 ; SSE4-NEXT: pxor %xmm0, %xmm6 9956 ; SSE4-NEXT: movdqa %xmm1, %xmm5 9957 ; SSE4-NEXT: pxor %xmm0, %xmm5 9958 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9959 ; SSE4-NEXT: movdqa %xmm2, %xmm6 9960 ; SSE4-NEXT: pxor %xmm0, %xmm6 9961 ; SSE4-NEXT: pxor %xmm4, %xmm0 9962 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9963 ; SSE4-NEXT: blendvpd %xmm2, %xmm4 9964 ; SSE4-NEXT: movdqa %xmm5, %xmm0 9965 ; SSE4-NEXT: blendvpd %xmm3, %xmm1 9966 ; SSE4-NEXT: movapd %xmm4, %xmm0 9967 ; SSE4-NEXT: retq 9968 ; 9969 ; AVX1-LABEL: test175: 9970 ; AVX1: # BB#0: # %entry 9971 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9972 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9973 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9974 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 9975 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9976 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9977 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm4 9978 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3 9979 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9980 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9981 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9982 ; AVX1-NEXT: retq 9983 ; 9984 ; AVX2-LABEL: test175: 9985 ; AVX2: # BB#0: # %entry 9986 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9987 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 9988 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 9989 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9990 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9991 ; AVX2-NEXT: retq 9992 ; 9993 ; AVX512BW-LABEL: test175: 9994 ; AVX512BW: # BB#0: # %entry 9995 ; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 9996 ; AVX512BW-NEXT: retq 9997 entry: 9998 %cmp = icmp ugt <4 x i64> %a, %b 9999 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 10000 ret <4 x i64> %sel 10001 } 10002 10003 define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) { 10004 ; SSE2-LABEL: test176: 10005 ; SSE2: # BB#0: # %entry 10006 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648] 10007 ; SSE2-NEXT: movdqa %xmm1, %xmm4 10008 ; SSE2-NEXT: pxor %xmm7, %xmm4 10009 ; SSE2-NEXT: movdqa %xmm3, %xmm5 10010 ; SSE2-NEXT: pxor %xmm7, %xmm5 10011 ; SSE2-NEXT: movdqa %xmm5, %xmm6 10012 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 10013 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 10014 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 10015 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 10016 ; SSE2-NEXT: pand %xmm8, %xmm4 10017 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 10018 ; SSE2-NEXT: por %xmm4, %xmm8 10019 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 10020 ; SSE2-NEXT: movdqa %xmm8, %xmm9 10021 ; SSE2-NEXT: pxor %xmm4, %xmm9 10022 ; SSE2-NEXT: movdqa %xmm0, %xmm6 10023 ; SSE2-NEXT: pxor %xmm7, %xmm6 10024 ; SSE2-NEXT: pxor %xmm2, %xmm7 10025 ; SSE2-NEXT: movdqa %xmm7, %xmm5 10026 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 10027 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 10028 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 10029 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 10030 ; SSE2-NEXT: pand %xmm10, %xmm6 10031 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 10032 ; SSE2-NEXT: por %xmm6, %xmm5 10033 ; SSE2-NEXT: pxor %xmm5, %xmm4 10034 ; SSE2-NEXT: pandn %xmm2, %xmm5 10035 ; SSE2-NEXT: pandn %xmm0, %xmm4 10036 ; SSE2-NEXT: por %xmm5, %xmm4 10037 ; SSE2-NEXT: pandn %xmm3, %xmm8 10038 ; SSE2-NEXT: pandn %xmm1, %xmm9 10039 ; SSE2-NEXT: por %xmm8, %xmm9 10040 ; SSE2-NEXT: movdqa %xmm4, %xmm0 10041 ; SSE2-NEXT: movdqa %xmm9, %xmm1 10042 ; SSE2-NEXT: retq 10043 ; 10044 ; SSE4-LABEL: test176: 10045 ; SSE4: # BB#0: # %entry 10046 ; SSE4-NEXT: movdqa %xmm0, %xmm4 10047 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10048 ; SSE4-NEXT: movdqa %xmm1, %xmm6 10049 ; SSE4-NEXT: pxor %xmm0, %xmm6 10050 ; SSE4-NEXT: movdqa %xmm3, %xmm5 10051 ; SSE4-NEXT: pxor %xmm0, %xmm5 10052 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 10053 ; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 10054 ; SSE4-NEXT: pxor %xmm6, %xmm5 10055 ; SSE4-NEXT: movdqa %xmm4, %xmm7 10056 ; SSE4-NEXT: pxor %xmm0, %xmm7 10057 ; SSE4-NEXT: pxor %xmm2, %xmm0 10058 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 10059 ; SSE4-NEXT: pxor %xmm6, %xmm0 10060 ; SSE4-NEXT: blendvpd %xmm2, %xmm4 10061 ; SSE4-NEXT: movdqa %xmm5, %xmm0 10062 ; SSE4-NEXT: blendvpd %xmm3, %xmm1 10063 ; SSE4-NEXT: movapd %xmm4, %xmm0 10064 ; SSE4-NEXT: retq 10065 ; 10066 ; AVX1-LABEL: test176: 10067 ; AVX1: # BB#0: # %entry 10068 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 10069 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 10070 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 10071 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 10072 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 10073 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 10074 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4 10075 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2 10076 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm5 10077 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3 10078 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3 10079 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3 10080 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 10081 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 10082 ; AVX1-NEXT: retq 10083 ; 10084 ; AVX2-LABEL: test176: 10085 ; AVX2: # BB#0: # %entry 10086 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 10087 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 10088 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 10089 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 10090 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 10091 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 10092 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 10093 ; AVX2-NEXT: retq 10094 ; 10095 ; AVX512BW-LABEL: test176: 10096 ; AVX512BW: # BB#0: # %entry 10097 ; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 10098 ; AVX512BW-NEXT: retq 10099 entry: 10100 %cmp = icmp uge <4 x i64> %a, %b 10101 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 10102 ret <4 x i64> %sel 10103 } 10104 10105 define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) { 10106 ; SSE2-LABEL: test177: 10107 ; SSE2: # BB#0: # %entry 10108 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10109 ; SSE2-NEXT: movdqa %xmm0, %xmm3 10110 ; SSE2-NEXT: pxor %xmm2, %xmm3 10111 ; SSE2-NEXT: pxor %xmm1, %xmm2 10112 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10113 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10114 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10115 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10116 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10117 ; SSE2-NEXT: pand %xmm5, %xmm2 10118 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10119 ; SSE2-NEXT: por %xmm2, %xmm3 10120 ; SSE2-NEXT: pand %xmm3, %xmm0 10121 ; SSE2-NEXT: pandn %xmm1, %xmm3 10122 ; SSE2-NEXT: por %xmm3, %xmm0 10123 ; SSE2-NEXT: retq 10124 ; 10125 ; SSE4-LABEL: test177: 10126 ; SSE4: # BB#0: # %entry 10127 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10128 ; SSE4-NEXT: movdqa %xmm1, %xmm0 10129 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 10130 ; SSE4-NEXT: blendvpd %xmm2, %xmm1 10131 ; SSE4-NEXT: movapd %xmm1, %xmm0 10132 ; SSE4-NEXT: retq 10133 ; 10134 ; AVX1-LABEL: test177: 10135 ; AVX1: # BB#0: # %entry 10136 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10137 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10138 ; AVX1-NEXT: retq 10139 ; 10140 ; AVX2-LABEL: test177: 10141 ; AVX2: # BB#0: # %entry 10142 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10143 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10144 ; AVX2-NEXT: retq 10145 ; 10146 ; AVX512BW-LABEL: test177: 10147 ; AVX512BW: # BB#0: # %entry 10148 ; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 10149 ; AVX512BW-NEXT: retq 10150 entry: 10151 %cmp = icmp slt <2 x i64> %a, %b 10152 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10153 ret <2 x i64> %sel 10154 } 10155 10156 define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) { 10157 ; SSE2-LABEL: test178: 10158 ; SSE2: # BB#0: # %entry 10159 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10160 ; SSE2-NEXT: movdqa %xmm1, %xmm3 10161 ; SSE2-NEXT: pxor %xmm2, %xmm3 10162 ; SSE2-NEXT: pxor %xmm0, %xmm2 10163 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10164 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10165 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10166 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10167 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10168 ; SSE2-NEXT: pand %xmm5, %xmm2 10169 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10170 ; SSE2-NEXT: por %xmm2, %xmm3 10171 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10172 ; SSE2-NEXT: pxor %xmm3, %xmm2 10173 ; SSE2-NEXT: pandn %xmm0, %xmm3 10174 ; SSE2-NEXT: pandn %xmm1, %xmm2 10175 ; SSE2-NEXT: por %xmm3, %xmm2 10176 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10177 ; SSE2-NEXT: retq 10178 ; 10179 ; SSE4-LABEL: test178: 10180 ; SSE4: # BB#0: # %entry 10181 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10182 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 10183 ; SSE4-NEXT: pcmpeqd %xmm3, %xmm3 10184 ; SSE4-NEXT: pxor %xmm3, %xmm0 10185 ; SSE4-NEXT: blendvpd %xmm2, %xmm1 10186 ; SSE4-NEXT: movapd %xmm1, %xmm0 10187 ; SSE4-NEXT: retq 10188 ; 10189 ; AVX1-LABEL: test178: 10190 ; AVX1: # BB#0: # %entry 10191 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10192 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10193 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10194 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10195 ; AVX1-NEXT: retq 10196 ; 10197 ; AVX2-LABEL: test178: 10198 ; AVX2: # BB#0: # %entry 10199 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10200 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10201 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10202 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10203 ; AVX2-NEXT: retq 10204 ; 10205 ; AVX512BW-LABEL: test178: 10206 ; AVX512BW: # BB#0: # %entry 10207 ; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 10208 ; AVX512BW-NEXT: retq 10209 entry: 10210 %cmp = icmp sle <2 x i64> %a, %b 10211 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10212 ret <2 x i64> %sel 10213 } 10214 10215 define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) { 10216 ; SSE2-LABEL: test179: 10217 ; SSE2: # BB#0: # %entry 10218 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10219 ; SSE2-NEXT: movdqa %xmm1, %xmm3 10220 ; SSE2-NEXT: pxor %xmm2, %xmm3 10221 ; SSE2-NEXT: pxor %xmm0, %xmm2 10222 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10223 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10224 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10225 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10226 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10227 ; SSE2-NEXT: pand %xmm5, %xmm2 10228 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10229 ; SSE2-NEXT: por %xmm2, %xmm3 10230 ; SSE2-NEXT: pand %xmm3, %xmm0 10231 ; SSE2-NEXT: pandn %xmm1, %xmm3 10232 ; SSE2-NEXT: por %xmm3, %xmm0 10233 ; SSE2-NEXT: retq 10234 ; 10235 ; SSE4-LABEL: test179: 10236 ; SSE4: # BB#0: # %entry 10237 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10238 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 10239 ; SSE4-NEXT: blendvpd %xmm2, %xmm1 10240 ; SSE4-NEXT: movapd %xmm1, %xmm0 10241 ; SSE4-NEXT: retq 10242 ; 10243 ; AVX1-LABEL: test179: 10244 ; AVX1: # BB#0: # %entry 10245 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10246 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10247 ; AVX1-NEXT: retq 10248 ; 10249 ; AVX2-LABEL: test179: 10250 ; AVX2: # BB#0: # %entry 10251 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10252 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10253 ; AVX2-NEXT: retq 10254 ; 10255 ; AVX512BW-LABEL: test179: 10256 ; AVX512BW: # BB#0: # %entry 10257 ; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 10258 ; AVX512BW-NEXT: retq 10259 entry: 10260 %cmp = icmp sgt <2 x i64> %a, %b 10261 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10262 ret <2 x i64> %sel 10263 } 10264 10265 define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) { 10266 ; SSE2-LABEL: test180: 10267 ; SSE2: # BB#0: # %entry 10268 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10269 ; SSE2-NEXT: movdqa %xmm0, %xmm3 10270 ; SSE2-NEXT: pxor %xmm2, %xmm3 10271 ; SSE2-NEXT: pxor %xmm1, %xmm2 10272 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10273 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10274 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10275 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10276 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10277 ; SSE2-NEXT: pand %xmm5, %xmm2 10278 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10279 ; SSE2-NEXT: por %xmm2, %xmm3 10280 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10281 ; SSE2-NEXT: pxor %xmm3, %xmm2 10282 ; SSE2-NEXT: pandn %xmm0, %xmm3 10283 ; SSE2-NEXT: pandn %xmm1, %xmm2 10284 ; SSE2-NEXT: por %xmm3, %xmm2 10285 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10286 ; SSE2-NEXT: retq 10287 ; 10288 ; SSE4-LABEL: test180: 10289 ; SSE4: # BB#0: # %entry 10290 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10291 ; SSE4-NEXT: movdqa %xmm1, %xmm3 10292 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm3 10293 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 10294 ; SSE4-NEXT: pxor %xmm3, %xmm0 10295 ; SSE4-NEXT: blendvpd %xmm2, %xmm1 10296 ; SSE4-NEXT: movapd %xmm1, %xmm0 10297 ; SSE4-NEXT: retq 10298 ; 10299 ; AVX1-LABEL: test180: 10300 ; AVX1: # BB#0: # %entry 10301 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10302 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10303 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10304 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10305 ; AVX1-NEXT: retq 10306 ; 10307 ; AVX2-LABEL: test180: 10308 ; AVX2: # BB#0: # %entry 10309 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10310 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10311 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10312 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10313 ; AVX2-NEXT: retq 10314 ; 10315 ; AVX512BW-LABEL: test180: 10316 ; AVX512BW: # BB#0: # %entry 10317 ; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 10318 ; AVX512BW-NEXT: retq 10319 entry: 10320 %cmp = icmp sge <2 x i64> %a, %b 10321 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10322 ret <2 x i64> %sel 10323 } 10324 10325 define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) { 10326 ; SSE2-LABEL: test181: 10327 ; SSE2: # BB#0: # %entry 10328 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10329 ; SSE2-NEXT: movdqa %xmm0, %xmm3 10330 ; SSE2-NEXT: pxor %xmm2, %xmm3 10331 ; SSE2-NEXT: pxor %xmm1, %xmm2 10332 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10333 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10334 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10335 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10336 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10337 ; SSE2-NEXT: pand %xmm5, %xmm2 10338 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10339 ; SSE2-NEXT: por %xmm2, %xmm3 10340 ; SSE2-NEXT: pand %xmm3, %xmm0 10341 ; SSE2-NEXT: pandn %xmm1, %xmm3 10342 ; SSE2-NEXT: por %xmm3, %xmm0 10343 ; SSE2-NEXT: retq 10344 ; 10345 ; SSE4-LABEL: test181: 10346 ; SSE4: # BB#0: # %entry 10347 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10348 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10349 ; SSE4-NEXT: movdqa %xmm2, %xmm3 10350 ; SSE4-NEXT: pxor %xmm0, %xmm3 10351 ; SSE4-NEXT: pxor %xmm1, %xmm0 10352 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10353 ; SSE4-NEXT: blendvpd %xmm2, %xmm1 10354 ; SSE4-NEXT: movapd %xmm1, %xmm0 10355 ; SSE4-NEXT: retq 10356 ; 10357 ; AVX1-LABEL: test181: 10358 ; AVX1: # BB#0: # %entry 10359 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10360 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 10361 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 10362 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10363 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10364 ; AVX1-NEXT: retq 10365 ; 10366 ; AVX2-LABEL: test181: 10367 ; AVX2: # BB#0: # %entry 10368 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10369 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 10370 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 10371 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10372 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10373 ; AVX2-NEXT: retq 10374 ; 10375 ; AVX512BW-LABEL: test181: 10376 ; AVX512BW: # BB#0: # %entry 10377 ; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 10378 ; AVX512BW-NEXT: retq 10379 entry: 10380 %cmp = icmp ult <2 x i64> %a, %b 10381 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10382 ret <2 x i64> %sel 10383 } 10384 10385 define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) { 10386 ; SSE2-LABEL: test182: 10387 ; SSE2: # BB#0: # %entry 10388 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10389 ; SSE2-NEXT: movdqa %xmm1, %xmm3 10390 ; SSE2-NEXT: pxor %xmm2, %xmm3 10391 ; SSE2-NEXT: pxor %xmm0, %xmm2 10392 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10393 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10394 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10395 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10396 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10397 ; SSE2-NEXT: pand %xmm5, %xmm2 10398 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10399 ; SSE2-NEXT: por %xmm2, %xmm3 10400 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10401 ; SSE2-NEXT: pxor %xmm3, %xmm2 10402 ; SSE2-NEXT: pandn %xmm0, %xmm3 10403 ; SSE2-NEXT: pandn %xmm1, %xmm2 10404 ; SSE2-NEXT: por %xmm3, %xmm2 10405 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10406 ; SSE2-NEXT: retq 10407 ; 10408 ; SSE4-LABEL: test182: 10409 ; SSE4: # BB#0: # %entry 10410 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10411 ; SSE4-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 10412 ; SSE4-NEXT: movdqa %xmm1, %xmm0 10413 ; SSE4-NEXT: pxor %xmm3, %xmm0 10414 ; SSE4-NEXT: pxor %xmm2, %xmm3 10415 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm3 10416 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 10417 ; SSE4-NEXT: pxor %xmm3, %xmm0 10418 ; SSE4-NEXT: blendvpd %xmm2, %xmm1 10419 ; SSE4-NEXT: movapd %xmm1, %xmm0 10420 ; SSE4-NEXT: retq 10421 ; 10422 ; AVX1-LABEL: test182: 10423 ; AVX1: # BB#0: # %entry 10424 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10425 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 10426 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 10427 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10428 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10429 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10430 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10431 ; AVX1-NEXT: retq 10432 ; 10433 ; AVX2-LABEL: test182: 10434 ; AVX2: # BB#0: # %entry 10435 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10436 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 10437 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 10438 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10439 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10440 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10441 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10442 ; AVX2-NEXT: retq 10443 ; 10444 ; AVX512BW-LABEL: test182: 10445 ; AVX512BW: # BB#0: # %entry 10446 ; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 10447 ; AVX512BW-NEXT: retq 10448 entry: 10449 %cmp = icmp ule <2 x i64> %a, %b 10450 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10451 ret <2 x i64> %sel 10452 } 10453 10454 define <2 x i64> @test183(<2 x i64> %a, <2 x i64> %b) { 10455 ; SSE2-LABEL: test183: 10456 ; SSE2: # BB#0: # %entry 10457 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10458 ; SSE2-NEXT: movdqa %xmm1, %xmm3 10459 ; SSE2-NEXT: pxor %xmm2, %xmm3 10460 ; SSE2-NEXT: pxor %xmm0, %xmm2 10461 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10462 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10463 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10464 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10465 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10466 ; SSE2-NEXT: pand %xmm5, %xmm2 10467 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10468 ; SSE2-NEXT: por %xmm2, %xmm3 10469 ; SSE2-NEXT: pand %xmm3, %xmm0 10470 ; SSE2-NEXT: pandn %xmm1, %xmm3 10471 ; SSE2-NEXT: por %xmm3, %xmm0 10472 ; SSE2-NEXT: retq 10473 ; 10474 ; SSE4-LABEL: test183: 10475 ; SSE4: # BB#0: # %entry 10476 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10477 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10478 ; SSE4-NEXT: movdqa %xmm1, %xmm3 10479 ; SSE4-NEXT: pxor %xmm0, %xmm3 10480 ; SSE4-NEXT: pxor %xmm2, %xmm0 10481 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10482 ; SSE4-NEXT: blendvpd %xmm2, %xmm1 10483 ; SSE4-NEXT: movapd %xmm1, %xmm0 10484 ; SSE4-NEXT: retq 10485 ; 10486 ; AVX1-LABEL: test183: 10487 ; AVX1: # BB#0: # %entry 10488 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10489 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 10490 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 10491 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10492 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10493 ; AVX1-NEXT: retq 10494 ; 10495 ; AVX2-LABEL: test183: 10496 ; AVX2: # BB#0: # %entry 10497 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10498 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 10499 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 10500 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10501 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10502 ; AVX2-NEXT: retq 10503 ; 10504 ; AVX512BW-LABEL: test183: 10505 ; AVX512BW: # BB#0: # %entry 10506 ; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 10507 ; AVX512BW-NEXT: retq 10508 entry: 10509 %cmp = icmp ugt <2 x i64> %a, %b 10510 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10511 ret <2 x i64> %sel 10512 } 10513 10514 define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) { 10515 ; SSE2-LABEL: test184: 10516 ; SSE2: # BB#0: # %entry 10517 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10518 ; SSE2-NEXT: movdqa %xmm0, %xmm3 10519 ; SSE2-NEXT: pxor %xmm2, %xmm3 10520 ; SSE2-NEXT: pxor %xmm1, %xmm2 10521 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10522 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10523 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10524 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10525 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10526 ; SSE2-NEXT: pand %xmm5, %xmm2 10527 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10528 ; SSE2-NEXT: por %xmm2, %xmm3 10529 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10530 ; SSE2-NEXT: pxor %xmm3, %xmm2 10531 ; SSE2-NEXT: pandn %xmm0, %xmm3 10532 ; SSE2-NEXT: pandn %xmm1, %xmm2 10533 ; SSE2-NEXT: por %xmm3, %xmm2 10534 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10535 ; SSE2-NEXT: retq 10536 ; 10537 ; SSE4-LABEL: test184: 10538 ; SSE4: # BB#0: # %entry 10539 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10540 ; SSE4-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 10541 ; SSE4-NEXT: pxor %xmm3, %xmm0 10542 ; SSE4-NEXT: pxor %xmm1, %xmm3 10543 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm3 10544 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 10545 ; SSE4-NEXT: pxor %xmm3, %xmm0 10546 ; SSE4-NEXT: blendvpd %xmm2, %xmm1 10547 ; SSE4-NEXT: movapd %xmm1, %xmm0 10548 ; SSE4-NEXT: retq 10549 ; 10550 ; AVX1-LABEL: test184: 10551 ; AVX1: # BB#0: # %entry 10552 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10553 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 10554 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 10555 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10556 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10557 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10558 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10559 ; AVX1-NEXT: retq 10560 ; 10561 ; AVX2-LABEL: test184: 10562 ; AVX2: # BB#0: # %entry 10563 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10564 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 10565 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 10566 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10567 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10568 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10569 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10570 ; AVX2-NEXT: retq 10571 ; 10572 ; AVX512BW-LABEL: test184: 10573 ; AVX512BW: # BB#0: # %entry 10574 ; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 10575 ; AVX512BW-NEXT: retq 10576 entry: 10577 %cmp = icmp uge <2 x i64> %a, %b 10578 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10579 ret <2 x i64> %sel 10580 } 10581 10582 define <2 x i64> @test185(<2 x i64> %a, <2 x i64> %b) { 10583 ; SSE2-LABEL: test185: 10584 ; SSE2: # BB#0: # %entry 10585 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10586 ; SSE2-NEXT: movdqa %xmm0, %xmm3 10587 ; SSE2-NEXT: pxor %xmm2, %xmm3 10588 ; SSE2-NEXT: pxor %xmm1, %xmm2 10589 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10590 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10591 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10592 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10593 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3] 10594 ; SSE2-NEXT: pand %xmm5, %xmm3 10595 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 10596 ; SSE2-NEXT: por %xmm3, %xmm2 10597 ; SSE2-NEXT: pand %xmm2, %xmm1 10598 ; SSE2-NEXT: pandn %xmm0, %xmm2 10599 ; SSE2-NEXT: por %xmm1, %xmm2 10600 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10601 ; SSE2-NEXT: retq 10602 ; 10603 ; SSE4-LABEL: test185: 10604 ; SSE4: # BB#0: # %entry 10605 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10606 ; SSE4-NEXT: movdqa %xmm1, %xmm0 10607 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 10608 ; SSE4-NEXT: blendvpd %xmm1, %xmm2 10609 ; SSE4-NEXT: movapd %xmm2, %xmm0 10610 ; SSE4-NEXT: retq 10611 ; 10612 ; AVX1-LABEL: test185: 10613 ; AVX1: # BB#0: # %entry 10614 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10615 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10616 ; AVX1-NEXT: retq 10617 ; 10618 ; AVX2-LABEL: test185: 10619 ; AVX2: # BB#0: # %entry 10620 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10621 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10622 ; AVX2-NEXT: retq 10623 ; 10624 ; AVX512BW-LABEL: test185: 10625 ; AVX512BW: # BB#0: # %entry 10626 ; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 10627 ; AVX512BW-NEXT: retq 10628 entry: 10629 %cmp = icmp slt <2 x i64> %a, %b 10630 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10631 ret <2 x i64> %sel 10632 } 10633 10634 define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) { 10635 ; SSE2-LABEL: test186: 10636 ; SSE2: # BB#0: # %entry 10637 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10638 ; SSE2-NEXT: movdqa %xmm1, %xmm3 10639 ; SSE2-NEXT: pxor %xmm2, %xmm3 10640 ; SSE2-NEXT: pxor %xmm0, %xmm2 10641 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10642 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10643 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10644 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10645 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10646 ; SSE2-NEXT: pand %xmm5, %xmm2 10647 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10648 ; SSE2-NEXT: por %xmm2, %xmm3 10649 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10650 ; SSE2-NEXT: pxor %xmm3, %xmm2 10651 ; SSE2-NEXT: pandn %xmm1, %xmm3 10652 ; SSE2-NEXT: pandn %xmm0, %xmm2 10653 ; SSE2-NEXT: por %xmm3, %xmm2 10654 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10655 ; SSE2-NEXT: retq 10656 ; 10657 ; SSE4-LABEL: test186: 10658 ; SSE4: # BB#0: # %entry 10659 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10660 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 10661 ; SSE4-NEXT: pcmpeqd %xmm3, %xmm3 10662 ; SSE4-NEXT: pxor %xmm3, %xmm0 10663 ; SSE4-NEXT: blendvpd %xmm1, %xmm2 10664 ; SSE4-NEXT: movapd %xmm2, %xmm0 10665 ; SSE4-NEXT: retq 10666 ; 10667 ; AVX1-LABEL: test186: 10668 ; AVX1: # BB#0: # %entry 10669 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10670 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10671 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10672 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10673 ; AVX1-NEXT: retq 10674 ; 10675 ; AVX2-LABEL: test186: 10676 ; AVX2: # BB#0: # %entry 10677 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10678 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10679 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10680 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10681 ; AVX2-NEXT: retq 10682 ; 10683 ; AVX512BW-LABEL: test186: 10684 ; AVX512BW: # BB#0: # %entry 10685 ; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 10686 ; AVX512BW-NEXT: retq 10687 entry: 10688 %cmp = icmp sle <2 x i64> %a, %b 10689 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10690 ret <2 x i64> %sel 10691 } 10692 10693 define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) { 10694 ; SSE2-LABEL: test187: 10695 ; SSE2: # BB#0: # %entry 10696 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10697 ; SSE2-NEXT: movdqa %xmm1, %xmm3 10698 ; SSE2-NEXT: pxor %xmm2, %xmm3 10699 ; SSE2-NEXT: pxor %xmm0, %xmm2 10700 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10701 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10702 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10703 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10704 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3] 10705 ; SSE2-NEXT: pand %xmm5, %xmm3 10706 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 10707 ; SSE2-NEXT: por %xmm3, %xmm2 10708 ; SSE2-NEXT: pand %xmm2, %xmm1 10709 ; SSE2-NEXT: pandn %xmm0, %xmm2 10710 ; SSE2-NEXT: por %xmm1, %xmm2 10711 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10712 ; SSE2-NEXT: retq 10713 ; 10714 ; SSE4-LABEL: test187: 10715 ; SSE4: # BB#0: # %entry 10716 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10717 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 10718 ; SSE4-NEXT: blendvpd %xmm1, %xmm2 10719 ; SSE4-NEXT: movapd %xmm2, %xmm0 10720 ; SSE4-NEXT: retq 10721 ; 10722 ; AVX1-LABEL: test187: 10723 ; AVX1: # BB#0: # %entry 10724 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10725 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10726 ; AVX1-NEXT: retq 10727 ; 10728 ; AVX2-LABEL: test187: 10729 ; AVX2: # BB#0: # %entry 10730 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10731 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10732 ; AVX2-NEXT: retq 10733 ; 10734 ; AVX512BW-LABEL: test187: 10735 ; AVX512BW: # BB#0: # %entry 10736 ; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 10737 ; AVX512BW-NEXT: retq 10738 entry: 10739 %cmp = icmp sgt <2 x i64> %a, %b 10740 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10741 ret <2 x i64> %sel 10742 } 10743 10744 define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) { 10745 ; SSE2-LABEL: test188: 10746 ; SSE2: # BB#0: # %entry 10747 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10748 ; SSE2-NEXT: movdqa %xmm0, %xmm3 10749 ; SSE2-NEXT: pxor %xmm2, %xmm3 10750 ; SSE2-NEXT: pxor %xmm1, %xmm2 10751 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10752 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10753 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10754 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10755 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10756 ; SSE2-NEXT: pand %xmm5, %xmm2 10757 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10758 ; SSE2-NEXT: por %xmm2, %xmm3 10759 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10760 ; SSE2-NEXT: pxor %xmm3, %xmm2 10761 ; SSE2-NEXT: pandn %xmm1, %xmm3 10762 ; SSE2-NEXT: pandn %xmm0, %xmm2 10763 ; SSE2-NEXT: por %xmm3, %xmm2 10764 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10765 ; SSE2-NEXT: retq 10766 ; 10767 ; SSE4-LABEL: test188: 10768 ; SSE4: # BB#0: # %entry 10769 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10770 ; SSE4-NEXT: movdqa %xmm1, %xmm3 10771 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm3 10772 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 10773 ; SSE4-NEXT: pxor %xmm3, %xmm0 10774 ; SSE4-NEXT: blendvpd %xmm1, %xmm2 10775 ; SSE4-NEXT: movapd %xmm2, %xmm0 10776 ; SSE4-NEXT: retq 10777 ; 10778 ; AVX1-LABEL: test188: 10779 ; AVX1: # BB#0: # %entry 10780 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10781 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10782 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10783 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10784 ; AVX1-NEXT: retq 10785 ; 10786 ; AVX2-LABEL: test188: 10787 ; AVX2: # BB#0: # %entry 10788 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10789 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10790 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10791 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10792 ; AVX2-NEXT: retq 10793 ; 10794 ; AVX512BW-LABEL: test188: 10795 ; AVX512BW: # BB#0: # %entry 10796 ; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 10797 ; AVX512BW-NEXT: retq 10798 entry: 10799 %cmp = icmp sge <2 x i64> %a, %b 10800 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10801 ret <2 x i64> %sel 10802 } 10803 10804 define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) { 10805 ; SSE2-LABEL: test189: 10806 ; SSE2: # BB#0: # %entry 10807 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10808 ; SSE2-NEXT: movdqa %xmm0, %xmm3 10809 ; SSE2-NEXT: pxor %xmm2, %xmm3 10810 ; SSE2-NEXT: pxor %xmm1, %xmm2 10811 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10812 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10813 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10814 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10815 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3] 10816 ; SSE2-NEXT: pand %xmm5, %xmm3 10817 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 10818 ; SSE2-NEXT: por %xmm3, %xmm2 10819 ; SSE2-NEXT: pand %xmm2, %xmm1 10820 ; SSE2-NEXT: pandn %xmm0, %xmm2 10821 ; SSE2-NEXT: por %xmm1, %xmm2 10822 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10823 ; SSE2-NEXT: retq 10824 ; 10825 ; SSE4-LABEL: test189: 10826 ; SSE4: # BB#0: # %entry 10827 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10828 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10829 ; SSE4-NEXT: movdqa %xmm2, %xmm3 10830 ; SSE4-NEXT: pxor %xmm0, %xmm3 10831 ; SSE4-NEXT: pxor %xmm1, %xmm0 10832 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10833 ; SSE4-NEXT: blendvpd %xmm1, %xmm2 10834 ; SSE4-NEXT: movapd %xmm2, %xmm0 10835 ; SSE4-NEXT: retq 10836 ; 10837 ; AVX1-LABEL: test189: 10838 ; AVX1: # BB#0: # %entry 10839 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10840 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 10841 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 10842 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10843 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10844 ; AVX1-NEXT: retq 10845 ; 10846 ; AVX2-LABEL: test189: 10847 ; AVX2: # BB#0: # %entry 10848 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10849 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 10850 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 10851 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10852 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10853 ; AVX2-NEXT: retq 10854 ; 10855 ; AVX512BW-LABEL: test189: 10856 ; AVX512BW: # BB#0: # %entry 10857 ; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 10858 ; AVX512BW-NEXT: retq 10859 entry: 10860 %cmp = icmp ult <2 x i64> %a, %b 10861 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10862 ret <2 x i64> %sel 10863 } 10864 10865 define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) { 10866 ; SSE2-LABEL: test190: 10867 ; SSE2: # BB#0: # %entry 10868 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10869 ; SSE2-NEXT: movdqa %xmm1, %xmm3 10870 ; SSE2-NEXT: pxor %xmm2, %xmm3 10871 ; SSE2-NEXT: pxor %xmm0, %xmm2 10872 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10873 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10874 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10875 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10876 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10877 ; SSE2-NEXT: pand %xmm5, %xmm2 10878 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10879 ; SSE2-NEXT: por %xmm2, %xmm3 10880 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10881 ; SSE2-NEXT: pxor %xmm3, %xmm2 10882 ; SSE2-NEXT: pandn %xmm1, %xmm3 10883 ; SSE2-NEXT: pandn %xmm0, %xmm2 10884 ; SSE2-NEXT: por %xmm3, %xmm2 10885 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10886 ; SSE2-NEXT: retq 10887 ; 10888 ; SSE4-LABEL: test190: 10889 ; SSE4: # BB#0: # %entry 10890 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10891 ; SSE4-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 10892 ; SSE4-NEXT: movdqa %xmm1, %xmm0 10893 ; SSE4-NEXT: pxor %xmm3, %xmm0 10894 ; SSE4-NEXT: pxor %xmm2, %xmm3 10895 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm3 10896 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 10897 ; SSE4-NEXT: pxor %xmm3, %xmm0 10898 ; SSE4-NEXT: blendvpd %xmm1, %xmm2 10899 ; SSE4-NEXT: movapd %xmm2, %xmm0 10900 ; SSE4-NEXT: retq 10901 ; 10902 ; AVX1-LABEL: test190: 10903 ; AVX1: # BB#0: # %entry 10904 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10905 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 10906 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 10907 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10908 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10909 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10910 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10911 ; AVX1-NEXT: retq 10912 ; 10913 ; AVX2-LABEL: test190: 10914 ; AVX2: # BB#0: # %entry 10915 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10916 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 10917 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 10918 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10919 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10920 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10921 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10922 ; AVX2-NEXT: retq 10923 ; 10924 ; AVX512BW-LABEL: test190: 10925 ; AVX512BW: # BB#0: # %entry 10926 ; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 10927 ; AVX512BW-NEXT: retq 10928 entry: 10929 %cmp = icmp ule <2 x i64> %a, %b 10930 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10931 ret <2 x i64> %sel 10932 } 10933 10934 define <2 x i64> @test191(<2 x i64> %a, <2 x i64> %b) { 10935 ; SSE2-LABEL: test191: 10936 ; SSE2: # BB#0: # %entry 10937 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10938 ; SSE2-NEXT: movdqa %xmm1, %xmm3 10939 ; SSE2-NEXT: pxor %xmm2, %xmm3 10940 ; SSE2-NEXT: pxor %xmm0, %xmm2 10941 ; SSE2-NEXT: movdqa %xmm2, %xmm4 10942 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10943 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10944 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10945 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3] 10946 ; SSE2-NEXT: pand %xmm5, %xmm3 10947 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 10948 ; SSE2-NEXT: por %xmm3, %xmm2 10949 ; SSE2-NEXT: pand %xmm2, %xmm1 10950 ; SSE2-NEXT: pandn %xmm0, %xmm2 10951 ; SSE2-NEXT: por %xmm1, %xmm2 10952 ; SSE2-NEXT: movdqa %xmm2, %xmm0 10953 ; SSE2-NEXT: retq 10954 ; 10955 ; SSE4-LABEL: test191: 10956 ; SSE4: # BB#0: # %entry 10957 ; SSE4-NEXT: movdqa %xmm0, %xmm2 10958 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10959 ; SSE4-NEXT: movdqa %xmm1, %xmm3 10960 ; SSE4-NEXT: pxor %xmm0, %xmm3 10961 ; SSE4-NEXT: pxor %xmm2, %xmm0 10962 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10963 ; SSE4-NEXT: blendvpd %xmm1, %xmm2 10964 ; SSE4-NEXT: movapd %xmm2, %xmm0 10965 ; SSE4-NEXT: retq 10966 ; 10967 ; AVX1-LABEL: test191: 10968 ; AVX1: # BB#0: # %entry 10969 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10970 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 10971 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 10972 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10973 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10974 ; AVX1-NEXT: retq 10975 ; 10976 ; AVX2-LABEL: test191: 10977 ; AVX2: # BB#0: # %entry 10978 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10979 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 10980 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 10981 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10982 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10983 ; AVX2-NEXT: retq 10984 ; 10985 ; AVX512BW-LABEL: test191: 10986 ; AVX512BW: # BB#0: # %entry 10987 ; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 10988 ; AVX512BW-NEXT: retq 10989 entry: 10990 %cmp = icmp ugt <2 x i64> %a, %b 10991 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10992 ret <2 x i64> %sel 10993 } 10994 10995 define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) { 10996 ; SSE2-LABEL: test192: 10997 ; SSE2: # BB#0: # %entry 10998 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10999 ; SSE2-NEXT: movdqa %xmm0, %xmm3 11000 ; SSE2-NEXT: pxor %xmm2, %xmm3 11001 ; SSE2-NEXT: pxor %xmm1, %xmm2 11002 ; SSE2-NEXT: movdqa %xmm2, %xmm4 11003 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 11004 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 11005 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 11006 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 11007 ; SSE2-NEXT: pand %xmm5, %xmm2 11008 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 11009 ; SSE2-NEXT: por %xmm2, %xmm3 11010 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 11011 ; SSE2-NEXT: pxor %xmm3, %xmm2 11012 ; SSE2-NEXT: pandn %xmm1, %xmm3 11013 ; SSE2-NEXT: pandn %xmm0, %xmm2 11014 ; SSE2-NEXT: por %xmm3, %xmm2 11015 ; SSE2-NEXT: movdqa %xmm2, %xmm0 11016 ; SSE2-NEXT: retq 11017 ; 11018 ; SSE4-LABEL: test192: 11019 ; SSE4: # BB#0: # %entry 11020 ; SSE4-NEXT: movdqa %xmm0, %xmm2 11021 ; SSE4-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 11022 ; SSE4-NEXT: pxor %xmm3, %xmm0 11023 ; SSE4-NEXT: pxor %xmm1, %xmm3 11024 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm3 11025 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 11026 ; SSE4-NEXT: pxor %xmm3, %xmm0 11027 ; SSE4-NEXT: blendvpd %xmm1, %xmm2 11028 ; SSE4-NEXT: movapd %xmm2, %xmm0 11029 ; SSE4-NEXT: retq 11030 ; 11031 ; AVX1-LABEL: test192: 11032 ; AVX1: # BB#0: # %entry 11033 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 11034 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 11035 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 11036 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 11037 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 11038 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 11039 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 11040 ; AVX1-NEXT: retq 11041 ; 11042 ; AVX2-LABEL: test192: 11043 ; AVX2: # BB#0: # %entry 11044 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 11045 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 11046 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 11047 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 11048 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 11049 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 11050 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 11051 ; AVX2-NEXT: retq 11052 ; 11053 ; AVX512BW-LABEL: test192: 11054 ; AVX512BW: # BB#0: # %entry 11055 ; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 11056 ; AVX512BW-NEXT: retq 11057 entry: 11058 %cmp = icmp uge <2 x i64> %a, %b 11059 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 11060 ret <2 x i64> %sel 11061 } 11062