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 %xmm1, %xmm2 38 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm2 39 ; SSE2-NEXT: pand %xmm2, %xmm0 40 ; SSE2-NEXT: pandn %xmm1, %xmm2 41 ; SSE2-NEXT: por %xmm2, %xmm0 42 ; SSE2-NEXT: retq 43 ; 44 ; SSE4-LABEL: test2: 45 ; SSE4: # %bb.0: # %entry 46 ; SSE4-NEXT: pminsb %xmm1, %xmm0 47 ; SSE4-NEXT: retq 48 ; 49 ; AVX-LABEL: test2: 50 ; AVX: # %bb.0: # %entry 51 ; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0 52 ; AVX-NEXT: retq 53 entry: 54 %cmp = icmp sle <16 x i8> %a, %b 55 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 56 ret <16 x i8> %sel 57 } 58 59 define <16 x i8> @test3(<16 x i8> %a, <16 x i8> %b) { 60 ; SSE2-LABEL: test3: 61 ; SSE2: # %bb.0: # %entry 62 ; SSE2-NEXT: movdqa %xmm0, %xmm2 63 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 64 ; SSE2-NEXT: pand %xmm2, %xmm0 65 ; SSE2-NEXT: pandn %xmm1, %xmm2 66 ; SSE2-NEXT: por %xmm0, %xmm2 67 ; SSE2-NEXT: movdqa %xmm2, %xmm0 68 ; SSE2-NEXT: retq 69 ; 70 ; SSE4-LABEL: test3: 71 ; SSE4: # %bb.0: # %entry 72 ; SSE4-NEXT: pmaxsb %xmm1, %xmm0 73 ; SSE4-NEXT: retq 74 ; 75 ; AVX-LABEL: test3: 76 ; AVX: # %bb.0: # %entry 77 ; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 78 ; AVX-NEXT: retq 79 entry: 80 %cmp = icmp sgt <16 x i8> %a, %b 81 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 82 ret <16 x i8> %sel 83 } 84 85 define <16 x i8> @test4(<16 x i8> %a, <16 x i8> %b) { 86 ; SSE2-LABEL: test4: 87 ; SSE2: # %bb.0: # %entry 88 ; SSE2-NEXT: movdqa %xmm0, %xmm2 89 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 90 ; SSE2-NEXT: pand %xmm2, %xmm0 91 ; SSE2-NEXT: pandn %xmm1, %xmm2 92 ; SSE2-NEXT: por %xmm0, %xmm2 93 ; SSE2-NEXT: movdqa %xmm2, %xmm0 94 ; SSE2-NEXT: retq 95 ; 96 ; SSE4-LABEL: test4: 97 ; SSE4: # %bb.0: # %entry 98 ; SSE4-NEXT: pmaxsb %xmm1, %xmm0 99 ; SSE4-NEXT: retq 100 ; 101 ; AVX-LABEL: test4: 102 ; AVX: # %bb.0: # %entry 103 ; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 104 ; AVX-NEXT: retq 105 entry: 106 %cmp = icmp sge <16 x i8> %a, %b 107 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 108 ret <16 x i8> %sel 109 } 110 111 define <16 x i8> @test5(<16 x i8> %a, <16 x i8> %b) { 112 ; SSE-LABEL: test5: 113 ; SSE: # %bb.0: # %entry 114 ; SSE-NEXT: pminub %xmm1, %xmm0 115 ; SSE-NEXT: retq 116 ; 117 ; AVX-LABEL: test5: 118 ; AVX: # %bb.0: # %entry 119 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 120 ; AVX-NEXT: retq 121 entry: 122 %cmp = icmp ult <16 x i8> %a, %b 123 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 124 ret <16 x i8> %sel 125 } 126 127 define <16 x i8> @test6(<16 x i8> %a, <16 x i8> %b) { 128 ; SSE-LABEL: test6: 129 ; SSE: # %bb.0: # %entry 130 ; SSE-NEXT: pminub %xmm1, %xmm0 131 ; SSE-NEXT: retq 132 ; 133 ; AVX-LABEL: test6: 134 ; AVX: # %bb.0: # %entry 135 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 136 ; AVX-NEXT: retq 137 entry: 138 %cmp = icmp ule <16 x i8> %a, %b 139 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 140 ret <16 x i8> %sel 141 } 142 143 define <16 x i8> @test7(<16 x i8> %a, <16 x i8> %b) { 144 ; SSE-LABEL: test7: 145 ; SSE: # %bb.0: # %entry 146 ; SSE-NEXT: pmaxub %xmm1, %xmm0 147 ; SSE-NEXT: retq 148 ; 149 ; AVX-LABEL: test7: 150 ; AVX: # %bb.0: # %entry 151 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 152 ; AVX-NEXT: retq 153 entry: 154 %cmp = icmp ugt <16 x i8> %a, %b 155 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 156 ret <16 x i8> %sel 157 } 158 159 define <16 x i8> @test8(<16 x i8> %a, <16 x i8> %b) { 160 ; SSE-LABEL: test8: 161 ; SSE: # %bb.0: # %entry 162 ; SSE-NEXT: pmaxub %xmm1, %xmm0 163 ; SSE-NEXT: retq 164 ; 165 ; AVX-LABEL: test8: 166 ; AVX: # %bb.0: # %entry 167 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 168 ; AVX-NEXT: retq 169 entry: 170 %cmp = icmp uge <16 x i8> %a, %b 171 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 172 ret <16 x i8> %sel 173 } 174 175 define <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) { 176 ; SSE-LABEL: test9: 177 ; SSE: # %bb.0: # %entry 178 ; SSE-NEXT: pminsw %xmm1, %xmm0 179 ; SSE-NEXT: retq 180 ; 181 ; AVX-LABEL: test9: 182 ; AVX: # %bb.0: # %entry 183 ; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 184 ; AVX-NEXT: retq 185 entry: 186 %cmp = icmp slt <8 x i16> %a, %b 187 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 188 ret <8 x i16> %sel 189 } 190 191 define <8 x i16> @test10(<8 x i16> %a, <8 x i16> %b) { 192 ; SSE-LABEL: test10: 193 ; SSE: # %bb.0: # %entry 194 ; SSE-NEXT: pminsw %xmm1, %xmm0 195 ; SSE-NEXT: retq 196 ; 197 ; AVX-LABEL: test10: 198 ; AVX: # %bb.0: # %entry 199 ; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 200 ; AVX-NEXT: retq 201 entry: 202 %cmp = icmp sle <8 x i16> %a, %b 203 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 204 ret <8 x i16> %sel 205 } 206 207 define <8 x i16> @test11(<8 x i16> %a, <8 x i16> %b) { 208 ; SSE-LABEL: test11: 209 ; SSE: # %bb.0: # %entry 210 ; SSE-NEXT: pmaxsw %xmm1, %xmm0 211 ; SSE-NEXT: retq 212 ; 213 ; AVX-LABEL: test11: 214 ; AVX: # %bb.0: # %entry 215 ; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 216 ; AVX-NEXT: retq 217 entry: 218 %cmp = icmp sgt <8 x i16> %a, %b 219 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 220 ret <8 x i16> %sel 221 } 222 223 define <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) { 224 ; SSE-LABEL: test12: 225 ; SSE: # %bb.0: # %entry 226 ; SSE-NEXT: pmaxsw %xmm1, %xmm0 227 ; SSE-NEXT: retq 228 ; 229 ; AVX-LABEL: test12: 230 ; AVX: # %bb.0: # %entry 231 ; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 232 ; AVX-NEXT: retq 233 entry: 234 %cmp = icmp sge <8 x i16> %a, %b 235 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 236 ret <8 x i16> %sel 237 } 238 239 define <8 x i16> @test13(<8 x i16> %a, <8 x i16> %b) { 240 ; SSE2-LABEL: test13: 241 ; SSE2: # %bb.0: # %entry 242 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 243 ; SSE2-NEXT: pxor %xmm2, %xmm1 244 ; SSE2-NEXT: pxor %xmm2, %xmm0 245 ; SSE2-NEXT: pminsw %xmm1, %xmm0 246 ; SSE2-NEXT: pxor %xmm2, %xmm0 247 ; SSE2-NEXT: retq 248 ; 249 ; SSE4-LABEL: test13: 250 ; SSE4: # %bb.0: # %entry 251 ; SSE4-NEXT: pminuw %xmm1, %xmm0 252 ; SSE4-NEXT: retq 253 ; 254 ; AVX-LABEL: test13: 255 ; AVX: # %bb.0: # %entry 256 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 257 ; AVX-NEXT: retq 258 entry: 259 %cmp = icmp ult <8 x i16> %a, %b 260 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 261 ret <8 x i16> %sel 262 } 263 264 define <8 x i16> @test14(<8 x i16> %a, <8 x i16> %b) { 265 ; SSE2-LABEL: test14: 266 ; SSE2: # %bb.0: # %entry 267 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 268 ; SSE2-NEXT: pxor %xmm2, %xmm1 269 ; SSE2-NEXT: pxor %xmm2, %xmm0 270 ; SSE2-NEXT: pminsw %xmm1, %xmm0 271 ; SSE2-NEXT: pxor %xmm2, %xmm0 272 ; SSE2-NEXT: retq 273 ; 274 ; SSE4-LABEL: test14: 275 ; SSE4: # %bb.0: # %entry 276 ; SSE4-NEXT: pminuw %xmm1, %xmm0 277 ; SSE4-NEXT: retq 278 ; 279 ; AVX-LABEL: test14: 280 ; AVX: # %bb.0: # %entry 281 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 282 ; AVX-NEXT: retq 283 entry: 284 %cmp = icmp ule <8 x i16> %a, %b 285 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 286 ret <8 x i16> %sel 287 } 288 289 define <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) { 290 ; SSE2-LABEL: test15: 291 ; SSE2: # %bb.0: # %entry 292 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 293 ; SSE2-NEXT: pxor %xmm2, %xmm1 294 ; SSE2-NEXT: pxor %xmm2, %xmm0 295 ; SSE2-NEXT: pmaxsw %xmm1, %xmm0 296 ; SSE2-NEXT: pxor %xmm2, %xmm0 297 ; SSE2-NEXT: retq 298 ; 299 ; SSE4-LABEL: test15: 300 ; SSE4: # %bb.0: # %entry 301 ; SSE4-NEXT: pmaxuw %xmm1, %xmm0 302 ; SSE4-NEXT: retq 303 ; 304 ; AVX-LABEL: test15: 305 ; AVX: # %bb.0: # %entry 306 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 307 ; AVX-NEXT: retq 308 entry: 309 %cmp = icmp ugt <8 x i16> %a, %b 310 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 311 ret <8 x i16> %sel 312 } 313 314 define <8 x i16> @test16(<8 x i16> %a, <8 x i16> %b) { 315 ; SSE2-LABEL: test16: 316 ; SSE2: # %bb.0: # %entry 317 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 318 ; SSE2-NEXT: pxor %xmm2, %xmm1 319 ; SSE2-NEXT: pxor %xmm2, %xmm0 320 ; SSE2-NEXT: pmaxsw %xmm1, %xmm0 321 ; SSE2-NEXT: pxor %xmm2, %xmm0 322 ; SSE2-NEXT: retq 323 ; 324 ; SSE4-LABEL: test16: 325 ; SSE4: # %bb.0: # %entry 326 ; SSE4-NEXT: pmaxuw %xmm1, %xmm0 327 ; SSE4-NEXT: retq 328 ; 329 ; AVX-LABEL: test16: 330 ; AVX: # %bb.0: # %entry 331 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 332 ; AVX-NEXT: retq 333 entry: 334 %cmp = icmp uge <8 x i16> %a, %b 335 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 336 ret <8 x i16> %sel 337 } 338 339 define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) { 340 ; SSE2-LABEL: test17: 341 ; SSE2: # %bb.0: # %entry 342 ; SSE2-NEXT: movdqa %xmm1, %xmm2 343 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 344 ; SSE2-NEXT: pand %xmm2, %xmm0 345 ; SSE2-NEXT: pandn %xmm1, %xmm2 346 ; SSE2-NEXT: por %xmm2, %xmm0 347 ; SSE2-NEXT: retq 348 ; 349 ; SSE4-LABEL: test17: 350 ; SSE4: # %bb.0: # %entry 351 ; SSE4-NEXT: pminsd %xmm1, %xmm0 352 ; SSE4-NEXT: retq 353 ; 354 ; AVX-LABEL: test17: 355 ; AVX: # %bb.0: # %entry 356 ; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 357 ; AVX-NEXT: retq 358 entry: 359 %cmp = icmp slt <4 x i32> %a, %b 360 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 361 ret <4 x i32> %sel 362 } 363 364 define <4 x i32> @test18(<4 x i32> %a, <4 x i32> %b) { 365 ; SSE2-LABEL: test18: 366 ; SSE2: # %bb.0: # %entry 367 ; SSE2-NEXT: movdqa %xmm1, %xmm2 368 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 369 ; SSE2-NEXT: pand %xmm2, %xmm0 370 ; SSE2-NEXT: pandn %xmm1, %xmm2 371 ; SSE2-NEXT: por %xmm2, %xmm0 372 ; SSE2-NEXT: retq 373 ; 374 ; SSE4-LABEL: test18: 375 ; SSE4: # %bb.0: # %entry 376 ; SSE4-NEXT: pminsd %xmm1, %xmm0 377 ; SSE4-NEXT: retq 378 ; 379 ; AVX-LABEL: test18: 380 ; AVX: # %bb.0: # %entry 381 ; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 382 ; AVX-NEXT: retq 383 entry: 384 %cmp = icmp sle <4 x i32> %a, %b 385 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 386 ret <4 x i32> %sel 387 } 388 389 define <4 x i32> @test19(<4 x i32> %a, <4 x i32> %b) { 390 ; SSE2-LABEL: test19: 391 ; SSE2: # %bb.0: # %entry 392 ; SSE2-NEXT: movdqa %xmm0, %xmm2 393 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 394 ; SSE2-NEXT: pand %xmm2, %xmm0 395 ; SSE2-NEXT: pandn %xmm1, %xmm2 396 ; SSE2-NEXT: por %xmm0, %xmm2 397 ; SSE2-NEXT: movdqa %xmm2, %xmm0 398 ; SSE2-NEXT: retq 399 ; 400 ; SSE4-LABEL: test19: 401 ; SSE4: # %bb.0: # %entry 402 ; SSE4-NEXT: pmaxsd %xmm1, %xmm0 403 ; SSE4-NEXT: retq 404 ; 405 ; AVX-LABEL: test19: 406 ; AVX: # %bb.0: # %entry 407 ; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 408 ; AVX-NEXT: retq 409 entry: 410 %cmp = icmp sgt <4 x i32> %a, %b 411 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 412 ret <4 x i32> %sel 413 } 414 415 define <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b) { 416 ; SSE2-LABEL: test20: 417 ; SSE2: # %bb.0: # %entry 418 ; SSE2-NEXT: movdqa %xmm0, %xmm2 419 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 420 ; SSE2-NEXT: pand %xmm2, %xmm0 421 ; SSE2-NEXT: pandn %xmm1, %xmm2 422 ; SSE2-NEXT: por %xmm0, %xmm2 423 ; SSE2-NEXT: movdqa %xmm2, %xmm0 424 ; SSE2-NEXT: retq 425 ; 426 ; SSE4-LABEL: test20: 427 ; SSE4: # %bb.0: # %entry 428 ; SSE4-NEXT: pmaxsd %xmm1, %xmm0 429 ; SSE4-NEXT: retq 430 ; 431 ; AVX-LABEL: test20: 432 ; AVX: # %bb.0: # %entry 433 ; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 434 ; AVX-NEXT: retq 435 entry: 436 %cmp = icmp sge <4 x i32> %a, %b 437 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 438 ret <4 x i32> %sel 439 } 440 441 define <4 x i32> @test21(<4 x i32> %a, <4 x i32> %b) { 442 ; SSE2-LABEL: test21: 443 ; SSE2: # %bb.0: # %entry 444 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 445 ; SSE2-NEXT: movdqa %xmm0, %xmm3 446 ; SSE2-NEXT: pxor %xmm2, %xmm3 447 ; SSE2-NEXT: pxor %xmm1, %xmm2 448 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 449 ; SSE2-NEXT: pand %xmm2, %xmm0 450 ; SSE2-NEXT: pandn %xmm1, %xmm2 451 ; SSE2-NEXT: por %xmm2, %xmm0 452 ; SSE2-NEXT: retq 453 ; 454 ; SSE4-LABEL: test21: 455 ; SSE4: # %bb.0: # %entry 456 ; SSE4-NEXT: pminud %xmm1, %xmm0 457 ; SSE4-NEXT: retq 458 ; 459 ; AVX-LABEL: test21: 460 ; AVX: # %bb.0: # %entry 461 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 462 ; AVX-NEXT: retq 463 entry: 464 %cmp = icmp ult <4 x i32> %a, %b 465 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 466 ret <4 x i32> %sel 467 } 468 469 define <4 x i32> @test22(<4 x i32> %a, <4 x i32> %b) { 470 ; SSE2-LABEL: test22: 471 ; SSE2: # %bb.0: # %entry 472 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 473 ; SSE2-NEXT: movdqa %xmm0, %xmm3 474 ; SSE2-NEXT: pxor %xmm2, %xmm3 475 ; SSE2-NEXT: pxor %xmm1, %xmm2 476 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 477 ; SSE2-NEXT: pand %xmm2, %xmm0 478 ; SSE2-NEXT: pandn %xmm1, %xmm2 479 ; SSE2-NEXT: por %xmm2, %xmm0 480 ; SSE2-NEXT: retq 481 ; 482 ; SSE4-LABEL: test22: 483 ; SSE4: # %bb.0: # %entry 484 ; SSE4-NEXT: pminud %xmm1, %xmm0 485 ; SSE4-NEXT: retq 486 ; 487 ; AVX-LABEL: test22: 488 ; AVX: # %bb.0: # %entry 489 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 490 ; AVX-NEXT: retq 491 entry: 492 %cmp = icmp ule <4 x i32> %a, %b 493 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 494 ret <4 x i32> %sel 495 } 496 497 define <4 x i32> @test23(<4 x i32> %a, <4 x i32> %b) { 498 ; SSE2-LABEL: test23: 499 ; SSE2: # %bb.0: # %entry 500 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 501 ; SSE2-NEXT: movdqa %xmm1, %xmm3 502 ; SSE2-NEXT: pxor %xmm2, %xmm3 503 ; SSE2-NEXT: pxor %xmm0, %xmm2 504 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 505 ; SSE2-NEXT: pand %xmm2, %xmm0 506 ; SSE2-NEXT: pandn %xmm1, %xmm2 507 ; SSE2-NEXT: por %xmm2, %xmm0 508 ; SSE2-NEXT: retq 509 ; 510 ; SSE4-LABEL: test23: 511 ; SSE4: # %bb.0: # %entry 512 ; SSE4-NEXT: pmaxud %xmm1, %xmm0 513 ; SSE4-NEXT: retq 514 ; 515 ; AVX-LABEL: test23: 516 ; AVX: # %bb.0: # %entry 517 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 518 ; AVX-NEXT: retq 519 entry: 520 %cmp = icmp ugt <4 x i32> %a, %b 521 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 522 ret <4 x i32> %sel 523 } 524 525 define <4 x i32> @test24(<4 x i32> %a, <4 x i32> %b) { 526 ; SSE2-LABEL: test24: 527 ; SSE2: # %bb.0: # %entry 528 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 529 ; SSE2-NEXT: movdqa %xmm1, %xmm3 530 ; SSE2-NEXT: pxor %xmm2, %xmm3 531 ; SSE2-NEXT: pxor %xmm0, %xmm2 532 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 533 ; SSE2-NEXT: pand %xmm2, %xmm0 534 ; SSE2-NEXT: pandn %xmm1, %xmm2 535 ; SSE2-NEXT: por %xmm2, %xmm0 536 ; SSE2-NEXT: retq 537 ; 538 ; SSE4-LABEL: test24: 539 ; SSE4: # %bb.0: # %entry 540 ; SSE4-NEXT: pmaxud %xmm1, %xmm0 541 ; SSE4-NEXT: retq 542 ; 543 ; AVX-LABEL: test24: 544 ; AVX: # %bb.0: # %entry 545 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 546 ; AVX-NEXT: retq 547 entry: 548 %cmp = icmp uge <4 x i32> %a, %b 549 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 550 ret <4 x i32> %sel 551 } 552 553 define <32 x i8> @test25(<32 x i8> %a, <32 x i8> %b) { 554 ; SSE2-LABEL: test25: 555 ; SSE2: # %bb.0: # %entry 556 ; SSE2-NEXT: movdqa %xmm2, %xmm4 557 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm4 558 ; SSE2-NEXT: pand %xmm4, %xmm0 559 ; SSE2-NEXT: pandn %xmm2, %xmm4 560 ; SSE2-NEXT: por %xmm4, %xmm0 561 ; SSE2-NEXT: movdqa %xmm3, %xmm2 562 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 563 ; SSE2-NEXT: pand %xmm2, %xmm1 564 ; SSE2-NEXT: pandn %xmm3, %xmm2 565 ; SSE2-NEXT: por %xmm2, %xmm1 566 ; SSE2-NEXT: retq 567 ; 568 ; SSE4-LABEL: test25: 569 ; SSE4: # %bb.0: # %entry 570 ; SSE4-NEXT: pminsb %xmm2, %xmm0 571 ; SSE4-NEXT: pminsb %xmm3, %xmm1 572 ; SSE4-NEXT: retq 573 ; 574 ; AVX1-LABEL: test25: 575 ; AVX1: # %bb.0: # %entry 576 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 577 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 578 ; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 579 ; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 580 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 581 ; AVX1-NEXT: retq 582 ; 583 ; AVX2-LABEL: test25: 584 ; AVX2: # %bb.0: # %entry 585 ; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 586 ; AVX2-NEXT: retq 587 ; 588 ; AVX512F-LABEL: test25: 589 ; AVX512F: # %bb.0: # %entry 590 ; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 591 ; AVX512F-NEXT: retq 592 entry: 593 %cmp = icmp slt <32 x i8> %a, %b 594 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 595 ret <32 x i8> %sel 596 } 597 598 define <32 x i8> @test26(<32 x i8> %a, <32 x i8> %b) { 599 ; SSE2-LABEL: test26: 600 ; SSE2: # %bb.0: # %entry 601 ; SSE2-NEXT: movdqa %xmm2, %xmm4 602 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm4 603 ; SSE2-NEXT: pand %xmm4, %xmm0 604 ; SSE2-NEXT: pandn %xmm2, %xmm4 605 ; SSE2-NEXT: por %xmm4, %xmm0 606 ; SSE2-NEXT: movdqa %xmm3, %xmm2 607 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 608 ; SSE2-NEXT: pand %xmm2, %xmm1 609 ; SSE2-NEXT: pandn %xmm3, %xmm2 610 ; SSE2-NEXT: por %xmm2, %xmm1 611 ; SSE2-NEXT: retq 612 ; 613 ; SSE4-LABEL: test26: 614 ; SSE4: # %bb.0: # %entry 615 ; SSE4-NEXT: pminsb %xmm2, %xmm0 616 ; SSE4-NEXT: pminsb %xmm3, %xmm1 617 ; SSE4-NEXT: retq 618 ; 619 ; AVX1-LABEL: test26: 620 ; AVX1: # %bb.0: # %entry 621 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 622 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 623 ; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 624 ; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 625 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 626 ; AVX1-NEXT: retq 627 ; 628 ; AVX2-LABEL: test26: 629 ; AVX2: # %bb.0: # %entry 630 ; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 631 ; AVX2-NEXT: retq 632 ; 633 ; AVX512F-LABEL: test26: 634 ; AVX512F: # %bb.0: # %entry 635 ; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 636 ; AVX512F-NEXT: retq 637 entry: 638 %cmp = icmp sle <32 x i8> %a, %b 639 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 640 ret <32 x i8> %sel 641 } 642 643 define <32 x i8> @test27(<32 x i8> %a, <32 x i8> %b) { 644 ; SSE2-LABEL: test27: 645 ; SSE2: # %bb.0: # %entry 646 ; SSE2-NEXT: movdqa %xmm0, %xmm4 647 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 648 ; SSE2-NEXT: pand %xmm4, %xmm0 649 ; SSE2-NEXT: pandn %xmm2, %xmm4 650 ; SSE2-NEXT: por %xmm0, %xmm4 651 ; SSE2-NEXT: movdqa %xmm1, %xmm2 652 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm2 653 ; SSE2-NEXT: pand %xmm2, %xmm1 654 ; SSE2-NEXT: pandn %xmm3, %xmm2 655 ; SSE2-NEXT: por %xmm1, %xmm2 656 ; SSE2-NEXT: movdqa %xmm4, %xmm0 657 ; SSE2-NEXT: movdqa %xmm2, %xmm1 658 ; SSE2-NEXT: retq 659 ; 660 ; SSE4-LABEL: test27: 661 ; SSE4: # %bb.0: # %entry 662 ; SSE4-NEXT: pmaxsb %xmm2, %xmm0 663 ; SSE4-NEXT: pmaxsb %xmm3, %xmm1 664 ; SSE4-NEXT: retq 665 ; 666 ; AVX1-LABEL: test27: 667 ; AVX1: # %bb.0: # %entry 668 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 669 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 670 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 671 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 672 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 673 ; AVX1-NEXT: retq 674 ; 675 ; AVX2-LABEL: test27: 676 ; AVX2: # %bb.0: # %entry 677 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 678 ; AVX2-NEXT: retq 679 ; 680 ; AVX512F-LABEL: test27: 681 ; AVX512F: # %bb.0: # %entry 682 ; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 683 ; AVX512F-NEXT: retq 684 entry: 685 %cmp = icmp sgt <32 x i8> %a, %b 686 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 687 ret <32 x i8> %sel 688 } 689 690 define <32 x i8> @test28(<32 x i8> %a, <32 x i8> %b) { 691 ; SSE2-LABEL: test28: 692 ; SSE2: # %bb.0: # %entry 693 ; SSE2-NEXT: movdqa %xmm0, %xmm4 694 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 695 ; SSE2-NEXT: pand %xmm4, %xmm0 696 ; SSE2-NEXT: pandn %xmm2, %xmm4 697 ; SSE2-NEXT: por %xmm0, %xmm4 698 ; SSE2-NEXT: movdqa %xmm1, %xmm2 699 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm2 700 ; SSE2-NEXT: pand %xmm2, %xmm1 701 ; SSE2-NEXT: pandn %xmm3, %xmm2 702 ; SSE2-NEXT: por %xmm1, %xmm2 703 ; SSE2-NEXT: movdqa %xmm4, %xmm0 704 ; SSE2-NEXT: movdqa %xmm2, %xmm1 705 ; SSE2-NEXT: retq 706 ; 707 ; SSE4-LABEL: test28: 708 ; SSE4: # %bb.0: # %entry 709 ; SSE4-NEXT: pmaxsb %xmm2, %xmm0 710 ; SSE4-NEXT: pmaxsb %xmm3, %xmm1 711 ; SSE4-NEXT: retq 712 ; 713 ; AVX1-LABEL: test28: 714 ; AVX1: # %bb.0: # %entry 715 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 716 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 717 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 718 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 719 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 720 ; AVX1-NEXT: retq 721 ; 722 ; AVX2-LABEL: test28: 723 ; AVX2: # %bb.0: # %entry 724 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 725 ; AVX2-NEXT: retq 726 ; 727 ; AVX512F-LABEL: test28: 728 ; AVX512F: # %bb.0: # %entry 729 ; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 730 ; AVX512F-NEXT: retq 731 entry: 732 %cmp = icmp sge <32 x i8> %a, %b 733 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 734 ret <32 x i8> %sel 735 } 736 737 define <32 x i8> @test29(<32 x i8> %a, <32 x i8> %b) { 738 ; SSE-LABEL: test29: 739 ; SSE: # %bb.0: # %entry 740 ; SSE-NEXT: pminub %xmm2, %xmm0 741 ; SSE-NEXT: pminub %xmm3, %xmm1 742 ; SSE-NEXT: retq 743 ; 744 ; AVX1-LABEL: test29: 745 ; AVX1: # %bb.0: # %entry 746 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 747 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 748 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 749 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 750 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 751 ; AVX1-NEXT: retq 752 ; 753 ; AVX2-LABEL: test29: 754 ; AVX2: # %bb.0: # %entry 755 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 756 ; AVX2-NEXT: retq 757 ; 758 ; AVX512F-LABEL: test29: 759 ; AVX512F: # %bb.0: # %entry 760 ; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 761 ; AVX512F-NEXT: retq 762 entry: 763 %cmp = icmp ult <32 x i8> %a, %b 764 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 765 ret <32 x i8> %sel 766 } 767 768 define <32 x i8> @test30(<32 x i8> %a, <32 x i8> %b) { 769 ; SSE-LABEL: test30: 770 ; SSE: # %bb.0: # %entry 771 ; SSE-NEXT: pminub %xmm2, %xmm0 772 ; SSE-NEXT: pminub %xmm3, %xmm1 773 ; SSE-NEXT: retq 774 ; 775 ; AVX1-LABEL: test30: 776 ; AVX1: # %bb.0: # %entry 777 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 778 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 779 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 780 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 781 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 782 ; AVX1-NEXT: retq 783 ; 784 ; AVX2-LABEL: test30: 785 ; AVX2: # %bb.0: # %entry 786 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 787 ; AVX2-NEXT: retq 788 ; 789 ; AVX512F-LABEL: test30: 790 ; AVX512F: # %bb.0: # %entry 791 ; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 792 ; AVX512F-NEXT: retq 793 entry: 794 %cmp = icmp ule <32 x i8> %a, %b 795 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 796 ret <32 x i8> %sel 797 } 798 799 define <32 x i8> @test31(<32 x i8> %a, <32 x i8> %b) { 800 ; SSE-LABEL: test31: 801 ; SSE: # %bb.0: # %entry 802 ; SSE-NEXT: pmaxub %xmm2, %xmm0 803 ; SSE-NEXT: pmaxub %xmm3, %xmm1 804 ; SSE-NEXT: retq 805 ; 806 ; AVX1-LABEL: test31: 807 ; AVX1: # %bb.0: # %entry 808 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 809 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 810 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 811 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 812 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 813 ; AVX1-NEXT: retq 814 ; 815 ; AVX2-LABEL: test31: 816 ; AVX2: # %bb.0: # %entry 817 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 818 ; AVX2-NEXT: retq 819 ; 820 ; AVX512F-LABEL: test31: 821 ; AVX512F: # %bb.0: # %entry 822 ; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 823 ; AVX512F-NEXT: retq 824 entry: 825 %cmp = icmp ugt <32 x i8> %a, %b 826 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 827 ret <32 x i8> %sel 828 } 829 830 define <32 x i8> @test32(<32 x i8> %a, <32 x i8> %b) { 831 ; SSE-LABEL: test32: 832 ; SSE: # %bb.0: # %entry 833 ; SSE-NEXT: pmaxub %xmm2, %xmm0 834 ; SSE-NEXT: pmaxub %xmm3, %xmm1 835 ; SSE-NEXT: retq 836 ; 837 ; AVX1-LABEL: test32: 838 ; AVX1: # %bb.0: # %entry 839 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 840 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 841 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 842 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 843 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 844 ; AVX1-NEXT: retq 845 ; 846 ; AVX2-LABEL: test32: 847 ; AVX2: # %bb.0: # %entry 848 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 849 ; AVX2-NEXT: retq 850 ; 851 ; AVX512F-LABEL: test32: 852 ; AVX512F: # %bb.0: # %entry 853 ; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 854 ; AVX512F-NEXT: retq 855 entry: 856 %cmp = icmp uge <32 x i8> %a, %b 857 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 858 ret <32 x i8> %sel 859 } 860 861 define <16 x i16> @test33(<16 x i16> %a, <16 x i16> %b) { 862 ; SSE-LABEL: test33: 863 ; SSE: # %bb.0: # %entry 864 ; SSE-NEXT: pminsw %xmm2, %xmm0 865 ; SSE-NEXT: pminsw %xmm3, %xmm1 866 ; SSE-NEXT: retq 867 ; 868 ; AVX1-LABEL: test33: 869 ; AVX1: # %bb.0: # %entry 870 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 871 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 872 ; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 873 ; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 874 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 875 ; AVX1-NEXT: retq 876 ; 877 ; AVX2-LABEL: test33: 878 ; AVX2: # %bb.0: # %entry 879 ; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 880 ; AVX2-NEXT: retq 881 ; 882 ; AVX512F-LABEL: test33: 883 ; AVX512F: # %bb.0: # %entry 884 ; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 885 ; AVX512F-NEXT: retq 886 entry: 887 %cmp = icmp slt <16 x i16> %a, %b 888 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 889 ret <16 x i16> %sel 890 } 891 892 define <16 x i16> @test34(<16 x i16> %a, <16 x i16> %b) { 893 ; SSE-LABEL: test34: 894 ; SSE: # %bb.0: # %entry 895 ; SSE-NEXT: pminsw %xmm2, %xmm0 896 ; SSE-NEXT: pminsw %xmm3, %xmm1 897 ; SSE-NEXT: retq 898 ; 899 ; AVX1-LABEL: test34: 900 ; AVX1: # %bb.0: # %entry 901 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 902 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 903 ; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 904 ; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 905 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 906 ; AVX1-NEXT: retq 907 ; 908 ; AVX2-LABEL: test34: 909 ; AVX2: # %bb.0: # %entry 910 ; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 911 ; AVX2-NEXT: retq 912 ; 913 ; AVX512F-LABEL: test34: 914 ; AVX512F: # %bb.0: # %entry 915 ; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 916 ; AVX512F-NEXT: retq 917 entry: 918 %cmp = icmp sle <16 x i16> %a, %b 919 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 920 ret <16 x i16> %sel 921 } 922 923 define <16 x i16> @test35(<16 x i16> %a, <16 x i16> %b) { 924 ; SSE-LABEL: test35: 925 ; SSE: # %bb.0: # %entry 926 ; SSE-NEXT: pmaxsw %xmm2, %xmm0 927 ; SSE-NEXT: pmaxsw %xmm3, %xmm1 928 ; SSE-NEXT: retq 929 ; 930 ; AVX1-LABEL: test35: 931 ; AVX1: # %bb.0: # %entry 932 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 933 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 934 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 935 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 936 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 937 ; AVX1-NEXT: retq 938 ; 939 ; AVX2-LABEL: test35: 940 ; AVX2: # %bb.0: # %entry 941 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 942 ; AVX2-NEXT: retq 943 ; 944 ; AVX512F-LABEL: test35: 945 ; AVX512F: # %bb.0: # %entry 946 ; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 947 ; AVX512F-NEXT: retq 948 entry: 949 %cmp = icmp sgt <16 x i16> %a, %b 950 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 951 ret <16 x i16> %sel 952 } 953 954 define <16 x i16> @test36(<16 x i16> %a, <16 x i16> %b) { 955 ; SSE-LABEL: test36: 956 ; SSE: # %bb.0: # %entry 957 ; SSE-NEXT: pmaxsw %xmm2, %xmm0 958 ; SSE-NEXT: pmaxsw %xmm3, %xmm1 959 ; SSE-NEXT: retq 960 ; 961 ; AVX1-LABEL: test36: 962 ; AVX1: # %bb.0: # %entry 963 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 964 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 965 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 966 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 967 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 968 ; AVX1-NEXT: retq 969 ; 970 ; AVX2-LABEL: test36: 971 ; AVX2: # %bb.0: # %entry 972 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 973 ; AVX2-NEXT: retq 974 ; 975 ; AVX512F-LABEL: test36: 976 ; AVX512F: # %bb.0: # %entry 977 ; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 978 ; AVX512F-NEXT: retq 979 entry: 980 %cmp = icmp sge <16 x i16> %a, %b 981 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 982 ret <16 x i16> %sel 983 } 984 985 define <16 x i16> @test37(<16 x i16> %a, <16 x i16> %b) { 986 ; SSE2-LABEL: test37: 987 ; SSE2: # %bb.0: # %entry 988 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 989 ; SSE2-NEXT: pxor %xmm4, %xmm2 990 ; SSE2-NEXT: pxor %xmm4, %xmm0 991 ; SSE2-NEXT: pminsw %xmm2, %xmm0 992 ; SSE2-NEXT: pxor %xmm4, %xmm0 993 ; SSE2-NEXT: pxor %xmm4, %xmm3 994 ; SSE2-NEXT: pxor %xmm4, %xmm1 995 ; SSE2-NEXT: pminsw %xmm3, %xmm1 996 ; SSE2-NEXT: pxor %xmm4, %xmm1 997 ; SSE2-NEXT: retq 998 ; 999 ; SSE4-LABEL: test37: 1000 ; SSE4: # %bb.0: # %entry 1001 ; SSE4-NEXT: pminuw %xmm2, %xmm0 1002 ; SSE4-NEXT: pminuw %xmm3, %xmm1 1003 ; SSE4-NEXT: retq 1004 ; 1005 ; AVX1-LABEL: test37: 1006 ; AVX1: # %bb.0: # %entry 1007 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1008 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1009 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 1010 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1011 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1012 ; AVX1-NEXT: retq 1013 ; 1014 ; AVX2-LABEL: test37: 1015 ; AVX2: # %bb.0: # %entry 1016 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1017 ; AVX2-NEXT: retq 1018 ; 1019 ; AVX512F-LABEL: test37: 1020 ; AVX512F: # %bb.0: # %entry 1021 ; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1022 ; AVX512F-NEXT: retq 1023 entry: 1024 %cmp = icmp ult <16 x i16> %a, %b 1025 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1026 ret <16 x i16> %sel 1027 } 1028 1029 define <16 x i16> @test38(<16 x i16> %a, <16 x i16> %b) { 1030 ; SSE2-LABEL: test38: 1031 ; SSE2: # %bb.0: # %entry 1032 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 1033 ; SSE2-NEXT: pxor %xmm4, %xmm2 1034 ; SSE2-NEXT: pxor %xmm4, %xmm0 1035 ; SSE2-NEXT: pminsw %xmm2, %xmm0 1036 ; SSE2-NEXT: pxor %xmm4, %xmm0 1037 ; SSE2-NEXT: pxor %xmm4, %xmm3 1038 ; SSE2-NEXT: pxor %xmm4, %xmm1 1039 ; SSE2-NEXT: pminsw %xmm3, %xmm1 1040 ; SSE2-NEXT: pxor %xmm4, %xmm1 1041 ; SSE2-NEXT: retq 1042 ; 1043 ; SSE4-LABEL: test38: 1044 ; SSE4: # %bb.0: # %entry 1045 ; SSE4-NEXT: pminuw %xmm2, %xmm0 1046 ; SSE4-NEXT: pminuw %xmm3, %xmm1 1047 ; SSE4-NEXT: retq 1048 ; 1049 ; AVX1-LABEL: test38: 1050 ; AVX1: # %bb.0: # %entry 1051 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1052 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1053 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 1054 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1055 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1056 ; AVX1-NEXT: retq 1057 ; 1058 ; AVX2-LABEL: test38: 1059 ; AVX2: # %bb.0: # %entry 1060 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1061 ; AVX2-NEXT: retq 1062 ; 1063 ; AVX512F-LABEL: test38: 1064 ; AVX512F: # %bb.0: # %entry 1065 ; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1066 ; AVX512F-NEXT: retq 1067 entry: 1068 %cmp = icmp ule <16 x i16> %a, %b 1069 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1070 ret <16 x i16> %sel 1071 } 1072 1073 define <16 x i16> @test39(<16 x i16> %a, <16 x i16> %b) { 1074 ; SSE2-LABEL: test39: 1075 ; SSE2: # %bb.0: # %entry 1076 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 1077 ; SSE2-NEXT: pxor %xmm4, %xmm2 1078 ; SSE2-NEXT: pxor %xmm4, %xmm0 1079 ; SSE2-NEXT: pmaxsw %xmm2, %xmm0 1080 ; SSE2-NEXT: pxor %xmm4, %xmm0 1081 ; SSE2-NEXT: pxor %xmm4, %xmm3 1082 ; SSE2-NEXT: pxor %xmm4, %xmm1 1083 ; SSE2-NEXT: pmaxsw %xmm3, %xmm1 1084 ; SSE2-NEXT: pxor %xmm4, %xmm1 1085 ; SSE2-NEXT: retq 1086 ; 1087 ; SSE4-LABEL: test39: 1088 ; SSE4: # %bb.0: # %entry 1089 ; SSE4-NEXT: pmaxuw %xmm2, %xmm0 1090 ; SSE4-NEXT: pmaxuw %xmm3, %xmm1 1091 ; SSE4-NEXT: retq 1092 ; 1093 ; AVX1-LABEL: test39: 1094 ; AVX1: # %bb.0: # %entry 1095 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1096 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1097 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 1098 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1099 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1100 ; AVX1-NEXT: retq 1101 ; 1102 ; AVX2-LABEL: test39: 1103 ; AVX2: # %bb.0: # %entry 1104 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1105 ; AVX2-NEXT: retq 1106 ; 1107 ; AVX512F-LABEL: test39: 1108 ; AVX512F: # %bb.0: # %entry 1109 ; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1110 ; AVX512F-NEXT: retq 1111 entry: 1112 %cmp = icmp ugt <16 x i16> %a, %b 1113 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1114 ret <16 x i16> %sel 1115 } 1116 1117 define <16 x i16> @test40(<16 x i16> %a, <16 x i16> %b) { 1118 ; SSE2-LABEL: test40: 1119 ; SSE2: # %bb.0: # %entry 1120 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 1121 ; SSE2-NEXT: pxor %xmm4, %xmm2 1122 ; SSE2-NEXT: pxor %xmm4, %xmm0 1123 ; SSE2-NEXT: pmaxsw %xmm2, %xmm0 1124 ; SSE2-NEXT: pxor %xmm4, %xmm0 1125 ; SSE2-NEXT: pxor %xmm4, %xmm3 1126 ; SSE2-NEXT: pxor %xmm4, %xmm1 1127 ; SSE2-NEXT: pmaxsw %xmm3, %xmm1 1128 ; SSE2-NEXT: pxor %xmm4, %xmm1 1129 ; SSE2-NEXT: retq 1130 ; 1131 ; SSE4-LABEL: test40: 1132 ; SSE4: # %bb.0: # %entry 1133 ; SSE4-NEXT: pmaxuw %xmm2, %xmm0 1134 ; SSE4-NEXT: pmaxuw %xmm3, %xmm1 1135 ; SSE4-NEXT: retq 1136 ; 1137 ; AVX1-LABEL: test40: 1138 ; AVX1: # %bb.0: # %entry 1139 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1140 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1141 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 1142 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1143 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1144 ; AVX1-NEXT: retq 1145 ; 1146 ; AVX2-LABEL: test40: 1147 ; AVX2: # %bb.0: # %entry 1148 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1149 ; AVX2-NEXT: retq 1150 ; 1151 ; AVX512F-LABEL: test40: 1152 ; AVX512F: # %bb.0: # %entry 1153 ; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1154 ; AVX512F-NEXT: retq 1155 entry: 1156 %cmp = icmp uge <16 x i16> %a, %b 1157 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1158 ret <16 x i16> %sel 1159 } 1160 1161 define <8 x i32> @test41(<8 x i32> %a, <8 x i32> %b) { 1162 ; SSE2-LABEL: test41: 1163 ; SSE2: # %bb.0: # %entry 1164 ; SSE2-NEXT: movdqa %xmm2, %xmm4 1165 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 1166 ; SSE2-NEXT: pand %xmm4, %xmm0 1167 ; SSE2-NEXT: pandn %xmm2, %xmm4 1168 ; SSE2-NEXT: por %xmm4, %xmm0 1169 ; SSE2-NEXT: movdqa %xmm3, %xmm2 1170 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 1171 ; SSE2-NEXT: pand %xmm2, %xmm1 1172 ; SSE2-NEXT: pandn %xmm3, %xmm2 1173 ; SSE2-NEXT: por %xmm2, %xmm1 1174 ; SSE2-NEXT: retq 1175 ; 1176 ; SSE4-LABEL: test41: 1177 ; SSE4: # %bb.0: # %entry 1178 ; SSE4-NEXT: pminsd %xmm2, %xmm0 1179 ; SSE4-NEXT: pminsd %xmm3, %xmm1 1180 ; SSE4-NEXT: retq 1181 ; 1182 ; AVX1-LABEL: test41: 1183 ; AVX1: # %bb.0: # %entry 1184 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1185 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1186 ; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 1187 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1188 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1189 ; AVX1-NEXT: retq 1190 ; 1191 ; AVX2-LABEL: test41: 1192 ; AVX2: # %bb.0: # %entry 1193 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1194 ; AVX2-NEXT: retq 1195 ; 1196 ; AVX512F-LABEL: test41: 1197 ; AVX512F: # %bb.0: # %entry 1198 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1199 ; AVX512F-NEXT: retq 1200 entry: 1201 %cmp = icmp slt <8 x i32> %a, %b 1202 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1203 ret <8 x i32> %sel 1204 } 1205 1206 define <8 x i32> @test42(<8 x i32> %a, <8 x i32> %b) { 1207 ; SSE2-LABEL: test42: 1208 ; SSE2: # %bb.0: # %entry 1209 ; SSE2-NEXT: movdqa %xmm2, %xmm4 1210 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 1211 ; SSE2-NEXT: pand %xmm4, %xmm0 1212 ; SSE2-NEXT: pandn %xmm2, %xmm4 1213 ; SSE2-NEXT: por %xmm4, %xmm0 1214 ; SSE2-NEXT: movdqa %xmm3, %xmm2 1215 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 1216 ; SSE2-NEXT: pand %xmm2, %xmm1 1217 ; SSE2-NEXT: pandn %xmm3, %xmm2 1218 ; SSE2-NEXT: por %xmm2, %xmm1 1219 ; SSE2-NEXT: retq 1220 ; 1221 ; SSE4-LABEL: test42: 1222 ; SSE4: # %bb.0: # %entry 1223 ; SSE4-NEXT: pminsd %xmm2, %xmm0 1224 ; SSE4-NEXT: pminsd %xmm3, %xmm1 1225 ; SSE4-NEXT: retq 1226 ; 1227 ; AVX1-LABEL: test42: 1228 ; AVX1: # %bb.0: # %entry 1229 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1230 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1231 ; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 1232 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1233 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1234 ; AVX1-NEXT: retq 1235 ; 1236 ; AVX2-LABEL: test42: 1237 ; AVX2: # %bb.0: # %entry 1238 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1239 ; AVX2-NEXT: retq 1240 ; 1241 ; AVX512F-LABEL: test42: 1242 ; AVX512F: # %bb.0: # %entry 1243 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1244 ; AVX512F-NEXT: retq 1245 entry: 1246 %cmp = icmp sle <8 x i32> %a, %b 1247 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1248 ret <8 x i32> %sel 1249 } 1250 1251 define <8 x i32> @test43(<8 x i32> %a, <8 x i32> %b) { 1252 ; SSE2-LABEL: test43: 1253 ; SSE2: # %bb.0: # %entry 1254 ; SSE2-NEXT: movdqa %xmm0, %xmm4 1255 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 1256 ; SSE2-NEXT: pand %xmm4, %xmm0 1257 ; SSE2-NEXT: pandn %xmm2, %xmm4 1258 ; SSE2-NEXT: por %xmm0, %xmm4 1259 ; SSE2-NEXT: movdqa %xmm1, %xmm2 1260 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 1261 ; SSE2-NEXT: pand %xmm2, %xmm1 1262 ; SSE2-NEXT: pandn %xmm3, %xmm2 1263 ; SSE2-NEXT: por %xmm1, %xmm2 1264 ; SSE2-NEXT: movdqa %xmm4, %xmm0 1265 ; SSE2-NEXT: movdqa %xmm2, %xmm1 1266 ; SSE2-NEXT: retq 1267 ; 1268 ; SSE4-LABEL: test43: 1269 ; SSE4: # %bb.0: # %entry 1270 ; SSE4-NEXT: pmaxsd %xmm2, %xmm0 1271 ; SSE4-NEXT: pmaxsd %xmm3, %xmm1 1272 ; SSE4-NEXT: retq 1273 ; 1274 ; AVX1-LABEL: test43: 1275 ; AVX1: # %bb.0: # %entry 1276 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1277 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1278 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 1279 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1280 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1281 ; AVX1-NEXT: retq 1282 ; 1283 ; AVX2-LABEL: test43: 1284 ; AVX2: # %bb.0: # %entry 1285 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1286 ; AVX2-NEXT: retq 1287 ; 1288 ; AVX512F-LABEL: test43: 1289 ; AVX512F: # %bb.0: # %entry 1290 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1291 ; AVX512F-NEXT: retq 1292 entry: 1293 %cmp = icmp sgt <8 x i32> %a, %b 1294 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1295 ret <8 x i32> %sel 1296 } 1297 1298 define <8 x i32> @test44(<8 x i32> %a, <8 x i32> %b) { 1299 ; SSE2-LABEL: test44: 1300 ; SSE2: # %bb.0: # %entry 1301 ; SSE2-NEXT: movdqa %xmm0, %xmm4 1302 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 1303 ; SSE2-NEXT: pand %xmm4, %xmm0 1304 ; SSE2-NEXT: pandn %xmm2, %xmm4 1305 ; SSE2-NEXT: por %xmm0, %xmm4 1306 ; SSE2-NEXT: movdqa %xmm1, %xmm2 1307 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 1308 ; SSE2-NEXT: pand %xmm2, %xmm1 1309 ; SSE2-NEXT: pandn %xmm3, %xmm2 1310 ; SSE2-NEXT: por %xmm1, %xmm2 1311 ; SSE2-NEXT: movdqa %xmm4, %xmm0 1312 ; SSE2-NEXT: movdqa %xmm2, %xmm1 1313 ; SSE2-NEXT: retq 1314 ; 1315 ; SSE4-LABEL: test44: 1316 ; SSE4: # %bb.0: # %entry 1317 ; SSE4-NEXT: pmaxsd %xmm2, %xmm0 1318 ; SSE4-NEXT: pmaxsd %xmm3, %xmm1 1319 ; SSE4-NEXT: retq 1320 ; 1321 ; AVX1-LABEL: test44: 1322 ; AVX1: # %bb.0: # %entry 1323 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1324 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1325 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 1326 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1327 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1328 ; AVX1-NEXT: retq 1329 ; 1330 ; AVX2-LABEL: test44: 1331 ; AVX2: # %bb.0: # %entry 1332 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1333 ; AVX2-NEXT: retq 1334 ; 1335 ; AVX512F-LABEL: test44: 1336 ; AVX512F: # %bb.0: # %entry 1337 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1338 ; AVX512F-NEXT: retq 1339 entry: 1340 %cmp = icmp sge <8 x i32> %a, %b 1341 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1342 ret <8 x i32> %sel 1343 } 1344 1345 define <8 x i32> @test45(<8 x i32> %a, <8 x i32> %b) { 1346 ; SSE2-LABEL: test45: 1347 ; SSE2: # %bb.0: # %entry 1348 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 1349 ; SSE2-NEXT: movdqa %xmm0, %xmm5 1350 ; SSE2-NEXT: pxor %xmm4, %xmm5 1351 ; SSE2-NEXT: movdqa %xmm2, %xmm6 1352 ; SSE2-NEXT: pxor %xmm4, %xmm6 1353 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 1354 ; SSE2-NEXT: pand %xmm6, %xmm0 1355 ; SSE2-NEXT: pandn %xmm2, %xmm6 1356 ; SSE2-NEXT: por %xmm6, %xmm0 1357 ; SSE2-NEXT: movdqa %xmm1, %xmm2 1358 ; SSE2-NEXT: pxor %xmm4, %xmm2 1359 ; SSE2-NEXT: pxor %xmm3, %xmm4 1360 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 1361 ; SSE2-NEXT: pand %xmm4, %xmm1 1362 ; SSE2-NEXT: pandn %xmm3, %xmm4 1363 ; SSE2-NEXT: por %xmm4, %xmm1 1364 ; SSE2-NEXT: retq 1365 ; 1366 ; SSE4-LABEL: test45: 1367 ; SSE4: # %bb.0: # %entry 1368 ; SSE4-NEXT: pminud %xmm2, %xmm0 1369 ; SSE4-NEXT: pminud %xmm3, %xmm1 1370 ; SSE4-NEXT: retq 1371 ; 1372 ; AVX1-LABEL: test45: 1373 ; AVX1: # %bb.0: # %entry 1374 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1375 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1376 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 1377 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 1378 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1379 ; AVX1-NEXT: retq 1380 ; 1381 ; AVX2-LABEL: test45: 1382 ; AVX2: # %bb.0: # %entry 1383 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 1384 ; AVX2-NEXT: retq 1385 ; 1386 ; AVX512F-LABEL: test45: 1387 ; AVX512F: # %bb.0: # %entry 1388 ; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0 1389 ; AVX512F-NEXT: retq 1390 entry: 1391 %cmp = icmp ult <8 x i32> %a, %b 1392 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1393 ret <8 x i32> %sel 1394 } 1395 1396 define <8 x i32> @test46(<8 x i32> %a, <8 x i32> %b) { 1397 ; SSE2-LABEL: test46: 1398 ; SSE2: # %bb.0: # %entry 1399 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 1400 ; SSE2-NEXT: movdqa %xmm0, %xmm5 1401 ; SSE2-NEXT: pxor %xmm4, %xmm5 1402 ; SSE2-NEXT: movdqa %xmm2, %xmm6 1403 ; SSE2-NEXT: pxor %xmm4, %xmm6 1404 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 1405 ; SSE2-NEXT: pand %xmm6, %xmm0 1406 ; SSE2-NEXT: pandn %xmm2, %xmm6 1407 ; SSE2-NEXT: por %xmm6, %xmm0 1408 ; SSE2-NEXT: movdqa %xmm1, %xmm2 1409 ; SSE2-NEXT: pxor %xmm4, %xmm2 1410 ; SSE2-NEXT: pxor %xmm3, %xmm4 1411 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 1412 ; SSE2-NEXT: pand %xmm4, %xmm1 1413 ; SSE2-NEXT: pandn %xmm3, %xmm4 1414 ; SSE2-NEXT: por %xmm4, %xmm1 1415 ; SSE2-NEXT: retq 1416 ; 1417 ; SSE4-LABEL: test46: 1418 ; SSE4: # %bb.0: # %entry 1419 ; SSE4-NEXT: pminud %xmm2, %xmm0 1420 ; SSE4-NEXT: pminud %xmm3, %xmm1 1421 ; SSE4-NEXT: retq 1422 ; 1423 ; AVX1-LABEL: test46: 1424 ; AVX1: # %bb.0: # %entry 1425 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1426 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1427 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 1428 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 1429 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1430 ; AVX1-NEXT: retq 1431 ; 1432 ; AVX2-LABEL: test46: 1433 ; AVX2: # %bb.0: # %entry 1434 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 1435 ; AVX2-NEXT: retq 1436 ; 1437 ; AVX512F-LABEL: test46: 1438 ; AVX512F: # %bb.0: # %entry 1439 ; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0 1440 ; AVX512F-NEXT: retq 1441 entry: 1442 %cmp = icmp ule <8 x i32> %a, %b 1443 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1444 ret <8 x i32> %sel 1445 } 1446 1447 define <8 x i32> @test47(<8 x i32> %a, <8 x i32> %b) { 1448 ; SSE2-LABEL: test47: 1449 ; SSE2: # %bb.0: # %entry 1450 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 1451 ; SSE2-NEXT: movdqa %xmm2, %xmm6 1452 ; SSE2-NEXT: pxor %xmm5, %xmm6 1453 ; SSE2-NEXT: movdqa %xmm0, %xmm4 1454 ; SSE2-NEXT: pxor %xmm5, %xmm4 1455 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 1456 ; SSE2-NEXT: pand %xmm4, %xmm0 1457 ; SSE2-NEXT: pandn %xmm2, %xmm4 1458 ; SSE2-NEXT: por %xmm0, %xmm4 1459 ; SSE2-NEXT: movdqa %xmm3, %xmm0 1460 ; SSE2-NEXT: pxor %xmm5, %xmm0 1461 ; SSE2-NEXT: pxor %xmm1, %xmm5 1462 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 1463 ; SSE2-NEXT: pand %xmm5, %xmm1 1464 ; SSE2-NEXT: pandn %xmm3, %xmm5 1465 ; SSE2-NEXT: por %xmm5, %xmm1 1466 ; SSE2-NEXT: movdqa %xmm4, %xmm0 1467 ; SSE2-NEXT: retq 1468 ; 1469 ; SSE4-LABEL: test47: 1470 ; SSE4: # %bb.0: # %entry 1471 ; SSE4-NEXT: pmaxud %xmm2, %xmm0 1472 ; SSE4-NEXT: pmaxud %xmm3, %xmm1 1473 ; SSE4-NEXT: retq 1474 ; 1475 ; AVX1-LABEL: test47: 1476 ; AVX1: # %bb.0: # %entry 1477 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1478 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1479 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 1480 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 1481 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1482 ; AVX1-NEXT: retq 1483 ; 1484 ; AVX2-LABEL: test47: 1485 ; AVX2: # %bb.0: # %entry 1486 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1487 ; AVX2-NEXT: retq 1488 ; 1489 ; AVX512F-LABEL: test47: 1490 ; AVX512F: # %bb.0: # %entry 1491 ; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1492 ; AVX512F-NEXT: retq 1493 entry: 1494 %cmp = icmp ugt <8 x i32> %a, %b 1495 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1496 ret <8 x i32> %sel 1497 } 1498 1499 define <8 x i32> @test48(<8 x i32> %a, <8 x i32> %b) { 1500 ; SSE2-LABEL: test48: 1501 ; SSE2: # %bb.0: # %entry 1502 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 1503 ; SSE2-NEXT: movdqa %xmm2, %xmm6 1504 ; SSE2-NEXT: pxor %xmm5, %xmm6 1505 ; SSE2-NEXT: movdqa %xmm0, %xmm4 1506 ; SSE2-NEXT: pxor %xmm5, %xmm4 1507 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 1508 ; SSE2-NEXT: pand %xmm4, %xmm0 1509 ; SSE2-NEXT: pandn %xmm2, %xmm4 1510 ; SSE2-NEXT: por %xmm0, %xmm4 1511 ; SSE2-NEXT: movdqa %xmm3, %xmm0 1512 ; SSE2-NEXT: pxor %xmm5, %xmm0 1513 ; SSE2-NEXT: pxor %xmm1, %xmm5 1514 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 1515 ; SSE2-NEXT: pand %xmm5, %xmm1 1516 ; SSE2-NEXT: pandn %xmm3, %xmm5 1517 ; SSE2-NEXT: por %xmm5, %xmm1 1518 ; SSE2-NEXT: movdqa %xmm4, %xmm0 1519 ; SSE2-NEXT: retq 1520 ; 1521 ; SSE4-LABEL: test48: 1522 ; SSE4: # %bb.0: # %entry 1523 ; SSE4-NEXT: pmaxud %xmm2, %xmm0 1524 ; SSE4-NEXT: pmaxud %xmm3, %xmm1 1525 ; SSE4-NEXT: retq 1526 ; 1527 ; AVX1-LABEL: test48: 1528 ; AVX1: # %bb.0: # %entry 1529 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1530 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1531 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 1532 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 1533 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1534 ; AVX1-NEXT: retq 1535 ; 1536 ; AVX2-LABEL: test48: 1537 ; AVX2: # %bb.0: # %entry 1538 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1539 ; AVX2-NEXT: retq 1540 ; 1541 ; AVX512F-LABEL: test48: 1542 ; AVX512F: # %bb.0: # %entry 1543 ; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1544 ; AVX512F-NEXT: retq 1545 entry: 1546 %cmp = icmp uge <8 x i32> %a, %b 1547 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1548 ret <8 x i32> %sel 1549 } 1550 1551 define <16 x i8> @test49(<16 x i8> %a, <16 x i8> %b) { 1552 ; SSE2-LABEL: test49: 1553 ; SSE2: # %bb.0: # %entry 1554 ; SSE2-NEXT: movdqa %xmm0, %xmm2 1555 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 1556 ; SSE2-NEXT: pand %xmm2, %xmm0 1557 ; SSE2-NEXT: pandn %xmm1, %xmm2 1558 ; SSE2-NEXT: por %xmm0, %xmm2 1559 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1560 ; SSE2-NEXT: retq 1561 ; 1562 ; SSE4-LABEL: test49: 1563 ; SSE4: # %bb.0: # %entry 1564 ; SSE4-NEXT: pmaxsb %xmm1, %xmm0 1565 ; SSE4-NEXT: retq 1566 ; 1567 ; AVX-LABEL: test49: 1568 ; AVX: # %bb.0: # %entry 1569 ; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 1570 ; AVX-NEXT: retq 1571 entry: 1572 %cmp = icmp slt <16 x i8> %a, %b 1573 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1574 ret <16 x i8> %sel 1575 } 1576 1577 define <16 x i8> @test50(<16 x i8> %a, <16 x i8> %b) { 1578 ; SSE2-LABEL: test50: 1579 ; SSE2: # %bb.0: # %entry 1580 ; SSE2-NEXT: movdqa %xmm0, %xmm2 1581 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 1582 ; SSE2-NEXT: pand %xmm2, %xmm0 1583 ; SSE2-NEXT: pandn %xmm1, %xmm2 1584 ; SSE2-NEXT: por %xmm0, %xmm2 1585 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1586 ; SSE2-NEXT: retq 1587 ; 1588 ; SSE4-LABEL: test50: 1589 ; SSE4: # %bb.0: # %entry 1590 ; SSE4-NEXT: pmaxsb %xmm1, %xmm0 1591 ; SSE4-NEXT: retq 1592 ; 1593 ; AVX-LABEL: test50: 1594 ; AVX: # %bb.0: # %entry 1595 ; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 1596 ; AVX-NEXT: retq 1597 entry: 1598 %cmp = icmp sle <16 x i8> %a, %b 1599 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1600 ret <16 x i8> %sel 1601 } 1602 1603 define <16 x i8> @test51(<16 x i8> %a, <16 x i8> %b) { 1604 ; SSE2-LABEL: test51: 1605 ; SSE2: # %bb.0: # %entry 1606 ; SSE2-NEXT: movdqa %xmm1, %xmm2 1607 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm2 1608 ; SSE2-NEXT: pand %xmm2, %xmm0 1609 ; SSE2-NEXT: pandn %xmm1, %xmm2 1610 ; SSE2-NEXT: por %xmm2, %xmm0 1611 ; SSE2-NEXT: retq 1612 ; 1613 ; SSE4-LABEL: test51: 1614 ; SSE4: # %bb.0: # %entry 1615 ; SSE4-NEXT: pminsb %xmm1, %xmm0 1616 ; SSE4-NEXT: retq 1617 ; 1618 ; AVX-LABEL: test51: 1619 ; AVX: # %bb.0: # %entry 1620 ; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0 1621 ; AVX-NEXT: retq 1622 entry: 1623 %cmp = icmp sgt <16 x i8> %a, %b 1624 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1625 ret <16 x i8> %sel 1626 } 1627 1628 define <16 x i8> @test52(<16 x i8> %a, <16 x i8> %b) { 1629 ; SSE2-LABEL: test52: 1630 ; SSE2: # %bb.0: # %entry 1631 ; SSE2-NEXT: movdqa %xmm1, %xmm2 1632 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm2 1633 ; SSE2-NEXT: pand %xmm2, %xmm0 1634 ; SSE2-NEXT: pandn %xmm1, %xmm2 1635 ; SSE2-NEXT: por %xmm2, %xmm0 1636 ; SSE2-NEXT: retq 1637 ; 1638 ; SSE4-LABEL: test52: 1639 ; SSE4: # %bb.0: # %entry 1640 ; SSE4-NEXT: pminsb %xmm1, %xmm0 1641 ; SSE4-NEXT: retq 1642 ; 1643 ; AVX-LABEL: test52: 1644 ; AVX: # %bb.0: # %entry 1645 ; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0 1646 ; AVX-NEXT: retq 1647 entry: 1648 %cmp = icmp sge <16 x i8> %a, %b 1649 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1650 ret <16 x i8> %sel 1651 } 1652 1653 define <16 x i8> @test53(<16 x i8> %a, <16 x i8> %b) { 1654 ; SSE-LABEL: test53: 1655 ; SSE: # %bb.0: # %entry 1656 ; SSE-NEXT: pmaxub %xmm1, %xmm0 1657 ; SSE-NEXT: retq 1658 ; 1659 ; AVX-LABEL: test53: 1660 ; AVX: # %bb.0: # %entry 1661 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 1662 ; AVX-NEXT: retq 1663 entry: 1664 %cmp = icmp ult <16 x i8> %a, %b 1665 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1666 ret <16 x i8> %sel 1667 } 1668 1669 define <16 x i8> @test54(<16 x i8> %a, <16 x i8> %b) { 1670 ; SSE-LABEL: test54: 1671 ; SSE: # %bb.0: # %entry 1672 ; SSE-NEXT: pmaxub %xmm1, %xmm0 1673 ; SSE-NEXT: retq 1674 ; 1675 ; AVX-LABEL: test54: 1676 ; AVX: # %bb.0: # %entry 1677 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 1678 ; AVX-NEXT: retq 1679 entry: 1680 %cmp = icmp ule <16 x i8> %a, %b 1681 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1682 ret <16 x i8> %sel 1683 } 1684 1685 define <16 x i8> @test55(<16 x i8> %a, <16 x i8> %b) { 1686 ; SSE-LABEL: test55: 1687 ; SSE: # %bb.0: # %entry 1688 ; SSE-NEXT: pminub %xmm1, %xmm0 1689 ; SSE-NEXT: retq 1690 ; 1691 ; AVX-LABEL: test55: 1692 ; AVX: # %bb.0: # %entry 1693 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 1694 ; AVX-NEXT: retq 1695 entry: 1696 %cmp = icmp ugt <16 x i8> %a, %b 1697 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1698 ret <16 x i8> %sel 1699 } 1700 1701 define <16 x i8> @test56(<16 x i8> %a, <16 x i8> %b) { 1702 ; SSE-LABEL: test56: 1703 ; SSE: # %bb.0: # %entry 1704 ; SSE-NEXT: pminub %xmm1, %xmm0 1705 ; SSE-NEXT: retq 1706 ; 1707 ; AVX-LABEL: test56: 1708 ; AVX: # %bb.0: # %entry 1709 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 1710 ; AVX-NEXT: retq 1711 entry: 1712 %cmp = icmp uge <16 x i8> %a, %b 1713 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1714 ret <16 x i8> %sel 1715 } 1716 1717 define <8 x i16> @test57(<8 x i16> %a, <8 x i16> %b) { 1718 ; SSE-LABEL: test57: 1719 ; SSE: # %bb.0: # %entry 1720 ; SSE-NEXT: pmaxsw %xmm1, %xmm0 1721 ; SSE-NEXT: retq 1722 ; 1723 ; AVX-LABEL: test57: 1724 ; AVX: # %bb.0: # %entry 1725 ; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 1726 ; AVX-NEXT: retq 1727 entry: 1728 %cmp = icmp slt <8 x i16> %a, %b 1729 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1730 ret <8 x i16> %sel 1731 } 1732 1733 define <8 x i16> @test58(<8 x i16> %a, <8 x i16> %b) { 1734 ; SSE-LABEL: test58: 1735 ; SSE: # %bb.0: # %entry 1736 ; SSE-NEXT: pmaxsw %xmm1, %xmm0 1737 ; SSE-NEXT: retq 1738 ; 1739 ; AVX-LABEL: test58: 1740 ; AVX: # %bb.0: # %entry 1741 ; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 1742 ; AVX-NEXT: retq 1743 entry: 1744 %cmp = icmp sle <8 x i16> %a, %b 1745 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1746 ret <8 x i16> %sel 1747 } 1748 1749 define <8 x i16> @test59(<8 x i16> %a, <8 x i16> %b) { 1750 ; SSE-LABEL: test59: 1751 ; SSE: # %bb.0: # %entry 1752 ; SSE-NEXT: pminsw %xmm1, %xmm0 1753 ; SSE-NEXT: retq 1754 ; 1755 ; AVX-LABEL: test59: 1756 ; AVX: # %bb.0: # %entry 1757 ; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 1758 ; AVX-NEXT: retq 1759 entry: 1760 %cmp = icmp sgt <8 x i16> %a, %b 1761 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1762 ret <8 x i16> %sel 1763 } 1764 1765 define <8 x i16> @test60(<8 x i16> %a, <8 x i16> %b) { 1766 ; SSE-LABEL: test60: 1767 ; SSE: # %bb.0: # %entry 1768 ; SSE-NEXT: pminsw %xmm1, %xmm0 1769 ; SSE-NEXT: retq 1770 ; 1771 ; AVX-LABEL: test60: 1772 ; AVX: # %bb.0: # %entry 1773 ; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 1774 ; AVX-NEXT: retq 1775 entry: 1776 %cmp = icmp sge <8 x i16> %a, %b 1777 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1778 ret <8 x i16> %sel 1779 } 1780 1781 define <8 x i16> @test61(<8 x i16> %a, <8 x i16> %b) { 1782 ; SSE2-LABEL: test61: 1783 ; SSE2: # %bb.0: # %entry 1784 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 1785 ; SSE2-NEXT: pxor %xmm2, %xmm1 1786 ; SSE2-NEXT: pxor %xmm2, %xmm0 1787 ; SSE2-NEXT: pmaxsw %xmm1, %xmm0 1788 ; SSE2-NEXT: pxor %xmm2, %xmm0 1789 ; SSE2-NEXT: retq 1790 ; 1791 ; SSE4-LABEL: test61: 1792 ; SSE4: # %bb.0: # %entry 1793 ; SSE4-NEXT: pmaxuw %xmm1, %xmm0 1794 ; SSE4-NEXT: retq 1795 ; 1796 ; AVX-LABEL: test61: 1797 ; AVX: # %bb.0: # %entry 1798 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1799 ; AVX-NEXT: retq 1800 entry: 1801 %cmp = icmp ult <8 x i16> %a, %b 1802 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1803 ret <8 x i16> %sel 1804 } 1805 1806 define <8 x i16> @test62(<8 x i16> %a, <8 x i16> %b) { 1807 ; SSE2-LABEL: test62: 1808 ; SSE2: # %bb.0: # %entry 1809 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 1810 ; SSE2-NEXT: pxor %xmm2, %xmm1 1811 ; SSE2-NEXT: pxor %xmm2, %xmm0 1812 ; SSE2-NEXT: pmaxsw %xmm1, %xmm0 1813 ; SSE2-NEXT: pxor %xmm2, %xmm0 1814 ; SSE2-NEXT: retq 1815 ; 1816 ; SSE4-LABEL: test62: 1817 ; SSE4: # %bb.0: # %entry 1818 ; SSE4-NEXT: pmaxuw %xmm1, %xmm0 1819 ; SSE4-NEXT: retq 1820 ; 1821 ; AVX-LABEL: test62: 1822 ; AVX: # %bb.0: # %entry 1823 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1824 ; AVX-NEXT: retq 1825 entry: 1826 %cmp = icmp ule <8 x i16> %a, %b 1827 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1828 ret <8 x i16> %sel 1829 } 1830 1831 define <8 x i16> @test63(<8 x i16> %a, <8 x i16> %b) { 1832 ; SSE2-LABEL: test63: 1833 ; SSE2: # %bb.0: # %entry 1834 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 1835 ; SSE2-NEXT: pxor %xmm2, %xmm1 1836 ; SSE2-NEXT: pxor %xmm2, %xmm0 1837 ; SSE2-NEXT: pminsw %xmm1, %xmm0 1838 ; SSE2-NEXT: pxor %xmm2, %xmm0 1839 ; SSE2-NEXT: retq 1840 ; 1841 ; SSE4-LABEL: test63: 1842 ; SSE4: # %bb.0: # %entry 1843 ; SSE4-NEXT: pminuw %xmm1, %xmm0 1844 ; SSE4-NEXT: retq 1845 ; 1846 ; AVX-LABEL: test63: 1847 ; AVX: # %bb.0: # %entry 1848 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1849 ; AVX-NEXT: retq 1850 entry: 1851 %cmp = icmp ugt <8 x i16> %a, %b 1852 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1853 ret <8 x i16> %sel 1854 } 1855 1856 define <8 x i16> @test64(<8 x i16> %a, <8 x i16> %b) { 1857 ; SSE2-LABEL: test64: 1858 ; SSE2: # %bb.0: # %entry 1859 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 1860 ; SSE2-NEXT: pxor %xmm2, %xmm1 1861 ; SSE2-NEXT: pxor %xmm2, %xmm0 1862 ; SSE2-NEXT: pminsw %xmm1, %xmm0 1863 ; SSE2-NEXT: pxor %xmm2, %xmm0 1864 ; SSE2-NEXT: retq 1865 ; 1866 ; SSE4-LABEL: test64: 1867 ; SSE4: # %bb.0: # %entry 1868 ; SSE4-NEXT: pminuw %xmm1, %xmm0 1869 ; SSE4-NEXT: retq 1870 ; 1871 ; AVX-LABEL: test64: 1872 ; AVX: # %bb.0: # %entry 1873 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1874 ; AVX-NEXT: retq 1875 entry: 1876 %cmp = icmp uge <8 x i16> %a, %b 1877 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1878 ret <8 x i16> %sel 1879 } 1880 1881 define <4 x i32> @test65(<4 x i32> %a, <4 x i32> %b) { 1882 ; SSE2-LABEL: test65: 1883 ; SSE2: # %bb.0: # %entry 1884 ; SSE2-NEXT: movdqa %xmm0, %xmm2 1885 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 1886 ; SSE2-NEXT: pand %xmm2, %xmm0 1887 ; SSE2-NEXT: pandn %xmm1, %xmm2 1888 ; SSE2-NEXT: por %xmm0, %xmm2 1889 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1890 ; SSE2-NEXT: retq 1891 ; 1892 ; SSE4-LABEL: test65: 1893 ; SSE4: # %bb.0: # %entry 1894 ; SSE4-NEXT: pmaxsd %xmm1, %xmm0 1895 ; SSE4-NEXT: retq 1896 ; 1897 ; AVX-LABEL: test65: 1898 ; AVX: # %bb.0: # %entry 1899 ; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1900 ; AVX-NEXT: retq 1901 entry: 1902 %cmp = icmp slt <4 x i32> %a, %b 1903 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 1904 ret <4 x i32> %sel 1905 } 1906 1907 define <4 x i32> @test66(<4 x i32> %a, <4 x i32> %b) { 1908 ; SSE2-LABEL: test66: 1909 ; SSE2: # %bb.0: # %entry 1910 ; SSE2-NEXT: movdqa %xmm0, %xmm2 1911 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 1912 ; SSE2-NEXT: pand %xmm2, %xmm0 1913 ; SSE2-NEXT: pandn %xmm1, %xmm2 1914 ; SSE2-NEXT: por %xmm0, %xmm2 1915 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1916 ; SSE2-NEXT: retq 1917 ; 1918 ; SSE4-LABEL: test66: 1919 ; SSE4: # %bb.0: # %entry 1920 ; SSE4-NEXT: pmaxsd %xmm1, %xmm0 1921 ; SSE4-NEXT: retq 1922 ; 1923 ; AVX-LABEL: test66: 1924 ; AVX: # %bb.0: # %entry 1925 ; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1926 ; AVX-NEXT: retq 1927 entry: 1928 %cmp = icmp sle <4 x i32> %a, %b 1929 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 1930 ret <4 x i32> %sel 1931 } 1932 1933 define <4 x i32> @test67(<4 x i32> %a, <4 x i32> %b) { 1934 ; SSE2-LABEL: test67: 1935 ; SSE2: # %bb.0: # %entry 1936 ; SSE2-NEXT: movdqa %xmm1, %xmm2 1937 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 1938 ; SSE2-NEXT: pand %xmm2, %xmm0 1939 ; SSE2-NEXT: pandn %xmm1, %xmm2 1940 ; SSE2-NEXT: por %xmm2, %xmm0 1941 ; SSE2-NEXT: retq 1942 ; 1943 ; SSE4-LABEL: test67: 1944 ; SSE4: # %bb.0: # %entry 1945 ; SSE4-NEXT: pminsd %xmm1, %xmm0 1946 ; SSE4-NEXT: retq 1947 ; 1948 ; AVX-LABEL: test67: 1949 ; AVX: # %bb.0: # %entry 1950 ; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1951 ; AVX-NEXT: retq 1952 entry: 1953 %cmp = icmp sgt <4 x i32> %a, %b 1954 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 1955 ret <4 x i32> %sel 1956 } 1957 1958 define <4 x i32> @test68(<4 x i32> %a, <4 x i32> %b) { 1959 ; SSE2-LABEL: test68: 1960 ; SSE2: # %bb.0: # %entry 1961 ; SSE2-NEXT: movdqa %xmm1, %xmm2 1962 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 1963 ; SSE2-NEXT: pand %xmm2, %xmm0 1964 ; SSE2-NEXT: pandn %xmm1, %xmm2 1965 ; SSE2-NEXT: por %xmm2, %xmm0 1966 ; SSE2-NEXT: retq 1967 ; 1968 ; SSE4-LABEL: test68: 1969 ; SSE4: # %bb.0: # %entry 1970 ; SSE4-NEXT: pminsd %xmm1, %xmm0 1971 ; SSE4-NEXT: retq 1972 ; 1973 ; AVX-LABEL: test68: 1974 ; AVX: # %bb.0: # %entry 1975 ; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1976 ; AVX-NEXT: retq 1977 entry: 1978 %cmp = icmp sge <4 x i32> %a, %b 1979 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 1980 ret <4 x i32> %sel 1981 } 1982 1983 define <4 x i32> @test69(<4 x i32> %a, <4 x i32> %b) { 1984 ; SSE2-LABEL: test69: 1985 ; SSE2: # %bb.0: # %entry 1986 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 1987 ; SSE2-NEXT: movdqa %xmm1, %xmm3 1988 ; SSE2-NEXT: pxor %xmm2, %xmm3 1989 ; SSE2-NEXT: pxor %xmm0, %xmm2 1990 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 1991 ; SSE2-NEXT: pand %xmm2, %xmm0 1992 ; SSE2-NEXT: pandn %xmm1, %xmm2 1993 ; SSE2-NEXT: por %xmm2, %xmm0 1994 ; SSE2-NEXT: retq 1995 ; 1996 ; SSE4-LABEL: test69: 1997 ; SSE4: # %bb.0: # %entry 1998 ; SSE4-NEXT: pmaxud %xmm1, %xmm0 1999 ; SSE4-NEXT: retq 2000 ; 2001 ; AVX-LABEL: test69: 2002 ; AVX: # %bb.0: # %entry 2003 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 2004 ; AVX-NEXT: retq 2005 entry: 2006 %cmp = icmp ult <4 x i32> %a, %b 2007 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2008 ret <4 x i32> %sel 2009 } 2010 2011 define <4 x i32> @test70(<4 x i32> %a, <4 x i32> %b) { 2012 ; SSE2-LABEL: test70: 2013 ; SSE2: # %bb.0: # %entry 2014 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 2015 ; SSE2-NEXT: movdqa %xmm1, %xmm3 2016 ; SSE2-NEXT: pxor %xmm2, %xmm3 2017 ; SSE2-NEXT: pxor %xmm0, %xmm2 2018 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2019 ; SSE2-NEXT: pand %xmm2, %xmm0 2020 ; SSE2-NEXT: pandn %xmm1, %xmm2 2021 ; SSE2-NEXT: por %xmm2, %xmm0 2022 ; SSE2-NEXT: retq 2023 ; 2024 ; SSE4-LABEL: test70: 2025 ; SSE4: # %bb.0: # %entry 2026 ; SSE4-NEXT: pmaxud %xmm1, %xmm0 2027 ; SSE4-NEXT: retq 2028 ; 2029 ; AVX-LABEL: test70: 2030 ; AVX: # %bb.0: # %entry 2031 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 2032 ; AVX-NEXT: retq 2033 entry: 2034 %cmp = icmp ule <4 x i32> %a, %b 2035 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2036 ret <4 x i32> %sel 2037 } 2038 2039 define <4 x i32> @test71(<4 x i32> %a, <4 x i32> %b) { 2040 ; SSE2-LABEL: test71: 2041 ; SSE2: # %bb.0: # %entry 2042 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 2043 ; SSE2-NEXT: movdqa %xmm0, %xmm3 2044 ; SSE2-NEXT: pxor %xmm2, %xmm3 2045 ; SSE2-NEXT: pxor %xmm1, %xmm2 2046 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2047 ; SSE2-NEXT: pand %xmm2, %xmm0 2048 ; SSE2-NEXT: pandn %xmm1, %xmm2 2049 ; SSE2-NEXT: por %xmm2, %xmm0 2050 ; SSE2-NEXT: retq 2051 ; 2052 ; SSE4-LABEL: test71: 2053 ; SSE4: # %bb.0: # %entry 2054 ; SSE4-NEXT: pminud %xmm1, %xmm0 2055 ; SSE4-NEXT: retq 2056 ; 2057 ; AVX-LABEL: test71: 2058 ; AVX: # %bb.0: # %entry 2059 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 2060 ; AVX-NEXT: retq 2061 entry: 2062 %cmp = icmp ugt <4 x i32> %a, %b 2063 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2064 ret <4 x i32> %sel 2065 } 2066 2067 define <4 x i32> @test72(<4 x i32> %a, <4 x i32> %b) { 2068 ; SSE2-LABEL: test72: 2069 ; SSE2: # %bb.0: # %entry 2070 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 2071 ; SSE2-NEXT: movdqa %xmm0, %xmm3 2072 ; SSE2-NEXT: pxor %xmm2, %xmm3 2073 ; SSE2-NEXT: pxor %xmm1, %xmm2 2074 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2075 ; SSE2-NEXT: pand %xmm2, %xmm0 2076 ; SSE2-NEXT: pandn %xmm1, %xmm2 2077 ; SSE2-NEXT: por %xmm2, %xmm0 2078 ; SSE2-NEXT: retq 2079 ; 2080 ; SSE4-LABEL: test72: 2081 ; SSE4: # %bb.0: # %entry 2082 ; SSE4-NEXT: pminud %xmm1, %xmm0 2083 ; SSE4-NEXT: retq 2084 ; 2085 ; AVX-LABEL: test72: 2086 ; AVX: # %bb.0: # %entry 2087 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 2088 ; AVX-NEXT: retq 2089 entry: 2090 %cmp = icmp uge <4 x i32> %a, %b 2091 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2092 ret <4 x i32> %sel 2093 } 2094 2095 define <32 x i8> @test73(<32 x i8> %a, <32 x i8> %b) { 2096 ; SSE2-LABEL: test73: 2097 ; SSE2: # %bb.0: # %entry 2098 ; SSE2-NEXT: movdqa %xmm0, %xmm4 2099 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 2100 ; SSE2-NEXT: pand %xmm4, %xmm0 2101 ; SSE2-NEXT: pandn %xmm2, %xmm4 2102 ; SSE2-NEXT: por %xmm0, %xmm4 2103 ; SSE2-NEXT: movdqa %xmm1, %xmm2 2104 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm2 2105 ; SSE2-NEXT: pand %xmm2, %xmm1 2106 ; SSE2-NEXT: pandn %xmm3, %xmm2 2107 ; SSE2-NEXT: por %xmm1, %xmm2 2108 ; SSE2-NEXT: movdqa %xmm4, %xmm0 2109 ; SSE2-NEXT: movdqa %xmm2, %xmm1 2110 ; SSE2-NEXT: retq 2111 ; 2112 ; SSE4-LABEL: test73: 2113 ; SSE4: # %bb.0: # %entry 2114 ; SSE4-NEXT: pmaxsb %xmm2, %xmm0 2115 ; SSE4-NEXT: pmaxsb %xmm3, %xmm1 2116 ; SSE4-NEXT: retq 2117 ; 2118 ; AVX1-LABEL: test73: 2119 ; AVX1: # %bb.0: # %entry 2120 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2121 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2122 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 2123 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 2124 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2125 ; AVX1-NEXT: retq 2126 ; 2127 ; AVX2-LABEL: test73: 2128 ; AVX2: # %bb.0: # %entry 2129 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2130 ; AVX2-NEXT: retq 2131 ; 2132 ; AVX512F-LABEL: test73: 2133 ; AVX512F: # %bb.0: # %entry 2134 ; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2135 ; AVX512F-NEXT: retq 2136 entry: 2137 %cmp = icmp slt <32 x i8> %a, %b 2138 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2139 ret <32 x i8> %sel 2140 } 2141 2142 define <32 x i8> @test74(<32 x i8> %a, <32 x i8> %b) { 2143 ; SSE2-LABEL: test74: 2144 ; SSE2: # %bb.0: # %entry 2145 ; SSE2-NEXT: movdqa %xmm0, %xmm4 2146 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 2147 ; SSE2-NEXT: pand %xmm4, %xmm0 2148 ; SSE2-NEXT: pandn %xmm2, %xmm4 2149 ; SSE2-NEXT: por %xmm0, %xmm4 2150 ; SSE2-NEXT: movdqa %xmm1, %xmm2 2151 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm2 2152 ; SSE2-NEXT: pand %xmm2, %xmm1 2153 ; SSE2-NEXT: pandn %xmm3, %xmm2 2154 ; SSE2-NEXT: por %xmm1, %xmm2 2155 ; SSE2-NEXT: movdqa %xmm4, %xmm0 2156 ; SSE2-NEXT: movdqa %xmm2, %xmm1 2157 ; SSE2-NEXT: retq 2158 ; 2159 ; SSE4-LABEL: test74: 2160 ; SSE4: # %bb.0: # %entry 2161 ; SSE4-NEXT: pmaxsb %xmm2, %xmm0 2162 ; SSE4-NEXT: pmaxsb %xmm3, %xmm1 2163 ; SSE4-NEXT: retq 2164 ; 2165 ; AVX1-LABEL: test74: 2166 ; AVX1: # %bb.0: # %entry 2167 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2168 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2169 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 2170 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 2171 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2172 ; AVX1-NEXT: retq 2173 ; 2174 ; AVX2-LABEL: test74: 2175 ; AVX2: # %bb.0: # %entry 2176 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2177 ; AVX2-NEXT: retq 2178 ; 2179 ; AVX512F-LABEL: test74: 2180 ; AVX512F: # %bb.0: # %entry 2181 ; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2182 ; AVX512F-NEXT: retq 2183 entry: 2184 %cmp = icmp sle <32 x i8> %a, %b 2185 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2186 ret <32 x i8> %sel 2187 } 2188 2189 define <32 x i8> @test75(<32 x i8> %a, <32 x i8> %b) { 2190 ; SSE2-LABEL: test75: 2191 ; SSE2: # %bb.0: # %entry 2192 ; SSE2-NEXT: movdqa %xmm2, %xmm4 2193 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm4 2194 ; SSE2-NEXT: pand %xmm4, %xmm0 2195 ; SSE2-NEXT: pandn %xmm2, %xmm4 2196 ; SSE2-NEXT: por %xmm4, %xmm0 2197 ; SSE2-NEXT: movdqa %xmm3, %xmm2 2198 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 2199 ; SSE2-NEXT: pand %xmm2, %xmm1 2200 ; SSE2-NEXT: pandn %xmm3, %xmm2 2201 ; SSE2-NEXT: por %xmm2, %xmm1 2202 ; SSE2-NEXT: retq 2203 ; 2204 ; SSE4-LABEL: test75: 2205 ; SSE4: # %bb.0: # %entry 2206 ; SSE4-NEXT: pminsb %xmm2, %xmm0 2207 ; SSE4-NEXT: pminsb %xmm3, %xmm1 2208 ; SSE4-NEXT: retq 2209 ; 2210 ; AVX1-LABEL: test75: 2211 ; AVX1: # %bb.0: # %entry 2212 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2213 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2214 ; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 2215 ; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 2216 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2217 ; AVX1-NEXT: retq 2218 ; 2219 ; AVX2-LABEL: test75: 2220 ; AVX2: # %bb.0: # %entry 2221 ; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2222 ; AVX2-NEXT: retq 2223 ; 2224 ; AVX512F-LABEL: test75: 2225 ; AVX512F: # %bb.0: # %entry 2226 ; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2227 ; AVX512F-NEXT: retq 2228 entry: 2229 %cmp = icmp sgt <32 x i8> %a, %b 2230 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2231 ret <32 x i8> %sel 2232 } 2233 2234 define <32 x i8> @test76(<32 x i8> %a, <32 x i8> %b) { 2235 ; SSE2-LABEL: test76: 2236 ; SSE2: # %bb.0: # %entry 2237 ; SSE2-NEXT: movdqa %xmm2, %xmm4 2238 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm4 2239 ; SSE2-NEXT: pand %xmm4, %xmm0 2240 ; SSE2-NEXT: pandn %xmm2, %xmm4 2241 ; SSE2-NEXT: por %xmm4, %xmm0 2242 ; SSE2-NEXT: movdqa %xmm3, %xmm2 2243 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 2244 ; SSE2-NEXT: pand %xmm2, %xmm1 2245 ; SSE2-NEXT: pandn %xmm3, %xmm2 2246 ; SSE2-NEXT: por %xmm2, %xmm1 2247 ; SSE2-NEXT: retq 2248 ; 2249 ; SSE4-LABEL: test76: 2250 ; SSE4: # %bb.0: # %entry 2251 ; SSE4-NEXT: pminsb %xmm2, %xmm0 2252 ; SSE4-NEXT: pminsb %xmm3, %xmm1 2253 ; SSE4-NEXT: retq 2254 ; 2255 ; AVX1-LABEL: test76: 2256 ; AVX1: # %bb.0: # %entry 2257 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2258 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2259 ; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 2260 ; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 2261 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2262 ; AVX1-NEXT: retq 2263 ; 2264 ; AVX2-LABEL: test76: 2265 ; AVX2: # %bb.0: # %entry 2266 ; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2267 ; AVX2-NEXT: retq 2268 ; 2269 ; AVX512F-LABEL: test76: 2270 ; AVX512F: # %bb.0: # %entry 2271 ; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2272 ; AVX512F-NEXT: retq 2273 entry: 2274 %cmp = icmp sge <32 x i8> %a, %b 2275 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2276 ret <32 x i8> %sel 2277 } 2278 2279 define <32 x i8> @test77(<32 x i8> %a, <32 x i8> %b) { 2280 ; SSE-LABEL: test77: 2281 ; SSE: # %bb.0: # %entry 2282 ; SSE-NEXT: pmaxub %xmm2, %xmm0 2283 ; SSE-NEXT: pmaxub %xmm3, %xmm1 2284 ; SSE-NEXT: retq 2285 ; 2286 ; AVX1-LABEL: test77: 2287 ; AVX1: # %bb.0: # %entry 2288 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2289 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2290 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 2291 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 2292 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2293 ; AVX1-NEXT: retq 2294 ; 2295 ; AVX2-LABEL: test77: 2296 ; AVX2: # %bb.0: # %entry 2297 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2298 ; AVX2-NEXT: retq 2299 ; 2300 ; AVX512F-LABEL: test77: 2301 ; AVX512F: # %bb.0: # %entry 2302 ; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2303 ; AVX512F-NEXT: retq 2304 entry: 2305 %cmp = icmp ult <32 x i8> %a, %b 2306 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2307 ret <32 x i8> %sel 2308 } 2309 2310 define <32 x i8> @test78(<32 x i8> %a, <32 x i8> %b) { 2311 ; SSE-LABEL: test78: 2312 ; SSE: # %bb.0: # %entry 2313 ; SSE-NEXT: pmaxub %xmm2, %xmm0 2314 ; SSE-NEXT: pmaxub %xmm3, %xmm1 2315 ; SSE-NEXT: retq 2316 ; 2317 ; AVX1-LABEL: test78: 2318 ; AVX1: # %bb.0: # %entry 2319 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2320 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2321 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 2322 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 2323 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2324 ; AVX1-NEXT: retq 2325 ; 2326 ; AVX2-LABEL: test78: 2327 ; AVX2: # %bb.0: # %entry 2328 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2329 ; AVX2-NEXT: retq 2330 ; 2331 ; AVX512F-LABEL: test78: 2332 ; AVX512F: # %bb.0: # %entry 2333 ; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2334 ; AVX512F-NEXT: retq 2335 entry: 2336 %cmp = icmp ule <32 x i8> %a, %b 2337 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2338 ret <32 x i8> %sel 2339 } 2340 2341 define <32 x i8> @test79(<32 x i8> %a, <32 x i8> %b) { 2342 ; SSE-LABEL: test79: 2343 ; SSE: # %bb.0: # %entry 2344 ; SSE-NEXT: pminub %xmm2, %xmm0 2345 ; SSE-NEXT: pminub %xmm3, %xmm1 2346 ; SSE-NEXT: retq 2347 ; 2348 ; AVX1-LABEL: test79: 2349 ; AVX1: # %bb.0: # %entry 2350 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2351 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2352 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 2353 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 2354 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2355 ; AVX1-NEXT: retq 2356 ; 2357 ; AVX2-LABEL: test79: 2358 ; AVX2: # %bb.0: # %entry 2359 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 2360 ; AVX2-NEXT: retq 2361 ; 2362 ; AVX512F-LABEL: test79: 2363 ; AVX512F: # %bb.0: # %entry 2364 ; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 2365 ; AVX512F-NEXT: retq 2366 entry: 2367 %cmp = icmp ugt <32 x i8> %a, %b 2368 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2369 ret <32 x i8> %sel 2370 } 2371 2372 define <32 x i8> @test80(<32 x i8> %a, <32 x i8> %b) { 2373 ; SSE-LABEL: test80: 2374 ; SSE: # %bb.0: # %entry 2375 ; SSE-NEXT: pminub %xmm2, %xmm0 2376 ; SSE-NEXT: pminub %xmm3, %xmm1 2377 ; SSE-NEXT: retq 2378 ; 2379 ; AVX1-LABEL: test80: 2380 ; AVX1: # %bb.0: # %entry 2381 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2382 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2383 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 2384 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 2385 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2386 ; AVX1-NEXT: retq 2387 ; 2388 ; AVX2-LABEL: test80: 2389 ; AVX2: # %bb.0: # %entry 2390 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 2391 ; AVX2-NEXT: retq 2392 ; 2393 ; AVX512F-LABEL: test80: 2394 ; AVX512F: # %bb.0: # %entry 2395 ; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 2396 ; AVX512F-NEXT: retq 2397 entry: 2398 %cmp = icmp uge <32 x i8> %a, %b 2399 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2400 ret <32 x i8> %sel 2401 } 2402 2403 define <16 x i16> @test81(<16 x i16> %a, <16 x i16> %b) { 2404 ; SSE-LABEL: test81: 2405 ; SSE: # %bb.0: # %entry 2406 ; SSE-NEXT: pmaxsw %xmm2, %xmm0 2407 ; SSE-NEXT: pmaxsw %xmm3, %xmm1 2408 ; SSE-NEXT: retq 2409 ; 2410 ; AVX1-LABEL: test81: 2411 ; AVX1: # %bb.0: # %entry 2412 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2413 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2414 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 2415 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 2416 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2417 ; AVX1-NEXT: retq 2418 ; 2419 ; AVX2-LABEL: test81: 2420 ; AVX2: # %bb.0: # %entry 2421 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2422 ; AVX2-NEXT: retq 2423 ; 2424 ; AVX512F-LABEL: test81: 2425 ; AVX512F: # %bb.0: # %entry 2426 ; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2427 ; AVX512F-NEXT: retq 2428 entry: 2429 %cmp = icmp slt <16 x i16> %a, %b 2430 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2431 ret <16 x i16> %sel 2432 } 2433 2434 define <16 x i16> @test82(<16 x i16> %a, <16 x i16> %b) { 2435 ; SSE-LABEL: test82: 2436 ; SSE: # %bb.0: # %entry 2437 ; SSE-NEXT: pmaxsw %xmm2, %xmm0 2438 ; SSE-NEXT: pmaxsw %xmm3, %xmm1 2439 ; SSE-NEXT: retq 2440 ; 2441 ; AVX1-LABEL: test82: 2442 ; AVX1: # %bb.0: # %entry 2443 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2444 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2445 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 2446 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 2447 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2448 ; AVX1-NEXT: retq 2449 ; 2450 ; AVX2-LABEL: test82: 2451 ; AVX2: # %bb.0: # %entry 2452 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2453 ; AVX2-NEXT: retq 2454 ; 2455 ; AVX512F-LABEL: test82: 2456 ; AVX512F: # %bb.0: # %entry 2457 ; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2458 ; AVX512F-NEXT: retq 2459 entry: 2460 %cmp = icmp sle <16 x i16> %a, %b 2461 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2462 ret <16 x i16> %sel 2463 } 2464 2465 define <16 x i16> @test83(<16 x i16> %a, <16 x i16> %b) { 2466 ; SSE-LABEL: test83: 2467 ; SSE: # %bb.0: # %entry 2468 ; SSE-NEXT: pminsw %xmm2, %xmm0 2469 ; SSE-NEXT: pminsw %xmm3, %xmm1 2470 ; SSE-NEXT: retq 2471 ; 2472 ; AVX1-LABEL: test83: 2473 ; AVX1: # %bb.0: # %entry 2474 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2475 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2476 ; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 2477 ; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 2478 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2479 ; AVX1-NEXT: retq 2480 ; 2481 ; AVX2-LABEL: test83: 2482 ; AVX2: # %bb.0: # %entry 2483 ; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2484 ; AVX2-NEXT: retq 2485 ; 2486 ; AVX512F-LABEL: test83: 2487 ; AVX512F: # %bb.0: # %entry 2488 ; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2489 ; AVX512F-NEXT: retq 2490 entry: 2491 %cmp = icmp sgt <16 x i16> %a, %b 2492 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2493 ret <16 x i16> %sel 2494 } 2495 2496 define <16 x i16> @test84(<16 x i16> %a, <16 x i16> %b) { 2497 ; SSE-LABEL: test84: 2498 ; SSE: # %bb.0: # %entry 2499 ; SSE-NEXT: pminsw %xmm2, %xmm0 2500 ; SSE-NEXT: pminsw %xmm3, %xmm1 2501 ; SSE-NEXT: retq 2502 ; 2503 ; AVX1-LABEL: test84: 2504 ; AVX1: # %bb.0: # %entry 2505 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2506 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2507 ; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 2508 ; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 2509 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2510 ; AVX1-NEXT: retq 2511 ; 2512 ; AVX2-LABEL: test84: 2513 ; AVX2: # %bb.0: # %entry 2514 ; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2515 ; AVX2-NEXT: retq 2516 ; 2517 ; AVX512F-LABEL: test84: 2518 ; AVX512F: # %bb.0: # %entry 2519 ; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2520 ; AVX512F-NEXT: retq 2521 entry: 2522 %cmp = icmp sge <16 x i16> %a, %b 2523 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2524 ret <16 x i16> %sel 2525 } 2526 2527 define <16 x i16> @test85(<16 x i16> %a, <16 x i16> %b) { 2528 ; SSE2-LABEL: test85: 2529 ; SSE2: # %bb.0: # %entry 2530 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 2531 ; SSE2-NEXT: pxor %xmm4, %xmm2 2532 ; SSE2-NEXT: pxor %xmm4, %xmm0 2533 ; SSE2-NEXT: pmaxsw %xmm2, %xmm0 2534 ; SSE2-NEXT: pxor %xmm4, %xmm0 2535 ; SSE2-NEXT: pxor %xmm4, %xmm3 2536 ; SSE2-NEXT: pxor %xmm4, %xmm1 2537 ; SSE2-NEXT: pmaxsw %xmm3, %xmm1 2538 ; SSE2-NEXT: pxor %xmm4, %xmm1 2539 ; SSE2-NEXT: retq 2540 ; 2541 ; SSE4-LABEL: test85: 2542 ; SSE4: # %bb.0: # %entry 2543 ; SSE4-NEXT: pmaxuw %xmm2, %xmm0 2544 ; SSE4-NEXT: pmaxuw %xmm3, %xmm1 2545 ; SSE4-NEXT: retq 2546 ; 2547 ; AVX1-LABEL: test85: 2548 ; AVX1: # %bb.0: # %entry 2549 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2550 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2551 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 2552 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 2553 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2554 ; AVX1-NEXT: retq 2555 ; 2556 ; AVX2-LABEL: test85: 2557 ; AVX2: # %bb.0: # %entry 2558 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2559 ; AVX2-NEXT: retq 2560 ; 2561 ; AVX512F-LABEL: test85: 2562 ; AVX512F: # %bb.0: # %entry 2563 ; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2564 ; AVX512F-NEXT: retq 2565 entry: 2566 %cmp = icmp ult <16 x i16> %a, %b 2567 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2568 ret <16 x i16> %sel 2569 } 2570 2571 define <16 x i16> @test86(<16 x i16> %a, <16 x i16> %b) { 2572 ; SSE2-LABEL: test86: 2573 ; SSE2: # %bb.0: # %entry 2574 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 2575 ; SSE2-NEXT: pxor %xmm4, %xmm2 2576 ; SSE2-NEXT: pxor %xmm4, %xmm0 2577 ; SSE2-NEXT: pmaxsw %xmm2, %xmm0 2578 ; SSE2-NEXT: pxor %xmm4, %xmm0 2579 ; SSE2-NEXT: pxor %xmm4, %xmm3 2580 ; SSE2-NEXT: pxor %xmm4, %xmm1 2581 ; SSE2-NEXT: pmaxsw %xmm3, %xmm1 2582 ; SSE2-NEXT: pxor %xmm4, %xmm1 2583 ; SSE2-NEXT: retq 2584 ; 2585 ; SSE4-LABEL: test86: 2586 ; SSE4: # %bb.0: # %entry 2587 ; SSE4-NEXT: pmaxuw %xmm2, %xmm0 2588 ; SSE4-NEXT: pmaxuw %xmm3, %xmm1 2589 ; SSE4-NEXT: retq 2590 ; 2591 ; AVX1-LABEL: test86: 2592 ; AVX1: # %bb.0: # %entry 2593 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2594 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2595 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 2596 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 2597 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2598 ; AVX1-NEXT: retq 2599 ; 2600 ; AVX2-LABEL: test86: 2601 ; AVX2: # %bb.0: # %entry 2602 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2603 ; AVX2-NEXT: retq 2604 ; 2605 ; AVX512F-LABEL: test86: 2606 ; AVX512F: # %bb.0: # %entry 2607 ; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2608 ; AVX512F-NEXT: retq 2609 entry: 2610 %cmp = icmp ule <16 x i16> %a, %b 2611 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2612 ret <16 x i16> %sel 2613 } 2614 2615 define <16 x i16> @test87(<16 x i16> %a, <16 x i16> %b) { 2616 ; SSE2-LABEL: test87: 2617 ; SSE2: # %bb.0: # %entry 2618 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 2619 ; SSE2-NEXT: pxor %xmm4, %xmm2 2620 ; SSE2-NEXT: pxor %xmm4, %xmm0 2621 ; SSE2-NEXT: pminsw %xmm2, %xmm0 2622 ; SSE2-NEXT: pxor %xmm4, %xmm0 2623 ; SSE2-NEXT: pxor %xmm4, %xmm3 2624 ; SSE2-NEXT: pxor %xmm4, %xmm1 2625 ; SSE2-NEXT: pminsw %xmm3, %xmm1 2626 ; SSE2-NEXT: pxor %xmm4, %xmm1 2627 ; SSE2-NEXT: retq 2628 ; 2629 ; SSE4-LABEL: test87: 2630 ; SSE4: # %bb.0: # %entry 2631 ; SSE4-NEXT: pminuw %xmm2, %xmm0 2632 ; SSE4-NEXT: pminuw %xmm3, %xmm1 2633 ; SSE4-NEXT: retq 2634 ; 2635 ; AVX1-LABEL: test87: 2636 ; AVX1: # %bb.0: # %entry 2637 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2638 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2639 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 2640 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 2641 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2642 ; AVX1-NEXT: retq 2643 ; 2644 ; AVX2-LABEL: test87: 2645 ; AVX2: # %bb.0: # %entry 2646 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2647 ; AVX2-NEXT: retq 2648 ; 2649 ; AVX512F-LABEL: test87: 2650 ; AVX512F: # %bb.0: # %entry 2651 ; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2652 ; AVX512F-NEXT: retq 2653 entry: 2654 %cmp = icmp ugt <16 x i16> %a, %b 2655 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2656 ret <16 x i16> %sel 2657 } 2658 2659 define <16 x i16> @test88(<16 x i16> %a, <16 x i16> %b) { 2660 ; SSE2-LABEL: test88: 2661 ; SSE2: # %bb.0: # %entry 2662 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 2663 ; SSE2-NEXT: pxor %xmm4, %xmm2 2664 ; SSE2-NEXT: pxor %xmm4, %xmm0 2665 ; SSE2-NEXT: pminsw %xmm2, %xmm0 2666 ; SSE2-NEXT: pxor %xmm4, %xmm0 2667 ; SSE2-NEXT: pxor %xmm4, %xmm3 2668 ; SSE2-NEXT: pxor %xmm4, %xmm1 2669 ; SSE2-NEXT: pminsw %xmm3, %xmm1 2670 ; SSE2-NEXT: pxor %xmm4, %xmm1 2671 ; SSE2-NEXT: retq 2672 ; 2673 ; SSE4-LABEL: test88: 2674 ; SSE4: # %bb.0: # %entry 2675 ; SSE4-NEXT: pminuw %xmm2, %xmm0 2676 ; SSE4-NEXT: pminuw %xmm3, %xmm1 2677 ; SSE4-NEXT: retq 2678 ; 2679 ; AVX1-LABEL: test88: 2680 ; AVX1: # %bb.0: # %entry 2681 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2682 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2683 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 2684 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 2685 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2686 ; AVX1-NEXT: retq 2687 ; 2688 ; AVX2-LABEL: test88: 2689 ; AVX2: # %bb.0: # %entry 2690 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2691 ; AVX2-NEXT: retq 2692 ; 2693 ; AVX512F-LABEL: test88: 2694 ; AVX512F: # %bb.0: # %entry 2695 ; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2696 ; AVX512F-NEXT: retq 2697 entry: 2698 %cmp = icmp uge <16 x i16> %a, %b 2699 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2700 ret <16 x i16> %sel 2701 } 2702 2703 define <8 x i32> @test89(<8 x i32> %a, <8 x i32> %b) { 2704 ; SSE2-LABEL: test89: 2705 ; SSE2: # %bb.0: # %entry 2706 ; SSE2-NEXT: movdqa %xmm0, %xmm4 2707 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 2708 ; SSE2-NEXT: pand %xmm4, %xmm0 2709 ; SSE2-NEXT: pandn %xmm2, %xmm4 2710 ; SSE2-NEXT: por %xmm0, %xmm4 2711 ; SSE2-NEXT: movdqa %xmm1, %xmm2 2712 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2713 ; SSE2-NEXT: pand %xmm2, %xmm1 2714 ; SSE2-NEXT: pandn %xmm3, %xmm2 2715 ; SSE2-NEXT: por %xmm1, %xmm2 2716 ; SSE2-NEXT: movdqa %xmm4, %xmm0 2717 ; SSE2-NEXT: movdqa %xmm2, %xmm1 2718 ; SSE2-NEXT: retq 2719 ; 2720 ; SSE4-LABEL: test89: 2721 ; SSE4: # %bb.0: # %entry 2722 ; SSE4-NEXT: pmaxsd %xmm2, %xmm0 2723 ; SSE4-NEXT: pmaxsd %xmm3, %xmm1 2724 ; SSE4-NEXT: retq 2725 ; 2726 ; AVX1-LABEL: test89: 2727 ; AVX1: # %bb.0: # %entry 2728 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2729 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2730 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 2731 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2732 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2733 ; AVX1-NEXT: retq 2734 ; 2735 ; AVX2-LABEL: test89: 2736 ; AVX2: # %bb.0: # %entry 2737 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2738 ; AVX2-NEXT: retq 2739 ; 2740 ; AVX512F-LABEL: test89: 2741 ; AVX512F: # %bb.0: # %entry 2742 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2743 ; AVX512F-NEXT: retq 2744 entry: 2745 %cmp = icmp slt <8 x i32> %a, %b 2746 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2747 ret <8 x i32> %sel 2748 } 2749 2750 define <8 x i32> @test90(<8 x i32> %a, <8 x i32> %b) { 2751 ; SSE2-LABEL: test90: 2752 ; SSE2: # %bb.0: # %entry 2753 ; SSE2-NEXT: movdqa %xmm0, %xmm4 2754 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 2755 ; SSE2-NEXT: pand %xmm4, %xmm0 2756 ; SSE2-NEXT: pandn %xmm2, %xmm4 2757 ; SSE2-NEXT: por %xmm0, %xmm4 2758 ; SSE2-NEXT: movdqa %xmm1, %xmm2 2759 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2760 ; SSE2-NEXT: pand %xmm2, %xmm1 2761 ; SSE2-NEXT: pandn %xmm3, %xmm2 2762 ; SSE2-NEXT: por %xmm1, %xmm2 2763 ; SSE2-NEXT: movdqa %xmm4, %xmm0 2764 ; SSE2-NEXT: movdqa %xmm2, %xmm1 2765 ; SSE2-NEXT: retq 2766 ; 2767 ; SSE4-LABEL: test90: 2768 ; SSE4: # %bb.0: # %entry 2769 ; SSE4-NEXT: pmaxsd %xmm2, %xmm0 2770 ; SSE4-NEXT: pmaxsd %xmm3, %xmm1 2771 ; SSE4-NEXT: retq 2772 ; 2773 ; AVX1-LABEL: test90: 2774 ; AVX1: # %bb.0: # %entry 2775 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2776 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2777 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 2778 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2779 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2780 ; AVX1-NEXT: retq 2781 ; 2782 ; AVX2-LABEL: test90: 2783 ; AVX2: # %bb.0: # %entry 2784 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2785 ; AVX2-NEXT: retq 2786 ; 2787 ; AVX512F-LABEL: test90: 2788 ; AVX512F: # %bb.0: # %entry 2789 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2790 ; AVX512F-NEXT: retq 2791 entry: 2792 %cmp = icmp sle <8 x i32> %a, %b 2793 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2794 ret <8 x i32> %sel 2795 } 2796 2797 define <8 x i32> @test91(<8 x i32> %a, <8 x i32> %b) { 2798 ; SSE2-LABEL: test91: 2799 ; SSE2: # %bb.0: # %entry 2800 ; SSE2-NEXT: movdqa %xmm2, %xmm4 2801 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 2802 ; SSE2-NEXT: pand %xmm4, %xmm0 2803 ; SSE2-NEXT: pandn %xmm2, %xmm4 2804 ; SSE2-NEXT: por %xmm4, %xmm0 2805 ; SSE2-NEXT: movdqa %xmm3, %xmm2 2806 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 2807 ; SSE2-NEXT: pand %xmm2, %xmm1 2808 ; SSE2-NEXT: pandn %xmm3, %xmm2 2809 ; SSE2-NEXT: por %xmm2, %xmm1 2810 ; SSE2-NEXT: retq 2811 ; 2812 ; SSE4-LABEL: test91: 2813 ; SSE4: # %bb.0: # %entry 2814 ; SSE4-NEXT: pminsd %xmm2, %xmm0 2815 ; SSE4-NEXT: pminsd %xmm3, %xmm1 2816 ; SSE4-NEXT: retq 2817 ; 2818 ; AVX1-LABEL: test91: 2819 ; AVX1: # %bb.0: # %entry 2820 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2821 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2822 ; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 2823 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 2824 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2825 ; AVX1-NEXT: retq 2826 ; 2827 ; AVX2-LABEL: test91: 2828 ; AVX2: # %bb.0: # %entry 2829 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2830 ; AVX2-NEXT: retq 2831 ; 2832 ; AVX512F-LABEL: test91: 2833 ; AVX512F: # %bb.0: # %entry 2834 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2835 ; AVX512F-NEXT: retq 2836 entry: 2837 %cmp = icmp sgt <8 x i32> %a, %b 2838 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2839 ret <8 x i32> %sel 2840 } 2841 2842 define <8 x i32> @test92(<8 x i32> %a, <8 x i32> %b) { 2843 ; SSE2-LABEL: test92: 2844 ; SSE2: # %bb.0: # %entry 2845 ; SSE2-NEXT: movdqa %xmm2, %xmm4 2846 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 2847 ; SSE2-NEXT: pand %xmm4, %xmm0 2848 ; SSE2-NEXT: pandn %xmm2, %xmm4 2849 ; SSE2-NEXT: por %xmm4, %xmm0 2850 ; SSE2-NEXT: movdqa %xmm3, %xmm2 2851 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 2852 ; SSE2-NEXT: pand %xmm2, %xmm1 2853 ; SSE2-NEXT: pandn %xmm3, %xmm2 2854 ; SSE2-NEXT: por %xmm2, %xmm1 2855 ; SSE2-NEXT: retq 2856 ; 2857 ; SSE4-LABEL: test92: 2858 ; SSE4: # %bb.0: # %entry 2859 ; SSE4-NEXT: pminsd %xmm2, %xmm0 2860 ; SSE4-NEXT: pminsd %xmm3, %xmm1 2861 ; SSE4-NEXT: retq 2862 ; 2863 ; AVX1-LABEL: test92: 2864 ; AVX1: # %bb.0: # %entry 2865 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2866 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2867 ; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 2868 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 2869 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2870 ; AVX1-NEXT: retq 2871 ; 2872 ; AVX2-LABEL: test92: 2873 ; AVX2: # %bb.0: # %entry 2874 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2875 ; AVX2-NEXT: retq 2876 ; 2877 ; AVX512F-LABEL: test92: 2878 ; AVX512F: # %bb.0: # %entry 2879 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2880 ; AVX512F-NEXT: retq 2881 entry: 2882 %cmp = icmp sge <8 x i32> %a, %b 2883 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2884 ret <8 x i32> %sel 2885 } 2886 2887 define <8 x i32> @test93(<8 x i32> %a, <8 x i32> %b) { 2888 ; SSE2-LABEL: test93: 2889 ; SSE2: # %bb.0: # %entry 2890 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 2891 ; SSE2-NEXT: movdqa %xmm2, %xmm6 2892 ; SSE2-NEXT: pxor %xmm5, %xmm6 2893 ; SSE2-NEXT: movdqa %xmm0, %xmm4 2894 ; SSE2-NEXT: pxor %xmm5, %xmm4 2895 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 2896 ; SSE2-NEXT: pand %xmm4, %xmm0 2897 ; SSE2-NEXT: pandn %xmm2, %xmm4 2898 ; SSE2-NEXT: por %xmm0, %xmm4 2899 ; SSE2-NEXT: movdqa %xmm3, %xmm0 2900 ; SSE2-NEXT: pxor %xmm5, %xmm0 2901 ; SSE2-NEXT: pxor %xmm1, %xmm5 2902 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 2903 ; SSE2-NEXT: pand %xmm5, %xmm1 2904 ; SSE2-NEXT: pandn %xmm3, %xmm5 2905 ; SSE2-NEXT: por %xmm5, %xmm1 2906 ; SSE2-NEXT: movdqa %xmm4, %xmm0 2907 ; SSE2-NEXT: retq 2908 ; 2909 ; SSE4-LABEL: test93: 2910 ; SSE4: # %bb.0: # %entry 2911 ; SSE4-NEXT: pmaxud %xmm2, %xmm0 2912 ; SSE4-NEXT: pmaxud %xmm3, %xmm1 2913 ; SSE4-NEXT: retq 2914 ; 2915 ; AVX1-LABEL: test93: 2916 ; AVX1: # %bb.0: # %entry 2917 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2918 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2919 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 2920 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 2921 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2922 ; AVX1-NEXT: retq 2923 ; 2924 ; AVX2-LABEL: test93: 2925 ; AVX2: # %bb.0: # %entry 2926 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 2927 ; AVX2-NEXT: retq 2928 ; 2929 ; AVX512F-LABEL: test93: 2930 ; AVX512F: # %bb.0: # %entry 2931 ; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 2932 ; AVX512F-NEXT: retq 2933 entry: 2934 %cmp = icmp ult <8 x i32> %a, %b 2935 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2936 ret <8 x i32> %sel 2937 } 2938 2939 define <8 x i32> @test94(<8 x i32> %a, <8 x i32> %b) { 2940 ; SSE2-LABEL: test94: 2941 ; SSE2: # %bb.0: # %entry 2942 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 2943 ; SSE2-NEXT: movdqa %xmm2, %xmm6 2944 ; SSE2-NEXT: pxor %xmm5, %xmm6 2945 ; SSE2-NEXT: movdqa %xmm0, %xmm4 2946 ; SSE2-NEXT: pxor %xmm5, %xmm4 2947 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 2948 ; SSE2-NEXT: pand %xmm4, %xmm0 2949 ; SSE2-NEXT: pandn %xmm2, %xmm4 2950 ; SSE2-NEXT: por %xmm0, %xmm4 2951 ; SSE2-NEXT: movdqa %xmm3, %xmm0 2952 ; SSE2-NEXT: pxor %xmm5, %xmm0 2953 ; SSE2-NEXT: pxor %xmm1, %xmm5 2954 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 2955 ; SSE2-NEXT: pand %xmm5, %xmm1 2956 ; SSE2-NEXT: pandn %xmm3, %xmm5 2957 ; SSE2-NEXT: por %xmm5, %xmm1 2958 ; SSE2-NEXT: movdqa %xmm4, %xmm0 2959 ; SSE2-NEXT: retq 2960 ; 2961 ; SSE4-LABEL: test94: 2962 ; SSE4: # %bb.0: # %entry 2963 ; SSE4-NEXT: pmaxud %xmm2, %xmm0 2964 ; SSE4-NEXT: pmaxud %xmm3, %xmm1 2965 ; SSE4-NEXT: retq 2966 ; 2967 ; AVX1-LABEL: test94: 2968 ; AVX1: # %bb.0: # %entry 2969 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2970 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2971 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 2972 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 2973 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2974 ; AVX1-NEXT: retq 2975 ; 2976 ; AVX2-LABEL: test94: 2977 ; AVX2: # %bb.0: # %entry 2978 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 2979 ; AVX2-NEXT: retq 2980 ; 2981 ; AVX512F-LABEL: test94: 2982 ; AVX512F: # %bb.0: # %entry 2983 ; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 2984 ; AVX512F-NEXT: retq 2985 entry: 2986 %cmp = icmp ule <8 x i32> %a, %b 2987 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2988 ret <8 x i32> %sel 2989 } 2990 2991 define <8 x i32> @test95(<8 x i32> %a, <8 x i32> %b) { 2992 ; SSE2-LABEL: test95: 2993 ; SSE2: # %bb.0: # %entry 2994 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 2995 ; SSE2-NEXT: movdqa %xmm0, %xmm5 2996 ; SSE2-NEXT: pxor %xmm4, %xmm5 2997 ; SSE2-NEXT: movdqa %xmm2, %xmm6 2998 ; SSE2-NEXT: pxor %xmm4, %xmm6 2999 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 3000 ; SSE2-NEXT: pand %xmm6, %xmm0 3001 ; SSE2-NEXT: pandn %xmm2, %xmm6 3002 ; SSE2-NEXT: por %xmm6, %xmm0 3003 ; SSE2-NEXT: movdqa %xmm1, %xmm2 3004 ; SSE2-NEXT: pxor %xmm4, %xmm2 3005 ; SSE2-NEXT: pxor %xmm3, %xmm4 3006 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 3007 ; SSE2-NEXT: pand %xmm4, %xmm1 3008 ; SSE2-NEXT: pandn %xmm3, %xmm4 3009 ; SSE2-NEXT: por %xmm4, %xmm1 3010 ; SSE2-NEXT: retq 3011 ; 3012 ; SSE4-LABEL: test95: 3013 ; SSE4: # %bb.0: # %entry 3014 ; SSE4-NEXT: pminud %xmm2, %xmm0 3015 ; SSE4-NEXT: pminud %xmm3, %xmm1 3016 ; SSE4-NEXT: retq 3017 ; 3018 ; AVX1-LABEL: test95: 3019 ; AVX1: # %bb.0: # %entry 3020 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3021 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3022 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 3023 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 3024 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3025 ; AVX1-NEXT: retq 3026 ; 3027 ; AVX2-LABEL: test95: 3028 ; AVX2: # %bb.0: # %entry 3029 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 3030 ; AVX2-NEXT: retq 3031 ; 3032 ; AVX512F-LABEL: test95: 3033 ; AVX512F: # %bb.0: # %entry 3034 ; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0 3035 ; AVX512F-NEXT: retq 3036 entry: 3037 %cmp = icmp ugt <8 x i32> %a, %b 3038 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3039 ret <8 x i32> %sel 3040 } 3041 3042 define <8 x i32> @test96(<8 x i32> %a, <8 x i32> %b) { 3043 ; SSE2-LABEL: test96: 3044 ; SSE2: # %bb.0: # %entry 3045 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 3046 ; SSE2-NEXT: movdqa %xmm0, %xmm5 3047 ; SSE2-NEXT: pxor %xmm4, %xmm5 3048 ; SSE2-NEXT: movdqa %xmm2, %xmm6 3049 ; SSE2-NEXT: pxor %xmm4, %xmm6 3050 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 3051 ; SSE2-NEXT: pand %xmm6, %xmm0 3052 ; SSE2-NEXT: pandn %xmm2, %xmm6 3053 ; SSE2-NEXT: por %xmm6, %xmm0 3054 ; SSE2-NEXT: movdqa %xmm1, %xmm2 3055 ; SSE2-NEXT: pxor %xmm4, %xmm2 3056 ; SSE2-NEXT: pxor %xmm3, %xmm4 3057 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 3058 ; SSE2-NEXT: pand %xmm4, %xmm1 3059 ; SSE2-NEXT: pandn %xmm3, %xmm4 3060 ; SSE2-NEXT: por %xmm4, %xmm1 3061 ; SSE2-NEXT: retq 3062 ; 3063 ; SSE4-LABEL: test96: 3064 ; SSE4: # %bb.0: # %entry 3065 ; SSE4-NEXT: pminud %xmm2, %xmm0 3066 ; SSE4-NEXT: pminud %xmm3, %xmm1 3067 ; SSE4-NEXT: retq 3068 ; 3069 ; AVX1-LABEL: test96: 3070 ; AVX1: # %bb.0: # %entry 3071 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3072 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3073 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 3074 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 3075 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3076 ; AVX1-NEXT: retq 3077 ; 3078 ; AVX2-LABEL: test96: 3079 ; AVX2: # %bb.0: # %entry 3080 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 3081 ; AVX2-NEXT: retq 3082 ; 3083 ; AVX512F-LABEL: test96: 3084 ; AVX512F: # %bb.0: # %entry 3085 ; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0 3086 ; AVX512F-NEXT: retq 3087 entry: 3088 %cmp = icmp uge <8 x i32> %a, %b 3089 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3090 ret <8 x i32> %sel 3091 } 3092 3093 ; ---------------------------- 3094 3095 define <64 x i8> @test97(<64 x i8> %a, <64 x i8> %b) { 3096 ; SSE2-LABEL: test97: 3097 ; SSE2: # %bb.0: # %entry 3098 ; SSE2-NEXT: movdqa %xmm4, %xmm8 3099 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm8 3100 ; SSE2-NEXT: pand %xmm8, %xmm0 3101 ; SSE2-NEXT: pandn %xmm4, %xmm8 3102 ; SSE2-NEXT: por %xmm8, %xmm0 3103 ; SSE2-NEXT: movdqa %xmm5, %xmm4 3104 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 3105 ; SSE2-NEXT: pand %xmm4, %xmm1 3106 ; SSE2-NEXT: pandn %xmm5, %xmm4 3107 ; SSE2-NEXT: por %xmm4, %xmm1 3108 ; SSE2-NEXT: movdqa %xmm6, %xmm4 3109 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 3110 ; SSE2-NEXT: pand %xmm4, %xmm2 3111 ; SSE2-NEXT: pandn %xmm6, %xmm4 3112 ; SSE2-NEXT: por %xmm4, %xmm2 3113 ; SSE2-NEXT: movdqa %xmm7, %xmm4 3114 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 3115 ; SSE2-NEXT: pand %xmm4, %xmm3 3116 ; SSE2-NEXT: pandn %xmm7, %xmm4 3117 ; SSE2-NEXT: por %xmm4, %xmm3 3118 ; SSE2-NEXT: retq 3119 ; 3120 ; SSE4-LABEL: test97: 3121 ; SSE4: # %bb.0: # %entry 3122 ; SSE4-NEXT: pminsb %xmm4, %xmm0 3123 ; SSE4-NEXT: pminsb %xmm5, %xmm1 3124 ; SSE4-NEXT: pminsb %xmm6, %xmm2 3125 ; SSE4-NEXT: pminsb %xmm7, %xmm3 3126 ; SSE4-NEXT: retq 3127 ; 3128 ; AVX1-LABEL: test97: 3129 ; AVX1: # %bb.0: # %entry 3130 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3131 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3132 ; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 3133 ; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 3134 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3135 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3136 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3137 ; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 3138 ; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 3139 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3140 ; AVX1-NEXT: retq 3141 ; 3142 ; AVX2-LABEL: test97: 3143 ; AVX2: # %bb.0: # %entry 3144 ; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 3145 ; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 3146 ; AVX2-NEXT: retq 3147 ; 3148 ; AVX512BW-LABEL: test97: 3149 ; AVX512BW: # %bb.0: # %entry 3150 ; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 3151 ; AVX512BW-NEXT: retq 3152 entry: 3153 %cmp = icmp slt <64 x i8> %a, %b 3154 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3155 ret <64 x i8> %sel 3156 } 3157 3158 define <64 x i8> @test98(<64 x i8> %a, <64 x i8> %b) { 3159 ; SSE2-LABEL: test98: 3160 ; SSE2: # %bb.0: # %entry 3161 ; SSE2-NEXT: movdqa %xmm4, %xmm8 3162 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm8 3163 ; SSE2-NEXT: pand %xmm8, %xmm0 3164 ; SSE2-NEXT: pandn %xmm4, %xmm8 3165 ; SSE2-NEXT: por %xmm8, %xmm0 3166 ; SSE2-NEXT: movdqa %xmm5, %xmm4 3167 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 3168 ; SSE2-NEXT: pand %xmm4, %xmm1 3169 ; SSE2-NEXT: pandn %xmm5, %xmm4 3170 ; SSE2-NEXT: por %xmm4, %xmm1 3171 ; SSE2-NEXT: movdqa %xmm6, %xmm4 3172 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 3173 ; SSE2-NEXT: pand %xmm4, %xmm2 3174 ; SSE2-NEXT: pandn %xmm6, %xmm4 3175 ; SSE2-NEXT: por %xmm4, %xmm2 3176 ; SSE2-NEXT: movdqa %xmm7, %xmm4 3177 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 3178 ; SSE2-NEXT: pand %xmm4, %xmm3 3179 ; SSE2-NEXT: pandn %xmm7, %xmm4 3180 ; SSE2-NEXT: por %xmm4, %xmm3 3181 ; SSE2-NEXT: retq 3182 ; 3183 ; SSE4-LABEL: test98: 3184 ; SSE4: # %bb.0: # %entry 3185 ; SSE4-NEXT: pminsb %xmm4, %xmm0 3186 ; SSE4-NEXT: pminsb %xmm5, %xmm1 3187 ; SSE4-NEXT: pminsb %xmm6, %xmm2 3188 ; SSE4-NEXT: pminsb %xmm7, %xmm3 3189 ; SSE4-NEXT: retq 3190 ; 3191 ; AVX1-LABEL: test98: 3192 ; AVX1: # %bb.0: # %entry 3193 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3194 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3195 ; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 3196 ; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 3197 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3198 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3199 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3200 ; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 3201 ; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 3202 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3203 ; AVX1-NEXT: retq 3204 ; 3205 ; AVX2-LABEL: test98: 3206 ; AVX2: # %bb.0: # %entry 3207 ; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 3208 ; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 3209 ; AVX2-NEXT: retq 3210 ; 3211 ; AVX512BW-LABEL: test98: 3212 ; AVX512BW: # %bb.0: # %entry 3213 ; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 3214 ; AVX512BW-NEXT: retq 3215 entry: 3216 %cmp = icmp sle <64 x i8> %a, %b 3217 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3218 ret <64 x i8> %sel 3219 } 3220 3221 define <64 x i8> @test99(<64 x i8> %a, <64 x i8> %b) { 3222 ; SSE2-LABEL: test99: 3223 ; SSE2: # %bb.0: # %entry 3224 ; SSE2-NEXT: movdqa %xmm0, %xmm8 3225 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm8 3226 ; SSE2-NEXT: pand %xmm8, %xmm0 3227 ; SSE2-NEXT: pandn %xmm4, %xmm8 3228 ; SSE2-NEXT: por %xmm0, %xmm8 3229 ; SSE2-NEXT: movdqa %xmm1, %xmm4 3230 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm4 3231 ; SSE2-NEXT: pand %xmm4, %xmm1 3232 ; SSE2-NEXT: pandn %xmm5, %xmm4 3233 ; SSE2-NEXT: por %xmm1, %xmm4 3234 ; SSE2-NEXT: movdqa %xmm2, %xmm5 3235 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm5 3236 ; SSE2-NEXT: pand %xmm5, %xmm2 3237 ; SSE2-NEXT: pandn %xmm6, %xmm5 3238 ; SSE2-NEXT: por %xmm2, %xmm5 3239 ; SSE2-NEXT: movdqa %xmm3, %xmm6 3240 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm6 3241 ; SSE2-NEXT: pand %xmm6, %xmm3 3242 ; SSE2-NEXT: pandn %xmm7, %xmm6 3243 ; SSE2-NEXT: por %xmm3, %xmm6 3244 ; SSE2-NEXT: movdqa %xmm8, %xmm0 3245 ; SSE2-NEXT: movdqa %xmm4, %xmm1 3246 ; SSE2-NEXT: movdqa %xmm5, %xmm2 3247 ; SSE2-NEXT: movdqa %xmm6, %xmm3 3248 ; SSE2-NEXT: retq 3249 ; 3250 ; SSE4-LABEL: test99: 3251 ; SSE4: # %bb.0: # %entry 3252 ; SSE4-NEXT: pmaxsb %xmm4, %xmm0 3253 ; SSE4-NEXT: pmaxsb %xmm5, %xmm1 3254 ; SSE4-NEXT: pmaxsb %xmm6, %xmm2 3255 ; SSE4-NEXT: pmaxsb %xmm7, %xmm3 3256 ; SSE4-NEXT: retq 3257 ; 3258 ; AVX1-LABEL: test99: 3259 ; AVX1: # %bb.0: # %entry 3260 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3261 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3262 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 3263 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 3264 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3265 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3266 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3267 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 3268 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 3269 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3270 ; AVX1-NEXT: retq 3271 ; 3272 ; AVX2-LABEL: test99: 3273 ; AVX2: # %bb.0: # %entry 3274 ; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 3275 ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 3276 ; AVX2-NEXT: retq 3277 ; 3278 ; AVX512BW-LABEL: test99: 3279 ; AVX512BW: # %bb.0: # %entry 3280 ; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 3281 ; AVX512BW-NEXT: retq 3282 entry: 3283 %cmp = icmp sgt <64 x i8> %a, %b 3284 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3285 ret <64 x i8> %sel 3286 } 3287 3288 define <64 x i8> @test100(<64 x i8> %a, <64 x i8> %b) { 3289 ; SSE2-LABEL: test100: 3290 ; SSE2: # %bb.0: # %entry 3291 ; SSE2-NEXT: movdqa %xmm0, %xmm8 3292 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm8 3293 ; SSE2-NEXT: pand %xmm8, %xmm0 3294 ; SSE2-NEXT: pandn %xmm4, %xmm8 3295 ; SSE2-NEXT: por %xmm0, %xmm8 3296 ; SSE2-NEXT: movdqa %xmm1, %xmm4 3297 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm4 3298 ; SSE2-NEXT: pand %xmm4, %xmm1 3299 ; SSE2-NEXT: pandn %xmm5, %xmm4 3300 ; SSE2-NEXT: por %xmm1, %xmm4 3301 ; SSE2-NEXT: movdqa %xmm2, %xmm5 3302 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm5 3303 ; SSE2-NEXT: pand %xmm5, %xmm2 3304 ; SSE2-NEXT: pandn %xmm6, %xmm5 3305 ; SSE2-NEXT: por %xmm2, %xmm5 3306 ; SSE2-NEXT: movdqa %xmm3, %xmm6 3307 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm6 3308 ; SSE2-NEXT: pand %xmm6, %xmm3 3309 ; SSE2-NEXT: pandn %xmm7, %xmm6 3310 ; SSE2-NEXT: por %xmm3, %xmm6 3311 ; SSE2-NEXT: movdqa %xmm8, %xmm0 3312 ; SSE2-NEXT: movdqa %xmm4, %xmm1 3313 ; SSE2-NEXT: movdqa %xmm5, %xmm2 3314 ; SSE2-NEXT: movdqa %xmm6, %xmm3 3315 ; SSE2-NEXT: retq 3316 ; 3317 ; SSE4-LABEL: test100: 3318 ; SSE4: # %bb.0: # %entry 3319 ; SSE4-NEXT: pmaxsb %xmm4, %xmm0 3320 ; SSE4-NEXT: pmaxsb %xmm5, %xmm1 3321 ; SSE4-NEXT: pmaxsb %xmm6, %xmm2 3322 ; SSE4-NEXT: pmaxsb %xmm7, %xmm3 3323 ; SSE4-NEXT: retq 3324 ; 3325 ; AVX1-LABEL: test100: 3326 ; AVX1: # %bb.0: # %entry 3327 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3328 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3329 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 3330 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 3331 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3332 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3333 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3334 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 3335 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 3336 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3337 ; AVX1-NEXT: retq 3338 ; 3339 ; AVX2-LABEL: test100: 3340 ; AVX2: # %bb.0: # %entry 3341 ; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 3342 ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 3343 ; AVX2-NEXT: retq 3344 ; 3345 ; AVX512BW-LABEL: test100: 3346 ; AVX512BW: # %bb.0: # %entry 3347 ; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 3348 ; AVX512BW-NEXT: retq 3349 entry: 3350 %cmp = icmp sge <64 x i8> %a, %b 3351 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3352 ret <64 x i8> %sel 3353 } 3354 3355 define <64 x i8> @test101(<64 x i8> %a, <64 x i8> %b) { 3356 ; SSE-LABEL: test101: 3357 ; SSE: # %bb.0: # %entry 3358 ; SSE-NEXT: pminub %xmm4, %xmm0 3359 ; SSE-NEXT: pminub %xmm5, %xmm1 3360 ; SSE-NEXT: pminub %xmm6, %xmm2 3361 ; SSE-NEXT: pminub %xmm7, %xmm3 3362 ; SSE-NEXT: retq 3363 ; 3364 ; AVX1-LABEL: test101: 3365 ; AVX1: # %bb.0: # %entry 3366 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3367 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3368 ; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 3369 ; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 3370 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3371 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3372 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3373 ; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 3374 ; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 3375 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3376 ; AVX1-NEXT: retq 3377 ; 3378 ; AVX2-LABEL: test101: 3379 ; AVX2: # %bb.0: # %entry 3380 ; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 3381 ; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 3382 ; AVX2-NEXT: retq 3383 ; 3384 ; AVX512BW-LABEL: test101: 3385 ; AVX512BW: # %bb.0: # %entry 3386 ; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 3387 ; AVX512BW-NEXT: retq 3388 entry: 3389 %cmp = icmp ult <64 x i8> %a, %b 3390 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3391 ret <64 x i8> %sel 3392 } 3393 3394 define <64 x i8> @test102(<64 x i8> %a, <64 x i8> %b) { 3395 ; SSE-LABEL: test102: 3396 ; SSE: # %bb.0: # %entry 3397 ; SSE-NEXT: pminub %xmm4, %xmm0 3398 ; SSE-NEXT: pminub %xmm5, %xmm1 3399 ; SSE-NEXT: pminub %xmm6, %xmm2 3400 ; SSE-NEXT: pminub %xmm7, %xmm3 3401 ; SSE-NEXT: retq 3402 ; 3403 ; AVX1-LABEL: test102: 3404 ; AVX1: # %bb.0: # %entry 3405 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3406 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3407 ; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 3408 ; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 3409 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3410 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3411 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3412 ; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 3413 ; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 3414 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3415 ; AVX1-NEXT: retq 3416 ; 3417 ; AVX2-LABEL: test102: 3418 ; AVX2: # %bb.0: # %entry 3419 ; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 3420 ; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 3421 ; AVX2-NEXT: retq 3422 ; 3423 ; AVX512BW-LABEL: test102: 3424 ; AVX512BW: # %bb.0: # %entry 3425 ; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 3426 ; AVX512BW-NEXT: retq 3427 entry: 3428 %cmp = icmp ule <64 x i8> %a, %b 3429 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3430 ret <64 x i8> %sel 3431 } 3432 3433 define <64 x i8> @test103(<64 x i8> %a, <64 x i8> %b) { 3434 ; SSE-LABEL: test103: 3435 ; SSE: # %bb.0: # %entry 3436 ; SSE-NEXT: pmaxub %xmm4, %xmm0 3437 ; SSE-NEXT: pmaxub %xmm5, %xmm1 3438 ; SSE-NEXT: pmaxub %xmm6, %xmm2 3439 ; SSE-NEXT: pmaxub %xmm7, %xmm3 3440 ; SSE-NEXT: retq 3441 ; 3442 ; AVX1-LABEL: test103: 3443 ; AVX1: # %bb.0: # %entry 3444 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3445 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3446 ; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 3447 ; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 3448 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3449 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3450 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3451 ; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 3452 ; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 3453 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3454 ; AVX1-NEXT: retq 3455 ; 3456 ; AVX2-LABEL: test103: 3457 ; AVX2: # %bb.0: # %entry 3458 ; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 3459 ; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 3460 ; AVX2-NEXT: retq 3461 ; 3462 ; AVX512BW-LABEL: test103: 3463 ; AVX512BW: # %bb.0: # %entry 3464 ; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 3465 ; AVX512BW-NEXT: retq 3466 entry: 3467 %cmp = icmp ugt <64 x i8> %a, %b 3468 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3469 ret <64 x i8> %sel 3470 } 3471 3472 define <64 x i8> @test104(<64 x i8> %a, <64 x i8> %b) { 3473 ; SSE-LABEL: test104: 3474 ; SSE: # %bb.0: # %entry 3475 ; SSE-NEXT: pmaxub %xmm4, %xmm0 3476 ; SSE-NEXT: pmaxub %xmm5, %xmm1 3477 ; SSE-NEXT: pmaxub %xmm6, %xmm2 3478 ; SSE-NEXT: pmaxub %xmm7, %xmm3 3479 ; SSE-NEXT: retq 3480 ; 3481 ; AVX1-LABEL: test104: 3482 ; AVX1: # %bb.0: # %entry 3483 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3484 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3485 ; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 3486 ; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 3487 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3488 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3489 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3490 ; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 3491 ; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 3492 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3493 ; AVX1-NEXT: retq 3494 ; 3495 ; AVX2-LABEL: test104: 3496 ; AVX2: # %bb.0: # %entry 3497 ; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 3498 ; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 3499 ; AVX2-NEXT: retq 3500 ; 3501 ; AVX512BW-LABEL: test104: 3502 ; AVX512BW: # %bb.0: # %entry 3503 ; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 3504 ; AVX512BW-NEXT: retq 3505 entry: 3506 %cmp = icmp uge <64 x i8> %a, %b 3507 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3508 ret <64 x i8> %sel 3509 } 3510 3511 define <32 x i16> @test105(<32 x i16> %a, <32 x i16> %b) { 3512 ; SSE-LABEL: test105: 3513 ; SSE: # %bb.0: # %entry 3514 ; SSE-NEXT: pminsw %xmm4, %xmm0 3515 ; SSE-NEXT: pminsw %xmm5, %xmm1 3516 ; SSE-NEXT: pminsw %xmm6, %xmm2 3517 ; SSE-NEXT: pminsw %xmm7, %xmm3 3518 ; SSE-NEXT: retq 3519 ; 3520 ; AVX1-LABEL: test105: 3521 ; AVX1: # %bb.0: # %entry 3522 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3523 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3524 ; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 3525 ; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 3526 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3527 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3528 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3529 ; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 3530 ; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 3531 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3532 ; AVX1-NEXT: retq 3533 ; 3534 ; AVX2-LABEL: test105: 3535 ; AVX2: # %bb.0: # %entry 3536 ; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 3537 ; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 3538 ; AVX2-NEXT: retq 3539 ; 3540 ; AVX512BW-LABEL: test105: 3541 ; AVX512BW: # %bb.0: # %entry 3542 ; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 3543 ; AVX512BW-NEXT: retq 3544 entry: 3545 %cmp = icmp slt <32 x i16> %a, %b 3546 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3547 ret <32 x i16> %sel 3548 } 3549 3550 define <32 x i16> @test106(<32 x i16> %a, <32 x i16> %b) { 3551 ; SSE-LABEL: test106: 3552 ; SSE: # %bb.0: # %entry 3553 ; SSE-NEXT: pminsw %xmm4, %xmm0 3554 ; SSE-NEXT: pminsw %xmm5, %xmm1 3555 ; SSE-NEXT: pminsw %xmm6, %xmm2 3556 ; SSE-NEXT: pminsw %xmm7, %xmm3 3557 ; SSE-NEXT: retq 3558 ; 3559 ; AVX1-LABEL: test106: 3560 ; AVX1: # %bb.0: # %entry 3561 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3562 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3563 ; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 3564 ; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 3565 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3566 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3567 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3568 ; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 3569 ; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 3570 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3571 ; AVX1-NEXT: retq 3572 ; 3573 ; AVX2-LABEL: test106: 3574 ; AVX2: # %bb.0: # %entry 3575 ; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 3576 ; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 3577 ; AVX2-NEXT: retq 3578 ; 3579 ; AVX512BW-LABEL: test106: 3580 ; AVX512BW: # %bb.0: # %entry 3581 ; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 3582 ; AVX512BW-NEXT: retq 3583 entry: 3584 %cmp = icmp sle <32 x i16> %a, %b 3585 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3586 ret <32 x i16> %sel 3587 } 3588 3589 define <32 x i16> @test107(<32 x i16> %a, <32 x i16> %b) { 3590 ; SSE-LABEL: test107: 3591 ; SSE: # %bb.0: # %entry 3592 ; SSE-NEXT: pmaxsw %xmm4, %xmm0 3593 ; SSE-NEXT: pmaxsw %xmm5, %xmm1 3594 ; SSE-NEXT: pmaxsw %xmm6, %xmm2 3595 ; SSE-NEXT: pmaxsw %xmm7, %xmm3 3596 ; SSE-NEXT: retq 3597 ; 3598 ; AVX1-LABEL: test107: 3599 ; AVX1: # %bb.0: # %entry 3600 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3601 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3602 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 3603 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 3604 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3605 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3606 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3607 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 3608 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 3609 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3610 ; AVX1-NEXT: retq 3611 ; 3612 ; AVX2-LABEL: test107: 3613 ; AVX2: # %bb.0: # %entry 3614 ; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 3615 ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 3616 ; AVX2-NEXT: retq 3617 ; 3618 ; AVX512BW-LABEL: test107: 3619 ; AVX512BW: # %bb.0: # %entry 3620 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 3621 ; AVX512BW-NEXT: retq 3622 entry: 3623 %cmp = icmp sgt <32 x i16> %a, %b 3624 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3625 ret <32 x i16> %sel 3626 } 3627 3628 define <32 x i16> @test108(<32 x i16> %a, <32 x i16> %b) { 3629 ; SSE-LABEL: test108: 3630 ; SSE: # %bb.0: # %entry 3631 ; SSE-NEXT: pmaxsw %xmm4, %xmm0 3632 ; SSE-NEXT: pmaxsw %xmm5, %xmm1 3633 ; SSE-NEXT: pmaxsw %xmm6, %xmm2 3634 ; SSE-NEXT: pmaxsw %xmm7, %xmm3 3635 ; SSE-NEXT: retq 3636 ; 3637 ; AVX1-LABEL: test108: 3638 ; AVX1: # %bb.0: # %entry 3639 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3640 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3641 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 3642 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 3643 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3644 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3645 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3646 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 3647 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 3648 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3649 ; AVX1-NEXT: retq 3650 ; 3651 ; AVX2-LABEL: test108: 3652 ; AVX2: # %bb.0: # %entry 3653 ; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 3654 ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 3655 ; AVX2-NEXT: retq 3656 ; 3657 ; AVX512BW-LABEL: test108: 3658 ; AVX512BW: # %bb.0: # %entry 3659 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 3660 ; AVX512BW-NEXT: retq 3661 entry: 3662 %cmp = icmp sge <32 x i16> %a, %b 3663 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3664 ret <32 x i16> %sel 3665 } 3666 3667 define <32 x i16> @test109(<32 x i16> %a, <32 x i16> %b) { 3668 ; SSE2-LABEL: test109: 3669 ; SSE2: # %bb.0: # %entry 3670 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768] 3671 ; SSE2-NEXT: pxor %xmm8, %xmm4 3672 ; SSE2-NEXT: pxor %xmm8, %xmm0 3673 ; SSE2-NEXT: pminsw %xmm4, %xmm0 3674 ; SSE2-NEXT: pxor %xmm8, %xmm0 3675 ; SSE2-NEXT: pxor %xmm8, %xmm5 3676 ; SSE2-NEXT: pxor %xmm8, %xmm1 3677 ; SSE2-NEXT: pminsw %xmm5, %xmm1 3678 ; SSE2-NEXT: pxor %xmm8, %xmm1 3679 ; SSE2-NEXT: pxor %xmm8, %xmm6 3680 ; SSE2-NEXT: pxor %xmm8, %xmm2 3681 ; SSE2-NEXT: pminsw %xmm6, %xmm2 3682 ; SSE2-NEXT: pxor %xmm8, %xmm2 3683 ; SSE2-NEXT: pxor %xmm8, %xmm7 3684 ; SSE2-NEXT: pxor %xmm8, %xmm3 3685 ; SSE2-NEXT: pminsw %xmm7, %xmm3 3686 ; SSE2-NEXT: pxor %xmm8, %xmm3 3687 ; SSE2-NEXT: retq 3688 ; 3689 ; SSE4-LABEL: test109: 3690 ; SSE4: # %bb.0: # %entry 3691 ; SSE4-NEXT: pminuw %xmm4, %xmm0 3692 ; SSE4-NEXT: pminuw %xmm5, %xmm1 3693 ; SSE4-NEXT: pminuw %xmm6, %xmm2 3694 ; SSE4-NEXT: pminuw %xmm7, %xmm3 3695 ; SSE4-NEXT: retq 3696 ; 3697 ; AVX1-LABEL: test109: 3698 ; AVX1: # %bb.0: # %entry 3699 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3700 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3701 ; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 3702 ; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 3703 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3704 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3705 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3706 ; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 3707 ; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 3708 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3709 ; AVX1-NEXT: retq 3710 ; 3711 ; AVX2-LABEL: test109: 3712 ; AVX2: # %bb.0: # %entry 3713 ; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 3714 ; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 3715 ; AVX2-NEXT: retq 3716 ; 3717 ; AVX512BW-LABEL: test109: 3718 ; AVX512BW: # %bb.0: # %entry 3719 ; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 3720 ; AVX512BW-NEXT: retq 3721 entry: 3722 %cmp = icmp ult <32 x i16> %a, %b 3723 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3724 ret <32 x i16> %sel 3725 } 3726 3727 define <32 x i16> @test110(<32 x i16> %a, <32 x i16> %b) { 3728 ; SSE2-LABEL: test110: 3729 ; SSE2: # %bb.0: # %entry 3730 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768] 3731 ; SSE2-NEXT: pxor %xmm8, %xmm4 3732 ; SSE2-NEXT: pxor %xmm8, %xmm0 3733 ; SSE2-NEXT: pminsw %xmm4, %xmm0 3734 ; SSE2-NEXT: pxor %xmm8, %xmm0 3735 ; SSE2-NEXT: pxor %xmm8, %xmm5 3736 ; SSE2-NEXT: pxor %xmm8, %xmm1 3737 ; SSE2-NEXT: pminsw %xmm5, %xmm1 3738 ; SSE2-NEXT: pxor %xmm8, %xmm1 3739 ; SSE2-NEXT: pxor %xmm8, %xmm6 3740 ; SSE2-NEXT: pxor %xmm8, %xmm2 3741 ; SSE2-NEXT: pminsw %xmm6, %xmm2 3742 ; SSE2-NEXT: pxor %xmm8, %xmm2 3743 ; SSE2-NEXT: pxor %xmm8, %xmm7 3744 ; SSE2-NEXT: pxor %xmm8, %xmm3 3745 ; SSE2-NEXT: pminsw %xmm7, %xmm3 3746 ; SSE2-NEXT: pxor %xmm8, %xmm3 3747 ; SSE2-NEXT: retq 3748 ; 3749 ; SSE4-LABEL: test110: 3750 ; SSE4: # %bb.0: # %entry 3751 ; SSE4-NEXT: pminuw %xmm4, %xmm0 3752 ; SSE4-NEXT: pminuw %xmm5, %xmm1 3753 ; SSE4-NEXT: pminuw %xmm6, %xmm2 3754 ; SSE4-NEXT: pminuw %xmm7, %xmm3 3755 ; SSE4-NEXT: retq 3756 ; 3757 ; AVX1-LABEL: test110: 3758 ; AVX1: # %bb.0: # %entry 3759 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3760 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3761 ; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 3762 ; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 3763 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3764 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3765 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3766 ; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 3767 ; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 3768 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3769 ; AVX1-NEXT: retq 3770 ; 3771 ; AVX2-LABEL: test110: 3772 ; AVX2: # %bb.0: # %entry 3773 ; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 3774 ; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 3775 ; AVX2-NEXT: retq 3776 ; 3777 ; AVX512BW-LABEL: test110: 3778 ; AVX512BW: # %bb.0: # %entry 3779 ; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 3780 ; AVX512BW-NEXT: retq 3781 entry: 3782 %cmp = icmp ule <32 x i16> %a, %b 3783 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3784 ret <32 x i16> %sel 3785 } 3786 3787 define <32 x i16> @test111(<32 x i16> %a, <32 x i16> %b) { 3788 ; SSE2-LABEL: test111: 3789 ; SSE2: # %bb.0: # %entry 3790 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768] 3791 ; SSE2-NEXT: pxor %xmm8, %xmm4 3792 ; SSE2-NEXT: pxor %xmm8, %xmm0 3793 ; SSE2-NEXT: pmaxsw %xmm4, %xmm0 3794 ; SSE2-NEXT: pxor %xmm8, %xmm0 3795 ; SSE2-NEXT: pxor %xmm8, %xmm5 3796 ; SSE2-NEXT: pxor %xmm8, %xmm1 3797 ; SSE2-NEXT: pmaxsw %xmm5, %xmm1 3798 ; SSE2-NEXT: pxor %xmm8, %xmm1 3799 ; SSE2-NEXT: pxor %xmm8, %xmm6 3800 ; SSE2-NEXT: pxor %xmm8, %xmm2 3801 ; SSE2-NEXT: pmaxsw %xmm6, %xmm2 3802 ; SSE2-NEXT: pxor %xmm8, %xmm2 3803 ; SSE2-NEXT: pxor %xmm8, %xmm7 3804 ; SSE2-NEXT: pxor %xmm8, %xmm3 3805 ; SSE2-NEXT: pmaxsw %xmm7, %xmm3 3806 ; SSE2-NEXT: pxor %xmm8, %xmm3 3807 ; SSE2-NEXT: retq 3808 ; 3809 ; SSE4-LABEL: test111: 3810 ; SSE4: # %bb.0: # %entry 3811 ; SSE4-NEXT: pmaxuw %xmm4, %xmm0 3812 ; SSE4-NEXT: pmaxuw %xmm5, %xmm1 3813 ; SSE4-NEXT: pmaxuw %xmm6, %xmm2 3814 ; SSE4-NEXT: pmaxuw %xmm7, %xmm3 3815 ; SSE4-NEXT: retq 3816 ; 3817 ; AVX1-LABEL: test111: 3818 ; AVX1: # %bb.0: # %entry 3819 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3820 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3821 ; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 3822 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 3823 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3824 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3825 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3826 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 3827 ; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 3828 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3829 ; AVX1-NEXT: retq 3830 ; 3831 ; AVX2-LABEL: test111: 3832 ; AVX2: # %bb.0: # %entry 3833 ; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 3834 ; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 3835 ; AVX2-NEXT: retq 3836 ; 3837 ; AVX512BW-LABEL: test111: 3838 ; AVX512BW: # %bb.0: # %entry 3839 ; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 3840 ; AVX512BW-NEXT: retq 3841 entry: 3842 %cmp = icmp ugt <32 x i16> %a, %b 3843 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3844 ret <32 x i16> %sel 3845 } 3846 3847 define <32 x i16> @test112(<32 x i16> %a, <32 x i16> %b) { 3848 ; SSE2-LABEL: test112: 3849 ; SSE2: # %bb.0: # %entry 3850 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768] 3851 ; SSE2-NEXT: pxor %xmm8, %xmm4 3852 ; SSE2-NEXT: pxor %xmm8, %xmm0 3853 ; SSE2-NEXT: pmaxsw %xmm4, %xmm0 3854 ; SSE2-NEXT: pxor %xmm8, %xmm0 3855 ; SSE2-NEXT: pxor %xmm8, %xmm5 3856 ; SSE2-NEXT: pxor %xmm8, %xmm1 3857 ; SSE2-NEXT: pmaxsw %xmm5, %xmm1 3858 ; SSE2-NEXT: pxor %xmm8, %xmm1 3859 ; SSE2-NEXT: pxor %xmm8, %xmm6 3860 ; SSE2-NEXT: pxor %xmm8, %xmm2 3861 ; SSE2-NEXT: pmaxsw %xmm6, %xmm2 3862 ; SSE2-NEXT: pxor %xmm8, %xmm2 3863 ; SSE2-NEXT: pxor %xmm8, %xmm7 3864 ; SSE2-NEXT: pxor %xmm8, %xmm3 3865 ; SSE2-NEXT: pmaxsw %xmm7, %xmm3 3866 ; SSE2-NEXT: pxor %xmm8, %xmm3 3867 ; SSE2-NEXT: retq 3868 ; 3869 ; SSE4-LABEL: test112: 3870 ; SSE4: # %bb.0: # %entry 3871 ; SSE4-NEXT: pmaxuw %xmm4, %xmm0 3872 ; SSE4-NEXT: pmaxuw %xmm5, %xmm1 3873 ; SSE4-NEXT: pmaxuw %xmm6, %xmm2 3874 ; SSE4-NEXT: pmaxuw %xmm7, %xmm3 3875 ; SSE4-NEXT: retq 3876 ; 3877 ; AVX1-LABEL: test112: 3878 ; AVX1: # %bb.0: # %entry 3879 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3880 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3881 ; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 3882 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 3883 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3884 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3885 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3886 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 3887 ; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 3888 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3889 ; AVX1-NEXT: retq 3890 ; 3891 ; AVX2-LABEL: test112: 3892 ; AVX2: # %bb.0: # %entry 3893 ; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 3894 ; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 3895 ; AVX2-NEXT: retq 3896 ; 3897 ; AVX512BW-LABEL: test112: 3898 ; AVX512BW: # %bb.0: # %entry 3899 ; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 3900 ; AVX512BW-NEXT: retq 3901 entry: 3902 %cmp = icmp uge <32 x i16> %a, %b 3903 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3904 ret <32 x i16> %sel 3905 } 3906 3907 define <16 x i32> @test113(<16 x i32> %a, <16 x i32> %b) { 3908 ; SSE2-LABEL: test113: 3909 ; SSE2: # %bb.0: # %entry 3910 ; SSE2-NEXT: movdqa %xmm4, %xmm8 3911 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm8 3912 ; SSE2-NEXT: pand %xmm8, %xmm0 3913 ; SSE2-NEXT: pandn %xmm4, %xmm8 3914 ; SSE2-NEXT: por %xmm8, %xmm0 3915 ; SSE2-NEXT: movdqa %xmm5, %xmm4 3916 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 3917 ; SSE2-NEXT: pand %xmm4, %xmm1 3918 ; SSE2-NEXT: pandn %xmm5, %xmm4 3919 ; SSE2-NEXT: por %xmm4, %xmm1 3920 ; SSE2-NEXT: movdqa %xmm6, %xmm4 3921 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 3922 ; SSE2-NEXT: pand %xmm4, %xmm2 3923 ; SSE2-NEXT: pandn %xmm6, %xmm4 3924 ; SSE2-NEXT: por %xmm4, %xmm2 3925 ; SSE2-NEXT: movdqa %xmm7, %xmm4 3926 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 3927 ; SSE2-NEXT: pand %xmm4, %xmm3 3928 ; SSE2-NEXT: pandn %xmm7, %xmm4 3929 ; SSE2-NEXT: por %xmm4, %xmm3 3930 ; SSE2-NEXT: retq 3931 ; 3932 ; SSE4-LABEL: test113: 3933 ; SSE4: # %bb.0: # %entry 3934 ; SSE4-NEXT: pminsd %xmm4, %xmm0 3935 ; SSE4-NEXT: pminsd %xmm5, %xmm1 3936 ; SSE4-NEXT: pminsd %xmm6, %xmm2 3937 ; SSE4-NEXT: pminsd %xmm7, %xmm3 3938 ; SSE4-NEXT: retq 3939 ; 3940 ; AVX1-LABEL: test113: 3941 ; AVX1: # %bb.0: # %entry 3942 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3943 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3944 ; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 3945 ; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 3946 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3947 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3948 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3949 ; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 3950 ; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 3951 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3952 ; AVX1-NEXT: retq 3953 ; 3954 ; AVX2-LABEL: test113: 3955 ; AVX2: # %bb.0: # %entry 3956 ; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 3957 ; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 3958 ; AVX2-NEXT: retq 3959 ; 3960 ; AVX512F-LABEL: test113: 3961 ; AVX512F: # %bb.0: # %entry 3962 ; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0 3963 ; AVX512F-NEXT: retq 3964 entry: 3965 %cmp = icmp slt <16 x i32> %a, %b 3966 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 3967 ret <16 x i32> %sel 3968 } 3969 3970 define <16 x i32> @test114(<16 x i32> %a, <16 x i32> %b) { 3971 ; SSE2-LABEL: test114: 3972 ; SSE2: # %bb.0: # %entry 3973 ; SSE2-NEXT: movdqa %xmm4, %xmm8 3974 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm8 3975 ; SSE2-NEXT: pand %xmm8, %xmm0 3976 ; SSE2-NEXT: pandn %xmm4, %xmm8 3977 ; SSE2-NEXT: por %xmm8, %xmm0 3978 ; SSE2-NEXT: movdqa %xmm5, %xmm4 3979 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 3980 ; SSE2-NEXT: pand %xmm4, %xmm1 3981 ; SSE2-NEXT: pandn %xmm5, %xmm4 3982 ; SSE2-NEXT: por %xmm4, %xmm1 3983 ; SSE2-NEXT: movdqa %xmm6, %xmm4 3984 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 3985 ; SSE2-NEXT: pand %xmm4, %xmm2 3986 ; SSE2-NEXT: pandn %xmm6, %xmm4 3987 ; SSE2-NEXT: por %xmm4, %xmm2 3988 ; SSE2-NEXT: movdqa %xmm7, %xmm4 3989 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 3990 ; SSE2-NEXT: pand %xmm4, %xmm3 3991 ; SSE2-NEXT: pandn %xmm7, %xmm4 3992 ; SSE2-NEXT: por %xmm4, %xmm3 3993 ; SSE2-NEXT: retq 3994 ; 3995 ; SSE4-LABEL: test114: 3996 ; SSE4: # %bb.0: # %entry 3997 ; SSE4-NEXT: pminsd %xmm4, %xmm0 3998 ; SSE4-NEXT: pminsd %xmm5, %xmm1 3999 ; SSE4-NEXT: pminsd %xmm6, %xmm2 4000 ; SSE4-NEXT: pminsd %xmm7, %xmm3 4001 ; SSE4-NEXT: retq 4002 ; 4003 ; AVX1-LABEL: test114: 4004 ; AVX1: # %bb.0: # %entry 4005 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4006 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4007 ; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 4008 ; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 4009 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4010 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4011 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4012 ; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 4013 ; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 4014 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4015 ; AVX1-NEXT: retq 4016 ; 4017 ; AVX2-LABEL: test114: 4018 ; AVX2: # %bb.0: # %entry 4019 ; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 4020 ; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 4021 ; AVX2-NEXT: retq 4022 ; 4023 ; AVX512F-LABEL: test114: 4024 ; AVX512F: # %bb.0: # %entry 4025 ; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0 4026 ; AVX512F-NEXT: retq 4027 entry: 4028 %cmp = icmp sle <16 x i32> %a, %b 4029 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4030 ret <16 x i32> %sel 4031 } 4032 4033 define <16 x i32> @test115(<16 x i32> %a, <16 x i32> %b) { 4034 ; SSE2-LABEL: test115: 4035 ; SSE2: # %bb.0: # %entry 4036 ; SSE2-NEXT: movdqa %xmm0, %xmm8 4037 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 4038 ; SSE2-NEXT: pand %xmm8, %xmm0 4039 ; SSE2-NEXT: pandn %xmm4, %xmm8 4040 ; SSE2-NEXT: por %xmm0, %xmm8 4041 ; SSE2-NEXT: movdqa %xmm1, %xmm4 4042 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 4043 ; SSE2-NEXT: pand %xmm4, %xmm1 4044 ; SSE2-NEXT: pandn %xmm5, %xmm4 4045 ; SSE2-NEXT: por %xmm1, %xmm4 4046 ; SSE2-NEXT: movdqa %xmm2, %xmm5 4047 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 4048 ; SSE2-NEXT: pand %xmm5, %xmm2 4049 ; SSE2-NEXT: pandn %xmm6, %xmm5 4050 ; SSE2-NEXT: por %xmm2, %xmm5 4051 ; SSE2-NEXT: movdqa %xmm3, %xmm6 4052 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm6 4053 ; SSE2-NEXT: pand %xmm6, %xmm3 4054 ; SSE2-NEXT: pandn %xmm7, %xmm6 4055 ; SSE2-NEXT: por %xmm3, %xmm6 4056 ; SSE2-NEXT: movdqa %xmm8, %xmm0 4057 ; SSE2-NEXT: movdqa %xmm4, %xmm1 4058 ; SSE2-NEXT: movdqa %xmm5, %xmm2 4059 ; SSE2-NEXT: movdqa %xmm6, %xmm3 4060 ; SSE2-NEXT: retq 4061 ; 4062 ; SSE4-LABEL: test115: 4063 ; SSE4: # %bb.0: # %entry 4064 ; SSE4-NEXT: pmaxsd %xmm4, %xmm0 4065 ; SSE4-NEXT: pmaxsd %xmm5, %xmm1 4066 ; SSE4-NEXT: pmaxsd %xmm6, %xmm2 4067 ; SSE4-NEXT: pmaxsd %xmm7, %xmm3 4068 ; SSE4-NEXT: retq 4069 ; 4070 ; AVX1-LABEL: test115: 4071 ; AVX1: # %bb.0: # %entry 4072 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4073 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4074 ; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 4075 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 4076 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4077 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4078 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4079 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 4080 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 4081 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4082 ; AVX1-NEXT: retq 4083 ; 4084 ; AVX2-LABEL: test115: 4085 ; AVX2: # %bb.0: # %entry 4086 ; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 4087 ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 4088 ; AVX2-NEXT: retq 4089 ; 4090 ; AVX512F-LABEL: test115: 4091 ; AVX512F: # %bb.0: # %entry 4092 ; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 4093 ; AVX512F-NEXT: retq 4094 entry: 4095 %cmp = icmp sgt <16 x i32> %a, %b 4096 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4097 ret <16 x i32> %sel 4098 } 4099 4100 define <16 x i32> @test116(<16 x i32> %a, <16 x i32> %b) { 4101 ; SSE2-LABEL: test116: 4102 ; SSE2: # %bb.0: # %entry 4103 ; SSE2-NEXT: movdqa %xmm0, %xmm8 4104 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 4105 ; SSE2-NEXT: pand %xmm8, %xmm0 4106 ; SSE2-NEXT: pandn %xmm4, %xmm8 4107 ; SSE2-NEXT: por %xmm0, %xmm8 4108 ; SSE2-NEXT: movdqa %xmm1, %xmm4 4109 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 4110 ; SSE2-NEXT: pand %xmm4, %xmm1 4111 ; SSE2-NEXT: pandn %xmm5, %xmm4 4112 ; SSE2-NEXT: por %xmm1, %xmm4 4113 ; SSE2-NEXT: movdqa %xmm2, %xmm5 4114 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 4115 ; SSE2-NEXT: pand %xmm5, %xmm2 4116 ; SSE2-NEXT: pandn %xmm6, %xmm5 4117 ; SSE2-NEXT: por %xmm2, %xmm5 4118 ; SSE2-NEXT: movdqa %xmm3, %xmm6 4119 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm6 4120 ; SSE2-NEXT: pand %xmm6, %xmm3 4121 ; SSE2-NEXT: pandn %xmm7, %xmm6 4122 ; SSE2-NEXT: por %xmm3, %xmm6 4123 ; SSE2-NEXT: movdqa %xmm8, %xmm0 4124 ; SSE2-NEXT: movdqa %xmm4, %xmm1 4125 ; SSE2-NEXT: movdqa %xmm5, %xmm2 4126 ; SSE2-NEXT: movdqa %xmm6, %xmm3 4127 ; SSE2-NEXT: retq 4128 ; 4129 ; SSE4-LABEL: test116: 4130 ; SSE4: # %bb.0: # %entry 4131 ; SSE4-NEXT: pmaxsd %xmm4, %xmm0 4132 ; SSE4-NEXT: pmaxsd %xmm5, %xmm1 4133 ; SSE4-NEXT: pmaxsd %xmm6, %xmm2 4134 ; SSE4-NEXT: pmaxsd %xmm7, %xmm3 4135 ; SSE4-NEXT: retq 4136 ; 4137 ; AVX1-LABEL: test116: 4138 ; AVX1: # %bb.0: # %entry 4139 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4140 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4141 ; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 4142 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 4143 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4144 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4145 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4146 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 4147 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 4148 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4149 ; AVX1-NEXT: retq 4150 ; 4151 ; AVX2-LABEL: test116: 4152 ; AVX2: # %bb.0: # %entry 4153 ; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 4154 ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 4155 ; AVX2-NEXT: retq 4156 ; 4157 ; AVX512F-LABEL: test116: 4158 ; AVX512F: # %bb.0: # %entry 4159 ; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 4160 ; AVX512F-NEXT: retq 4161 entry: 4162 %cmp = icmp sge <16 x i32> %a, %b 4163 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4164 ret <16 x i32> %sel 4165 } 4166 4167 define <16 x i32> @test117(<16 x i32> %a, <16 x i32> %b) { 4168 ; SSE2-LABEL: test117: 4169 ; SSE2: # %bb.0: # %entry 4170 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 4171 ; SSE2-NEXT: movdqa %xmm0, %xmm9 4172 ; SSE2-NEXT: pxor %xmm8, %xmm9 4173 ; SSE2-NEXT: movdqa %xmm4, %xmm10 4174 ; SSE2-NEXT: pxor %xmm8, %xmm10 4175 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4176 ; SSE2-NEXT: pand %xmm10, %xmm0 4177 ; SSE2-NEXT: pandn %xmm4, %xmm10 4178 ; SSE2-NEXT: por %xmm10, %xmm0 4179 ; SSE2-NEXT: movdqa %xmm1, %xmm9 4180 ; SSE2-NEXT: pxor %xmm8, %xmm9 4181 ; SSE2-NEXT: movdqa %xmm5, %xmm4 4182 ; SSE2-NEXT: pxor %xmm8, %xmm4 4183 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm4 4184 ; SSE2-NEXT: pand %xmm4, %xmm1 4185 ; SSE2-NEXT: pandn %xmm5, %xmm4 4186 ; SSE2-NEXT: por %xmm4, %xmm1 4187 ; SSE2-NEXT: movdqa %xmm2, %xmm4 4188 ; SSE2-NEXT: pxor %xmm8, %xmm4 4189 ; SSE2-NEXT: movdqa %xmm6, %xmm5 4190 ; SSE2-NEXT: pxor %xmm8, %xmm5 4191 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4192 ; SSE2-NEXT: pand %xmm5, %xmm2 4193 ; SSE2-NEXT: pandn %xmm6, %xmm5 4194 ; SSE2-NEXT: por %xmm5, %xmm2 4195 ; SSE2-NEXT: movdqa %xmm3, %xmm4 4196 ; SSE2-NEXT: pxor %xmm8, %xmm4 4197 ; SSE2-NEXT: pxor %xmm7, %xmm8 4198 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 4199 ; SSE2-NEXT: pand %xmm8, %xmm3 4200 ; SSE2-NEXT: pandn %xmm7, %xmm8 4201 ; SSE2-NEXT: por %xmm8, %xmm3 4202 ; SSE2-NEXT: retq 4203 ; 4204 ; SSE4-LABEL: test117: 4205 ; SSE4: # %bb.0: # %entry 4206 ; SSE4-NEXT: pminud %xmm4, %xmm0 4207 ; SSE4-NEXT: pminud %xmm5, %xmm1 4208 ; SSE4-NEXT: pminud %xmm6, %xmm2 4209 ; SSE4-NEXT: pminud %xmm7, %xmm3 4210 ; SSE4-NEXT: retq 4211 ; 4212 ; AVX1-LABEL: test117: 4213 ; AVX1: # %bb.0: # %entry 4214 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4215 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4216 ; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 4217 ; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 4218 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4219 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4220 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4221 ; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 4222 ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 4223 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4224 ; AVX1-NEXT: retq 4225 ; 4226 ; AVX2-LABEL: test117: 4227 ; AVX2: # %bb.0: # %entry 4228 ; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 4229 ; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 4230 ; AVX2-NEXT: retq 4231 ; 4232 ; AVX512F-LABEL: test117: 4233 ; AVX512F: # %bb.0: # %entry 4234 ; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0 4235 ; AVX512F-NEXT: retq 4236 entry: 4237 %cmp = icmp ult <16 x i32> %a, %b 4238 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4239 ret <16 x i32> %sel 4240 } 4241 4242 define <16 x i32> @test118(<16 x i32> %a, <16 x i32> %b) { 4243 ; SSE2-LABEL: test118: 4244 ; SSE2: # %bb.0: # %entry 4245 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 4246 ; SSE2-NEXT: movdqa %xmm0, %xmm9 4247 ; SSE2-NEXT: pxor %xmm8, %xmm9 4248 ; SSE2-NEXT: movdqa %xmm4, %xmm10 4249 ; SSE2-NEXT: pxor %xmm8, %xmm10 4250 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4251 ; SSE2-NEXT: pand %xmm10, %xmm0 4252 ; SSE2-NEXT: pandn %xmm4, %xmm10 4253 ; SSE2-NEXT: por %xmm10, %xmm0 4254 ; SSE2-NEXT: movdqa %xmm1, %xmm9 4255 ; SSE2-NEXT: pxor %xmm8, %xmm9 4256 ; SSE2-NEXT: movdqa %xmm5, %xmm4 4257 ; SSE2-NEXT: pxor %xmm8, %xmm4 4258 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm4 4259 ; SSE2-NEXT: pand %xmm4, %xmm1 4260 ; SSE2-NEXT: pandn %xmm5, %xmm4 4261 ; SSE2-NEXT: por %xmm4, %xmm1 4262 ; SSE2-NEXT: movdqa %xmm2, %xmm4 4263 ; SSE2-NEXT: pxor %xmm8, %xmm4 4264 ; SSE2-NEXT: movdqa %xmm6, %xmm5 4265 ; SSE2-NEXT: pxor %xmm8, %xmm5 4266 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4267 ; SSE2-NEXT: pand %xmm5, %xmm2 4268 ; SSE2-NEXT: pandn %xmm6, %xmm5 4269 ; SSE2-NEXT: por %xmm5, %xmm2 4270 ; SSE2-NEXT: movdqa %xmm3, %xmm4 4271 ; SSE2-NEXT: pxor %xmm8, %xmm4 4272 ; SSE2-NEXT: pxor %xmm7, %xmm8 4273 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 4274 ; SSE2-NEXT: pand %xmm8, %xmm3 4275 ; SSE2-NEXT: pandn %xmm7, %xmm8 4276 ; SSE2-NEXT: por %xmm8, %xmm3 4277 ; SSE2-NEXT: retq 4278 ; 4279 ; SSE4-LABEL: test118: 4280 ; SSE4: # %bb.0: # %entry 4281 ; SSE4-NEXT: pminud %xmm4, %xmm0 4282 ; SSE4-NEXT: pminud %xmm5, %xmm1 4283 ; SSE4-NEXT: pminud %xmm6, %xmm2 4284 ; SSE4-NEXT: pminud %xmm7, %xmm3 4285 ; SSE4-NEXT: retq 4286 ; 4287 ; AVX1-LABEL: test118: 4288 ; AVX1: # %bb.0: # %entry 4289 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4290 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4291 ; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 4292 ; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 4293 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4294 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4295 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4296 ; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 4297 ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 4298 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4299 ; AVX1-NEXT: retq 4300 ; 4301 ; AVX2-LABEL: test118: 4302 ; AVX2: # %bb.0: # %entry 4303 ; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 4304 ; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 4305 ; AVX2-NEXT: retq 4306 ; 4307 ; AVX512F-LABEL: test118: 4308 ; AVX512F: # %bb.0: # %entry 4309 ; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0 4310 ; AVX512F-NEXT: retq 4311 entry: 4312 %cmp = icmp ule <16 x i32> %a, %b 4313 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4314 ret <16 x i32> %sel 4315 } 4316 4317 define <16 x i32> @test119(<16 x i32> %a, <16 x i32> %b) { 4318 ; SSE2-LABEL: test119: 4319 ; SSE2: # %bb.0: # %entry 4320 ; SSE2-NEXT: movdqa %xmm1, %xmm8 4321 ; SSE2-NEXT: movdqa %xmm0, %xmm10 4322 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648] 4323 ; SSE2-NEXT: movdqa %xmm4, %xmm1 4324 ; SSE2-NEXT: pxor %xmm9, %xmm1 4325 ; SSE2-NEXT: pxor %xmm9, %xmm0 4326 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm0 4327 ; SSE2-NEXT: pand %xmm0, %xmm10 4328 ; SSE2-NEXT: pandn %xmm4, %xmm0 4329 ; SSE2-NEXT: por %xmm10, %xmm0 4330 ; SSE2-NEXT: movdqa %xmm5, %xmm4 4331 ; SSE2-NEXT: pxor %xmm9, %xmm4 4332 ; SSE2-NEXT: movdqa %xmm8, %xmm1 4333 ; SSE2-NEXT: pxor %xmm9, %xmm1 4334 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm1 4335 ; SSE2-NEXT: pand %xmm1, %xmm8 4336 ; SSE2-NEXT: pandn %xmm5, %xmm1 4337 ; SSE2-NEXT: por %xmm8, %xmm1 4338 ; SSE2-NEXT: movdqa %xmm6, %xmm5 4339 ; SSE2-NEXT: pxor %xmm9, %xmm5 4340 ; SSE2-NEXT: movdqa %xmm2, %xmm4 4341 ; SSE2-NEXT: pxor %xmm9, %xmm4 4342 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 4343 ; SSE2-NEXT: pand %xmm4, %xmm2 4344 ; SSE2-NEXT: pandn %xmm6, %xmm4 4345 ; SSE2-NEXT: por %xmm2, %xmm4 4346 ; SSE2-NEXT: movdqa %xmm7, %xmm2 4347 ; SSE2-NEXT: pxor %xmm9, %xmm2 4348 ; SSE2-NEXT: pxor %xmm3, %xmm9 4349 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm9 4350 ; SSE2-NEXT: pand %xmm9, %xmm3 4351 ; SSE2-NEXT: pandn %xmm7, %xmm9 4352 ; SSE2-NEXT: por %xmm9, %xmm3 4353 ; SSE2-NEXT: movdqa %xmm4, %xmm2 4354 ; SSE2-NEXT: retq 4355 ; 4356 ; SSE4-LABEL: test119: 4357 ; SSE4: # %bb.0: # %entry 4358 ; SSE4-NEXT: pmaxud %xmm4, %xmm0 4359 ; SSE4-NEXT: pmaxud %xmm5, %xmm1 4360 ; SSE4-NEXT: pmaxud %xmm6, %xmm2 4361 ; SSE4-NEXT: pmaxud %xmm7, %xmm3 4362 ; SSE4-NEXT: retq 4363 ; 4364 ; AVX1-LABEL: test119: 4365 ; AVX1: # %bb.0: # %entry 4366 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4367 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4368 ; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 4369 ; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 4370 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4371 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4372 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4373 ; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 4374 ; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 4375 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4376 ; AVX1-NEXT: retq 4377 ; 4378 ; AVX2-LABEL: test119: 4379 ; AVX2: # %bb.0: # %entry 4380 ; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 4381 ; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 4382 ; AVX2-NEXT: retq 4383 ; 4384 ; AVX512F-LABEL: test119: 4385 ; AVX512F: # %bb.0: # %entry 4386 ; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 4387 ; AVX512F-NEXT: retq 4388 entry: 4389 %cmp = icmp ugt <16 x i32> %a, %b 4390 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4391 ret <16 x i32> %sel 4392 } 4393 4394 define <16 x i32> @test120(<16 x i32> %a, <16 x i32> %b) { 4395 ; SSE2-LABEL: test120: 4396 ; SSE2: # %bb.0: # %entry 4397 ; SSE2-NEXT: movdqa %xmm1, %xmm8 4398 ; SSE2-NEXT: movdqa %xmm0, %xmm10 4399 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648] 4400 ; SSE2-NEXT: movdqa %xmm4, %xmm1 4401 ; SSE2-NEXT: pxor %xmm9, %xmm1 4402 ; SSE2-NEXT: pxor %xmm9, %xmm0 4403 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm0 4404 ; SSE2-NEXT: pand %xmm0, %xmm10 4405 ; SSE2-NEXT: pandn %xmm4, %xmm0 4406 ; SSE2-NEXT: por %xmm10, %xmm0 4407 ; SSE2-NEXT: movdqa %xmm5, %xmm4 4408 ; SSE2-NEXT: pxor %xmm9, %xmm4 4409 ; SSE2-NEXT: movdqa %xmm8, %xmm1 4410 ; SSE2-NEXT: pxor %xmm9, %xmm1 4411 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm1 4412 ; SSE2-NEXT: pand %xmm1, %xmm8 4413 ; SSE2-NEXT: pandn %xmm5, %xmm1 4414 ; SSE2-NEXT: por %xmm8, %xmm1 4415 ; SSE2-NEXT: movdqa %xmm6, %xmm5 4416 ; SSE2-NEXT: pxor %xmm9, %xmm5 4417 ; SSE2-NEXT: movdqa %xmm2, %xmm4 4418 ; SSE2-NEXT: pxor %xmm9, %xmm4 4419 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 4420 ; SSE2-NEXT: pand %xmm4, %xmm2 4421 ; SSE2-NEXT: pandn %xmm6, %xmm4 4422 ; SSE2-NEXT: por %xmm2, %xmm4 4423 ; SSE2-NEXT: movdqa %xmm7, %xmm2 4424 ; SSE2-NEXT: pxor %xmm9, %xmm2 4425 ; SSE2-NEXT: pxor %xmm3, %xmm9 4426 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm9 4427 ; SSE2-NEXT: pand %xmm9, %xmm3 4428 ; SSE2-NEXT: pandn %xmm7, %xmm9 4429 ; SSE2-NEXT: por %xmm9, %xmm3 4430 ; SSE2-NEXT: movdqa %xmm4, %xmm2 4431 ; SSE2-NEXT: retq 4432 ; 4433 ; SSE4-LABEL: test120: 4434 ; SSE4: # %bb.0: # %entry 4435 ; SSE4-NEXT: pmaxud %xmm4, %xmm0 4436 ; SSE4-NEXT: pmaxud %xmm5, %xmm1 4437 ; SSE4-NEXT: pmaxud %xmm6, %xmm2 4438 ; SSE4-NEXT: pmaxud %xmm7, %xmm3 4439 ; SSE4-NEXT: retq 4440 ; 4441 ; AVX1-LABEL: test120: 4442 ; AVX1: # %bb.0: # %entry 4443 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4444 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4445 ; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 4446 ; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 4447 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4448 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4449 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4450 ; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 4451 ; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 4452 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4453 ; AVX1-NEXT: retq 4454 ; 4455 ; AVX2-LABEL: test120: 4456 ; AVX2: # %bb.0: # %entry 4457 ; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 4458 ; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 4459 ; AVX2-NEXT: retq 4460 ; 4461 ; AVX512F-LABEL: test120: 4462 ; AVX512F: # %bb.0: # %entry 4463 ; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 4464 ; AVX512F-NEXT: retq 4465 entry: 4466 %cmp = icmp uge <16 x i32> %a, %b 4467 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4468 ret <16 x i32> %sel 4469 } 4470 4471 define <8 x i64> @test121(<8 x i64> %a, <8 x i64> %b) { 4472 ; SSE2-LABEL: test121: 4473 ; SSE2: # %bb.0: # %entry 4474 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0] 4475 ; SSE2-NEXT: movdqa %xmm0, %xmm9 4476 ; SSE2-NEXT: pxor %xmm8, %xmm9 4477 ; SSE2-NEXT: movdqa %xmm4, %xmm10 4478 ; SSE2-NEXT: pxor %xmm8, %xmm10 4479 ; SSE2-NEXT: movdqa %xmm10, %xmm11 4480 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4481 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4482 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4483 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4484 ; SSE2-NEXT: pand %xmm12, %xmm9 4485 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4486 ; SSE2-NEXT: por %xmm9, %xmm10 4487 ; SSE2-NEXT: pand %xmm10, %xmm0 4488 ; SSE2-NEXT: pandn %xmm4, %xmm10 4489 ; SSE2-NEXT: por %xmm10, %xmm0 4490 ; SSE2-NEXT: movdqa %xmm1, %xmm9 4491 ; SSE2-NEXT: pxor %xmm8, %xmm9 4492 ; SSE2-NEXT: movdqa %xmm5, %xmm4 4493 ; SSE2-NEXT: pxor %xmm8, %xmm4 4494 ; SSE2-NEXT: movdqa %xmm4, %xmm10 4495 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4496 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4497 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 4498 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 4499 ; SSE2-NEXT: pand %xmm11, %xmm9 4500 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 4501 ; SSE2-NEXT: por %xmm9, %xmm4 4502 ; SSE2-NEXT: pand %xmm4, %xmm1 4503 ; SSE2-NEXT: pandn %xmm5, %xmm4 4504 ; SSE2-NEXT: por %xmm4, %xmm1 4505 ; SSE2-NEXT: movdqa %xmm2, %xmm4 4506 ; SSE2-NEXT: pxor %xmm8, %xmm4 4507 ; SSE2-NEXT: movdqa %xmm6, %xmm5 4508 ; SSE2-NEXT: pxor %xmm8, %xmm5 4509 ; SSE2-NEXT: movdqa %xmm5, %xmm9 4510 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4511 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4512 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4513 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4514 ; SSE2-NEXT: pand %xmm10, %xmm4 4515 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4516 ; SSE2-NEXT: por %xmm4, %xmm5 4517 ; SSE2-NEXT: pand %xmm5, %xmm2 4518 ; SSE2-NEXT: pandn %xmm6, %xmm5 4519 ; SSE2-NEXT: por %xmm5, %xmm2 4520 ; SSE2-NEXT: movdqa %xmm3, %xmm4 4521 ; SSE2-NEXT: pxor %xmm8, %xmm4 4522 ; SSE2-NEXT: pxor %xmm7, %xmm8 4523 ; SSE2-NEXT: movdqa %xmm8, %xmm5 4524 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4525 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 4526 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 4527 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 4528 ; SSE2-NEXT: pand %xmm6, %xmm4 4529 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 4530 ; SSE2-NEXT: por %xmm4, %xmm5 4531 ; SSE2-NEXT: pand %xmm5, %xmm3 4532 ; SSE2-NEXT: pandn %xmm7, %xmm5 4533 ; SSE2-NEXT: por %xmm5, %xmm3 4534 ; SSE2-NEXT: retq 4535 ; 4536 ; SSE4-LABEL: test121: 4537 ; SSE4: # %bb.0: # %entry 4538 ; SSE4-NEXT: movdqa %xmm0, %xmm8 4539 ; SSE4-NEXT: movdqa %xmm4, %xmm0 4540 ; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 4541 ; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 4542 ; SSE4-NEXT: movdqa %xmm5, %xmm0 4543 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 4544 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 4545 ; SSE4-NEXT: movdqa %xmm6, %xmm0 4546 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 4547 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 4548 ; SSE4-NEXT: movdqa %xmm7, %xmm0 4549 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 4550 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 4551 ; SSE4-NEXT: movapd %xmm4, %xmm0 4552 ; SSE4-NEXT: movapd %xmm5, %xmm1 4553 ; SSE4-NEXT: movapd %xmm6, %xmm2 4554 ; SSE4-NEXT: movapd %xmm7, %xmm3 4555 ; SSE4-NEXT: retq 4556 ; 4557 ; AVX1-LABEL: test121: 4558 ; AVX1: # %bb.0: # %entry 4559 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 4560 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 4561 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4562 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm5 4563 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4564 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4565 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 4566 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 4567 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 4568 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm4 4569 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 4570 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4571 ; AVX1-NEXT: retq 4572 ; 4573 ; AVX2-LABEL: test121: 4574 ; AVX2: # %bb.0: # %entry 4575 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm4 4576 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4577 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm2 4578 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4579 ; AVX2-NEXT: retq 4580 ; 4581 ; AVX512F-LABEL: test121: 4582 ; AVX512F: # %bb.0: # %entry 4583 ; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 4584 ; AVX512F-NEXT: retq 4585 entry: 4586 %cmp = icmp slt <8 x i64> %a, %b 4587 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4588 ret <8 x i64> %sel 4589 } 4590 4591 define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) { 4592 ; SSE2-LABEL: test122: 4593 ; SSE2: # %bb.0: # %entry 4594 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0] 4595 ; SSE2-NEXT: movdqa %xmm0, %xmm9 4596 ; SSE2-NEXT: pxor %xmm8, %xmm9 4597 ; SSE2-NEXT: movdqa %xmm4, %xmm10 4598 ; SSE2-NEXT: pxor %xmm8, %xmm10 4599 ; SSE2-NEXT: movdqa %xmm10, %xmm11 4600 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4601 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4602 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4603 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4604 ; SSE2-NEXT: pand %xmm12, %xmm9 4605 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4606 ; SSE2-NEXT: por %xmm9, %xmm10 4607 ; SSE2-NEXT: pand %xmm10, %xmm0 4608 ; SSE2-NEXT: pandn %xmm4, %xmm10 4609 ; SSE2-NEXT: por %xmm10, %xmm0 4610 ; SSE2-NEXT: movdqa %xmm1, %xmm9 4611 ; SSE2-NEXT: pxor %xmm8, %xmm9 4612 ; SSE2-NEXT: movdqa %xmm5, %xmm4 4613 ; SSE2-NEXT: pxor %xmm8, %xmm4 4614 ; SSE2-NEXT: movdqa %xmm4, %xmm10 4615 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4616 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4617 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 4618 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 4619 ; SSE2-NEXT: pand %xmm11, %xmm9 4620 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 4621 ; SSE2-NEXT: por %xmm9, %xmm4 4622 ; SSE2-NEXT: pand %xmm4, %xmm1 4623 ; SSE2-NEXT: pandn %xmm5, %xmm4 4624 ; SSE2-NEXT: por %xmm4, %xmm1 4625 ; SSE2-NEXT: movdqa %xmm2, %xmm4 4626 ; SSE2-NEXT: pxor %xmm8, %xmm4 4627 ; SSE2-NEXT: movdqa %xmm6, %xmm5 4628 ; SSE2-NEXT: pxor %xmm8, %xmm5 4629 ; SSE2-NEXT: movdqa %xmm5, %xmm9 4630 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4631 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4632 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4633 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4634 ; SSE2-NEXT: pand %xmm10, %xmm4 4635 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4636 ; SSE2-NEXT: por %xmm4, %xmm5 4637 ; SSE2-NEXT: pand %xmm5, %xmm2 4638 ; SSE2-NEXT: pandn %xmm6, %xmm5 4639 ; SSE2-NEXT: por %xmm5, %xmm2 4640 ; SSE2-NEXT: movdqa %xmm3, %xmm4 4641 ; SSE2-NEXT: pxor %xmm8, %xmm4 4642 ; SSE2-NEXT: pxor %xmm7, %xmm8 4643 ; SSE2-NEXT: movdqa %xmm8, %xmm5 4644 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4645 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 4646 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 4647 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 4648 ; SSE2-NEXT: pand %xmm6, %xmm4 4649 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 4650 ; SSE2-NEXT: por %xmm4, %xmm5 4651 ; SSE2-NEXT: pand %xmm5, %xmm3 4652 ; SSE2-NEXT: pandn %xmm7, %xmm5 4653 ; SSE2-NEXT: por %xmm5, %xmm3 4654 ; SSE2-NEXT: retq 4655 ; 4656 ; SSE4-LABEL: test122: 4657 ; SSE4: # %bb.0: # %entry 4658 ; SSE4-NEXT: movdqa %xmm0, %xmm8 4659 ; SSE4-NEXT: movdqa %xmm4, %xmm0 4660 ; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 4661 ; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 4662 ; SSE4-NEXT: movdqa %xmm5, %xmm0 4663 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 4664 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 4665 ; SSE4-NEXT: movdqa %xmm6, %xmm0 4666 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 4667 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 4668 ; SSE4-NEXT: movdqa %xmm7, %xmm0 4669 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 4670 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 4671 ; SSE4-NEXT: movapd %xmm4, %xmm0 4672 ; SSE4-NEXT: movapd %xmm5, %xmm1 4673 ; SSE4-NEXT: movapd %xmm6, %xmm2 4674 ; SSE4-NEXT: movapd %xmm7, %xmm3 4675 ; SSE4-NEXT: retq 4676 ; 4677 ; AVX1-LABEL: test122: 4678 ; AVX1: # %bb.0: # %entry 4679 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 4680 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 4681 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4682 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm5 4683 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4684 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4685 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 4686 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 4687 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 4688 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm4 4689 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 4690 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4691 ; AVX1-NEXT: retq 4692 ; 4693 ; AVX2-LABEL: test122: 4694 ; AVX2: # %bb.0: # %entry 4695 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm4 4696 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4697 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm2 4698 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4699 ; AVX2-NEXT: retq 4700 ; 4701 ; AVX512F-LABEL: test122: 4702 ; AVX512F: # %bb.0: # %entry 4703 ; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 4704 ; AVX512F-NEXT: retq 4705 entry: 4706 %cmp = icmp sle <8 x i64> %a, %b 4707 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4708 ret <8 x i64> %sel 4709 } 4710 4711 define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) { 4712 ; SSE2-LABEL: test123: 4713 ; SSE2: # %bb.0: # %entry 4714 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0] 4715 ; SSE2-NEXT: movdqa %xmm4, %xmm9 4716 ; SSE2-NEXT: pxor %xmm8, %xmm9 4717 ; SSE2-NEXT: movdqa %xmm0, %xmm10 4718 ; SSE2-NEXT: pxor %xmm8, %xmm10 4719 ; SSE2-NEXT: movdqa %xmm10, %xmm11 4720 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4721 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4722 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4723 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4724 ; SSE2-NEXT: pand %xmm12, %xmm9 4725 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4726 ; SSE2-NEXT: por %xmm9, %xmm10 4727 ; SSE2-NEXT: pand %xmm10, %xmm0 4728 ; SSE2-NEXT: pandn %xmm4, %xmm10 4729 ; SSE2-NEXT: por %xmm10, %xmm0 4730 ; SSE2-NEXT: movdqa %xmm5, %xmm9 4731 ; SSE2-NEXT: pxor %xmm8, %xmm9 4732 ; SSE2-NEXT: movdqa %xmm1, %xmm4 4733 ; SSE2-NEXT: pxor %xmm8, %xmm4 4734 ; SSE2-NEXT: movdqa %xmm4, %xmm10 4735 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4736 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4737 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 4738 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 4739 ; SSE2-NEXT: pand %xmm11, %xmm9 4740 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 4741 ; SSE2-NEXT: por %xmm9, %xmm4 4742 ; SSE2-NEXT: pand %xmm4, %xmm1 4743 ; SSE2-NEXT: pandn %xmm5, %xmm4 4744 ; SSE2-NEXT: por %xmm4, %xmm1 4745 ; SSE2-NEXT: movdqa %xmm6, %xmm4 4746 ; SSE2-NEXT: pxor %xmm8, %xmm4 4747 ; SSE2-NEXT: movdqa %xmm2, %xmm5 4748 ; SSE2-NEXT: pxor %xmm8, %xmm5 4749 ; SSE2-NEXT: movdqa %xmm5, %xmm9 4750 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4751 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4752 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4753 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4754 ; SSE2-NEXT: pand %xmm10, %xmm4 4755 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4756 ; SSE2-NEXT: por %xmm4, %xmm5 4757 ; SSE2-NEXT: pand %xmm5, %xmm2 4758 ; SSE2-NEXT: pandn %xmm6, %xmm5 4759 ; SSE2-NEXT: por %xmm5, %xmm2 4760 ; SSE2-NEXT: movdqa %xmm7, %xmm4 4761 ; SSE2-NEXT: pxor %xmm8, %xmm4 4762 ; SSE2-NEXT: pxor %xmm3, %xmm8 4763 ; SSE2-NEXT: movdqa %xmm8, %xmm5 4764 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4765 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 4766 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 4767 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 4768 ; SSE2-NEXT: pand %xmm6, %xmm4 4769 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 4770 ; SSE2-NEXT: por %xmm4, %xmm5 4771 ; SSE2-NEXT: pand %xmm5, %xmm3 4772 ; SSE2-NEXT: pandn %xmm7, %xmm5 4773 ; SSE2-NEXT: por %xmm5, %xmm3 4774 ; SSE2-NEXT: retq 4775 ; 4776 ; SSE4-LABEL: test123: 4777 ; SSE4: # %bb.0: # %entry 4778 ; SSE4-NEXT: movdqa %xmm0, %xmm8 4779 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 4780 ; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 4781 ; SSE4-NEXT: movdqa %xmm1, %xmm0 4782 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 4783 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 4784 ; SSE4-NEXT: movdqa %xmm2, %xmm0 4785 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 4786 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 4787 ; SSE4-NEXT: movdqa %xmm3, %xmm0 4788 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 4789 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 4790 ; SSE4-NEXT: movapd %xmm4, %xmm0 4791 ; SSE4-NEXT: movapd %xmm5, %xmm1 4792 ; SSE4-NEXT: movapd %xmm6, %xmm2 4793 ; SSE4-NEXT: movapd %xmm7, %xmm3 4794 ; SSE4-NEXT: retq 4795 ; 4796 ; AVX1-LABEL: test123: 4797 ; AVX1: # %bb.0: # %entry 4798 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4799 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4800 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4801 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5 4802 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4803 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4804 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4805 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4806 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 4807 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4 4808 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 4809 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4810 ; AVX1-NEXT: retq 4811 ; 4812 ; AVX2-LABEL: test123: 4813 ; AVX2: # %bb.0: # %entry 4814 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4 4815 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4816 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2 4817 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4818 ; AVX2-NEXT: retq 4819 ; 4820 ; AVX512F-LABEL: test123: 4821 ; AVX512F: # %bb.0: # %entry 4822 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 4823 ; AVX512F-NEXT: retq 4824 entry: 4825 %cmp = icmp sgt <8 x i64> %a, %b 4826 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4827 ret <8 x i64> %sel 4828 } 4829 4830 define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) { 4831 ; SSE2-LABEL: test124: 4832 ; SSE2: # %bb.0: # %entry 4833 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0] 4834 ; SSE2-NEXT: movdqa %xmm4, %xmm9 4835 ; SSE2-NEXT: pxor %xmm8, %xmm9 4836 ; SSE2-NEXT: movdqa %xmm0, %xmm10 4837 ; SSE2-NEXT: pxor %xmm8, %xmm10 4838 ; SSE2-NEXT: movdqa %xmm10, %xmm11 4839 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4840 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4841 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4842 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4843 ; SSE2-NEXT: pand %xmm12, %xmm9 4844 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4845 ; SSE2-NEXT: por %xmm9, %xmm10 4846 ; SSE2-NEXT: pand %xmm10, %xmm0 4847 ; SSE2-NEXT: pandn %xmm4, %xmm10 4848 ; SSE2-NEXT: por %xmm10, %xmm0 4849 ; SSE2-NEXT: movdqa %xmm5, %xmm9 4850 ; SSE2-NEXT: pxor %xmm8, %xmm9 4851 ; SSE2-NEXT: movdqa %xmm1, %xmm4 4852 ; SSE2-NEXT: pxor %xmm8, %xmm4 4853 ; SSE2-NEXT: movdqa %xmm4, %xmm10 4854 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4855 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4856 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 4857 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 4858 ; SSE2-NEXT: pand %xmm11, %xmm9 4859 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 4860 ; SSE2-NEXT: por %xmm9, %xmm4 4861 ; SSE2-NEXT: pand %xmm4, %xmm1 4862 ; SSE2-NEXT: pandn %xmm5, %xmm4 4863 ; SSE2-NEXT: por %xmm4, %xmm1 4864 ; SSE2-NEXT: movdqa %xmm6, %xmm4 4865 ; SSE2-NEXT: pxor %xmm8, %xmm4 4866 ; SSE2-NEXT: movdqa %xmm2, %xmm5 4867 ; SSE2-NEXT: pxor %xmm8, %xmm5 4868 ; SSE2-NEXT: movdqa %xmm5, %xmm9 4869 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4870 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4871 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4872 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4873 ; SSE2-NEXT: pand %xmm10, %xmm4 4874 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4875 ; SSE2-NEXT: por %xmm4, %xmm5 4876 ; SSE2-NEXT: pand %xmm5, %xmm2 4877 ; SSE2-NEXT: pandn %xmm6, %xmm5 4878 ; SSE2-NEXT: por %xmm5, %xmm2 4879 ; SSE2-NEXT: movdqa %xmm7, %xmm4 4880 ; SSE2-NEXT: pxor %xmm8, %xmm4 4881 ; SSE2-NEXT: pxor %xmm3, %xmm8 4882 ; SSE2-NEXT: movdqa %xmm8, %xmm5 4883 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4884 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 4885 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 4886 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 4887 ; SSE2-NEXT: pand %xmm6, %xmm4 4888 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 4889 ; SSE2-NEXT: por %xmm4, %xmm5 4890 ; SSE2-NEXT: pand %xmm5, %xmm3 4891 ; SSE2-NEXT: pandn %xmm7, %xmm5 4892 ; SSE2-NEXT: por %xmm5, %xmm3 4893 ; SSE2-NEXT: retq 4894 ; 4895 ; SSE4-LABEL: test124: 4896 ; SSE4: # %bb.0: # %entry 4897 ; SSE4-NEXT: movdqa %xmm0, %xmm8 4898 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 4899 ; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 4900 ; SSE4-NEXT: movdqa %xmm1, %xmm0 4901 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 4902 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 4903 ; SSE4-NEXT: movdqa %xmm2, %xmm0 4904 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 4905 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 4906 ; SSE4-NEXT: movdqa %xmm3, %xmm0 4907 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 4908 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 4909 ; SSE4-NEXT: movapd %xmm4, %xmm0 4910 ; SSE4-NEXT: movapd %xmm5, %xmm1 4911 ; SSE4-NEXT: movapd %xmm6, %xmm2 4912 ; SSE4-NEXT: movapd %xmm7, %xmm3 4913 ; SSE4-NEXT: retq 4914 ; 4915 ; AVX1-LABEL: test124: 4916 ; AVX1: # %bb.0: # %entry 4917 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4918 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4919 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4920 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5 4921 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4922 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4923 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4924 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4925 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 4926 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4 4927 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 4928 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4929 ; AVX1-NEXT: retq 4930 ; 4931 ; AVX2-LABEL: test124: 4932 ; AVX2: # %bb.0: # %entry 4933 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4 4934 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4935 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2 4936 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4937 ; AVX2-NEXT: retq 4938 ; 4939 ; AVX512F-LABEL: test124: 4940 ; AVX512F: # %bb.0: # %entry 4941 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 4942 ; AVX512F-NEXT: retq 4943 entry: 4944 %cmp = icmp sge <8 x i64> %a, %b 4945 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4946 ret <8 x i64> %sel 4947 } 4948 4949 define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) { 4950 ; SSE2-LABEL: test125: 4951 ; SSE2: # %bb.0: # %entry 4952 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 4953 ; SSE2-NEXT: movdqa %xmm0, %xmm9 4954 ; SSE2-NEXT: pxor %xmm8, %xmm9 4955 ; SSE2-NEXT: movdqa %xmm4, %xmm10 4956 ; SSE2-NEXT: pxor %xmm8, %xmm10 4957 ; SSE2-NEXT: movdqa %xmm10, %xmm11 4958 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4959 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4960 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4961 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4962 ; SSE2-NEXT: pand %xmm12, %xmm9 4963 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4964 ; SSE2-NEXT: por %xmm9, %xmm10 4965 ; SSE2-NEXT: pand %xmm10, %xmm0 4966 ; SSE2-NEXT: pandn %xmm4, %xmm10 4967 ; SSE2-NEXT: por %xmm10, %xmm0 4968 ; SSE2-NEXT: movdqa %xmm1, %xmm9 4969 ; SSE2-NEXT: pxor %xmm8, %xmm9 4970 ; SSE2-NEXT: movdqa %xmm5, %xmm4 4971 ; SSE2-NEXT: pxor %xmm8, %xmm4 4972 ; SSE2-NEXT: movdqa %xmm4, %xmm10 4973 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4974 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4975 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 4976 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 4977 ; SSE2-NEXT: pand %xmm11, %xmm9 4978 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 4979 ; SSE2-NEXT: por %xmm9, %xmm4 4980 ; SSE2-NEXT: pand %xmm4, %xmm1 4981 ; SSE2-NEXT: pandn %xmm5, %xmm4 4982 ; SSE2-NEXT: por %xmm4, %xmm1 4983 ; SSE2-NEXT: movdqa %xmm2, %xmm4 4984 ; SSE2-NEXT: pxor %xmm8, %xmm4 4985 ; SSE2-NEXT: movdqa %xmm6, %xmm5 4986 ; SSE2-NEXT: pxor %xmm8, %xmm5 4987 ; SSE2-NEXT: movdqa %xmm5, %xmm9 4988 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4989 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4990 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4991 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4992 ; SSE2-NEXT: pand %xmm10, %xmm4 4993 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4994 ; SSE2-NEXT: por %xmm4, %xmm5 4995 ; SSE2-NEXT: pand %xmm5, %xmm2 4996 ; SSE2-NEXT: pandn %xmm6, %xmm5 4997 ; SSE2-NEXT: por %xmm5, %xmm2 4998 ; SSE2-NEXT: movdqa %xmm3, %xmm4 4999 ; SSE2-NEXT: pxor %xmm8, %xmm4 5000 ; SSE2-NEXT: pxor %xmm7, %xmm8 5001 ; SSE2-NEXT: movdqa %xmm8, %xmm5 5002 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 5003 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 5004 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 5005 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 5006 ; SSE2-NEXT: pand %xmm6, %xmm4 5007 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 5008 ; SSE2-NEXT: por %xmm4, %xmm5 5009 ; SSE2-NEXT: pand %xmm5, %xmm3 5010 ; SSE2-NEXT: pandn %xmm7, %xmm5 5011 ; SSE2-NEXT: por %xmm5, %xmm3 5012 ; SSE2-NEXT: retq 5013 ; 5014 ; SSE4-LABEL: test125: 5015 ; SSE4: # %bb.0: # %entry 5016 ; SSE4-NEXT: movdqa %xmm0, %xmm9 5017 ; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 5018 ; SSE4-NEXT: movdqa %xmm0, %xmm10 5019 ; SSE4-NEXT: pxor %xmm8, %xmm10 5020 ; SSE4-NEXT: movdqa %xmm4, %xmm0 5021 ; SSE4-NEXT: pxor %xmm8, %xmm0 5022 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 5023 ; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 5024 ; SSE4-NEXT: movdqa %xmm1, %xmm9 5025 ; SSE4-NEXT: pxor %xmm8, %xmm9 5026 ; SSE4-NEXT: movdqa %xmm5, %xmm0 5027 ; SSE4-NEXT: pxor %xmm8, %xmm0 5028 ; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 5029 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 5030 ; SSE4-NEXT: movdqa %xmm2, %xmm1 5031 ; SSE4-NEXT: pxor %xmm8, %xmm1 5032 ; SSE4-NEXT: movdqa %xmm6, %xmm0 5033 ; SSE4-NEXT: pxor %xmm8, %xmm0 5034 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 5035 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 5036 ; SSE4-NEXT: movdqa %xmm3, %xmm0 5037 ; SSE4-NEXT: pxor %xmm8, %xmm0 5038 ; SSE4-NEXT: pxor %xmm7, %xmm8 5039 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 5040 ; SSE4-NEXT: movdqa %xmm8, %xmm0 5041 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 5042 ; SSE4-NEXT: movapd %xmm4, %xmm0 5043 ; SSE4-NEXT: movapd %xmm5, %xmm1 5044 ; SSE4-NEXT: movapd %xmm6, %xmm2 5045 ; SSE4-NEXT: movapd %xmm7, %xmm3 5046 ; SSE4-NEXT: retq 5047 ; 5048 ; AVX1-LABEL: test125: 5049 ; AVX1: # %bb.0: # %entry 5050 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 5051 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5052 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5053 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 5054 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5055 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5056 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6 5057 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7 5058 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5059 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5060 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5061 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 5062 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 5063 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5064 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5065 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 5066 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4 5067 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5 5068 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5069 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 5070 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5071 ; AVX1-NEXT: retq 5072 ; 5073 ; AVX2-LABEL: test125: 5074 ; AVX2: # %bb.0: # %entry 5075 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 5076 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5 5077 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 5078 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5079 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5080 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2 5081 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4 5082 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 5083 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5084 ; AVX2-NEXT: retq 5085 ; 5086 ; AVX512F-LABEL: test125: 5087 ; AVX512F: # %bb.0: # %entry 5088 ; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 5089 ; AVX512F-NEXT: retq 5090 entry: 5091 %cmp = icmp ult <8 x i64> %a, %b 5092 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5093 ret <8 x i64> %sel 5094 } 5095 5096 define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) { 5097 ; SSE2-LABEL: test126: 5098 ; SSE2: # %bb.0: # %entry 5099 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 5100 ; SSE2-NEXT: movdqa %xmm0, %xmm9 5101 ; SSE2-NEXT: pxor %xmm8, %xmm9 5102 ; SSE2-NEXT: movdqa %xmm4, %xmm10 5103 ; SSE2-NEXT: pxor %xmm8, %xmm10 5104 ; SSE2-NEXT: movdqa %xmm10, %xmm11 5105 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 5106 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5107 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 5108 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 5109 ; SSE2-NEXT: pand %xmm12, %xmm9 5110 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 5111 ; SSE2-NEXT: por %xmm9, %xmm10 5112 ; SSE2-NEXT: pand %xmm10, %xmm0 5113 ; SSE2-NEXT: pandn %xmm4, %xmm10 5114 ; SSE2-NEXT: por %xmm10, %xmm0 5115 ; SSE2-NEXT: movdqa %xmm1, %xmm9 5116 ; SSE2-NEXT: pxor %xmm8, %xmm9 5117 ; SSE2-NEXT: movdqa %xmm5, %xmm4 5118 ; SSE2-NEXT: pxor %xmm8, %xmm4 5119 ; SSE2-NEXT: movdqa %xmm4, %xmm10 5120 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 5121 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 5122 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 5123 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 5124 ; SSE2-NEXT: pand %xmm11, %xmm9 5125 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 5126 ; SSE2-NEXT: por %xmm9, %xmm4 5127 ; SSE2-NEXT: pand %xmm4, %xmm1 5128 ; SSE2-NEXT: pandn %xmm5, %xmm4 5129 ; SSE2-NEXT: por %xmm4, %xmm1 5130 ; SSE2-NEXT: movdqa %xmm2, %xmm4 5131 ; SSE2-NEXT: pxor %xmm8, %xmm4 5132 ; SSE2-NEXT: movdqa %xmm6, %xmm5 5133 ; SSE2-NEXT: pxor %xmm8, %xmm5 5134 ; SSE2-NEXT: movdqa %xmm5, %xmm9 5135 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 5136 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 5137 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 5138 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 5139 ; SSE2-NEXT: pand %xmm10, %xmm4 5140 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 5141 ; SSE2-NEXT: por %xmm4, %xmm5 5142 ; SSE2-NEXT: pand %xmm5, %xmm2 5143 ; SSE2-NEXT: pandn %xmm6, %xmm5 5144 ; SSE2-NEXT: por %xmm5, %xmm2 5145 ; SSE2-NEXT: movdqa %xmm3, %xmm4 5146 ; SSE2-NEXT: pxor %xmm8, %xmm4 5147 ; SSE2-NEXT: pxor %xmm7, %xmm8 5148 ; SSE2-NEXT: movdqa %xmm8, %xmm5 5149 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 5150 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 5151 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 5152 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 5153 ; SSE2-NEXT: pand %xmm6, %xmm4 5154 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 5155 ; SSE2-NEXT: por %xmm4, %xmm5 5156 ; SSE2-NEXT: pand %xmm5, %xmm3 5157 ; SSE2-NEXT: pandn %xmm7, %xmm5 5158 ; SSE2-NEXT: por %xmm5, %xmm3 5159 ; SSE2-NEXT: retq 5160 ; 5161 ; SSE4-LABEL: test126: 5162 ; SSE4: # %bb.0: # %entry 5163 ; SSE4-NEXT: movdqa %xmm0, %xmm9 5164 ; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 5165 ; SSE4-NEXT: movdqa %xmm0, %xmm10 5166 ; SSE4-NEXT: pxor %xmm8, %xmm10 5167 ; SSE4-NEXT: movdqa %xmm4, %xmm0 5168 ; SSE4-NEXT: pxor %xmm8, %xmm0 5169 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 5170 ; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 5171 ; SSE4-NEXT: movdqa %xmm1, %xmm9 5172 ; SSE4-NEXT: pxor %xmm8, %xmm9 5173 ; SSE4-NEXT: movdqa %xmm5, %xmm0 5174 ; SSE4-NEXT: pxor %xmm8, %xmm0 5175 ; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 5176 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 5177 ; SSE4-NEXT: movdqa %xmm2, %xmm1 5178 ; SSE4-NEXT: pxor %xmm8, %xmm1 5179 ; SSE4-NEXT: movdqa %xmm6, %xmm0 5180 ; SSE4-NEXT: pxor %xmm8, %xmm0 5181 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 5182 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 5183 ; SSE4-NEXT: movdqa %xmm3, %xmm0 5184 ; SSE4-NEXT: pxor %xmm8, %xmm0 5185 ; SSE4-NEXT: pxor %xmm7, %xmm8 5186 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 5187 ; SSE4-NEXT: movdqa %xmm8, %xmm0 5188 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 5189 ; SSE4-NEXT: movapd %xmm4, %xmm0 5190 ; SSE4-NEXT: movapd %xmm5, %xmm1 5191 ; SSE4-NEXT: movapd %xmm6, %xmm2 5192 ; SSE4-NEXT: movapd %xmm7, %xmm3 5193 ; SSE4-NEXT: retq 5194 ; 5195 ; AVX1-LABEL: test126: 5196 ; AVX1: # %bb.0: # %entry 5197 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 5198 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5199 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5200 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 5201 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5202 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5203 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6 5204 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7 5205 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5206 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5207 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5208 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 5209 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 5210 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5211 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5212 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 5213 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4 5214 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5 5215 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5216 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 5217 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5218 ; AVX1-NEXT: retq 5219 ; 5220 ; AVX2-LABEL: test126: 5221 ; AVX2: # %bb.0: # %entry 5222 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 5223 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5 5224 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 5225 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5226 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5227 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2 5228 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4 5229 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 5230 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5231 ; AVX2-NEXT: retq 5232 ; 5233 ; AVX512F-LABEL: test126: 5234 ; AVX512F: # %bb.0: # %entry 5235 ; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 5236 ; AVX512F-NEXT: retq 5237 entry: 5238 %cmp = icmp ule <8 x i64> %a, %b 5239 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5240 ret <8 x i64> %sel 5241 } 5242 5243 define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) { 5244 ; SSE2-LABEL: test127: 5245 ; SSE2: # %bb.0: # %entry 5246 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 5247 ; SSE2-NEXT: movdqa %xmm4, %xmm9 5248 ; SSE2-NEXT: pxor %xmm8, %xmm9 5249 ; SSE2-NEXT: movdqa %xmm0, %xmm10 5250 ; SSE2-NEXT: pxor %xmm8, %xmm10 5251 ; SSE2-NEXT: movdqa %xmm10, %xmm11 5252 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 5253 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5254 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 5255 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 5256 ; SSE2-NEXT: pand %xmm12, %xmm9 5257 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 5258 ; SSE2-NEXT: por %xmm9, %xmm10 5259 ; SSE2-NEXT: pand %xmm10, %xmm0 5260 ; SSE2-NEXT: pandn %xmm4, %xmm10 5261 ; SSE2-NEXT: por %xmm10, %xmm0 5262 ; SSE2-NEXT: movdqa %xmm5, %xmm9 5263 ; SSE2-NEXT: pxor %xmm8, %xmm9 5264 ; SSE2-NEXT: movdqa %xmm1, %xmm4 5265 ; SSE2-NEXT: pxor %xmm8, %xmm4 5266 ; SSE2-NEXT: movdqa %xmm4, %xmm10 5267 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 5268 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 5269 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 5270 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 5271 ; SSE2-NEXT: pand %xmm11, %xmm9 5272 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 5273 ; SSE2-NEXT: por %xmm9, %xmm4 5274 ; SSE2-NEXT: pand %xmm4, %xmm1 5275 ; SSE2-NEXT: pandn %xmm5, %xmm4 5276 ; SSE2-NEXT: por %xmm4, %xmm1 5277 ; SSE2-NEXT: movdqa %xmm6, %xmm4 5278 ; SSE2-NEXT: pxor %xmm8, %xmm4 5279 ; SSE2-NEXT: movdqa %xmm2, %xmm5 5280 ; SSE2-NEXT: pxor %xmm8, %xmm5 5281 ; SSE2-NEXT: movdqa %xmm5, %xmm9 5282 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 5283 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 5284 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 5285 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 5286 ; SSE2-NEXT: pand %xmm10, %xmm4 5287 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 5288 ; SSE2-NEXT: por %xmm4, %xmm5 5289 ; SSE2-NEXT: pand %xmm5, %xmm2 5290 ; SSE2-NEXT: pandn %xmm6, %xmm5 5291 ; SSE2-NEXT: por %xmm5, %xmm2 5292 ; SSE2-NEXT: movdqa %xmm7, %xmm4 5293 ; SSE2-NEXT: pxor %xmm8, %xmm4 5294 ; SSE2-NEXT: pxor %xmm3, %xmm8 5295 ; SSE2-NEXT: movdqa %xmm8, %xmm5 5296 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 5297 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 5298 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 5299 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 5300 ; SSE2-NEXT: pand %xmm6, %xmm4 5301 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 5302 ; SSE2-NEXT: por %xmm4, %xmm5 5303 ; SSE2-NEXT: pand %xmm5, %xmm3 5304 ; SSE2-NEXT: pandn %xmm7, %xmm5 5305 ; SSE2-NEXT: por %xmm5, %xmm3 5306 ; SSE2-NEXT: retq 5307 ; 5308 ; SSE4-LABEL: test127: 5309 ; SSE4: # %bb.0: # %entry 5310 ; SSE4-NEXT: movdqa %xmm0, %xmm9 5311 ; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 5312 ; SSE4-NEXT: movdqa %xmm4, %xmm10 5313 ; SSE4-NEXT: pxor %xmm8, %xmm10 5314 ; SSE4-NEXT: pxor %xmm8, %xmm0 5315 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 5316 ; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 5317 ; SSE4-NEXT: movdqa %xmm5, %xmm9 5318 ; SSE4-NEXT: pxor %xmm8, %xmm9 5319 ; SSE4-NEXT: movdqa %xmm1, %xmm0 5320 ; SSE4-NEXT: pxor %xmm8, %xmm0 5321 ; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 5322 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 5323 ; SSE4-NEXT: movdqa %xmm6, %xmm1 5324 ; SSE4-NEXT: pxor %xmm8, %xmm1 5325 ; SSE4-NEXT: movdqa %xmm2, %xmm0 5326 ; SSE4-NEXT: pxor %xmm8, %xmm0 5327 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 5328 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 5329 ; SSE4-NEXT: movdqa %xmm7, %xmm0 5330 ; SSE4-NEXT: pxor %xmm8, %xmm0 5331 ; SSE4-NEXT: pxor %xmm3, %xmm8 5332 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 5333 ; SSE4-NEXT: movdqa %xmm8, %xmm0 5334 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 5335 ; SSE4-NEXT: movapd %xmm4, %xmm0 5336 ; SSE4-NEXT: movapd %xmm5, %xmm1 5337 ; SSE4-NEXT: movapd %xmm6, %xmm2 5338 ; SSE4-NEXT: movapd %xmm7, %xmm3 5339 ; SSE4-NEXT: retq 5340 ; 5341 ; AVX1-LABEL: test127: 5342 ; AVX1: # %bb.0: # %entry 5343 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5344 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5345 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5346 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5347 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5348 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5349 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm6 5350 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7 5351 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5352 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5353 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5354 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5355 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 5356 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5357 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5358 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 5359 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm4 5360 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5 5361 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5362 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 5363 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5364 ; AVX1-NEXT: retq 5365 ; 5366 ; AVX2-LABEL: test127: 5367 ; AVX2: # %bb.0: # %entry 5368 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 5369 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm5 5370 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 5371 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5372 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5373 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm2 5374 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm4 5375 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 5376 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5377 ; AVX2-NEXT: retq 5378 ; 5379 ; AVX512F-LABEL: test127: 5380 ; AVX512F: # %bb.0: # %entry 5381 ; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 5382 ; AVX512F-NEXT: retq 5383 entry: 5384 %cmp = icmp ugt <8 x i64> %a, %b 5385 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5386 ret <8 x i64> %sel 5387 } 5388 5389 define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) { 5390 ; SSE2-LABEL: test128: 5391 ; SSE2: # %bb.0: # %entry 5392 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 5393 ; SSE2-NEXT: movdqa %xmm4, %xmm9 5394 ; SSE2-NEXT: pxor %xmm8, %xmm9 5395 ; SSE2-NEXT: movdqa %xmm0, %xmm10 5396 ; SSE2-NEXT: pxor %xmm8, %xmm10 5397 ; SSE2-NEXT: movdqa %xmm10, %xmm11 5398 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 5399 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5400 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 5401 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 5402 ; SSE2-NEXT: pand %xmm12, %xmm9 5403 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 5404 ; SSE2-NEXT: por %xmm9, %xmm10 5405 ; SSE2-NEXT: pand %xmm10, %xmm0 5406 ; SSE2-NEXT: pandn %xmm4, %xmm10 5407 ; SSE2-NEXT: por %xmm10, %xmm0 5408 ; SSE2-NEXT: movdqa %xmm5, %xmm9 5409 ; SSE2-NEXT: pxor %xmm8, %xmm9 5410 ; SSE2-NEXT: movdqa %xmm1, %xmm4 5411 ; SSE2-NEXT: pxor %xmm8, %xmm4 5412 ; SSE2-NEXT: movdqa %xmm4, %xmm10 5413 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 5414 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 5415 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 5416 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 5417 ; SSE2-NEXT: pand %xmm11, %xmm9 5418 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 5419 ; SSE2-NEXT: por %xmm9, %xmm4 5420 ; SSE2-NEXT: pand %xmm4, %xmm1 5421 ; SSE2-NEXT: pandn %xmm5, %xmm4 5422 ; SSE2-NEXT: por %xmm4, %xmm1 5423 ; SSE2-NEXT: movdqa %xmm6, %xmm4 5424 ; SSE2-NEXT: pxor %xmm8, %xmm4 5425 ; SSE2-NEXT: movdqa %xmm2, %xmm5 5426 ; SSE2-NEXT: pxor %xmm8, %xmm5 5427 ; SSE2-NEXT: movdqa %xmm5, %xmm9 5428 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 5429 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 5430 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 5431 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 5432 ; SSE2-NEXT: pand %xmm10, %xmm4 5433 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 5434 ; SSE2-NEXT: por %xmm4, %xmm5 5435 ; SSE2-NEXT: pand %xmm5, %xmm2 5436 ; SSE2-NEXT: pandn %xmm6, %xmm5 5437 ; SSE2-NEXT: por %xmm5, %xmm2 5438 ; SSE2-NEXT: movdqa %xmm7, %xmm4 5439 ; SSE2-NEXT: pxor %xmm8, %xmm4 5440 ; SSE2-NEXT: pxor %xmm3, %xmm8 5441 ; SSE2-NEXT: movdqa %xmm8, %xmm5 5442 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 5443 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 5444 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 5445 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 5446 ; SSE2-NEXT: pand %xmm6, %xmm4 5447 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 5448 ; SSE2-NEXT: por %xmm4, %xmm5 5449 ; SSE2-NEXT: pand %xmm5, %xmm3 5450 ; SSE2-NEXT: pandn %xmm7, %xmm5 5451 ; SSE2-NEXT: por %xmm5, %xmm3 5452 ; SSE2-NEXT: retq 5453 ; 5454 ; SSE4-LABEL: test128: 5455 ; SSE4: # %bb.0: # %entry 5456 ; SSE4-NEXT: movdqa %xmm0, %xmm9 5457 ; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 5458 ; SSE4-NEXT: movdqa %xmm4, %xmm10 5459 ; SSE4-NEXT: pxor %xmm8, %xmm10 5460 ; SSE4-NEXT: pxor %xmm8, %xmm0 5461 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 5462 ; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 5463 ; SSE4-NEXT: movdqa %xmm5, %xmm9 5464 ; SSE4-NEXT: pxor %xmm8, %xmm9 5465 ; SSE4-NEXT: movdqa %xmm1, %xmm0 5466 ; SSE4-NEXT: pxor %xmm8, %xmm0 5467 ; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 5468 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 5469 ; SSE4-NEXT: movdqa %xmm6, %xmm1 5470 ; SSE4-NEXT: pxor %xmm8, %xmm1 5471 ; SSE4-NEXT: movdqa %xmm2, %xmm0 5472 ; SSE4-NEXT: pxor %xmm8, %xmm0 5473 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 5474 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 5475 ; SSE4-NEXT: movdqa %xmm7, %xmm0 5476 ; SSE4-NEXT: pxor %xmm8, %xmm0 5477 ; SSE4-NEXT: pxor %xmm3, %xmm8 5478 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 5479 ; SSE4-NEXT: movdqa %xmm8, %xmm0 5480 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 5481 ; SSE4-NEXT: movapd %xmm4, %xmm0 5482 ; SSE4-NEXT: movapd %xmm5, %xmm1 5483 ; SSE4-NEXT: movapd %xmm6, %xmm2 5484 ; SSE4-NEXT: movapd %xmm7, %xmm3 5485 ; SSE4-NEXT: retq 5486 ; 5487 ; AVX1-LABEL: test128: 5488 ; AVX1: # %bb.0: # %entry 5489 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5490 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5491 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5492 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5493 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5494 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5495 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm6 5496 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7 5497 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5498 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5499 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5500 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5501 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 5502 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5503 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5504 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 5505 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm4 5506 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5 5507 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5508 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 5509 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5510 ; AVX1-NEXT: retq 5511 ; 5512 ; AVX2-LABEL: test128: 5513 ; AVX2: # %bb.0: # %entry 5514 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 5515 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm5 5516 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 5517 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5518 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5519 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm2 5520 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm4 5521 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 5522 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5523 ; AVX2-NEXT: retq 5524 ; 5525 ; AVX512F-LABEL: test128: 5526 ; AVX512F: # %bb.0: # %entry 5527 ; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 5528 ; AVX512F-NEXT: retq 5529 entry: 5530 %cmp = icmp uge <8 x i64> %a, %b 5531 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5532 ret <8 x i64> %sel 5533 } 5534 5535 define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) { 5536 ; SSE2-LABEL: test129: 5537 ; SSE2: # %bb.0: # %entry 5538 ; SSE2-NEXT: movdqa %xmm0, %xmm8 5539 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm8 5540 ; SSE2-NEXT: pand %xmm8, %xmm0 5541 ; SSE2-NEXT: pandn %xmm4, %xmm8 5542 ; SSE2-NEXT: por %xmm0, %xmm8 5543 ; SSE2-NEXT: movdqa %xmm1, %xmm4 5544 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm4 5545 ; SSE2-NEXT: pand %xmm4, %xmm1 5546 ; SSE2-NEXT: pandn %xmm5, %xmm4 5547 ; SSE2-NEXT: por %xmm1, %xmm4 5548 ; SSE2-NEXT: movdqa %xmm2, %xmm5 5549 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm5 5550 ; SSE2-NEXT: pand %xmm5, %xmm2 5551 ; SSE2-NEXT: pandn %xmm6, %xmm5 5552 ; SSE2-NEXT: por %xmm2, %xmm5 5553 ; SSE2-NEXT: movdqa %xmm3, %xmm6 5554 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm6 5555 ; SSE2-NEXT: pand %xmm6, %xmm3 5556 ; SSE2-NEXT: pandn %xmm7, %xmm6 5557 ; SSE2-NEXT: por %xmm3, %xmm6 5558 ; SSE2-NEXT: movdqa %xmm8, %xmm0 5559 ; SSE2-NEXT: movdqa %xmm4, %xmm1 5560 ; SSE2-NEXT: movdqa %xmm5, %xmm2 5561 ; SSE2-NEXT: movdqa %xmm6, %xmm3 5562 ; SSE2-NEXT: retq 5563 ; 5564 ; SSE4-LABEL: test129: 5565 ; SSE4: # %bb.0: # %entry 5566 ; SSE4-NEXT: pmaxsb %xmm4, %xmm0 5567 ; SSE4-NEXT: pmaxsb %xmm5, %xmm1 5568 ; SSE4-NEXT: pmaxsb %xmm6, %xmm2 5569 ; SSE4-NEXT: pmaxsb %xmm7, %xmm3 5570 ; SSE4-NEXT: retq 5571 ; 5572 ; AVX1-LABEL: test129: 5573 ; AVX1: # %bb.0: # %entry 5574 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5575 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5576 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 5577 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 5578 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5579 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5580 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5581 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 5582 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 5583 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5584 ; AVX1-NEXT: retq 5585 ; 5586 ; AVX2-LABEL: test129: 5587 ; AVX2: # %bb.0: # %entry 5588 ; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 5589 ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 5590 ; AVX2-NEXT: retq 5591 ; 5592 ; AVX512BW-LABEL: test129: 5593 ; AVX512BW: # %bb.0: # %entry 5594 ; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 5595 ; AVX512BW-NEXT: retq 5596 entry: 5597 %cmp = icmp slt <64 x i8> %a, %b 5598 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5599 ret <64 x i8> %sel 5600 } 5601 5602 define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) { 5603 ; SSE2-LABEL: test130: 5604 ; SSE2: # %bb.0: # %entry 5605 ; SSE2-NEXT: movdqa %xmm0, %xmm8 5606 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm8 5607 ; SSE2-NEXT: pand %xmm8, %xmm0 5608 ; SSE2-NEXT: pandn %xmm4, %xmm8 5609 ; SSE2-NEXT: por %xmm0, %xmm8 5610 ; SSE2-NEXT: movdqa %xmm1, %xmm4 5611 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm4 5612 ; SSE2-NEXT: pand %xmm4, %xmm1 5613 ; SSE2-NEXT: pandn %xmm5, %xmm4 5614 ; SSE2-NEXT: por %xmm1, %xmm4 5615 ; SSE2-NEXT: movdqa %xmm2, %xmm5 5616 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm5 5617 ; SSE2-NEXT: pand %xmm5, %xmm2 5618 ; SSE2-NEXT: pandn %xmm6, %xmm5 5619 ; SSE2-NEXT: por %xmm2, %xmm5 5620 ; SSE2-NEXT: movdqa %xmm3, %xmm6 5621 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm6 5622 ; SSE2-NEXT: pand %xmm6, %xmm3 5623 ; SSE2-NEXT: pandn %xmm7, %xmm6 5624 ; SSE2-NEXT: por %xmm3, %xmm6 5625 ; SSE2-NEXT: movdqa %xmm8, %xmm0 5626 ; SSE2-NEXT: movdqa %xmm4, %xmm1 5627 ; SSE2-NEXT: movdqa %xmm5, %xmm2 5628 ; SSE2-NEXT: movdqa %xmm6, %xmm3 5629 ; SSE2-NEXT: retq 5630 ; 5631 ; SSE4-LABEL: test130: 5632 ; SSE4: # %bb.0: # %entry 5633 ; SSE4-NEXT: pmaxsb %xmm4, %xmm0 5634 ; SSE4-NEXT: pmaxsb %xmm5, %xmm1 5635 ; SSE4-NEXT: pmaxsb %xmm6, %xmm2 5636 ; SSE4-NEXT: pmaxsb %xmm7, %xmm3 5637 ; SSE4-NEXT: retq 5638 ; 5639 ; AVX1-LABEL: test130: 5640 ; AVX1: # %bb.0: # %entry 5641 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5642 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5643 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 5644 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 5645 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5646 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5647 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5648 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 5649 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 5650 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5651 ; AVX1-NEXT: retq 5652 ; 5653 ; AVX2-LABEL: test130: 5654 ; AVX2: # %bb.0: # %entry 5655 ; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 5656 ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 5657 ; AVX2-NEXT: retq 5658 ; 5659 ; AVX512BW-LABEL: test130: 5660 ; AVX512BW: # %bb.0: # %entry 5661 ; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 5662 ; AVX512BW-NEXT: retq 5663 entry: 5664 %cmp = icmp sle <64 x i8> %a, %b 5665 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5666 ret <64 x i8> %sel 5667 } 5668 5669 define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) { 5670 ; SSE2-LABEL: test131: 5671 ; SSE2: # %bb.0: # %entry 5672 ; SSE2-NEXT: movdqa %xmm4, %xmm8 5673 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm8 5674 ; SSE2-NEXT: pand %xmm8, %xmm0 5675 ; SSE2-NEXT: pandn %xmm4, %xmm8 5676 ; SSE2-NEXT: por %xmm8, %xmm0 5677 ; SSE2-NEXT: movdqa %xmm5, %xmm4 5678 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 5679 ; SSE2-NEXT: pand %xmm4, %xmm1 5680 ; SSE2-NEXT: pandn %xmm5, %xmm4 5681 ; SSE2-NEXT: por %xmm4, %xmm1 5682 ; SSE2-NEXT: movdqa %xmm6, %xmm4 5683 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 5684 ; SSE2-NEXT: pand %xmm4, %xmm2 5685 ; SSE2-NEXT: pandn %xmm6, %xmm4 5686 ; SSE2-NEXT: por %xmm4, %xmm2 5687 ; SSE2-NEXT: movdqa %xmm7, %xmm4 5688 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 5689 ; SSE2-NEXT: pand %xmm4, %xmm3 5690 ; SSE2-NEXT: pandn %xmm7, %xmm4 5691 ; SSE2-NEXT: por %xmm4, %xmm3 5692 ; SSE2-NEXT: retq 5693 ; 5694 ; SSE4-LABEL: test131: 5695 ; SSE4: # %bb.0: # %entry 5696 ; SSE4-NEXT: pminsb %xmm4, %xmm0 5697 ; SSE4-NEXT: pminsb %xmm5, %xmm1 5698 ; SSE4-NEXT: pminsb %xmm6, %xmm2 5699 ; SSE4-NEXT: pminsb %xmm7, %xmm3 5700 ; SSE4-NEXT: retq 5701 ; 5702 ; AVX1-LABEL: test131: 5703 ; AVX1: # %bb.0: # %entry 5704 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5705 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5706 ; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 5707 ; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 5708 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5709 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5710 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5711 ; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 5712 ; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 5713 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5714 ; AVX1-NEXT: retq 5715 ; 5716 ; AVX2-LABEL: test131: 5717 ; AVX2: # %bb.0: # %entry 5718 ; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 5719 ; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 5720 ; AVX2-NEXT: retq 5721 ; 5722 ; AVX512BW-LABEL: test131: 5723 ; AVX512BW: # %bb.0: # %entry 5724 ; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 5725 ; AVX512BW-NEXT: retq 5726 entry: 5727 %cmp = icmp sgt <64 x i8> %a, %b 5728 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5729 ret <64 x i8> %sel 5730 } 5731 5732 define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) { 5733 ; SSE2-LABEL: test132: 5734 ; SSE2: # %bb.0: # %entry 5735 ; SSE2-NEXT: movdqa %xmm4, %xmm8 5736 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm8 5737 ; SSE2-NEXT: pand %xmm8, %xmm0 5738 ; SSE2-NEXT: pandn %xmm4, %xmm8 5739 ; SSE2-NEXT: por %xmm8, %xmm0 5740 ; SSE2-NEXT: movdqa %xmm5, %xmm4 5741 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 5742 ; SSE2-NEXT: pand %xmm4, %xmm1 5743 ; SSE2-NEXT: pandn %xmm5, %xmm4 5744 ; SSE2-NEXT: por %xmm4, %xmm1 5745 ; SSE2-NEXT: movdqa %xmm6, %xmm4 5746 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 5747 ; SSE2-NEXT: pand %xmm4, %xmm2 5748 ; SSE2-NEXT: pandn %xmm6, %xmm4 5749 ; SSE2-NEXT: por %xmm4, %xmm2 5750 ; SSE2-NEXT: movdqa %xmm7, %xmm4 5751 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 5752 ; SSE2-NEXT: pand %xmm4, %xmm3 5753 ; SSE2-NEXT: pandn %xmm7, %xmm4 5754 ; SSE2-NEXT: por %xmm4, %xmm3 5755 ; SSE2-NEXT: retq 5756 ; 5757 ; SSE4-LABEL: test132: 5758 ; SSE4: # %bb.0: # %entry 5759 ; SSE4-NEXT: pminsb %xmm4, %xmm0 5760 ; SSE4-NEXT: pminsb %xmm5, %xmm1 5761 ; SSE4-NEXT: pminsb %xmm6, %xmm2 5762 ; SSE4-NEXT: pminsb %xmm7, %xmm3 5763 ; SSE4-NEXT: retq 5764 ; 5765 ; AVX1-LABEL: test132: 5766 ; AVX1: # %bb.0: # %entry 5767 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5768 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5769 ; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 5770 ; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 5771 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5772 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5773 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5774 ; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 5775 ; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 5776 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5777 ; AVX1-NEXT: retq 5778 ; 5779 ; AVX2-LABEL: test132: 5780 ; AVX2: # %bb.0: # %entry 5781 ; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 5782 ; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 5783 ; AVX2-NEXT: retq 5784 ; 5785 ; AVX512BW-LABEL: test132: 5786 ; AVX512BW: # %bb.0: # %entry 5787 ; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 5788 ; AVX512BW-NEXT: retq 5789 entry: 5790 %cmp = icmp sge <64 x i8> %a, %b 5791 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5792 ret <64 x i8> %sel 5793 } 5794 5795 define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) { 5796 ; SSE-LABEL: test133: 5797 ; SSE: # %bb.0: # %entry 5798 ; SSE-NEXT: pmaxub %xmm4, %xmm0 5799 ; SSE-NEXT: pmaxub %xmm5, %xmm1 5800 ; SSE-NEXT: pmaxub %xmm6, %xmm2 5801 ; SSE-NEXT: pmaxub %xmm7, %xmm3 5802 ; SSE-NEXT: retq 5803 ; 5804 ; AVX1-LABEL: test133: 5805 ; AVX1: # %bb.0: # %entry 5806 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5807 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5808 ; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 5809 ; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 5810 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5811 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5812 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5813 ; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 5814 ; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 5815 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5816 ; AVX1-NEXT: retq 5817 ; 5818 ; AVX2-LABEL: test133: 5819 ; AVX2: # %bb.0: # %entry 5820 ; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 5821 ; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 5822 ; AVX2-NEXT: retq 5823 ; 5824 ; AVX512BW-LABEL: test133: 5825 ; AVX512BW: # %bb.0: # %entry 5826 ; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 5827 ; AVX512BW-NEXT: retq 5828 entry: 5829 %cmp = icmp ult <64 x i8> %a, %b 5830 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5831 ret <64 x i8> %sel 5832 } 5833 5834 define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) { 5835 ; SSE-LABEL: test134: 5836 ; SSE: # %bb.0: # %entry 5837 ; SSE-NEXT: pmaxub %xmm4, %xmm0 5838 ; SSE-NEXT: pmaxub %xmm5, %xmm1 5839 ; SSE-NEXT: pmaxub %xmm6, %xmm2 5840 ; SSE-NEXT: pmaxub %xmm7, %xmm3 5841 ; SSE-NEXT: retq 5842 ; 5843 ; AVX1-LABEL: test134: 5844 ; AVX1: # %bb.0: # %entry 5845 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5846 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5847 ; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 5848 ; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 5849 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5850 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5851 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5852 ; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 5853 ; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 5854 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5855 ; AVX1-NEXT: retq 5856 ; 5857 ; AVX2-LABEL: test134: 5858 ; AVX2: # %bb.0: # %entry 5859 ; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 5860 ; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 5861 ; AVX2-NEXT: retq 5862 ; 5863 ; AVX512BW-LABEL: test134: 5864 ; AVX512BW: # %bb.0: # %entry 5865 ; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 5866 ; AVX512BW-NEXT: retq 5867 entry: 5868 %cmp = icmp ule <64 x i8> %a, %b 5869 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5870 ret <64 x i8> %sel 5871 } 5872 5873 define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) { 5874 ; SSE-LABEL: test135: 5875 ; SSE: # %bb.0: # %entry 5876 ; SSE-NEXT: pminub %xmm4, %xmm0 5877 ; SSE-NEXT: pminub %xmm5, %xmm1 5878 ; SSE-NEXT: pminub %xmm6, %xmm2 5879 ; SSE-NEXT: pminub %xmm7, %xmm3 5880 ; SSE-NEXT: retq 5881 ; 5882 ; AVX1-LABEL: test135: 5883 ; AVX1: # %bb.0: # %entry 5884 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5885 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5886 ; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 5887 ; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 5888 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5889 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5890 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5891 ; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 5892 ; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 5893 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5894 ; AVX1-NEXT: retq 5895 ; 5896 ; AVX2-LABEL: test135: 5897 ; AVX2: # %bb.0: # %entry 5898 ; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 5899 ; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 5900 ; AVX2-NEXT: retq 5901 ; 5902 ; AVX512BW-LABEL: test135: 5903 ; AVX512BW: # %bb.0: # %entry 5904 ; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 5905 ; AVX512BW-NEXT: retq 5906 entry: 5907 %cmp = icmp ugt <64 x i8> %a, %b 5908 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5909 ret <64 x i8> %sel 5910 } 5911 5912 define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) { 5913 ; SSE-LABEL: test136: 5914 ; SSE: # %bb.0: # %entry 5915 ; SSE-NEXT: pminub %xmm4, %xmm0 5916 ; SSE-NEXT: pminub %xmm5, %xmm1 5917 ; SSE-NEXT: pminub %xmm6, %xmm2 5918 ; SSE-NEXT: pminub %xmm7, %xmm3 5919 ; SSE-NEXT: retq 5920 ; 5921 ; AVX1-LABEL: test136: 5922 ; AVX1: # %bb.0: # %entry 5923 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5924 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5925 ; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 5926 ; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 5927 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5928 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5929 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5930 ; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 5931 ; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 5932 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5933 ; AVX1-NEXT: retq 5934 ; 5935 ; AVX2-LABEL: test136: 5936 ; AVX2: # %bb.0: # %entry 5937 ; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 5938 ; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 5939 ; AVX2-NEXT: retq 5940 ; 5941 ; AVX512BW-LABEL: test136: 5942 ; AVX512BW: # %bb.0: # %entry 5943 ; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 5944 ; AVX512BW-NEXT: retq 5945 entry: 5946 %cmp = icmp uge <64 x i8> %a, %b 5947 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5948 ret <64 x i8> %sel 5949 } 5950 5951 define <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) { 5952 ; SSE-LABEL: test137: 5953 ; SSE: # %bb.0: # %entry 5954 ; SSE-NEXT: pmaxsw %xmm4, %xmm0 5955 ; SSE-NEXT: pmaxsw %xmm5, %xmm1 5956 ; SSE-NEXT: pmaxsw %xmm6, %xmm2 5957 ; SSE-NEXT: pmaxsw %xmm7, %xmm3 5958 ; SSE-NEXT: retq 5959 ; 5960 ; AVX1-LABEL: test137: 5961 ; AVX1: # %bb.0: # %entry 5962 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5963 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5964 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 5965 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 5966 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5967 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5968 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5969 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 5970 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 5971 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5972 ; AVX1-NEXT: retq 5973 ; 5974 ; AVX2-LABEL: test137: 5975 ; AVX2: # %bb.0: # %entry 5976 ; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 5977 ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 5978 ; AVX2-NEXT: retq 5979 ; 5980 ; AVX512BW-LABEL: test137: 5981 ; AVX512BW: # %bb.0: # %entry 5982 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 5983 ; AVX512BW-NEXT: retq 5984 entry: 5985 %cmp = icmp slt <32 x i16> %a, %b 5986 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 5987 ret <32 x i16> %sel 5988 } 5989 5990 define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) { 5991 ; SSE-LABEL: test138: 5992 ; SSE: # %bb.0: # %entry 5993 ; SSE-NEXT: pmaxsw %xmm4, %xmm0 5994 ; SSE-NEXT: pmaxsw %xmm5, %xmm1 5995 ; SSE-NEXT: pmaxsw %xmm6, %xmm2 5996 ; SSE-NEXT: pmaxsw %xmm7, %xmm3 5997 ; SSE-NEXT: retq 5998 ; 5999 ; AVX1-LABEL: test138: 6000 ; AVX1: # %bb.0: # %entry 6001 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6002 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6003 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 6004 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 6005 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6006 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6007 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6008 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 6009 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 6010 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6011 ; AVX1-NEXT: retq 6012 ; 6013 ; AVX2-LABEL: test138: 6014 ; AVX2: # %bb.0: # %entry 6015 ; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 6016 ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 6017 ; AVX2-NEXT: retq 6018 ; 6019 ; AVX512BW-LABEL: test138: 6020 ; AVX512BW: # %bb.0: # %entry 6021 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 6022 ; AVX512BW-NEXT: retq 6023 entry: 6024 %cmp = icmp sle <32 x i16> %a, %b 6025 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6026 ret <32 x i16> %sel 6027 } 6028 6029 define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) { 6030 ; SSE-LABEL: test139: 6031 ; SSE: # %bb.0: # %entry 6032 ; SSE-NEXT: pminsw %xmm4, %xmm0 6033 ; SSE-NEXT: pminsw %xmm5, %xmm1 6034 ; SSE-NEXT: pminsw %xmm6, %xmm2 6035 ; SSE-NEXT: pminsw %xmm7, %xmm3 6036 ; SSE-NEXT: retq 6037 ; 6038 ; AVX1-LABEL: test139: 6039 ; AVX1: # %bb.0: # %entry 6040 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6041 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6042 ; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 6043 ; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 6044 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6045 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6046 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6047 ; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 6048 ; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 6049 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6050 ; AVX1-NEXT: retq 6051 ; 6052 ; AVX2-LABEL: test139: 6053 ; AVX2: # %bb.0: # %entry 6054 ; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 6055 ; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 6056 ; AVX2-NEXT: retq 6057 ; 6058 ; AVX512BW-LABEL: test139: 6059 ; AVX512BW: # %bb.0: # %entry 6060 ; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 6061 ; AVX512BW-NEXT: retq 6062 entry: 6063 %cmp = icmp sgt <32 x i16> %a, %b 6064 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6065 ret <32 x i16> %sel 6066 } 6067 6068 define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) { 6069 ; SSE-LABEL: test140: 6070 ; SSE: # %bb.0: # %entry 6071 ; SSE-NEXT: pminsw %xmm4, %xmm0 6072 ; SSE-NEXT: pminsw %xmm5, %xmm1 6073 ; SSE-NEXT: pminsw %xmm6, %xmm2 6074 ; SSE-NEXT: pminsw %xmm7, %xmm3 6075 ; SSE-NEXT: retq 6076 ; 6077 ; AVX1-LABEL: test140: 6078 ; AVX1: # %bb.0: # %entry 6079 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6080 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6081 ; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 6082 ; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 6083 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6084 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6085 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6086 ; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 6087 ; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 6088 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6089 ; AVX1-NEXT: retq 6090 ; 6091 ; AVX2-LABEL: test140: 6092 ; AVX2: # %bb.0: # %entry 6093 ; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 6094 ; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 6095 ; AVX2-NEXT: retq 6096 ; 6097 ; AVX512BW-LABEL: test140: 6098 ; AVX512BW: # %bb.0: # %entry 6099 ; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 6100 ; AVX512BW-NEXT: retq 6101 entry: 6102 %cmp = icmp sge <32 x i16> %a, %b 6103 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6104 ret <32 x i16> %sel 6105 } 6106 6107 define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) { 6108 ; SSE2-LABEL: test141: 6109 ; SSE2: # %bb.0: # %entry 6110 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768] 6111 ; SSE2-NEXT: pxor %xmm8, %xmm4 6112 ; SSE2-NEXT: pxor %xmm8, %xmm0 6113 ; SSE2-NEXT: pmaxsw %xmm4, %xmm0 6114 ; SSE2-NEXT: pxor %xmm8, %xmm0 6115 ; SSE2-NEXT: pxor %xmm8, %xmm5 6116 ; SSE2-NEXT: pxor %xmm8, %xmm1 6117 ; SSE2-NEXT: pmaxsw %xmm5, %xmm1 6118 ; SSE2-NEXT: pxor %xmm8, %xmm1 6119 ; SSE2-NEXT: pxor %xmm8, %xmm6 6120 ; SSE2-NEXT: pxor %xmm8, %xmm2 6121 ; SSE2-NEXT: pmaxsw %xmm6, %xmm2 6122 ; SSE2-NEXT: pxor %xmm8, %xmm2 6123 ; SSE2-NEXT: pxor %xmm8, %xmm7 6124 ; SSE2-NEXT: pxor %xmm8, %xmm3 6125 ; SSE2-NEXT: pmaxsw %xmm7, %xmm3 6126 ; SSE2-NEXT: pxor %xmm8, %xmm3 6127 ; SSE2-NEXT: retq 6128 ; 6129 ; SSE4-LABEL: test141: 6130 ; SSE4: # %bb.0: # %entry 6131 ; SSE4-NEXT: pmaxuw %xmm4, %xmm0 6132 ; SSE4-NEXT: pmaxuw %xmm5, %xmm1 6133 ; SSE4-NEXT: pmaxuw %xmm6, %xmm2 6134 ; SSE4-NEXT: pmaxuw %xmm7, %xmm3 6135 ; SSE4-NEXT: retq 6136 ; 6137 ; AVX1-LABEL: test141: 6138 ; AVX1: # %bb.0: # %entry 6139 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6140 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6141 ; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 6142 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 6143 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6144 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6145 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6146 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 6147 ; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 6148 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6149 ; AVX1-NEXT: retq 6150 ; 6151 ; AVX2-LABEL: test141: 6152 ; AVX2: # %bb.0: # %entry 6153 ; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 6154 ; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 6155 ; AVX2-NEXT: retq 6156 ; 6157 ; AVX512BW-LABEL: test141: 6158 ; AVX512BW: # %bb.0: # %entry 6159 ; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 6160 ; AVX512BW-NEXT: retq 6161 entry: 6162 %cmp = icmp ult <32 x i16> %a, %b 6163 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6164 ret <32 x i16> %sel 6165 } 6166 6167 define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) { 6168 ; SSE2-LABEL: test142: 6169 ; SSE2: # %bb.0: # %entry 6170 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768] 6171 ; SSE2-NEXT: pxor %xmm8, %xmm4 6172 ; SSE2-NEXT: pxor %xmm8, %xmm0 6173 ; SSE2-NEXT: pmaxsw %xmm4, %xmm0 6174 ; SSE2-NEXT: pxor %xmm8, %xmm0 6175 ; SSE2-NEXT: pxor %xmm8, %xmm5 6176 ; SSE2-NEXT: pxor %xmm8, %xmm1 6177 ; SSE2-NEXT: pmaxsw %xmm5, %xmm1 6178 ; SSE2-NEXT: pxor %xmm8, %xmm1 6179 ; SSE2-NEXT: pxor %xmm8, %xmm6 6180 ; SSE2-NEXT: pxor %xmm8, %xmm2 6181 ; SSE2-NEXT: pmaxsw %xmm6, %xmm2 6182 ; SSE2-NEXT: pxor %xmm8, %xmm2 6183 ; SSE2-NEXT: pxor %xmm8, %xmm7 6184 ; SSE2-NEXT: pxor %xmm8, %xmm3 6185 ; SSE2-NEXT: pmaxsw %xmm7, %xmm3 6186 ; SSE2-NEXT: pxor %xmm8, %xmm3 6187 ; SSE2-NEXT: retq 6188 ; 6189 ; SSE4-LABEL: test142: 6190 ; SSE4: # %bb.0: # %entry 6191 ; SSE4-NEXT: pmaxuw %xmm4, %xmm0 6192 ; SSE4-NEXT: pmaxuw %xmm5, %xmm1 6193 ; SSE4-NEXT: pmaxuw %xmm6, %xmm2 6194 ; SSE4-NEXT: pmaxuw %xmm7, %xmm3 6195 ; SSE4-NEXT: retq 6196 ; 6197 ; AVX1-LABEL: test142: 6198 ; AVX1: # %bb.0: # %entry 6199 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6200 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6201 ; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 6202 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 6203 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6204 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6205 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6206 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 6207 ; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 6208 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6209 ; AVX1-NEXT: retq 6210 ; 6211 ; AVX2-LABEL: test142: 6212 ; AVX2: # %bb.0: # %entry 6213 ; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 6214 ; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 6215 ; AVX2-NEXT: retq 6216 ; 6217 ; AVX512BW-LABEL: test142: 6218 ; AVX512BW: # %bb.0: # %entry 6219 ; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 6220 ; AVX512BW-NEXT: retq 6221 entry: 6222 %cmp = icmp ule <32 x i16> %a, %b 6223 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6224 ret <32 x i16> %sel 6225 } 6226 6227 define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) { 6228 ; SSE2-LABEL: test143: 6229 ; SSE2: # %bb.0: # %entry 6230 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768] 6231 ; SSE2-NEXT: pxor %xmm8, %xmm4 6232 ; SSE2-NEXT: pxor %xmm8, %xmm0 6233 ; SSE2-NEXT: pminsw %xmm4, %xmm0 6234 ; SSE2-NEXT: pxor %xmm8, %xmm0 6235 ; SSE2-NEXT: pxor %xmm8, %xmm5 6236 ; SSE2-NEXT: pxor %xmm8, %xmm1 6237 ; SSE2-NEXT: pminsw %xmm5, %xmm1 6238 ; SSE2-NEXT: pxor %xmm8, %xmm1 6239 ; SSE2-NEXT: pxor %xmm8, %xmm6 6240 ; SSE2-NEXT: pxor %xmm8, %xmm2 6241 ; SSE2-NEXT: pminsw %xmm6, %xmm2 6242 ; SSE2-NEXT: pxor %xmm8, %xmm2 6243 ; SSE2-NEXT: pxor %xmm8, %xmm7 6244 ; SSE2-NEXT: pxor %xmm8, %xmm3 6245 ; SSE2-NEXT: pminsw %xmm7, %xmm3 6246 ; SSE2-NEXT: pxor %xmm8, %xmm3 6247 ; SSE2-NEXT: retq 6248 ; 6249 ; SSE4-LABEL: test143: 6250 ; SSE4: # %bb.0: # %entry 6251 ; SSE4-NEXT: pminuw %xmm4, %xmm0 6252 ; SSE4-NEXT: pminuw %xmm5, %xmm1 6253 ; SSE4-NEXT: pminuw %xmm6, %xmm2 6254 ; SSE4-NEXT: pminuw %xmm7, %xmm3 6255 ; SSE4-NEXT: retq 6256 ; 6257 ; AVX1-LABEL: test143: 6258 ; AVX1: # %bb.0: # %entry 6259 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6260 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6261 ; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 6262 ; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 6263 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6264 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6265 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6266 ; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 6267 ; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 6268 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6269 ; AVX1-NEXT: retq 6270 ; 6271 ; AVX2-LABEL: test143: 6272 ; AVX2: # %bb.0: # %entry 6273 ; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 6274 ; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 6275 ; AVX2-NEXT: retq 6276 ; 6277 ; AVX512BW-LABEL: test143: 6278 ; AVX512BW: # %bb.0: # %entry 6279 ; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 6280 ; AVX512BW-NEXT: retq 6281 entry: 6282 %cmp = icmp ugt <32 x i16> %a, %b 6283 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6284 ret <32 x i16> %sel 6285 } 6286 6287 define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) { 6288 ; SSE2-LABEL: test144: 6289 ; SSE2: # %bb.0: # %entry 6290 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768] 6291 ; SSE2-NEXT: pxor %xmm8, %xmm4 6292 ; SSE2-NEXT: pxor %xmm8, %xmm0 6293 ; SSE2-NEXT: pminsw %xmm4, %xmm0 6294 ; SSE2-NEXT: pxor %xmm8, %xmm0 6295 ; SSE2-NEXT: pxor %xmm8, %xmm5 6296 ; SSE2-NEXT: pxor %xmm8, %xmm1 6297 ; SSE2-NEXT: pminsw %xmm5, %xmm1 6298 ; SSE2-NEXT: pxor %xmm8, %xmm1 6299 ; SSE2-NEXT: pxor %xmm8, %xmm6 6300 ; SSE2-NEXT: pxor %xmm8, %xmm2 6301 ; SSE2-NEXT: pminsw %xmm6, %xmm2 6302 ; SSE2-NEXT: pxor %xmm8, %xmm2 6303 ; SSE2-NEXT: pxor %xmm8, %xmm7 6304 ; SSE2-NEXT: pxor %xmm8, %xmm3 6305 ; SSE2-NEXT: pminsw %xmm7, %xmm3 6306 ; SSE2-NEXT: pxor %xmm8, %xmm3 6307 ; SSE2-NEXT: retq 6308 ; 6309 ; SSE4-LABEL: test144: 6310 ; SSE4: # %bb.0: # %entry 6311 ; SSE4-NEXT: pminuw %xmm4, %xmm0 6312 ; SSE4-NEXT: pminuw %xmm5, %xmm1 6313 ; SSE4-NEXT: pminuw %xmm6, %xmm2 6314 ; SSE4-NEXT: pminuw %xmm7, %xmm3 6315 ; SSE4-NEXT: retq 6316 ; 6317 ; AVX1-LABEL: test144: 6318 ; AVX1: # %bb.0: # %entry 6319 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6320 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6321 ; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 6322 ; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 6323 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6324 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6325 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6326 ; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 6327 ; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 6328 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6329 ; AVX1-NEXT: retq 6330 ; 6331 ; AVX2-LABEL: test144: 6332 ; AVX2: # %bb.0: # %entry 6333 ; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 6334 ; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 6335 ; AVX2-NEXT: retq 6336 ; 6337 ; AVX512BW-LABEL: test144: 6338 ; AVX512BW: # %bb.0: # %entry 6339 ; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 6340 ; AVX512BW-NEXT: retq 6341 entry: 6342 %cmp = icmp uge <32 x i16> %a, %b 6343 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6344 ret <32 x i16> %sel 6345 } 6346 6347 define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) { 6348 ; SSE2-LABEL: test145: 6349 ; SSE2: # %bb.0: # %entry 6350 ; SSE2-NEXT: movdqa %xmm0, %xmm8 6351 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6352 ; SSE2-NEXT: pand %xmm8, %xmm0 6353 ; SSE2-NEXT: pandn %xmm4, %xmm8 6354 ; SSE2-NEXT: por %xmm0, %xmm8 6355 ; SSE2-NEXT: movdqa %xmm1, %xmm4 6356 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 6357 ; SSE2-NEXT: pand %xmm4, %xmm1 6358 ; SSE2-NEXT: pandn %xmm5, %xmm4 6359 ; SSE2-NEXT: por %xmm1, %xmm4 6360 ; SSE2-NEXT: movdqa %xmm2, %xmm5 6361 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 6362 ; SSE2-NEXT: pand %xmm5, %xmm2 6363 ; SSE2-NEXT: pandn %xmm6, %xmm5 6364 ; SSE2-NEXT: por %xmm2, %xmm5 6365 ; SSE2-NEXT: movdqa %xmm3, %xmm6 6366 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm6 6367 ; SSE2-NEXT: pand %xmm6, %xmm3 6368 ; SSE2-NEXT: pandn %xmm7, %xmm6 6369 ; SSE2-NEXT: por %xmm3, %xmm6 6370 ; SSE2-NEXT: movdqa %xmm8, %xmm0 6371 ; SSE2-NEXT: movdqa %xmm4, %xmm1 6372 ; SSE2-NEXT: movdqa %xmm5, %xmm2 6373 ; SSE2-NEXT: movdqa %xmm6, %xmm3 6374 ; SSE2-NEXT: retq 6375 ; 6376 ; SSE4-LABEL: test145: 6377 ; SSE4: # %bb.0: # %entry 6378 ; SSE4-NEXT: pmaxsd %xmm4, %xmm0 6379 ; SSE4-NEXT: pmaxsd %xmm5, %xmm1 6380 ; SSE4-NEXT: pmaxsd %xmm6, %xmm2 6381 ; SSE4-NEXT: pmaxsd %xmm7, %xmm3 6382 ; SSE4-NEXT: retq 6383 ; 6384 ; AVX1-LABEL: test145: 6385 ; AVX1: # %bb.0: # %entry 6386 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6387 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6388 ; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 6389 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 6390 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6391 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6392 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6393 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 6394 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 6395 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6396 ; AVX1-NEXT: retq 6397 ; 6398 ; AVX2-LABEL: test145: 6399 ; AVX2: # %bb.0: # %entry 6400 ; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 6401 ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 6402 ; AVX2-NEXT: retq 6403 ; 6404 ; AVX512F-LABEL: test145: 6405 ; AVX512F: # %bb.0: # %entry 6406 ; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 6407 ; AVX512F-NEXT: retq 6408 entry: 6409 %cmp = icmp slt <16 x i32> %a, %b 6410 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6411 ret <16 x i32> %sel 6412 } 6413 6414 define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) { 6415 ; SSE2-LABEL: test146: 6416 ; SSE2: # %bb.0: # %entry 6417 ; SSE2-NEXT: movdqa %xmm0, %xmm8 6418 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6419 ; SSE2-NEXT: pand %xmm8, %xmm0 6420 ; SSE2-NEXT: pandn %xmm4, %xmm8 6421 ; SSE2-NEXT: por %xmm0, %xmm8 6422 ; SSE2-NEXT: movdqa %xmm1, %xmm4 6423 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 6424 ; SSE2-NEXT: pand %xmm4, %xmm1 6425 ; SSE2-NEXT: pandn %xmm5, %xmm4 6426 ; SSE2-NEXT: por %xmm1, %xmm4 6427 ; SSE2-NEXT: movdqa %xmm2, %xmm5 6428 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 6429 ; SSE2-NEXT: pand %xmm5, %xmm2 6430 ; SSE2-NEXT: pandn %xmm6, %xmm5 6431 ; SSE2-NEXT: por %xmm2, %xmm5 6432 ; SSE2-NEXT: movdqa %xmm3, %xmm6 6433 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm6 6434 ; SSE2-NEXT: pand %xmm6, %xmm3 6435 ; SSE2-NEXT: pandn %xmm7, %xmm6 6436 ; SSE2-NEXT: por %xmm3, %xmm6 6437 ; SSE2-NEXT: movdqa %xmm8, %xmm0 6438 ; SSE2-NEXT: movdqa %xmm4, %xmm1 6439 ; SSE2-NEXT: movdqa %xmm5, %xmm2 6440 ; SSE2-NEXT: movdqa %xmm6, %xmm3 6441 ; SSE2-NEXT: retq 6442 ; 6443 ; SSE4-LABEL: test146: 6444 ; SSE4: # %bb.0: # %entry 6445 ; SSE4-NEXT: pmaxsd %xmm4, %xmm0 6446 ; SSE4-NEXT: pmaxsd %xmm5, %xmm1 6447 ; SSE4-NEXT: pmaxsd %xmm6, %xmm2 6448 ; SSE4-NEXT: pmaxsd %xmm7, %xmm3 6449 ; SSE4-NEXT: retq 6450 ; 6451 ; AVX1-LABEL: test146: 6452 ; AVX1: # %bb.0: # %entry 6453 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6454 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6455 ; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 6456 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 6457 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6458 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6459 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6460 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 6461 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 6462 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6463 ; AVX1-NEXT: retq 6464 ; 6465 ; AVX2-LABEL: test146: 6466 ; AVX2: # %bb.0: # %entry 6467 ; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 6468 ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 6469 ; AVX2-NEXT: retq 6470 ; 6471 ; AVX512F-LABEL: test146: 6472 ; AVX512F: # %bb.0: # %entry 6473 ; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 6474 ; AVX512F-NEXT: retq 6475 entry: 6476 %cmp = icmp sle <16 x i32> %a, %b 6477 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6478 ret <16 x i32> %sel 6479 } 6480 6481 define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) { 6482 ; SSE2-LABEL: test147: 6483 ; SSE2: # %bb.0: # %entry 6484 ; SSE2-NEXT: movdqa %xmm4, %xmm8 6485 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm8 6486 ; SSE2-NEXT: pand %xmm8, %xmm0 6487 ; SSE2-NEXT: pandn %xmm4, %xmm8 6488 ; SSE2-NEXT: por %xmm8, %xmm0 6489 ; SSE2-NEXT: movdqa %xmm5, %xmm4 6490 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 6491 ; SSE2-NEXT: pand %xmm4, %xmm1 6492 ; SSE2-NEXT: pandn %xmm5, %xmm4 6493 ; SSE2-NEXT: por %xmm4, %xmm1 6494 ; SSE2-NEXT: movdqa %xmm6, %xmm4 6495 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 6496 ; SSE2-NEXT: pand %xmm4, %xmm2 6497 ; SSE2-NEXT: pandn %xmm6, %xmm4 6498 ; SSE2-NEXT: por %xmm4, %xmm2 6499 ; SSE2-NEXT: movdqa %xmm7, %xmm4 6500 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 6501 ; SSE2-NEXT: pand %xmm4, %xmm3 6502 ; SSE2-NEXT: pandn %xmm7, %xmm4 6503 ; SSE2-NEXT: por %xmm4, %xmm3 6504 ; SSE2-NEXT: retq 6505 ; 6506 ; SSE4-LABEL: test147: 6507 ; SSE4: # %bb.0: # %entry 6508 ; SSE4-NEXT: pminsd %xmm4, %xmm0 6509 ; SSE4-NEXT: pminsd %xmm5, %xmm1 6510 ; SSE4-NEXT: pminsd %xmm6, %xmm2 6511 ; SSE4-NEXT: pminsd %xmm7, %xmm3 6512 ; SSE4-NEXT: retq 6513 ; 6514 ; AVX1-LABEL: test147: 6515 ; AVX1: # %bb.0: # %entry 6516 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6517 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6518 ; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 6519 ; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 6520 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6521 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6522 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6523 ; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 6524 ; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 6525 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6526 ; AVX1-NEXT: retq 6527 ; 6528 ; AVX2-LABEL: test147: 6529 ; AVX2: # %bb.0: # %entry 6530 ; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 6531 ; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 6532 ; AVX2-NEXT: retq 6533 ; 6534 ; AVX512F-LABEL: test147: 6535 ; AVX512F: # %bb.0: # %entry 6536 ; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0 6537 ; AVX512F-NEXT: retq 6538 entry: 6539 %cmp = icmp sgt <16 x i32> %a, %b 6540 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6541 ret <16 x i32> %sel 6542 } 6543 6544 define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) { 6545 ; SSE2-LABEL: test148: 6546 ; SSE2: # %bb.0: # %entry 6547 ; SSE2-NEXT: movdqa %xmm4, %xmm8 6548 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm8 6549 ; SSE2-NEXT: pand %xmm8, %xmm0 6550 ; SSE2-NEXT: pandn %xmm4, %xmm8 6551 ; SSE2-NEXT: por %xmm8, %xmm0 6552 ; SSE2-NEXT: movdqa %xmm5, %xmm4 6553 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 6554 ; SSE2-NEXT: pand %xmm4, %xmm1 6555 ; SSE2-NEXT: pandn %xmm5, %xmm4 6556 ; SSE2-NEXT: por %xmm4, %xmm1 6557 ; SSE2-NEXT: movdqa %xmm6, %xmm4 6558 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 6559 ; SSE2-NEXT: pand %xmm4, %xmm2 6560 ; SSE2-NEXT: pandn %xmm6, %xmm4 6561 ; SSE2-NEXT: por %xmm4, %xmm2 6562 ; SSE2-NEXT: movdqa %xmm7, %xmm4 6563 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 6564 ; SSE2-NEXT: pand %xmm4, %xmm3 6565 ; SSE2-NEXT: pandn %xmm7, %xmm4 6566 ; SSE2-NEXT: por %xmm4, %xmm3 6567 ; SSE2-NEXT: retq 6568 ; 6569 ; SSE4-LABEL: test148: 6570 ; SSE4: # %bb.0: # %entry 6571 ; SSE4-NEXT: pminsd %xmm4, %xmm0 6572 ; SSE4-NEXT: pminsd %xmm5, %xmm1 6573 ; SSE4-NEXT: pminsd %xmm6, %xmm2 6574 ; SSE4-NEXT: pminsd %xmm7, %xmm3 6575 ; SSE4-NEXT: retq 6576 ; 6577 ; AVX1-LABEL: test148: 6578 ; AVX1: # %bb.0: # %entry 6579 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6580 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6581 ; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 6582 ; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 6583 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6584 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6585 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6586 ; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 6587 ; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 6588 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6589 ; AVX1-NEXT: retq 6590 ; 6591 ; AVX2-LABEL: test148: 6592 ; AVX2: # %bb.0: # %entry 6593 ; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 6594 ; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 6595 ; AVX2-NEXT: retq 6596 ; 6597 ; AVX512F-LABEL: test148: 6598 ; AVX512F: # %bb.0: # %entry 6599 ; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0 6600 ; AVX512F-NEXT: retq 6601 entry: 6602 %cmp = icmp sge <16 x i32> %a, %b 6603 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6604 ret <16 x i32> %sel 6605 } 6606 6607 define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) { 6608 ; SSE2-LABEL: test149: 6609 ; SSE2: # %bb.0: # %entry 6610 ; SSE2-NEXT: movdqa %xmm1, %xmm8 6611 ; SSE2-NEXT: movdqa %xmm0, %xmm10 6612 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648] 6613 ; SSE2-NEXT: movdqa %xmm4, %xmm1 6614 ; SSE2-NEXT: pxor %xmm9, %xmm1 6615 ; SSE2-NEXT: pxor %xmm9, %xmm0 6616 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm0 6617 ; SSE2-NEXT: pand %xmm0, %xmm10 6618 ; SSE2-NEXT: pandn %xmm4, %xmm0 6619 ; SSE2-NEXT: por %xmm10, %xmm0 6620 ; SSE2-NEXT: movdqa %xmm5, %xmm4 6621 ; SSE2-NEXT: pxor %xmm9, %xmm4 6622 ; SSE2-NEXT: movdqa %xmm8, %xmm1 6623 ; SSE2-NEXT: pxor %xmm9, %xmm1 6624 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm1 6625 ; SSE2-NEXT: pand %xmm1, %xmm8 6626 ; SSE2-NEXT: pandn %xmm5, %xmm1 6627 ; SSE2-NEXT: por %xmm8, %xmm1 6628 ; SSE2-NEXT: movdqa %xmm6, %xmm5 6629 ; SSE2-NEXT: pxor %xmm9, %xmm5 6630 ; SSE2-NEXT: movdqa %xmm2, %xmm4 6631 ; SSE2-NEXT: pxor %xmm9, %xmm4 6632 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 6633 ; SSE2-NEXT: pand %xmm4, %xmm2 6634 ; SSE2-NEXT: pandn %xmm6, %xmm4 6635 ; SSE2-NEXT: por %xmm2, %xmm4 6636 ; SSE2-NEXT: movdqa %xmm7, %xmm2 6637 ; SSE2-NEXT: pxor %xmm9, %xmm2 6638 ; SSE2-NEXT: pxor %xmm3, %xmm9 6639 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm9 6640 ; SSE2-NEXT: pand %xmm9, %xmm3 6641 ; SSE2-NEXT: pandn %xmm7, %xmm9 6642 ; SSE2-NEXT: por %xmm9, %xmm3 6643 ; SSE2-NEXT: movdqa %xmm4, %xmm2 6644 ; SSE2-NEXT: retq 6645 ; 6646 ; SSE4-LABEL: test149: 6647 ; SSE4: # %bb.0: # %entry 6648 ; SSE4-NEXT: pmaxud %xmm4, %xmm0 6649 ; SSE4-NEXT: pmaxud %xmm5, %xmm1 6650 ; SSE4-NEXT: pmaxud %xmm6, %xmm2 6651 ; SSE4-NEXT: pmaxud %xmm7, %xmm3 6652 ; SSE4-NEXT: retq 6653 ; 6654 ; AVX1-LABEL: test149: 6655 ; AVX1: # %bb.0: # %entry 6656 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6657 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6658 ; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 6659 ; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 6660 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6661 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6662 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6663 ; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 6664 ; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 6665 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6666 ; AVX1-NEXT: retq 6667 ; 6668 ; AVX2-LABEL: test149: 6669 ; AVX2: # %bb.0: # %entry 6670 ; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 6671 ; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 6672 ; AVX2-NEXT: retq 6673 ; 6674 ; AVX512F-LABEL: test149: 6675 ; AVX512F: # %bb.0: # %entry 6676 ; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 6677 ; AVX512F-NEXT: retq 6678 entry: 6679 %cmp = icmp ult <16 x i32> %a, %b 6680 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6681 ret <16 x i32> %sel 6682 } 6683 6684 define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) { 6685 ; SSE2-LABEL: test150: 6686 ; SSE2: # %bb.0: # %entry 6687 ; SSE2-NEXT: movdqa %xmm1, %xmm8 6688 ; SSE2-NEXT: movdqa %xmm0, %xmm10 6689 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648] 6690 ; SSE2-NEXT: movdqa %xmm4, %xmm1 6691 ; SSE2-NEXT: pxor %xmm9, %xmm1 6692 ; SSE2-NEXT: pxor %xmm9, %xmm0 6693 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm0 6694 ; SSE2-NEXT: pand %xmm0, %xmm10 6695 ; SSE2-NEXT: pandn %xmm4, %xmm0 6696 ; SSE2-NEXT: por %xmm10, %xmm0 6697 ; SSE2-NEXT: movdqa %xmm5, %xmm4 6698 ; SSE2-NEXT: pxor %xmm9, %xmm4 6699 ; SSE2-NEXT: movdqa %xmm8, %xmm1 6700 ; SSE2-NEXT: pxor %xmm9, %xmm1 6701 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm1 6702 ; SSE2-NEXT: pand %xmm1, %xmm8 6703 ; SSE2-NEXT: pandn %xmm5, %xmm1 6704 ; SSE2-NEXT: por %xmm8, %xmm1 6705 ; SSE2-NEXT: movdqa %xmm6, %xmm5 6706 ; SSE2-NEXT: pxor %xmm9, %xmm5 6707 ; SSE2-NEXT: movdqa %xmm2, %xmm4 6708 ; SSE2-NEXT: pxor %xmm9, %xmm4 6709 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 6710 ; SSE2-NEXT: pand %xmm4, %xmm2 6711 ; SSE2-NEXT: pandn %xmm6, %xmm4 6712 ; SSE2-NEXT: por %xmm2, %xmm4 6713 ; SSE2-NEXT: movdqa %xmm7, %xmm2 6714 ; SSE2-NEXT: pxor %xmm9, %xmm2 6715 ; SSE2-NEXT: pxor %xmm3, %xmm9 6716 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm9 6717 ; SSE2-NEXT: pand %xmm9, %xmm3 6718 ; SSE2-NEXT: pandn %xmm7, %xmm9 6719 ; SSE2-NEXT: por %xmm9, %xmm3 6720 ; SSE2-NEXT: movdqa %xmm4, %xmm2 6721 ; SSE2-NEXT: retq 6722 ; 6723 ; SSE4-LABEL: test150: 6724 ; SSE4: # %bb.0: # %entry 6725 ; SSE4-NEXT: pmaxud %xmm4, %xmm0 6726 ; SSE4-NEXT: pmaxud %xmm5, %xmm1 6727 ; SSE4-NEXT: pmaxud %xmm6, %xmm2 6728 ; SSE4-NEXT: pmaxud %xmm7, %xmm3 6729 ; SSE4-NEXT: retq 6730 ; 6731 ; AVX1-LABEL: test150: 6732 ; AVX1: # %bb.0: # %entry 6733 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6734 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6735 ; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 6736 ; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 6737 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6738 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6739 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6740 ; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 6741 ; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 6742 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6743 ; AVX1-NEXT: retq 6744 ; 6745 ; AVX2-LABEL: test150: 6746 ; AVX2: # %bb.0: # %entry 6747 ; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 6748 ; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 6749 ; AVX2-NEXT: retq 6750 ; 6751 ; AVX512F-LABEL: test150: 6752 ; AVX512F: # %bb.0: # %entry 6753 ; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 6754 ; AVX512F-NEXT: retq 6755 entry: 6756 %cmp = icmp ule <16 x i32> %a, %b 6757 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6758 ret <16 x i32> %sel 6759 } 6760 6761 define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) { 6762 ; SSE2-LABEL: test151: 6763 ; SSE2: # %bb.0: # %entry 6764 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 6765 ; SSE2-NEXT: movdqa %xmm0, %xmm9 6766 ; SSE2-NEXT: pxor %xmm8, %xmm9 6767 ; SSE2-NEXT: movdqa %xmm4, %xmm10 6768 ; SSE2-NEXT: pxor %xmm8, %xmm10 6769 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 6770 ; SSE2-NEXT: pand %xmm10, %xmm0 6771 ; SSE2-NEXT: pandn %xmm4, %xmm10 6772 ; SSE2-NEXT: por %xmm10, %xmm0 6773 ; SSE2-NEXT: movdqa %xmm1, %xmm9 6774 ; SSE2-NEXT: pxor %xmm8, %xmm9 6775 ; SSE2-NEXT: movdqa %xmm5, %xmm4 6776 ; SSE2-NEXT: pxor %xmm8, %xmm4 6777 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm4 6778 ; SSE2-NEXT: pand %xmm4, %xmm1 6779 ; SSE2-NEXT: pandn %xmm5, %xmm4 6780 ; SSE2-NEXT: por %xmm4, %xmm1 6781 ; SSE2-NEXT: movdqa %xmm2, %xmm4 6782 ; SSE2-NEXT: pxor %xmm8, %xmm4 6783 ; SSE2-NEXT: movdqa %xmm6, %xmm5 6784 ; SSE2-NEXT: pxor %xmm8, %xmm5 6785 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 6786 ; SSE2-NEXT: pand %xmm5, %xmm2 6787 ; SSE2-NEXT: pandn %xmm6, %xmm5 6788 ; SSE2-NEXT: por %xmm5, %xmm2 6789 ; SSE2-NEXT: movdqa %xmm3, %xmm4 6790 ; SSE2-NEXT: pxor %xmm8, %xmm4 6791 ; SSE2-NEXT: pxor %xmm7, %xmm8 6792 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6793 ; SSE2-NEXT: pand %xmm8, %xmm3 6794 ; SSE2-NEXT: pandn %xmm7, %xmm8 6795 ; SSE2-NEXT: por %xmm8, %xmm3 6796 ; SSE2-NEXT: retq 6797 ; 6798 ; SSE4-LABEL: test151: 6799 ; SSE4: # %bb.0: # %entry 6800 ; SSE4-NEXT: pminud %xmm4, %xmm0 6801 ; SSE4-NEXT: pminud %xmm5, %xmm1 6802 ; SSE4-NEXT: pminud %xmm6, %xmm2 6803 ; SSE4-NEXT: pminud %xmm7, %xmm3 6804 ; SSE4-NEXT: retq 6805 ; 6806 ; AVX1-LABEL: test151: 6807 ; AVX1: # %bb.0: # %entry 6808 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6809 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6810 ; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 6811 ; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 6812 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6813 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6814 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6815 ; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 6816 ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 6817 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6818 ; AVX1-NEXT: retq 6819 ; 6820 ; AVX2-LABEL: test151: 6821 ; AVX2: # %bb.0: # %entry 6822 ; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 6823 ; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 6824 ; AVX2-NEXT: retq 6825 ; 6826 ; AVX512F-LABEL: test151: 6827 ; AVX512F: # %bb.0: # %entry 6828 ; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0 6829 ; AVX512F-NEXT: retq 6830 entry: 6831 %cmp = icmp ugt <16 x i32> %a, %b 6832 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6833 ret <16 x i32> %sel 6834 } 6835 6836 define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) { 6837 ; SSE2-LABEL: test152: 6838 ; SSE2: # %bb.0: # %entry 6839 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 6840 ; SSE2-NEXT: movdqa %xmm0, %xmm9 6841 ; SSE2-NEXT: pxor %xmm8, %xmm9 6842 ; SSE2-NEXT: movdqa %xmm4, %xmm10 6843 ; SSE2-NEXT: pxor %xmm8, %xmm10 6844 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 6845 ; SSE2-NEXT: pand %xmm10, %xmm0 6846 ; SSE2-NEXT: pandn %xmm4, %xmm10 6847 ; SSE2-NEXT: por %xmm10, %xmm0 6848 ; SSE2-NEXT: movdqa %xmm1, %xmm9 6849 ; SSE2-NEXT: pxor %xmm8, %xmm9 6850 ; SSE2-NEXT: movdqa %xmm5, %xmm4 6851 ; SSE2-NEXT: pxor %xmm8, %xmm4 6852 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm4 6853 ; SSE2-NEXT: pand %xmm4, %xmm1 6854 ; SSE2-NEXT: pandn %xmm5, %xmm4 6855 ; SSE2-NEXT: por %xmm4, %xmm1 6856 ; SSE2-NEXT: movdqa %xmm2, %xmm4 6857 ; SSE2-NEXT: pxor %xmm8, %xmm4 6858 ; SSE2-NEXT: movdqa %xmm6, %xmm5 6859 ; SSE2-NEXT: pxor %xmm8, %xmm5 6860 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 6861 ; SSE2-NEXT: pand %xmm5, %xmm2 6862 ; SSE2-NEXT: pandn %xmm6, %xmm5 6863 ; SSE2-NEXT: por %xmm5, %xmm2 6864 ; SSE2-NEXT: movdqa %xmm3, %xmm4 6865 ; SSE2-NEXT: pxor %xmm8, %xmm4 6866 ; SSE2-NEXT: pxor %xmm7, %xmm8 6867 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6868 ; SSE2-NEXT: pand %xmm8, %xmm3 6869 ; SSE2-NEXT: pandn %xmm7, %xmm8 6870 ; SSE2-NEXT: por %xmm8, %xmm3 6871 ; SSE2-NEXT: retq 6872 ; 6873 ; SSE4-LABEL: test152: 6874 ; SSE4: # %bb.0: # %entry 6875 ; SSE4-NEXT: pminud %xmm4, %xmm0 6876 ; SSE4-NEXT: pminud %xmm5, %xmm1 6877 ; SSE4-NEXT: pminud %xmm6, %xmm2 6878 ; SSE4-NEXT: pminud %xmm7, %xmm3 6879 ; SSE4-NEXT: retq 6880 ; 6881 ; AVX1-LABEL: test152: 6882 ; AVX1: # %bb.0: # %entry 6883 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6884 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6885 ; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 6886 ; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 6887 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6888 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6889 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6890 ; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 6891 ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 6892 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6893 ; AVX1-NEXT: retq 6894 ; 6895 ; AVX2-LABEL: test152: 6896 ; AVX2: # %bb.0: # %entry 6897 ; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 6898 ; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 6899 ; AVX2-NEXT: retq 6900 ; 6901 ; AVX512F-LABEL: test152: 6902 ; AVX512F: # %bb.0: # %entry 6903 ; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0 6904 ; AVX512F-NEXT: retq 6905 entry: 6906 %cmp = icmp uge <16 x i32> %a, %b 6907 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6908 ret <16 x i32> %sel 6909 } 6910 6911 ; ----------------------- 6912 6913 define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) { 6914 ; SSE2-LABEL: test153: 6915 ; SSE2: # %bb.0: # %entry 6916 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0] 6917 ; SSE2-NEXT: movdqa %xmm4, %xmm9 6918 ; SSE2-NEXT: pxor %xmm8, %xmm9 6919 ; SSE2-NEXT: movdqa %xmm0, %xmm10 6920 ; SSE2-NEXT: pxor %xmm8, %xmm10 6921 ; SSE2-NEXT: movdqa %xmm10, %xmm11 6922 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 6923 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 6924 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 6925 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 6926 ; SSE2-NEXT: pand %xmm12, %xmm9 6927 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 6928 ; SSE2-NEXT: por %xmm9, %xmm10 6929 ; SSE2-NEXT: pand %xmm10, %xmm0 6930 ; SSE2-NEXT: pandn %xmm4, %xmm10 6931 ; SSE2-NEXT: por %xmm10, %xmm0 6932 ; SSE2-NEXT: movdqa %xmm5, %xmm9 6933 ; SSE2-NEXT: pxor %xmm8, %xmm9 6934 ; SSE2-NEXT: movdqa %xmm1, %xmm4 6935 ; SSE2-NEXT: pxor %xmm8, %xmm4 6936 ; SSE2-NEXT: movdqa %xmm4, %xmm10 6937 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 6938 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 6939 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 6940 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 6941 ; SSE2-NEXT: pand %xmm11, %xmm9 6942 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 6943 ; SSE2-NEXT: por %xmm9, %xmm4 6944 ; SSE2-NEXT: pand %xmm4, %xmm1 6945 ; SSE2-NEXT: pandn %xmm5, %xmm4 6946 ; SSE2-NEXT: por %xmm4, %xmm1 6947 ; SSE2-NEXT: movdqa %xmm6, %xmm4 6948 ; SSE2-NEXT: pxor %xmm8, %xmm4 6949 ; SSE2-NEXT: movdqa %xmm2, %xmm5 6950 ; SSE2-NEXT: pxor %xmm8, %xmm5 6951 ; SSE2-NEXT: movdqa %xmm5, %xmm9 6952 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 6953 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 6954 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 6955 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 6956 ; SSE2-NEXT: pand %xmm10, %xmm4 6957 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 6958 ; SSE2-NEXT: por %xmm4, %xmm5 6959 ; SSE2-NEXT: pand %xmm5, %xmm2 6960 ; SSE2-NEXT: pandn %xmm6, %xmm5 6961 ; SSE2-NEXT: por %xmm5, %xmm2 6962 ; SSE2-NEXT: movdqa %xmm7, %xmm4 6963 ; SSE2-NEXT: pxor %xmm8, %xmm4 6964 ; SSE2-NEXT: pxor %xmm3, %xmm8 6965 ; SSE2-NEXT: movdqa %xmm8, %xmm5 6966 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 6967 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 6968 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 6969 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 6970 ; SSE2-NEXT: pand %xmm6, %xmm4 6971 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 6972 ; SSE2-NEXT: por %xmm4, %xmm5 6973 ; SSE2-NEXT: pand %xmm5, %xmm3 6974 ; SSE2-NEXT: pandn %xmm7, %xmm5 6975 ; SSE2-NEXT: por %xmm5, %xmm3 6976 ; SSE2-NEXT: retq 6977 ; 6978 ; SSE4-LABEL: test153: 6979 ; SSE4: # %bb.0: # %entry 6980 ; SSE4-NEXT: movdqa %xmm0, %xmm8 6981 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 6982 ; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 6983 ; SSE4-NEXT: movdqa %xmm1, %xmm0 6984 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 6985 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 6986 ; SSE4-NEXT: movdqa %xmm2, %xmm0 6987 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 6988 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 6989 ; SSE4-NEXT: movdqa %xmm3, %xmm0 6990 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 6991 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 6992 ; SSE4-NEXT: movapd %xmm4, %xmm0 6993 ; SSE4-NEXT: movapd %xmm5, %xmm1 6994 ; SSE4-NEXT: movapd %xmm6, %xmm2 6995 ; SSE4-NEXT: movapd %xmm7, %xmm3 6996 ; SSE4-NEXT: retq 6997 ; 6998 ; AVX1-LABEL: test153: 6999 ; AVX1: # %bb.0: # %entry 7000 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7001 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7002 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7003 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5 7004 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7005 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7006 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7007 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7008 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7009 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4 7010 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7011 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7012 ; AVX1-NEXT: retq 7013 ; 7014 ; AVX2-LABEL: test153: 7015 ; AVX2: # %bb.0: # %entry 7016 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4 7017 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7018 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2 7019 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7020 ; AVX2-NEXT: retq 7021 ; 7022 ; AVX512F-LABEL: test153: 7023 ; AVX512F: # %bb.0: # %entry 7024 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 7025 ; AVX512F-NEXT: retq 7026 entry: 7027 %cmp = icmp slt <8 x i64> %a, %b 7028 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7029 ret <8 x i64> %sel 7030 } 7031 7032 define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) { 7033 ; SSE2-LABEL: test154: 7034 ; SSE2: # %bb.0: # %entry 7035 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0] 7036 ; SSE2-NEXT: movdqa %xmm4, %xmm9 7037 ; SSE2-NEXT: pxor %xmm8, %xmm9 7038 ; SSE2-NEXT: movdqa %xmm0, %xmm10 7039 ; SSE2-NEXT: pxor %xmm8, %xmm10 7040 ; SSE2-NEXT: movdqa %xmm10, %xmm11 7041 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7042 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7043 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7044 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7045 ; SSE2-NEXT: pand %xmm12, %xmm9 7046 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7047 ; SSE2-NEXT: por %xmm9, %xmm10 7048 ; SSE2-NEXT: pand %xmm10, %xmm0 7049 ; SSE2-NEXT: pandn %xmm4, %xmm10 7050 ; SSE2-NEXT: por %xmm10, %xmm0 7051 ; SSE2-NEXT: movdqa %xmm5, %xmm9 7052 ; SSE2-NEXT: pxor %xmm8, %xmm9 7053 ; SSE2-NEXT: movdqa %xmm1, %xmm4 7054 ; SSE2-NEXT: pxor %xmm8, %xmm4 7055 ; SSE2-NEXT: movdqa %xmm4, %xmm10 7056 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7057 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7058 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7059 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7060 ; SSE2-NEXT: pand %xmm11, %xmm9 7061 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7062 ; SSE2-NEXT: por %xmm9, %xmm4 7063 ; SSE2-NEXT: pand %xmm4, %xmm1 7064 ; SSE2-NEXT: pandn %xmm5, %xmm4 7065 ; SSE2-NEXT: por %xmm4, %xmm1 7066 ; SSE2-NEXT: movdqa %xmm6, %xmm4 7067 ; SSE2-NEXT: pxor %xmm8, %xmm4 7068 ; SSE2-NEXT: movdqa %xmm2, %xmm5 7069 ; SSE2-NEXT: pxor %xmm8, %xmm5 7070 ; SSE2-NEXT: movdqa %xmm5, %xmm9 7071 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7072 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7073 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7074 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7075 ; SSE2-NEXT: pand %xmm10, %xmm4 7076 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7077 ; SSE2-NEXT: por %xmm4, %xmm5 7078 ; SSE2-NEXT: pand %xmm5, %xmm2 7079 ; SSE2-NEXT: pandn %xmm6, %xmm5 7080 ; SSE2-NEXT: por %xmm5, %xmm2 7081 ; SSE2-NEXT: movdqa %xmm7, %xmm4 7082 ; SSE2-NEXT: pxor %xmm8, %xmm4 7083 ; SSE2-NEXT: pxor %xmm3, %xmm8 7084 ; SSE2-NEXT: movdqa %xmm8, %xmm5 7085 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7086 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7087 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7088 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7089 ; SSE2-NEXT: pand %xmm6, %xmm4 7090 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7091 ; SSE2-NEXT: por %xmm4, %xmm5 7092 ; SSE2-NEXT: pand %xmm5, %xmm3 7093 ; SSE2-NEXT: pandn %xmm7, %xmm5 7094 ; SSE2-NEXT: por %xmm5, %xmm3 7095 ; SSE2-NEXT: retq 7096 ; 7097 ; SSE4-LABEL: test154: 7098 ; SSE4: # %bb.0: # %entry 7099 ; SSE4-NEXT: movdqa %xmm0, %xmm8 7100 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7101 ; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 7102 ; SSE4-NEXT: movdqa %xmm1, %xmm0 7103 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 7104 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7105 ; SSE4-NEXT: movdqa %xmm2, %xmm0 7106 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 7107 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7108 ; SSE4-NEXT: movdqa %xmm3, %xmm0 7109 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 7110 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 7111 ; SSE4-NEXT: movapd %xmm4, %xmm0 7112 ; SSE4-NEXT: movapd %xmm5, %xmm1 7113 ; SSE4-NEXT: movapd %xmm6, %xmm2 7114 ; SSE4-NEXT: movapd %xmm7, %xmm3 7115 ; SSE4-NEXT: retq 7116 ; 7117 ; AVX1-LABEL: test154: 7118 ; AVX1: # %bb.0: # %entry 7119 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7120 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7121 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7122 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5 7123 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7124 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7125 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7126 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7127 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7128 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4 7129 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7130 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7131 ; AVX1-NEXT: retq 7132 ; 7133 ; AVX2-LABEL: test154: 7134 ; AVX2: # %bb.0: # %entry 7135 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4 7136 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7137 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2 7138 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7139 ; AVX2-NEXT: retq 7140 ; 7141 ; AVX512F-LABEL: test154: 7142 ; AVX512F: # %bb.0: # %entry 7143 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 7144 ; AVX512F-NEXT: retq 7145 entry: 7146 %cmp = icmp sle <8 x i64> %a, %b 7147 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7148 ret <8 x i64> %sel 7149 } 7150 7151 define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) { 7152 ; SSE2-LABEL: test155: 7153 ; SSE2: # %bb.0: # %entry 7154 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0] 7155 ; SSE2-NEXT: movdqa %xmm0, %xmm9 7156 ; SSE2-NEXT: pxor %xmm8, %xmm9 7157 ; SSE2-NEXT: movdqa %xmm4, %xmm10 7158 ; SSE2-NEXT: pxor %xmm8, %xmm10 7159 ; SSE2-NEXT: movdqa %xmm10, %xmm11 7160 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7161 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7162 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7163 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7164 ; SSE2-NEXT: pand %xmm12, %xmm9 7165 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7166 ; SSE2-NEXT: por %xmm9, %xmm10 7167 ; SSE2-NEXT: pand %xmm10, %xmm0 7168 ; SSE2-NEXT: pandn %xmm4, %xmm10 7169 ; SSE2-NEXT: por %xmm10, %xmm0 7170 ; SSE2-NEXT: movdqa %xmm1, %xmm9 7171 ; SSE2-NEXT: pxor %xmm8, %xmm9 7172 ; SSE2-NEXT: movdqa %xmm5, %xmm4 7173 ; SSE2-NEXT: pxor %xmm8, %xmm4 7174 ; SSE2-NEXT: movdqa %xmm4, %xmm10 7175 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7176 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7177 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7178 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7179 ; SSE2-NEXT: pand %xmm11, %xmm9 7180 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7181 ; SSE2-NEXT: por %xmm9, %xmm4 7182 ; SSE2-NEXT: pand %xmm4, %xmm1 7183 ; SSE2-NEXT: pandn %xmm5, %xmm4 7184 ; SSE2-NEXT: por %xmm4, %xmm1 7185 ; SSE2-NEXT: movdqa %xmm2, %xmm4 7186 ; SSE2-NEXT: pxor %xmm8, %xmm4 7187 ; SSE2-NEXT: movdqa %xmm6, %xmm5 7188 ; SSE2-NEXT: pxor %xmm8, %xmm5 7189 ; SSE2-NEXT: movdqa %xmm5, %xmm9 7190 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7191 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7192 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7193 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7194 ; SSE2-NEXT: pand %xmm10, %xmm4 7195 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7196 ; SSE2-NEXT: por %xmm4, %xmm5 7197 ; SSE2-NEXT: pand %xmm5, %xmm2 7198 ; SSE2-NEXT: pandn %xmm6, %xmm5 7199 ; SSE2-NEXT: por %xmm5, %xmm2 7200 ; SSE2-NEXT: movdqa %xmm3, %xmm4 7201 ; SSE2-NEXT: pxor %xmm8, %xmm4 7202 ; SSE2-NEXT: pxor %xmm7, %xmm8 7203 ; SSE2-NEXT: movdqa %xmm8, %xmm5 7204 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7205 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7206 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7207 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7208 ; SSE2-NEXT: pand %xmm6, %xmm4 7209 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7210 ; SSE2-NEXT: por %xmm4, %xmm5 7211 ; SSE2-NEXT: pand %xmm5, %xmm3 7212 ; SSE2-NEXT: pandn %xmm7, %xmm5 7213 ; SSE2-NEXT: por %xmm5, %xmm3 7214 ; SSE2-NEXT: retq 7215 ; 7216 ; SSE4-LABEL: test155: 7217 ; SSE4: # %bb.0: # %entry 7218 ; SSE4-NEXT: movdqa %xmm0, %xmm8 7219 ; SSE4-NEXT: movdqa %xmm4, %xmm0 7220 ; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 7221 ; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 7222 ; SSE4-NEXT: movdqa %xmm5, %xmm0 7223 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7224 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7225 ; SSE4-NEXT: movdqa %xmm6, %xmm0 7226 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 7227 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7228 ; SSE4-NEXT: movdqa %xmm7, %xmm0 7229 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 7230 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 7231 ; SSE4-NEXT: movapd %xmm4, %xmm0 7232 ; SSE4-NEXT: movapd %xmm5, %xmm1 7233 ; SSE4-NEXT: movapd %xmm6, %xmm2 7234 ; SSE4-NEXT: movapd %xmm7, %xmm3 7235 ; SSE4-NEXT: retq 7236 ; 7237 ; AVX1-LABEL: test155: 7238 ; AVX1: # %bb.0: # %entry 7239 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 7240 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 7241 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7242 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm5 7243 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7244 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7245 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 7246 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7247 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7248 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm4 7249 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7250 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7251 ; AVX1-NEXT: retq 7252 ; 7253 ; AVX2-LABEL: test155: 7254 ; AVX2: # %bb.0: # %entry 7255 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm4 7256 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7257 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm2 7258 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7259 ; AVX2-NEXT: retq 7260 ; 7261 ; AVX512F-LABEL: test155: 7262 ; AVX512F: # %bb.0: # %entry 7263 ; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 7264 ; AVX512F-NEXT: retq 7265 entry: 7266 %cmp = icmp sgt <8 x i64> %a, %b 7267 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7268 ret <8 x i64> %sel 7269 } 7270 7271 define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) { 7272 ; SSE2-LABEL: test156: 7273 ; SSE2: # %bb.0: # %entry 7274 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 7275 ; SSE2-NEXT: movdqa %xmm4, %xmm9 7276 ; SSE2-NEXT: pxor %xmm8, %xmm9 7277 ; SSE2-NEXT: movdqa %xmm0, %xmm10 7278 ; SSE2-NEXT: pxor %xmm8, %xmm10 7279 ; SSE2-NEXT: movdqa %xmm10, %xmm11 7280 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7281 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7282 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7283 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7284 ; SSE2-NEXT: pand %xmm12, %xmm9 7285 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7286 ; SSE2-NEXT: por %xmm9, %xmm10 7287 ; SSE2-NEXT: pand %xmm10, %xmm0 7288 ; SSE2-NEXT: pandn %xmm4, %xmm10 7289 ; SSE2-NEXT: por %xmm10, %xmm0 7290 ; SSE2-NEXT: movdqa %xmm5, %xmm9 7291 ; SSE2-NEXT: pxor %xmm8, %xmm9 7292 ; SSE2-NEXT: movdqa %xmm1, %xmm4 7293 ; SSE2-NEXT: pxor %xmm8, %xmm4 7294 ; SSE2-NEXT: movdqa %xmm4, %xmm10 7295 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7296 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7297 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7298 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7299 ; SSE2-NEXT: pand %xmm11, %xmm9 7300 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7301 ; SSE2-NEXT: por %xmm9, %xmm4 7302 ; SSE2-NEXT: pand %xmm4, %xmm1 7303 ; SSE2-NEXT: pandn %xmm5, %xmm4 7304 ; SSE2-NEXT: por %xmm4, %xmm1 7305 ; SSE2-NEXT: movdqa %xmm6, %xmm4 7306 ; SSE2-NEXT: pxor %xmm8, %xmm4 7307 ; SSE2-NEXT: movdqa %xmm2, %xmm5 7308 ; SSE2-NEXT: pxor %xmm8, %xmm5 7309 ; SSE2-NEXT: movdqa %xmm5, %xmm9 7310 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7311 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7312 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7313 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7314 ; SSE2-NEXT: pand %xmm10, %xmm4 7315 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7316 ; SSE2-NEXT: por %xmm4, %xmm5 7317 ; SSE2-NEXT: pand %xmm5, %xmm2 7318 ; SSE2-NEXT: pandn %xmm6, %xmm5 7319 ; SSE2-NEXT: por %xmm5, %xmm2 7320 ; SSE2-NEXT: movdqa %xmm7, %xmm4 7321 ; SSE2-NEXT: pxor %xmm8, %xmm4 7322 ; SSE2-NEXT: pxor %xmm3, %xmm8 7323 ; SSE2-NEXT: movdqa %xmm8, %xmm5 7324 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7325 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7326 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7327 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7328 ; SSE2-NEXT: pand %xmm6, %xmm4 7329 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7330 ; SSE2-NEXT: por %xmm4, %xmm5 7331 ; SSE2-NEXT: pand %xmm5, %xmm3 7332 ; SSE2-NEXT: pandn %xmm7, %xmm5 7333 ; SSE2-NEXT: por %xmm5, %xmm3 7334 ; SSE2-NEXT: retq 7335 ; 7336 ; SSE4-LABEL: test156: 7337 ; SSE4: # %bb.0: # %entry 7338 ; SSE4-NEXT: movdqa %xmm0, %xmm9 7339 ; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 7340 ; SSE4-NEXT: movdqa %xmm4, %xmm10 7341 ; SSE4-NEXT: pxor %xmm8, %xmm10 7342 ; SSE4-NEXT: pxor %xmm8, %xmm0 7343 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 7344 ; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 7345 ; SSE4-NEXT: movdqa %xmm5, %xmm9 7346 ; SSE4-NEXT: pxor %xmm8, %xmm9 7347 ; SSE4-NEXT: movdqa %xmm1, %xmm0 7348 ; SSE4-NEXT: pxor %xmm8, %xmm0 7349 ; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 7350 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7351 ; SSE4-NEXT: movdqa %xmm6, %xmm1 7352 ; SSE4-NEXT: pxor %xmm8, %xmm1 7353 ; SSE4-NEXT: movdqa %xmm2, %xmm0 7354 ; SSE4-NEXT: pxor %xmm8, %xmm0 7355 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7356 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7357 ; SSE4-NEXT: movdqa %xmm7, %xmm0 7358 ; SSE4-NEXT: pxor %xmm8, %xmm0 7359 ; SSE4-NEXT: pxor %xmm3, %xmm8 7360 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 7361 ; SSE4-NEXT: movdqa %xmm8, %xmm0 7362 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 7363 ; SSE4-NEXT: movapd %xmm4, %xmm0 7364 ; SSE4-NEXT: movapd %xmm5, %xmm1 7365 ; SSE4-NEXT: movapd %xmm6, %xmm2 7366 ; SSE4-NEXT: movapd %xmm7, %xmm3 7367 ; SSE4-NEXT: retq 7368 ; 7369 ; AVX1-LABEL: test156: 7370 ; AVX1: # %bb.0: # %entry 7371 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7372 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 7373 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7374 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 7375 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7376 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 7377 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm6 7378 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7 7379 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 7380 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 7381 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7382 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7383 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 7384 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7385 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7386 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7387 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm4 7388 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5 7389 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7390 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7391 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7392 ; AVX1-NEXT: retq 7393 ; 7394 ; AVX2-LABEL: test156: 7395 ; AVX2: # %bb.0: # %entry 7396 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 7397 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm5 7398 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 7399 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 7400 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 7401 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm2 7402 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm4 7403 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 7404 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7405 ; AVX2-NEXT: retq 7406 ; 7407 ; AVX512F-LABEL: test156: 7408 ; AVX512F: # %bb.0: # %entry 7409 ; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 7410 ; AVX512F-NEXT: retq 7411 entry: 7412 %cmp = icmp ule <8 x i64> %a, %b 7413 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7414 ret <8 x i64> %sel 7415 } 7416 7417 define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) { 7418 ; SSE2-LABEL: test159: 7419 ; SSE2: # %bb.0: # %entry 7420 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 7421 ; SSE2-NEXT: movdqa %xmm0, %xmm9 7422 ; SSE2-NEXT: pxor %xmm8, %xmm9 7423 ; SSE2-NEXT: movdqa %xmm4, %xmm10 7424 ; SSE2-NEXT: pxor %xmm8, %xmm10 7425 ; SSE2-NEXT: movdqa %xmm10, %xmm11 7426 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7427 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7428 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7429 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7430 ; SSE2-NEXT: pand %xmm12, %xmm9 7431 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7432 ; SSE2-NEXT: por %xmm9, %xmm10 7433 ; SSE2-NEXT: pand %xmm10, %xmm0 7434 ; SSE2-NEXT: pandn %xmm4, %xmm10 7435 ; SSE2-NEXT: por %xmm10, %xmm0 7436 ; SSE2-NEXT: movdqa %xmm1, %xmm9 7437 ; SSE2-NEXT: pxor %xmm8, %xmm9 7438 ; SSE2-NEXT: movdqa %xmm5, %xmm4 7439 ; SSE2-NEXT: pxor %xmm8, %xmm4 7440 ; SSE2-NEXT: movdqa %xmm4, %xmm10 7441 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7442 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7443 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7444 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7445 ; SSE2-NEXT: pand %xmm11, %xmm9 7446 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7447 ; SSE2-NEXT: por %xmm9, %xmm4 7448 ; SSE2-NEXT: pand %xmm4, %xmm1 7449 ; SSE2-NEXT: pandn %xmm5, %xmm4 7450 ; SSE2-NEXT: por %xmm4, %xmm1 7451 ; SSE2-NEXT: movdqa %xmm2, %xmm4 7452 ; SSE2-NEXT: pxor %xmm8, %xmm4 7453 ; SSE2-NEXT: movdqa %xmm6, %xmm5 7454 ; SSE2-NEXT: pxor %xmm8, %xmm5 7455 ; SSE2-NEXT: movdqa %xmm5, %xmm9 7456 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7457 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7458 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7459 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7460 ; SSE2-NEXT: pand %xmm10, %xmm4 7461 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7462 ; SSE2-NEXT: por %xmm4, %xmm5 7463 ; SSE2-NEXT: pand %xmm5, %xmm2 7464 ; SSE2-NEXT: pandn %xmm6, %xmm5 7465 ; SSE2-NEXT: por %xmm5, %xmm2 7466 ; SSE2-NEXT: movdqa %xmm3, %xmm4 7467 ; SSE2-NEXT: pxor %xmm8, %xmm4 7468 ; SSE2-NEXT: pxor %xmm7, %xmm8 7469 ; SSE2-NEXT: movdqa %xmm8, %xmm5 7470 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7471 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7472 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7473 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7474 ; SSE2-NEXT: pand %xmm6, %xmm4 7475 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7476 ; SSE2-NEXT: por %xmm4, %xmm5 7477 ; SSE2-NEXT: pand %xmm5, %xmm3 7478 ; SSE2-NEXT: pandn %xmm7, %xmm5 7479 ; SSE2-NEXT: por %xmm5, %xmm3 7480 ; SSE2-NEXT: retq 7481 ; 7482 ; SSE4-LABEL: test159: 7483 ; SSE4: # %bb.0: # %entry 7484 ; SSE4-NEXT: movdqa %xmm0, %xmm9 7485 ; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 7486 ; SSE4-NEXT: movdqa %xmm0, %xmm10 7487 ; SSE4-NEXT: pxor %xmm8, %xmm10 7488 ; SSE4-NEXT: movdqa %xmm4, %xmm0 7489 ; SSE4-NEXT: pxor %xmm8, %xmm0 7490 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 7491 ; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 7492 ; SSE4-NEXT: movdqa %xmm1, %xmm9 7493 ; SSE4-NEXT: pxor %xmm8, %xmm9 7494 ; SSE4-NEXT: movdqa %xmm5, %xmm0 7495 ; SSE4-NEXT: pxor %xmm8, %xmm0 7496 ; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 7497 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7498 ; SSE4-NEXT: movdqa %xmm2, %xmm1 7499 ; SSE4-NEXT: pxor %xmm8, %xmm1 7500 ; SSE4-NEXT: movdqa %xmm6, %xmm0 7501 ; SSE4-NEXT: pxor %xmm8, %xmm0 7502 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7503 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7504 ; SSE4-NEXT: movdqa %xmm3, %xmm0 7505 ; SSE4-NEXT: pxor %xmm8, %xmm0 7506 ; SSE4-NEXT: pxor %xmm7, %xmm8 7507 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 7508 ; SSE4-NEXT: movdqa %xmm8, %xmm0 7509 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 7510 ; SSE4-NEXT: movapd %xmm4, %xmm0 7511 ; SSE4-NEXT: movapd %xmm5, %xmm1 7512 ; SSE4-NEXT: movapd %xmm6, %xmm2 7513 ; SSE4-NEXT: movapd %xmm7, %xmm3 7514 ; SSE4-NEXT: retq 7515 ; 7516 ; AVX1-LABEL: test159: 7517 ; AVX1: # %bb.0: # %entry 7518 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 7519 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 7520 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7521 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 7522 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7523 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 7524 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6 7525 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7 7526 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 7527 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 7528 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7529 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 7530 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 7531 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7532 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7533 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7534 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4 7535 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5 7536 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7537 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7538 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7539 ; AVX1-NEXT: retq 7540 ; 7541 ; AVX2-LABEL: test159: 7542 ; AVX2: # %bb.0: # %entry 7543 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 7544 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5 7545 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 7546 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 7547 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 7548 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2 7549 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4 7550 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 7551 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7552 ; AVX2-NEXT: retq 7553 ; 7554 ; AVX512F-LABEL: test159: 7555 ; AVX512F: # %bb.0: # %entry 7556 ; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 7557 ; AVX512F-NEXT: retq 7558 entry: 7559 %cmp = icmp ugt <8 x i64> %a, %b 7560 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7561 ret <8 x i64> %sel 7562 } 7563 7564 define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) { 7565 ; SSE2-LABEL: test160: 7566 ; SSE2: # %bb.0: # %entry 7567 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 7568 ; SSE2-NEXT: movdqa %xmm0, %xmm9 7569 ; SSE2-NEXT: pxor %xmm8, %xmm9 7570 ; SSE2-NEXT: movdqa %xmm4, %xmm10 7571 ; SSE2-NEXT: pxor %xmm8, %xmm10 7572 ; SSE2-NEXT: movdqa %xmm10, %xmm11 7573 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7574 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7575 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7576 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7577 ; SSE2-NEXT: pand %xmm12, %xmm9 7578 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7579 ; SSE2-NEXT: por %xmm9, %xmm10 7580 ; SSE2-NEXT: pand %xmm10, %xmm0 7581 ; SSE2-NEXT: pandn %xmm4, %xmm10 7582 ; SSE2-NEXT: por %xmm10, %xmm0 7583 ; SSE2-NEXT: movdqa %xmm1, %xmm9 7584 ; SSE2-NEXT: pxor %xmm8, %xmm9 7585 ; SSE2-NEXT: movdqa %xmm5, %xmm4 7586 ; SSE2-NEXT: pxor %xmm8, %xmm4 7587 ; SSE2-NEXT: movdqa %xmm4, %xmm10 7588 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7589 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7590 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7591 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7592 ; SSE2-NEXT: pand %xmm11, %xmm9 7593 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7594 ; SSE2-NEXT: por %xmm9, %xmm4 7595 ; SSE2-NEXT: pand %xmm4, %xmm1 7596 ; SSE2-NEXT: pandn %xmm5, %xmm4 7597 ; SSE2-NEXT: por %xmm4, %xmm1 7598 ; SSE2-NEXT: movdqa %xmm2, %xmm4 7599 ; SSE2-NEXT: pxor %xmm8, %xmm4 7600 ; SSE2-NEXT: movdqa %xmm6, %xmm5 7601 ; SSE2-NEXT: pxor %xmm8, %xmm5 7602 ; SSE2-NEXT: movdqa %xmm5, %xmm9 7603 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7604 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7605 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7606 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7607 ; SSE2-NEXT: pand %xmm10, %xmm4 7608 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7609 ; SSE2-NEXT: por %xmm4, %xmm5 7610 ; SSE2-NEXT: pand %xmm5, %xmm2 7611 ; SSE2-NEXT: pandn %xmm6, %xmm5 7612 ; SSE2-NEXT: por %xmm5, %xmm2 7613 ; SSE2-NEXT: movdqa %xmm3, %xmm4 7614 ; SSE2-NEXT: pxor %xmm8, %xmm4 7615 ; SSE2-NEXT: pxor %xmm7, %xmm8 7616 ; SSE2-NEXT: movdqa %xmm8, %xmm5 7617 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7618 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7619 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7620 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7621 ; SSE2-NEXT: pand %xmm6, %xmm4 7622 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7623 ; SSE2-NEXT: por %xmm4, %xmm5 7624 ; SSE2-NEXT: pand %xmm5, %xmm3 7625 ; SSE2-NEXT: pandn %xmm7, %xmm5 7626 ; SSE2-NEXT: por %xmm5, %xmm3 7627 ; SSE2-NEXT: retq 7628 ; 7629 ; SSE4-LABEL: test160: 7630 ; SSE4: # %bb.0: # %entry 7631 ; SSE4-NEXT: movdqa %xmm0, %xmm9 7632 ; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 7633 ; SSE4-NEXT: movdqa %xmm0, %xmm10 7634 ; SSE4-NEXT: pxor %xmm8, %xmm10 7635 ; SSE4-NEXT: movdqa %xmm4, %xmm0 7636 ; SSE4-NEXT: pxor %xmm8, %xmm0 7637 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 7638 ; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 7639 ; SSE4-NEXT: movdqa %xmm1, %xmm9 7640 ; SSE4-NEXT: pxor %xmm8, %xmm9 7641 ; SSE4-NEXT: movdqa %xmm5, %xmm0 7642 ; SSE4-NEXT: pxor %xmm8, %xmm0 7643 ; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 7644 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7645 ; SSE4-NEXT: movdqa %xmm2, %xmm1 7646 ; SSE4-NEXT: pxor %xmm8, %xmm1 7647 ; SSE4-NEXT: movdqa %xmm6, %xmm0 7648 ; SSE4-NEXT: pxor %xmm8, %xmm0 7649 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7650 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7651 ; SSE4-NEXT: movdqa %xmm3, %xmm0 7652 ; SSE4-NEXT: pxor %xmm8, %xmm0 7653 ; SSE4-NEXT: pxor %xmm7, %xmm8 7654 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 7655 ; SSE4-NEXT: movdqa %xmm8, %xmm0 7656 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 7657 ; SSE4-NEXT: movapd %xmm4, %xmm0 7658 ; SSE4-NEXT: movapd %xmm5, %xmm1 7659 ; SSE4-NEXT: movapd %xmm6, %xmm2 7660 ; SSE4-NEXT: movapd %xmm7, %xmm3 7661 ; SSE4-NEXT: retq 7662 ; 7663 ; AVX1-LABEL: test160: 7664 ; AVX1: # %bb.0: # %entry 7665 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 7666 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 7667 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7668 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 7669 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7670 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 7671 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6 7672 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7 7673 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 7674 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 7675 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7676 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 7677 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 7678 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7679 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7680 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7681 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4 7682 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5 7683 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7684 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7685 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7686 ; AVX1-NEXT: retq 7687 ; 7688 ; AVX2-LABEL: test160: 7689 ; AVX2: # %bb.0: # %entry 7690 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 7691 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5 7692 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 7693 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 7694 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 7695 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2 7696 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4 7697 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 7698 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7699 ; AVX2-NEXT: retq 7700 ; 7701 ; AVX512F-LABEL: test160: 7702 ; AVX512F: # %bb.0: # %entry 7703 ; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 7704 ; AVX512F-NEXT: retq 7705 entry: 7706 %cmp = icmp uge <8 x i64> %a, %b 7707 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7708 ret <8 x i64> %sel 7709 } 7710 7711 define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) { 7712 ; SSE2-LABEL: test161: 7713 ; SSE2: # %bb.0: # %entry 7714 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 7715 ; SSE2-NEXT: movdqa %xmm0, %xmm5 7716 ; SSE2-NEXT: pxor %xmm4, %xmm5 7717 ; SSE2-NEXT: movdqa %xmm2, %xmm6 7718 ; SSE2-NEXT: pxor %xmm4, %xmm6 7719 ; SSE2-NEXT: movdqa %xmm6, %xmm7 7720 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 7721 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 7722 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 7723 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 7724 ; SSE2-NEXT: pand %xmm8, %xmm5 7725 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 7726 ; SSE2-NEXT: por %xmm5, %xmm6 7727 ; SSE2-NEXT: pand %xmm6, %xmm0 7728 ; SSE2-NEXT: pandn %xmm2, %xmm6 7729 ; SSE2-NEXT: por %xmm6, %xmm0 7730 ; SSE2-NEXT: movdqa %xmm1, %xmm2 7731 ; SSE2-NEXT: pxor %xmm4, %xmm2 7732 ; SSE2-NEXT: pxor %xmm3, %xmm4 7733 ; SSE2-NEXT: movdqa %xmm4, %xmm5 7734 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 7735 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7736 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 7737 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 7738 ; SSE2-NEXT: pand %xmm6, %xmm2 7739 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7740 ; SSE2-NEXT: por %xmm2, %xmm4 7741 ; SSE2-NEXT: pand %xmm4, %xmm1 7742 ; SSE2-NEXT: pandn %xmm3, %xmm4 7743 ; SSE2-NEXT: por %xmm4, %xmm1 7744 ; SSE2-NEXT: retq 7745 ; 7746 ; SSE4-LABEL: test161: 7747 ; SSE4: # %bb.0: # %entry 7748 ; SSE4-NEXT: movdqa %xmm0, %xmm4 7749 ; SSE4-NEXT: movdqa %xmm2, %xmm0 7750 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7751 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 7752 ; SSE4-NEXT: movdqa %xmm3, %xmm0 7753 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7754 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 7755 ; SSE4-NEXT: movapd %xmm2, %xmm0 7756 ; SSE4-NEXT: movapd %xmm3, %xmm1 7757 ; SSE4-NEXT: retq 7758 ; 7759 ; AVX1-LABEL: test161: 7760 ; AVX1: # %bb.0: # %entry 7761 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 7762 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 7763 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 7764 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 7765 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 7766 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7767 ; AVX1-NEXT: retq 7768 ; 7769 ; AVX2-LABEL: test161: 7770 ; AVX2: # %bb.0: # %entry 7771 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 7772 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7773 ; AVX2-NEXT: retq 7774 ; 7775 ; AVX512BW-LABEL: test161: 7776 ; AVX512BW: # %bb.0: # %entry 7777 ; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 7778 ; AVX512BW-NEXT: retq 7779 entry: 7780 %cmp = icmp slt <4 x i64> %a, %b 7781 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 7782 ret <4 x i64> %sel 7783 } 7784 7785 define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) { 7786 ; SSE2-LABEL: test162: 7787 ; SSE2: # %bb.0: # %entry 7788 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 7789 ; SSE2-NEXT: movdqa %xmm0, %xmm5 7790 ; SSE2-NEXT: pxor %xmm4, %xmm5 7791 ; SSE2-NEXT: movdqa %xmm2, %xmm6 7792 ; SSE2-NEXT: pxor %xmm4, %xmm6 7793 ; SSE2-NEXT: movdqa %xmm6, %xmm7 7794 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 7795 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 7796 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 7797 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 7798 ; SSE2-NEXT: pand %xmm8, %xmm5 7799 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 7800 ; SSE2-NEXT: por %xmm5, %xmm6 7801 ; SSE2-NEXT: pand %xmm6, %xmm0 7802 ; SSE2-NEXT: pandn %xmm2, %xmm6 7803 ; SSE2-NEXT: por %xmm6, %xmm0 7804 ; SSE2-NEXT: movdqa %xmm1, %xmm2 7805 ; SSE2-NEXT: pxor %xmm4, %xmm2 7806 ; SSE2-NEXT: pxor %xmm3, %xmm4 7807 ; SSE2-NEXT: movdqa %xmm4, %xmm5 7808 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 7809 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7810 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 7811 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 7812 ; SSE2-NEXT: pand %xmm6, %xmm2 7813 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7814 ; SSE2-NEXT: por %xmm2, %xmm4 7815 ; SSE2-NEXT: pand %xmm4, %xmm1 7816 ; SSE2-NEXT: pandn %xmm3, %xmm4 7817 ; SSE2-NEXT: por %xmm4, %xmm1 7818 ; SSE2-NEXT: retq 7819 ; 7820 ; SSE4-LABEL: test162: 7821 ; SSE4: # %bb.0: # %entry 7822 ; SSE4-NEXT: movdqa %xmm0, %xmm4 7823 ; SSE4-NEXT: movdqa %xmm2, %xmm0 7824 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7825 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 7826 ; SSE4-NEXT: movdqa %xmm3, %xmm0 7827 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7828 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 7829 ; SSE4-NEXT: movapd %xmm2, %xmm0 7830 ; SSE4-NEXT: movapd %xmm3, %xmm1 7831 ; SSE4-NEXT: retq 7832 ; 7833 ; AVX1-LABEL: test162: 7834 ; AVX1: # %bb.0: # %entry 7835 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 7836 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 7837 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 7838 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 7839 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 7840 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7841 ; AVX1-NEXT: retq 7842 ; 7843 ; AVX2-LABEL: test162: 7844 ; AVX2: # %bb.0: # %entry 7845 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 7846 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7847 ; AVX2-NEXT: retq 7848 ; 7849 ; AVX512BW-LABEL: test162: 7850 ; AVX512BW: # %bb.0: # %entry 7851 ; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 7852 ; AVX512BW-NEXT: retq 7853 entry: 7854 %cmp = icmp sle <4 x i64> %a, %b 7855 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 7856 ret <4 x i64> %sel 7857 } 7858 7859 define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) { 7860 ; SSE2-LABEL: test163: 7861 ; SSE2: # %bb.0: # %entry 7862 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 7863 ; SSE2-NEXT: movdqa %xmm2, %xmm5 7864 ; SSE2-NEXT: pxor %xmm4, %xmm5 7865 ; SSE2-NEXT: movdqa %xmm0, %xmm6 7866 ; SSE2-NEXT: pxor %xmm4, %xmm6 7867 ; SSE2-NEXT: movdqa %xmm6, %xmm7 7868 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 7869 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 7870 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 7871 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 7872 ; SSE2-NEXT: pand %xmm8, %xmm5 7873 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 7874 ; SSE2-NEXT: por %xmm5, %xmm6 7875 ; SSE2-NEXT: pand %xmm6, %xmm0 7876 ; SSE2-NEXT: pandn %xmm2, %xmm6 7877 ; SSE2-NEXT: por %xmm6, %xmm0 7878 ; SSE2-NEXT: movdqa %xmm3, %xmm2 7879 ; SSE2-NEXT: pxor %xmm4, %xmm2 7880 ; SSE2-NEXT: pxor %xmm1, %xmm4 7881 ; SSE2-NEXT: movdqa %xmm4, %xmm5 7882 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 7883 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7884 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 7885 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 7886 ; SSE2-NEXT: pand %xmm6, %xmm2 7887 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7888 ; SSE2-NEXT: por %xmm2, %xmm4 7889 ; SSE2-NEXT: pand %xmm4, %xmm1 7890 ; SSE2-NEXT: pandn %xmm3, %xmm4 7891 ; SSE2-NEXT: por %xmm4, %xmm1 7892 ; SSE2-NEXT: retq 7893 ; 7894 ; SSE4-LABEL: test163: 7895 ; SSE4: # %bb.0: # %entry 7896 ; SSE4-NEXT: movdqa %xmm0, %xmm4 7897 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 7898 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 7899 ; SSE4-NEXT: movdqa %xmm1, %xmm0 7900 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 7901 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 7902 ; SSE4-NEXT: movapd %xmm2, %xmm0 7903 ; SSE4-NEXT: movapd %xmm3, %xmm1 7904 ; SSE4-NEXT: retq 7905 ; 7906 ; AVX1-LABEL: test163: 7907 ; AVX1: # %bb.0: # %entry 7908 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 7909 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 7910 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 7911 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 7912 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 7913 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7914 ; AVX1-NEXT: retq 7915 ; 7916 ; AVX2-LABEL: test163: 7917 ; AVX2: # %bb.0: # %entry 7918 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 7919 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7920 ; AVX2-NEXT: retq 7921 ; 7922 ; AVX512BW-LABEL: test163: 7923 ; AVX512BW: # %bb.0: # %entry 7924 ; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 7925 ; AVX512BW-NEXT: retq 7926 entry: 7927 %cmp = icmp sgt <4 x i64> %a, %b 7928 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 7929 ret <4 x i64> %sel 7930 } 7931 7932 define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) { 7933 ; SSE2-LABEL: test164: 7934 ; SSE2: # %bb.0: # %entry 7935 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 7936 ; SSE2-NEXT: movdqa %xmm2, %xmm5 7937 ; SSE2-NEXT: pxor %xmm4, %xmm5 7938 ; SSE2-NEXT: movdqa %xmm0, %xmm6 7939 ; SSE2-NEXT: pxor %xmm4, %xmm6 7940 ; SSE2-NEXT: movdqa %xmm6, %xmm7 7941 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 7942 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 7943 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 7944 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 7945 ; SSE2-NEXT: pand %xmm8, %xmm5 7946 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 7947 ; SSE2-NEXT: por %xmm5, %xmm6 7948 ; SSE2-NEXT: pand %xmm6, %xmm0 7949 ; SSE2-NEXT: pandn %xmm2, %xmm6 7950 ; SSE2-NEXT: por %xmm6, %xmm0 7951 ; SSE2-NEXT: movdqa %xmm3, %xmm2 7952 ; SSE2-NEXT: pxor %xmm4, %xmm2 7953 ; SSE2-NEXT: pxor %xmm1, %xmm4 7954 ; SSE2-NEXT: movdqa %xmm4, %xmm5 7955 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 7956 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7957 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 7958 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 7959 ; SSE2-NEXT: pand %xmm6, %xmm2 7960 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7961 ; SSE2-NEXT: por %xmm2, %xmm4 7962 ; SSE2-NEXT: pand %xmm4, %xmm1 7963 ; SSE2-NEXT: pandn %xmm3, %xmm4 7964 ; SSE2-NEXT: por %xmm4, %xmm1 7965 ; SSE2-NEXT: retq 7966 ; 7967 ; SSE4-LABEL: test164: 7968 ; SSE4: # %bb.0: # %entry 7969 ; SSE4-NEXT: movdqa %xmm0, %xmm4 7970 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 7971 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 7972 ; SSE4-NEXT: movdqa %xmm1, %xmm0 7973 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 7974 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 7975 ; SSE4-NEXT: movapd %xmm2, %xmm0 7976 ; SSE4-NEXT: movapd %xmm3, %xmm1 7977 ; SSE4-NEXT: retq 7978 ; 7979 ; AVX1-LABEL: test164: 7980 ; AVX1: # %bb.0: # %entry 7981 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 7982 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 7983 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 7984 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 7985 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 7986 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7987 ; AVX1-NEXT: retq 7988 ; 7989 ; AVX2-LABEL: test164: 7990 ; AVX2: # %bb.0: # %entry 7991 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 7992 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7993 ; AVX2-NEXT: retq 7994 ; 7995 ; AVX512BW-LABEL: test164: 7996 ; AVX512BW: # %bb.0: # %entry 7997 ; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 7998 ; AVX512BW-NEXT: retq 7999 entry: 8000 %cmp = icmp sge <4 x i64> %a, %b 8001 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8002 ret <4 x i64> %sel 8003 } 8004 8005 define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) { 8006 ; SSE2-LABEL: test165: 8007 ; SSE2: # %bb.0: # %entry 8008 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 8009 ; SSE2-NEXT: movdqa %xmm0, %xmm5 8010 ; SSE2-NEXT: pxor %xmm4, %xmm5 8011 ; SSE2-NEXT: movdqa %xmm2, %xmm6 8012 ; SSE2-NEXT: pxor %xmm4, %xmm6 8013 ; SSE2-NEXT: movdqa %xmm6, %xmm7 8014 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8015 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8016 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8017 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8018 ; SSE2-NEXT: pand %xmm8, %xmm5 8019 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8020 ; SSE2-NEXT: por %xmm5, %xmm6 8021 ; SSE2-NEXT: pand %xmm6, %xmm0 8022 ; SSE2-NEXT: pandn %xmm2, %xmm6 8023 ; SSE2-NEXT: por %xmm6, %xmm0 8024 ; SSE2-NEXT: movdqa %xmm1, %xmm2 8025 ; SSE2-NEXT: pxor %xmm4, %xmm2 8026 ; SSE2-NEXT: pxor %xmm3, %xmm4 8027 ; SSE2-NEXT: movdqa %xmm4, %xmm5 8028 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8029 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8030 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8031 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8032 ; SSE2-NEXT: pand %xmm6, %xmm2 8033 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8034 ; SSE2-NEXT: por %xmm2, %xmm4 8035 ; SSE2-NEXT: pand %xmm4, %xmm1 8036 ; SSE2-NEXT: pandn %xmm3, %xmm4 8037 ; SSE2-NEXT: por %xmm4, %xmm1 8038 ; SSE2-NEXT: retq 8039 ; 8040 ; SSE4-LABEL: test165: 8041 ; SSE4: # %bb.0: # %entry 8042 ; SSE4-NEXT: movdqa %xmm0, %xmm4 8043 ; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8044 ; SSE4-NEXT: movdqa %xmm0, %xmm6 8045 ; SSE4-NEXT: pxor %xmm5, %xmm6 8046 ; SSE4-NEXT: movdqa %xmm2, %xmm0 8047 ; SSE4-NEXT: pxor %xmm5, %xmm0 8048 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8049 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8050 ; SSE4-NEXT: movdqa %xmm1, %xmm0 8051 ; SSE4-NEXT: pxor %xmm5, %xmm0 8052 ; SSE4-NEXT: pxor %xmm3, %xmm5 8053 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8054 ; SSE4-NEXT: movdqa %xmm5, %xmm0 8055 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8056 ; SSE4-NEXT: movapd %xmm2, %xmm0 8057 ; SSE4-NEXT: movapd %xmm3, %xmm1 8058 ; SSE4-NEXT: retq 8059 ; 8060 ; AVX1-LABEL: test165: 8061 ; AVX1: # %bb.0: # %entry 8062 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8063 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8064 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8065 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 8066 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8067 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8068 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4 8069 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3 8070 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8071 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8072 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8073 ; AVX1-NEXT: retq 8074 ; 8075 ; AVX2-LABEL: test165: 8076 ; AVX2: # %bb.0: # %entry 8077 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8078 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 8079 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 8080 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8081 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8082 ; AVX2-NEXT: retq 8083 ; 8084 ; AVX512BW-LABEL: test165: 8085 ; AVX512BW: # %bb.0: # %entry 8086 ; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 8087 ; AVX512BW-NEXT: retq 8088 entry: 8089 %cmp = icmp ult <4 x i64> %a, %b 8090 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8091 ret <4 x i64> %sel 8092 } 8093 8094 define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) { 8095 ; SSE2-LABEL: test166: 8096 ; SSE2: # %bb.0: # %entry 8097 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 8098 ; SSE2-NEXT: movdqa %xmm0, %xmm5 8099 ; SSE2-NEXT: pxor %xmm4, %xmm5 8100 ; SSE2-NEXT: movdqa %xmm2, %xmm6 8101 ; SSE2-NEXT: pxor %xmm4, %xmm6 8102 ; SSE2-NEXT: movdqa %xmm6, %xmm7 8103 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8104 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8105 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8106 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8107 ; SSE2-NEXT: pand %xmm8, %xmm5 8108 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8109 ; SSE2-NEXT: por %xmm5, %xmm6 8110 ; SSE2-NEXT: pand %xmm6, %xmm0 8111 ; SSE2-NEXT: pandn %xmm2, %xmm6 8112 ; SSE2-NEXT: por %xmm6, %xmm0 8113 ; SSE2-NEXT: movdqa %xmm1, %xmm2 8114 ; SSE2-NEXT: pxor %xmm4, %xmm2 8115 ; SSE2-NEXT: pxor %xmm3, %xmm4 8116 ; SSE2-NEXT: movdqa %xmm4, %xmm5 8117 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8118 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8119 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8120 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8121 ; SSE2-NEXT: pand %xmm6, %xmm2 8122 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8123 ; SSE2-NEXT: por %xmm2, %xmm4 8124 ; SSE2-NEXT: pand %xmm4, %xmm1 8125 ; SSE2-NEXT: pandn %xmm3, %xmm4 8126 ; SSE2-NEXT: por %xmm4, %xmm1 8127 ; SSE2-NEXT: retq 8128 ; 8129 ; SSE4-LABEL: test166: 8130 ; SSE4: # %bb.0: # %entry 8131 ; SSE4-NEXT: movdqa %xmm0, %xmm4 8132 ; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8133 ; SSE4-NEXT: movdqa %xmm0, %xmm6 8134 ; SSE4-NEXT: pxor %xmm5, %xmm6 8135 ; SSE4-NEXT: movdqa %xmm2, %xmm0 8136 ; SSE4-NEXT: pxor %xmm5, %xmm0 8137 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8138 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8139 ; SSE4-NEXT: movdqa %xmm1, %xmm0 8140 ; SSE4-NEXT: pxor %xmm5, %xmm0 8141 ; SSE4-NEXT: pxor %xmm3, %xmm5 8142 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8143 ; SSE4-NEXT: movdqa %xmm5, %xmm0 8144 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8145 ; SSE4-NEXT: movapd %xmm2, %xmm0 8146 ; SSE4-NEXT: movapd %xmm3, %xmm1 8147 ; SSE4-NEXT: retq 8148 ; 8149 ; AVX1-LABEL: test166: 8150 ; AVX1: # %bb.0: # %entry 8151 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8152 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8153 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8154 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 8155 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8156 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8157 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4 8158 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3 8159 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8160 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8161 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8162 ; AVX1-NEXT: retq 8163 ; 8164 ; AVX2-LABEL: test166: 8165 ; AVX2: # %bb.0: # %entry 8166 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8167 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 8168 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 8169 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8170 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8171 ; AVX2-NEXT: retq 8172 ; 8173 ; AVX512BW-LABEL: test166: 8174 ; AVX512BW: # %bb.0: # %entry 8175 ; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 8176 ; AVX512BW-NEXT: retq 8177 entry: 8178 %cmp = icmp ule <4 x i64> %a, %b 8179 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8180 ret <4 x i64> %sel 8181 } 8182 8183 define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) { 8184 ; SSE2-LABEL: test167: 8185 ; SSE2: # %bb.0: # %entry 8186 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 8187 ; SSE2-NEXT: movdqa %xmm2, %xmm5 8188 ; SSE2-NEXT: pxor %xmm4, %xmm5 8189 ; SSE2-NEXT: movdqa %xmm0, %xmm6 8190 ; SSE2-NEXT: pxor %xmm4, %xmm6 8191 ; SSE2-NEXT: movdqa %xmm6, %xmm7 8192 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8193 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8194 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8195 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8196 ; SSE2-NEXT: pand %xmm8, %xmm5 8197 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8198 ; SSE2-NEXT: por %xmm5, %xmm6 8199 ; SSE2-NEXT: pand %xmm6, %xmm0 8200 ; SSE2-NEXT: pandn %xmm2, %xmm6 8201 ; SSE2-NEXT: por %xmm6, %xmm0 8202 ; SSE2-NEXT: movdqa %xmm3, %xmm2 8203 ; SSE2-NEXT: pxor %xmm4, %xmm2 8204 ; SSE2-NEXT: pxor %xmm1, %xmm4 8205 ; SSE2-NEXT: movdqa %xmm4, %xmm5 8206 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8207 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8208 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8209 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8210 ; SSE2-NEXT: pand %xmm6, %xmm2 8211 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8212 ; SSE2-NEXT: por %xmm2, %xmm4 8213 ; SSE2-NEXT: pand %xmm4, %xmm1 8214 ; SSE2-NEXT: pandn %xmm3, %xmm4 8215 ; SSE2-NEXT: por %xmm4, %xmm1 8216 ; SSE2-NEXT: retq 8217 ; 8218 ; SSE4-LABEL: test167: 8219 ; SSE4: # %bb.0: # %entry 8220 ; SSE4-NEXT: movdqa %xmm0, %xmm4 8221 ; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8222 ; SSE4-NEXT: movdqa %xmm2, %xmm6 8223 ; SSE4-NEXT: pxor %xmm5, %xmm6 8224 ; SSE4-NEXT: pxor %xmm5, %xmm0 8225 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8226 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8227 ; SSE4-NEXT: movdqa %xmm3, %xmm0 8228 ; SSE4-NEXT: pxor %xmm5, %xmm0 8229 ; SSE4-NEXT: pxor %xmm1, %xmm5 8230 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8231 ; SSE4-NEXT: movdqa %xmm5, %xmm0 8232 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8233 ; SSE4-NEXT: movapd %xmm2, %xmm0 8234 ; SSE4-NEXT: movapd %xmm3, %xmm1 8235 ; SSE4-NEXT: retq 8236 ; 8237 ; AVX1-LABEL: test167: 8238 ; AVX1: # %bb.0: # %entry 8239 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8240 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8241 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8242 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 8243 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8244 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8245 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4 8246 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3 8247 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8248 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8249 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8250 ; AVX1-NEXT: retq 8251 ; 8252 ; AVX2-LABEL: test167: 8253 ; AVX2: # %bb.0: # %entry 8254 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8255 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 8256 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 8257 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8258 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8259 ; AVX2-NEXT: retq 8260 ; 8261 ; AVX512BW-LABEL: test167: 8262 ; AVX512BW: # %bb.0: # %entry 8263 ; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 8264 ; AVX512BW-NEXT: retq 8265 entry: 8266 %cmp = icmp ugt <4 x i64> %a, %b 8267 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8268 ret <4 x i64> %sel 8269 } 8270 8271 define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) { 8272 ; SSE2-LABEL: test168: 8273 ; SSE2: # %bb.0: # %entry 8274 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 8275 ; SSE2-NEXT: movdqa %xmm2, %xmm5 8276 ; SSE2-NEXT: pxor %xmm4, %xmm5 8277 ; SSE2-NEXT: movdqa %xmm0, %xmm6 8278 ; SSE2-NEXT: pxor %xmm4, %xmm6 8279 ; SSE2-NEXT: movdqa %xmm6, %xmm7 8280 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8281 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8282 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8283 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8284 ; SSE2-NEXT: pand %xmm8, %xmm5 8285 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8286 ; SSE2-NEXT: por %xmm5, %xmm6 8287 ; SSE2-NEXT: pand %xmm6, %xmm0 8288 ; SSE2-NEXT: pandn %xmm2, %xmm6 8289 ; SSE2-NEXT: por %xmm6, %xmm0 8290 ; SSE2-NEXT: movdqa %xmm3, %xmm2 8291 ; SSE2-NEXT: pxor %xmm4, %xmm2 8292 ; SSE2-NEXT: pxor %xmm1, %xmm4 8293 ; SSE2-NEXT: movdqa %xmm4, %xmm5 8294 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8295 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8296 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8297 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8298 ; SSE2-NEXT: pand %xmm6, %xmm2 8299 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8300 ; SSE2-NEXT: por %xmm2, %xmm4 8301 ; SSE2-NEXT: pand %xmm4, %xmm1 8302 ; SSE2-NEXT: pandn %xmm3, %xmm4 8303 ; SSE2-NEXT: por %xmm4, %xmm1 8304 ; SSE2-NEXT: retq 8305 ; 8306 ; SSE4-LABEL: test168: 8307 ; SSE4: # %bb.0: # %entry 8308 ; SSE4-NEXT: movdqa %xmm0, %xmm4 8309 ; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8310 ; SSE4-NEXT: movdqa %xmm2, %xmm6 8311 ; SSE4-NEXT: pxor %xmm5, %xmm6 8312 ; SSE4-NEXT: pxor %xmm5, %xmm0 8313 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8314 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8315 ; SSE4-NEXT: movdqa %xmm3, %xmm0 8316 ; SSE4-NEXT: pxor %xmm5, %xmm0 8317 ; SSE4-NEXT: pxor %xmm1, %xmm5 8318 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8319 ; SSE4-NEXT: movdqa %xmm5, %xmm0 8320 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8321 ; SSE4-NEXT: movapd %xmm2, %xmm0 8322 ; SSE4-NEXT: movapd %xmm3, %xmm1 8323 ; SSE4-NEXT: retq 8324 ; 8325 ; AVX1-LABEL: test168: 8326 ; AVX1: # %bb.0: # %entry 8327 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8328 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8329 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8330 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 8331 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8332 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8333 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4 8334 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3 8335 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8336 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8337 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8338 ; AVX1-NEXT: retq 8339 ; 8340 ; AVX2-LABEL: test168: 8341 ; AVX2: # %bb.0: # %entry 8342 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8343 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 8344 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 8345 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8346 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8347 ; AVX2-NEXT: retq 8348 ; 8349 ; AVX512BW-LABEL: test168: 8350 ; AVX512BW: # %bb.0: # %entry 8351 ; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 8352 ; AVX512BW-NEXT: retq 8353 entry: 8354 %cmp = icmp uge <4 x i64> %a, %b 8355 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8356 ret <4 x i64> %sel 8357 } 8358 8359 define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) { 8360 ; SSE2-LABEL: test169: 8361 ; SSE2: # %bb.0: # %entry 8362 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 8363 ; SSE2-NEXT: movdqa %xmm2, %xmm5 8364 ; SSE2-NEXT: pxor %xmm4, %xmm5 8365 ; SSE2-NEXT: movdqa %xmm0, %xmm6 8366 ; SSE2-NEXT: pxor %xmm4, %xmm6 8367 ; SSE2-NEXT: movdqa %xmm6, %xmm7 8368 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8369 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8370 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8371 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8372 ; SSE2-NEXT: pand %xmm8, %xmm5 8373 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8374 ; SSE2-NEXT: por %xmm5, %xmm6 8375 ; SSE2-NEXT: pand %xmm6, %xmm0 8376 ; SSE2-NEXT: pandn %xmm2, %xmm6 8377 ; SSE2-NEXT: por %xmm6, %xmm0 8378 ; SSE2-NEXT: movdqa %xmm3, %xmm2 8379 ; SSE2-NEXT: pxor %xmm4, %xmm2 8380 ; SSE2-NEXT: pxor %xmm1, %xmm4 8381 ; SSE2-NEXT: movdqa %xmm4, %xmm5 8382 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8383 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8384 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8385 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8386 ; SSE2-NEXT: pand %xmm6, %xmm2 8387 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8388 ; SSE2-NEXT: por %xmm2, %xmm4 8389 ; SSE2-NEXT: pand %xmm4, %xmm1 8390 ; SSE2-NEXT: pandn %xmm3, %xmm4 8391 ; SSE2-NEXT: por %xmm4, %xmm1 8392 ; SSE2-NEXT: retq 8393 ; 8394 ; SSE4-LABEL: test169: 8395 ; SSE4: # %bb.0: # %entry 8396 ; SSE4-NEXT: movdqa %xmm0, %xmm4 8397 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8398 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8399 ; SSE4-NEXT: movdqa %xmm1, %xmm0 8400 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 8401 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8402 ; SSE4-NEXT: movapd %xmm2, %xmm0 8403 ; SSE4-NEXT: movapd %xmm3, %xmm1 8404 ; SSE4-NEXT: retq 8405 ; 8406 ; AVX1-LABEL: test169: 8407 ; AVX1: # %bb.0: # %entry 8408 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8409 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8410 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8411 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 8412 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8413 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8414 ; AVX1-NEXT: retq 8415 ; 8416 ; AVX2-LABEL: test169: 8417 ; AVX2: # %bb.0: # %entry 8418 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8419 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8420 ; AVX2-NEXT: retq 8421 ; 8422 ; AVX512BW-LABEL: test169: 8423 ; AVX512BW: # %bb.0: # %entry 8424 ; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 8425 ; AVX512BW-NEXT: retq 8426 entry: 8427 %cmp = icmp slt <4 x i64> %a, %b 8428 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8429 ret <4 x i64> %sel 8430 } 8431 8432 define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) { 8433 ; SSE2-LABEL: test170: 8434 ; SSE2: # %bb.0: # %entry 8435 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 8436 ; SSE2-NEXT: movdqa %xmm2, %xmm5 8437 ; SSE2-NEXT: pxor %xmm4, %xmm5 8438 ; SSE2-NEXT: movdqa %xmm0, %xmm6 8439 ; SSE2-NEXT: pxor %xmm4, %xmm6 8440 ; SSE2-NEXT: movdqa %xmm6, %xmm7 8441 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8442 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8443 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8444 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8445 ; SSE2-NEXT: pand %xmm8, %xmm5 8446 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8447 ; SSE2-NEXT: por %xmm5, %xmm6 8448 ; SSE2-NEXT: pand %xmm6, %xmm0 8449 ; SSE2-NEXT: pandn %xmm2, %xmm6 8450 ; SSE2-NEXT: por %xmm6, %xmm0 8451 ; SSE2-NEXT: movdqa %xmm3, %xmm2 8452 ; SSE2-NEXT: pxor %xmm4, %xmm2 8453 ; SSE2-NEXT: pxor %xmm1, %xmm4 8454 ; SSE2-NEXT: movdqa %xmm4, %xmm5 8455 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8456 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8457 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8458 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8459 ; SSE2-NEXT: pand %xmm6, %xmm2 8460 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8461 ; SSE2-NEXT: por %xmm2, %xmm4 8462 ; SSE2-NEXT: pand %xmm4, %xmm1 8463 ; SSE2-NEXT: pandn %xmm3, %xmm4 8464 ; SSE2-NEXT: por %xmm4, %xmm1 8465 ; SSE2-NEXT: retq 8466 ; 8467 ; SSE4-LABEL: test170: 8468 ; SSE4: # %bb.0: # %entry 8469 ; SSE4-NEXT: movdqa %xmm0, %xmm4 8470 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8471 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8472 ; SSE4-NEXT: movdqa %xmm1, %xmm0 8473 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 8474 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8475 ; SSE4-NEXT: movapd %xmm2, %xmm0 8476 ; SSE4-NEXT: movapd %xmm3, %xmm1 8477 ; SSE4-NEXT: retq 8478 ; 8479 ; AVX1-LABEL: test170: 8480 ; AVX1: # %bb.0: # %entry 8481 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8482 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8483 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8484 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 8485 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8486 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8487 ; AVX1-NEXT: retq 8488 ; 8489 ; AVX2-LABEL: test170: 8490 ; AVX2: # %bb.0: # %entry 8491 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8492 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8493 ; AVX2-NEXT: retq 8494 ; 8495 ; AVX512BW-LABEL: test170: 8496 ; AVX512BW: # %bb.0: # %entry 8497 ; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 8498 ; AVX512BW-NEXT: retq 8499 entry: 8500 %cmp = icmp sle <4 x i64> %a, %b 8501 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8502 ret <4 x i64> %sel 8503 } 8504 8505 define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) { 8506 ; SSE2-LABEL: test171: 8507 ; SSE2: # %bb.0: # %entry 8508 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 8509 ; SSE2-NEXT: movdqa %xmm0, %xmm5 8510 ; SSE2-NEXT: pxor %xmm4, %xmm5 8511 ; SSE2-NEXT: movdqa %xmm2, %xmm6 8512 ; SSE2-NEXT: pxor %xmm4, %xmm6 8513 ; SSE2-NEXT: movdqa %xmm6, %xmm7 8514 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8515 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8516 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8517 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8518 ; SSE2-NEXT: pand %xmm8, %xmm5 8519 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8520 ; SSE2-NEXT: por %xmm5, %xmm6 8521 ; SSE2-NEXT: pand %xmm6, %xmm0 8522 ; SSE2-NEXT: pandn %xmm2, %xmm6 8523 ; SSE2-NEXT: por %xmm6, %xmm0 8524 ; SSE2-NEXT: movdqa %xmm1, %xmm2 8525 ; SSE2-NEXT: pxor %xmm4, %xmm2 8526 ; SSE2-NEXT: pxor %xmm3, %xmm4 8527 ; SSE2-NEXT: movdqa %xmm4, %xmm5 8528 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8529 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8530 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8531 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8532 ; SSE2-NEXT: pand %xmm6, %xmm2 8533 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8534 ; SSE2-NEXT: por %xmm2, %xmm4 8535 ; SSE2-NEXT: pand %xmm4, %xmm1 8536 ; SSE2-NEXT: pandn %xmm3, %xmm4 8537 ; SSE2-NEXT: por %xmm4, %xmm1 8538 ; SSE2-NEXT: retq 8539 ; 8540 ; SSE4-LABEL: test171: 8541 ; SSE4: # %bb.0: # %entry 8542 ; SSE4-NEXT: movdqa %xmm0, %xmm4 8543 ; SSE4-NEXT: movdqa %xmm2, %xmm0 8544 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 8545 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8546 ; SSE4-NEXT: movdqa %xmm3, %xmm0 8547 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 8548 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8549 ; SSE4-NEXT: movapd %xmm2, %xmm0 8550 ; SSE4-NEXT: movapd %xmm3, %xmm1 8551 ; SSE4-NEXT: retq 8552 ; 8553 ; AVX1-LABEL: test171: 8554 ; AVX1: # %bb.0: # %entry 8555 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8556 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 8557 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8558 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 8559 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8560 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8561 ; AVX1-NEXT: retq 8562 ; 8563 ; AVX2-LABEL: test171: 8564 ; AVX2: # %bb.0: # %entry 8565 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 8566 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8567 ; AVX2-NEXT: retq 8568 ; 8569 ; AVX512BW-LABEL: test171: 8570 ; AVX512BW: # %bb.0: # %entry 8571 ; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 8572 ; AVX512BW-NEXT: retq 8573 entry: 8574 %cmp = icmp sgt <4 x i64> %a, %b 8575 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8576 ret <4 x i64> %sel 8577 } 8578 8579 define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) { 8580 ; SSE2-LABEL: test172: 8581 ; SSE2: # %bb.0: # %entry 8582 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 8583 ; SSE2-NEXT: movdqa %xmm0, %xmm5 8584 ; SSE2-NEXT: pxor %xmm4, %xmm5 8585 ; SSE2-NEXT: movdqa %xmm2, %xmm6 8586 ; SSE2-NEXT: pxor %xmm4, %xmm6 8587 ; SSE2-NEXT: movdqa %xmm6, %xmm7 8588 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8589 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8590 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8591 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8592 ; SSE2-NEXT: pand %xmm8, %xmm5 8593 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8594 ; SSE2-NEXT: por %xmm5, %xmm6 8595 ; SSE2-NEXT: pand %xmm6, %xmm0 8596 ; SSE2-NEXT: pandn %xmm2, %xmm6 8597 ; SSE2-NEXT: por %xmm6, %xmm0 8598 ; SSE2-NEXT: movdqa %xmm1, %xmm2 8599 ; SSE2-NEXT: pxor %xmm4, %xmm2 8600 ; SSE2-NEXT: pxor %xmm3, %xmm4 8601 ; SSE2-NEXT: movdqa %xmm4, %xmm5 8602 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8603 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8604 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8605 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8606 ; SSE2-NEXT: pand %xmm6, %xmm2 8607 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8608 ; SSE2-NEXT: por %xmm2, %xmm4 8609 ; SSE2-NEXT: pand %xmm4, %xmm1 8610 ; SSE2-NEXT: pandn %xmm3, %xmm4 8611 ; SSE2-NEXT: por %xmm4, %xmm1 8612 ; SSE2-NEXT: retq 8613 ; 8614 ; SSE4-LABEL: test172: 8615 ; SSE4: # %bb.0: # %entry 8616 ; SSE4-NEXT: movdqa %xmm0, %xmm4 8617 ; SSE4-NEXT: movdqa %xmm2, %xmm0 8618 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 8619 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8620 ; SSE4-NEXT: movdqa %xmm3, %xmm0 8621 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 8622 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8623 ; SSE4-NEXT: movapd %xmm2, %xmm0 8624 ; SSE4-NEXT: movapd %xmm3, %xmm1 8625 ; SSE4-NEXT: retq 8626 ; 8627 ; AVX1-LABEL: test172: 8628 ; AVX1: # %bb.0: # %entry 8629 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8630 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 8631 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8632 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 8633 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8634 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8635 ; AVX1-NEXT: retq 8636 ; 8637 ; AVX2-LABEL: test172: 8638 ; AVX2: # %bb.0: # %entry 8639 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 8640 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8641 ; AVX2-NEXT: retq 8642 ; 8643 ; AVX512BW-LABEL: test172: 8644 ; AVX512BW: # %bb.0: # %entry 8645 ; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 8646 ; AVX512BW-NEXT: retq 8647 entry: 8648 %cmp = icmp sge <4 x i64> %a, %b 8649 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8650 ret <4 x i64> %sel 8651 } 8652 8653 define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) { 8654 ; SSE2-LABEL: test173: 8655 ; SSE2: # %bb.0: # %entry 8656 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 8657 ; SSE2-NEXT: movdqa %xmm2, %xmm5 8658 ; SSE2-NEXT: pxor %xmm4, %xmm5 8659 ; SSE2-NEXT: movdqa %xmm0, %xmm6 8660 ; SSE2-NEXT: pxor %xmm4, %xmm6 8661 ; SSE2-NEXT: movdqa %xmm6, %xmm7 8662 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8663 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8664 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8665 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8666 ; SSE2-NEXT: pand %xmm8, %xmm5 8667 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8668 ; SSE2-NEXT: por %xmm5, %xmm6 8669 ; SSE2-NEXT: pand %xmm6, %xmm0 8670 ; SSE2-NEXT: pandn %xmm2, %xmm6 8671 ; SSE2-NEXT: por %xmm6, %xmm0 8672 ; SSE2-NEXT: movdqa %xmm3, %xmm2 8673 ; SSE2-NEXT: pxor %xmm4, %xmm2 8674 ; SSE2-NEXT: pxor %xmm1, %xmm4 8675 ; SSE2-NEXT: movdqa %xmm4, %xmm5 8676 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8677 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8678 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8679 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8680 ; SSE2-NEXT: pand %xmm6, %xmm2 8681 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8682 ; SSE2-NEXT: por %xmm2, %xmm4 8683 ; SSE2-NEXT: pand %xmm4, %xmm1 8684 ; SSE2-NEXT: pandn %xmm3, %xmm4 8685 ; SSE2-NEXT: por %xmm4, %xmm1 8686 ; SSE2-NEXT: retq 8687 ; 8688 ; SSE4-LABEL: test173: 8689 ; SSE4: # %bb.0: # %entry 8690 ; SSE4-NEXT: movdqa %xmm0, %xmm4 8691 ; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8692 ; SSE4-NEXT: movdqa %xmm2, %xmm6 8693 ; SSE4-NEXT: pxor %xmm5, %xmm6 8694 ; SSE4-NEXT: pxor %xmm5, %xmm0 8695 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8696 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8697 ; SSE4-NEXT: movdqa %xmm3, %xmm0 8698 ; SSE4-NEXT: pxor %xmm5, %xmm0 8699 ; SSE4-NEXT: pxor %xmm1, %xmm5 8700 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8701 ; SSE4-NEXT: movdqa %xmm5, %xmm0 8702 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8703 ; SSE4-NEXT: movapd %xmm2, %xmm0 8704 ; SSE4-NEXT: movapd %xmm3, %xmm1 8705 ; SSE4-NEXT: retq 8706 ; 8707 ; AVX1-LABEL: test173: 8708 ; AVX1: # %bb.0: # %entry 8709 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8710 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8711 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8712 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 8713 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8714 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8715 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4 8716 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3 8717 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8718 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8719 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8720 ; AVX1-NEXT: retq 8721 ; 8722 ; AVX2-LABEL: test173: 8723 ; AVX2: # %bb.0: # %entry 8724 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8725 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 8726 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 8727 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8728 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8729 ; AVX2-NEXT: retq 8730 ; 8731 ; AVX512BW-LABEL: test173: 8732 ; AVX512BW: # %bb.0: # %entry 8733 ; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 8734 ; AVX512BW-NEXT: retq 8735 entry: 8736 %cmp = icmp ult <4 x i64> %a, %b 8737 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8738 ret <4 x i64> %sel 8739 } 8740 8741 define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) { 8742 ; SSE2-LABEL: test174: 8743 ; SSE2: # %bb.0: # %entry 8744 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 8745 ; SSE2-NEXT: movdqa %xmm2, %xmm5 8746 ; SSE2-NEXT: pxor %xmm4, %xmm5 8747 ; SSE2-NEXT: movdqa %xmm0, %xmm6 8748 ; SSE2-NEXT: pxor %xmm4, %xmm6 8749 ; SSE2-NEXT: movdqa %xmm6, %xmm7 8750 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8751 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8752 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8753 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8754 ; SSE2-NEXT: pand %xmm8, %xmm5 8755 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8756 ; SSE2-NEXT: por %xmm5, %xmm6 8757 ; SSE2-NEXT: pand %xmm6, %xmm0 8758 ; SSE2-NEXT: pandn %xmm2, %xmm6 8759 ; SSE2-NEXT: por %xmm6, %xmm0 8760 ; SSE2-NEXT: movdqa %xmm3, %xmm2 8761 ; SSE2-NEXT: pxor %xmm4, %xmm2 8762 ; SSE2-NEXT: pxor %xmm1, %xmm4 8763 ; SSE2-NEXT: movdqa %xmm4, %xmm5 8764 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8765 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8766 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8767 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8768 ; SSE2-NEXT: pand %xmm6, %xmm2 8769 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8770 ; SSE2-NEXT: por %xmm2, %xmm4 8771 ; SSE2-NEXT: pand %xmm4, %xmm1 8772 ; SSE2-NEXT: pandn %xmm3, %xmm4 8773 ; SSE2-NEXT: por %xmm4, %xmm1 8774 ; SSE2-NEXT: retq 8775 ; 8776 ; SSE4-LABEL: test174: 8777 ; SSE4: # %bb.0: # %entry 8778 ; SSE4-NEXT: movdqa %xmm0, %xmm4 8779 ; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8780 ; SSE4-NEXT: movdqa %xmm2, %xmm6 8781 ; SSE4-NEXT: pxor %xmm5, %xmm6 8782 ; SSE4-NEXT: pxor %xmm5, %xmm0 8783 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8784 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8785 ; SSE4-NEXT: movdqa %xmm3, %xmm0 8786 ; SSE4-NEXT: pxor %xmm5, %xmm0 8787 ; SSE4-NEXT: pxor %xmm1, %xmm5 8788 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8789 ; SSE4-NEXT: movdqa %xmm5, %xmm0 8790 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8791 ; SSE4-NEXT: movapd %xmm2, %xmm0 8792 ; SSE4-NEXT: movapd %xmm3, %xmm1 8793 ; SSE4-NEXT: retq 8794 ; 8795 ; AVX1-LABEL: test174: 8796 ; AVX1: # %bb.0: # %entry 8797 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8798 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8799 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8800 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 8801 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8802 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8803 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4 8804 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3 8805 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8806 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8807 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8808 ; AVX1-NEXT: retq 8809 ; 8810 ; AVX2-LABEL: test174: 8811 ; AVX2: # %bb.0: # %entry 8812 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8813 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 8814 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 8815 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8816 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8817 ; AVX2-NEXT: retq 8818 ; 8819 ; AVX512BW-LABEL: test174: 8820 ; AVX512BW: # %bb.0: # %entry 8821 ; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 8822 ; AVX512BW-NEXT: retq 8823 entry: 8824 %cmp = icmp ule <4 x i64> %a, %b 8825 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8826 ret <4 x i64> %sel 8827 } 8828 8829 define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) { 8830 ; SSE2-LABEL: test175: 8831 ; SSE2: # %bb.0: # %entry 8832 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 8833 ; SSE2-NEXT: movdqa %xmm0, %xmm5 8834 ; SSE2-NEXT: pxor %xmm4, %xmm5 8835 ; SSE2-NEXT: movdqa %xmm2, %xmm6 8836 ; SSE2-NEXT: pxor %xmm4, %xmm6 8837 ; SSE2-NEXT: movdqa %xmm6, %xmm7 8838 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8839 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8840 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8841 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8842 ; SSE2-NEXT: pand %xmm8, %xmm5 8843 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8844 ; SSE2-NEXT: por %xmm5, %xmm6 8845 ; SSE2-NEXT: pand %xmm6, %xmm0 8846 ; SSE2-NEXT: pandn %xmm2, %xmm6 8847 ; SSE2-NEXT: por %xmm6, %xmm0 8848 ; SSE2-NEXT: movdqa %xmm1, %xmm2 8849 ; SSE2-NEXT: pxor %xmm4, %xmm2 8850 ; SSE2-NEXT: pxor %xmm3, %xmm4 8851 ; SSE2-NEXT: movdqa %xmm4, %xmm5 8852 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8853 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8854 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8855 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8856 ; SSE2-NEXT: pand %xmm6, %xmm2 8857 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8858 ; SSE2-NEXT: por %xmm2, %xmm4 8859 ; SSE2-NEXT: pand %xmm4, %xmm1 8860 ; SSE2-NEXT: pandn %xmm3, %xmm4 8861 ; SSE2-NEXT: por %xmm4, %xmm1 8862 ; SSE2-NEXT: retq 8863 ; 8864 ; SSE4-LABEL: test175: 8865 ; SSE4: # %bb.0: # %entry 8866 ; SSE4-NEXT: movdqa %xmm0, %xmm4 8867 ; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8868 ; SSE4-NEXT: movdqa %xmm0, %xmm6 8869 ; SSE4-NEXT: pxor %xmm5, %xmm6 8870 ; SSE4-NEXT: movdqa %xmm2, %xmm0 8871 ; SSE4-NEXT: pxor %xmm5, %xmm0 8872 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8873 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8874 ; SSE4-NEXT: movdqa %xmm1, %xmm0 8875 ; SSE4-NEXT: pxor %xmm5, %xmm0 8876 ; SSE4-NEXT: pxor %xmm3, %xmm5 8877 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8878 ; SSE4-NEXT: movdqa %xmm5, %xmm0 8879 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8880 ; SSE4-NEXT: movapd %xmm2, %xmm0 8881 ; SSE4-NEXT: movapd %xmm3, %xmm1 8882 ; SSE4-NEXT: retq 8883 ; 8884 ; AVX1-LABEL: test175: 8885 ; AVX1: # %bb.0: # %entry 8886 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8887 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8888 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8889 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 8890 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8891 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8892 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4 8893 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3 8894 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8895 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8896 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8897 ; AVX1-NEXT: retq 8898 ; 8899 ; AVX2-LABEL: test175: 8900 ; AVX2: # %bb.0: # %entry 8901 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8902 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 8903 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 8904 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8905 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8906 ; AVX2-NEXT: retq 8907 ; 8908 ; AVX512BW-LABEL: test175: 8909 ; AVX512BW: # %bb.0: # %entry 8910 ; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 8911 ; AVX512BW-NEXT: retq 8912 entry: 8913 %cmp = icmp ugt <4 x i64> %a, %b 8914 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8915 ret <4 x i64> %sel 8916 } 8917 8918 define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) { 8919 ; SSE2-LABEL: test176: 8920 ; SSE2: # %bb.0: # %entry 8921 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 8922 ; SSE2-NEXT: movdqa %xmm0, %xmm5 8923 ; SSE2-NEXT: pxor %xmm4, %xmm5 8924 ; SSE2-NEXT: movdqa %xmm2, %xmm6 8925 ; SSE2-NEXT: pxor %xmm4, %xmm6 8926 ; SSE2-NEXT: movdqa %xmm6, %xmm7 8927 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8928 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8929 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8930 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8931 ; SSE2-NEXT: pand %xmm8, %xmm5 8932 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8933 ; SSE2-NEXT: por %xmm5, %xmm6 8934 ; SSE2-NEXT: pand %xmm6, %xmm0 8935 ; SSE2-NEXT: pandn %xmm2, %xmm6 8936 ; SSE2-NEXT: por %xmm6, %xmm0 8937 ; SSE2-NEXT: movdqa %xmm1, %xmm2 8938 ; SSE2-NEXT: pxor %xmm4, %xmm2 8939 ; SSE2-NEXT: pxor %xmm3, %xmm4 8940 ; SSE2-NEXT: movdqa %xmm4, %xmm5 8941 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8942 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8943 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8944 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8945 ; SSE2-NEXT: pand %xmm6, %xmm2 8946 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8947 ; SSE2-NEXT: por %xmm2, %xmm4 8948 ; SSE2-NEXT: pand %xmm4, %xmm1 8949 ; SSE2-NEXT: pandn %xmm3, %xmm4 8950 ; SSE2-NEXT: por %xmm4, %xmm1 8951 ; SSE2-NEXT: retq 8952 ; 8953 ; SSE4-LABEL: test176: 8954 ; SSE4: # %bb.0: # %entry 8955 ; SSE4-NEXT: movdqa %xmm0, %xmm4 8956 ; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8957 ; SSE4-NEXT: movdqa %xmm0, %xmm6 8958 ; SSE4-NEXT: pxor %xmm5, %xmm6 8959 ; SSE4-NEXT: movdqa %xmm2, %xmm0 8960 ; SSE4-NEXT: pxor %xmm5, %xmm0 8961 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8962 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8963 ; SSE4-NEXT: movdqa %xmm1, %xmm0 8964 ; SSE4-NEXT: pxor %xmm5, %xmm0 8965 ; SSE4-NEXT: pxor %xmm3, %xmm5 8966 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8967 ; SSE4-NEXT: movdqa %xmm5, %xmm0 8968 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8969 ; SSE4-NEXT: movapd %xmm2, %xmm0 8970 ; SSE4-NEXT: movapd %xmm3, %xmm1 8971 ; SSE4-NEXT: retq 8972 ; 8973 ; AVX1-LABEL: test176: 8974 ; AVX1: # %bb.0: # %entry 8975 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8976 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8977 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8978 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 8979 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8980 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8981 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4 8982 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3 8983 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8984 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8985 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8986 ; AVX1-NEXT: retq 8987 ; 8988 ; AVX2-LABEL: test176: 8989 ; AVX2: # %bb.0: # %entry 8990 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8991 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 8992 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 8993 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8994 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8995 ; AVX2-NEXT: retq 8996 ; 8997 ; AVX512BW-LABEL: test176: 8998 ; AVX512BW: # %bb.0: # %entry 8999 ; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 9000 ; AVX512BW-NEXT: retq 9001 entry: 9002 %cmp = icmp uge <4 x i64> %a, %b 9003 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9004 ret <4 x i64> %sel 9005 } 9006 9007 define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) { 9008 ; SSE2-LABEL: test177: 9009 ; SSE2: # %bb.0: # %entry 9010 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 9011 ; SSE2-NEXT: movdqa %xmm0, %xmm3 9012 ; SSE2-NEXT: pxor %xmm2, %xmm3 9013 ; SSE2-NEXT: pxor %xmm1, %xmm2 9014 ; SSE2-NEXT: movdqa %xmm2, %xmm4 9015 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9016 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9017 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9018 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9019 ; SSE2-NEXT: pand %xmm5, %xmm2 9020 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9021 ; SSE2-NEXT: por %xmm2, %xmm3 9022 ; SSE2-NEXT: pand %xmm3, %xmm0 9023 ; SSE2-NEXT: pandn %xmm1, %xmm3 9024 ; SSE2-NEXT: por %xmm3, %xmm0 9025 ; SSE2-NEXT: retq 9026 ; 9027 ; SSE4-LABEL: test177: 9028 ; SSE4: # %bb.0: # %entry 9029 ; SSE4-NEXT: movdqa %xmm0, %xmm2 9030 ; SSE4-NEXT: movdqa %xmm1, %xmm0 9031 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9032 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9033 ; SSE4-NEXT: movapd %xmm1, %xmm0 9034 ; SSE4-NEXT: retq 9035 ; 9036 ; AVX1-LABEL: test177: 9037 ; AVX1: # %bb.0: # %entry 9038 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9039 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9040 ; AVX1-NEXT: retq 9041 ; 9042 ; AVX2-LABEL: test177: 9043 ; AVX2: # %bb.0: # %entry 9044 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9045 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9046 ; AVX2-NEXT: retq 9047 ; 9048 ; AVX512BW-LABEL: test177: 9049 ; AVX512BW: # %bb.0: # %entry 9050 ; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 9051 ; AVX512BW-NEXT: retq 9052 entry: 9053 %cmp = icmp slt <2 x i64> %a, %b 9054 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9055 ret <2 x i64> %sel 9056 } 9057 9058 define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) { 9059 ; SSE2-LABEL: test178: 9060 ; SSE2: # %bb.0: # %entry 9061 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 9062 ; SSE2-NEXT: movdqa %xmm0, %xmm3 9063 ; SSE2-NEXT: pxor %xmm2, %xmm3 9064 ; SSE2-NEXT: pxor %xmm1, %xmm2 9065 ; SSE2-NEXT: movdqa %xmm2, %xmm4 9066 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9067 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9068 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9069 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9070 ; SSE2-NEXT: pand %xmm5, %xmm2 9071 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9072 ; SSE2-NEXT: por %xmm2, %xmm3 9073 ; SSE2-NEXT: pand %xmm3, %xmm0 9074 ; SSE2-NEXT: pandn %xmm1, %xmm3 9075 ; SSE2-NEXT: por %xmm3, %xmm0 9076 ; SSE2-NEXT: retq 9077 ; 9078 ; SSE4-LABEL: test178: 9079 ; SSE4: # %bb.0: # %entry 9080 ; SSE4-NEXT: movdqa %xmm0, %xmm2 9081 ; SSE4-NEXT: movdqa %xmm1, %xmm0 9082 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9083 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9084 ; SSE4-NEXT: movapd %xmm1, %xmm0 9085 ; SSE4-NEXT: retq 9086 ; 9087 ; AVX1-LABEL: test178: 9088 ; AVX1: # %bb.0: # %entry 9089 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9090 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9091 ; AVX1-NEXT: retq 9092 ; 9093 ; AVX2-LABEL: test178: 9094 ; AVX2: # %bb.0: # %entry 9095 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9096 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9097 ; AVX2-NEXT: retq 9098 ; 9099 ; AVX512BW-LABEL: test178: 9100 ; AVX512BW: # %bb.0: # %entry 9101 ; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 9102 ; AVX512BW-NEXT: retq 9103 entry: 9104 %cmp = icmp sle <2 x i64> %a, %b 9105 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9106 ret <2 x i64> %sel 9107 } 9108 9109 define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) { 9110 ; SSE2-LABEL: test179: 9111 ; SSE2: # %bb.0: # %entry 9112 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 9113 ; SSE2-NEXT: movdqa %xmm1, %xmm3 9114 ; SSE2-NEXT: pxor %xmm2, %xmm3 9115 ; SSE2-NEXT: pxor %xmm0, %xmm2 9116 ; SSE2-NEXT: movdqa %xmm2, %xmm4 9117 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9118 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9119 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9120 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9121 ; SSE2-NEXT: pand %xmm5, %xmm2 9122 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9123 ; SSE2-NEXT: por %xmm2, %xmm3 9124 ; SSE2-NEXT: pand %xmm3, %xmm0 9125 ; SSE2-NEXT: pandn %xmm1, %xmm3 9126 ; SSE2-NEXT: por %xmm3, %xmm0 9127 ; SSE2-NEXT: retq 9128 ; 9129 ; SSE4-LABEL: test179: 9130 ; SSE4: # %bb.0: # %entry 9131 ; SSE4-NEXT: movdqa %xmm0, %xmm2 9132 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 9133 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9134 ; SSE4-NEXT: movapd %xmm1, %xmm0 9135 ; SSE4-NEXT: retq 9136 ; 9137 ; AVX1-LABEL: test179: 9138 ; AVX1: # %bb.0: # %entry 9139 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9140 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9141 ; AVX1-NEXT: retq 9142 ; 9143 ; AVX2-LABEL: test179: 9144 ; AVX2: # %bb.0: # %entry 9145 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9146 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9147 ; AVX2-NEXT: retq 9148 ; 9149 ; AVX512BW-LABEL: test179: 9150 ; AVX512BW: # %bb.0: # %entry 9151 ; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 9152 ; AVX512BW-NEXT: retq 9153 entry: 9154 %cmp = icmp sgt <2 x i64> %a, %b 9155 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9156 ret <2 x i64> %sel 9157 } 9158 9159 define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) { 9160 ; SSE2-LABEL: test180: 9161 ; SSE2: # %bb.0: # %entry 9162 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 9163 ; SSE2-NEXT: movdqa %xmm1, %xmm3 9164 ; SSE2-NEXT: pxor %xmm2, %xmm3 9165 ; SSE2-NEXT: pxor %xmm0, %xmm2 9166 ; SSE2-NEXT: movdqa %xmm2, %xmm4 9167 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9168 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9169 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9170 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9171 ; SSE2-NEXT: pand %xmm5, %xmm2 9172 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9173 ; SSE2-NEXT: por %xmm2, %xmm3 9174 ; SSE2-NEXT: pand %xmm3, %xmm0 9175 ; SSE2-NEXT: pandn %xmm1, %xmm3 9176 ; SSE2-NEXT: por %xmm3, %xmm0 9177 ; SSE2-NEXT: retq 9178 ; 9179 ; SSE4-LABEL: test180: 9180 ; SSE4: # %bb.0: # %entry 9181 ; SSE4-NEXT: movdqa %xmm0, %xmm2 9182 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 9183 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9184 ; SSE4-NEXT: movapd %xmm1, %xmm0 9185 ; SSE4-NEXT: retq 9186 ; 9187 ; AVX1-LABEL: test180: 9188 ; AVX1: # %bb.0: # %entry 9189 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9190 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9191 ; AVX1-NEXT: retq 9192 ; 9193 ; AVX2-LABEL: test180: 9194 ; AVX2: # %bb.0: # %entry 9195 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9196 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9197 ; AVX2-NEXT: retq 9198 ; 9199 ; AVX512BW-LABEL: test180: 9200 ; AVX512BW: # %bb.0: # %entry 9201 ; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 9202 ; AVX512BW-NEXT: retq 9203 entry: 9204 %cmp = icmp sge <2 x i64> %a, %b 9205 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9206 ret <2 x i64> %sel 9207 } 9208 9209 define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) { 9210 ; SSE2-LABEL: test181: 9211 ; SSE2: # %bb.0: # %entry 9212 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 9213 ; SSE2-NEXT: movdqa %xmm0, %xmm3 9214 ; SSE2-NEXT: pxor %xmm2, %xmm3 9215 ; SSE2-NEXT: pxor %xmm1, %xmm2 9216 ; SSE2-NEXT: movdqa %xmm2, %xmm4 9217 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9218 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9219 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9220 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9221 ; SSE2-NEXT: pand %xmm5, %xmm2 9222 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9223 ; SSE2-NEXT: por %xmm2, %xmm3 9224 ; SSE2-NEXT: pand %xmm3, %xmm0 9225 ; SSE2-NEXT: pandn %xmm1, %xmm3 9226 ; SSE2-NEXT: por %xmm3, %xmm0 9227 ; SSE2-NEXT: retq 9228 ; 9229 ; SSE4-LABEL: test181: 9230 ; SSE4: # %bb.0: # %entry 9231 ; SSE4-NEXT: movdqa %xmm0, %xmm2 9232 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9233 ; SSE4-NEXT: movdqa %xmm2, %xmm3 9234 ; SSE4-NEXT: pxor %xmm0, %xmm3 9235 ; SSE4-NEXT: pxor %xmm1, %xmm0 9236 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9237 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9238 ; SSE4-NEXT: movapd %xmm1, %xmm0 9239 ; SSE4-NEXT: retq 9240 ; 9241 ; AVX1-LABEL: test181: 9242 ; AVX1: # %bb.0: # %entry 9243 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9244 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 9245 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 9246 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9247 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9248 ; AVX1-NEXT: retq 9249 ; 9250 ; AVX2-LABEL: test181: 9251 ; AVX2: # %bb.0: # %entry 9252 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9253 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 9254 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 9255 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9256 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9257 ; AVX2-NEXT: retq 9258 ; 9259 ; AVX512BW-LABEL: test181: 9260 ; AVX512BW: # %bb.0: # %entry 9261 ; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 9262 ; AVX512BW-NEXT: retq 9263 entry: 9264 %cmp = icmp ult <2 x i64> %a, %b 9265 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9266 ret <2 x i64> %sel 9267 } 9268 9269 define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) { 9270 ; SSE2-LABEL: test182: 9271 ; SSE2: # %bb.0: # %entry 9272 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 9273 ; SSE2-NEXT: movdqa %xmm0, %xmm3 9274 ; SSE2-NEXT: pxor %xmm2, %xmm3 9275 ; SSE2-NEXT: pxor %xmm1, %xmm2 9276 ; SSE2-NEXT: movdqa %xmm2, %xmm4 9277 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9278 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9279 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9280 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9281 ; SSE2-NEXT: pand %xmm5, %xmm2 9282 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9283 ; SSE2-NEXT: por %xmm2, %xmm3 9284 ; SSE2-NEXT: pand %xmm3, %xmm0 9285 ; SSE2-NEXT: pandn %xmm1, %xmm3 9286 ; SSE2-NEXT: por %xmm3, %xmm0 9287 ; SSE2-NEXT: retq 9288 ; 9289 ; SSE4-LABEL: test182: 9290 ; SSE4: # %bb.0: # %entry 9291 ; SSE4-NEXT: movdqa %xmm0, %xmm2 9292 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9293 ; SSE4-NEXT: movdqa %xmm2, %xmm3 9294 ; SSE4-NEXT: pxor %xmm0, %xmm3 9295 ; SSE4-NEXT: pxor %xmm1, %xmm0 9296 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9297 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9298 ; SSE4-NEXT: movapd %xmm1, %xmm0 9299 ; SSE4-NEXT: retq 9300 ; 9301 ; AVX1-LABEL: test182: 9302 ; AVX1: # %bb.0: # %entry 9303 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9304 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 9305 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 9306 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9307 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9308 ; AVX1-NEXT: retq 9309 ; 9310 ; AVX2-LABEL: test182: 9311 ; AVX2: # %bb.0: # %entry 9312 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9313 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 9314 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 9315 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9316 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9317 ; AVX2-NEXT: retq 9318 ; 9319 ; AVX512BW-LABEL: test182: 9320 ; AVX512BW: # %bb.0: # %entry 9321 ; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 9322 ; AVX512BW-NEXT: retq 9323 entry: 9324 %cmp = icmp ule <2 x i64> %a, %b 9325 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9326 ret <2 x i64> %sel 9327 } 9328 9329 define <2 x i64> @test183(<2 x i64> %a, <2 x i64> %b) { 9330 ; SSE2-LABEL: test183: 9331 ; SSE2: # %bb.0: # %entry 9332 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 9333 ; SSE2-NEXT: movdqa %xmm1, %xmm3 9334 ; SSE2-NEXT: pxor %xmm2, %xmm3 9335 ; SSE2-NEXT: pxor %xmm0, %xmm2 9336 ; SSE2-NEXT: movdqa %xmm2, %xmm4 9337 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9338 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9339 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9340 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9341 ; SSE2-NEXT: pand %xmm5, %xmm2 9342 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9343 ; SSE2-NEXT: por %xmm2, %xmm3 9344 ; SSE2-NEXT: pand %xmm3, %xmm0 9345 ; SSE2-NEXT: pandn %xmm1, %xmm3 9346 ; SSE2-NEXT: por %xmm3, %xmm0 9347 ; SSE2-NEXT: retq 9348 ; 9349 ; SSE4-LABEL: test183: 9350 ; SSE4: # %bb.0: # %entry 9351 ; SSE4-NEXT: movdqa %xmm0, %xmm2 9352 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9353 ; SSE4-NEXT: movdqa %xmm1, %xmm3 9354 ; SSE4-NEXT: pxor %xmm0, %xmm3 9355 ; SSE4-NEXT: pxor %xmm2, %xmm0 9356 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9357 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9358 ; SSE4-NEXT: movapd %xmm1, %xmm0 9359 ; SSE4-NEXT: retq 9360 ; 9361 ; AVX1-LABEL: test183: 9362 ; AVX1: # %bb.0: # %entry 9363 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9364 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 9365 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 9366 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9367 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9368 ; AVX1-NEXT: retq 9369 ; 9370 ; AVX2-LABEL: test183: 9371 ; AVX2: # %bb.0: # %entry 9372 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9373 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 9374 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 9375 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9376 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9377 ; AVX2-NEXT: retq 9378 ; 9379 ; AVX512BW-LABEL: test183: 9380 ; AVX512BW: # %bb.0: # %entry 9381 ; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 9382 ; AVX512BW-NEXT: retq 9383 entry: 9384 %cmp = icmp ugt <2 x i64> %a, %b 9385 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9386 ret <2 x i64> %sel 9387 } 9388 9389 define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) { 9390 ; SSE2-LABEL: test184: 9391 ; SSE2: # %bb.0: # %entry 9392 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 9393 ; SSE2-NEXT: movdqa %xmm1, %xmm3 9394 ; SSE2-NEXT: pxor %xmm2, %xmm3 9395 ; SSE2-NEXT: pxor %xmm0, %xmm2 9396 ; SSE2-NEXT: movdqa %xmm2, %xmm4 9397 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9398 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9399 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9400 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9401 ; SSE2-NEXT: pand %xmm5, %xmm2 9402 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9403 ; SSE2-NEXT: por %xmm2, %xmm3 9404 ; SSE2-NEXT: pand %xmm3, %xmm0 9405 ; SSE2-NEXT: pandn %xmm1, %xmm3 9406 ; SSE2-NEXT: por %xmm3, %xmm0 9407 ; SSE2-NEXT: retq 9408 ; 9409 ; SSE4-LABEL: test184: 9410 ; SSE4: # %bb.0: # %entry 9411 ; SSE4-NEXT: movdqa %xmm0, %xmm2 9412 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9413 ; SSE4-NEXT: movdqa %xmm1, %xmm3 9414 ; SSE4-NEXT: pxor %xmm0, %xmm3 9415 ; SSE4-NEXT: pxor %xmm2, %xmm0 9416 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9417 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9418 ; SSE4-NEXT: movapd %xmm1, %xmm0 9419 ; SSE4-NEXT: retq 9420 ; 9421 ; AVX1-LABEL: test184: 9422 ; AVX1: # %bb.0: # %entry 9423 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9424 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 9425 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 9426 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9427 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9428 ; AVX1-NEXT: retq 9429 ; 9430 ; AVX2-LABEL: test184: 9431 ; AVX2: # %bb.0: # %entry 9432 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9433 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 9434 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 9435 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9436 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9437 ; AVX2-NEXT: retq 9438 ; 9439 ; AVX512BW-LABEL: test184: 9440 ; AVX512BW: # %bb.0: # %entry 9441 ; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 9442 ; AVX512BW-NEXT: retq 9443 entry: 9444 %cmp = icmp uge <2 x i64> %a, %b 9445 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9446 ret <2 x i64> %sel 9447 } 9448 9449 define <2 x i64> @test185(<2 x i64> %a, <2 x i64> %b) { 9450 ; SSE2-LABEL: test185: 9451 ; SSE2: # %bb.0: # %entry 9452 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 9453 ; SSE2-NEXT: movdqa %xmm1, %xmm3 9454 ; SSE2-NEXT: pxor %xmm2, %xmm3 9455 ; SSE2-NEXT: pxor %xmm0, %xmm2 9456 ; SSE2-NEXT: movdqa %xmm2, %xmm4 9457 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9458 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9459 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9460 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9461 ; SSE2-NEXT: pand %xmm5, %xmm2 9462 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9463 ; SSE2-NEXT: por %xmm2, %xmm3 9464 ; SSE2-NEXT: pand %xmm3, %xmm0 9465 ; SSE2-NEXT: pandn %xmm1, %xmm3 9466 ; SSE2-NEXT: por %xmm3, %xmm0 9467 ; SSE2-NEXT: retq 9468 ; 9469 ; SSE4-LABEL: test185: 9470 ; SSE4: # %bb.0: # %entry 9471 ; SSE4-NEXT: movdqa %xmm0, %xmm2 9472 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 9473 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9474 ; SSE4-NEXT: movapd %xmm1, %xmm0 9475 ; SSE4-NEXT: retq 9476 ; 9477 ; AVX1-LABEL: test185: 9478 ; AVX1: # %bb.0: # %entry 9479 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9480 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9481 ; AVX1-NEXT: retq 9482 ; 9483 ; AVX2-LABEL: test185: 9484 ; AVX2: # %bb.0: # %entry 9485 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9486 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9487 ; AVX2-NEXT: retq 9488 ; 9489 ; AVX512BW-LABEL: test185: 9490 ; AVX512BW: # %bb.0: # %entry 9491 ; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 9492 ; AVX512BW-NEXT: retq 9493 entry: 9494 %cmp = icmp slt <2 x i64> %a, %b 9495 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9496 ret <2 x i64> %sel 9497 } 9498 9499 define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) { 9500 ; SSE2-LABEL: test186: 9501 ; SSE2: # %bb.0: # %entry 9502 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 9503 ; SSE2-NEXT: movdqa %xmm1, %xmm3 9504 ; SSE2-NEXT: pxor %xmm2, %xmm3 9505 ; SSE2-NEXT: pxor %xmm0, %xmm2 9506 ; SSE2-NEXT: movdqa %xmm2, %xmm4 9507 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9508 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9509 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9510 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9511 ; SSE2-NEXT: pand %xmm5, %xmm2 9512 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9513 ; SSE2-NEXT: por %xmm2, %xmm3 9514 ; SSE2-NEXT: pand %xmm3, %xmm0 9515 ; SSE2-NEXT: pandn %xmm1, %xmm3 9516 ; SSE2-NEXT: por %xmm3, %xmm0 9517 ; SSE2-NEXT: retq 9518 ; 9519 ; SSE4-LABEL: test186: 9520 ; SSE4: # %bb.0: # %entry 9521 ; SSE4-NEXT: movdqa %xmm0, %xmm2 9522 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 9523 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9524 ; SSE4-NEXT: movapd %xmm1, %xmm0 9525 ; SSE4-NEXT: retq 9526 ; 9527 ; AVX1-LABEL: test186: 9528 ; AVX1: # %bb.0: # %entry 9529 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9530 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9531 ; AVX1-NEXT: retq 9532 ; 9533 ; AVX2-LABEL: test186: 9534 ; AVX2: # %bb.0: # %entry 9535 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9536 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9537 ; AVX2-NEXT: retq 9538 ; 9539 ; AVX512BW-LABEL: test186: 9540 ; AVX512BW: # %bb.0: # %entry 9541 ; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 9542 ; AVX512BW-NEXT: retq 9543 entry: 9544 %cmp = icmp sle <2 x i64> %a, %b 9545 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9546 ret <2 x i64> %sel 9547 } 9548 9549 define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) { 9550 ; SSE2-LABEL: test187: 9551 ; SSE2: # %bb.0: # %entry 9552 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 9553 ; SSE2-NEXT: movdqa %xmm0, %xmm3 9554 ; SSE2-NEXT: pxor %xmm2, %xmm3 9555 ; SSE2-NEXT: pxor %xmm1, %xmm2 9556 ; SSE2-NEXT: movdqa %xmm2, %xmm4 9557 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9558 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9559 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9560 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9561 ; SSE2-NEXT: pand %xmm5, %xmm2 9562 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9563 ; SSE2-NEXT: por %xmm2, %xmm3 9564 ; SSE2-NEXT: pand %xmm3, %xmm0 9565 ; SSE2-NEXT: pandn %xmm1, %xmm3 9566 ; SSE2-NEXT: por %xmm3, %xmm0 9567 ; SSE2-NEXT: retq 9568 ; 9569 ; SSE4-LABEL: test187: 9570 ; SSE4: # %bb.0: # %entry 9571 ; SSE4-NEXT: movdqa %xmm0, %xmm2 9572 ; SSE4-NEXT: movdqa %xmm1, %xmm0 9573 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9574 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9575 ; SSE4-NEXT: movapd %xmm1, %xmm0 9576 ; SSE4-NEXT: retq 9577 ; 9578 ; AVX1-LABEL: test187: 9579 ; AVX1: # %bb.0: # %entry 9580 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9581 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9582 ; AVX1-NEXT: retq 9583 ; 9584 ; AVX2-LABEL: test187: 9585 ; AVX2: # %bb.0: # %entry 9586 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9587 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9588 ; AVX2-NEXT: retq 9589 ; 9590 ; AVX512BW-LABEL: test187: 9591 ; AVX512BW: # %bb.0: # %entry 9592 ; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 9593 ; AVX512BW-NEXT: retq 9594 entry: 9595 %cmp = icmp sgt <2 x i64> %a, %b 9596 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9597 ret <2 x i64> %sel 9598 } 9599 9600 define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) { 9601 ; SSE2-LABEL: test188: 9602 ; SSE2: # %bb.0: # %entry 9603 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 9604 ; SSE2-NEXT: movdqa %xmm0, %xmm3 9605 ; SSE2-NEXT: pxor %xmm2, %xmm3 9606 ; SSE2-NEXT: pxor %xmm1, %xmm2 9607 ; SSE2-NEXT: movdqa %xmm2, %xmm4 9608 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9609 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9610 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9611 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9612 ; SSE2-NEXT: pand %xmm5, %xmm2 9613 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9614 ; SSE2-NEXT: por %xmm2, %xmm3 9615 ; SSE2-NEXT: pand %xmm3, %xmm0 9616 ; SSE2-NEXT: pandn %xmm1, %xmm3 9617 ; SSE2-NEXT: por %xmm3, %xmm0 9618 ; SSE2-NEXT: retq 9619 ; 9620 ; SSE4-LABEL: test188: 9621 ; SSE4: # %bb.0: # %entry 9622 ; SSE4-NEXT: movdqa %xmm0, %xmm2 9623 ; SSE4-NEXT: movdqa %xmm1, %xmm0 9624 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9625 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9626 ; SSE4-NEXT: movapd %xmm1, %xmm0 9627 ; SSE4-NEXT: retq 9628 ; 9629 ; AVX1-LABEL: test188: 9630 ; AVX1: # %bb.0: # %entry 9631 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9632 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9633 ; AVX1-NEXT: retq 9634 ; 9635 ; AVX2-LABEL: test188: 9636 ; AVX2: # %bb.0: # %entry 9637 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9638 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9639 ; AVX2-NEXT: retq 9640 ; 9641 ; AVX512BW-LABEL: test188: 9642 ; AVX512BW: # %bb.0: # %entry 9643 ; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 9644 ; AVX512BW-NEXT: retq 9645 entry: 9646 %cmp = icmp sge <2 x i64> %a, %b 9647 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9648 ret <2 x i64> %sel 9649 } 9650 9651 define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) { 9652 ; SSE2-LABEL: test189: 9653 ; SSE2: # %bb.0: # %entry 9654 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 9655 ; SSE2-NEXT: movdqa %xmm1, %xmm3 9656 ; SSE2-NEXT: pxor %xmm2, %xmm3 9657 ; SSE2-NEXT: pxor %xmm0, %xmm2 9658 ; SSE2-NEXT: movdqa %xmm2, %xmm4 9659 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9660 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9661 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9662 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9663 ; SSE2-NEXT: pand %xmm5, %xmm2 9664 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9665 ; SSE2-NEXT: por %xmm2, %xmm3 9666 ; SSE2-NEXT: pand %xmm3, %xmm0 9667 ; SSE2-NEXT: pandn %xmm1, %xmm3 9668 ; SSE2-NEXT: por %xmm3, %xmm0 9669 ; SSE2-NEXT: retq 9670 ; 9671 ; SSE4-LABEL: test189: 9672 ; SSE4: # %bb.0: # %entry 9673 ; SSE4-NEXT: movdqa %xmm0, %xmm2 9674 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9675 ; SSE4-NEXT: movdqa %xmm1, %xmm3 9676 ; SSE4-NEXT: pxor %xmm0, %xmm3 9677 ; SSE4-NEXT: pxor %xmm2, %xmm0 9678 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9679 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9680 ; SSE4-NEXT: movapd %xmm1, %xmm0 9681 ; SSE4-NEXT: retq 9682 ; 9683 ; AVX1-LABEL: test189: 9684 ; AVX1: # %bb.0: # %entry 9685 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9686 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 9687 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 9688 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9689 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9690 ; AVX1-NEXT: retq 9691 ; 9692 ; AVX2-LABEL: test189: 9693 ; AVX2: # %bb.0: # %entry 9694 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9695 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 9696 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 9697 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9698 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9699 ; AVX2-NEXT: retq 9700 ; 9701 ; AVX512BW-LABEL: test189: 9702 ; AVX512BW: # %bb.0: # %entry 9703 ; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 9704 ; AVX512BW-NEXT: retq 9705 entry: 9706 %cmp = icmp ult <2 x i64> %a, %b 9707 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9708 ret <2 x i64> %sel 9709 } 9710 9711 define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) { 9712 ; SSE2-LABEL: test190: 9713 ; SSE2: # %bb.0: # %entry 9714 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 9715 ; SSE2-NEXT: movdqa %xmm1, %xmm3 9716 ; SSE2-NEXT: pxor %xmm2, %xmm3 9717 ; SSE2-NEXT: pxor %xmm0, %xmm2 9718 ; SSE2-NEXT: movdqa %xmm2, %xmm4 9719 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9720 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9721 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9722 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9723 ; SSE2-NEXT: pand %xmm5, %xmm2 9724 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9725 ; SSE2-NEXT: por %xmm2, %xmm3 9726 ; SSE2-NEXT: pand %xmm3, %xmm0 9727 ; SSE2-NEXT: pandn %xmm1, %xmm3 9728 ; SSE2-NEXT: por %xmm3, %xmm0 9729 ; SSE2-NEXT: retq 9730 ; 9731 ; SSE4-LABEL: test190: 9732 ; SSE4: # %bb.0: # %entry 9733 ; SSE4-NEXT: movdqa %xmm0, %xmm2 9734 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9735 ; SSE4-NEXT: movdqa %xmm1, %xmm3 9736 ; SSE4-NEXT: pxor %xmm0, %xmm3 9737 ; SSE4-NEXT: pxor %xmm2, %xmm0 9738 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9739 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9740 ; SSE4-NEXT: movapd %xmm1, %xmm0 9741 ; SSE4-NEXT: retq 9742 ; 9743 ; AVX1-LABEL: test190: 9744 ; AVX1: # %bb.0: # %entry 9745 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9746 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 9747 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 9748 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9749 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9750 ; AVX1-NEXT: retq 9751 ; 9752 ; AVX2-LABEL: test190: 9753 ; AVX2: # %bb.0: # %entry 9754 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9755 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 9756 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 9757 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9758 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9759 ; AVX2-NEXT: retq 9760 ; 9761 ; AVX512BW-LABEL: test190: 9762 ; AVX512BW: # %bb.0: # %entry 9763 ; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 9764 ; AVX512BW-NEXT: retq 9765 entry: 9766 %cmp = icmp ule <2 x i64> %a, %b 9767 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9768 ret <2 x i64> %sel 9769 } 9770 9771 define <2 x i64> @test191(<2 x i64> %a, <2 x i64> %b) { 9772 ; SSE2-LABEL: test191: 9773 ; SSE2: # %bb.0: # %entry 9774 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 9775 ; SSE2-NEXT: movdqa %xmm0, %xmm3 9776 ; SSE2-NEXT: pxor %xmm2, %xmm3 9777 ; SSE2-NEXT: pxor %xmm1, %xmm2 9778 ; SSE2-NEXT: movdqa %xmm2, %xmm4 9779 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9780 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9781 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9782 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9783 ; SSE2-NEXT: pand %xmm5, %xmm2 9784 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9785 ; SSE2-NEXT: por %xmm2, %xmm3 9786 ; SSE2-NEXT: pand %xmm3, %xmm0 9787 ; SSE2-NEXT: pandn %xmm1, %xmm3 9788 ; SSE2-NEXT: por %xmm3, %xmm0 9789 ; SSE2-NEXT: retq 9790 ; 9791 ; SSE4-LABEL: test191: 9792 ; SSE4: # %bb.0: # %entry 9793 ; SSE4-NEXT: movdqa %xmm0, %xmm2 9794 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9795 ; SSE4-NEXT: movdqa %xmm2, %xmm3 9796 ; SSE4-NEXT: pxor %xmm0, %xmm3 9797 ; SSE4-NEXT: pxor %xmm1, %xmm0 9798 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9799 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9800 ; SSE4-NEXT: movapd %xmm1, %xmm0 9801 ; SSE4-NEXT: retq 9802 ; 9803 ; AVX1-LABEL: test191: 9804 ; AVX1: # %bb.0: # %entry 9805 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9806 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 9807 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 9808 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9809 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9810 ; AVX1-NEXT: retq 9811 ; 9812 ; AVX2-LABEL: test191: 9813 ; AVX2: # %bb.0: # %entry 9814 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9815 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 9816 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 9817 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9818 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9819 ; AVX2-NEXT: retq 9820 ; 9821 ; AVX512BW-LABEL: test191: 9822 ; AVX512BW: # %bb.0: # %entry 9823 ; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 9824 ; AVX512BW-NEXT: retq 9825 entry: 9826 %cmp = icmp ugt <2 x i64> %a, %b 9827 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9828 ret <2 x i64> %sel 9829 } 9830 9831 define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) { 9832 ; SSE2-LABEL: test192: 9833 ; SSE2: # %bb.0: # %entry 9834 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 9835 ; SSE2-NEXT: movdqa %xmm0, %xmm3 9836 ; SSE2-NEXT: pxor %xmm2, %xmm3 9837 ; SSE2-NEXT: pxor %xmm1, %xmm2 9838 ; SSE2-NEXT: movdqa %xmm2, %xmm4 9839 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9840 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9841 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9842 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9843 ; SSE2-NEXT: pand %xmm5, %xmm2 9844 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9845 ; SSE2-NEXT: por %xmm2, %xmm3 9846 ; SSE2-NEXT: pand %xmm3, %xmm0 9847 ; SSE2-NEXT: pandn %xmm1, %xmm3 9848 ; SSE2-NEXT: por %xmm3, %xmm0 9849 ; SSE2-NEXT: retq 9850 ; 9851 ; SSE4-LABEL: test192: 9852 ; SSE4: # %bb.0: # %entry 9853 ; SSE4-NEXT: movdqa %xmm0, %xmm2 9854 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9855 ; SSE4-NEXT: movdqa %xmm2, %xmm3 9856 ; SSE4-NEXT: pxor %xmm0, %xmm3 9857 ; SSE4-NEXT: pxor %xmm1, %xmm0 9858 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9859 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9860 ; SSE4-NEXT: movapd %xmm1, %xmm0 9861 ; SSE4-NEXT: retq 9862 ; 9863 ; AVX1-LABEL: test192: 9864 ; AVX1: # %bb.0: # %entry 9865 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9866 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 9867 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 9868 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9869 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9870 ; AVX1-NEXT: retq 9871 ; 9872 ; AVX2-LABEL: test192: 9873 ; AVX2: # %bb.0: # %entry 9874 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9875 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 9876 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 9877 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9878 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9879 ; AVX2-NEXT: retq 9880 ; 9881 ; AVX512BW-LABEL: test192: 9882 ; AVX512BW: # %bb.0: # %entry 9883 ; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 9884 ; AVX512BW-NEXT: retq 9885 entry: 9886 %cmp = icmp uge <2 x i64> %a, %b 9887 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9888 ret <2 x i64> %sel 9889 } 9890