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-prefixes=SSE,SSE2 3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefixes=SSE,SSE4 4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX1 5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2 6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=knl | FileCheck %s --check-prefixes=AVX,AVX512,AVX512F 7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=skx | FileCheck %s --check-prefixes=AVX,AVX512,AVX512BW 8 9define <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 28entry: 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 34define <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 53entry: 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 59define <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 %xmm2, %xmm0 67; SSE2-NEXT: retq 68; 69; SSE4-LABEL: test3: 70; SSE4: # %bb.0: # %entry 71; SSE4-NEXT: pmaxsb %xmm1, %xmm0 72; SSE4-NEXT: retq 73; 74; AVX-LABEL: test3: 75; AVX: # %bb.0: # %entry 76; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 77; AVX-NEXT: retq 78entry: 79 %cmp = icmp sgt <16 x i8> %a, %b 80 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 81 ret <16 x i8> %sel 82} 83 84define <16 x i8> @test4(<16 x i8> %a, <16 x i8> %b) { 85; SSE2-LABEL: test4: 86; SSE2: # %bb.0: # %entry 87; SSE2-NEXT: movdqa %xmm0, %xmm2 88; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 89; SSE2-NEXT: pand %xmm2, %xmm0 90; SSE2-NEXT: pandn %xmm1, %xmm2 91; SSE2-NEXT: por %xmm2, %xmm0 92; SSE2-NEXT: retq 93; 94; SSE4-LABEL: test4: 95; SSE4: # %bb.0: # %entry 96; SSE4-NEXT: pmaxsb %xmm1, %xmm0 97; SSE4-NEXT: retq 98; 99; AVX-LABEL: test4: 100; AVX: # %bb.0: # %entry 101; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 102; AVX-NEXT: retq 103entry: 104 %cmp = icmp sge <16 x i8> %a, %b 105 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 106 ret <16 x i8> %sel 107} 108 109define <16 x i8> @test5(<16 x i8> %a, <16 x i8> %b) { 110; SSE-LABEL: test5: 111; SSE: # %bb.0: # %entry 112; SSE-NEXT: pminub %xmm1, %xmm0 113; SSE-NEXT: retq 114; 115; AVX-LABEL: test5: 116; AVX: # %bb.0: # %entry 117; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 118; AVX-NEXT: retq 119entry: 120 %cmp = icmp ult <16 x i8> %a, %b 121 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 122 ret <16 x i8> %sel 123} 124 125define <16 x i8> @test6(<16 x i8> %a, <16 x i8> %b) { 126; SSE-LABEL: test6: 127; SSE: # %bb.0: # %entry 128; SSE-NEXT: pminub %xmm1, %xmm0 129; SSE-NEXT: retq 130; 131; AVX-LABEL: test6: 132; AVX: # %bb.0: # %entry 133; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 134; AVX-NEXT: retq 135entry: 136 %cmp = icmp ule <16 x i8> %a, %b 137 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 138 ret <16 x i8> %sel 139} 140 141define <16 x i8> @test7(<16 x i8> %a, <16 x i8> %b) { 142; SSE-LABEL: test7: 143; SSE: # %bb.0: # %entry 144; SSE-NEXT: pmaxub %xmm1, %xmm0 145; SSE-NEXT: retq 146; 147; AVX-LABEL: test7: 148; AVX: # %bb.0: # %entry 149; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 150; AVX-NEXT: retq 151entry: 152 %cmp = icmp ugt <16 x i8> %a, %b 153 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 154 ret <16 x i8> %sel 155} 156 157define <16 x i8> @test8(<16 x i8> %a, <16 x i8> %b) { 158; SSE-LABEL: test8: 159; SSE: # %bb.0: # %entry 160; SSE-NEXT: pmaxub %xmm1, %xmm0 161; SSE-NEXT: retq 162; 163; AVX-LABEL: test8: 164; AVX: # %bb.0: # %entry 165; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 166; AVX-NEXT: retq 167entry: 168 %cmp = icmp uge <16 x i8> %a, %b 169 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 170 ret <16 x i8> %sel 171} 172 173define <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) { 174; SSE-LABEL: test9: 175; SSE: # %bb.0: # %entry 176; SSE-NEXT: pminsw %xmm1, %xmm0 177; SSE-NEXT: retq 178; 179; AVX-LABEL: test9: 180; AVX: # %bb.0: # %entry 181; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 182; AVX-NEXT: retq 183entry: 184 %cmp = icmp slt <8 x i16> %a, %b 185 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 186 ret <8 x i16> %sel 187} 188 189define <8 x i16> @test10(<8 x i16> %a, <8 x i16> %b) { 190; SSE-LABEL: test10: 191; SSE: # %bb.0: # %entry 192; SSE-NEXT: pminsw %xmm1, %xmm0 193; SSE-NEXT: retq 194; 195; AVX-LABEL: test10: 196; AVX: # %bb.0: # %entry 197; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 198; AVX-NEXT: retq 199entry: 200 %cmp = icmp sle <8 x i16> %a, %b 201 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 202 ret <8 x i16> %sel 203} 204 205define <8 x i16> @test11(<8 x i16> %a, <8 x i16> %b) { 206; SSE-LABEL: test11: 207; SSE: # %bb.0: # %entry 208; SSE-NEXT: pmaxsw %xmm1, %xmm0 209; SSE-NEXT: retq 210; 211; AVX-LABEL: test11: 212; AVX: # %bb.0: # %entry 213; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 214; AVX-NEXT: retq 215entry: 216 %cmp = icmp sgt <8 x i16> %a, %b 217 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 218 ret <8 x i16> %sel 219} 220 221define <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) { 222; SSE-LABEL: test12: 223; SSE: # %bb.0: # %entry 224; SSE-NEXT: pmaxsw %xmm1, %xmm0 225; SSE-NEXT: retq 226; 227; AVX-LABEL: test12: 228; AVX: # %bb.0: # %entry 229; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 230; AVX-NEXT: retq 231entry: 232 %cmp = icmp sge <8 x i16> %a, %b 233 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 234 ret <8 x i16> %sel 235} 236 237define <8 x i16> @test13(<8 x i16> %a, <8 x i16> %b) { 238; SSE2-LABEL: test13: 239; SSE2: # %bb.0: # %entry 240; SSE2-NEXT: movdqa %xmm0, %xmm2 241; SSE2-NEXT: psubusw %xmm1, %xmm2 242; SSE2-NEXT: psubw %xmm2, %xmm0 243; SSE2-NEXT: retq 244; 245; SSE4-LABEL: test13: 246; SSE4: # %bb.0: # %entry 247; SSE4-NEXT: pminuw %xmm1, %xmm0 248; SSE4-NEXT: retq 249; 250; AVX-LABEL: test13: 251; AVX: # %bb.0: # %entry 252; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 253; AVX-NEXT: retq 254entry: 255 %cmp = icmp ult <8 x i16> %a, %b 256 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 257 ret <8 x i16> %sel 258} 259 260define <8 x i16> @test14(<8 x i16> %a, <8 x i16> %b) { 261; SSE2-LABEL: test14: 262; SSE2: # %bb.0: # %entry 263; SSE2-NEXT: movdqa %xmm0, %xmm2 264; SSE2-NEXT: psubusw %xmm1, %xmm2 265; SSE2-NEXT: psubw %xmm2, %xmm0 266; SSE2-NEXT: retq 267; 268; SSE4-LABEL: test14: 269; SSE4: # %bb.0: # %entry 270; SSE4-NEXT: pminuw %xmm1, %xmm0 271; SSE4-NEXT: retq 272; 273; AVX-LABEL: test14: 274; AVX: # %bb.0: # %entry 275; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 276; AVX-NEXT: retq 277entry: 278 %cmp = icmp ule <8 x i16> %a, %b 279 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 280 ret <8 x i16> %sel 281} 282 283define <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) { 284; SSE2-LABEL: test15: 285; SSE2: # %bb.0: # %entry 286; SSE2-NEXT: psubusw %xmm0, %xmm1 287; SSE2-NEXT: paddw %xmm1, %xmm0 288; SSE2-NEXT: retq 289; 290; SSE4-LABEL: test15: 291; SSE4: # %bb.0: # %entry 292; SSE4-NEXT: pmaxuw %xmm1, %xmm0 293; SSE4-NEXT: retq 294; 295; AVX-LABEL: test15: 296; AVX: # %bb.0: # %entry 297; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 298; AVX-NEXT: retq 299entry: 300 %cmp = icmp ugt <8 x i16> %a, %b 301 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 302 ret <8 x i16> %sel 303} 304 305define <8 x i16> @test16(<8 x i16> %a, <8 x i16> %b) { 306; SSE2-LABEL: test16: 307; SSE2: # %bb.0: # %entry 308; SSE2-NEXT: psubusw %xmm0, %xmm1 309; SSE2-NEXT: paddw %xmm1, %xmm0 310; SSE2-NEXT: retq 311; 312; SSE4-LABEL: test16: 313; SSE4: # %bb.0: # %entry 314; SSE4-NEXT: pmaxuw %xmm1, %xmm0 315; SSE4-NEXT: retq 316; 317; AVX-LABEL: test16: 318; AVX: # %bb.0: # %entry 319; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 320; AVX-NEXT: retq 321entry: 322 %cmp = icmp uge <8 x i16> %a, %b 323 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 324 ret <8 x i16> %sel 325} 326 327define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) { 328; SSE2-LABEL: test17: 329; SSE2: # %bb.0: # %entry 330; SSE2-NEXT: movdqa %xmm1, %xmm2 331; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 332; SSE2-NEXT: pand %xmm2, %xmm0 333; SSE2-NEXT: pandn %xmm1, %xmm2 334; SSE2-NEXT: por %xmm2, %xmm0 335; SSE2-NEXT: retq 336; 337; SSE4-LABEL: test17: 338; SSE4: # %bb.0: # %entry 339; SSE4-NEXT: pminsd %xmm1, %xmm0 340; SSE4-NEXT: retq 341; 342; AVX-LABEL: test17: 343; AVX: # %bb.0: # %entry 344; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 345; AVX-NEXT: retq 346entry: 347 %cmp = icmp slt <4 x i32> %a, %b 348 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 349 ret <4 x i32> %sel 350} 351 352define <4 x i32> @test18(<4 x i32> %a, <4 x i32> %b) { 353; SSE2-LABEL: test18: 354; SSE2: # %bb.0: # %entry 355; SSE2-NEXT: movdqa %xmm1, %xmm2 356; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 357; SSE2-NEXT: pand %xmm2, %xmm0 358; SSE2-NEXT: pandn %xmm1, %xmm2 359; SSE2-NEXT: por %xmm2, %xmm0 360; SSE2-NEXT: retq 361; 362; SSE4-LABEL: test18: 363; SSE4: # %bb.0: # %entry 364; SSE4-NEXT: pminsd %xmm1, %xmm0 365; SSE4-NEXT: retq 366; 367; AVX-LABEL: test18: 368; AVX: # %bb.0: # %entry 369; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 370; AVX-NEXT: retq 371entry: 372 %cmp = icmp sle <4 x i32> %a, %b 373 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 374 ret <4 x i32> %sel 375} 376 377define <4 x i32> @test19(<4 x i32> %a, <4 x i32> %b) { 378; SSE2-LABEL: test19: 379; SSE2: # %bb.0: # %entry 380; SSE2-NEXT: movdqa %xmm0, %xmm2 381; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 382; SSE2-NEXT: pand %xmm2, %xmm0 383; SSE2-NEXT: pandn %xmm1, %xmm2 384; SSE2-NEXT: por %xmm2, %xmm0 385; SSE2-NEXT: retq 386; 387; SSE4-LABEL: test19: 388; SSE4: # %bb.0: # %entry 389; SSE4-NEXT: pmaxsd %xmm1, %xmm0 390; SSE4-NEXT: retq 391; 392; AVX-LABEL: test19: 393; AVX: # %bb.0: # %entry 394; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 395; AVX-NEXT: retq 396entry: 397 %cmp = icmp sgt <4 x i32> %a, %b 398 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 399 ret <4 x i32> %sel 400} 401 402define <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b) { 403; SSE2-LABEL: test20: 404; SSE2: # %bb.0: # %entry 405; SSE2-NEXT: movdqa %xmm0, %xmm2 406; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 407; SSE2-NEXT: pand %xmm2, %xmm0 408; SSE2-NEXT: pandn %xmm1, %xmm2 409; SSE2-NEXT: por %xmm2, %xmm0 410; SSE2-NEXT: retq 411; 412; SSE4-LABEL: test20: 413; SSE4: # %bb.0: # %entry 414; SSE4-NEXT: pmaxsd %xmm1, %xmm0 415; SSE4-NEXT: retq 416; 417; AVX-LABEL: test20: 418; AVX: # %bb.0: # %entry 419; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 420; AVX-NEXT: retq 421entry: 422 %cmp = icmp sge <4 x i32> %a, %b 423 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 424 ret <4 x i32> %sel 425} 426 427define <4 x i32> @test21(<4 x i32> %a, <4 x i32> %b) { 428; SSE2-LABEL: test21: 429; SSE2: # %bb.0: # %entry 430; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 431; SSE2-NEXT: movdqa %xmm0, %xmm3 432; SSE2-NEXT: pxor %xmm2, %xmm3 433; SSE2-NEXT: pxor %xmm1, %xmm2 434; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 435; SSE2-NEXT: pand %xmm2, %xmm0 436; SSE2-NEXT: pandn %xmm1, %xmm2 437; SSE2-NEXT: por %xmm2, %xmm0 438; SSE2-NEXT: retq 439; 440; SSE4-LABEL: test21: 441; SSE4: # %bb.0: # %entry 442; SSE4-NEXT: pminud %xmm1, %xmm0 443; SSE4-NEXT: retq 444; 445; AVX-LABEL: test21: 446; AVX: # %bb.0: # %entry 447; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 448; AVX-NEXT: retq 449entry: 450 %cmp = icmp ult <4 x i32> %a, %b 451 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 452 ret <4 x i32> %sel 453} 454 455define <4 x i32> @test22(<4 x i32> %a, <4 x i32> %b) { 456; SSE2-LABEL: test22: 457; SSE2: # %bb.0: # %entry 458; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 459; SSE2-NEXT: movdqa %xmm0, %xmm3 460; SSE2-NEXT: pxor %xmm2, %xmm3 461; SSE2-NEXT: pxor %xmm1, %xmm2 462; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 463; SSE2-NEXT: pand %xmm2, %xmm0 464; SSE2-NEXT: pandn %xmm1, %xmm2 465; SSE2-NEXT: por %xmm2, %xmm0 466; SSE2-NEXT: retq 467; 468; SSE4-LABEL: test22: 469; SSE4: # %bb.0: # %entry 470; SSE4-NEXT: pminud %xmm1, %xmm0 471; SSE4-NEXT: retq 472; 473; AVX-LABEL: test22: 474; AVX: # %bb.0: # %entry 475; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 476; AVX-NEXT: retq 477entry: 478 %cmp = icmp ule <4 x i32> %a, %b 479 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 480 ret <4 x i32> %sel 481} 482 483define <4 x i32> @test23(<4 x i32> %a, <4 x i32> %b) { 484; SSE2-LABEL: test23: 485; SSE2: # %bb.0: # %entry 486; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 487; SSE2-NEXT: movdqa %xmm1, %xmm3 488; SSE2-NEXT: pxor %xmm2, %xmm3 489; SSE2-NEXT: pxor %xmm0, %xmm2 490; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 491; SSE2-NEXT: pand %xmm2, %xmm0 492; SSE2-NEXT: pandn %xmm1, %xmm2 493; SSE2-NEXT: por %xmm2, %xmm0 494; SSE2-NEXT: retq 495; 496; SSE4-LABEL: test23: 497; SSE4: # %bb.0: # %entry 498; SSE4-NEXT: pmaxud %xmm1, %xmm0 499; SSE4-NEXT: retq 500; 501; AVX-LABEL: test23: 502; AVX: # %bb.0: # %entry 503; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 504; AVX-NEXT: retq 505entry: 506 %cmp = icmp ugt <4 x i32> %a, %b 507 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 508 ret <4 x i32> %sel 509} 510 511define <4 x i32> @test24(<4 x i32> %a, <4 x i32> %b) { 512; SSE2-LABEL: test24: 513; SSE2: # %bb.0: # %entry 514; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 515; SSE2-NEXT: movdqa %xmm1, %xmm3 516; SSE2-NEXT: pxor %xmm2, %xmm3 517; SSE2-NEXT: pxor %xmm0, %xmm2 518; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 519; SSE2-NEXT: pand %xmm2, %xmm0 520; SSE2-NEXT: pandn %xmm1, %xmm2 521; SSE2-NEXT: por %xmm2, %xmm0 522; SSE2-NEXT: retq 523; 524; SSE4-LABEL: test24: 525; SSE4: # %bb.0: # %entry 526; SSE4-NEXT: pmaxud %xmm1, %xmm0 527; SSE4-NEXT: retq 528; 529; AVX-LABEL: test24: 530; AVX: # %bb.0: # %entry 531; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 532; AVX-NEXT: retq 533entry: 534 %cmp = icmp uge <4 x i32> %a, %b 535 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 536 ret <4 x i32> %sel 537} 538 539define <32 x i8> @test25(<32 x i8> %a, <32 x i8> %b) { 540; SSE2-LABEL: test25: 541; SSE2: # %bb.0: # %entry 542; SSE2-NEXT: movdqa %xmm2, %xmm4 543; SSE2-NEXT: pcmpgtb %xmm0, %xmm4 544; SSE2-NEXT: pand %xmm4, %xmm0 545; SSE2-NEXT: pandn %xmm2, %xmm4 546; SSE2-NEXT: por %xmm4, %xmm0 547; SSE2-NEXT: movdqa %xmm3, %xmm2 548; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 549; SSE2-NEXT: pand %xmm2, %xmm1 550; SSE2-NEXT: pandn %xmm3, %xmm2 551; SSE2-NEXT: por %xmm2, %xmm1 552; SSE2-NEXT: retq 553; 554; SSE4-LABEL: test25: 555; SSE4: # %bb.0: # %entry 556; SSE4-NEXT: pminsb %xmm2, %xmm0 557; SSE4-NEXT: pminsb %xmm3, %xmm1 558; SSE4-NEXT: retq 559; 560; AVX1-LABEL: test25: 561; AVX1: # %bb.0: # %entry 562; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 563; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 564; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 565; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 566; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 567; AVX1-NEXT: retq 568; 569; AVX2-LABEL: test25: 570; AVX2: # %bb.0: # %entry 571; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 572; AVX2-NEXT: retq 573; 574; AVX512-LABEL: test25: 575; AVX512: # %bb.0: # %entry 576; AVX512-NEXT: vpminsb %ymm1, %ymm0, %ymm0 577; AVX512-NEXT: retq 578entry: 579 %cmp = icmp slt <32 x i8> %a, %b 580 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 581 ret <32 x i8> %sel 582} 583 584define <32 x i8> @test26(<32 x i8> %a, <32 x i8> %b) { 585; SSE2-LABEL: test26: 586; SSE2: # %bb.0: # %entry 587; SSE2-NEXT: movdqa %xmm2, %xmm4 588; SSE2-NEXT: pcmpgtb %xmm0, %xmm4 589; SSE2-NEXT: pand %xmm4, %xmm0 590; SSE2-NEXT: pandn %xmm2, %xmm4 591; SSE2-NEXT: por %xmm4, %xmm0 592; SSE2-NEXT: movdqa %xmm3, %xmm2 593; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 594; SSE2-NEXT: pand %xmm2, %xmm1 595; SSE2-NEXT: pandn %xmm3, %xmm2 596; SSE2-NEXT: por %xmm2, %xmm1 597; SSE2-NEXT: retq 598; 599; SSE4-LABEL: test26: 600; SSE4: # %bb.0: # %entry 601; SSE4-NEXT: pminsb %xmm2, %xmm0 602; SSE4-NEXT: pminsb %xmm3, %xmm1 603; SSE4-NEXT: retq 604; 605; AVX1-LABEL: test26: 606; AVX1: # %bb.0: # %entry 607; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 608; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 609; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 610; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 611; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 612; AVX1-NEXT: retq 613; 614; AVX2-LABEL: test26: 615; AVX2: # %bb.0: # %entry 616; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 617; AVX2-NEXT: retq 618; 619; AVX512-LABEL: test26: 620; AVX512: # %bb.0: # %entry 621; AVX512-NEXT: vpminsb %ymm1, %ymm0, %ymm0 622; AVX512-NEXT: retq 623entry: 624 %cmp = icmp sle <32 x i8> %a, %b 625 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 626 ret <32 x i8> %sel 627} 628 629define <32 x i8> @test27(<32 x i8> %a, <32 x i8> %b) { 630; SSE2-LABEL: test27: 631; SSE2: # %bb.0: # %entry 632; SSE2-NEXT: movdqa %xmm0, %xmm4 633; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 634; SSE2-NEXT: pand %xmm4, %xmm0 635; SSE2-NEXT: pandn %xmm2, %xmm4 636; SSE2-NEXT: por %xmm4, %xmm0 637; SSE2-NEXT: movdqa %xmm1, %xmm2 638; SSE2-NEXT: pcmpgtb %xmm3, %xmm2 639; SSE2-NEXT: pand %xmm2, %xmm1 640; SSE2-NEXT: pandn %xmm3, %xmm2 641; SSE2-NEXT: por %xmm2, %xmm1 642; SSE2-NEXT: retq 643; 644; SSE4-LABEL: test27: 645; SSE4: # %bb.0: # %entry 646; SSE4-NEXT: pmaxsb %xmm2, %xmm0 647; SSE4-NEXT: pmaxsb %xmm3, %xmm1 648; SSE4-NEXT: retq 649; 650; AVX1-LABEL: test27: 651; AVX1: # %bb.0: # %entry 652; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 653; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 654; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 655; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 656; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 657; AVX1-NEXT: retq 658; 659; AVX2-LABEL: test27: 660; AVX2: # %bb.0: # %entry 661; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 662; AVX2-NEXT: retq 663; 664; AVX512-LABEL: test27: 665; AVX512: # %bb.0: # %entry 666; AVX512-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 667; AVX512-NEXT: retq 668entry: 669 %cmp = icmp sgt <32 x i8> %a, %b 670 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 671 ret <32 x i8> %sel 672} 673 674define <32 x i8> @test28(<32 x i8> %a, <32 x i8> %b) { 675; SSE2-LABEL: test28: 676; SSE2: # %bb.0: # %entry 677; SSE2-NEXT: movdqa %xmm0, %xmm4 678; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 679; SSE2-NEXT: pand %xmm4, %xmm0 680; SSE2-NEXT: pandn %xmm2, %xmm4 681; SSE2-NEXT: por %xmm4, %xmm0 682; SSE2-NEXT: movdqa %xmm1, %xmm2 683; SSE2-NEXT: pcmpgtb %xmm3, %xmm2 684; SSE2-NEXT: pand %xmm2, %xmm1 685; SSE2-NEXT: pandn %xmm3, %xmm2 686; SSE2-NEXT: por %xmm2, %xmm1 687; SSE2-NEXT: retq 688; 689; SSE4-LABEL: test28: 690; SSE4: # %bb.0: # %entry 691; SSE4-NEXT: pmaxsb %xmm2, %xmm0 692; SSE4-NEXT: pmaxsb %xmm3, %xmm1 693; SSE4-NEXT: retq 694; 695; AVX1-LABEL: test28: 696; AVX1: # %bb.0: # %entry 697; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 698; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 699; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 700; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 701; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 702; AVX1-NEXT: retq 703; 704; AVX2-LABEL: test28: 705; AVX2: # %bb.0: # %entry 706; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 707; AVX2-NEXT: retq 708; 709; AVX512-LABEL: test28: 710; AVX512: # %bb.0: # %entry 711; AVX512-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 712; AVX512-NEXT: retq 713entry: 714 %cmp = icmp sge <32 x i8> %a, %b 715 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 716 ret <32 x i8> %sel 717} 718 719define <32 x i8> @test29(<32 x i8> %a, <32 x i8> %b) { 720; SSE-LABEL: test29: 721; SSE: # %bb.0: # %entry 722; SSE-NEXT: pminub %xmm2, %xmm0 723; SSE-NEXT: pminub %xmm3, %xmm1 724; SSE-NEXT: retq 725; 726; AVX1-LABEL: test29: 727; AVX1: # %bb.0: # %entry 728; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 729; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 730; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 731; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 732; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 733; AVX1-NEXT: retq 734; 735; AVX2-LABEL: test29: 736; AVX2: # %bb.0: # %entry 737; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 738; AVX2-NEXT: retq 739; 740; AVX512-LABEL: test29: 741; AVX512: # %bb.0: # %entry 742; AVX512-NEXT: vpminub %ymm1, %ymm0, %ymm0 743; AVX512-NEXT: retq 744entry: 745 %cmp = icmp ult <32 x i8> %a, %b 746 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 747 ret <32 x i8> %sel 748} 749 750define <32 x i8> @test30(<32 x i8> %a, <32 x i8> %b) { 751; SSE-LABEL: test30: 752; SSE: # %bb.0: # %entry 753; SSE-NEXT: pminub %xmm2, %xmm0 754; SSE-NEXT: pminub %xmm3, %xmm1 755; SSE-NEXT: retq 756; 757; AVX1-LABEL: test30: 758; AVX1: # %bb.0: # %entry 759; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 760; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 761; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 762; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 763; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 764; AVX1-NEXT: retq 765; 766; AVX2-LABEL: test30: 767; AVX2: # %bb.0: # %entry 768; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 769; AVX2-NEXT: retq 770; 771; AVX512-LABEL: test30: 772; AVX512: # %bb.0: # %entry 773; AVX512-NEXT: vpminub %ymm1, %ymm0, %ymm0 774; AVX512-NEXT: retq 775entry: 776 %cmp = icmp ule <32 x i8> %a, %b 777 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 778 ret <32 x i8> %sel 779} 780 781define <32 x i8> @test31(<32 x i8> %a, <32 x i8> %b) { 782; SSE-LABEL: test31: 783; SSE: # %bb.0: # %entry 784; SSE-NEXT: pmaxub %xmm2, %xmm0 785; SSE-NEXT: pmaxub %xmm3, %xmm1 786; SSE-NEXT: retq 787; 788; AVX1-LABEL: test31: 789; AVX1: # %bb.0: # %entry 790; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 791; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 792; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 793; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 794; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 795; AVX1-NEXT: retq 796; 797; AVX2-LABEL: test31: 798; AVX2: # %bb.0: # %entry 799; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 800; AVX2-NEXT: retq 801; 802; AVX512-LABEL: test31: 803; AVX512: # %bb.0: # %entry 804; AVX512-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 805; AVX512-NEXT: retq 806entry: 807 %cmp = icmp ugt <32 x i8> %a, %b 808 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 809 ret <32 x i8> %sel 810} 811 812define <32 x i8> @test32(<32 x i8> %a, <32 x i8> %b) { 813; SSE-LABEL: test32: 814; SSE: # %bb.0: # %entry 815; SSE-NEXT: pmaxub %xmm2, %xmm0 816; SSE-NEXT: pmaxub %xmm3, %xmm1 817; SSE-NEXT: retq 818; 819; AVX1-LABEL: test32: 820; AVX1: # %bb.0: # %entry 821; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 822; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 823; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 824; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 825; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 826; AVX1-NEXT: retq 827; 828; AVX2-LABEL: test32: 829; AVX2: # %bb.0: # %entry 830; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 831; AVX2-NEXT: retq 832; 833; AVX512-LABEL: test32: 834; AVX512: # %bb.0: # %entry 835; AVX512-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 836; AVX512-NEXT: retq 837entry: 838 %cmp = icmp uge <32 x i8> %a, %b 839 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 840 ret <32 x i8> %sel 841} 842 843define <16 x i16> @test33(<16 x i16> %a, <16 x i16> %b) { 844; SSE-LABEL: test33: 845; SSE: # %bb.0: # %entry 846; SSE-NEXT: pminsw %xmm2, %xmm0 847; SSE-NEXT: pminsw %xmm3, %xmm1 848; SSE-NEXT: retq 849; 850; AVX1-LABEL: test33: 851; AVX1: # %bb.0: # %entry 852; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 853; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 854; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 855; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 856; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 857; AVX1-NEXT: retq 858; 859; AVX2-LABEL: test33: 860; AVX2: # %bb.0: # %entry 861; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 862; AVX2-NEXT: retq 863; 864; AVX512-LABEL: test33: 865; AVX512: # %bb.0: # %entry 866; AVX512-NEXT: vpminsw %ymm1, %ymm0, %ymm0 867; AVX512-NEXT: retq 868entry: 869 %cmp = icmp slt <16 x i16> %a, %b 870 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 871 ret <16 x i16> %sel 872} 873 874define <16 x i16> @test34(<16 x i16> %a, <16 x i16> %b) { 875; SSE-LABEL: test34: 876; SSE: # %bb.0: # %entry 877; SSE-NEXT: pminsw %xmm2, %xmm0 878; SSE-NEXT: pminsw %xmm3, %xmm1 879; SSE-NEXT: retq 880; 881; AVX1-LABEL: test34: 882; AVX1: # %bb.0: # %entry 883; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 884; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 885; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 886; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 887; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 888; AVX1-NEXT: retq 889; 890; AVX2-LABEL: test34: 891; AVX2: # %bb.0: # %entry 892; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 893; AVX2-NEXT: retq 894; 895; AVX512-LABEL: test34: 896; AVX512: # %bb.0: # %entry 897; AVX512-NEXT: vpminsw %ymm1, %ymm0, %ymm0 898; AVX512-NEXT: retq 899entry: 900 %cmp = icmp sle <16 x i16> %a, %b 901 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 902 ret <16 x i16> %sel 903} 904 905define <16 x i16> @test35(<16 x i16> %a, <16 x i16> %b) { 906; SSE-LABEL: test35: 907; SSE: # %bb.0: # %entry 908; SSE-NEXT: pmaxsw %xmm2, %xmm0 909; SSE-NEXT: pmaxsw %xmm3, %xmm1 910; SSE-NEXT: retq 911; 912; AVX1-LABEL: test35: 913; AVX1: # %bb.0: # %entry 914; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 915; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 916; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 917; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 918; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 919; AVX1-NEXT: retq 920; 921; AVX2-LABEL: test35: 922; AVX2: # %bb.0: # %entry 923; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 924; AVX2-NEXT: retq 925; 926; AVX512-LABEL: test35: 927; AVX512: # %bb.0: # %entry 928; AVX512-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 929; AVX512-NEXT: retq 930entry: 931 %cmp = icmp sgt <16 x i16> %a, %b 932 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 933 ret <16 x i16> %sel 934} 935 936define <16 x i16> @test36(<16 x i16> %a, <16 x i16> %b) { 937; SSE-LABEL: test36: 938; SSE: # %bb.0: # %entry 939; SSE-NEXT: pmaxsw %xmm2, %xmm0 940; SSE-NEXT: pmaxsw %xmm3, %xmm1 941; SSE-NEXT: retq 942; 943; AVX1-LABEL: test36: 944; AVX1: # %bb.0: # %entry 945; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 946; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 947; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 948; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 949; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 950; AVX1-NEXT: retq 951; 952; AVX2-LABEL: test36: 953; AVX2: # %bb.0: # %entry 954; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 955; AVX2-NEXT: retq 956; 957; AVX512-LABEL: test36: 958; AVX512: # %bb.0: # %entry 959; AVX512-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 960; AVX512-NEXT: retq 961entry: 962 %cmp = icmp sge <16 x i16> %a, %b 963 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 964 ret <16 x i16> %sel 965} 966 967define <16 x i16> @test37(<16 x i16> %a, <16 x i16> %b) { 968; SSE2-LABEL: test37: 969; SSE2: # %bb.0: # %entry 970; SSE2-NEXT: movdqa %xmm0, %xmm4 971; SSE2-NEXT: psubusw %xmm2, %xmm4 972; SSE2-NEXT: psubw %xmm4, %xmm0 973; SSE2-NEXT: movdqa %xmm1, %xmm2 974; SSE2-NEXT: psubusw %xmm3, %xmm2 975; SSE2-NEXT: psubw %xmm2, %xmm1 976; SSE2-NEXT: retq 977; 978; SSE4-LABEL: test37: 979; SSE4: # %bb.0: # %entry 980; SSE4-NEXT: pminuw %xmm2, %xmm0 981; SSE4-NEXT: pminuw %xmm3, %xmm1 982; SSE4-NEXT: retq 983; 984; AVX1-LABEL: test37: 985; AVX1: # %bb.0: # %entry 986; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 987; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 988; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 989; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 990; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 991; AVX1-NEXT: retq 992; 993; AVX2-LABEL: test37: 994; AVX2: # %bb.0: # %entry 995; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 996; AVX2-NEXT: retq 997; 998; AVX512-LABEL: test37: 999; AVX512: # %bb.0: # %entry 1000; AVX512-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1001; AVX512-NEXT: retq 1002entry: 1003 %cmp = icmp ult <16 x i16> %a, %b 1004 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1005 ret <16 x i16> %sel 1006} 1007 1008define <16 x i16> @test38(<16 x i16> %a, <16 x i16> %b) { 1009; SSE2-LABEL: test38: 1010; SSE2: # %bb.0: # %entry 1011; SSE2-NEXT: movdqa %xmm0, %xmm4 1012; SSE2-NEXT: psubusw %xmm2, %xmm4 1013; SSE2-NEXT: psubw %xmm4, %xmm0 1014; SSE2-NEXT: movdqa %xmm1, %xmm2 1015; SSE2-NEXT: psubusw %xmm3, %xmm2 1016; SSE2-NEXT: psubw %xmm2, %xmm1 1017; SSE2-NEXT: retq 1018; 1019; SSE4-LABEL: test38: 1020; SSE4: # %bb.0: # %entry 1021; SSE4-NEXT: pminuw %xmm2, %xmm0 1022; SSE4-NEXT: pminuw %xmm3, %xmm1 1023; SSE4-NEXT: retq 1024; 1025; AVX1-LABEL: test38: 1026; AVX1: # %bb.0: # %entry 1027; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1028; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1029; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 1030; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1031; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1032; AVX1-NEXT: retq 1033; 1034; AVX2-LABEL: test38: 1035; AVX2: # %bb.0: # %entry 1036; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1037; AVX2-NEXT: retq 1038; 1039; AVX512-LABEL: test38: 1040; AVX512: # %bb.0: # %entry 1041; AVX512-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1042; AVX512-NEXT: retq 1043entry: 1044 %cmp = icmp ule <16 x i16> %a, %b 1045 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1046 ret <16 x i16> %sel 1047} 1048 1049define <16 x i16> @test39(<16 x i16> %a, <16 x i16> %b) { 1050; SSE2-LABEL: test39: 1051; SSE2: # %bb.0: # %entry 1052; SSE2-NEXT: psubusw %xmm0, %xmm2 1053; SSE2-NEXT: paddw %xmm2, %xmm0 1054; SSE2-NEXT: psubusw %xmm1, %xmm3 1055; SSE2-NEXT: paddw %xmm3, %xmm1 1056; SSE2-NEXT: retq 1057; 1058; SSE4-LABEL: test39: 1059; SSE4: # %bb.0: # %entry 1060; SSE4-NEXT: pmaxuw %xmm2, %xmm0 1061; SSE4-NEXT: pmaxuw %xmm3, %xmm1 1062; SSE4-NEXT: retq 1063; 1064; AVX1-LABEL: test39: 1065; AVX1: # %bb.0: # %entry 1066; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1067; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1068; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 1069; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1070; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1071; AVX1-NEXT: retq 1072; 1073; AVX2-LABEL: test39: 1074; AVX2: # %bb.0: # %entry 1075; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1076; AVX2-NEXT: retq 1077; 1078; AVX512-LABEL: test39: 1079; AVX512: # %bb.0: # %entry 1080; AVX512-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1081; AVX512-NEXT: retq 1082entry: 1083 %cmp = icmp ugt <16 x i16> %a, %b 1084 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1085 ret <16 x i16> %sel 1086} 1087 1088define <16 x i16> @test40(<16 x i16> %a, <16 x i16> %b) { 1089; SSE2-LABEL: test40: 1090; SSE2: # %bb.0: # %entry 1091; SSE2-NEXT: psubusw %xmm0, %xmm2 1092; SSE2-NEXT: paddw %xmm2, %xmm0 1093; SSE2-NEXT: psubusw %xmm1, %xmm3 1094; SSE2-NEXT: paddw %xmm3, %xmm1 1095; SSE2-NEXT: retq 1096; 1097; SSE4-LABEL: test40: 1098; SSE4: # %bb.0: # %entry 1099; SSE4-NEXT: pmaxuw %xmm2, %xmm0 1100; SSE4-NEXT: pmaxuw %xmm3, %xmm1 1101; SSE4-NEXT: retq 1102; 1103; AVX1-LABEL: test40: 1104; AVX1: # %bb.0: # %entry 1105; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1106; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1107; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 1108; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1109; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1110; AVX1-NEXT: retq 1111; 1112; AVX2-LABEL: test40: 1113; AVX2: # %bb.0: # %entry 1114; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1115; AVX2-NEXT: retq 1116; 1117; AVX512-LABEL: test40: 1118; AVX512: # %bb.0: # %entry 1119; AVX512-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1120; AVX512-NEXT: retq 1121entry: 1122 %cmp = icmp uge <16 x i16> %a, %b 1123 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1124 ret <16 x i16> %sel 1125} 1126 1127define <8 x i32> @test41(<8 x i32> %a, <8 x i32> %b) { 1128; SSE2-LABEL: test41: 1129; SSE2: # %bb.0: # %entry 1130; SSE2-NEXT: movdqa %xmm2, %xmm4 1131; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 1132; SSE2-NEXT: pand %xmm4, %xmm0 1133; SSE2-NEXT: pandn %xmm2, %xmm4 1134; SSE2-NEXT: por %xmm4, %xmm0 1135; SSE2-NEXT: movdqa %xmm3, %xmm2 1136; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 1137; SSE2-NEXT: pand %xmm2, %xmm1 1138; SSE2-NEXT: pandn %xmm3, %xmm2 1139; SSE2-NEXT: por %xmm2, %xmm1 1140; SSE2-NEXT: retq 1141; 1142; SSE4-LABEL: test41: 1143; SSE4: # %bb.0: # %entry 1144; SSE4-NEXT: pminsd %xmm2, %xmm0 1145; SSE4-NEXT: pminsd %xmm3, %xmm1 1146; SSE4-NEXT: retq 1147; 1148; AVX1-LABEL: test41: 1149; AVX1: # %bb.0: # %entry 1150; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1151; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1152; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 1153; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1154; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1155; AVX1-NEXT: retq 1156; 1157; AVX2-LABEL: test41: 1158; AVX2: # %bb.0: # %entry 1159; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1160; AVX2-NEXT: retq 1161; 1162; AVX512-LABEL: test41: 1163; AVX512: # %bb.0: # %entry 1164; AVX512-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1165; AVX512-NEXT: retq 1166entry: 1167 %cmp = icmp slt <8 x i32> %a, %b 1168 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1169 ret <8 x i32> %sel 1170} 1171 1172define <8 x i32> @test42(<8 x i32> %a, <8 x i32> %b) { 1173; SSE2-LABEL: test42: 1174; SSE2: # %bb.0: # %entry 1175; SSE2-NEXT: movdqa %xmm2, %xmm4 1176; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 1177; SSE2-NEXT: pand %xmm4, %xmm0 1178; SSE2-NEXT: pandn %xmm2, %xmm4 1179; SSE2-NEXT: por %xmm4, %xmm0 1180; SSE2-NEXT: movdqa %xmm3, %xmm2 1181; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 1182; SSE2-NEXT: pand %xmm2, %xmm1 1183; SSE2-NEXT: pandn %xmm3, %xmm2 1184; SSE2-NEXT: por %xmm2, %xmm1 1185; SSE2-NEXT: retq 1186; 1187; SSE4-LABEL: test42: 1188; SSE4: # %bb.0: # %entry 1189; SSE4-NEXT: pminsd %xmm2, %xmm0 1190; SSE4-NEXT: pminsd %xmm3, %xmm1 1191; SSE4-NEXT: retq 1192; 1193; AVX1-LABEL: test42: 1194; AVX1: # %bb.0: # %entry 1195; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1196; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1197; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 1198; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1199; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1200; AVX1-NEXT: retq 1201; 1202; AVX2-LABEL: test42: 1203; AVX2: # %bb.0: # %entry 1204; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1205; AVX2-NEXT: retq 1206; 1207; AVX512-LABEL: test42: 1208; AVX512: # %bb.0: # %entry 1209; AVX512-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1210; AVX512-NEXT: retq 1211entry: 1212 %cmp = icmp sle <8 x i32> %a, %b 1213 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1214 ret <8 x i32> %sel 1215} 1216 1217define <8 x i32> @test43(<8 x i32> %a, <8 x i32> %b) { 1218; SSE2-LABEL: test43: 1219; SSE2: # %bb.0: # %entry 1220; SSE2-NEXT: movdqa %xmm0, %xmm4 1221; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 1222; SSE2-NEXT: pand %xmm4, %xmm0 1223; SSE2-NEXT: pandn %xmm2, %xmm4 1224; SSE2-NEXT: por %xmm4, %xmm0 1225; SSE2-NEXT: movdqa %xmm1, %xmm2 1226; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 1227; SSE2-NEXT: pand %xmm2, %xmm1 1228; SSE2-NEXT: pandn %xmm3, %xmm2 1229; SSE2-NEXT: por %xmm2, %xmm1 1230; SSE2-NEXT: retq 1231; 1232; SSE4-LABEL: test43: 1233; SSE4: # %bb.0: # %entry 1234; SSE4-NEXT: pmaxsd %xmm2, %xmm0 1235; SSE4-NEXT: pmaxsd %xmm3, %xmm1 1236; SSE4-NEXT: retq 1237; 1238; AVX1-LABEL: test43: 1239; AVX1: # %bb.0: # %entry 1240; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1241; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1242; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 1243; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1244; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1245; AVX1-NEXT: retq 1246; 1247; AVX2-LABEL: test43: 1248; AVX2: # %bb.0: # %entry 1249; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1250; AVX2-NEXT: retq 1251; 1252; AVX512-LABEL: test43: 1253; AVX512: # %bb.0: # %entry 1254; AVX512-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1255; AVX512-NEXT: retq 1256entry: 1257 %cmp = icmp sgt <8 x i32> %a, %b 1258 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1259 ret <8 x i32> %sel 1260} 1261 1262define <8 x i32> @test44(<8 x i32> %a, <8 x i32> %b) { 1263; SSE2-LABEL: test44: 1264; SSE2: # %bb.0: # %entry 1265; SSE2-NEXT: movdqa %xmm0, %xmm4 1266; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 1267; SSE2-NEXT: pand %xmm4, %xmm0 1268; SSE2-NEXT: pandn %xmm2, %xmm4 1269; SSE2-NEXT: por %xmm4, %xmm0 1270; SSE2-NEXT: movdqa %xmm1, %xmm2 1271; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 1272; SSE2-NEXT: pand %xmm2, %xmm1 1273; SSE2-NEXT: pandn %xmm3, %xmm2 1274; SSE2-NEXT: por %xmm2, %xmm1 1275; SSE2-NEXT: retq 1276; 1277; SSE4-LABEL: test44: 1278; SSE4: # %bb.0: # %entry 1279; SSE4-NEXT: pmaxsd %xmm2, %xmm0 1280; SSE4-NEXT: pmaxsd %xmm3, %xmm1 1281; SSE4-NEXT: retq 1282; 1283; AVX1-LABEL: test44: 1284; AVX1: # %bb.0: # %entry 1285; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1286; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1287; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 1288; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1289; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1290; AVX1-NEXT: retq 1291; 1292; AVX2-LABEL: test44: 1293; AVX2: # %bb.0: # %entry 1294; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1295; AVX2-NEXT: retq 1296; 1297; AVX512-LABEL: test44: 1298; AVX512: # %bb.0: # %entry 1299; AVX512-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1300; AVX512-NEXT: retq 1301entry: 1302 %cmp = icmp sge <8 x i32> %a, %b 1303 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1304 ret <8 x i32> %sel 1305} 1306 1307define <8 x i32> @test45(<8 x i32> %a, <8 x i32> %b) { 1308; SSE2-LABEL: test45: 1309; SSE2: # %bb.0: # %entry 1310; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 1311; SSE2-NEXT: movdqa %xmm0, %xmm5 1312; SSE2-NEXT: pxor %xmm4, %xmm5 1313; SSE2-NEXT: movdqa %xmm2, %xmm6 1314; SSE2-NEXT: pxor %xmm4, %xmm6 1315; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 1316; SSE2-NEXT: pand %xmm6, %xmm0 1317; SSE2-NEXT: pandn %xmm2, %xmm6 1318; SSE2-NEXT: por %xmm6, %xmm0 1319; SSE2-NEXT: movdqa %xmm1, %xmm2 1320; SSE2-NEXT: pxor %xmm4, %xmm2 1321; SSE2-NEXT: pxor %xmm3, %xmm4 1322; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 1323; SSE2-NEXT: pand %xmm4, %xmm1 1324; SSE2-NEXT: pandn %xmm3, %xmm4 1325; SSE2-NEXT: por %xmm4, %xmm1 1326; SSE2-NEXT: retq 1327; 1328; SSE4-LABEL: test45: 1329; SSE4: # %bb.0: # %entry 1330; SSE4-NEXT: pminud %xmm2, %xmm0 1331; SSE4-NEXT: pminud %xmm3, %xmm1 1332; SSE4-NEXT: retq 1333; 1334; AVX1-LABEL: test45: 1335; AVX1: # %bb.0: # %entry 1336; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1337; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1338; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 1339; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 1340; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1341; AVX1-NEXT: retq 1342; 1343; AVX2-LABEL: test45: 1344; AVX2: # %bb.0: # %entry 1345; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 1346; AVX2-NEXT: retq 1347; 1348; AVX512-LABEL: test45: 1349; AVX512: # %bb.0: # %entry 1350; AVX512-NEXT: vpminud %ymm1, %ymm0, %ymm0 1351; AVX512-NEXT: retq 1352entry: 1353 %cmp = icmp ult <8 x i32> %a, %b 1354 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1355 ret <8 x i32> %sel 1356} 1357 1358define <8 x i32> @test46(<8 x i32> %a, <8 x i32> %b) { 1359; SSE2-LABEL: test46: 1360; SSE2: # %bb.0: # %entry 1361; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 1362; SSE2-NEXT: movdqa %xmm0, %xmm5 1363; SSE2-NEXT: pxor %xmm4, %xmm5 1364; SSE2-NEXT: movdqa %xmm2, %xmm6 1365; SSE2-NEXT: pxor %xmm4, %xmm6 1366; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 1367; SSE2-NEXT: pand %xmm6, %xmm0 1368; SSE2-NEXT: pandn %xmm2, %xmm6 1369; SSE2-NEXT: por %xmm6, %xmm0 1370; SSE2-NEXT: movdqa %xmm1, %xmm2 1371; SSE2-NEXT: pxor %xmm4, %xmm2 1372; SSE2-NEXT: pxor %xmm3, %xmm4 1373; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 1374; SSE2-NEXT: pand %xmm4, %xmm1 1375; SSE2-NEXT: pandn %xmm3, %xmm4 1376; SSE2-NEXT: por %xmm4, %xmm1 1377; SSE2-NEXT: retq 1378; 1379; SSE4-LABEL: test46: 1380; SSE4: # %bb.0: # %entry 1381; SSE4-NEXT: pminud %xmm2, %xmm0 1382; SSE4-NEXT: pminud %xmm3, %xmm1 1383; SSE4-NEXT: retq 1384; 1385; AVX1-LABEL: test46: 1386; AVX1: # %bb.0: # %entry 1387; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1388; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1389; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 1390; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 1391; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1392; AVX1-NEXT: retq 1393; 1394; AVX2-LABEL: test46: 1395; AVX2: # %bb.0: # %entry 1396; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 1397; AVX2-NEXT: retq 1398; 1399; AVX512-LABEL: test46: 1400; AVX512: # %bb.0: # %entry 1401; AVX512-NEXT: vpminud %ymm1, %ymm0, %ymm0 1402; AVX512-NEXT: retq 1403entry: 1404 %cmp = icmp ule <8 x i32> %a, %b 1405 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1406 ret <8 x i32> %sel 1407} 1408 1409define <8 x i32> @test47(<8 x i32> %a, <8 x i32> %b) { 1410; SSE2-LABEL: test47: 1411; SSE2: # %bb.0: # %entry 1412; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 1413; SSE2-NEXT: movdqa %xmm2, %xmm5 1414; SSE2-NEXT: pxor %xmm4, %xmm5 1415; SSE2-NEXT: movdqa %xmm0, %xmm6 1416; SSE2-NEXT: pxor %xmm4, %xmm6 1417; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 1418; SSE2-NEXT: pand %xmm6, %xmm0 1419; SSE2-NEXT: pandn %xmm2, %xmm6 1420; SSE2-NEXT: por %xmm6, %xmm0 1421; SSE2-NEXT: movdqa %xmm3, %xmm2 1422; SSE2-NEXT: pxor %xmm4, %xmm2 1423; SSE2-NEXT: pxor %xmm1, %xmm4 1424; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 1425; SSE2-NEXT: pand %xmm4, %xmm1 1426; SSE2-NEXT: pandn %xmm3, %xmm4 1427; SSE2-NEXT: por %xmm4, %xmm1 1428; SSE2-NEXT: retq 1429; 1430; SSE4-LABEL: test47: 1431; SSE4: # %bb.0: # %entry 1432; SSE4-NEXT: pmaxud %xmm2, %xmm0 1433; SSE4-NEXT: pmaxud %xmm3, %xmm1 1434; SSE4-NEXT: retq 1435; 1436; AVX1-LABEL: test47: 1437; AVX1: # %bb.0: # %entry 1438; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1439; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1440; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 1441; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 1442; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1443; AVX1-NEXT: retq 1444; 1445; AVX2-LABEL: test47: 1446; AVX2: # %bb.0: # %entry 1447; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1448; AVX2-NEXT: retq 1449; 1450; AVX512-LABEL: test47: 1451; AVX512: # %bb.0: # %entry 1452; AVX512-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1453; AVX512-NEXT: retq 1454entry: 1455 %cmp = icmp ugt <8 x i32> %a, %b 1456 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1457 ret <8 x i32> %sel 1458} 1459 1460define <8 x i32> @test48(<8 x i32> %a, <8 x i32> %b) { 1461; SSE2-LABEL: test48: 1462; SSE2: # %bb.0: # %entry 1463; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 1464; SSE2-NEXT: movdqa %xmm2, %xmm5 1465; SSE2-NEXT: pxor %xmm4, %xmm5 1466; SSE2-NEXT: movdqa %xmm0, %xmm6 1467; SSE2-NEXT: pxor %xmm4, %xmm6 1468; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 1469; SSE2-NEXT: pand %xmm6, %xmm0 1470; SSE2-NEXT: pandn %xmm2, %xmm6 1471; SSE2-NEXT: por %xmm6, %xmm0 1472; SSE2-NEXT: movdqa %xmm3, %xmm2 1473; SSE2-NEXT: pxor %xmm4, %xmm2 1474; SSE2-NEXT: pxor %xmm1, %xmm4 1475; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 1476; SSE2-NEXT: pand %xmm4, %xmm1 1477; SSE2-NEXT: pandn %xmm3, %xmm4 1478; SSE2-NEXT: por %xmm4, %xmm1 1479; SSE2-NEXT: retq 1480; 1481; SSE4-LABEL: test48: 1482; SSE4: # %bb.0: # %entry 1483; SSE4-NEXT: pmaxud %xmm2, %xmm0 1484; SSE4-NEXT: pmaxud %xmm3, %xmm1 1485; SSE4-NEXT: retq 1486; 1487; AVX1-LABEL: test48: 1488; AVX1: # %bb.0: # %entry 1489; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1490; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1491; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 1492; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 1493; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1494; AVX1-NEXT: retq 1495; 1496; AVX2-LABEL: test48: 1497; AVX2: # %bb.0: # %entry 1498; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1499; AVX2-NEXT: retq 1500; 1501; AVX512-LABEL: test48: 1502; AVX512: # %bb.0: # %entry 1503; AVX512-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1504; AVX512-NEXT: retq 1505entry: 1506 %cmp = icmp uge <8 x i32> %a, %b 1507 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1508 ret <8 x i32> %sel 1509} 1510 1511define <16 x i8> @test49(<16 x i8> %a, <16 x i8> %b) { 1512; SSE2-LABEL: test49: 1513; SSE2: # %bb.0: # %entry 1514; SSE2-NEXT: movdqa %xmm0, %xmm2 1515; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 1516; SSE2-NEXT: pand %xmm2, %xmm0 1517; SSE2-NEXT: pandn %xmm1, %xmm2 1518; SSE2-NEXT: por %xmm2, %xmm0 1519; SSE2-NEXT: retq 1520; 1521; SSE4-LABEL: test49: 1522; SSE4: # %bb.0: # %entry 1523; SSE4-NEXT: pmaxsb %xmm1, %xmm0 1524; SSE4-NEXT: retq 1525; 1526; AVX-LABEL: test49: 1527; AVX: # %bb.0: # %entry 1528; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 1529; AVX-NEXT: retq 1530entry: 1531 %cmp = icmp slt <16 x i8> %a, %b 1532 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1533 ret <16 x i8> %sel 1534} 1535 1536define <16 x i8> @test50(<16 x i8> %a, <16 x i8> %b) { 1537; SSE2-LABEL: test50: 1538; SSE2: # %bb.0: # %entry 1539; SSE2-NEXT: movdqa %xmm0, %xmm2 1540; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 1541; SSE2-NEXT: pand %xmm2, %xmm0 1542; SSE2-NEXT: pandn %xmm1, %xmm2 1543; SSE2-NEXT: por %xmm2, %xmm0 1544; SSE2-NEXT: retq 1545; 1546; SSE4-LABEL: test50: 1547; SSE4: # %bb.0: # %entry 1548; SSE4-NEXT: pmaxsb %xmm1, %xmm0 1549; SSE4-NEXT: retq 1550; 1551; AVX-LABEL: test50: 1552; AVX: # %bb.0: # %entry 1553; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 1554; AVX-NEXT: retq 1555entry: 1556 %cmp = icmp sle <16 x i8> %a, %b 1557 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1558 ret <16 x i8> %sel 1559} 1560 1561define <16 x i8> @test51(<16 x i8> %a, <16 x i8> %b) { 1562; SSE2-LABEL: test51: 1563; SSE2: # %bb.0: # %entry 1564; SSE2-NEXT: movdqa %xmm1, %xmm2 1565; SSE2-NEXT: pcmpgtb %xmm0, %xmm2 1566; SSE2-NEXT: pand %xmm2, %xmm0 1567; SSE2-NEXT: pandn %xmm1, %xmm2 1568; SSE2-NEXT: por %xmm2, %xmm0 1569; SSE2-NEXT: retq 1570; 1571; SSE4-LABEL: test51: 1572; SSE4: # %bb.0: # %entry 1573; SSE4-NEXT: pminsb %xmm1, %xmm0 1574; SSE4-NEXT: retq 1575; 1576; AVX-LABEL: test51: 1577; AVX: # %bb.0: # %entry 1578; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0 1579; AVX-NEXT: retq 1580entry: 1581 %cmp = icmp sgt <16 x i8> %a, %b 1582 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1583 ret <16 x i8> %sel 1584} 1585 1586define <16 x i8> @test52(<16 x i8> %a, <16 x i8> %b) { 1587; SSE2-LABEL: test52: 1588; SSE2: # %bb.0: # %entry 1589; SSE2-NEXT: movdqa %xmm1, %xmm2 1590; SSE2-NEXT: pcmpgtb %xmm0, %xmm2 1591; SSE2-NEXT: pand %xmm2, %xmm0 1592; SSE2-NEXT: pandn %xmm1, %xmm2 1593; SSE2-NEXT: por %xmm2, %xmm0 1594; SSE2-NEXT: retq 1595; 1596; SSE4-LABEL: test52: 1597; SSE4: # %bb.0: # %entry 1598; SSE4-NEXT: pminsb %xmm1, %xmm0 1599; SSE4-NEXT: retq 1600; 1601; AVX-LABEL: test52: 1602; AVX: # %bb.0: # %entry 1603; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0 1604; AVX-NEXT: retq 1605entry: 1606 %cmp = icmp sge <16 x i8> %a, %b 1607 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1608 ret <16 x i8> %sel 1609} 1610 1611define <16 x i8> @test53(<16 x i8> %a, <16 x i8> %b) { 1612; SSE-LABEL: test53: 1613; SSE: # %bb.0: # %entry 1614; SSE-NEXT: pmaxub %xmm1, %xmm0 1615; SSE-NEXT: retq 1616; 1617; AVX-LABEL: test53: 1618; AVX: # %bb.0: # %entry 1619; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 1620; AVX-NEXT: retq 1621entry: 1622 %cmp = icmp ult <16 x i8> %a, %b 1623 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1624 ret <16 x i8> %sel 1625} 1626 1627define <16 x i8> @test54(<16 x i8> %a, <16 x i8> %b) { 1628; SSE-LABEL: test54: 1629; SSE: # %bb.0: # %entry 1630; SSE-NEXT: pmaxub %xmm1, %xmm0 1631; SSE-NEXT: retq 1632; 1633; AVX-LABEL: test54: 1634; AVX: # %bb.0: # %entry 1635; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 1636; AVX-NEXT: retq 1637entry: 1638 %cmp = icmp ule <16 x i8> %a, %b 1639 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1640 ret <16 x i8> %sel 1641} 1642 1643define <16 x i8> @test55(<16 x i8> %a, <16 x i8> %b) { 1644; SSE-LABEL: test55: 1645; SSE: # %bb.0: # %entry 1646; SSE-NEXT: pminub %xmm1, %xmm0 1647; SSE-NEXT: retq 1648; 1649; AVX-LABEL: test55: 1650; AVX: # %bb.0: # %entry 1651; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 1652; AVX-NEXT: retq 1653entry: 1654 %cmp = icmp ugt <16 x i8> %a, %b 1655 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1656 ret <16 x i8> %sel 1657} 1658 1659define <16 x i8> @test56(<16 x i8> %a, <16 x i8> %b) { 1660; SSE-LABEL: test56: 1661; SSE: # %bb.0: # %entry 1662; SSE-NEXT: pminub %xmm1, %xmm0 1663; SSE-NEXT: retq 1664; 1665; AVX-LABEL: test56: 1666; AVX: # %bb.0: # %entry 1667; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 1668; AVX-NEXT: retq 1669entry: 1670 %cmp = icmp uge <16 x i8> %a, %b 1671 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1672 ret <16 x i8> %sel 1673} 1674 1675define <8 x i16> @test57(<8 x i16> %a, <8 x i16> %b) { 1676; SSE-LABEL: test57: 1677; SSE: # %bb.0: # %entry 1678; SSE-NEXT: pmaxsw %xmm1, %xmm0 1679; SSE-NEXT: retq 1680; 1681; AVX-LABEL: test57: 1682; AVX: # %bb.0: # %entry 1683; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 1684; AVX-NEXT: retq 1685entry: 1686 %cmp = icmp slt <8 x i16> %a, %b 1687 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1688 ret <8 x i16> %sel 1689} 1690 1691define <8 x i16> @test58(<8 x i16> %a, <8 x i16> %b) { 1692; SSE-LABEL: test58: 1693; SSE: # %bb.0: # %entry 1694; SSE-NEXT: pmaxsw %xmm1, %xmm0 1695; SSE-NEXT: retq 1696; 1697; AVX-LABEL: test58: 1698; AVX: # %bb.0: # %entry 1699; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 1700; AVX-NEXT: retq 1701entry: 1702 %cmp = icmp sle <8 x i16> %a, %b 1703 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1704 ret <8 x i16> %sel 1705} 1706 1707define <8 x i16> @test59(<8 x i16> %a, <8 x i16> %b) { 1708; SSE-LABEL: test59: 1709; SSE: # %bb.0: # %entry 1710; SSE-NEXT: pminsw %xmm1, %xmm0 1711; SSE-NEXT: retq 1712; 1713; AVX-LABEL: test59: 1714; AVX: # %bb.0: # %entry 1715; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 1716; AVX-NEXT: retq 1717entry: 1718 %cmp = icmp sgt <8 x i16> %a, %b 1719 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1720 ret <8 x i16> %sel 1721} 1722 1723define <8 x i16> @test60(<8 x i16> %a, <8 x i16> %b) { 1724; SSE-LABEL: test60: 1725; SSE: # %bb.0: # %entry 1726; SSE-NEXT: pminsw %xmm1, %xmm0 1727; SSE-NEXT: retq 1728; 1729; AVX-LABEL: test60: 1730; AVX: # %bb.0: # %entry 1731; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 1732; AVX-NEXT: retq 1733entry: 1734 %cmp = icmp sge <8 x i16> %a, %b 1735 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1736 ret <8 x i16> %sel 1737} 1738 1739define <8 x i16> @test61(<8 x i16> %a, <8 x i16> %b) { 1740; SSE2-LABEL: test61: 1741; SSE2: # %bb.0: # %entry 1742; SSE2-NEXT: psubusw %xmm0, %xmm1 1743; SSE2-NEXT: paddw %xmm1, %xmm0 1744; SSE2-NEXT: retq 1745; 1746; SSE4-LABEL: test61: 1747; SSE4: # %bb.0: # %entry 1748; SSE4-NEXT: pmaxuw %xmm1, %xmm0 1749; SSE4-NEXT: retq 1750; 1751; AVX-LABEL: test61: 1752; AVX: # %bb.0: # %entry 1753; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1754; AVX-NEXT: retq 1755entry: 1756 %cmp = icmp ult <8 x i16> %a, %b 1757 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1758 ret <8 x i16> %sel 1759} 1760 1761define <8 x i16> @test62(<8 x i16> %a, <8 x i16> %b) { 1762; SSE2-LABEL: test62: 1763; SSE2: # %bb.0: # %entry 1764; SSE2-NEXT: psubusw %xmm0, %xmm1 1765; SSE2-NEXT: paddw %xmm1, %xmm0 1766; SSE2-NEXT: retq 1767; 1768; SSE4-LABEL: test62: 1769; SSE4: # %bb.0: # %entry 1770; SSE4-NEXT: pmaxuw %xmm1, %xmm0 1771; SSE4-NEXT: retq 1772; 1773; AVX-LABEL: test62: 1774; AVX: # %bb.0: # %entry 1775; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1776; AVX-NEXT: retq 1777entry: 1778 %cmp = icmp ule <8 x i16> %a, %b 1779 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1780 ret <8 x i16> %sel 1781} 1782 1783define <8 x i16> @test63(<8 x i16> %a, <8 x i16> %b) { 1784; SSE2-LABEL: test63: 1785; SSE2: # %bb.0: # %entry 1786; SSE2-NEXT: movdqa %xmm0, %xmm2 1787; SSE2-NEXT: psubusw %xmm1, %xmm2 1788; SSE2-NEXT: psubw %xmm2, %xmm0 1789; SSE2-NEXT: retq 1790; 1791; SSE4-LABEL: test63: 1792; SSE4: # %bb.0: # %entry 1793; SSE4-NEXT: pminuw %xmm1, %xmm0 1794; SSE4-NEXT: retq 1795; 1796; AVX-LABEL: test63: 1797; AVX: # %bb.0: # %entry 1798; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1799; AVX-NEXT: retq 1800entry: 1801 %cmp = icmp ugt <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 1806define <8 x i16> @test64(<8 x i16> %a, <8 x i16> %b) { 1807; SSE2-LABEL: test64: 1808; SSE2: # %bb.0: # %entry 1809; SSE2-NEXT: movdqa %xmm0, %xmm2 1810; SSE2-NEXT: psubusw %xmm1, %xmm2 1811; SSE2-NEXT: psubw %xmm2, %xmm0 1812; SSE2-NEXT: retq 1813; 1814; SSE4-LABEL: test64: 1815; SSE4: # %bb.0: # %entry 1816; SSE4-NEXT: pminuw %xmm1, %xmm0 1817; SSE4-NEXT: retq 1818; 1819; AVX-LABEL: test64: 1820; AVX: # %bb.0: # %entry 1821; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1822; AVX-NEXT: retq 1823entry: 1824 %cmp = icmp uge <8 x i16> %a, %b 1825 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1826 ret <8 x i16> %sel 1827} 1828 1829define <4 x i32> @test65(<4 x i32> %a, <4 x i32> %b) { 1830; SSE2-LABEL: test65: 1831; SSE2: # %bb.0: # %entry 1832; SSE2-NEXT: movdqa %xmm0, %xmm2 1833; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 1834; SSE2-NEXT: pand %xmm2, %xmm0 1835; SSE2-NEXT: pandn %xmm1, %xmm2 1836; SSE2-NEXT: por %xmm2, %xmm0 1837; SSE2-NEXT: retq 1838; 1839; SSE4-LABEL: test65: 1840; SSE4: # %bb.0: # %entry 1841; SSE4-NEXT: pmaxsd %xmm1, %xmm0 1842; SSE4-NEXT: retq 1843; 1844; AVX-LABEL: test65: 1845; AVX: # %bb.0: # %entry 1846; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1847; AVX-NEXT: retq 1848entry: 1849 %cmp = icmp slt <4 x i32> %a, %b 1850 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 1851 ret <4 x i32> %sel 1852} 1853 1854define <4 x i32> @test66(<4 x i32> %a, <4 x i32> %b) { 1855; SSE2-LABEL: test66: 1856; SSE2: # %bb.0: # %entry 1857; SSE2-NEXT: movdqa %xmm0, %xmm2 1858; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 1859; SSE2-NEXT: pand %xmm2, %xmm0 1860; SSE2-NEXT: pandn %xmm1, %xmm2 1861; SSE2-NEXT: por %xmm2, %xmm0 1862; SSE2-NEXT: retq 1863; 1864; SSE4-LABEL: test66: 1865; SSE4: # %bb.0: # %entry 1866; SSE4-NEXT: pmaxsd %xmm1, %xmm0 1867; SSE4-NEXT: retq 1868; 1869; AVX-LABEL: test66: 1870; AVX: # %bb.0: # %entry 1871; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1872; AVX-NEXT: retq 1873entry: 1874 %cmp = icmp sle <4 x i32> %a, %b 1875 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 1876 ret <4 x i32> %sel 1877} 1878 1879define <4 x i32> @test67(<4 x i32> %a, <4 x i32> %b) { 1880; SSE2-LABEL: test67: 1881; SSE2: # %bb.0: # %entry 1882; SSE2-NEXT: movdqa %xmm1, %xmm2 1883; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 1884; SSE2-NEXT: pand %xmm2, %xmm0 1885; SSE2-NEXT: pandn %xmm1, %xmm2 1886; SSE2-NEXT: por %xmm2, %xmm0 1887; SSE2-NEXT: retq 1888; 1889; SSE4-LABEL: test67: 1890; SSE4: # %bb.0: # %entry 1891; SSE4-NEXT: pminsd %xmm1, %xmm0 1892; SSE4-NEXT: retq 1893; 1894; AVX-LABEL: test67: 1895; AVX: # %bb.0: # %entry 1896; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1897; AVX-NEXT: retq 1898entry: 1899 %cmp = icmp sgt <4 x i32> %a, %b 1900 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 1901 ret <4 x i32> %sel 1902} 1903 1904define <4 x i32> @test68(<4 x i32> %a, <4 x i32> %b) { 1905; SSE2-LABEL: test68: 1906; SSE2: # %bb.0: # %entry 1907; SSE2-NEXT: movdqa %xmm1, %xmm2 1908; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 1909; SSE2-NEXT: pand %xmm2, %xmm0 1910; SSE2-NEXT: pandn %xmm1, %xmm2 1911; SSE2-NEXT: por %xmm2, %xmm0 1912; SSE2-NEXT: retq 1913; 1914; SSE4-LABEL: test68: 1915; SSE4: # %bb.0: # %entry 1916; SSE4-NEXT: pminsd %xmm1, %xmm0 1917; SSE4-NEXT: retq 1918; 1919; AVX-LABEL: test68: 1920; AVX: # %bb.0: # %entry 1921; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1922; AVX-NEXT: retq 1923entry: 1924 %cmp = icmp sge <4 x i32> %a, %b 1925 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 1926 ret <4 x i32> %sel 1927} 1928 1929define <4 x i32> @test69(<4 x i32> %a, <4 x i32> %b) { 1930; SSE2-LABEL: test69: 1931; SSE2: # %bb.0: # %entry 1932; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 1933; SSE2-NEXT: movdqa %xmm1, %xmm3 1934; SSE2-NEXT: pxor %xmm2, %xmm3 1935; SSE2-NEXT: pxor %xmm0, %xmm2 1936; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 1937; SSE2-NEXT: pand %xmm2, %xmm0 1938; SSE2-NEXT: pandn %xmm1, %xmm2 1939; SSE2-NEXT: por %xmm2, %xmm0 1940; SSE2-NEXT: retq 1941; 1942; SSE4-LABEL: test69: 1943; SSE4: # %bb.0: # %entry 1944; SSE4-NEXT: pmaxud %xmm1, %xmm0 1945; SSE4-NEXT: retq 1946; 1947; AVX-LABEL: test69: 1948; AVX: # %bb.0: # %entry 1949; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 1950; AVX-NEXT: retq 1951entry: 1952 %cmp = icmp ult <4 x i32> %a, %b 1953 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 1954 ret <4 x i32> %sel 1955} 1956 1957define <4 x i32> @test70(<4 x i32> %a, <4 x i32> %b) { 1958; SSE2-LABEL: test70: 1959; SSE2: # %bb.0: # %entry 1960; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 1961; SSE2-NEXT: movdqa %xmm1, %xmm3 1962; SSE2-NEXT: pxor %xmm2, %xmm3 1963; SSE2-NEXT: pxor %xmm0, %xmm2 1964; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 1965; SSE2-NEXT: pand %xmm2, %xmm0 1966; SSE2-NEXT: pandn %xmm1, %xmm2 1967; SSE2-NEXT: por %xmm2, %xmm0 1968; SSE2-NEXT: retq 1969; 1970; SSE4-LABEL: test70: 1971; SSE4: # %bb.0: # %entry 1972; SSE4-NEXT: pmaxud %xmm1, %xmm0 1973; SSE4-NEXT: retq 1974; 1975; AVX-LABEL: test70: 1976; AVX: # %bb.0: # %entry 1977; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 1978; AVX-NEXT: retq 1979entry: 1980 %cmp = icmp ule <4 x i32> %a, %b 1981 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 1982 ret <4 x i32> %sel 1983} 1984 1985define <4 x i32> @test71(<4 x i32> %a, <4 x i32> %b) { 1986; SSE2-LABEL: test71: 1987; SSE2: # %bb.0: # %entry 1988; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 1989; SSE2-NEXT: movdqa %xmm0, %xmm3 1990; SSE2-NEXT: pxor %xmm2, %xmm3 1991; SSE2-NEXT: pxor %xmm1, %xmm2 1992; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 1993; SSE2-NEXT: pand %xmm2, %xmm0 1994; SSE2-NEXT: pandn %xmm1, %xmm2 1995; SSE2-NEXT: por %xmm2, %xmm0 1996; SSE2-NEXT: retq 1997; 1998; SSE4-LABEL: test71: 1999; SSE4: # %bb.0: # %entry 2000; SSE4-NEXT: pminud %xmm1, %xmm0 2001; SSE4-NEXT: retq 2002; 2003; AVX-LABEL: test71: 2004; AVX: # %bb.0: # %entry 2005; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 2006; AVX-NEXT: retq 2007entry: 2008 %cmp = icmp ugt <4 x i32> %a, %b 2009 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2010 ret <4 x i32> %sel 2011} 2012 2013define <4 x i32> @test72(<4 x i32> %a, <4 x i32> %b) { 2014; SSE2-LABEL: test72: 2015; SSE2: # %bb.0: # %entry 2016; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 2017; SSE2-NEXT: movdqa %xmm0, %xmm3 2018; SSE2-NEXT: pxor %xmm2, %xmm3 2019; SSE2-NEXT: pxor %xmm1, %xmm2 2020; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2021; SSE2-NEXT: pand %xmm2, %xmm0 2022; SSE2-NEXT: pandn %xmm1, %xmm2 2023; SSE2-NEXT: por %xmm2, %xmm0 2024; SSE2-NEXT: retq 2025; 2026; SSE4-LABEL: test72: 2027; SSE4: # %bb.0: # %entry 2028; SSE4-NEXT: pminud %xmm1, %xmm0 2029; SSE4-NEXT: retq 2030; 2031; AVX-LABEL: test72: 2032; AVX: # %bb.0: # %entry 2033; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 2034; AVX-NEXT: retq 2035entry: 2036 %cmp = icmp uge <4 x i32> %a, %b 2037 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2038 ret <4 x i32> %sel 2039} 2040 2041define <32 x i8> @test73(<32 x i8> %a, <32 x i8> %b) { 2042; SSE2-LABEL: test73: 2043; SSE2: # %bb.0: # %entry 2044; SSE2-NEXT: movdqa %xmm0, %xmm4 2045; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 2046; SSE2-NEXT: pand %xmm4, %xmm0 2047; SSE2-NEXT: pandn %xmm2, %xmm4 2048; SSE2-NEXT: por %xmm4, %xmm0 2049; SSE2-NEXT: movdqa %xmm1, %xmm2 2050; SSE2-NEXT: pcmpgtb %xmm3, %xmm2 2051; SSE2-NEXT: pand %xmm2, %xmm1 2052; SSE2-NEXT: pandn %xmm3, %xmm2 2053; SSE2-NEXT: por %xmm2, %xmm1 2054; SSE2-NEXT: retq 2055; 2056; SSE4-LABEL: test73: 2057; SSE4: # %bb.0: # %entry 2058; SSE4-NEXT: pmaxsb %xmm2, %xmm0 2059; SSE4-NEXT: pmaxsb %xmm3, %xmm1 2060; SSE4-NEXT: retq 2061; 2062; AVX1-LABEL: test73: 2063; AVX1: # %bb.0: # %entry 2064; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2065; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2066; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 2067; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 2068; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2069; AVX1-NEXT: retq 2070; 2071; AVX2-LABEL: test73: 2072; AVX2: # %bb.0: # %entry 2073; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2074; AVX2-NEXT: retq 2075; 2076; AVX512-LABEL: test73: 2077; AVX512: # %bb.0: # %entry 2078; AVX512-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2079; AVX512-NEXT: retq 2080entry: 2081 %cmp = icmp slt <32 x i8> %a, %b 2082 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2083 ret <32 x i8> %sel 2084} 2085 2086define <32 x i8> @test74(<32 x i8> %a, <32 x i8> %b) { 2087; SSE2-LABEL: test74: 2088; SSE2: # %bb.0: # %entry 2089; SSE2-NEXT: movdqa %xmm0, %xmm4 2090; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 2091; SSE2-NEXT: pand %xmm4, %xmm0 2092; SSE2-NEXT: pandn %xmm2, %xmm4 2093; SSE2-NEXT: por %xmm4, %xmm0 2094; SSE2-NEXT: movdqa %xmm1, %xmm2 2095; SSE2-NEXT: pcmpgtb %xmm3, %xmm2 2096; SSE2-NEXT: pand %xmm2, %xmm1 2097; SSE2-NEXT: pandn %xmm3, %xmm2 2098; SSE2-NEXT: por %xmm2, %xmm1 2099; SSE2-NEXT: retq 2100; 2101; SSE4-LABEL: test74: 2102; SSE4: # %bb.0: # %entry 2103; SSE4-NEXT: pmaxsb %xmm2, %xmm0 2104; SSE4-NEXT: pmaxsb %xmm3, %xmm1 2105; SSE4-NEXT: retq 2106; 2107; AVX1-LABEL: test74: 2108; AVX1: # %bb.0: # %entry 2109; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2110; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2111; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 2112; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 2113; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2114; AVX1-NEXT: retq 2115; 2116; AVX2-LABEL: test74: 2117; AVX2: # %bb.0: # %entry 2118; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2119; AVX2-NEXT: retq 2120; 2121; AVX512-LABEL: test74: 2122; AVX512: # %bb.0: # %entry 2123; AVX512-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2124; AVX512-NEXT: retq 2125entry: 2126 %cmp = icmp sle <32 x i8> %a, %b 2127 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2128 ret <32 x i8> %sel 2129} 2130 2131define <32 x i8> @test75(<32 x i8> %a, <32 x i8> %b) { 2132; SSE2-LABEL: test75: 2133; SSE2: # %bb.0: # %entry 2134; SSE2-NEXT: movdqa %xmm2, %xmm4 2135; SSE2-NEXT: pcmpgtb %xmm0, %xmm4 2136; SSE2-NEXT: pand %xmm4, %xmm0 2137; SSE2-NEXT: pandn %xmm2, %xmm4 2138; SSE2-NEXT: por %xmm4, %xmm0 2139; SSE2-NEXT: movdqa %xmm3, %xmm2 2140; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 2141; SSE2-NEXT: pand %xmm2, %xmm1 2142; SSE2-NEXT: pandn %xmm3, %xmm2 2143; SSE2-NEXT: por %xmm2, %xmm1 2144; SSE2-NEXT: retq 2145; 2146; SSE4-LABEL: test75: 2147; SSE4: # %bb.0: # %entry 2148; SSE4-NEXT: pminsb %xmm2, %xmm0 2149; SSE4-NEXT: pminsb %xmm3, %xmm1 2150; SSE4-NEXT: retq 2151; 2152; AVX1-LABEL: test75: 2153; AVX1: # %bb.0: # %entry 2154; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2155; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2156; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 2157; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 2158; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2159; AVX1-NEXT: retq 2160; 2161; AVX2-LABEL: test75: 2162; AVX2: # %bb.0: # %entry 2163; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2164; AVX2-NEXT: retq 2165; 2166; AVX512-LABEL: test75: 2167; AVX512: # %bb.0: # %entry 2168; AVX512-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2169; AVX512-NEXT: retq 2170entry: 2171 %cmp = icmp sgt <32 x i8> %a, %b 2172 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2173 ret <32 x i8> %sel 2174} 2175 2176define <32 x i8> @test76(<32 x i8> %a, <32 x i8> %b) { 2177; SSE2-LABEL: test76: 2178; SSE2: # %bb.0: # %entry 2179; SSE2-NEXT: movdqa %xmm2, %xmm4 2180; SSE2-NEXT: pcmpgtb %xmm0, %xmm4 2181; SSE2-NEXT: pand %xmm4, %xmm0 2182; SSE2-NEXT: pandn %xmm2, %xmm4 2183; SSE2-NEXT: por %xmm4, %xmm0 2184; SSE2-NEXT: movdqa %xmm3, %xmm2 2185; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 2186; SSE2-NEXT: pand %xmm2, %xmm1 2187; SSE2-NEXT: pandn %xmm3, %xmm2 2188; SSE2-NEXT: por %xmm2, %xmm1 2189; SSE2-NEXT: retq 2190; 2191; SSE4-LABEL: test76: 2192; SSE4: # %bb.0: # %entry 2193; SSE4-NEXT: pminsb %xmm2, %xmm0 2194; SSE4-NEXT: pminsb %xmm3, %xmm1 2195; SSE4-NEXT: retq 2196; 2197; AVX1-LABEL: test76: 2198; AVX1: # %bb.0: # %entry 2199; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2200; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2201; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 2202; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 2203; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2204; AVX1-NEXT: retq 2205; 2206; AVX2-LABEL: test76: 2207; AVX2: # %bb.0: # %entry 2208; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2209; AVX2-NEXT: retq 2210; 2211; AVX512-LABEL: test76: 2212; AVX512: # %bb.0: # %entry 2213; AVX512-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2214; AVX512-NEXT: retq 2215entry: 2216 %cmp = icmp sge <32 x i8> %a, %b 2217 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2218 ret <32 x i8> %sel 2219} 2220 2221define <32 x i8> @test77(<32 x i8> %a, <32 x i8> %b) { 2222; SSE-LABEL: test77: 2223; SSE: # %bb.0: # %entry 2224; SSE-NEXT: pmaxub %xmm2, %xmm0 2225; SSE-NEXT: pmaxub %xmm3, %xmm1 2226; SSE-NEXT: retq 2227; 2228; AVX1-LABEL: test77: 2229; AVX1: # %bb.0: # %entry 2230; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2231; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2232; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 2233; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 2234; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2235; AVX1-NEXT: retq 2236; 2237; AVX2-LABEL: test77: 2238; AVX2: # %bb.0: # %entry 2239; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2240; AVX2-NEXT: retq 2241; 2242; AVX512-LABEL: test77: 2243; AVX512: # %bb.0: # %entry 2244; AVX512-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2245; AVX512-NEXT: retq 2246entry: 2247 %cmp = icmp ult <32 x i8> %a, %b 2248 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2249 ret <32 x i8> %sel 2250} 2251 2252define <32 x i8> @test78(<32 x i8> %a, <32 x i8> %b) { 2253; SSE-LABEL: test78: 2254; SSE: # %bb.0: # %entry 2255; SSE-NEXT: pmaxub %xmm2, %xmm0 2256; SSE-NEXT: pmaxub %xmm3, %xmm1 2257; SSE-NEXT: retq 2258; 2259; AVX1-LABEL: test78: 2260; AVX1: # %bb.0: # %entry 2261; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2262; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2263; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 2264; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 2265; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2266; AVX1-NEXT: retq 2267; 2268; AVX2-LABEL: test78: 2269; AVX2: # %bb.0: # %entry 2270; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2271; AVX2-NEXT: retq 2272; 2273; AVX512-LABEL: test78: 2274; AVX512: # %bb.0: # %entry 2275; AVX512-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2276; AVX512-NEXT: retq 2277entry: 2278 %cmp = icmp ule <32 x i8> %a, %b 2279 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2280 ret <32 x i8> %sel 2281} 2282 2283define <32 x i8> @test79(<32 x i8> %a, <32 x i8> %b) { 2284; SSE-LABEL: test79: 2285; SSE: # %bb.0: # %entry 2286; SSE-NEXT: pminub %xmm2, %xmm0 2287; SSE-NEXT: pminub %xmm3, %xmm1 2288; SSE-NEXT: retq 2289; 2290; AVX1-LABEL: test79: 2291; AVX1: # %bb.0: # %entry 2292; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2293; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2294; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 2295; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 2296; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2297; AVX1-NEXT: retq 2298; 2299; AVX2-LABEL: test79: 2300; AVX2: # %bb.0: # %entry 2301; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 2302; AVX2-NEXT: retq 2303; 2304; AVX512-LABEL: test79: 2305; AVX512: # %bb.0: # %entry 2306; AVX512-NEXT: vpminub %ymm1, %ymm0, %ymm0 2307; AVX512-NEXT: retq 2308entry: 2309 %cmp = icmp ugt <32 x i8> %a, %b 2310 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2311 ret <32 x i8> %sel 2312} 2313 2314define <32 x i8> @test80(<32 x i8> %a, <32 x i8> %b) { 2315; SSE-LABEL: test80: 2316; SSE: # %bb.0: # %entry 2317; SSE-NEXT: pminub %xmm2, %xmm0 2318; SSE-NEXT: pminub %xmm3, %xmm1 2319; SSE-NEXT: retq 2320; 2321; AVX1-LABEL: test80: 2322; AVX1: # %bb.0: # %entry 2323; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2324; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2325; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 2326; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 2327; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2328; AVX1-NEXT: retq 2329; 2330; AVX2-LABEL: test80: 2331; AVX2: # %bb.0: # %entry 2332; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 2333; AVX2-NEXT: retq 2334; 2335; AVX512-LABEL: test80: 2336; AVX512: # %bb.0: # %entry 2337; AVX512-NEXT: vpminub %ymm1, %ymm0, %ymm0 2338; AVX512-NEXT: retq 2339entry: 2340 %cmp = icmp uge <32 x i8> %a, %b 2341 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2342 ret <32 x i8> %sel 2343} 2344 2345define <16 x i16> @test81(<16 x i16> %a, <16 x i16> %b) { 2346; SSE-LABEL: test81: 2347; SSE: # %bb.0: # %entry 2348; SSE-NEXT: pmaxsw %xmm2, %xmm0 2349; SSE-NEXT: pmaxsw %xmm3, %xmm1 2350; SSE-NEXT: retq 2351; 2352; AVX1-LABEL: test81: 2353; AVX1: # %bb.0: # %entry 2354; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2355; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2356; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 2357; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 2358; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2359; AVX1-NEXT: retq 2360; 2361; AVX2-LABEL: test81: 2362; AVX2: # %bb.0: # %entry 2363; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2364; AVX2-NEXT: retq 2365; 2366; AVX512-LABEL: test81: 2367; AVX512: # %bb.0: # %entry 2368; AVX512-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2369; AVX512-NEXT: retq 2370entry: 2371 %cmp = icmp slt <16 x i16> %a, %b 2372 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2373 ret <16 x i16> %sel 2374} 2375 2376define <16 x i16> @test82(<16 x i16> %a, <16 x i16> %b) { 2377; SSE-LABEL: test82: 2378; SSE: # %bb.0: # %entry 2379; SSE-NEXT: pmaxsw %xmm2, %xmm0 2380; SSE-NEXT: pmaxsw %xmm3, %xmm1 2381; SSE-NEXT: retq 2382; 2383; AVX1-LABEL: test82: 2384; AVX1: # %bb.0: # %entry 2385; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2386; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2387; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 2388; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 2389; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2390; AVX1-NEXT: retq 2391; 2392; AVX2-LABEL: test82: 2393; AVX2: # %bb.0: # %entry 2394; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2395; AVX2-NEXT: retq 2396; 2397; AVX512-LABEL: test82: 2398; AVX512: # %bb.0: # %entry 2399; AVX512-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2400; AVX512-NEXT: retq 2401entry: 2402 %cmp = icmp sle <16 x i16> %a, %b 2403 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2404 ret <16 x i16> %sel 2405} 2406 2407define <16 x i16> @test83(<16 x i16> %a, <16 x i16> %b) { 2408; SSE-LABEL: test83: 2409; SSE: # %bb.0: # %entry 2410; SSE-NEXT: pminsw %xmm2, %xmm0 2411; SSE-NEXT: pminsw %xmm3, %xmm1 2412; SSE-NEXT: retq 2413; 2414; AVX1-LABEL: test83: 2415; AVX1: # %bb.0: # %entry 2416; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2417; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2418; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 2419; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 2420; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2421; AVX1-NEXT: retq 2422; 2423; AVX2-LABEL: test83: 2424; AVX2: # %bb.0: # %entry 2425; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2426; AVX2-NEXT: retq 2427; 2428; AVX512-LABEL: test83: 2429; AVX512: # %bb.0: # %entry 2430; AVX512-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2431; AVX512-NEXT: retq 2432entry: 2433 %cmp = icmp sgt <16 x i16> %a, %b 2434 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2435 ret <16 x i16> %sel 2436} 2437 2438define <16 x i16> @test84(<16 x i16> %a, <16 x i16> %b) { 2439; SSE-LABEL: test84: 2440; SSE: # %bb.0: # %entry 2441; SSE-NEXT: pminsw %xmm2, %xmm0 2442; SSE-NEXT: pminsw %xmm3, %xmm1 2443; SSE-NEXT: retq 2444; 2445; AVX1-LABEL: test84: 2446; AVX1: # %bb.0: # %entry 2447; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2448; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2449; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 2450; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 2451; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2452; AVX1-NEXT: retq 2453; 2454; AVX2-LABEL: test84: 2455; AVX2: # %bb.0: # %entry 2456; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2457; AVX2-NEXT: retq 2458; 2459; AVX512-LABEL: test84: 2460; AVX512: # %bb.0: # %entry 2461; AVX512-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2462; AVX512-NEXT: retq 2463entry: 2464 %cmp = icmp sge <16 x i16> %a, %b 2465 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2466 ret <16 x i16> %sel 2467} 2468 2469define <16 x i16> @test85(<16 x i16> %a, <16 x i16> %b) { 2470; SSE2-LABEL: test85: 2471; SSE2: # %bb.0: # %entry 2472; SSE2-NEXT: psubusw %xmm0, %xmm2 2473; SSE2-NEXT: paddw %xmm2, %xmm0 2474; SSE2-NEXT: psubusw %xmm1, %xmm3 2475; SSE2-NEXT: paddw %xmm3, %xmm1 2476; SSE2-NEXT: retq 2477; 2478; SSE4-LABEL: test85: 2479; SSE4: # %bb.0: # %entry 2480; SSE4-NEXT: pmaxuw %xmm2, %xmm0 2481; SSE4-NEXT: pmaxuw %xmm3, %xmm1 2482; SSE4-NEXT: retq 2483; 2484; AVX1-LABEL: test85: 2485; AVX1: # %bb.0: # %entry 2486; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2487; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2488; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 2489; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 2490; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2491; AVX1-NEXT: retq 2492; 2493; AVX2-LABEL: test85: 2494; AVX2: # %bb.0: # %entry 2495; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2496; AVX2-NEXT: retq 2497; 2498; AVX512-LABEL: test85: 2499; AVX512: # %bb.0: # %entry 2500; AVX512-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2501; AVX512-NEXT: retq 2502entry: 2503 %cmp = icmp ult <16 x i16> %a, %b 2504 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2505 ret <16 x i16> %sel 2506} 2507 2508define <16 x i16> @test86(<16 x i16> %a, <16 x i16> %b) { 2509; SSE2-LABEL: test86: 2510; SSE2: # %bb.0: # %entry 2511; SSE2-NEXT: psubusw %xmm0, %xmm2 2512; SSE2-NEXT: paddw %xmm2, %xmm0 2513; SSE2-NEXT: psubusw %xmm1, %xmm3 2514; SSE2-NEXT: paddw %xmm3, %xmm1 2515; SSE2-NEXT: retq 2516; 2517; SSE4-LABEL: test86: 2518; SSE4: # %bb.0: # %entry 2519; SSE4-NEXT: pmaxuw %xmm2, %xmm0 2520; SSE4-NEXT: pmaxuw %xmm3, %xmm1 2521; SSE4-NEXT: retq 2522; 2523; AVX1-LABEL: test86: 2524; AVX1: # %bb.0: # %entry 2525; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2526; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2527; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 2528; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 2529; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2530; AVX1-NEXT: retq 2531; 2532; AVX2-LABEL: test86: 2533; AVX2: # %bb.0: # %entry 2534; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2535; AVX2-NEXT: retq 2536; 2537; AVX512-LABEL: test86: 2538; AVX512: # %bb.0: # %entry 2539; AVX512-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2540; AVX512-NEXT: retq 2541entry: 2542 %cmp = icmp ule <16 x i16> %a, %b 2543 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2544 ret <16 x i16> %sel 2545} 2546 2547define <16 x i16> @test87(<16 x i16> %a, <16 x i16> %b) { 2548; SSE2-LABEL: test87: 2549; SSE2: # %bb.0: # %entry 2550; SSE2-NEXT: movdqa %xmm0, %xmm4 2551; SSE2-NEXT: psubusw %xmm2, %xmm4 2552; SSE2-NEXT: psubw %xmm4, %xmm0 2553; SSE2-NEXT: movdqa %xmm1, %xmm2 2554; SSE2-NEXT: psubusw %xmm3, %xmm2 2555; SSE2-NEXT: psubw %xmm2, %xmm1 2556; SSE2-NEXT: retq 2557; 2558; SSE4-LABEL: test87: 2559; SSE4: # %bb.0: # %entry 2560; SSE4-NEXT: pminuw %xmm2, %xmm0 2561; SSE4-NEXT: pminuw %xmm3, %xmm1 2562; SSE4-NEXT: retq 2563; 2564; AVX1-LABEL: test87: 2565; AVX1: # %bb.0: # %entry 2566; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2567; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2568; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 2569; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 2570; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2571; AVX1-NEXT: retq 2572; 2573; AVX2-LABEL: test87: 2574; AVX2: # %bb.0: # %entry 2575; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2576; AVX2-NEXT: retq 2577; 2578; AVX512-LABEL: test87: 2579; AVX512: # %bb.0: # %entry 2580; AVX512-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2581; AVX512-NEXT: retq 2582entry: 2583 %cmp = icmp ugt <16 x i16> %a, %b 2584 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2585 ret <16 x i16> %sel 2586} 2587 2588define <16 x i16> @test88(<16 x i16> %a, <16 x i16> %b) { 2589; SSE2-LABEL: test88: 2590; SSE2: # %bb.0: # %entry 2591; SSE2-NEXT: movdqa %xmm0, %xmm4 2592; SSE2-NEXT: psubusw %xmm2, %xmm4 2593; SSE2-NEXT: psubw %xmm4, %xmm0 2594; SSE2-NEXT: movdqa %xmm1, %xmm2 2595; SSE2-NEXT: psubusw %xmm3, %xmm2 2596; SSE2-NEXT: psubw %xmm2, %xmm1 2597; SSE2-NEXT: retq 2598; 2599; SSE4-LABEL: test88: 2600; SSE4: # %bb.0: # %entry 2601; SSE4-NEXT: pminuw %xmm2, %xmm0 2602; SSE4-NEXT: pminuw %xmm3, %xmm1 2603; SSE4-NEXT: retq 2604; 2605; AVX1-LABEL: test88: 2606; AVX1: # %bb.0: # %entry 2607; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2608; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2609; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 2610; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 2611; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2612; AVX1-NEXT: retq 2613; 2614; AVX2-LABEL: test88: 2615; AVX2: # %bb.0: # %entry 2616; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2617; AVX2-NEXT: retq 2618; 2619; AVX512-LABEL: test88: 2620; AVX512: # %bb.0: # %entry 2621; AVX512-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2622; AVX512-NEXT: retq 2623entry: 2624 %cmp = icmp uge <16 x i16> %a, %b 2625 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2626 ret <16 x i16> %sel 2627} 2628 2629define <8 x i32> @test89(<8 x i32> %a, <8 x i32> %b) { 2630; SSE2-LABEL: test89: 2631; SSE2: # %bb.0: # %entry 2632; SSE2-NEXT: movdqa %xmm0, %xmm4 2633; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 2634; SSE2-NEXT: pand %xmm4, %xmm0 2635; SSE2-NEXT: pandn %xmm2, %xmm4 2636; SSE2-NEXT: por %xmm4, %xmm0 2637; SSE2-NEXT: movdqa %xmm1, %xmm2 2638; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2639; SSE2-NEXT: pand %xmm2, %xmm1 2640; SSE2-NEXT: pandn %xmm3, %xmm2 2641; SSE2-NEXT: por %xmm2, %xmm1 2642; SSE2-NEXT: retq 2643; 2644; SSE4-LABEL: test89: 2645; SSE4: # %bb.0: # %entry 2646; SSE4-NEXT: pmaxsd %xmm2, %xmm0 2647; SSE4-NEXT: pmaxsd %xmm3, %xmm1 2648; SSE4-NEXT: retq 2649; 2650; AVX1-LABEL: test89: 2651; AVX1: # %bb.0: # %entry 2652; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2653; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2654; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 2655; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2656; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2657; AVX1-NEXT: retq 2658; 2659; AVX2-LABEL: test89: 2660; AVX2: # %bb.0: # %entry 2661; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2662; AVX2-NEXT: retq 2663; 2664; AVX512-LABEL: test89: 2665; AVX512: # %bb.0: # %entry 2666; AVX512-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2667; AVX512-NEXT: retq 2668entry: 2669 %cmp = icmp slt <8 x i32> %a, %b 2670 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2671 ret <8 x i32> %sel 2672} 2673 2674define <8 x i32> @test90(<8 x i32> %a, <8 x i32> %b) { 2675; SSE2-LABEL: test90: 2676; SSE2: # %bb.0: # %entry 2677; SSE2-NEXT: movdqa %xmm0, %xmm4 2678; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 2679; SSE2-NEXT: pand %xmm4, %xmm0 2680; SSE2-NEXT: pandn %xmm2, %xmm4 2681; SSE2-NEXT: por %xmm4, %xmm0 2682; SSE2-NEXT: movdqa %xmm1, %xmm2 2683; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2684; SSE2-NEXT: pand %xmm2, %xmm1 2685; SSE2-NEXT: pandn %xmm3, %xmm2 2686; SSE2-NEXT: por %xmm2, %xmm1 2687; SSE2-NEXT: retq 2688; 2689; SSE4-LABEL: test90: 2690; SSE4: # %bb.0: # %entry 2691; SSE4-NEXT: pmaxsd %xmm2, %xmm0 2692; SSE4-NEXT: pmaxsd %xmm3, %xmm1 2693; SSE4-NEXT: retq 2694; 2695; AVX1-LABEL: test90: 2696; AVX1: # %bb.0: # %entry 2697; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2698; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2699; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 2700; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2701; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2702; AVX1-NEXT: retq 2703; 2704; AVX2-LABEL: test90: 2705; AVX2: # %bb.0: # %entry 2706; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2707; AVX2-NEXT: retq 2708; 2709; AVX512-LABEL: test90: 2710; AVX512: # %bb.0: # %entry 2711; AVX512-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2712; AVX512-NEXT: retq 2713entry: 2714 %cmp = icmp sle <8 x i32> %a, %b 2715 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2716 ret <8 x i32> %sel 2717} 2718 2719define <8 x i32> @test91(<8 x i32> %a, <8 x i32> %b) { 2720; SSE2-LABEL: test91: 2721; SSE2: # %bb.0: # %entry 2722; SSE2-NEXT: movdqa %xmm2, %xmm4 2723; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 2724; SSE2-NEXT: pand %xmm4, %xmm0 2725; SSE2-NEXT: pandn %xmm2, %xmm4 2726; SSE2-NEXT: por %xmm4, %xmm0 2727; SSE2-NEXT: movdqa %xmm3, %xmm2 2728; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 2729; SSE2-NEXT: pand %xmm2, %xmm1 2730; SSE2-NEXT: pandn %xmm3, %xmm2 2731; SSE2-NEXT: por %xmm2, %xmm1 2732; SSE2-NEXT: retq 2733; 2734; SSE4-LABEL: test91: 2735; SSE4: # %bb.0: # %entry 2736; SSE4-NEXT: pminsd %xmm2, %xmm0 2737; SSE4-NEXT: pminsd %xmm3, %xmm1 2738; SSE4-NEXT: retq 2739; 2740; AVX1-LABEL: test91: 2741; AVX1: # %bb.0: # %entry 2742; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2743; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2744; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 2745; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 2746; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2747; AVX1-NEXT: retq 2748; 2749; AVX2-LABEL: test91: 2750; AVX2: # %bb.0: # %entry 2751; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2752; AVX2-NEXT: retq 2753; 2754; AVX512-LABEL: test91: 2755; AVX512: # %bb.0: # %entry 2756; AVX512-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2757; AVX512-NEXT: retq 2758entry: 2759 %cmp = icmp sgt <8 x i32> %a, %b 2760 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2761 ret <8 x i32> %sel 2762} 2763 2764define <8 x i32> @test92(<8 x i32> %a, <8 x i32> %b) { 2765; SSE2-LABEL: test92: 2766; SSE2: # %bb.0: # %entry 2767; SSE2-NEXT: movdqa %xmm2, %xmm4 2768; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 2769; SSE2-NEXT: pand %xmm4, %xmm0 2770; SSE2-NEXT: pandn %xmm2, %xmm4 2771; SSE2-NEXT: por %xmm4, %xmm0 2772; SSE2-NEXT: movdqa %xmm3, %xmm2 2773; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 2774; SSE2-NEXT: pand %xmm2, %xmm1 2775; SSE2-NEXT: pandn %xmm3, %xmm2 2776; SSE2-NEXT: por %xmm2, %xmm1 2777; SSE2-NEXT: retq 2778; 2779; SSE4-LABEL: test92: 2780; SSE4: # %bb.0: # %entry 2781; SSE4-NEXT: pminsd %xmm2, %xmm0 2782; SSE4-NEXT: pminsd %xmm3, %xmm1 2783; SSE4-NEXT: retq 2784; 2785; AVX1-LABEL: test92: 2786; AVX1: # %bb.0: # %entry 2787; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2788; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2789; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 2790; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 2791; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2792; AVX1-NEXT: retq 2793; 2794; AVX2-LABEL: test92: 2795; AVX2: # %bb.0: # %entry 2796; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2797; AVX2-NEXT: retq 2798; 2799; AVX512-LABEL: test92: 2800; AVX512: # %bb.0: # %entry 2801; AVX512-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2802; AVX512-NEXT: retq 2803entry: 2804 %cmp = icmp sge <8 x i32> %a, %b 2805 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2806 ret <8 x i32> %sel 2807} 2808 2809define <8 x i32> @test93(<8 x i32> %a, <8 x i32> %b) { 2810; SSE2-LABEL: test93: 2811; SSE2: # %bb.0: # %entry 2812; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 2813; SSE2-NEXT: movdqa %xmm2, %xmm5 2814; SSE2-NEXT: pxor %xmm4, %xmm5 2815; SSE2-NEXT: movdqa %xmm0, %xmm6 2816; SSE2-NEXT: pxor %xmm4, %xmm6 2817; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 2818; SSE2-NEXT: pand %xmm6, %xmm0 2819; SSE2-NEXT: pandn %xmm2, %xmm6 2820; SSE2-NEXT: por %xmm6, %xmm0 2821; SSE2-NEXT: movdqa %xmm3, %xmm2 2822; SSE2-NEXT: pxor %xmm4, %xmm2 2823; SSE2-NEXT: pxor %xmm1, %xmm4 2824; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 2825; SSE2-NEXT: pand %xmm4, %xmm1 2826; SSE2-NEXT: pandn %xmm3, %xmm4 2827; SSE2-NEXT: por %xmm4, %xmm1 2828; SSE2-NEXT: retq 2829; 2830; SSE4-LABEL: test93: 2831; SSE4: # %bb.0: # %entry 2832; SSE4-NEXT: pmaxud %xmm2, %xmm0 2833; SSE4-NEXT: pmaxud %xmm3, %xmm1 2834; SSE4-NEXT: retq 2835; 2836; AVX1-LABEL: test93: 2837; AVX1: # %bb.0: # %entry 2838; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2839; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2840; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 2841; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 2842; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2843; AVX1-NEXT: retq 2844; 2845; AVX2-LABEL: test93: 2846; AVX2: # %bb.0: # %entry 2847; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 2848; AVX2-NEXT: retq 2849; 2850; AVX512-LABEL: test93: 2851; AVX512: # %bb.0: # %entry 2852; AVX512-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 2853; AVX512-NEXT: retq 2854entry: 2855 %cmp = icmp ult <8 x i32> %a, %b 2856 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2857 ret <8 x i32> %sel 2858} 2859 2860define <8 x i32> @test94(<8 x i32> %a, <8 x i32> %b) { 2861; SSE2-LABEL: test94: 2862; SSE2: # %bb.0: # %entry 2863; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 2864; SSE2-NEXT: movdqa %xmm2, %xmm5 2865; SSE2-NEXT: pxor %xmm4, %xmm5 2866; SSE2-NEXT: movdqa %xmm0, %xmm6 2867; SSE2-NEXT: pxor %xmm4, %xmm6 2868; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 2869; SSE2-NEXT: pand %xmm6, %xmm0 2870; SSE2-NEXT: pandn %xmm2, %xmm6 2871; SSE2-NEXT: por %xmm6, %xmm0 2872; SSE2-NEXT: movdqa %xmm3, %xmm2 2873; SSE2-NEXT: pxor %xmm4, %xmm2 2874; SSE2-NEXT: pxor %xmm1, %xmm4 2875; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 2876; SSE2-NEXT: pand %xmm4, %xmm1 2877; SSE2-NEXT: pandn %xmm3, %xmm4 2878; SSE2-NEXT: por %xmm4, %xmm1 2879; SSE2-NEXT: retq 2880; 2881; SSE4-LABEL: test94: 2882; SSE4: # %bb.0: # %entry 2883; SSE4-NEXT: pmaxud %xmm2, %xmm0 2884; SSE4-NEXT: pmaxud %xmm3, %xmm1 2885; SSE4-NEXT: retq 2886; 2887; AVX1-LABEL: test94: 2888; AVX1: # %bb.0: # %entry 2889; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2890; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2891; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 2892; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 2893; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2894; AVX1-NEXT: retq 2895; 2896; AVX2-LABEL: test94: 2897; AVX2: # %bb.0: # %entry 2898; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 2899; AVX2-NEXT: retq 2900; 2901; AVX512-LABEL: test94: 2902; AVX512: # %bb.0: # %entry 2903; AVX512-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 2904; AVX512-NEXT: retq 2905entry: 2906 %cmp = icmp ule <8 x i32> %a, %b 2907 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2908 ret <8 x i32> %sel 2909} 2910 2911define <8 x i32> @test95(<8 x i32> %a, <8 x i32> %b) { 2912; SSE2-LABEL: test95: 2913; SSE2: # %bb.0: # %entry 2914; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 2915; SSE2-NEXT: movdqa %xmm0, %xmm5 2916; SSE2-NEXT: pxor %xmm4, %xmm5 2917; SSE2-NEXT: movdqa %xmm2, %xmm6 2918; SSE2-NEXT: pxor %xmm4, %xmm6 2919; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 2920; SSE2-NEXT: pand %xmm6, %xmm0 2921; SSE2-NEXT: pandn %xmm2, %xmm6 2922; SSE2-NEXT: por %xmm6, %xmm0 2923; SSE2-NEXT: movdqa %xmm1, %xmm2 2924; SSE2-NEXT: pxor %xmm4, %xmm2 2925; SSE2-NEXT: pxor %xmm3, %xmm4 2926; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 2927; SSE2-NEXT: pand %xmm4, %xmm1 2928; SSE2-NEXT: pandn %xmm3, %xmm4 2929; SSE2-NEXT: por %xmm4, %xmm1 2930; SSE2-NEXT: retq 2931; 2932; SSE4-LABEL: test95: 2933; SSE4: # %bb.0: # %entry 2934; SSE4-NEXT: pminud %xmm2, %xmm0 2935; SSE4-NEXT: pminud %xmm3, %xmm1 2936; SSE4-NEXT: retq 2937; 2938; AVX1-LABEL: test95: 2939; AVX1: # %bb.0: # %entry 2940; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2941; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2942; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 2943; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 2944; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2945; AVX1-NEXT: retq 2946; 2947; AVX2-LABEL: test95: 2948; AVX2: # %bb.0: # %entry 2949; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 2950; AVX2-NEXT: retq 2951; 2952; AVX512-LABEL: test95: 2953; AVX512: # %bb.0: # %entry 2954; AVX512-NEXT: vpminud %ymm1, %ymm0, %ymm0 2955; AVX512-NEXT: retq 2956entry: 2957 %cmp = icmp ugt <8 x i32> %a, %b 2958 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2959 ret <8 x i32> %sel 2960} 2961 2962define <8 x i32> @test96(<8 x i32> %a, <8 x i32> %b) { 2963; SSE2-LABEL: test96: 2964; SSE2: # %bb.0: # %entry 2965; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 2966; SSE2-NEXT: movdqa %xmm0, %xmm5 2967; SSE2-NEXT: pxor %xmm4, %xmm5 2968; SSE2-NEXT: movdqa %xmm2, %xmm6 2969; SSE2-NEXT: pxor %xmm4, %xmm6 2970; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 2971; SSE2-NEXT: pand %xmm6, %xmm0 2972; SSE2-NEXT: pandn %xmm2, %xmm6 2973; SSE2-NEXT: por %xmm6, %xmm0 2974; SSE2-NEXT: movdqa %xmm1, %xmm2 2975; SSE2-NEXT: pxor %xmm4, %xmm2 2976; SSE2-NEXT: pxor %xmm3, %xmm4 2977; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 2978; SSE2-NEXT: pand %xmm4, %xmm1 2979; SSE2-NEXT: pandn %xmm3, %xmm4 2980; SSE2-NEXT: por %xmm4, %xmm1 2981; SSE2-NEXT: retq 2982; 2983; SSE4-LABEL: test96: 2984; SSE4: # %bb.0: # %entry 2985; SSE4-NEXT: pminud %xmm2, %xmm0 2986; SSE4-NEXT: pminud %xmm3, %xmm1 2987; SSE4-NEXT: retq 2988; 2989; AVX1-LABEL: test96: 2990; AVX1: # %bb.0: # %entry 2991; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2992; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2993; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 2994; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 2995; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2996; AVX1-NEXT: retq 2997; 2998; AVX2-LABEL: test96: 2999; AVX2: # %bb.0: # %entry 3000; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 3001; AVX2-NEXT: retq 3002; 3003; AVX512-LABEL: test96: 3004; AVX512: # %bb.0: # %entry 3005; AVX512-NEXT: vpminud %ymm1, %ymm0, %ymm0 3006; AVX512-NEXT: retq 3007entry: 3008 %cmp = icmp uge <8 x i32> %a, %b 3009 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3010 ret <8 x i32> %sel 3011} 3012 3013; ---------------------------- 3014 3015define <64 x i8> @test97(<64 x i8> %a, <64 x i8> %b) { 3016; SSE2-LABEL: test97: 3017; SSE2: # %bb.0: # %entry 3018; SSE2-NEXT: movdqa %xmm4, %xmm8 3019; SSE2-NEXT: pcmpgtb %xmm0, %xmm8 3020; SSE2-NEXT: pand %xmm8, %xmm0 3021; SSE2-NEXT: pandn %xmm4, %xmm8 3022; SSE2-NEXT: por %xmm8, %xmm0 3023; SSE2-NEXT: movdqa %xmm5, %xmm4 3024; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 3025; SSE2-NEXT: pand %xmm4, %xmm1 3026; SSE2-NEXT: pandn %xmm5, %xmm4 3027; SSE2-NEXT: por %xmm4, %xmm1 3028; SSE2-NEXT: movdqa %xmm6, %xmm4 3029; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 3030; SSE2-NEXT: pand %xmm4, %xmm2 3031; SSE2-NEXT: pandn %xmm6, %xmm4 3032; SSE2-NEXT: por %xmm4, %xmm2 3033; SSE2-NEXT: movdqa %xmm7, %xmm4 3034; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 3035; SSE2-NEXT: pand %xmm4, %xmm3 3036; SSE2-NEXT: pandn %xmm7, %xmm4 3037; SSE2-NEXT: por %xmm4, %xmm3 3038; SSE2-NEXT: retq 3039; 3040; SSE4-LABEL: test97: 3041; SSE4: # %bb.0: # %entry 3042; SSE4-NEXT: pminsb %xmm4, %xmm0 3043; SSE4-NEXT: pminsb %xmm5, %xmm1 3044; SSE4-NEXT: pminsb %xmm6, %xmm2 3045; SSE4-NEXT: pminsb %xmm7, %xmm3 3046; SSE4-NEXT: retq 3047; 3048; AVX1-LABEL: test97: 3049; AVX1: # %bb.0: # %entry 3050; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3051; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3052; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 3053; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 3054; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3055; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3056; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3057; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 3058; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 3059; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3060; AVX1-NEXT: retq 3061; 3062; AVX2-LABEL: test97: 3063; AVX2: # %bb.0: # %entry 3064; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 3065; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 3066; AVX2-NEXT: retq 3067; 3068; AVX512F-LABEL: test97: 3069; AVX512F: # %bb.0: # %entry 3070; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3071; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3072; AVX512F-NEXT: vpminsb %ymm2, %ymm3, %ymm2 3073; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 3074; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3075; AVX512F-NEXT: retq 3076; 3077; AVX512BW-LABEL: test97: 3078; AVX512BW: # %bb.0: # %entry 3079; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 3080; AVX512BW-NEXT: retq 3081entry: 3082 %cmp = icmp slt <64 x i8> %a, %b 3083 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3084 ret <64 x i8> %sel 3085} 3086 3087define <64 x i8> @test98(<64 x i8> %a, <64 x i8> %b) { 3088; SSE2-LABEL: test98: 3089; SSE2: # %bb.0: # %entry 3090; SSE2-NEXT: movdqa %xmm4, %xmm8 3091; SSE2-NEXT: pcmpgtb %xmm0, %xmm8 3092; SSE2-NEXT: pand %xmm8, %xmm0 3093; SSE2-NEXT: pandn %xmm4, %xmm8 3094; SSE2-NEXT: por %xmm8, %xmm0 3095; SSE2-NEXT: movdqa %xmm5, %xmm4 3096; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 3097; SSE2-NEXT: pand %xmm4, %xmm1 3098; SSE2-NEXT: pandn %xmm5, %xmm4 3099; SSE2-NEXT: por %xmm4, %xmm1 3100; SSE2-NEXT: movdqa %xmm6, %xmm4 3101; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 3102; SSE2-NEXT: pand %xmm4, %xmm2 3103; SSE2-NEXT: pandn %xmm6, %xmm4 3104; SSE2-NEXT: por %xmm4, %xmm2 3105; SSE2-NEXT: movdqa %xmm7, %xmm4 3106; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 3107; SSE2-NEXT: pand %xmm4, %xmm3 3108; SSE2-NEXT: pandn %xmm7, %xmm4 3109; SSE2-NEXT: por %xmm4, %xmm3 3110; SSE2-NEXT: retq 3111; 3112; SSE4-LABEL: test98: 3113; SSE4: # %bb.0: # %entry 3114; SSE4-NEXT: pminsb %xmm4, %xmm0 3115; SSE4-NEXT: pminsb %xmm5, %xmm1 3116; SSE4-NEXT: pminsb %xmm6, %xmm2 3117; SSE4-NEXT: pminsb %xmm7, %xmm3 3118; SSE4-NEXT: retq 3119; 3120; AVX1-LABEL: test98: 3121; AVX1: # %bb.0: # %entry 3122; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3123; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3124; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 3125; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 3126; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3127; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3128; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3129; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 3130; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 3131; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3132; AVX1-NEXT: retq 3133; 3134; AVX2-LABEL: test98: 3135; AVX2: # %bb.0: # %entry 3136; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 3137; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 3138; AVX2-NEXT: retq 3139; 3140; AVX512F-LABEL: test98: 3141; AVX512F: # %bb.0: # %entry 3142; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3143; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3144; AVX512F-NEXT: vpminsb %ymm2, %ymm3, %ymm2 3145; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 3146; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3147; AVX512F-NEXT: retq 3148; 3149; AVX512BW-LABEL: test98: 3150; AVX512BW: # %bb.0: # %entry 3151; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 3152; AVX512BW-NEXT: retq 3153entry: 3154 %cmp = icmp sle <64 x i8> %a, %b 3155 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3156 ret <64 x i8> %sel 3157} 3158 3159define <64 x i8> @test99(<64 x i8> %a, <64 x i8> %b) { 3160; SSE2-LABEL: test99: 3161; SSE2: # %bb.0: # %entry 3162; SSE2-NEXT: movdqa %xmm0, %xmm8 3163; SSE2-NEXT: pcmpgtb %xmm4, %xmm8 3164; SSE2-NEXT: pand %xmm8, %xmm0 3165; SSE2-NEXT: pandn %xmm4, %xmm8 3166; SSE2-NEXT: por %xmm8, %xmm0 3167; SSE2-NEXT: movdqa %xmm1, %xmm4 3168; SSE2-NEXT: pcmpgtb %xmm5, %xmm4 3169; SSE2-NEXT: pand %xmm4, %xmm1 3170; SSE2-NEXT: pandn %xmm5, %xmm4 3171; SSE2-NEXT: por %xmm4, %xmm1 3172; SSE2-NEXT: movdqa %xmm2, %xmm4 3173; SSE2-NEXT: pcmpgtb %xmm6, %xmm4 3174; SSE2-NEXT: pand %xmm4, %xmm2 3175; SSE2-NEXT: pandn %xmm6, %xmm4 3176; SSE2-NEXT: por %xmm4, %xmm2 3177; SSE2-NEXT: movdqa %xmm3, %xmm4 3178; SSE2-NEXT: pcmpgtb %xmm7, %xmm4 3179; SSE2-NEXT: pand %xmm4, %xmm3 3180; SSE2-NEXT: pandn %xmm7, %xmm4 3181; SSE2-NEXT: por %xmm4, %xmm3 3182; SSE2-NEXT: retq 3183; 3184; SSE4-LABEL: test99: 3185; SSE4: # %bb.0: # %entry 3186; SSE4-NEXT: pmaxsb %xmm4, %xmm0 3187; SSE4-NEXT: pmaxsb %xmm5, %xmm1 3188; SSE4-NEXT: pmaxsb %xmm6, %xmm2 3189; SSE4-NEXT: pmaxsb %xmm7, %xmm3 3190; SSE4-NEXT: retq 3191; 3192; AVX1-LABEL: test99: 3193; AVX1: # %bb.0: # %entry 3194; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3195; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3196; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 3197; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 3198; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3199; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3200; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3201; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 3202; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 3203; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3204; AVX1-NEXT: retq 3205; 3206; AVX2-LABEL: test99: 3207; AVX2: # %bb.0: # %entry 3208; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 3209; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 3210; AVX2-NEXT: retq 3211; 3212; AVX512F-LABEL: test99: 3213; AVX512F: # %bb.0: # %entry 3214; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3215; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3216; AVX512F-NEXT: vpmaxsb %ymm2, %ymm3, %ymm2 3217; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 3218; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3219; AVX512F-NEXT: retq 3220; 3221; AVX512BW-LABEL: test99: 3222; AVX512BW: # %bb.0: # %entry 3223; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 3224; AVX512BW-NEXT: retq 3225entry: 3226 %cmp = icmp sgt <64 x i8> %a, %b 3227 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3228 ret <64 x i8> %sel 3229} 3230 3231define <64 x i8> @test100(<64 x i8> %a, <64 x i8> %b) { 3232; SSE2-LABEL: test100: 3233; SSE2: # %bb.0: # %entry 3234; SSE2-NEXT: movdqa %xmm0, %xmm8 3235; SSE2-NEXT: pcmpgtb %xmm4, %xmm8 3236; SSE2-NEXT: pand %xmm8, %xmm0 3237; SSE2-NEXT: pandn %xmm4, %xmm8 3238; SSE2-NEXT: por %xmm8, %xmm0 3239; SSE2-NEXT: movdqa %xmm1, %xmm4 3240; SSE2-NEXT: pcmpgtb %xmm5, %xmm4 3241; SSE2-NEXT: pand %xmm4, %xmm1 3242; SSE2-NEXT: pandn %xmm5, %xmm4 3243; SSE2-NEXT: por %xmm4, %xmm1 3244; SSE2-NEXT: movdqa %xmm2, %xmm4 3245; SSE2-NEXT: pcmpgtb %xmm6, %xmm4 3246; SSE2-NEXT: pand %xmm4, %xmm2 3247; SSE2-NEXT: pandn %xmm6, %xmm4 3248; SSE2-NEXT: por %xmm4, %xmm2 3249; SSE2-NEXT: movdqa %xmm3, %xmm4 3250; SSE2-NEXT: pcmpgtb %xmm7, %xmm4 3251; SSE2-NEXT: pand %xmm4, %xmm3 3252; SSE2-NEXT: pandn %xmm7, %xmm4 3253; SSE2-NEXT: por %xmm4, %xmm3 3254; SSE2-NEXT: retq 3255; 3256; SSE4-LABEL: test100: 3257; SSE4: # %bb.0: # %entry 3258; SSE4-NEXT: pmaxsb %xmm4, %xmm0 3259; SSE4-NEXT: pmaxsb %xmm5, %xmm1 3260; SSE4-NEXT: pmaxsb %xmm6, %xmm2 3261; SSE4-NEXT: pmaxsb %xmm7, %xmm3 3262; SSE4-NEXT: retq 3263; 3264; AVX1-LABEL: test100: 3265; AVX1: # %bb.0: # %entry 3266; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3267; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3268; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 3269; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 3270; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3271; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3272; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3273; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 3274; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 3275; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3276; AVX1-NEXT: retq 3277; 3278; AVX2-LABEL: test100: 3279; AVX2: # %bb.0: # %entry 3280; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 3281; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 3282; AVX2-NEXT: retq 3283; 3284; AVX512F-LABEL: test100: 3285; AVX512F: # %bb.0: # %entry 3286; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3287; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3288; AVX512F-NEXT: vpmaxsb %ymm2, %ymm3, %ymm2 3289; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 3290; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3291; AVX512F-NEXT: retq 3292; 3293; AVX512BW-LABEL: test100: 3294; AVX512BW: # %bb.0: # %entry 3295; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 3296; AVX512BW-NEXT: retq 3297entry: 3298 %cmp = icmp sge <64 x i8> %a, %b 3299 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3300 ret <64 x i8> %sel 3301} 3302 3303define <64 x i8> @test101(<64 x i8> %a, <64 x i8> %b) { 3304; SSE-LABEL: test101: 3305; SSE: # %bb.0: # %entry 3306; SSE-NEXT: pminub %xmm4, %xmm0 3307; SSE-NEXT: pminub %xmm5, %xmm1 3308; SSE-NEXT: pminub %xmm6, %xmm2 3309; SSE-NEXT: pminub %xmm7, %xmm3 3310; SSE-NEXT: retq 3311; 3312; AVX1-LABEL: test101: 3313; AVX1: # %bb.0: # %entry 3314; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3315; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3316; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 3317; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 3318; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3319; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3320; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3321; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 3322; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 3323; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3324; AVX1-NEXT: retq 3325; 3326; AVX2-LABEL: test101: 3327; AVX2: # %bb.0: # %entry 3328; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 3329; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 3330; AVX2-NEXT: retq 3331; 3332; AVX512F-LABEL: test101: 3333; AVX512F: # %bb.0: # %entry 3334; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3335; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3336; AVX512F-NEXT: vpminub %ymm2, %ymm3, %ymm2 3337; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 3338; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3339; AVX512F-NEXT: retq 3340; 3341; AVX512BW-LABEL: test101: 3342; AVX512BW: # %bb.0: # %entry 3343; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 3344; AVX512BW-NEXT: retq 3345entry: 3346 %cmp = icmp ult <64 x i8> %a, %b 3347 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3348 ret <64 x i8> %sel 3349} 3350 3351define <64 x i8> @test102(<64 x i8> %a, <64 x i8> %b) { 3352; SSE-LABEL: test102: 3353; SSE: # %bb.0: # %entry 3354; SSE-NEXT: pminub %xmm4, %xmm0 3355; SSE-NEXT: pminub %xmm5, %xmm1 3356; SSE-NEXT: pminub %xmm6, %xmm2 3357; SSE-NEXT: pminub %xmm7, %xmm3 3358; SSE-NEXT: retq 3359; 3360; AVX1-LABEL: test102: 3361; AVX1: # %bb.0: # %entry 3362; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3363; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3364; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 3365; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 3366; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3367; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3368; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3369; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 3370; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 3371; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3372; AVX1-NEXT: retq 3373; 3374; AVX2-LABEL: test102: 3375; AVX2: # %bb.0: # %entry 3376; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 3377; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 3378; AVX2-NEXT: retq 3379; 3380; AVX512F-LABEL: test102: 3381; AVX512F: # %bb.0: # %entry 3382; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3383; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3384; AVX512F-NEXT: vpminub %ymm2, %ymm3, %ymm2 3385; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 3386; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3387; AVX512F-NEXT: retq 3388; 3389; AVX512BW-LABEL: test102: 3390; AVX512BW: # %bb.0: # %entry 3391; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 3392; AVX512BW-NEXT: retq 3393entry: 3394 %cmp = icmp ule <64 x i8> %a, %b 3395 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3396 ret <64 x i8> %sel 3397} 3398 3399define <64 x i8> @test103(<64 x i8> %a, <64 x i8> %b) { 3400; SSE-LABEL: test103: 3401; SSE: # %bb.0: # %entry 3402; SSE-NEXT: pmaxub %xmm4, %xmm0 3403; SSE-NEXT: pmaxub %xmm5, %xmm1 3404; SSE-NEXT: pmaxub %xmm6, %xmm2 3405; SSE-NEXT: pmaxub %xmm7, %xmm3 3406; SSE-NEXT: retq 3407; 3408; AVX1-LABEL: test103: 3409; AVX1: # %bb.0: # %entry 3410; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3411; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3412; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 3413; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 3414; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3415; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3416; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3417; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 3418; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 3419; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3420; AVX1-NEXT: retq 3421; 3422; AVX2-LABEL: test103: 3423; AVX2: # %bb.0: # %entry 3424; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 3425; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 3426; AVX2-NEXT: retq 3427; 3428; AVX512F-LABEL: test103: 3429; AVX512F: # %bb.0: # %entry 3430; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3431; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3432; AVX512F-NEXT: vpmaxub %ymm2, %ymm3, %ymm2 3433; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 3434; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3435; AVX512F-NEXT: retq 3436; 3437; AVX512BW-LABEL: test103: 3438; AVX512BW: # %bb.0: # %entry 3439; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 3440; AVX512BW-NEXT: retq 3441entry: 3442 %cmp = icmp ugt <64 x i8> %a, %b 3443 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3444 ret <64 x i8> %sel 3445} 3446 3447define <64 x i8> @test104(<64 x i8> %a, <64 x i8> %b) { 3448; SSE-LABEL: test104: 3449; SSE: # %bb.0: # %entry 3450; SSE-NEXT: pmaxub %xmm4, %xmm0 3451; SSE-NEXT: pmaxub %xmm5, %xmm1 3452; SSE-NEXT: pmaxub %xmm6, %xmm2 3453; SSE-NEXT: pmaxub %xmm7, %xmm3 3454; SSE-NEXT: retq 3455; 3456; AVX1-LABEL: test104: 3457; AVX1: # %bb.0: # %entry 3458; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3459; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3460; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 3461; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 3462; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3463; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3464; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3465; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 3466; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 3467; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3468; AVX1-NEXT: retq 3469; 3470; AVX2-LABEL: test104: 3471; AVX2: # %bb.0: # %entry 3472; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 3473; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 3474; AVX2-NEXT: retq 3475; 3476; AVX512F-LABEL: test104: 3477; AVX512F: # %bb.0: # %entry 3478; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3479; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3480; AVX512F-NEXT: vpmaxub %ymm2, %ymm3, %ymm2 3481; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 3482; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3483; AVX512F-NEXT: retq 3484; 3485; AVX512BW-LABEL: test104: 3486; AVX512BW: # %bb.0: # %entry 3487; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 3488; AVX512BW-NEXT: retq 3489entry: 3490 %cmp = icmp uge <64 x i8> %a, %b 3491 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3492 ret <64 x i8> %sel 3493} 3494 3495define <32 x i16> @test105(<32 x i16> %a, <32 x i16> %b) { 3496; SSE-LABEL: test105: 3497; SSE: # %bb.0: # %entry 3498; SSE-NEXT: pminsw %xmm4, %xmm0 3499; SSE-NEXT: pminsw %xmm5, %xmm1 3500; SSE-NEXT: pminsw %xmm6, %xmm2 3501; SSE-NEXT: pminsw %xmm7, %xmm3 3502; SSE-NEXT: retq 3503; 3504; AVX1-LABEL: test105: 3505; AVX1: # %bb.0: # %entry 3506; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3507; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3508; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 3509; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 3510; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3511; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3512; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3513; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 3514; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 3515; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3516; AVX1-NEXT: retq 3517; 3518; AVX2-LABEL: test105: 3519; AVX2: # %bb.0: # %entry 3520; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 3521; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 3522; AVX2-NEXT: retq 3523; 3524; AVX512F-LABEL: test105: 3525; AVX512F: # %bb.0: # %entry 3526; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3527; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3528; AVX512F-NEXT: vpminsw %ymm2, %ymm3, %ymm2 3529; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 3530; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3531; AVX512F-NEXT: retq 3532; 3533; AVX512BW-LABEL: test105: 3534; AVX512BW: # %bb.0: # %entry 3535; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 3536; AVX512BW-NEXT: retq 3537entry: 3538 %cmp = icmp slt <32 x i16> %a, %b 3539 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3540 ret <32 x i16> %sel 3541} 3542 3543define <32 x i16> @test106(<32 x i16> %a, <32 x i16> %b) { 3544; SSE-LABEL: test106: 3545; SSE: # %bb.0: # %entry 3546; SSE-NEXT: pminsw %xmm4, %xmm0 3547; SSE-NEXT: pminsw %xmm5, %xmm1 3548; SSE-NEXT: pminsw %xmm6, %xmm2 3549; SSE-NEXT: pminsw %xmm7, %xmm3 3550; SSE-NEXT: retq 3551; 3552; AVX1-LABEL: test106: 3553; AVX1: # %bb.0: # %entry 3554; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3555; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3556; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 3557; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 3558; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3559; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3560; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3561; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 3562; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 3563; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3564; AVX1-NEXT: retq 3565; 3566; AVX2-LABEL: test106: 3567; AVX2: # %bb.0: # %entry 3568; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 3569; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 3570; AVX2-NEXT: retq 3571; 3572; AVX512F-LABEL: test106: 3573; AVX512F: # %bb.0: # %entry 3574; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3575; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3576; AVX512F-NEXT: vpminsw %ymm2, %ymm3, %ymm2 3577; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 3578; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3579; AVX512F-NEXT: retq 3580; 3581; AVX512BW-LABEL: test106: 3582; AVX512BW: # %bb.0: # %entry 3583; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 3584; AVX512BW-NEXT: retq 3585entry: 3586 %cmp = icmp sle <32 x i16> %a, %b 3587 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3588 ret <32 x i16> %sel 3589} 3590 3591define <32 x i16> @test107(<32 x i16> %a, <32 x i16> %b) { 3592; SSE-LABEL: test107: 3593; SSE: # %bb.0: # %entry 3594; SSE-NEXT: pmaxsw %xmm4, %xmm0 3595; SSE-NEXT: pmaxsw %xmm5, %xmm1 3596; SSE-NEXT: pmaxsw %xmm6, %xmm2 3597; SSE-NEXT: pmaxsw %xmm7, %xmm3 3598; SSE-NEXT: retq 3599; 3600; AVX1-LABEL: test107: 3601; AVX1: # %bb.0: # %entry 3602; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3603; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3604; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 3605; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 3606; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3607; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3608; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3609; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 3610; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 3611; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3612; AVX1-NEXT: retq 3613; 3614; AVX2-LABEL: test107: 3615; AVX2: # %bb.0: # %entry 3616; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 3617; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 3618; AVX2-NEXT: retq 3619; 3620; AVX512F-LABEL: test107: 3621; AVX512F: # %bb.0: # %entry 3622; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3623; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3624; AVX512F-NEXT: vpmaxsw %ymm2, %ymm3, %ymm2 3625; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 3626; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3627; AVX512F-NEXT: retq 3628; 3629; AVX512BW-LABEL: test107: 3630; AVX512BW: # %bb.0: # %entry 3631; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 3632; AVX512BW-NEXT: retq 3633entry: 3634 %cmp = icmp sgt <32 x i16> %a, %b 3635 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3636 ret <32 x i16> %sel 3637} 3638 3639define <32 x i16> @test108(<32 x i16> %a, <32 x i16> %b) { 3640; SSE-LABEL: test108: 3641; SSE: # %bb.0: # %entry 3642; SSE-NEXT: pmaxsw %xmm4, %xmm0 3643; SSE-NEXT: pmaxsw %xmm5, %xmm1 3644; SSE-NEXT: pmaxsw %xmm6, %xmm2 3645; SSE-NEXT: pmaxsw %xmm7, %xmm3 3646; SSE-NEXT: retq 3647; 3648; AVX1-LABEL: test108: 3649; AVX1: # %bb.0: # %entry 3650; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3651; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3652; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 3653; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 3654; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3655; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3656; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3657; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 3658; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 3659; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3660; AVX1-NEXT: retq 3661; 3662; AVX2-LABEL: test108: 3663; AVX2: # %bb.0: # %entry 3664; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 3665; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 3666; AVX2-NEXT: retq 3667; 3668; AVX512F-LABEL: test108: 3669; AVX512F: # %bb.0: # %entry 3670; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3671; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3672; AVX512F-NEXT: vpmaxsw %ymm2, %ymm3, %ymm2 3673; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 3674; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3675; AVX512F-NEXT: retq 3676; 3677; AVX512BW-LABEL: test108: 3678; AVX512BW: # %bb.0: # %entry 3679; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 3680; AVX512BW-NEXT: retq 3681entry: 3682 %cmp = icmp sge <32 x i16> %a, %b 3683 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3684 ret <32 x i16> %sel 3685} 3686 3687define <32 x i16> @test109(<32 x i16> %a, <32 x i16> %b) { 3688; SSE2-LABEL: test109: 3689; SSE2: # %bb.0: # %entry 3690; SSE2-NEXT: movdqa %xmm0, %xmm8 3691; SSE2-NEXT: psubusw %xmm4, %xmm8 3692; SSE2-NEXT: psubw %xmm8, %xmm0 3693; SSE2-NEXT: movdqa %xmm1, %xmm4 3694; SSE2-NEXT: psubusw %xmm5, %xmm4 3695; SSE2-NEXT: psubw %xmm4, %xmm1 3696; SSE2-NEXT: movdqa %xmm2, %xmm4 3697; SSE2-NEXT: psubusw %xmm6, %xmm4 3698; SSE2-NEXT: psubw %xmm4, %xmm2 3699; SSE2-NEXT: movdqa %xmm3, %xmm4 3700; SSE2-NEXT: psubusw %xmm7, %xmm4 3701; SSE2-NEXT: psubw %xmm4, %xmm3 3702; SSE2-NEXT: retq 3703; 3704; SSE4-LABEL: test109: 3705; SSE4: # %bb.0: # %entry 3706; SSE4-NEXT: pminuw %xmm4, %xmm0 3707; SSE4-NEXT: pminuw %xmm5, %xmm1 3708; SSE4-NEXT: pminuw %xmm6, %xmm2 3709; SSE4-NEXT: pminuw %xmm7, %xmm3 3710; SSE4-NEXT: retq 3711; 3712; AVX1-LABEL: test109: 3713; AVX1: # %bb.0: # %entry 3714; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3715; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3716; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 3717; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 3718; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3719; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3720; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3721; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 3722; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 3723; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3724; AVX1-NEXT: retq 3725; 3726; AVX2-LABEL: test109: 3727; AVX2: # %bb.0: # %entry 3728; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 3729; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 3730; AVX2-NEXT: retq 3731; 3732; AVX512F-LABEL: test109: 3733; AVX512F: # %bb.0: # %entry 3734; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3735; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3736; AVX512F-NEXT: vpminuw %ymm2, %ymm3, %ymm2 3737; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 3738; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3739; AVX512F-NEXT: retq 3740; 3741; AVX512BW-LABEL: test109: 3742; AVX512BW: # %bb.0: # %entry 3743; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 3744; AVX512BW-NEXT: retq 3745entry: 3746 %cmp = icmp ult <32 x i16> %a, %b 3747 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3748 ret <32 x i16> %sel 3749} 3750 3751define <32 x i16> @test110(<32 x i16> %a, <32 x i16> %b) { 3752; SSE2-LABEL: test110: 3753; SSE2: # %bb.0: # %entry 3754; SSE2-NEXT: movdqa %xmm0, %xmm8 3755; SSE2-NEXT: psubusw %xmm4, %xmm8 3756; SSE2-NEXT: psubw %xmm8, %xmm0 3757; SSE2-NEXT: movdqa %xmm1, %xmm4 3758; SSE2-NEXT: psubusw %xmm5, %xmm4 3759; SSE2-NEXT: psubw %xmm4, %xmm1 3760; SSE2-NEXT: movdqa %xmm2, %xmm4 3761; SSE2-NEXT: psubusw %xmm6, %xmm4 3762; SSE2-NEXT: psubw %xmm4, %xmm2 3763; SSE2-NEXT: movdqa %xmm3, %xmm4 3764; SSE2-NEXT: psubusw %xmm7, %xmm4 3765; SSE2-NEXT: psubw %xmm4, %xmm3 3766; SSE2-NEXT: retq 3767; 3768; SSE4-LABEL: test110: 3769; SSE4: # %bb.0: # %entry 3770; SSE4-NEXT: pminuw %xmm4, %xmm0 3771; SSE4-NEXT: pminuw %xmm5, %xmm1 3772; SSE4-NEXT: pminuw %xmm6, %xmm2 3773; SSE4-NEXT: pminuw %xmm7, %xmm3 3774; SSE4-NEXT: retq 3775; 3776; AVX1-LABEL: test110: 3777; AVX1: # %bb.0: # %entry 3778; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3779; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3780; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 3781; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 3782; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3783; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3784; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3785; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 3786; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 3787; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3788; AVX1-NEXT: retq 3789; 3790; AVX2-LABEL: test110: 3791; AVX2: # %bb.0: # %entry 3792; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 3793; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 3794; AVX2-NEXT: retq 3795; 3796; AVX512F-LABEL: test110: 3797; AVX512F: # %bb.0: # %entry 3798; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3799; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3800; AVX512F-NEXT: vpminuw %ymm2, %ymm3, %ymm2 3801; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 3802; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3803; AVX512F-NEXT: retq 3804; 3805; AVX512BW-LABEL: test110: 3806; AVX512BW: # %bb.0: # %entry 3807; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 3808; AVX512BW-NEXT: retq 3809entry: 3810 %cmp = icmp ule <32 x i16> %a, %b 3811 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3812 ret <32 x i16> %sel 3813} 3814 3815define <32 x i16> @test111(<32 x i16> %a, <32 x i16> %b) { 3816; SSE2-LABEL: test111: 3817; SSE2: # %bb.0: # %entry 3818; SSE2-NEXT: psubusw %xmm0, %xmm4 3819; SSE2-NEXT: paddw %xmm4, %xmm0 3820; SSE2-NEXT: psubusw %xmm1, %xmm5 3821; SSE2-NEXT: paddw %xmm5, %xmm1 3822; SSE2-NEXT: psubusw %xmm2, %xmm6 3823; SSE2-NEXT: paddw %xmm6, %xmm2 3824; SSE2-NEXT: psubusw %xmm3, %xmm7 3825; SSE2-NEXT: paddw %xmm7, %xmm3 3826; SSE2-NEXT: retq 3827; 3828; SSE4-LABEL: test111: 3829; SSE4: # %bb.0: # %entry 3830; SSE4-NEXT: pmaxuw %xmm4, %xmm0 3831; SSE4-NEXT: pmaxuw %xmm5, %xmm1 3832; SSE4-NEXT: pmaxuw %xmm6, %xmm2 3833; SSE4-NEXT: pmaxuw %xmm7, %xmm3 3834; SSE4-NEXT: retq 3835; 3836; AVX1-LABEL: test111: 3837; AVX1: # %bb.0: # %entry 3838; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3839; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3840; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 3841; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 3842; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3843; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3844; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3845; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 3846; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 3847; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3848; AVX1-NEXT: retq 3849; 3850; AVX2-LABEL: test111: 3851; AVX2: # %bb.0: # %entry 3852; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 3853; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 3854; AVX2-NEXT: retq 3855; 3856; AVX512F-LABEL: test111: 3857; AVX512F: # %bb.0: # %entry 3858; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3859; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3860; AVX512F-NEXT: vpmaxuw %ymm2, %ymm3, %ymm2 3861; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 3862; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3863; AVX512F-NEXT: retq 3864; 3865; AVX512BW-LABEL: test111: 3866; AVX512BW: # %bb.0: # %entry 3867; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 3868; AVX512BW-NEXT: retq 3869entry: 3870 %cmp = icmp ugt <32 x i16> %a, %b 3871 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3872 ret <32 x i16> %sel 3873} 3874 3875define <32 x i16> @test112(<32 x i16> %a, <32 x i16> %b) { 3876; SSE2-LABEL: test112: 3877; SSE2: # %bb.0: # %entry 3878; SSE2-NEXT: psubusw %xmm0, %xmm4 3879; SSE2-NEXT: paddw %xmm4, %xmm0 3880; SSE2-NEXT: psubusw %xmm1, %xmm5 3881; SSE2-NEXT: paddw %xmm5, %xmm1 3882; SSE2-NEXT: psubusw %xmm2, %xmm6 3883; SSE2-NEXT: paddw %xmm6, %xmm2 3884; SSE2-NEXT: psubusw %xmm3, %xmm7 3885; SSE2-NEXT: paddw %xmm7, %xmm3 3886; SSE2-NEXT: retq 3887; 3888; SSE4-LABEL: test112: 3889; SSE4: # %bb.0: # %entry 3890; SSE4-NEXT: pmaxuw %xmm4, %xmm0 3891; SSE4-NEXT: pmaxuw %xmm5, %xmm1 3892; SSE4-NEXT: pmaxuw %xmm6, %xmm2 3893; SSE4-NEXT: pmaxuw %xmm7, %xmm3 3894; SSE4-NEXT: retq 3895; 3896; AVX1-LABEL: test112: 3897; AVX1: # %bb.0: # %entry 3898; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3899; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3900; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 3901; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 3902; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3903; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3904; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3905; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 3906; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 3907; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3908; AVX1-NEXT: retq 3909; 3910; AVX2-LABEL: test112: 3911; AVX2: # %bb.0: # %entry 3912; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 3913; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 3914; AVX2-NEXT: retq 3915; 3916; AVX512F-LABEL: test112: 3917; AVX512F: # %bb.0: # %entry 3918; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3919; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3920; AVX512F-NEXT: vpmaxuw %ymm2, %ymm3, %ymm2 3921; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 3922; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3923; AVX512F-NEXT: retq 3924; 3925; AVX512BW-LABEL: test112: 3926; AVX512BW: # %bb.0: # %entry 3927; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 3928; AVX512BW-NEXT: retq 3929entry: 3930 %cmp = icmp uge <32 x i16> %a, %b 3931 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3932 ret <32 x i16> %sel 3933} 3934 3935define <16 x i32> @test113(<16 x i32> %a, <16 x i32> %b) { 3936; SSE2-LABEL: test113: 3937; SSE2: # %bb.0: # %entry 3938; SSE2-NEXT: movdqa %xmm4, %xmm8 3939; SSE2-NEXT: pcmpgtd %xmm0, %xmm8 3940; SSE2-NEXT: pand %xmm8, %xmm0 3941; SSE2-NEXT: pandn %xmm4, %xmm8 3942; SSE2-NEXT: por %xmm8, %xmm0 3943; SSE2-NEXT: movdqa %xmm5, %xmm4 3944; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 3945; SSE2-NEXT: pand %xmm4, %xmm1 3946; SSE2-NEXT: pandn %xmm5, %xmm4 3947; SSE2-NEXT: por %xmm4, %xmm1 3948; SSE2-NEXT: movdqa %xmm6, %xmm4 3949; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 3950; SSE2-NEXT: pand %xmm4, %xmm2 3951; SSE2-NEXT: pandn %xmm6, %xmm4 3952; SSE2-NEXT: por %xmm4, %xmm2 3953; SSE2-NEXT: movdqa %xmm7, %xmm4 3954; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 3955; SSE2-NEXT: pand %xmm4, %xmm3 3956; SSE2-NEXT: pandn %xmm7, %xmm4 3957; SSE2-NEXT: por %xmm4, %xmm3 3958; SSE2-NEXT: retq 3959; 3960; SSE4-LABEL: test113: 3961; SSE4: # %bb.0: # %entry 3962; SSE4-NEXT: pminsd %xmm4, %xmm0 3963; SSE4-NEXT: pminsd %xmm5, %xmm1 3964; SSE4-NEXT: pminsd %xmm6, %xmm2 3965; SSE4-NEXT: pminsd %xmm7, %xmm3 3966; SSE4-NEXT: retq 3967; 3968; AVX1-LABEL: test113: 3969; AVX1: # %bb.0: # %entry 3970; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3971; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3972; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 3973; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 3974; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3975; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3976; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3977; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 3978; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 3979; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3980; AVX1-NEXT: retq 3981; 3982; AVX2-LABEL: test113: 3983; AVX2: # %bb.0: # %entry 3984; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 3985; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 3986; AVX2-NEXT: retq 3987; 3988; AVX512-LABEL: test113: 3989; AVX512: # %bb.0: # %entry 3990; AVX512-NEXT: vpminsd %zmm1, %zmm0, %zmm0 3991; AVX512-NEXT: retq 3992entry: 3993 %cmp = icmp slt <16 x i32> %a, %b 3994 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 3995 ret <16 x i32> %sel 3996} 3997 3998define <16 x i32> @test114(<16 x i32> %a, <16 x i32> %b) { 3999; SSE2-LABEL: test114: 4000; SSE2: # %bb.0: # %entry 4001; SSE2-NEXT: movdqa %xmm4, %xmm8 4002; SSE2-NEXT: pcmpgtd %xmm0, %xmm8 4003; SSE2-NEXT: pand %xmm8, %xmm0 4004; SSE2-NEXT: pandn %xmm4, %xmm8 4005; SSE2-NEXT: por %xmm8, %xmm0 4006; SSE2-NEXT: movdqa %xmm5, %xmm4 4007; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 4008; SSE2-NEXT: pand %xmm4, %xmm1 4009; SSE2-NEXT: pandn %xmm5, %xmm4 4010; SSE2-NEXT: por %xmm4, %xmm1 4011; SSE2-NEXT: movdqa %xmm6, %xmm4 4012; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 4013; SSE2-NEXT: pand %xmm4, %xmm2 4014; SSE2-NEXT: pandn %xmm6, %xmm4 4015; SSE2-NEXT: por %xmm4, %xmm2 4016; SSE2-NEXT: movdqa %xmm7, %xmm4 4017; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 4018; SSE2-NEXT: pand %xmm4, %xmm3 4019; SSE2-NEXT: pandn %xmm7, %xmm4 4020; SSE2-NEXT: por %xmm4, %xmm3 4021; SSE2-NEXT: retq 4022; 4023; SSE4-LABEL: test114: 4024; SSE4: # %bb.0: # %entry 4025; SSE4-NEXT: pminsd %xmm4, %xmm0 4026; SSE4-NEXT: pminsd %xmm5, %xmm1 4027; SSE4-NEXT: pminsd %xmm6, %xmm2 4028; SSE4-NEXT: pminsd %xmm7, %xmm3 4029; SSE4-NEXT: retq 4030; 4031; AVX1-LABEL: test114: 4032; AVX1: # %bb.0: # %entry 4033; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4034; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4035; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 4036; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 4037; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4038; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4039; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4040; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 4041; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 4042; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4043; AVX1-NEXT: retq 4044; 4045; AVX2-LABEL: test114: 4046; AVX2: # %bb.0: # %entry 4047; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 4048; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 4049; AVX2-NEXT: retq 4050; 4051; AVX512-LABEL: test114: 4052; AVX512: # %bb.0: # %entry 4053; AVX512-NEXT: vpminsd %zmm1, %zmm0, %zmm0 4054; AVX512-NEXT: retq 4055entry: 4056 %cmp = icmp sle <16 x i32> %a, %b 4057 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4058 ret <16 x i32> %sel 4059} 4060 4061define <16 x i32> @test115(<16 x i32> %a, <16 x i32> %b) { 4062; SSE2-LABEL: test115: 4063; SSE2: # %bb.0: # %entry 4064; SSE2-NEXT: movdqa %xmm0, %xmm8 4065; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 4066; SSE2-NEXT: pand %xmm8, %xmm0 4067; SSE2-NEXT: pandn %xmm4, %xmm8 4068; SSE2-NEXT: por %xmm8, %xmm0 4069; SSE2-NEXT: movdqa %xmm1, %xmm4 4070; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 4071; SSE2-NEXT: pand %xmm4, %xmm1 4072; SSE2-NEXT: pandn %xmm5, %xmm4 4073; SSE2-NEXT: por %xmm4, %xmm1 4074; SSE2-NEXT: movdqa %xmm2, %xmm4 4075; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 4076; SSE2-NEXT: pand %xmm4, %xmm2 4077; SSE2-NEXT: pandn %xmm6, %xmm4 4078; SSE2-NEXT: por %xmm4, %xmm2 4079; SSE2-NEXT: movdqa %xmm3, %xmm4 4080; SSE2-NEXT: pcmpgtd %xmm7, %xmm4 4081; SSE2-NEXT: pand %xmm4, %xmm3 4082; SSE2-NEXT: pandn %xmm7, %xmm4 4083; SSE2-NEXT: por %xmm4, %xmm3 4084; SSE2-NEXT: retq 4085; 4086; SSE4-LABEL: test115: 4087; SSE4: # %bb.0: # %entry 4088; SSE4-NEXT: pmaxsd %xmm4, %xmm0 4089; SSE4-NEXT: pmaxsd %xmm5, %xmm1 4090; SSE4-NEXT: pmaxsd %xmm6, %xmm2 4091; SSE4-NEXT: pmaxsd %xmm7, %xmm3 4092; SSE4-NEXT: retq 4093; 4094; AVX1-LABEL: test115: 4095; AVX1: # %bb.0: # %entry 4096; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4097; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4098; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 4099; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 4100; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4101; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4102; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4103; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 4104; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 4105; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4106; AVX1-NEXT: retq 4107; 4108; AVX2-LABEL: test115: 4109; AVX2: # %bb.0: # %entry 4110; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 4111; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 4112; AVX2-NEXT: retq 4113; 4114; AVX512-LABEL: test115: 4115; AVX512: # %bb.0: # %entry 4116; AVX512-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 4117; AVX512-NEXT: retq 4118entry: 4119 %cmp = icmp sgt <16 x i32> %a, %b 4120 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4121 ret <16 x i32> %sel 4122} 4123 4124define <16 x i32> @test116(<16 x i32> %a, <16 x i32> %b) { 4125; SSE2-LABEL: test116: 4126; SSE2: # %bb.0: # %entry 4127; SSE2-NEXT: movdqa %xmm0, %xmm8 4128; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 4129; SSE2-NEXT: pand %xmm8, %xmm0 4130; SSE2-NEXT: pandn %xmm4, %xmm8 4131; SSE2-NEXT: por %xmm8, %xmm0 4132; SSE2-NEXT: movdqa %xmm1, %xmm4 4133; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 4134; SSE2-NEXT: pand %xmm4, %xmm1 4135; SSE2-NEXT: pandn %xmm5, %xmm4 4136; SSE2-NEXT: por %xmm4, %xmm1 4137; SSE2-NEXT: movdqa %xmm2, %xmm4 4138; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 4139; SSE2-NEXT: pand %xmm4, %xmm2 4140; SSE2-NEXT: pandn %xmm6, %xmm4 4141; SSE2-NEXT: por %xmm4, %xmm2 4142; SSE2-NEXT: movdqa %xmm3, %xmm4 4143; SSE2-NEXT: pcmpgtd %xmm7, %xmm4 4144; SSE2-NEXT: pand %xmm4, %xmm3 4145; SSE2-NEXT: pandn %xmm7, %xmm4 4146; SSE2-NEXT: por %xmm4, %xmm3 4147; SSE2-NEXT: retq 4148; 4149; SSE4-LABEL: test116: 4150; SSE4: # %bb.0: # %entry 4151; SSE4-NEXT: pmaxsd %xmm4, %xmm0 4152; SSE4-NEXT: pmaxsd %xmm5, %xmm1 4153; SSE4-NEXT: pmaxsd %xmm6, %xmm2 4154; SSE4-NEXT: pmaxsd %xmm7, %xmm3 4155; SSE4-NEXT: retq 4156; 4157; AVX1-LABEL: test116: 4158; AVX1: # %bb.0: # %entry 4159; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4160; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4161; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 4162; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 4163; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4164; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4165; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4166; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 4167; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 4168; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4169; AVX1-NEXT: retq 4170; 4171; AVX2-LABEL: test116: 4172; AVX2: # %bb.0: # %entry 4173; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 4174; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 4175; AVX2-NEXT: retq 4176; 4177; AVX512-LABEL: test116: 4178; AVX512: # %bb.0: # %entry 4179; AVX512-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 4180; AVX512-NEXT: retq 4181entry: 4182 %cmp = icmp sge <16 x i32> %a, %b 4183 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4184 ret <16 x i32> %sel 4185} 4186 4187define <16 x i32> @test117(<16 x i32> %a, <16 x i32> %b) { 4188; SSE2-LABEL: test117: 4189; SSE2: # %bb.0: # %entry 4190; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 4191; SSE2-NEXT: movdqa %xmm0, %xmm9 4192; SSE2-NEXT: pxor %xmm8, %xmm9 4193; SSE2-NEXT: movdqa %xmm4, %xmm10 4194; SSE2-NEXT: pxor %xmm8, %xmm10 4195; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4196; SSE2-NEXT: pand %xmm10, %xmm0 4197; SSE2-NEXT: pandn %xmm4, %xmm10 4198; SSE2-NEXT: por %xmm10, %xmm0 4199; SSE2-NEXT: movdqa %xmm1, %xmm9 4200; SSE2-NEXT: pxor %xmm8, %xmm9 4201; SSE2-NEXT: movdqa %xmm5, %xmm4 4202; SSE2-NEXT: pxor %xmm8, %xmm4 4203; SSE2-NEXT: pcmpgtd %xmm9, %xmm4 4204; SSE2-NEXT: pand %xmm4, %xmm1 4205; SSE2-NEXT: pandn %xmm5, %xmm4 4206; SSE2-NEXT: por %xmm4, %xmm1 4207; SSE2-NEXT: movdqa %xmm2, %xmm4 4208; SSE2-NEXT: pxor %xmm8, %xmm4 4209; SSE2-NEXT: movdqa %xmm6, %xmm5 4210; SSE2-NEXT: pxor %xmm8, %xmm5 4211; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4212; SSE2-NEXT: pand %xmm5, %xmm2 4213; SSE2-NEXT: pandn %xmm6, %xmm5 4214; SSE2-NEXT: por %xmm5, %xmm2 4215; SSE2-NEXT: movdqa %xmm3, %xmm4 4216; SSE2-NEXT: pxor %xmm8, %xmm4 4217; SSE2-NEXT: pxor %xmm7, %xmm8 4218; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 4219; SSE2-NEXT: pand %xmm8, %xmm3 4220; SSE2-NEXT: pandn %xmm7, %xmm8 4221; SSE2-NEXT: por %xmm8, %xmm3 4222; SSE2-NEXT: retq 4223; 4224; SSE4-LABEL: test117: 4225; SSE4: # %bb.0: # %entry 4226; SSE4-NEXT: pminud %xmm4, %xmm0 4227; SSE4-NEXT: pminud %xmm5, %xmm1 4228; SSE4-NEXT: pminud %xmm6, %xmm2 4229; SSE4-NEXT: pminud %xmm7, %xmm3 4230; SSE4-NEXT: retq 4231; 4232; AVX1-LABEL: test117: 4233; AVX1: # %bb.0: # %entry 4234; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4235; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4236; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 4237; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 4238; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4239; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4240; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4241; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 4242; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 4243; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4244; AVX1-NEXT: retq 4245; 4246; AVX2-LABEL: test117: 4247; AVX2: # %bb.0: # %entry 4248; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 4249; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 4250; AVX2-NEXT: retq 4251; 4252; AVX512-LABEL: test117: 4253; AVX512: # %bb.0: # %entry 4254; AVX512-NEXT: vpminud %zmm1, %zmm0, %zmm0 4255; AVX512-NEXT: retq 4256entry: 4257 %cmp = icmp ult <16 x i32> %a, %b 4258 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4259 ret <16 x i32> %sel 4260} 4261 4262define <16 x i32> @test118(<16 x i32> %a, <16 x i32> %b) { 4263; SSE2-LABEL: test118: 4264; SSE2: # %bb.0: # %entry 4265; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 4266; SSE2-NEXT: movdqa %xmm0, %xmm9 4267; SSE2-NEXT: pxor %xmm8, %xmm9 4268; SSE2-NEXT: movdqa %xmm4, %xmm10 4269; SSE2-NEXT: pxor %xmm8, %xmm10 4270; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4271; SSE2-NEXT: pand %xmm10, %xmm0 4272; SSE2-NEXT: pandn %xmm4, %xmm10 4273; SSE2-NEXT: por %xmm10, %xmm0 4274; SSE2-NEXT: movdqa %xmm1, %xmm9 4275; SSE2-NEXT: pxor %xmm8, %xmm9 4276; SSE2-NEXT: movdqa %xmm5, %xmm4 4277; SSE2-NEXT: pxor %xmm8, %xmm4 4278; SSE2-NEXT: pcmpgtd %xmm9, %xmm4 4279; SSE2-NEXT: pand %xmm4, %xmm1 4280; SSE2-NEXT: pandn %xmm5, %xmm4 4281; SSE2-NEXT: por %xmm4, %xmm1 4282; SSE2-NEXT: movdqa %xmm2, %xmm4 4283; SSE2-NEXT: pxor %xmm8, %xmm4 4284; SSE2-NEXT: movdqa %xmm6, %xmm5 4285; SSE2-NEXT: pxor %xmm8, %xmm5 4286; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4287; SSE2-NEXT: pand %xmm5, %xmm2 4288; SSE2-NEXT: pandn %xmm6, %xmm5 4289; SSE2-NEXT: por %xmm5, %xmm2 4290; SSE2-NEXT: movdqa %xmm3, %xmm4 4291; SSE2-NEXT: pxor %xmm8, %xmm4 4292; SSE2-NEXT: pxor %xmm7, %xmm8 4293; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 4294; SSE2-NEXT: pand %xmm8, %xmm3 4295; SSE2-NEXT: pandn %xmm7, %xmm8 4296; SSE2-NEXT: por %xmm8, %xmm3 4297; SSE2-NEXT: retq 4298; 4299; SSE4-LABEL: test118: 4300; SSE4: # %bb.0: # %entry 4301; SSE4-NEXT: pminud %xmm4, %xmm0 4302; SSE4-NEXT: pminud %xmm5, %xmm1 4303; SSE4-NEXT: pminud %xmm6, %xmm2 4304; SSE4-NEXT: pminud %xmm7, %xmm3 4305; SSE4-NEXT: retq 4306; 4307; AVX1-LABEL: test118: 4308; AVX1: # %bb.0: # %entry 4309; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4310; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4311; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 4312; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 4313; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4314; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4315; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4316; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 4317; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 4318; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4319; AVX1-NEXT: retq 4320; 4321; AVX2-LABEL: test118: 4322; AVX2: # %bb.0: # %entry 4323; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 4324; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 4325; AVX2-NEXT: retq 4326; 4327; AVX512-LABEL: test118: 4328; AVX512: # %bb.0: # %entry 4329; AVX512-NEXT: vpminud %zmm1, %zmm0, %zmm0 4330; AVX512-NEXT: retq 4331entry: 4332 %cmp = icmp ule <16 x i32> %a, %b 4333 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4334 ret <16 x i32> %sel 4335} 4336 4337define <16 x i32> @test119(<16 x i32> %a, <16 x i32> %b) { 4338; SSE2-LABEL: test119: 4339; SSE2: # %bb.0: # %entry 4340; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 4341; SSE2-NEXT: movdqa %xmm4, %xmm9 4342; SSE2-NEXT: pxor %xmm8, %xmm9 4343; SSE2-NEXT: movdqa %xmm0, %xmm10 4344; SSE2-NEXT: pxor %xmm8, %xmm10 4345; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4346; SSE2-NEXT: pand %xmm10, %xmm0 4347; SSE2-NEXT: pandn %xmm4, %xmm10 4348; SSE2-NEXT: por %xmm10, %xmm0 4349; SSE2-NEXT: movdqa %xmm5, %xmm9 4350; SSE2-NEXT: pxor %xmm8, %xmm9 4351; SSE2-NEXT: movdqa %xmm1, %xmm4 4352; SSE2-NEXT: pxor %xmm8, %xmm4 4353; SSE2-NEXT: pcmpgtd %xmm9, %xmm4 4354; SSE2-NEXT: pand %xmm4, %xmm1 4355; SSE2-NEXT: pandn %xmm5, %xmm4 4356; SSE2-NEXT: por %xmm4, %xmm1 4357; SSE2-NEXT: movdqa %xmm6, %xmm4 4358; SSE2-NEXT: pxor %xmm8, %xmm4 4359; SSE2-NEXT: movdqa %xmm2, %xmm5 4360; SSE2-NEXT: pxor %xmm8, %xmm5 4361; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4362; SSE2-NEXT: pand %xmm5, %xmm2 4363; SSE2-NEXT: pandn %xmm6, %xmm5 4364; SSE2-NEXT: por %xmm5, %xmm2 4365; SSE2-NEXT: movdqa %xmm7, %xmm4 4366; SSE2-NEXT: pxor %xmm8, %xmm4 4367; SSE2-NEXT: pxor %xmm3, %xmm8 4368; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 4369; SSE2-NEXT: pand %xmm8, %xmm3 4370; SSE2-NEXT: pandn %xmm7, %xmm8 4371; SSE2-NEXT: por %xmm8, %xmm3 4372; SSE2-NEXT: retq 4373; 4374; SSE4-LABEL: test119: 4375; SSE4: # %bb.0: # %entry 4376; SSE4-NEXT: pmaxud %xmm4, %xmm0 4377; SSE4-NEXT: pmaxud %xmm5, %xmm1 4378; SSE4-NEXT: pmaxud %xmm6, %xmm2 4379; SSE4-NEXT: pmaxud %xmm7, %xmm3 4380; SSE4-NEXT: retq 4381; 4382; AVX1-LABEL: test119: 4383; AVX1: # %bb.0: # %entry 4384; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4385; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4386; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 4387; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 4388; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4389; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4390; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4391; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 4392; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 4393; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4394; AVX1-NEXT: retq 4395; 4396; AVX2-LABEL: test119: 4397; AVX2: # %bb.0: # %entry 4398; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 4399; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 4400; AVX2-NEXT: retq 4401; 4402; AVX512-LABEL: test119: 4403; AVX512: # %bb.0: # %entry 4404; AVX512-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 4405; AVX512-NEXT: retq 4406entry: 4407 %cmp = icmp ugt <16 x i32> %a, %b 4408 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4409 ret <16 x i32> %sel 4410} 4411 4412define <16 x i32> @test120(<16 x i32> %a, <16 x i32> %b) { 4413; SSE2-LABEL: test120: 4414; SSE2: # %bb.0: # %entry 4415; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 4416; SSE2-NEXT: movdqa %xmm4, %xmm9 4417; SSE2-NEXT: pxor %xmm8, %xmm9 4418; SSE2-NEXT: movdqa %xmm0, %xmm10 4419; SSE2-NEXT: pxor %xmm8, %xmm10 4420; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4421; SSE2-NEXT: pand %xmm10, %xmm0 4422; SSE2-NEXT: pandn %xmm4, %xmm10 4423; SSE2-NEXT: por %xmm10, %xmm0 4424; SSE2-NEXT: movdqa %xmm5, %xmm9 4425; SSE2-NEXT: pxor %xmm8, %xmm9 4426; SSE2-NEXT: movdqa %xmm1, %xmm4 4427; SSE2-NEXT: pxor %xmm8, %xmm4 4428; SSE2-NEXT: pcmpgtd %xmm9, %xmm4 4429; SSE2-NEXT: pand %xmm4, %xmm1 4430; SSE2-NEXT: pandn %xmm5, %xmm4 4431; SSE2-NEXT: por %xmm4, %xmm1 4432; SSE2-NEXT: movdqa %xmm6, %xmm4 4433; SSE2-NEXT: pxor %xmm8, %xmm4 4434; SSE2-NEXT: movdqa %xmm2, %xmm5 4435; SSE2-NEXT: pxor %xmm8, %xmm5 4436; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4437; SSE2-NEXT: pand %xmm5, %xmm2 4438; SSE2-NEXT: pandn %xmm6, %xmm5 4439; SSE2-NEXT: por %xmm5, %xmm2 4440; SSE2-NEXT: movdqa %xmm7, %xmm4 4441; SSE2-NEXT: pxor %xmm8, %xmm4 4442; SSE2-NEXT: pxor %xmm3, %xmm8 4443; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 4444; SSE2-NEXT: pand %xmm8, %xmm3 4445; SSE2-NEXT: pandn %xmm7, %xmm8 4446; SSE2-NEXT: por %xmm8, %xmm3 4447; SSE2-NEXT: retq 4448; 4449; SSE4-LABEL: test120: 4450; SSE4: # %bb.0: # %entry 4451; SSE4-NEXT: pmaxud %xmm4, %xmm0 4452; SSE4-NEXT: pmaxud %xmm5, %xmm1 4453; SSE4-NEXT: pmaxud %xmm6, %xmm2 4454; SSE4-NEXT: pmaxud %xmm7, %xmm3 4455; SSE4-NEXT: retq 4456; 4457; AVX1-LABEL: test120: 4458; AVX1: # %bb.0: # %entry 4459; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4460; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4461; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 4462; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 4463; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4464; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4465; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4466; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 4467; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 4468; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4469; AVX1-NEXT: retq 4470; 4471; AVX2-LABEL: test120: 4472; AVX2: # %bb.0: # %entry 4473; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 4474; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 4475; AVX2-NEXT: retq 4476; 4477; AVX512-LABEL: test120: 4478; AVX512: # %bb.0: # %entry 4479; AVX512-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 4480; AVX512-NEXT: retq 4481entry: 4482 %cmp = icmp uge <16 x i32> %a, %b 4483 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4484 ret <16 x i32> %sel 4485} 4486 4487define <8 x i64> @test121(<8 x i64> %a, <8 x i64> %b) { 4488; SSE2-LABEL: test121: 4489; SSE2: # %bb.0: # %entry 4490; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 4491; SSE2-NEXT: movdqa %xmm0, %xmm9 4492; SSE2-NEXT: pxor %xmm8, %xmm9 4493; SSE2-NEXT: movdqa %xmm4, %xmm10 4494; SSE2-NEXT: pxor %xmm8, %xmm10 4495; SSE2-NEXT: movdqa %xmm10, %xmm11 4496; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4497; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4498; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4499; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4500; SSE2-NEXT: pand %xmm12, %xmm9 4501; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4502; SSE2-NEXT: por %xmm9, %xmm10 4503; SSE2-NEXT: pand %xmm10, %xmm0 4504; SSE2-NEXT: pandn %xmm4, %xmm10 4505; SSE2-NEXT: por %xmm10, %xmm0 4506; SSE2-NEXT: movdqa %xmm1, %xmm9 4507; SSE2-NEXT: pxor %xmm8, %xmm9 4508; SSE2-NEXT: movdqa %xmm5, %xmm4 4509; SSE2-NEXT: pxor %xmm8, %xmm4 4510; SSE2-NEXT: movdqa %xmm4, %xmm10 4511; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4512; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4513; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 4514; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 4515; SSE2-NEXT: pand %xmm11, %xmm9 4516; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 4517; SSE2-NEXT: por %xmm9, %xmm4 4518; SSE2-NEXT: pand %xmm4, %xmm1 4519; SSE2-NEXT: pandn %xmm5, %xmm4 4520; SSE2-NEXT: por %xmm4, %xmm1 4521; SSE2-NEXT: movdqa %xmm2, %xmm4 4522; SSE2-NEXT: pxor %xmm8, %xmm4 4523; SSE2-NEXT: movdqa %xmm6, %xmm5 4524; SSE2-NEXT: pxor %xmm8, %xmm5 4525; SSE2-NEXT: movdqa %xmm5, %xmm9 4526; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4527; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4528; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4529; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4530; SSE2-NEXT: pand %xmm10, %xmm4 4531; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4532; SSE2-NEXT: por %xmm4, %xmm5 4533; SSE2-NEXT: pand %xmm5, %xmm2 4534; SSE2-NEXT: pandn %xmm6, %xmm5 4535; SSE2-NEXT: por %xmm5, %xmm2 4536; SSE2-NEXT: movdqa %xmm3, %xmm4 4537; SSE2-NEXT: pxor %xmm8, %xmm4 4538; SSE2-NEXT: pxor %xmm7, %xmm8 4539; SSE2-NEXT: movdqa %xmm8, %xmm5 4540; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4541; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 4542; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 4543; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 4544; SSE2-NEXT: pand %xmm6, %xmm4 4545; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 4546; SSE2-NEXT: por %xmm4, %xmm5 4547; SSE2-NEXT: pand %xmm5, %xmm3 4548; SSE2-NEXT: pandn %xmm7, %xmm5 4549; SSE2-NEXT: por %xmm5, %xmm3 4550; SSE2-NEXT: retq 4551; 4552; SSE4-LABEL: test121: 4553; SSE4: # %bb.0: # %entry 4554; SSE4-NEXT: movdqa %xmm7, %xmm8 4555; SSE4-NEXT: movdqa %xmm0, %xmm7 4556; SSE4-NEXT: movdqa %xmm4, %xmm0 4557; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 4558; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm4 4559; SSE4-NEXT: movdqa %xmm5, %xmm0 4560; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 4561; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 4562; SSE4-NEXT: movdqa %xmm6, %xmm0 4563; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 4564; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 4565; SSE4-NEXT: movdqa %xmm8, %xmm0 4566; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 4567; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 4568; SSE4-NEXT: movapd %xmm4, %xmm0 4569; SSE4-NEXT: movapd %xmm5, %xmm1 4570; SSE4-NEXT: movapd %xmm6, %xmm2 4571; SSE4-NEXT: movapd %xmm8, %xmm3 4572; SSE4-NEXT: retq 4573; 4574; AVX1-LABEL: test121: 4575; AVX1: # %bb.0: # %entry 4576; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 4577; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 4578; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4579; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm5 4580; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4581; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4582; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 4583; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 4584; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 4585; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm4 4586; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 4587; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4588; AVX1-NEXT: retq 4589; 4590; AVX2-LABEL: test121: 4591; AVX2: # %bb.0: # %entry 4592; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm4 4593; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4594; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm2 4595; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4596; AVX2-NEXT: retq 4597; 4598; AVX512-LABEL: test121: 4599; AVX512: # %bb.0: # %entry 4600; AVX512-NEXT: vpminsq %zmm1, %zmm0, %zmm0 4601; AVX512-NEXT: retq 4602entry: 4603 %cmp = icmp slt <8 x i64> %a, %b 4604 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4605 ret <8 x i64> %sel 4606} 4607 4608define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) { 4609; SSE2-LABEL: test122: 4610; SSE2: # %bb.0: # %entry 4611; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 4612; SSE2-NEXT: movdqa %xmm0, %xmm9 4613; SSE2-NEXT: pxor %xmm8, %xmm9 4614; SSE2-NEXT: movdqa %xmm4, %xmm10 4615; SSE2-NEXT: pxor %xmm8, %xmm10 4616; SSE2-NEXT: movdqa %xmm10, %xmm11 4617; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4618; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4619; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4620; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4621; SSE2-NEXT: pand %xmm12, %xmm9 4622; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4623; SSE2-NEXT: por %xmm9, %xmm10 4624; SSE2-NEXT: pand %xmm10, %xmm0 4625; SSE2-NEXT: pandn %xmm4, %xmm10 4626; SSE2-NEXT: por %xmm10, %xmm0 4627; SSE2-NEXT: movdqa %xmm1, %xmm9 4628; SSE2-NEXT: pxor %xmm8, %xmm9 4629; SSE2-NEXT: movdqa %xmm5, %xmm4 4630; SSE2-NEXT: pxor %xmm8, %xmm4 4631; SSE2-NEXT: movdqa %xmm4, %xmm10 4632; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4633; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4634; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 4635; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 4636; SSE2-NEXT: pand %xmm11, %xmm9 4637; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 4638; SSE2-NEXT: por %xmm9, %xmm4 4639; SSE2-NEXT: pand %xmm4, %xmm1 4640; SSE2-NEXT: pandn %xmm5, %xmm4 4641; SSE2-NEXT: por %xmm4, %xmm1 4642; SSE2-NEXT: movdqa %xmm2, %xmm4 4643; SSE2-NEXT: pxor %xmm8, %xmm4 4644; SSE2-NEXT: movdqa %xmm6, %xmm5 4645; SSE2-NEXT: pxor %xmm8, %xmm5 4646; SSE2-NEXT: movdqa %xmm5, %xmm9 4647; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4648; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4649; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4650; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4651; SSE2-NEXT: pand %xmm10, %xmm4 4652; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4653; SSE2-NEXT: por %xmm4, %xmm5 4654; SSE2-NEXT: pand %xmm5, %xmm2 4655; SSE2-NEXT: pandn %xmm6, %xmm5 4656; SSE2-NEXT: por %xmm5, %xmm2 4657; SSE2-NEXT: movdqa %xmm3, %xmm4 4658; SSE2-NEXT: pxor %xmm8, %xmm4 4659; SSE2-NEXT: pxor %xmm7, %xmm8 4660; SSE2-NEXT: movdqa %xmm8, %xmm5 4661; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4662; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 4663; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 4664; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 4665; SSE2-NEXT: pand %xmm6, %xmm4 4666; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 4667; SSE2-NEXT: por %xmm4, %xmm5 4668; SSE2-NEXT: pand %xmm5, %xmm3 4669; SSE2-NEXT: pandn %xmm7, %xmm5 4670; SSE2-NEXT: por %xmm5, %xmm3 4671; SSE2-NEXT: retq 4672; 4673; SSE4-LABEL: test122: 4674; SSE4: # %bb.0: # %entry 4675; SSE4-NEXT: movdqa %xmm7, %xmm8 4676; SSE4-NEXT: movdqa %xmm0, %xmm7 4677; SSE4-NEXT: movdqa %xmm4, %xmm0 4678; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 4679; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm4 4680; SSE4-NEXT: movdqa %xmm5, %xmm0 4681; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 4682; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 4683; SSE4-NEXT: movdqa %xmm6, %xmm0 4684; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 4685; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 4686; SSE4-NEXT: movdqa %xmm8, %xmm0 4687; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 4688; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 4689; SSE4-NEXT: movapd %xmm4, %xmm0 4690; SSE4-NEXT: movapd %xmm5, %xmm1 4691; SSE4-NEXT: movapd %xmm6, %xmm2 4692; SSE4-NEXT: movapd %xmm8, %xmm3 4693; SSE4-NEXT: retq 4694; 4695; AVX1-LABEL: test122: 4696; AVX1: # %bb.0: # %entry 4697; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 4698; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 4699; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4700; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm5 4701; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4702; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4703; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 4704; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 4705; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 4706; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm4 4707; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 4708; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4709; AVX1-NEXT: retq 4710; 4711; AVX2-LABEL: test122: 4712; AVX2: # %bb.0: # %entry 4713; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm4 4714; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4715; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm2 4716; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4717; AVX2-NEXT: retq 4718; 4719; AVX512-LABEL: test122: 4720; AVX512: # %bb.0: # %entry 4721; AVX512-NEXT: vpminsq %zmm1, %zmm0, %zmm0 4722; AVX512-NEXT: retq 4723entry: 4724 %cmp = icmp sle <8 x i64> %a, %b 4725 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4726 ret <8 x i64> %sel 4727} 4728 4729define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) { 4730; SSE2-LABEL: test123: 4731; SSE2: # %bb.0: # %entry 4732; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 4733; SSE2-NEXT: movdqa %xmm4, %xmm9 4734; SSE2-NEXT: pxor %xmm8, %xmm9 4735; SSE2-NEXT: movdqa %xmm0, %xmm10 4736; SSE2-NEXT: pxor %xmm8, %xmm10 4737; SSE2-NEXT: movdqa %xmm10, %xmm11 4738; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4739; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4740; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4741; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4742; SSE2-NEXT: pand %xmm12, %xmm9 4743; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4744; SSE2-NEXT: por %xmm9, %xmm10 4745; SSE2-NEXT: pand %xmm10, %xmm0 4746; SSE2-NEXT: pandn %xmm4, %xmm10 4747; SSE2-NEXT: por %xmm10, %xmm0 4748; SSE2-NEXT: movdqa %xmm5, %xmm9 4749; SSE2-NEXT: pxor %xmm8, %xmm9 4750; SSE2-NEXT: movdqa %xmm1, %xmm4 4751; SSE2-NEXT: pxor %xmm8, %xmm4 4752; SSE2-NEXT: movdqa %xmm4, %xmm10 4753; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4754; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4755; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 4756; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 4757; SSE2-NEXT: pand %xmm11, %xmm9 4758; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 4759; SSE2-NEXT: por %xmm9, %xmm4 4760; SSE2-NEXT: pand %xmm4, %xmm1 4761; SSE2-NEXT: pandn %xmm5, %xmm4 4762; SSE2-NEXT: por %xmm4, %xmm1 4763; SSE2-NEXT: movdqa %xmm6, %xmm4 4764; SSE2-NEXT: pxor %xmm8, %xmm4 4765; SSE2-NEXT: movdqa %xmm2, %xmm5 4766; SSE2-NEXT: pxor %xmm8, %xmm5 4767; SSE2-NEXT: movdqa %xmm5, %xmm9 4768; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4769; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4770; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4771; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4772; SSE2-NEXT: pand %xmm10, %xmm4 4773; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4774; SSE2-NEXT: por %xmm4, %xmm5 4775; SSE2-NEXT: pand %xmm5, %xmm2 4776; SSE2-NEXT: pandn %xmm6, %xmm5 4777; SSE2-NEXT: por %xmm5, %xmm2 4778; SSE2-NEXT: movdqa %xmm7, %xmm4 4779; SSE2-NEXT: pxor %xmm8, %xmm4 4780; SSE2-NEXT: pxor %xmm3, %xmm8 4781; SSE2-NEXT: movdqa %xmm8, %xmm5 4782; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4783; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 4784; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 4785; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 4786; SSE2-NEXT: pand %xmm6, %xmm4 4787; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 4788; SSE2-NEXT: por %xmm4, %xmm5 4789; SSE2-NEXT: pand %xmm5, %xmm3 4790; SSE2-NEXT: pandn %xmm7, %xmm5 4791; SSE2-NEXT: por %xmm5, %xmm3 4792; SSE2-NEXT: retq 4793; 4794; SSE4-LABEL: test123: 4795; SSE4: # %bb.0: # %entry 4796; SSE4-NEXT: movdqa %xmm7, %xmm8 4797; SSE4-NEXT: movdqa %xmm0, %xmm7 4798; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 4799; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm4 4800; SSE4-NEXT: movdqa %xmm1, %xmm0 4801; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 4802; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 4803; SSE4-NEXT: movdqa %xmm2, %xmm0 4804; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 4805; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 4806; SSE4-NEXT: movdqa %xmm3, %xmm0 4807; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 4808; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 4809; SSE4-NEXT: movapd %xmm4, %xmm0 4810; SSE4-NEXT: movapd %xmm5, %xmm1 4811; SSE4-NEXT: movapd %xmm6, %xmm2 4812; SSE4-NEXT: movapd %xmm8, %xmm3 4813; SSE4-NEXT: retq 4814; 4815; AVX1-LABEL: test123: 4816; AVX1: # %bb.0: # %entry 4817; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4818; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4819; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4820; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5 4821; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4822; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4823; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4824; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4825; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 4826; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4 4827; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 4828; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4829; AVX1-NEXT: retq 4830; 4831; AVX2-LABEL: test123: 4832; AVX2: # %bb.0: # %entry 4833; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4 4834; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4835; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2 4836; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4837; AVX2-NEXT: retq 4838; 4839; AVX512-LABEL: test123: 4840; AVX512: # %bb.0: # %entry 4841; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 4842; AVX512-NEXT: retq 4843entry: 4844 %cmp = icmp sgt <8 x i64> %a, %b 4845 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4846 ret <8 x i64> %sel 4847} 4848 4849define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) { 4850; SSE2-LABEL: test124: 4851; SSE2: # %bb.0: # %entry 4852; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 4853; SSE2-NEXT: movdqa %xmm4, %xmm9 4854; SSE2-NEXT: pxor %xmm8, %xmm9 4855; SSE2-NEXT: movdqa %xmm0, %xmm10 4856; SSE2-NEXT: pxor %xmm8, %xmm10 4857; SSE2-NEXT: movdqa %xmm10, %xmm11 4858; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4859; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4860; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4861; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4862; SSE2-NEXT: pand %xmm12, %xmm9 4863; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4864; SSE2-NEXT: por %xmm9, %xmm10 4865; SSE2-NEXT: pand %xmm10, %xmm0 4866; SSE2-NEXT: pandn %xmm4, %xmm10 4867; SSE2-NEXT: por %xmm10, %xmm0 4868; SSE2-NEXT: movdqa %xmm5, %xmm9 4869; SSE2-NEXT: pxor %xmm8, %xmm9 4870; SSE2-NEXT: movdqa %xmm1, %xmm4 4871; SSE2-NEXT: pxor %xmm8, %xmm4 4872; SSE2-NEXT: movdqa %xmm4, %xmm10 4873; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4874; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4875; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 4876; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 4877; SSE2-NEXT: pand %xmm11, %xmm9 4878; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 4879; SSE2-NEXT: por %xmm9, %xmm4 4880; SSE2-NEXT: pand %xmm4, %xmm1 4881; SSE2-NEXT: pandn %xmm5, %xmm4 4882; SSE2-NEXT: por %xmm4, %xmm1 4883; SSE2-NEXT: movdqa %xmm6, %xmm4 4884; SSE2-NEXT: pxor %xmm8, %xmm4 4885; SSE2-NEXT: movdqa %xmm2, %xmm5 4886; SSE2-NEXT: pxor %xmm8, %xmm5 4887; SSE2-NEXT: movdqa %xmm5, %xmm9 4888; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4889; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4890; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4891; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4892; SSE2-NEXT: pand %xmm10, %xmm4 4893; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4894; SSE2-NEXT: por %xmm4, %xmm5 4895; SSE2-NEXT: pand %xmm5, %xmm2 4896; SSE2-NEXT: pandn %xmm6, %xmm5 4897; SSE2-NEXT: por %xmm5, %xmm2 4898; SSE2-NEXT: movdqa %xmm7, %xmm4 4899; SSE2-NEXT: pxor %xmm8, %xmm4 4900; SSE2-NEXT: pxor %xmm3, %xmm8 4901; SSE2-NEXT: movdqa %xmm8, %xmm5 4902; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4903; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 4904; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 4905; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 4906; SSE2-NEXT: pand %xmm6, %xmm4 4907; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 4908; SSE2-NEXT: por %xmm4, %xmm5 4909; SSE2-NEXT: pand %xmm5, %xmm3 4910; SSE2-NEXT: pandn %xmm7, %xmm5 4911; SSE2-NEXT: por %xmm5, %xmm3 4912; SSE2-NEXT: retq 4913; 4914; SSE4-LABEL: test124: 4915; SSE4: # %bb.0: # %entry 4916; SSE4-NEXT: movdqa %xmm7, %xmm8 4917; SSE4-NEXT: movdqa %xmm0, %xmm7 4918; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 4919; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm4 4920; SSE4-NEXT: movdqa %xmm1, %xmm0 4921; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 4922; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 4923; SSE4-NEXT: movdqa %xmm2, %xmm0 4924; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 4925; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 4926; SSE4-NEXT: movdqa %xmm3, %xmm0 4927; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 4928; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 4929; SSE4-NEXT: movapd %xmm4, %xmm0 4930; SSE4-NEXT: movapd %xmm5, %xmm1 4931; SSE4-NEXT: movapd %xmm6, %xmm2 4932; SSE4-NEXT: movapd %xmm8, %xmm3 4933; SSE4-NEXT: retq 4934; 4935; AVX1-LABEL: test124: 4936; AVX1: # %bb.0: # %entry 4937; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4938; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4939; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4940; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5 4941; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4942; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4943; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4944; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4945; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 4946; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4 4947; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 4948; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4949; AVX1-NEXT: retq 4950; 4951; AVX2-LABEL: test124: 4952; AVX2: # %bb.0: # %entry 4953; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4 4954; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4955; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2 4956; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4957; AVX2-NEXT: retq 4958; 4959; AVX512-LABEL: test124: 4960; AVX512: # %bb.0: # %entry 4961; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 4962; AVX512-NEXT: retq 4963entry: 4964 %cmp = icmp sge <8 x i64> %a, %b 4965 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4966 ret <8 x i64> %sel 4967} 4968 4969define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) { 4970; SSE2-LABEL: test125: 4971; SSE2: # %bb.0: # %entry 4972; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 4973; SSE2-NEXT: movdqa %xmm0, %xmm9 4974; SSE2-NEXT: pxor %xmm8, %xmm9 4975; SSE2-NEXT: movdqa %xmm4, %xmm10 4976; SSE2-NEXT: pxor %xmm8, %xmm10 4977; SSE2-NEXT: movdqa %xmm10, %xmm11 4978; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4979; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4980; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4981; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4982; SSE2-NEXT: pand %xmm12, %xmm9 4983; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4984; SSE2-NEXT: por %xmm9, %xmm10 4985; SSE2-NEXT: pand %xmm10, %xmm0 4986; SSE2-NEXT: pandn %xmm4, %xmm10 4987; SSE2-NEXT: por %xmm10, %xmm0 4988; SSE2-NEXT: movdqa %xmm1, %xmm9 4989; SSE2-NEXT: pxor %xmm8, %xmm9 4990; SSE2-NEXT: movdqa %xmm5, %xmm4 4991; SSE2-NEXT: pxor %xmm8, %xmm4 4992; SSE2-NEXT: movdqa %xmm4, %xmm10 4993; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4994; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4995; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 4996; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 4997; SSE2-NEXT: pand %xmm11, %xmm9 4998; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 4999; SSE2-NEXT: por %xmm9, %xmm4 5000; SSE2-NEXT: pand %xmm4, %xmm1 5001; SSE2-NEXT: pandn %xmm5, %xmm4 5002; SSE2-NEXT: por %xmm4, %xmm1 5003; SSE2-NEXT: movdqa %xmm2, %xmm4 5004; SSE2-NEXT: pxor %xmm8, %xmm4 5005; SSE2-NEXT: movdqa %xmm6, %xmm5 5006; SSE2-NEXT: pxor %xmm8, %xmm5 5007; SSE2-NEXT: movdqa %xmm5, %xmm9 5008; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 5009; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 5010; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 5011; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 5012; SSE2-NEXT: pand %xmm10, %xmm4 5013; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 5014; SSE2-NEXT: por %xmm4, %xmm5 5015; SSE2-NEXT: pand %xmm5, %xmm2 5016; SSE2-NEXT: pandn %xmm6, %xmm5 5017; SSE2-NEXT: por %xmm5, %xmm2 5018; SSE2-NEXT: movdqa %xmm3, %xmm4 5019; SSE2-NEXT: pxor %xmm8, %xmm4 5020; SSE2-NEXT: pxor %xmm7, %xmm8 5021; SSE2-NEXT: movdqa %xmm8, %xmm5 5022; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 5023; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 5024; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 5025; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 5026; SSE2-NEXT: pand %xmm6, %xmm4 5027; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 5028; SSE2-NEXT: por %xmm4, %xmm5 5029; SSE2-NEXT: pand %xmm5, %xmm3 5030; SSE2-NEXT: pandn %xmm7, %xmm5 5031; SSE2-NEXT: por %xmm5, %xmm3 5032; SSE2-NEXT: retq 5033; 5034; SSE4-LABEL: test125: 5035; SSE4: # %bb.0: # %entry 5036; SSE4-NEXT: movdqa %xmm7, %xmm8 5037; SSE4-NEXT: movdqa %xmm6, %xmm9 5038; SSE4-NEXT: movdqa %xmm5, %xmm10 5039; SSE4-NEXT: movdqa %xmm0, %xmm5 5040; SSE4-NEXT: movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808] 5041; SSE4-NEXT: movdqa %xmm0, %xmm6 5042; SSE4-NEXT: pxor %xmm7, %xmm6 5043; SSE4-NEXT: movdqa %xmm4, %xmm0 5044; SSE4-NEXT: pxor %xmm7, %xmm0 5045; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 5046; SSE4-NEXT: blendvpd %xmm0, %xmm5, %xmm4 5047; SSE4-NEXT: movdqa %xmm1, %xmm5 5048; SSE4-NEXT: pxor %xmm7, %xmm5 5049; SSE4-NEXT: movdqa %xmm10, %xmm0 5050; SSE4-NEXT: pxor %xmm7, %xmm0 5051; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 5052; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm10 5053; SSE4-NEXT: movdqa %xmm2, %xmm1 5054; SSE4-NEXT: pxor %xmm7, %xmm1 5055; SSE4-NEXT: movdqa %xmm9, %xmm0 5056; SSE4-NEXT: pxor %xmm7, %xmm0 5057; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 5058; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm9 5059; SSE4-NEXT: movdqa %xmm3, %xmm0 5060; SSE4-NEXT: pxor %xmm7, %xmm0 5061; SSE4-NEXT: pxor %xmm8, %xmm7 5062; SSE4-NEXT: pcmpgtq %xmm0, %xmm7 5063; SSE4-NEXT: movdqa %xmm7, %xmm0 5064; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 5065; SSE4-NEXT: movapd %xmm4, %xmm0 5066; SSE4-NEXT: movapd %xmm10, %xmm1 5067; SSE4-NEXT: movapd %xmm9, %xmm2 5068; SSE4-NEXT: movapd %xmm8, %xmm3 5069; SSE4-NEXT: retq 5070; 5071; AVX1-LABEL: test125: 5072; AVX1: # %bb.0: # %entry 5073; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 5074; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5075; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5076; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 5077; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5078; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5079; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6 5080; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7 5081; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5082; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5083; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5084; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 5085; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 5086; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5087; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5088; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 5089; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4 5090; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5 5091; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5092; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 5093; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5094; AVX1-NEXT: retq 5095; 5096; AVX2-LABEL: test125: 5097; AVX2: # %bb.0: # %entry 5098; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 5099; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5 5100; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 5101; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5102; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5103; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2 5104; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4 5105; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 5106; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5107; AVX2-NEXT: retq 5108; 5109; AVX512-LABEL: test125: 5110; AVX512: # %bb.0: # %entry 5111; AVX512-NEXT: vpminuq %zmm1, %zmm0, %zmm0 5112; AVX512-NEXT: retq 5113entry: 5114 %cmp = icmp ult <8 x i64> %a, %b 5115 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5116 ret <8 x i64> %sel 5117} 5118 5119define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) { 5120; SSE2-LABEL: test126: 5121; SSE2: # %bb.0: # %entry 5122; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 5123; SSE2-NEXT: movdqa %xmm0, %xmm9 5124; SSE2-NEXT: pxor %xmm8, %xmm9 5125; SSE2-NEXT: movdqa %xmm4, %xmm10 5126; SSE2-NEXT: pxor %xmm8, %xmm10 5127; SSE2-NEXT: movdqa %xmm10, %xmm11 5128; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 5129; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5130; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 5131; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 5132; SSE2-NEXT: pand %xmm12, %xmm9 5133; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 5134; SSE2-NEXT: por %xmm9, %xmm10 5135; SSE2-NEXT: pand %xmm10, %xmm0 5136; SSE2-NEXT: pandn %xmm4, %xmm10 5137; SSE2-NEXT: por %xmm10, %xmm0 5138; SSE2-NEXT: movdqa %xmm1, %xmm9 5139; SSE2-NEXT: pxor %xmm8, %xmm9 5140; SSE2-NEXT: movdqa %xmm5, %xmm4 5141; SSE2-NEXT: pxor %xmm8, %xmm4 5142; SSE2-NEXT: movdqa %xmm4, %xmm10 5143; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 5144; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 5145; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 5146; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 5147; SSE2-NEXT: pand %xmm11, %xmm9 5148; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 5149; SSE2-NEXT: por %xmm9, %xmm4 5150; SSE2-NEXT: pand %xmm4, %xmm1 5151; SSE2-NEXT: pandn %xmm5, %xmm4 5152; SSE2-NEXT: por %xmm4, %xmm1 5153; SSE2-NEXT: movdqa %xmm2, %xmm4 5154; SSE2-NEXT: pxor %xmm8, %xmm4 5155; SSE2-NEXT: movdqa %xmm6, %xmm5 5156; SSE2-NEXT: pxor %xmm8, %xmm5 5157; SSE2-NEXT: movdqa %xmm5, %xmm9 5158; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 5159; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 5160; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 5161; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 5162; SSE2-NEXT: pand %xmm10, %xmm4 5163; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 5164; SSE2-NEXT: por %xmm4, %xmm5 5165; SSE2-NEXT: pand %xmm5, %xmm2 5166; SSE2-NEXT: pandn %xmm6, %xmm5 5167; SSE2-NEXT: por %xmm5, %xmm2 5168; SSE2-NEXT: movdqa %xmm3, %xmm4 5169; SSE2-NEXT: pxor %xmm8, %xmm4 5170; SSE2-NEXT: pxor %xmm7, %xmm8 5171; SSE2-NEXT: movdqa %xmm8, %xmm5 5172; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 5173; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 5174; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 5175; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 5176; SSE2-NEXT: pand %xmm6, %xmm4 5177; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 5178; SSE2-NEXT: por %xmm4, %xmm5 5179; SSE2-NEXT: pand %xmm5, %xmm3 5180; SSE2-NEXT: pandn %xmm7, %xmm5 5181; SSE2-NEXT: por %xmm5, %xmm3 5182; SSE2-NEXT: retq 5183; 5184; SSE4-LABEL: test126: 5185; SSE4: # %bb.0: # %entry 5186; SSE4-NEXT: movdqa %xmm7, %xmm8 5187; SSE4-NEXT: movdqa %xmm6, %xmm9 5188; SSE4-NEXT: movdqa %xmm5, %xmm10 5189; SSE4-NEXT: movdqa %xmm0, %xmm5 5190; SSE4-NEXT: movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808] 5191; SSE4-NEXT: movdqa %xmm0, %xmm6 5192; SSE4-NEXT: pxor %xmm7, %xmm6 5193; SSE4-NEXT: movdqa %xmm4, %xmm0 5194; SSE4-NEXT: pxor %xmm7, %xmm0 5195; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 5196; SSE4-NEXT: blendvpd %xmm0, %xmm5, %xmm4 5197; SSE4-NEXT: movdqa %xmm1, %xmm5 5198; SSE4-NEXT: pxor %xmm7, %xmm5 5199; SSE4-NEXT: movdqa %xmm10, %xmm0 5200; SSE4-NEXT: pxor %xmm7, %xmm0 5201; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 5202; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm10 5203; SSE4-NEXT: movdqa %xmm2, %xmm1 5204; SSE4-NEXT: pxor %xmm7, %xmm1 5205; SSE4-NEXT: movdqa %xmm9, %xmm0 5206; SSE4-NEXT: pxor %xmm7, %xmm0 5207; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 5208; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm9 5209; SSE4-NEXT: movdqa %xmm3, %xmm0 5210; SSE4-NEXT: pxor %xmm7, %xmm0 5211; SSE4-NEXT: pxor %xmm8, %xmm7 5212; SSE4-NEXT: pcmpgtq %xmm0, %xmm7 5213; SSE4-NEXT: movdqa %xmm7, %xmm0 5214; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 5215; SSE4-NEXT: movapd %xmm4, %xmm0 5216; SSE4-NEXT: movapd %xmm10, %xmm1 5217; SSE4-NEXT: movapd %xmm9, %xmm2 5218; SSE4-NEXT: movapd %xmm8, %xmm3 5219; SSE4-NEXT: retq 5220; 5221; AVX1-LABEL: test126: 5222; AVX1: # %bb.0: # %entry 5223; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 5224; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5225; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5226; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 5227; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5228; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5229; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6 5230; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7 5231; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5232; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5233; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5234; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 5235; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 5236; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5237; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5238; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 5239; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4 5240; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5 5241; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5242; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 5243; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5244; AVX1-NEXT: retq 5245; 5246; AVX2-LABEL: test126: 5247; AVX2: # %bb.0: # %entry 5248; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 5249; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5 5250; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 5251; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5252; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5253; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2 5254; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4 5255; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 5256; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5257; AVX2-NEXT: retq 5258; 5259; AVX512-LABEL: test126: 5260; AVX512: # %bb.0: # %entry 5261; AVX512-NEXT: vpminuq %zmm1, %zmm0, %zmm0 5262; AVX512-NEXT: retq 5263entry: 5264 %cmp = icmp ule <8 x i64> %a, %b 5265 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5266 ret <8 x i64> %sel 5267} 5268 5269define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) { 5270; SSE2-LABEL: test127: 5271; SSE2: # %bb.0: # %entry 5272; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 5273; SSE2-NEXT: movdqa %xmm4, %xmm9 5274; SSE2-NEXT: pxor %xmm8, %xmm9 5275; SSE2-NEXT: movdqa %xmm0, %xmm10 5276; SSE2-NEXT: pxor %xmm8, %xmm10 5277; SSE2-NEXT: movdqa %xmm10, %xmm11 5278; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 5279; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5280; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 5281; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 5282; SSE2-NEXT: pand %xmm12, %xmm9 5283; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 5284; SSE2-NEXT: por %xmm9, %xmm10 5285; SSE2-NEXT: pand %xmm10, %xmm0 5286; SSE2-NEXT: pandn %xmm4, %xmm10 5287; SSE2-NEXT: por %xmm10, %xmm0 5288; SSE2-NEXT: movdqa %xmm5, %xmm9 5289; SSE2-NEXT: pxor %xmm8, %xmm9 5290; SSE2-NEXT: movdqa %xmm1, %xmm4 5291; SSE2-NEXT: pxor %xmm8, %xmm4 5292; SSE2-NEXT: movdqa %xmm4, %xmm10 5293; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 5294; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 5295; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 5296; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 5297; SSE2-NEXT: pand %xmm11, %xmm9 5298; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 5299; SSE2-NEXT: por %xmm9, %xmm4 5300; SSE2-NEXT: pand %xmm4, %xmm1 5301; SSE2-NEXT: pandn %xmm5, %xmm4 5302; SSE2-NEXT: por %xmm4, %xmm1 5303; SSE2-NEXT: movdqa %xmm6, %xmm4 5304; SSE2-NEXT: pxor %xmm8, %xmm4 5305; SSE2-NEXT: movdqa %xmm2, %xmm5 5306; SSE2-NEXT: pxor %xmm8, %xmm5 5307; SSE2-NEXT: movdqa %xmm5, %xmm9 5308; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 5309; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 5310; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 5311; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 5312; SSE2-NEXT: pand %xmm10, %xmm4 5313; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 5314; SSE2-NEXT: por %xmm4, %xmm5 5315; SSE2-NEXT: pand %xmm5, %xmm2 5316; SSE2-NEXT: pandn %xmm6, %xmm5 5317; SSE2-NEXT: por %xmm5, %xmm2 5318; SSE2-NEXT: movdqa %xmm7, %xmm4 5319; SSE2-NEXT: pxor %xmm8, %xmm4 5320; SSE2-NEXT: pxor %xmm3, %xmm8 5321; SSE2-NEXT: movdqa %xmm8, %xmm5 5322; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 5323; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 5324; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 5325; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 5326; SSE2-NEXT: pand %xmm6, %xmm4 5327; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 5328; SSE2-NEXT: por %xmm4, %xmm5 5329; SSE2-NEXT: pand %xmm5, %xmm3 5330; SSE2-NEXT: pandn %xmm7, %xmm5 5331; SSE2-NEXT: por %xmm5, %xmm3 5332; SSE2-NEXT: retq 5333; 5334; SSE4-LABEL: test127: 5335; SSE4: # %bb.0: # %entry 5336; SSE4-NEXT: movdqa %xmm7, %xmm8 5337; SSE4-NEXT: movdqa %xmm6, %xmm9 5338; SSE4-NEXT: movdqa %xmm5, %xmm10 5339; SSE4-NEXT: movdqa %xmm4, %xmm5 5340; SSE4-NEXT: movdqa %xmm0, %xmm6 5341; SSE4-NEXT: movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808] 5342; SSE4-NEXT: pxor %xmm7, %xmm4 5343; SSE4-NEXT: pxor %xmm7, %xmm0 5344; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 5345; SSE4-NEXT: blendvpd %xmm0, %xmm6, %xmm5 5346; SSE4-NEXT: movdqa %xmm10, %xmm4 5347; SSE4-NEXT: pxor %xmm7, %xmm4 5348; SSE4-NEXT: movdqa %xmm1, %xmm0 5349; SSE4-NEXT: pxor %xmm7, %xmm0 5350; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 5351; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm10 5352; SSE4-NEXT: movdqa %xmm9, %xmm1 5353; SSE4-NEXT: pxor %xmm7, %xmm1 5354; SSE4-NEXT: movdqa %xmm2, %xmm0 5355; SSE4-NEXT: pxor %xmm7, %xmm0 5356; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 5357; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm9 5358; SSE4-NEXT: movdqa %xmm8, %xmm0 5359; SSE4-NEXT: pxor %xmm7, %xmm0 5360; SSE4-NEXT: pxor %xmm3, %xmm7 5361; SSE4-NEXT: pcmpgtq %xmm0, %xmm7 5362; SSE4-NEXT: movdqa %xmm7, %xmm0 5363; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 5364; SSE4-NEXT: movapd %xmm5, %xmm0 5365; SSE4-NEXT: movapd %xmm10, %xmm1 5366; SSE4-NEXT: movapd %xmm9, %xmm2 5367; SSE4-NEXT: movapd %xmm8, %xmm3 5368; SSE4-NEXT: retq 5369; 5370; AVX1-LABEL: test127: 5371; AVX1: # %bb.0: # %entry 5372; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5373; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5374; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5375; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5376; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5377; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5378; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm6 5379; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7 5380; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5381; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5382; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5383; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5384; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 5385; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5386; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5387; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 5388; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm4 5389; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5 5390; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5391; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 5392; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5393; AVX1-NEXT: retq 5394; 5395; AVX2-LABEL: test127: 5396; AVX2: # %bb.0: # %entry 5397; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 5398; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm5 5399; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 5400; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5401; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5402; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm2 5403; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm4 5404; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 5405; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5406; AVX2-NEXT: retq 5407; 5408; AVX512-LABEL: test127: 5409; AVX512: # %bb.0: # %entry 5410; AVX512-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 5411; AVX512-NEXT: retq 5412entry: 5413 %cmp = icmp ugt <8 x i64> %a, %b 5414 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5415 ret <8 x i64> %sel 5416} 5417 5418define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) { 5419; SSE2-LABEL: test128: 5420; SSE2: # %bb.0: # %entry 5421; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 5422; SSE2-NEXT: movdqa %xmm4, %xmm9 5423; SSE2-NEXT: pxor %xmm8, %xmm9 5424; SSE2-NEXT: movdqa %xmm0, %xmm10 5425; SSE2-NEXT: pxor %xmm8, %xmm10 5426; SSE2-NEXT: movdqa %xmm10, %xmm11 5427; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 5428; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5429; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 5430; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 5431; SSE2-NEXT: pand %xmm12, %xmm9 5432; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 5433; SSE2-NEXT: por %xmm9, %xmm10 5434; SSE2-NEXT: pand %xmm10, %xmm0 5435; SSE2-NEXT: pandn %xmm4, %xmm10 5436; SSE2-NEXT: por %xmm10, %xmm0 5437; SSE2-NEXT: movdqa %xmm5, %xmm9 5438; SSE2-NEXT: pxor %xmm8, %xmm9 5439; SSE2-NEXT: movdqa %xmm1, %xmm4 5440; SSE2-NEXT: pxor %xmm8, %xmm4 5441; SSE2-NEXT: movdqa %xmm4, %xmm10 5442; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 5443; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 5444; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 5445; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 5446; SSE2-NEXT: pand %xmm11, %xmm9 5447; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 5448; SSE2-NEXT: por %xmm9, %xmm4 5449; SSE2-NEXT: pand %xmm4, %xmm1 5450; SSE2-NEXT: pandn %xmm5, %xmm4 5451; SSE2-NEXT: por %xmm4, %xmm1 5452; SSE2-NEXT: movdqa %xmm6, %xmm4 5453; SSE2-NEXT: pxor %xmm8, %xmm4 5454; SSE2-NEXT: movdqa %xmm2, %xmm5 5455; SSE2-NEXT: pxor %xmm8, %xmm5 5456; SSE2-NEXT: movdqa %xmm5, %xmm9 5457; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 5458; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 5459; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 5460; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 5461; SSE2-NEXT: pand %xmm10, %xmm4 5462; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 5463; SSE2-NEXT: por %xmm4, %xmm5 5464; SSE2-NEXT: pand %xmm5, %xmm2 5465; SSE2-NEXT: pandn %xmm6, %xmm5 5466; SSE2-NEXT: por %xmm5, %xmm2 5467; SSE2-NEXT: movdqa %xmm7, %xmm4 5468; SSE2-NEXT: pxor %xmm8, %xmm4 5469; SSE2-NEXT: pxor %xmm3, %xmm8 5470; SSE2-NEXT: movdqa %xmm8, %xmm5 5471; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 5472; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 5473; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 5474; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 5475; SSE2-NEXT: pand %xmm6, %xmm4 5476; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 5477; SSE2-NEXT: por %xmm4, %xmm5 5478; SSE2-NEXT: pand %xmm5, %xmm3 5479; SSE2-NEXT: pandn %xmm7, %xmm5 5480; SSE2-NEXT: por %xmm5, %xmm3 5481; SSE2-NEXT: retq 5482; 5483; SSE4-LABEL: test128: 5484; SSE4: # %bb.0: # %entry 5485; SSE4-NEXT: movdqa %xmm7, %xmm8 5486; SSE4-NEXT: movdqa %xmm6, %xmm9 5487; SSE4-NEXT: movdqa %xmm5, %xmm10 5488; SSE4-NEXT: movdqa %xmm4, %xmm5 5489; SSE4-NEXT: movdqa %xmm0, %xmm6 5490; SSE4-NEXT: movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808] 5491; SSE4-NEXT: pxor %xmm7, %xmm4 5492; SSE4-NEXT: pxor %xmm7, %xmm0 5493; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 5494; SSE4-NEXT: blendvpd %xmm0, %xmm6, %xmm5 5495; SSE4-NEXT: movdqa %xmm10, %xmm4 5496; SSE4-NEXT: pxor %xmm7, %xmm4 5497; SSE4-NEXT: movdqa %xmm1, %xmm0 5498; SSE4-NEXT: pxor %xmm7, %xmm0 5499; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 5500; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm10 5501; SSE4-NEXT: movdqa %xmm9, %xmm1 5502; SSE4-NEXT: pxor %xmm7, %xmm1 5503; SSE4-NEXT: movdqa %xmm2, %xmm0 5504; SSE4-NEXT: pxor %xmm7, %xmm0 5505; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 5506; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm9 5507; SSE4-NEXT: movdqa %xmm8, %xmm0 5508; SSE4-NEXT: pxor %xmm7, %xmm0 5509; SSE4-NEXT: pxor %xmm3, %xmm7 5510; SSE4-NEXT: pcmpgtq %xmm0, %xmm7 5511; SSE4-NEXT: movdqa %xmm7, %xmm0 5512; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 5513; SSE4-NEXT: movapd %xmm5, %xmm0 5514; SSE4-NEXT: movapd %xmm10, %xmm1 5515; SSE4-NEXT: movapd %xmm9, %xmm2 5516; SSE4-NEXT: movapd %xmm8, %xmm3 5517; SSE4-NEXT: retq 5518; 5519; AVX1-LABEL: test128: 5520; AVX1: # %bb.0: # %entry 5521; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5522; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5523; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5524; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5525; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5526; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5527; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm6 5528; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7 5529; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5530; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5531; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5532; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5533; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 5534; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5535; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5536; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 5537; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm4 5538; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5 5539; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5540; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 5541; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5542; AVX1-NEXT: retq 5543; 5544; AVX2-LABEL: test128: 5545; AVX2: # %bb.0: # %entry 5546; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 5547; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm5 5548; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 5549; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5550; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5551; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm2 5552; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm4 5553; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 5554; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5555; AVX2-NEXT: retq 5556; 5557; AVX512-LABEL: test128: 5558; AVX512: # %bb.0: # %entry 5559; AVX512-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 5560; AVX512-NEXT: retq 5561entry: 5562 %cmp = icmp uge <8 x i64> %a, %b 5563 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5564 ret <8 x i64> %sel 5565} 5566 5567define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) { 5568; SSE2-LABEL: test129: 5569; SSE2: # %bb.0: # %entry 5570; SSE2-NEXT: movdqa %xmm0, %xmm8 5571; SSE2-NEXT: pcmpgtb %xmm4, %xmm8 5572; SSE2-NEXT: pand %xmm8, %xmm0 5573; SSE2-NEXT: pandn %xmm4, %xmm8 5574; SSE2-NEXT: por %xmm8, %xmm0 5575; SSE2-NEXT: movdqa %xmm1, %xmm4 5576; SSE2-NEXT: pcmpgtb %xmm5, %xmm4 5577; SSE2-NEXT: pand %xmm4, %xmm1 5578; SSE2-NEXT: pandn %xmm5, %xmm4 5579; SSE2-NEXT: por %xmm4, %xmm1 5580; SSE2-NEXT: movdqa %xmm2, %xmm4 5581; SSE2-NEXT: pcmpgtb %xmm6, %xmm4 5582; SSE2-NEXT: pand %xmm4, %xmm2 5583; SSE2-NEXT: pandn %xmm6, %xmm4 5584; SSE2-NEXT: por %xmm4, %xmm2 5585; SSE2-NEXT: movdqa %xmm3, %xmm4 5586; SSE2-NEXT: pcmpgtb %xmm7, %xmm4 5587; SSE2-NEXT: pand %xmm4, %xmm3 5588; SSE2-NEXT: pandn %xmm7, %xmm4 5589; SSE2-NEXT: por %xmm4, %xmm3 5590; SSE2-NEXT: retq 5591; 5592; SSE4-LABEL: test129: 5593; SSE4: # %bb.0: # %entry 5594; SSE4-NEXT: pmaxsb %xmm4, %xmm0 5595; SSE4-NEXT: pmaxsb %xmm5, %xmm1 5596; SSE4-NEXT: pmaxsb %xmm6, %xmm2 5597; SSE4-NEXT: pmaxsb %xmm7, %xmm3 5598; SSE4-NEXT: retq 5599; 5600; AVX1-LABEL: test129: 5601; AVX1: # %bb.0: # %entry 5602; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5603; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5604; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 5605; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 5606; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5607; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5608; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5609; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 5610; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 5611; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5612; AVX1-NEXT: retq 5613; 5614; AVX2-LABEL: test129: 5615; AVX2: # %bb.0: # %entry 5616; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 5617; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 5618; AVX2-NEXT: retq 5619; 5620; AVX512F-LABEL: test129: 5621; AVX512F: # %bb.0: # %entry 5622; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 5623; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 5624; AVX512F-NEXT: vpmaxsb %ymm2, %ymm3, %ymm2 5625; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 5626; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 5627; AVX512F-NEXT: retq 5628; 5629; AVX512BW-LABEL: test129: 5630; AVX512BW: # %bb.0: # %entry 5631; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 5632; AVX512BW-NEXT: retq 5633entry: 5634 %cmp = icmp slt <64 x i8> %a, %b 5635 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5636 ret <64 x i8> %sel 5637} 5638 5639define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) { 5640; SSE2-LABEL: test130: 5641; SSE2: # %bb.0: # %entry 5642; SSE2-NEXT: movdqa %xmm0, %xmm8 5643; SSE2-NEXT: pcmpgtb %xmm4, %xmm8 5644; SSE2-NEXT: pand %xmm8, %xmm0 5645; SSE2-NEXT: pandn %xmm4, %xmm8 5646; SSE2-NEXT: por %xmm8, %xmm0 5647; SSE2-NEXT: movdqa %xmm1, %xmm4 5648; SSE2-NEXT: pcmpgtb %xmm5, %xmm4 5649; SSE2-NEXT: pand %xmm4, %xmm1 5650; SSE2-NEXT: pandn %xmm5, %xmm4 5651; SSE2-NEXT: por %xmm4, %xmm1 5652; SSE2-NEXT: movdqa %xmm2, %xmm4 5653; SSE2-NEXT: pcmpgtb %xmm6, %xmm4 5654; SSE2-NEXT: pand %xmm4, %xmm2 5655; SSE2-NEXT: pandn %xmm6, %xmm4 5656; SSE2-NEXT: por %xmm4, %xmm2 5657; SSE2-NEXT: movdqa %xmm3, %xmm4 5658; SSE2-NEXT: pcmpgtb %xmm7, %xmm4 5659; SSE2-NEXT: pand %xmm4, %xmm3 5660; SSE2-NEXT: pandn %xmm7, %xmm4 5661; SSE2-NEXT: por %xmm4, %xmm3 5662; SSE2-NEXT: retq 5663; 5664; SSE4-LABEL: test130: 5665; SSE4: # %bb.0: # %entry 5666; SSE4-NEXT: pmaxsb %xmm4, %xmm0 5667; SSE4-NEXT: pmaxsb %xmm5, %xmm1 5668; SSE4-NEXT: pmaxsb %xmm6, %xmm2 5669; SSE4-NEXT: pmaxsb %xmm7, %xmm3 5670; SSE4-NEXT: retq 5671; 5672; AVX1-LABEL: test130: 5673; AVX1: # %bb.0: # %entry 5674; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5675; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5676; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 5677; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 5678; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5679; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5680; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5681; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 5682; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 5683; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5684; AVX1-NEXT: retq 5685; 5686; AVX2-LABEL: test130: 5687; AVX2: # %bb.0: # %entry 5688; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 5689; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 5690; AVX2-NEXT: retq 5691; 5692; AVX512F-LABEL: test130: 5693; AVX512F: # %bb.0: # %entry 5694; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 5695; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 5696; AVX512F-NEXT: vpmaxsb %ymm2, %ymm3, %ymm2 5697; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 5698; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 5699; AVX512F-NEXT: retq 5700; 5701; AVX512BW-LABEL: test130: 5702; AVX512BW: # %bb.0: # %entry 5703; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 5704; AVX512BW-NEXT: retq 5705entry: 5706 %cmp = icmp sle <64 x i8> %a, %b 5707 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5708 ret <64 x i8> %sel 5709} 5710 5711define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) { 5712; SSE2-LABEL: test131: 5713; SSE2: # %bb.0: # %entry 5714; SSE2-NEXT: movdqa %xmm4, %xmm8 5715; SSE2-NEXT: pcmpgtb %xmm0, %xmm8 5716; SSE2-NEXT: pand %xmm8, %xmm0 5717; SSE2-NEXT: pandn %xmm4, %xmm8 5718; SSE2-NEXT: por %xmm8, %xmm0 5719; SSE2-NEXT: movdqa %xmm5, %xmm4 5720; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 5721; SSE2-NEXT: pand %xmm4, %xmm1 5722; SSE2-NEXT: pandn %xmm5, %xmm4 5723; SSE2-NEXT: por %xmm4, %xmm1 5724; SSE2-NEXT: movdqa %xmm6, %xmm4 5725; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 5726; SSE2-NEXT: pand %xmm4, %xmm2 5727; SSE2-NEXT: pandn %xmm6, %xmm4 5728; SSE2-NEXT: por %xmm4, %xmm2 5729; SSE2-NEXT: movdqa %xmm7, %xmm4 5730; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 5731; SSE2-NEXT: pand %xmm4, %xmm3 5732; SSE2-NEXT: pandn %xmm7, %xmm4 5733; SSE2-NEXT: por %xmm4, %xmm3 5734; SSE2-NEXT: retq 5735; 5736; SSE4-LABEL: test131: 5737; SSE4: # %bb.0: # %entry 5738; SSE4-NEXT: pminsb %xmm4, %xmm0 5739; SSE4-NEXT: pminsb %xmm5, %xmm1 5740; SSE4-NEXT: pminsb %xmm6, %xmm2 5741; SSE4-NEXT: pminsb %xmm7, %xmm3 5742; SSE4-NEXT: retq 5743; 5744; AVX1-LABEL: test131: 5745; AVX1: # %bb.0: # %entry 5746; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5747; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5748; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 5749; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 5750; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5751; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5752; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5753; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 5754; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 5755; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5756; AVX1-NEXT: retq 5757; 5758; AVX2-LABEL: test131: 5759; AVX2: # %bb.0: # %entry 5760; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 5761; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 5762; AVX2-NEXT: retq 5763; 5764; AVX512F-LABEL: test131: 5765; AVX512F: # %bb.0: # %entry 5766; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 5767; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 5768; AVX512F-NEXT: vpminsb %ymm2, %ymm3, %ymm2 5769; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 5770; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 5771; AVX512F-NEXT: retq 5772; 5773; AVX512BW-LABEL: test131: 5774; AVX512BW: # %bb.0: # %entry 5775; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 5776; AVX512BW-NEXT: retq 5777entry: 5778 %cmp = icmp sgt <64 x i8> %a, %b 5779 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5780 ret <64 x i8> %sel 5781} 5782 5783define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) { 5784; SSE2-LABEL: test132: 5785; SSE2: # %bb.0: # %entry 5786; SSE2-NEXT: movdqa %xmm4, %xmm8 5787; SSE2-NEXT: pcmpgtb %xmm0, %xmm8 5788; SSE2-NEXT: pand %xmm8, %xmm0 5789; SSE2-NEXT: pandn %xmm4, %xmm8 5790; SSE2-NEXT: por %xmm8, %xmm0 5791; SSE2-NEXT: movdqa %xmm5, %xmm4 5792; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 5793; SSE2-NEXT: pand %xmm4, %xmm1 5794; SSE2-NEXT: pandn %xmm5, %xmm4 5795; SSE2-NEXT: por %xmm4, %xmm1 5796; SSE2-NEXT: movdqa %xmm6, %xmm4 5797; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 5798; SSE2-NEXT: pand %xmm4, %xmm2 5799; SSE2-NEXT: pandn %xmm6, %xmm4 5800; SSE2-NEXT: por %xmm4, %xmm2 5801; SSE2-NEXT: movdqa %xmm7, %xmm4 5802; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 5803; SSE2-NEXT: pand %xmm4, %xmm3 5804; SSE2-NEXT: pandn %xmm7, %xmm4 5805; SSE2-NEXT: por %xmm4, %xmm3 5806; SSE2-NEXT: retq 5807; 5808; SSE4-LABEL: test132: 5809; SSE4: # %bb.0: # %entry 5810; SSE4-NEXT: pminsb %xmm4, %xmm0 5811; SSE4-NEXT: pminsb %xmm5, %xmm1 5812; SSE4-NEXT: pminsb %xmm6, %xmm2 5813; SSE4-NEXT: pminsb %xmm7, %xmm3 5814; SSE4-NEXT: retq 5815; 5816; AVX1-LABEL: test132: 5817; AVX1: # %bb.0: # %entry 5818; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5819; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5820; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 5821; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 5822; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5823; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5824; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5825; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 5826; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 5827; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5828; AVX1-NEXT: retq 5829; 5830; AVX2-LABEL: test132: 5831; AVX2: # %bb.0: # %entry 5832; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 5833; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 5834; AVX2-NEXT: retq 5835; 5836; AVX512F-LABEL: test132: 5837; AVX512F: # %bb.0: # %entry 5838; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 5839; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 5840; AVX512F-NEXT: vpminsb %ymm2, %ymm3, %ymm2 5841; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 5842; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 5843; AVX512F-NEXT: retq 5844; 5845; AVX512BW-LABEL: test132: 5846; AVX512BW: # %bb.0: # %entry 5847; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 5848; AVX512BW-NEXT: retq 5849entry: 5850 %cmp = icmp sge <64 x i8> %a, %b 5851 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5852 ret <64 x i8> %sel 5853} 5854 5855define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) { 5856; SSE-LABEL: test133: 5857; SSE: # %bb.0: # %entry 5858; SSE-NEXT: pmaxub %xmm4, %xmm0 5859; SSE-NEXT: pmaxub %xmm5, %xmm1 5860; SSE-NEXT: pmaxub %xmm6, %xmm2 5861; SSE-NEXT: pmaxub %xmm7, %xmm3 5862; SSE-NEXT: retq 5863; 5864; AVX1-LABEL: test133: 5865; AVX1: # %bb.0: # %entry 5866; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5867; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5868; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 5869; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 5870; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5871; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5872; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5873; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 5874; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 5875; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5876; AVX1-NEXT: retq 5877; 5878; AVX2-LABEL: test133: 5879; AVX2: # %bb.0: # %entry 5880; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 5881; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 5882; AVX2-NEXT: retq 5883; 5884; AVX512F-LABEL: test133: 5885; AVX512F: # %bb.0: # %entry 5886; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 5887; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 5888; AVX512F-NEXT: vpmaxub %ymm2, %ymm3, %ymm2 5889; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 5890; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 5891; AVX512F-NEXT: retq 5892; 5893; AVX512BW-LABEL: test133: 5894; AVX512BW: # %bb.0: # %entry 5895; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 5896; AVX512BW-NEXT: retq 5897entry: 5898 %cmp = icmp ult <64 x i8> %a, %b 5899 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5900 ret <64 x i8> %sel 5901} 5902 5903define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) { 5904; SSE-LABEL: test134: 5905; SSE: # %bb.0: # %entry 5906; SSE-NEXT: pmaxub %xmm4, %xmm0 5907; SSE-NEXT: pmaxub %xmm5, %xmm1 5908; SSE-NEXT: pmaxub %xmm6, %xmm2 5909; SSE-NEXT: pmaxub %xmm7, %xmm3 5910; SSE-NEXT: retq 5911; 5912; AVX1-LABEL: test134: 5913; AVX1: # %bb.0: # %entry 5914; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5915; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5916; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 5917; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 5918; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5919; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5920; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5921; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 5922; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 5923; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5924; AVX1-NEXT: retq 5925; 5926; AVX2-LABEL: test134: 5927; AVX2: # %bb.0: # %entry 5928; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 5929; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 5930; AVX2-NEXT: retq 5931; 5932; AVX512F-LABEL: test134: 5933; AVX512F: # %bb.0: # %entry 5934; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 5935; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 5936; AVX512F-NEXT: vpmaxub %ymm2, %ymm3, %ymm2 5937; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 5938; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 5939; AVX512F-NEXT: retq 5940; 5941; AVX512BW-LABEL: test134: 5942; AVX512BW: # %bb.0: # %entry 5943; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 5944; AVX512BW-NEXT: retq 5945entry: 5946 %cmp = icmp ule <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 5951define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) { 5952; SSE-LABEL: test135: 5953; SSE: # %bb.0: # %entry 5954; SSE-NEXT: pminub %xmm4, %xmm0 5955; SSE-NEXT: pminub %xmm5, %xmm1 5956; SSE-NEXT: pminub %xmm6, %xmm2 5957; SSE-NEXT: pminub %xmm7, %xmm3 5958; SSE-NEXT: retq 5959; 5960; AVX1-LABEL: test135: 5961; AVX1: # %bb.0: # %entry 5962; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5963; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5964; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 5965; AVX1-NEXT: vpminub %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: vpminub %xmm2, %xmm4, %xmm2 5970; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 5971; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5972; AVX1-NEXT: retq 5973; 5974; AVX2-LABEL: test135: 5975; AVX2: # %bb.0: # %entry 5976; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 5977; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 5978; AVX2-NEXT: retq 5979; 5980; AVX512F-LABEL: test135: 5981; AVX512F: # %bb.0: # %entry 5982; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 5983; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 5984; AVX512F-NEXT: vpminub %ymm2, %ymm3, %ymm2 5985; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 5986; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 5987; AVX512F-NEXT: retq 5988; 5989; AVX512BW-LABEL: test135: 5990; AVX512BW: # %bb.0: # %entry 5991; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 5992; AVX512BW-NEXT: retq 5993entry: 5994 %cmp = icmp ugt <64 x i8> %a, %b 5995 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5996 ret <64 x i8> %sel 5997} 5998 5999define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) { 6000; SSE-LABEL: test136: 6001; SSE: # %bb.0: # %entry 6002; SSE-NEXT: pminub %xmm4, %xmm0 6003; SSE-NEXT: pminub %xmm5, %xmm1 6004; SSE-NEXT: pminub %xmm6, %xmm2 6005; SSE-NEXT: pminub %xmm7, %xmm3 6006; SSE-NEXT: retq 6007; 6008; AVX1-LABEL: test136: 6009; AVX1: # %bb.0: # %entry 6010; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6011; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6012; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 6013; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 6014; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6015; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6016; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6017; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 6018; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 6019; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6020; AVX1-NEXT: retq 6021; 6022; AVX2-LABEL: test136: 6023; AVX2: # %bb.0: # %entry 6024; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 6025; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 6026; AVX2-NEXT: retq 6027; 6028; AVX512F-LABEL: test136: 6029; AVX512F: # %bb.0: # %entry 6030; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6031; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6032; AVX512F-NEXT: vpminub %ymm2, %ymm3, %ymm2 6033; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 6034; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6035; AVX512F-NEXT: retq 6036; 6037; AVX512BW-LABEL: test136: 6038; AVX512BW: # %bb.0: # %entry 6039; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 6040; AVX512BW-NEXT: retq 6041entry: 6042 %cmp = icmp uge <64 x i8> %a, %b 6043 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6044 ret <64 x i8> %sel 6045} 6046 6047define <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) { 6048; SSE-LABEL: test137: 6049; SSE: # %bb.0: # %entry 6050; SSE-NEXT: pmaxsw %xmm4, %xmm0 6051; SSE-NEXT: pmaxsw %xmm5, %xmm1 6052; SSE-NEXT: pmaxsw %xmm6, %xmm2 6053; SSE-NEXT: pmaxsw %xmm7, %xmm3 6054; SSE-NEXT: retq 6055; 6056; AVX1-LABEL: test137: 6057; AVX1: # %bb.0: # %entry 6058; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6059; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6060; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 6061; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 6062; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6063; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6064; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6065; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 6066; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 6067; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6068; AVX1-NEXT: retq 6069; 6070; AVX2-LABEL: test137: 6071; AVX2: # %bb.0: # %entry 6072; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 6073; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 6074; AVX2-NEXT: retq 6075; 6076; AVX512F-LABEL: test137: 6077; AVX512F: # %bb.0: # %entry 6078; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6079; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6080; AVX512F-NEXT: vpmaxsw %ymm2, %ymm3, %ymm2 6081; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 6082; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6083; AVX512F-NEXT: retq 6084; 6085; AVX512BW-LABEL: test137: 6086; AVX512BW: # %bb.0: # %entry 6087; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 6088; AVX512BW-NEXT: retq 6089entry: 6090 %cmp = icmp slt <32 x i16> %a, %b 6091 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6092 ret <32 x i16> %sel 6093} 6094 6095define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) { 6096; SSE-LABEL: test138: 6097; SSE: # %bb.0: # %entry 6098; SSE-NEXT: pmaxsw %xmm4, %xmm0 6099; SSE-NEXT: pmaxsw %xmm5, %xmm1 6100; SSE-NEXT: pmaxsw %xmm6, %xmm2 6101; SSE-NEXT: pmaxsw %xmm7, %xmm3 6102; SSE-NEXT: retq 6103; 6104; AVX1-LABEL: test138: 6105; AVX1: # %bb.0: # %entry 6106; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6107; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6108; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 6109; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 6110; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6111; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6112; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6113; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 6114; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 6115; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6116; AVX1-NEXT: retq 6117; 6118; AVX2-LABEL: test138: 6119; AVX2: # %bb.0: # %entry 6120; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 6121; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 6122; AVX2-NEXT: retq 6123; 6124; AVX512F-LABEL: test138: 6125; AVX512F: # %bb.0: # %entry 6126; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6127; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6128; AVX512F-NEXT: vpmaxsw %ymm2, %ymm3, %ymm2 6129; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 6130; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6131; AVX512F-NEXT: retq 6132; 6133; AVX512BW-LABEL: test138: 6134; AVX512BW: # %bb.0: # %entry 6135; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 6136; AVX512BW-NEXT: retq 6137entry: 6138 %cmp = icmp sle <32 x i16> %a, %b 6139 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6140 ret <32 x i16> %sel 6141} 6142 6143define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) { 6144; SSE-LABEL: test139: 6145; SSE: # %bb.0: # %entry 6146; SSE-NEXT: pminsw %xmm4, %xmm0 6147; SSE-NEXT: pminsw %xmm5, %xmm1 6148; SSE-NEXT: pminsw %xmm6, %xmm2 6149; SSE-NEXT: pminsw %xmm7, %xmm3 6150; SSE-NEXT: retq 6151; 6152; AVX1-LABEL: test139: 6153; AVX1: # %bb.0: # %entry 6154; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6155; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6156; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 6157; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 6158; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6159; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6160; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6161; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 6162; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 6163; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6164; AVX1-NEXT: retq 6165; 6166; AVX2-LABEL: test139: 6167; AVX2: # %bb.0: # %entry 6168; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 6169; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 6170; AVX2-NEXT: retq 6171; 6172; AVX512F-LABEL: test139: 6173; AVX512F: # %bb.0: # %entry 6174; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6175; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6176; AVX512F-NEXT: vpminsw %ymm2, %ymm3, %ymm2 6177; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 6178; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6179; AVX512F-NEXT: retq 6180; 6181; AVX512BW-LABEL: test139: 6182; AVX512BW: # %bb.0: # %entry 6183; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 6184; AVX512BW-NEXT: retq 6185entry: 6186 %cmp = icmp sgt <32 x i16> %a, %b 6187 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6188 ret <32 x i16> %sel 6189} 6190 6191define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) { 6192; SSE-LABEL: test140: 6193; SSE: # %bb.0: # %entry 6194; SSE-NEXT: pminsw %xmm4, %xmm0 6195; SSE-NEXT: pminsw %xmm5, %xmm1 6196; SSE-NEXT: pminsw %xmm6, %xmm2 6197; SSE-NEXT: pminsw %xmm7, %xmm3 6198; SSE-NEXT: retq 6199; 6200; AVX1-LABEL: test140: 6201; AVX1: # %bb.0: # %entry 6202; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6203; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6204; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 6205; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 6206; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6207; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6208; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6209; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 6210; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 6211; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6212; AVX1-NEXT: retq 6213; 6214; AVX2-LABEL: test140: 6215; AVX2: # %bb.0: # %entry 6216; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 6217; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 6218; AVX2-NEXT: retq 6219; 6220; AVX512F-LABEL: test140: 6221; AVX512F: # %bb.0: # %entry 6222; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6223; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6224; AVX512F-NEXT: vpminsw %ymm2, %ymm3, %ymm2 6225; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 6226; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6227; AVX512F-NEXT: retq 6228; 6229; AVX512BW-LABEL: test140: 6230; AVX512BW: # %bb.0: # %entry 6231; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 6232; AVX512BW-NEXT: retq 6233entry: 6234 %cmp = icmp sge <32 x i16> %a, %b 6235 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6236 ret <32 x i16> %sel 6237} 6238 6239define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) { 6240; SSE2-LABEL: test141: 6241; SSE2: # %bb.0: # %entry 6242; SSE2-NEXT: psubusw %xmm0, %xmm4 6243; SSE2-NEXT: paddw %xmm4, %xmm0 6244; SSE2-NEXT: psubusw %xmm1, %xmm5 6245; SSE2-NEXT: paddw %xmm5, %xmm1 6246; SSE2-NEXT: psubusw %xmm2, %xmm6 6247; SSE2-NEXT: paddw %xmm6, %xmm2 6248; SSE2-NEXT: psubusw %xmm3, %xmm7 6249; SSE2-NEXT: paddw %xmm7, %xmm3 6250; SSE2-NEXT: retq 6251; 6252; SSE4-LABEL: test141: 6253; SSE4: # %bb.0: # %entry 6254; SSE4-NEXT: pmaxuw %xmm4, %xmm0 6255; SSE4-NEXT: pmaxuw %xmm5, %xmm1 6256; SSE4-NEXT: pmaxuw %xmm6, %xmm2 6257; SSE4-NEXT: pmaxuw %xmm7, %xmm3 6258; SSE4-NEXT: retq 6259; 6260; AVX1-LABEL: test141: 6261; AVX1: # %bb.0: # %entry 6262; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6263; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6264; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 6265; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 6266; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6267; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6268; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6269; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 6270; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 6271; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6272; AVX1-NEXT: retq 6273; 6274; AVX2-LABEL: test141: 6275; AVX2: # %bb.0: # %entry 6276; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 6277; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 6278; AVX2-NEXT: retq 6279; 6280; AVX512F-LABEL: test141: 6281; AVX512F: # %bb.0: # %entry 6282; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6283; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6284; AVX512F-NEXT: vpmaxuw %ymm2, %ymm3, %ymm2 6285; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 6286; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6287; AVX512F-NEXT: retq 6288; 6289; AVX512BW-LABEL: test141: 6290; AVX512BW: # %bb.0: # %entry 6291; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 6292; AVX512BW-NEXT: retq 6293entry: 6294 %cmp = icmp ult <32 x i16> %a, %b 6295 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6296 ret <32 x i16> %sel 6297} 6298 6299define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) { 6300; SSE2-LABEL: test142: 6301; SSE2: # %bb.0: # %entry 6302; SSE2-NEXT: psubusw %xmm0, %xmm4 6303; SSE2-NEXT: paddw %xmm4, %xmm0 6304; SSE2-NEXT: psubusw %xmm1, %xmm5 6305; SSE2-NEXT: paddw %xmm5, %xmm1 6306; SSE2-NEXT: psubusw %xmm2, %xmm6 6307; SSE2-NEXT: paddw %xmm6, %xmm2 6308; SSE2-NEXT: psubusw %xmm3, %xmm7 6309; SSE2-NEXT: paddw %xmm7, %xmm3 6310; SSE2-NEXT: retq 6311; 6312; SSE4-LABEL: test142: 6313; SSE4: # %bb.0: # %entry 6314; SSE4-NEXT: pmaxuw %xmm4, %xmm0 6315; SSE4-NEXT: pmaxuw %xmm5, %xmm1 6316; SSE4-NEXT: pmaxuw %xmm6, %xmm2 6317; SSE4-NEXT: pmaxuw %xmm7, %xmm3 6318; SSE4-NEXT: retq 6319; 6320; AVX1-LABEL: test142: 6321; AVX1: # %bb.0: # %entry 6322; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6323; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6324; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 6325; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 6326; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6327; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6328; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6329; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 6330; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 6331; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6332; AVX1-NEXT: retq 6333; 6334; AVX2-LABEL: test142: 6335; AVX2: # %bb.0: # %entry 6336; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 6337; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 6338; AVX2-NEXT: retq 6339; 6340; AVX512F-LABEL: test142: 6341; AVX512F: # %bb.0: # %entry 6342; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6343; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6344; AVX512F-NEXT: vpmaxuw %ymm2, %ymm3, %ymm2 6345; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 6346; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6347; AVX512F-NEXT: retq 6348; 6349; AVX512BW-LABEL: test142: 6350; AVX512BW: # %bb.0: # %entry 6351; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 6352; AVX512BW-NEXT: retq 6353entry: 6354 %cmp = icmp ule <32 x i16> %a, %b 6355 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6356 ret <32 x i16> %sel 6357} 6358 6359define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) { 6360; SSE2-LABEL: test143: 6361; SSE2: # %bb.0: # %entry 6362; SSE2-NEXT: movdqa %xmm0, %xmm8 6363; SSE2-NEXT: psubusw %xmm4, %xmm8 6364; SSE2-NEXT: psubw %xmm8, %xmm0 6365; SSE2-NEXT: movdqa %xmm1, %xmm4 6366; SSE2-NEXT: psubusw %xmm5, %xmm4 6367; SSE2-NEXT: psubw %xmm4, %xmm1 6368; SSE2-NEXT: movdqa %xmm2, %xmm4 6369; SSE2-NEXT: psubusw %xmm6, %xmm4 6370; SSE2-NEXT: psubw %xmm4, %xmm2 6371; SSE2-NEXT: movdqa %xmm3, %xmm4 6372; SSE2-NEXT: psubusw %xmm7, %xmm4 6373; SSE2-NEXT: psubw %xmm4, %xmm3 6374; SSE2-NEXT: retq 6375; 6376; SSE4-LABEL: test143: 6377; SSE4: # %bb.0: # %entry 6378; SSE4-NEXT: pminuw %xmm4, %xmm0 6379; SSE4-NEXT: pminuw %xmm5, %xmm1 6380; SSE4-NEXT: pminuw %xmm6, %xmm2 6381; SSE4-NEXT: pminuw %xmm7, %xmm3 6382; SSE4-NEXT: retq 6383; 6384; AVX1-LABEL: test143: 6385; AVX1: # %bb.0: # %entry 6386; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6387; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6388; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 6389; AVX1-NEXT: vpminuw %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: vpminuw %xmm2, %xmm4, %xmm2 6394; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 6395; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6396; AVX1-NEXT: retq 6397; 6398; AVX2-LABEL: test143: 6399; AVX2: # %bb.0: # %entry 6400; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 6401; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 6402; AVX2-NEXT: retq 6403; 6404; AVX512F-LABEL: test143: 6405; AVX512F: # %bb.0: # %entry 6406; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6407; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6408; AVX512F-NEXT: vpminuw %ymm2, %ymm3, %ymm2 6409; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 6410; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6411; AVX512F-NEXT: retq 6412; 6413; AVX512BW-LABEL: test143: 6414; AVX512BW: # %bb.0: # %entry 6415; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 6416; AVX512BW-NEXT: retq 6417entry: 6418 %cmp = icmp ugt <32 x i16> %a, %b 6419 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6420 ret <32 x i16> %sel 6421} 6422 6423define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) { 6424; SSE2-LABEL: test144: 6425; SSE2: # %bb.0: # %entry 6426; SSE2-NEXT: movdqa %xmm0, %xmm8 6427; SSE2-NEXT: psubusw %xmm4, %xmm8 6428; SSE2-NEXT: psubw %xmm8, %xmm0 6429; SSE2-NEXT: movdqa %xmm1, %xmm4 6430; SSE2-NEXT: psubusw %xmm5, %xmm4 6431; SSE2-NEXT: psubw %xmm4, %xmm1 6432; SSE2-NEXT: movdqa %xmm2, %xmm4 6433; SSE2-NEXT: psubusw %xmm6, %xmm4 6434; SSE2-NEXT: psubw %xmm4, %xmm2 6435; SSE2-NEXT: movdqa %xmm3, %xmm4 6436; SSE2-NEXT: psubusw %xmm7, %xmm4 6437; SSE2-NEXT: psubw %xmm4, %xmm3 6438; SSE2-NEXT: retq 6439; 6440; SSE4-LABEL: test144: 6441; SSE4: # %bb.0: # %entry 6442; SSE4-NEXT: pminuw %xmm4, %xmm0 6443; SSE4-NEXT: pminuw %xmm5, %xmm1 6444; SSE4-NEXT: pminuw %xmm6, %xmm2 6445; SSE4-NEXT: pminuw %xmm7, %xmm3 6446; SSE4-NEXT: retq 6447; 6448; AVX1-LABEL: test144: 6449; AVX1: # %bb.0: # %entry 6450; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6451; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6452; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 6453; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 6454; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6455; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6456; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6457; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 6458; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 6459; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6460; AVX1-NEXT: retq 6461; 6462; AVX2-LABEL: test144: 6463; AVX2: # %bb.0: # %entry 6464; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 6465; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 6466; AVX2-NEXT: retq 6467; 6468; AVX512F-LABEL: test144: 6469; AVX512F: # %bb.0: # %entry 6470; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6471; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6472; AVX512F-NEXT: vpminuw %ymm2, %ymm3, %ymm2 6473; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 6474; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6475; AVX512F-NEXT: retq 6476; 6477; AVX512BW-LABEL: test144: 6478; AVX512BW: # %bb.0: # %entry 6479; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 6480; AVX512BW-NEXT: retq 6481entry: 6482 %cmp = icmp uge <32 x i16> %a, %b 6483 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6484 ret <32 x i16> %sel 6485} 6486 6487define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) { 6488; SSE2-LABEL: test145: 6489; SSE2: # %bb.0: # %entry 6490; SSE2-NEXT: movdqa %xmm0, %xmm8 6491; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6492; SSE2-NEXT: pand %xmm8, %xmm0 6493; SSE2-NEXT: pandn %xmm4, %xmm8 6494; SSE2-NEXT: por %xmm8, %xmm0 6495; SSE2-NEXT: movdqa %xmm1, %xmm4 6496; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 6497; SSE2-NEXT: pand %xmm4, %xmm1 6498; SSE2-NEXT: pandn %xmm5, %xmm4 6499; SSE2-NEXT: por %xmm4, %xmm1 6500; SSE2-NEXT: movdqa %xmm2, %xmm4 6501; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 6502; SSE2-NEXT: pand %xmm4, %xmm2 6503; SSE2-NEXT: pandn %xmm6, %xmm4 6504; SSE2-NEXT: por %xmm4, %xmm2 6505; SSE2-NEXT: movdqa %xmm3, %xmm4 6506; SSE2-NEXT: pcmpgtd %xmm7, %xmm4 6507; SSE2-NEXT: pand %xmm4, %xmm3 6508; SSE2-NEXT: pandn %xmm7, %xmm4 6509; SSE2-NEXT: por %xmm4, %xmm3 6510; SSE2-NEXT: retq 6511; 6512; SSE4-LABEL: test145: 6513; SSE4: # %bb.0: # %entry 6514; SSE4-NEXT: pmaxsd %xmm4, %xmm0 6515; SSE4-NEXT: pmaxsd %xmm5, %xmm1 6516; SSE4-NEXT: pmaxsd %xmm6, %xmm2 6517; SSE4-NEXT: pmaxsd %xmm7, %xmm3 6518; SSE4-NEXT: retq 6519; 6520; AVX1-LABEL: test145: 6521; AVX1: # %bb.0: # %entry 6522; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6523; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6524; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 6525; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 6526; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6527; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6528; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6529; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 6530; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 6531; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6532; AVX1-NEXT: retq 6533; 6534; AVX2-LABEL: test145: 6535; AVX2: # %bb.0: # %entry 6536; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 6537; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 6538; AVX2-NEXT: retq 6539; 6540; AVX512-LABEL: test145: 6541; AVX512: # %bb.0: # %entry 6542; AVX512-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 6543; AVX512-NEXT: retq 6544entry: 6545 %cmp = icmp slt <16 x i32> %a, %b 6546 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6547 ret <16 x i32> %sel 6548} 6549 6550define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) { 6551; SSE2-LABEL: test146: 6552; SSE2: # %bb.0: # %entry 6553; SSE2-NEXT: movdqa %xmm0, %xmm8 6554; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6555; SSE2-NEXT: pand %xmm8, %xmm0 6556; SSE2-NEXT: pandn %xmm4, %xmm8 6557; SSE2-NEXT: por %xmm8, %xmm0 6558; SSE2-NEXT: movdqa %xmm1, %xmm4 6559; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 6560; SSE2-NEXT: pand %xmm4, %xmm1 6561; SSE2-NEXT: pandn %xmm5, %xmm4 6562; SSE2-NEXT: por %xmm4, %xmm1 6563; SSE2-NEXT: movdqa %xmm2, %xmm4 6564; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 6565; SSE2-NEXT: pand %xmm4, %xmm2 6566; SSE2-NEXT: pandn %xmm6, %xmm4 6567; SSE2-NEXT: por %xmm4, %xmm2 6568; SSE2-NEXT: movdqa %xmm3, %xmm4 6569; SSE2-NEXT: pcmpgtd %xmm7, %xmm4 6570; SSE2-NEXT: pand %xmm4, %xmm3 6571; SSE2-NEXT: pandn %xmm7, %xmm4 6572; SSE2-NEXT: por %xmm4, %xmm3 6573; SSE2-NEXT: retq 6574; 6575; SSE4-LABEL: test146: 6576; SSE4: # %bb.0: # %entry 6577; SSE4-NEXT: pmaxsd %xmm4, %xmm0 6578; SSE4-NEXT: pmaxsd %xmm5, %xmm1 6579; SSE4-NEXT: pmaxsd %xmm6, %xmm2 6580; SSE4-NEXT: pmaxsd %xmm7, %xmm3 6581; SSE4-NEXT: retq 6582; 6583; AVX1-LABEL: test146: 6584; AVX1: # %bb.0: # %entry 6585; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6586; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6587; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 6588; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 6589; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6590; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6591; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6592; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 6593; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 6594; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6595; AVX1-NEXT: retq 6596; 6597; AVX2-LABEL: test146: 6598; AVX2: # %bb.0: # %entry 6599; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 6600; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 6601; AVX2-NEXT: retq 6602; 6603; AVX512-LABEL: test146: 6604; AVX512: # %bb.0: # %entry 6605; AVX512-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 6606; AVX512-NEXT: retq 6607entry: 6608 %cmp = icmp sle <16 x i32> %a, %b 6609 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6610 ret <16 x i32> %sel 6611} 6612 6613define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) { 6614; SSE2-LABEL: test147: 6615; SSE2: # %bb.0: # %entry 6616; SSE2-NEXT: movdqa %xmm4, %xmm8 6617; SSE2-NEXT: pcmpgtd %xmm0, %xmm8 6618; SSE2-NEXT: pand %xmm8, %xmm0 6619; SSE2-NEXT: pandn %xmm4, %xmm8 6620; SSE2-NEXT: por %xmm8, %xmm0 6621; SSE2-NEXT: movdqa %xmm5, %xmm4 6622; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 6623; SSE2-NEXT: pand %xmm4, %xmm1 6624; SSE2-NEXT: pandn %xmm5, %xmm4 6625; SSE2-NEXT: por %xmm4, %xmm1 6626; SSE2-NEXT: movdqa %xmm6, %xmm4 6627; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 6628; SSE2-NEXT: pand %xmm4, %xmm2 6629; SSE2-NEXT: pandn %xmm6, %xmm4 6630; SSE2-NEXT: por %xmm4, %xmm2 6631; SSE2-NEXT: movdqa %xmm7, %xmm4 6632; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 6633; SSE2-NEXT: pand %xmm4, %xmm3 6634; SSE2-NEXT: pandn %xmm7, %xmm4 6635; SSE2-NEXT: por %xmm4, %xmm3 6636; SSE2-NEXT: retq 6637; 6638; SSE4-LABEL: test147: 6639; SSE4: # %bb.0: # %entry 6640; SSE4-NEXT: pminsd %xmm4, %xmm0 6641; SSE4-NEXT: pminsd %xmm5, %xmm1 6642; SSE4-NEXT: pminsd %xmm6, %xmm2 6643; SSE4-NEXT: pminsd %xmm7, %xmm3 6644; SSE4-NEXT: retq 6645; 6646; AVX1-LABEL: test147: 6647; AVX1: # %bb.0: # %entry 6648; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6649; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6650; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 6651; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 6652; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6653; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6654; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6655; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 6656; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 6657; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6658; AVX1-NEXT: retq 6659; 6660; AVX2-LABEL: test147: 6661; AVX2: # %bb.0: # %entry 6662; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 6663; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 6664; AVX2-NEXT: retq 6665; 6666; AVX512-LABEL: test147: 6667; AVX512: # %bb.0: # %entry 6668; AVX512-NEXT: vpminsd %zmm1, %zmm0, %zmm0 6669; AVX512-NEXT: retq 6670entry: 6671 %cmp = icmp sgt <16 x i32> %a, %b 6672 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6673 ret <16 x i32> %sel 6674} 6675 6676define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) { 6677; SSE2-LABEL: test148: 6678; SSE2: # %bb.0: # %entry 6679; SSE2-NEXT: movdqa %xmm4, %xmm8 6680; SSE2-NEXT: pcmpgtd %xmm0, %xmm8 6681; SSE2-NEXT: pand %xmm8, %xmm0 6682; SSE2-NEXT: pandn %xmm4, %xmm8 6683; SSE2-NEXT: por %xmm8, %xmm0 6684; SSE2-NEXT: movdqa %xmm5, %xmm4 6685; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 6686; SSE2-NEXT: pand %xmm4, %xmm1 6687; SSE2-NEXT: pandn %xmm5, %xmm4 6688; SSE2-NEXT: por %xmm4, %xmm1 6689; SSE2-NEXT: movdqa %xmm6, %xmm4 6690; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 6691; SSE2-NEXT: pand %xmm4, %xmm2 6692; SSE2-NEXT: pandn %xmm6, %xmm4 6693; SSE2-NEXT: por %xmm4, %xmm2 6694; SSE2-NEXT: movdqa %xmm7, %xmm4 6695; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 6696; SSE2-NEXT: pand %xmm4, %xmm3 6697; SSE2-NEXT: pandn %xmm7, %xmm4 6698; SSE2-NEXT: por %xmm4, %xmm3 6699; SSE2-NEXT: retq 6700; 6701; SSE4-LABEL: test148: 6702; SSE4: # %bb.0: # %entry 6703; SSE4-NEXT: pminsd %xmm4, %xmm0 6704; SSE4-NEXT: pminsd %xmm5, %xmm1 6705; SSE4-NEXT: pminsd %xmm6, %xmm2 6706; SSE4-NEXT: pminsd %xmm7, %xmm3 6707; SSE4-NEXT: retq 6708; 6709; AVX1-LABEL: test148: 6710; AVX1: # %bb.0: # %entry 6711; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6712; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6713; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 6714; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 6715; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6716; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6717; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6718; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 6719; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 6720; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6721; AVX1-NEXT: retq 6722; 6723; AVX2-LABEL: test148: 6724; AVX2: # %bb.0: # %entry 6725; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 6726; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 6727; AVX2-NEXT: retq 6728; 6729; AVX512-LABEL: test148: 6730; AVX512: # %bb.0: # %entry 6731; AVX512-NEXT: vpminsd %zmm1, %zmm0, %zmm0 6732; AVX512-NEXT: retq 6733entry: 6734 %cmp = icmp sge <16 x i32> %a, %b 6735 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6736 ret <16 x i32> %sel 6737} 6738 6739define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) { 6740; SSE2-LABEL: test149: 6741; SSE2: # %bb.0: # %entry 6742; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 6743; SSE2-NEXT: movdqa %xmm4, %xmm9 6744; SSE2-NEXT: pxor %xmm8, %xmm9 6745; SSE2-NEXT: movdqa %xmm0, %xmm10 6746; SSE2-NEXT: pxor %xmm8, %xmm10 6747; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 6748; SSE2-NEXT: pand %xmm10, %xmm0 6749; SSE2-NEXT: pandn %xmm4, %xmm10 6750; SSE2-NEXT: por %xmm10, %xmm0 6751; SSE2-NEXT: movdqa %xmm5, %xmm9 6752; SSE2-NEXT: pxor %xmm8, %xmm9 6753; SSE2-NEXT: movdqa %xmm1, %xmm4 6754; SSE2-NEXT: pxor %xmm8, %xmm4 6755; SSE2-NEXT: pcmpgtd %xmm9, %xmm4 6756; SSE2-NEXT: pand %xmm4, %xmm1 6757; SSE2-NEXT: pandn %xmm5, %xmm4 6758; SSE2-NEXT: por %xmm4, %xmm1 6759; SSE2-NEXT: movdqa %xmm6, %xmm4 6760; SSE2-NEXT: pxor %xmm8, %xmm4 6761; SSE2-NEXT: movdqa %xmm2, %xmm5 6762; SSE2-NEXT: pxor %xmm8, %xmm5 6763; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 6764; SSE2-NEXT: pand %xmm5, %xmm2 6765; SSE2-NEXT: pandn %xmm6, %xmm5 6766; SSE2-NEXT: por %xmm5, %xmm2 6767; SSE2-NEXT: movdqa %xmm7, %xmm4 6768; SSE2-NEXT: pxor %xmm8, %xmm4 6769; SSE2-NEXT: pxor %xmm3, %xmm8 6770; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6771; SSE2-NEXT: pand %xmm8, %xmm3 6772; SSE2-NEXT: pandn %xmm7, %xmm8 6773; SSE2-NEXT: por %xmm8, %xmm3 6774; SSE2-NEXT: retq 6775; 6776; SSE4-LABEL: test149: 6777; SSE4: # %bb.0: # %entry 6778; SSE4-NEXT: pmaxud %xmm4, %xmm0 6779; SSE4-NEXT: pmaxud %xmm5, %xmm1 6780; SSE4-NEXT: pmaxud %xmm6, %xmm2 6781; SSE4-NEXT: pmaxud %xmm7, %xmm3 6782; SSE4-NEXT: retq 6783; 6784; AVX1-LABEL: test149: 6785; AVX1: # %bb.0: # %entry 6786; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6787; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6788; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 6789; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 6790; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6791; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6792; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6793; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 6794; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 6795; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6796; AVX1-NEXT: retq 6797; 6798; AVX2-LABEL: test149: 6799; AVX2: # %bb.0: # %entry 6800; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 6801; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 6802; AVX2-NEXT: retq 6803; 6804; AVX512-LABEL: test149: 6805; AVX512: # %bb.0: # %entry 6806; AVX512-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 6807; AVX512-NEXT: retq 6808entry: 6809 %cmp = icmp ult <16 x i32> %a, %b 6810 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6811 ret <16 x i32> %sel 6812} 6813 6814define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) { 6815; SSE2-LABEL: test150: 6816; SSE2: # %bb.0: # %entry 6817; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 6818; SSE2-NEXT: movdqa %xmm4, %xmm9 6819; SSE2-NEXT: pxor %xmm8, %xmm9 6820; SSE2-NEXT: movdqa %xmm0, %xmm10 6821; SSE2-NEXT: pxor %xmm8, %xmm10 6822; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 6823; SSE2-NEXT: pand %xmm10, %xmm0 6824; SSE2-NEXT: pandn %xmm4, %xmm10 6825; SSE2-NEXT: por %xmm10, %xmm0 6826; SSE2-NEXT: movdqa %xmm5, %xmm9 6827; SSE2-NEXT: pxor %xmm8, %xmm9 6828; SSE2-NEXT: movdqa %xmm1, %xmm4 6829; SSE2-NEXT: pxor %xmm8, %xmm4 6830; SSE2-NEXT: pcmpgtd %xmm9, %xmm4 6831; SSE2-NEXT: pand %xmm4, %xmm1 6832; SSE2-NEXT: pandn %xmm5, %xmm4 6833; SSE2-NEXT: por %xmm4, %xmm1 6834; SSE2-NEXT: movdqa %xmm6, %xmm4 6835; SSE2-NEXT: pxor %xmm8, %xmm4 6836; SSE2-NEXT: movdqa %xmm2, %xmm5 6837; SSE2-NEXT: pxor %xmm8, %xmm5 6838; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 6839; SSE2-NEXT: pand %xmm5, %xmm2 6840; SSE2-NEXT: pandn %xmm6, %xmm5 6841; SSE2-NEXT: por %xmm5, %xmm2 6842; SSE2-NEXT: movdqa %xmm7, %xmm4 6843; SSE2-NEXT: pxor %xmm8, %xmm4 6844; SSE2-NEXT: pxor %xmm3, %xmm8 6845; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6846; SSE2-NEXT: pand %xmm8, %xmm3 6847; SSE2-NEXT: pandn %xmm7, %xmm8 6848; SSE2-NEXT: por %xmm8, %xmm3 6849; SSE2-NEXT: retq 6850; 6851; SSE4-LABEL: test150: 6852; SSE4: # %bb.0: # %entry 6853; SSE4-NEXT: pmaxud %xmm4, %xmm0 6854; SSE4-NEXT: pmaxud %xmm5, %xmm1 6855; SSE4-NEXT: pmaxud %xmm6, %xmm2 6856; SSE4-NEXT: pmaxud %xmm7, %xmm3 6857; SSE4-NEXT: retq 6858; 6859; AVX1-LABEL: test150: 6860; AVX1: # %bb.0: # %entry 6861; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6862; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6863; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 6864; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 6865; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6866; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6867; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6868; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 6869; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 6870; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6871; AVX1-NEXT: retq 6872; 6873; AVX2-LABEL: test150: 6874; AVX2: # %bb.0: # %entry 6875; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 6876; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 6877; AVX2-NEXT: retq 6878; 6879; AVX512-LABEL: test150: 6880; AVX512: # %bb.0: # %entry 6881; AVX512-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 6882; AVX512-NEXT: retq 6883entry: 6884 %cmp = icmp ule <16 x i32> %a, %b 6885 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6886 ret <16 x i32> %sel 6887} 6888 6889define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) { 6890; SSE2-LABEL: test151: 6891; SSE2: # %bb.0: # %entry 6892; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 6893; SSE2-NEXT: movdqa %xmm0, %xmm9 6894; SSE2-NEXT: pxor %xmm8, %xmm9 6895; SSE2-NEXT: movdqa %xmm4, %xmm10 6896; SSE2-NEXT: pxor %xmm8, %xmm10 6897; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 6898; SSE2-NEXT: pand %xmm10, %xmm0 6899; SSE2-NEXT: pandn %xmm4, %xmm10 6900; SSE2-NEXT: por %xmm10, %xmm0 6901; SSE2-NEXT: movdqa %xmm1, %xmm9 6902; SSE2-NEXT: pxor %xmm8, %xmm9 6903; SSE2-NEXT: movdqa %xmm5, %xmm4 6904; SSE2-NEXT: pxor %xmm8, %xmm4 6905; SSE2-NEXT: pcmpgtd %xmm9, %xmm4 6906; SSE2-NEXT: pand %xmm4, %xmm1 6907; SSE2-NEXT: pandn %xmm5, %xmm4 6908; SSE2-NEXT: por %xmm4, %xmm1 6909; SSE2-NEXT: movdqa %xmm2, %xmm4 6910; SSE2-NEXT: pxor %xmm8, %xmm4 6911; SSE2-NEXT: movdqa %xmm6, %xmm5 6912; SSE2-NEXT: pxor %xmm8, %xmm5 6913; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 6914; SSE2-NEXT: pand %xmm5, %xmm2 6915; SSE2-NEXT: pandn %xmm6, %xmm5 6916; SSE2-NEXT: por %xmm5, %xmm2 6917; SSE2-NEXT: movdqa %xmm3, %xmm4 6918; SSE2-NEXT: pxor %xmm8, %xmm4 6919; SSE2-NEXT: pxor %xmm7, %xmm8 6920; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6921; SSE2-NEXT: pand %xmm8, %xmm3 6922; SSE2-NEXT: pandn %xmm7, %xmm8 6923; SSE2-NEXT: por %xmm8, %xmm3 6924; SSE2-NEXT: retq 6925; 6926; SSE4-LABEL: test151: 6927; SSE4: # %bb.0: # %entry 6928; SSE4-NEXT: pminud %xmm4, %xmm0 6929; SSE4-NEXT: pminud %xmm5, %xmm1 6930; SSE4-NEXT: pminud %xmm6, %xmm2 6931; SSE4-NEXT: pminud %xmm7, %xmm3 6932; SSE4-NEXT: retq 6933; 6934; AVX1-LABEL: test151: 6935; AVX1: # %bb.0: # %entry 6936; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6937; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6938; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 6939; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 6940; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6941; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6942; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6943; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 6944; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 6945; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6946; AVX1-NEXT: retq 6947; 6948; AVX2-LABEL: test151: 6949; AVX2: # %bb.0: # %entry 6950; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 6951; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 6952; AVX2-NEXT: retq 6953; 6954; AVX512-LABEL: test151: 6955; AVX512: # %bb.0: # %entry 6956; AVX512-NEXT: vpminud %zmm1, %zmm0, %zmm0 6957; AVX512-NEXT: retq 6958entry: 6959 %cmp = icmp ugt <16 x i32> %a, %b 6960 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6961 ret <16 x i32> %sel 6962} 6963 6964define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) { 6965; SSE2-LABEL: test152: 6966; SSE2: # %bb.0: # %entry 6967; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 6968; SSE2-NEXT: movdqa %xmm0, %xmm9 6969; SSE2-NEXT: pxor %xmm8, %xmm9 6970; SSE2-NEXT: movdqa %xmm4, %xmm10 6971; SSE2-NEXT: pxor %xmm8, %xmm10 6972; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 6973; SSE2-NEXT: pand %xmm10, %xmm0 6974; SSE2-NEXT: pandn %xmm4, %xmm10 6975; SSE2-NEXT: por %xmm10, %xmm0 6976; SSE2-NEXT: movdqa %xmm1, %xmm9 6977; SSE2-NEXT: pxor %xmm8, %xmm9 6978; SSE2-NEXT: movdqa %xmm5, %xmm4 6979; SSE2-NEXT: pxor %xmm8, %xmm4 6980; SSE2-NEXT: pcmpgtd %xmm9, %xmm4 6981; SSE2-NEXT: pand %xmm4, %xmm1 6982; SSE2-NEXT: pandn %xmm5, %xmm4 6983; SSE2-NEXT: por %xmm4, %xmm1 6984; SSE2-NEXT: movdqa %xmm2, %xmm4 6985; SSE2-NEXT: pxor %xmm8, %xmm4 6986; SSE2-NEXT: movdqa %xmm6, %xmm5 6987; SSE2-NEXT: pxor %xmm8, %xmm5 6988; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 6989; SSE2-NEXT: pand %xmm5, %xmm2 6990; SSE2-NEXT: pandn %xmm6, %xmm5 6991; SSE2-NEXT: por %xmm5, %xmm2 6992; SSE2-NEXT: movdqa %xmm3, %xmm4 6993; SSE2-NEXT: pxor %xmm8, %xmm4 6994; SSE2-NEXT: pxor %xmm7, %xmm8 6995; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6996; SSE2-NEXT: pand %xmm8, %xmm3 6997; SSE2-NEXT: pandn %xmm7, %xmm8 6998; SSE2-NEXT: por %xmm8, %xmm3 6999; SSE2-NEXT: retq 7000; 7001; SSE4-LABEL: test152: 7002; SSE4: # %bb.0: # %entry 7003; SSE4-NEXT: pminud %xmm4, %xmm0 7004; SSE4-NEXT: pminud %xmm5, %xmm1 7005; SSE4-NEXT: pminud %xmm6, %xmm2 7006; SSE4-NEXT: pminud %xmm7, %xmm3 7007; SSE4-NEXT: retq 7008; 7009; AVX1-LABEL: test152: 7010; AVX1: # %bb.0: # %entry 7011; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7012; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7013; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 7014; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 7015; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7016; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7017; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7018; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 7019; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 7020; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7021; AVX1-NEXT: retq 7022; 7023; AVX2-LABEL: test152: 7024; AVX2: # %bb.0: # %entry 7025; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 7026; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 7027; AVX2-NEXT: retq 7028; 7029; AVX512-LABEL: test152: 7030; AVX512: # %bb.0: # %entry 7031; AVX512-NEXT: vpminud %zmm1, %zmm0, %zmm0 7032; AVX512-NEXT: retq 7033entry: 7034 %cmp = icmp uge <16 x i32> %a, %b 7035 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7036 ret <16 x i32> %sel 7037} 7038 7039; ----------------------- 7040 7041define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) { 7042; SSE2-LABEL: test153: 7043; SSE2: # %bb.0: # %entry 7044; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 7045; SSE2-NEXT: movdqa %xmm4, %xmm9 7046; SSE2-NEXT: pxor %xmm8, %xmm9 7047; SSE2-NEXT: movdqa %xmm0, %xmm10 7048; SSE2-NEXT: pxor %xmm8, %xmm10 7049; SSE2-NEXT: movdqa %xmm10, %xmm11 7050; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7051; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7052; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7053; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7054; SSE2-NEXT: pand %xmm12, %xmm9 7055; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7056; SSE2-NEXT: por %xmm9, %xmm10 7057; SSE2-NEXT: pand %xmm10, %xmm0 7058; SSE2-NEXT: pandn %xmm4, %xmm10 7059; SSE2-NEXT: por %xmm10, %xmm0 7060; SSE2-NEXT: movdqa %xmm5, %xmm9 7061; SSE2-NEXT: pxor %xmm8, %xmm9 7062; SSE2-NEXT: movdqa %xmm1, %xmm4 7063; SSE2-NEXT: pxor %xmm8, %xmm4 7064; SSE2-NEXT: movdqa %xmm4, %xmm10 7065; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7066; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7067; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7068; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7069; SSE2-NEXT: pand %xmm11, %xmm9 7070; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7071; SSE2-NEXT: por %xmm9, %xmm4 7072; SSE2-NEXT: pand %xmm4, %xmm1 7073; SSE2-NEXT: pandn %xmm5, %xmm4 7074; SSE2-NEXT: por %xmm4, %xmm1 7075; SSE2-NEXT: movdqa %xmm6, %xmm4 7076; SSE2-NEXT: pxor %xmm8, %xmm4 7077; SSE2-NEXT: movdqa %xmm2, %xmm5 7078; SSE2-NEXT: pxor %xmm8, %xmm5 7079; SSE2-NEXT: movdqa %xmm5, %xmm9 7080; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7081; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7082; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7083; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7084; SSE2-NEXT: pand %xmm10, %xmm4 7085; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7086; SSE2-NEXT: por %xmm4, %xmm5 7087; SSE2-NEXT: pand %xmm5, %xmm2 7088; SSE2-NEXT: pandn %xmm6, %xmm5 7089; SSE2-NEXT: por %xmm5, %xmm2 7090; SSE2-NEXT: movdqa %xmm7, %xmm4 7091; SSE2-NEXT: pxor %xmm8, %xmm4 7092; SSE2-NEXT: pxor %xmm3, %xmm8 7093; SSE2-NEXT: movdqa %xmm8, %xmm5 7094; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7095; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7096; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7097; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7098; SSE2-NEXT: pand %xmm6, %xmm4 7099; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7100; SSE2-NEXT: por %xmm4, %xmm5 7101; SSE2-NEXT: pand %xmm5, %xmm3 7102; SSE2-NEXT: pandn %xmm7, %xmm5 7103; SSE2-NEXT: por %xmm5, %xmm3 7104; SSE2-NEXT: retq 7105; 7106; SSE4-LABEL: test153: 7107; SSE4: # %bb.0: # %entry 7108; SSE4-NEXT: movdqa %xmm7, %xmm8 7109; SSE4-NEXT: movdqa %xmm0, %xmm7 7110; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7111; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm4 7112; SSE4-NEXT: movdqa %xmm1, %xmm0 7113; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 7114; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7115; SSE4-NEXT: movdqa %xmm2, %xmm0 7116; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 7117; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7118; SSE4-NEXT: movdqa %xmm3, %xmm0 7119; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 7120; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 7121; SSE4-NEXT: movapd %xmm4, %xmm0 7122; SSE4-NEXT: movapd %xmm5, %xmm1 7123; SSE4-NEXT: movapd %xmm6, %xmm2 7124; SSE4-NEXT: movapd %xmm8, %xmm3 7125; SSE4-NEXT: retq 7126; 7127; AVX1-LABEL: test153: 7128; AVX1: # %bb.0: # %entry 7129; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7130; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7131; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7132; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5 7133; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7134; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7135; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7136; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7137; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7138; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4 7139; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7140; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7141; AVX1-NEXT: retq 7142; 7143; AVX2-LABEL: test153: 7144; AVX2: # %bb.0: # %entry 7145; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4 7146; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7147; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2 7148; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7149; AVX2-NEXT: retq 7150; 7151; AVX512-LABEL: test153: 7152; AVX512: # %bb.0: # %entry 7153; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 7154; AVX512-NEXT: retq 7155entry: 7156 %cmp = icmp slt <8 x i64> %a, %b 7157 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7158 ret <8 x i64> %sel 7159} 7160 7161define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) { 7162; SSE2-LABEL: test154: 7163; SSE2: # %bb.0: # %entry 7164; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 7165; SSE2-NEXT: movdqa %xmm4, %xmm9 7166; SSE2-NEXT: pxor %xmm8, %xmm9 7167; SSE2-NEXT: movdqa %xmm0, %xmm10 7168; SSE2-NEXT: pxor %xmm8, %xmm10 7169; SSE2-NEXT: movdqa %xmm10, %xmm11 7170; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7171; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7172; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7173; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7174; SSE2-NEXT: pand %xmm12, %xmm9 7175; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7176; SSE2-NEXT: por %xmm9, %xmm10 7177; SSE2-NEXT: pand %xmm10, %xmm0 7178; SSE2-NEXT: pandn %xmm4, %xmm10 7179; SSE2-NEXT: por %xmm10, %xmm0 7180; SSE2-NEXT: movdqa %xmm5, %xmm9 7181; SSE2-NEXT: pxor %xmm8, %xmm9 7182; SSE2-NEXT: movdqa %xmm1, %xmm4 7183; SSE2-NEXT: pxor %xmm8, %xmm4 7184; SSE2-NEXT: movdqa %xmm4, %xmm10 7185; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7186; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7187; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7188; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7189; SSE2-NEXT: pand %xmm11, %xmm9 7190; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7191; SSE2-NEXT: por %xmm9, %xmm4 7192; SSE2-NEXT: pand %xmm4, %xmm1 7193; SSE2-NEXT: pandn %xmm5, %xmm4 7194; SSE2-NEXT: por %xmm4, %xmm1 7195; SSE2-NEXT: movdqa %xmm6, %xmm4 7196; SSE2-NEXT: pxor %xmm8, %xmm4 7197; SSE2-NEXT: movdqa %xmm2, %xmm5 7198; SSE2-NEXT: pxor %xmm8, %xmm5 7199; SSE2-NEXT: movdqa %xmm5, %xmm9 7200; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7201; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7202; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7203; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7204; SSE2-NEXT: pand %xmm10, %xmm4 7205; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7206; SSE2-NEXT: por %xmm4, %xmm5 7207; SSE2-NEXT: pand %xmm5, %xmm2 7208; SSE2-NEXT: pandn %xmm6, %xmm5 7209; SSE2-NEXT: por %xmm5, %xmm2 7210; SSE2-NEXT: movdqa %xmm7, %xmm4 7211; SSE2-NEXT: pxor %xmm8, %xmm4 7212; SSE2-NEXT: pxor %xmm3, %xmm8 7213; SSE2-NEXT: movdqa %xmm8, %xmm5 7214; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7215; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7216; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7217; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7218; SSE2-NEXT: pand %xmm6, %xmm4 7219; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7220; SSE2-NEXT: por %xmm4, %xmm5 7221; SSE2-NEXT: pand %xmm5, %xmm3 7222; SSE2-NEXT: pandn %xmm7, %xmm5 7223; SSE2-NEXT: por %xmm5, %xmm3 7224; SSE2-NEXT: retq 7225; 7226; SSE4-LABEL: test154: 7227; SSE4: # %bb.0: # %entry 7228; SSE4-NEXT: movdqa %xmm7, %xmm8 7229; SSE4-NEXT: movdqa %xmm0, %xmm7 7230; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7231; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm4 7232; SSE4-NEXT: movdqa %xmm1, %xmm0 7233; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 7234; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7235; SSE4-NEXT: movdqa %xmm2, %xmm0 7236; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 7237; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7238; SSE4-NEXT: movdqa %xmm3, %xmm0 7239; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 7240; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 7241; SSE4-NEXT: movapd %xmm4, %xmm0 7242; SSE4-NEXT: movapd %xmm5, %xmm1 7243; SSE4-NEXT: movapd %xmm6, %xmm2 7244; SSE4-NEXT: movapd %xmm8, %xmm3 7245; SSE4-NEXT: retq 7246; 7247; AVX1-LABEL: test154: 7248; AVX1: # %bb.0: # %entry 7249; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7250; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7251; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7252; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5 7253; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7254; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7255; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7256; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7257; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7258; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4 7259; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7260; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7261; AVX1-NEXT: retq 7262; 7263; AVX2-LABEL: test154: 7264; AVX2: # %bb.0: # %entry 7265; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4 7266; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7267; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2 7268; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7269; AVX2-NEXT: retq 7270; 7271; AVX512-LABEL: test154: 7272; AVX512: # %bb.0: # %entry 7273; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 7274; AVX512-NEXT: retq 7275entry: 7276 %cmp = icmp sle <8 x i64> %a, %b 7277 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7278 ret <8 x i64> %sel 7279} 7280 7281define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) { 7282; SSE2-LABEL: test155: 7283; SSE2: # %bb.0: # %entry 7284; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 7285; SSE2-NEXT: movdqa %xmm0, %xmm9 7286; SSE2-NEXT: pxor %xmm8, %xmm9 7287; SSE2-NEXT: movdqa %xmm4, %xmm10 7288; SSE2-NEXT: pxor %xmm8, %xmm10 7289; SSE2-NEXT: movdqa %xmm10, %xmm11 7290; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7291; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7292; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7293; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7294; SSE2-NEXT: pand %xmm12, %xmm9 7295; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7296; SSE2-NEXT: por %xmm9, %xmm10 7297; SSE2-NEXT: pand %xmm10, %xmm0 7298; SSE2-NEXT: pandn %xmm4, %xmm10 7299; SSE2-NEXT: por %xmm10, %xmm0 7300; SSE2-NEXT: movdqa %xmm1, %xmm9 7301; SSE2-NEXT: pxor %xmm8, %xmm9 7302; SSE2-NEXT: movdqa %xmm5, %xmm4 7303; SSE2-NEXT: pxor %xmm8, %xmm4 7304; SSE2-NEXT: movdqa %xmm4, %xmm10 7305; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7306; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7307; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7308; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7309; SSE2-NEXT: pand %xmm11, %xmm9 7310; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7311; SSE2-NEXT: por %xmm9, %xmm4 7312; SSE2-NEXT: pand %xmm4, %xmm1 7313; SSE2-NEXT: pandn %xmm5, %xmm4 7314; SSE2-NEXT: por %xmm4, %xmm1 7315; SSE2-NEXT: movdqa %xmm2, %xmm4 7316; SSE2-NEXT: pxor %xmm8, %xmm4 7317; SSE2-NEXT: movdqa %xmm6, %xmm5 7318; SSE2-NEXT: pxor %xmm8, %xmm5 7319; SSE2-NEXT: movdqa %xmm5, %xmm9 7320; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7321; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7322; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7323; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7324; SSE2-NEXT: pand %xmm10, %xmm4 7325; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7326; SSE2-NEXT: por %xmm4, %xmm5 7327; SSE2-NEXT: pand %xmm5, %xmm2 7328; SSE2-NEXT: pandn %xmm6, %xmm5 7329; SSE2-NEXT: por %xmm5, %xmm2 7330; SSE2-NEXT: movdqa %xmm3, %xmm4 7331; SSE2-NEXT: pxor %xmm8, %xmm4 7332; SSE2-NEXT: pxor %xmm7, %xmm8 7333; SSE2-NEXT: movdqa %xmm8, %xmm5 7334; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7335; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7336; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7337; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7338; SSE2-NEXT: pand %xmm6, %xmm4 7339; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7340; SSE2-NEXT: por %xmm4, %xmm5 7341; SSE2-NEXT: pand %xmm5, %xmm3 7342; SSE2-NEXT: pandn %xmm7, %xmm5 7343; SSE2-NEXT: por %xmm5, %xmm3 7344; SSE2-NEXT: retq 7345; 7346; SSE4-LABEL: test155: 7347; SSE4: # %bb.0: # %entry 7348; SSE4-NEXT: movdqa %xmm7, %xmm8 7349; SSE4-NEXT: movdqa %xmm0, %xmm7 7350; SSE4-NEXT: movdqa %xmm4, %xmm0 7351; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 7352; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm4 7353; SSE4-NEXT: movdqa %xmm5, %xmm0 7354; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7355; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7356; SSE4-NEXT: movdqa %xmm6, %xmm0 7357; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 7358; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7359; SSE4-NEXT: movdqa %xmm8, %xmm0 7360; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 7361; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 7362; SSE4-NEXT: movapd %xmm4, %xmm0 7363; SSE4-NEXT: movapd %xmm5, %xmm1 7364; SSE4-NEXT: movapd %xmm6, %xmm2 7365; SSE4-NEXT: movapd %xmm8, %xmm3 7366; SSE4-NEXT: retq 7367; 7368; AVX1-LABEL: test155: 7369; AVX1: # %bb.0: # %entry 7370; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 7371; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 7372; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7373; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm5 7374; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7375; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7376; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 7377; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7378; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7379; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm4 7380; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7381; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7382; AVX1-NEXT: retq 7383; 7384; AVX2-LABEL: test155: 7385; AVX2: # %bb.0: # %entry 7386; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm4 7387; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7388; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm2 7389; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7390; AVX2-NEXT: retq 7391; 7392; AVX512-LABEL: test155: 7393; AVX512: # %bb.0: # %entry 7394; AVX512-NEXT: vpminsq %zmm1, %zmm0, %zmm0 7395; AVX512-NEXT: retq 7396entry: 7397 %cmp = icmp sgt <8 x i64> %a, %b 7398 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7399 ret <8 x i64> %sel 7400} 7401 7402define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) { 7403; SSE2-LABEL: test156: 7404; SSE2: # %bb.0: # %entry 7405; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 7406; SSE2-NEXT: movdqa %xmm4, %xmm9 7407; SSE2-NEXT: pxor %xmm8, %xmm9 7408; SSE2-NEXT: movdqa %xmm0, %xmm10 7409; SSE2-NEXT: pxor %xmm8, %xmm10 7410; SSE2-NEXT: movdqa %xmm10, %xmm11 7411; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7412; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7413; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7414; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7415; SSE2-NEXT: pand %xmm12, %xmm9 7416; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7417; SSE2-NEXT: por %xmm9, %xmm10 7418; SSE2-NEXT: pand %xmm10, %xmm0 7419; SSE2-NEXT: pandn %xmm4, %xmm10 7420; SSE2-NEXT: por %xmm10, %xmm0 7421; SSE2-NEXT: movdqa %xmm5, %xmm9 7422; SSE2-NEXT: pxor %xmm8, %xmm9 7423; SSE2-NEXT: movdqa %xmm1, %xmm4 7424; SSE2-NEXT: pxor %xmm8, %xmm4 7425; SSE2-NEXT: movdqa %xmm4, %xmm10 7426; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7427; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7428; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7429; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7430; SSE2-NEXT: pand %xmm11, %xmm9 7431; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7432; SSE2-NEXT: por %xmm9, %xmm4 7433; SSE2-NEXT: pand %xmm4, %xmm1 7434; SSE2-NEXT: pandn %xmm5, %xmm4 7435; SSE2-NEXT: por %xmm4, %xmm1 7436; SSE2-NEXT: movdqa %xmm6, %xmm4 7437; SSE2-NEXT: pxor %xmm8, %xmm4 7438; SSE2-NEXT: movdqa %xmm2, %xmm5 7439; SSE2-NEXT: pxor %xmm8, %xmm5 7440; SSE2-NEXT: movdqa %xmm5, %xmm9 7441; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7442; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7443; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7444; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7445; SSE2-NEXT: pand %xmm10, %xmm4 7446; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7447; SSE2-NEXT: por %xmm4, %xmm5 7448; SSE2-NEXT: pand %xmm5, %xmm2 7449; SSE2-NEXT: pandn %xmm6, %xmm5 7450; SSE2-NEXT: por %xmm5, %xmm2 7451; SSE2-NEXT: movdqa %xmm7, %xmm4 7452; SSE2-NEXT: pxor %xmm8, %xmm4 7453; SSE2-NEXT: pxor %xmm3, %xmm8 7454; SSE2-NEXT: movdqa %xmm8, %xmm5 7455; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7456; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7457; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7458; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7459; SSE2-NEXT: pand %xmm6, %xmm4 7460; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7461; SSE2-NEXT: por %xmm4, %xmm5 7462; SSE2-NEXT: pand %xmm5, %xmm3 7463; SSE2-NEXT: pandn %xmm7, %xmm5 7464; SSE2-NEXT: por %xmm5, %xmm3 7465; SSE2-NEXT: retq 7466; 7467; SSE4-LABEL: test156: 7468; SSE4: # %bb.0: # %entry 7469; SSE4-NEXT: movdqa %xmm7, %xmm8 7470; SSE4-NEXT: movdqa %xmm6, %xmm9 7471; SSE4-NEXT: movdqa %xmm5, %xmm10 7472; SSE4-NEXT: movdqa %xmm4, %xmm5 7473; SSE4-NEXT: movdqa %xmm0, %xmm6 7474; SSE4-NEXT: movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808] 7475; SSE4-NEXT: pxor %xmm7, %xmm4 7476; SSE4-NEXT: pxor %xmm7, %xmm0 7477; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7478; SSE4-NEXT: blendvpd %xmm0, %xmm6, %xmm5 7479; SSE4-NEXT: movdqa %xmm10, %xmm4 7480; SSE4-NEXT: pxor %xmm7, %xmm4 7481; SSE4-NEXT: movdqa %xmm1, %xmm0 7482; SSE4-NEXT: pxor %xmm7, %xmm0 7483; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7484; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm10 7485; SSE4-NEXT: movdqa %xmm9, %xmm1 7486; SSE4-NEXT: pxor %xmm7, %xmm1 7487; SSE4-NEXT: movdqa %xmm2, %xmm0 7488; SSE4-NEXT: pxor %xmm7, %xmm0 7489; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7490; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm9 7491; SSE4-NEXT: movdqa %xmm8, %xmm0 7492; SSE4-NEXT: pxor %xmm7, %xmm0 7493; SSE4-NEXT: pxor %xmm3, %xmm7 7494; SSE4-NEXT: pcmpgtq %xmm0, %xmm7 7495; SSE4-NEXT: movdqa %xmm7, %xmm0 7496; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 7497; SSE4-NEXT: movapd %xmm5, %xmm0 7498; SSE4-NEXT: movapd %xmm10, %xmm1 7499; SSE4-NEXT: movapd %xmm9, %xmm2 7500; SSE4-NEXT: movapd %xmm8, %xmm3 7501; SSE4-NEXT: retq 7502; 7503; AVX1-LABEL: test156: 7504; AVX1: # %bb.0: # %entry 7505; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7506; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 7507; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7508; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 7509; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7510; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 7511; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm6 7512; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7 7513; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 7514; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 7515; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7516; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7517; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 7518; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7519; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7520; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7521; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm4 7522; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5 7523; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7524; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7525; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7526; AVX1-NEXT: retq 7527; 7528; AVX2-LABEL: test156: 7529; AVX2: # %bb.0: # %entry 7530; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 7531; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm5 7532; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 7533; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 7534; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 7535; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm2 7536; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm4 7537; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 7538; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7539; AVX2-NEXT: retq 7540; 7541; AVX512-LABEL: test156: 7542; AVX512: # %bb.0: # %entry 7543; AVX512-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 7544; AVX512-NEXT: retq 7545entry: 7546 %cmp = icmp ule <8 x i64> %a, %b 7547 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7548 ret <8 x i64> %sel 7549} 7550 7551define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) { 7552; SSE2-LABEL: test159: 7553; SSE2: # %bb.0: # %entry 7554; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 7555; SSE2-NEXT: movdqa %xmm0, %xmm9 7556; SSE2-NEXT: pxor %xmm8, %xmm9 7557; SSE2-NEXT: movdqa %xmm4, %xmm10 7558; SSE2-NEXT: pxor %xmm8, %xmm10 7559; SSE2-NEXT: movdqa %xmm10, %xmm11 7560; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7561; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7562; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7563; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7564; SSE2-NEXT: pand %xmm12, %xmm9 7565; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7566; SSE2-NEXT: por %xmm9, %xmm10 7567; SSE2-NEXT: pand %xmm10, %xmm0 7568; SSE2-NEXT: pandn %xmm4, %xmm10 7569; SSE2-NEXT: por %xmm10, %xmm0 7570; SSE2-NEXT: movdqa %xmm1, %xmm9 7571; SSE2-NEXT: pxor %xmm8, %xmm9 7572; SSE2-NEXT: movdqa %xmm5, %xmm4 7573; SSE2-NEXT: pxor %xmm8, %xmm4 7574; SSE2-NEXT: movdqa %xmm4, %xmm10 7575; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7576; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7577; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7578; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7579; SSE2-NEXT: pand %xmm11, %xmm9 7580; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7581; SSE2-NEXT: por %xmm9, %xmm4 7582; SSE2-NEXT: pand %xmm4, %xmm1 7583; SSE2-NEXT: pandn %xmm5, %xmm4 7584; SSE2-NEXT: por %xmm4, %xmm1 7585; SSE2-NEXT: movdqa %xmm2, %xmm4 7586; SSE2-NEXT: pxor %xmm8, %xmm4 7587; SSE2-NEXT: movdqa %xmm6, %xmm5 7588; SSE2-NEXT: pxor %xmm8, %xmm5 7589; SSE2-NEXT: movdqa %xmm5, %xmm9 7590; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7591; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7592; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7593; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7594; SSE2-NEXT: pand %xmm10, %xmm4 7595; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7596; SSE2-NEXT: por %xmm4, %xmm5 7597; SSE2-NEXT: pand %xmm5, %xmm2 7598; SSE2-NEXT: pandn %xmm6, %xmm5 7599; SSE2-NEXT: por %xmm5, %xmm2 7600; SSE2-NEXT: movdqa %xmm3, %xmm4 7601; SSE2-NEXT: pxor %xmm8, %xmm4 7602; SSE2-NEXT: pxor %xmm7, %xmm8 7603; SSE2-NEXT: movdqa %xmm8, %xmm5 7604; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7605; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7606; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7607; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7608; SSE2-NEXT: pand %xmm6, %xmm4 7609; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7610; SSE2-NEXT: por %xmm4, %xmm5 7611; SSE2-NEXT: pand %xmm5, %xmm3 7612; SSE2-NEXT: pandn %xmm7, %xmm5 7613; SSE2-NEXT: por %xmm5, %xmm3 7614; SSE2-NEXT: retq 7615; 7616; SSE4-LABEL: test159: 7617; SSE4: # %bb.0: # %entry 7618; SSE4-NEXT: movdqa %xmm7, %xmm8 7619; SSE4-NEXT: movdqa %xmm6, %xmm9 7620; SSE4-NEXT: movdqa %xmm5, %xmm10 7621; SSE4-NEXT: movdqa %xmm0, %xmm5 7622; SSE4-NEXT: movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808] 7623; SSE4-NEXT: movdqa %xmm0, %xmm6 7624; SSE4-NEXT: pxor %xmm7, %xmm6 7625; SSE4-NEXT: movdqa %xmm4, %xmm0 7626; SSE4-NEXT: pxor %xmm7, %xmm0 7627; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 7628; SSE4-NEXT: blendvpd %xmm0, %xmm5, %xmm4 7629; SSE4-NEXT: movdqa %xmm1, %xmm5 7630; SSE4-NEXT: pxor %xmm7, %xmm5 7631; SSE4-NEXT: movdqa %xmm10, %xmm0 7632; SSE4-NEXT: pxor %xmm7, %xmm0 7633; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 7634; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm10 7635; SSE4-NEXT: movdqa %xmm2, %xmm1 7636; SSE4-NEXT: pxor %xmm7, %xmm1 7637; SSE4-NEXT: movdqa %xmm9, %xmm0 7638; SSE4-NEXT: pxor %xmm7, %xmm0 7639; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7640; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm9 7641; SSE4-NEXT: movdqa %xmm3, %xmm0 7642; SSE4-NEXT: pxor %xmm7, %xmm0 7643; SSE4-NEXT: pxor %xmm8, %xmm7 7644; SSE4-NEXT: pcmpgtq %xmm0, %xmm7 7645; SSE4-NEXT: movdqa %xmm7, %xmm0 7646; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 7647; SSE4-NEXT: movapd %xmm4, %xmm0 7648; SSE4-NEXT: movapd %xmm10, %xmm1 7649; SSE4-NEXT: movapd %xmm9, %xmm2 7650; SSE4-NEXT: movapd %xmm8, %xmm3 7651; SSE4-NEXT: retq 7652; 7653; AVX1-LABEL: test159: 7654; AVX1: # %bb.0: # %entry 7655; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 7656; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 7657; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7658; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 7659; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7660; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 7661; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6 7662; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7 7663; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 7664; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 7665; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7666; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 7667; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 7668; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7669; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7670; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7671; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4 7672; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5 7673; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7674; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7675; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7676; AVX1-NEXT: retq 7677; 7678; AVX2-LABEL: test159: 7679; AVX2: # %bb.0: # %entry 7680; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 7681; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5 7682; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 7683; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 7684; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 7685; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2 7686; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4 7687; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 7688; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7689; AVX2-NEXT: retq 7690; 7691; AVX512-LABEL: test159: 7692; AVX512: # %bb.0: # %entry 7693; AVX512-NEXT: vpminuq %zmm1, %zmm0, %zmm0 7694; AVX512-NEXT: retq 7695entry: 7696 %cmp = icmp ugt <8 x i64> %a, %b 7697 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7698 ret <8 x i64> %sel 7699} 7700 7701define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) { 7702; SSE2-LABEL: test160: 7703; SSE2: # %bb.0: # %entry 7704; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 7705; SSE2-NEXT: movdqa %xmm0, %xmm9 7706; SSE2-NEXT: pxor %xmm8, %xmm9 7707; SSE2-NEXT: movdqa %xmm4, %xmm10 7708; SSE2-NEXT: pxor %xmm8, %xmm10 7709; SSE2-NEXT: movdqa %xmm10, %xmm11 7710; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7711; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7712; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7713; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7714; SSE2-NEXT: pand %xmm12, %xmm9 7715; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7716; SSE2-NEXT: por %xmm9, %xmm10 7717; SSE2-NEXT: pand %xmm10, %xmm0 7718; SSE2-NEXT: pandn %xmm4, %xmm10 7719; SSE2-NEXT: por %xmm10, %xmm0 7720; SSE2-NEXT: movdqa %xmm1, %xmm9 7721; SSE2-NEXT: pxor %xmm8, %xmm9 7722; SSE2-NEXT: movdqa %xmm5, %xmm4 7723; SSE2-NEXT: pxor %xmm8, %xmm4 7724; SSE2-NEXT: movdqa %xmm4, %xmm10 7725; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7726; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7727; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7728; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7729; SSE2-NEXT: pand %xmm11, %xmm9 7730; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7731; SSE2-NEXT: por %xmm9, %xmm4 7732; SSE2-NEXT: pand %xmm4, %xmm1 7733; SSE2-NEXT: pandn %xmm5, %xmm4 7734; SSE2-NEXT: por %xmm4, %xmm1 7735; SSE2-NEXT: movdqa %xmm2, %xmm4 7736; SSE2-NEXT: pxor %xmm8, %xmm4 7737; SSE2-NEXT: movdqa %xmm6, %xmm5 7738; SSE2-NEXT: pxor %xmm8, %xmm5 7739; SSE2-NEXT: movdqa %xmm5, %xmm9 7740; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7741; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7742; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7743; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7744; SSE2-NEXT: pand %xmm10, %xmm4 7745; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7746; SSE2-NEXT: por %xmm4, %xmm5 7747; SSE2-NEXT: pand %xmm5, %xmm2 7748; SSE2-NEXT: pandn %xmm6, %xmm5 7749; SSE2-NEXT: por %xmm5, %xmm2 7750; SSE2-NEXT: movdqa %xmm3, %xmm4 7751; SSE2-NEXT: pxor %xmm8, %xmm4 7752; SSE2-NEXT: pxor %xmm7, %xmm8 7753; SSE2-NEXT: movdqa %xmm8, %xmm5 7754; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7755; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7756; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7757; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7758; SSE2-NEXT: pand %xmm6, %xmm4 7759; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7760; SSE2-NEXT: por %xmm4, %xmm5 7761; SSE2-NEXT: pand %xmm5, %xmm3 7762; SSE2-NEXT: pandn %xmm7, %xmm5 7763; SSE2-NEXT: por %xmm5, %xmm3 7764; SSE2-NEXT: retq 7765; 7766; SSE4-LABEL: test160: 7767; SSE4: # %bb.0: # %entry 7768; SSE4-NEXT: movdqa %xmm7, %xmm8 7769; SSE4-NEXT: movdqa %xmm6, %xmm9 7770; SSE4-NEXT: movdqa %xmm5, %xmm10 7771; SSE4-NEXT: movdqa %xmm0, %xmm5 7772; SSE4-NEXT: movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808] 7773; SSE4-NEXT: movdqa %xmm0, %xmm6 7774; SSE4-NEXT: pxor %xmm7, %xmm6 7775; SSE4-NEXT: movdqa %xmm4, %xmm0 7776; SSE4-NEXT: pxor %xmm7, %xmm0 7777; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 7778; SSE4-NEXT: blendvpd %xmm0, %xmm5, %xmm4 7779; SSE4-NEXT: movdqa %xmm1, %xmm5 7780; SSE4-NEXT: pxor %xmm7, %xmm5 7781; SSE4-NEXT: movdqa %xmm10, %xmm0 7782; SSE4-NEXT: pxor %xmm7, %xmm0 7783; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 7784; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm10 7785; SSE4-NEXT: movdqa %xmm2, %xmm1 7786; SSE4-NEXT: pxor %xmm7, %xmm1 7787; SSE4-NEXT: movdqa %xmm9, %xmm0 7788; SSE4-NEXT: pxor %xmm7, %xmm0 7789; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7790; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm9 7791; SSE4-NEXT: movdqa %xmm3, %xmm0 7792; SSE4-NEXT: pxor %xmm7, %xmm0 7793; SSE4-NEXT: pxor %xmm8, %xmm7 7794; SSE4-NEXT: pcmpgtq %xmm0, %xmm7 7795; SSE4-NEXT: movdqa %xmm7, %xmm0 7796; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 7797; SSE4-NEXT: movapd %xmm4, %xmm0 7798; SSE4-NEXT: movapd %xmm10, %xmm1 7799; SSE4-NEXT: movapd %xmm9, %xmm2 7800; SSE4-NEXT: movapd %xmm8, %xmm3 7801; SSE4-NEXT: retq 7802; 7803; AVX1-LABEL: test160: 7804; AVX1: # %bb.0: # %entry 7805; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 7806; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 7807; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7808; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 7809; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7810; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 7811; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6 7812; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7 7813; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 7814; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 7815; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7816; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 7817; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 7818; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7819; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7820; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7821; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4 7822; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5 7823; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7824; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7825; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7826; AVX1-NEXT: retq 7827; 7828; AVX2-LABEL: test160: 7829; AVX2: # %bb.0: # %entry 7830; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 7831; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5 7832; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 7833; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 7834; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 7835; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2 7836; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4 7837; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 7838; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7839; AVX2-NEXT: retq 7840; 7841; AVX512-LABEL: test160: 7842; AVX512: # %bb.0: # %entry 7843; AVX512-NEXT: vpminuq %zmm1, %zmm0, %zmm0 7844; AVX512-NEXT: retq 7845entry: 7846 %cmp = icmp uge <8 x i64> %a, %b 7847 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7848 ret <8 x i64> %sel 7849} 7850 7851define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) { 7852; SSE2-LABEL: test161: 7853; SSE2: # %bb.0: # %entry 7854; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 7855; SSE2-NEXT: movdqa %xmm0, %xmm5 7856; SSE2-NEXT: pxor %xmm4, %xmm5 7857; SSE2-NEXT: movdqa %xmm2, %xmm6 7858; SSE2-NEXT: pxor %xmm4, %xmm6 7859; SSE2-NEXT: movdqa %xmm6, %xmm7 7860; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 7861; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 7862; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 7863; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 7864; SSE2-NEXT: pand %xmm8, %xmm5 7865; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 7866; SSE2-NEXT: por %xmm5, %xmm6 7867; SSE2-NEXT: pand %xmm6, %xmm0 7868; SSE2-NEXT: pandn %xmm2, %xmm6 7869; SSE2-NEXT: por %xmm6, %xmm0 7870; SSE2-NEXT: movdqa %xmm1, %xmm2 7871; SSE2-NEXT: pxor %xmm4, %xmm2 7872; SSE2-NEXT: pxor %xmm3, %xmm4 7873; SSE2-NEXT: movdqa %xmm4, %xmm5 7874; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 7875; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7876; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 7877; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 7878; SSE2-NEXT: pand %xmm6, %xmm2 7879; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7880; SSE2-NEXT: por %xmm2, %xmm4 7881; SSE2-NEXT: pand %xmm4, %xmm1 7882; SSE2-NEXT: pandn %xmm3, %xmm4 7883; SSE2-NEXT: por %xmm4, %xmm1 7884; SSE2-NEXT: retq 7885; 7886; SSE4-LABEL: test161: 7887; SSE4: # %bb.0: # %entry 7888; SSE4-NEXT: movdqa %xmm0, %xmm4 7889; SSE4-NEXT: movdqa %xmm2, %xmm0 7890; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7891; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 7892; SSE4-NEXT: movdqa %xmm3, %xmm0 7893; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7894; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 7895; SSE4-NEXT: movapd %xmm2, %xmm0 7896; SSE4-NEXT: movapd %xmm3, %xmm1 7897; SSE4-NEXT: retq 7898; 7899; AVX1-LABEL: test161: 7900; AVX1: # %bb.0: # %entry 7901; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 7902; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 7903; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 7904; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 7905; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 7906; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7907; AVX1-NEXT: retq 7908; 7909; AVX2-LABEL: test161: 7910; AVX2: # %bb.0: # %entry 7911; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 7912; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7913; AVX2-NEXT: retq 7914; 7915; AVX512F-LABEL: test161: 7916; AVX512F: # %bb.0: # %entry 7917; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 7918; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7919; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 7920; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 7921; AVX512F-NEXT: retq 7922; 7923; AVX512BW-LABEL: test161: 7924; AVX512BW: # %bb.0: # %entry 7925; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 7926; AVX512BW-NEXT: retq 7927entry: 7928 %cmp = icmp slt <4 x i64> %a, %b 7929 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 7930 ret <4 x i64> %sel 7931} 7932 7933define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) { 7934; SSE2-LABEL: test162: 7935; SSE2: # %bb.0: # %entry 7936; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 7937; SSE2-NEXT: movdqa %xmm0, %xmm5 7938; SSE2-NEXT: pxor %xmm4, %xmm5 7939; SSE2-NEXT: movdqa %xmm2, %xmm6 7940; SSE2-NEXT: pxor %xmm4, %xmm6 7941; SSE2-NEXT: movdqa %xmm6, %xmm7 7942; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 7943; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 7944; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 7945; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 7946; SSE2-NEXT: pand %xmm8, %xmm5 7947; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 7948; SSE2-NEXT: por %xmm5, %xmm6 7949; SSE2-NEXT: pand %xmm6, %xmm0 7950; SSE2-NEXT: pandn %xmm2, %xmm6 7951; SSE2-NEXT: por %xmm6, %xmm0 7952; SSE2-NEXT: movdqa %xmm1, %xmm2 7953; SSE2-NEXT: pxor %xmm4, %xmm2 7954; SSE2-NEXT: pxor %xmm3, %xmm4 7955; SSE2-NEXT: movdqa %xmm4, %xmm5 7956; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 7957; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7958; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 7959; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 7960; SSE2-NEXT: pand %xmm6, %xmm2 7961; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7962; SSE2-NEXT: por %xmm2, %xmm4 7963; SSE2-NEXT: pand %xmm4, %xmm1 7964; SSE2-NEXT: pandn %xmm3, %xmm4 7965; SSE2-NEXT: por %xmm4, %xmm1 7966; SSE2-NEXT: retq 7967; 7968; SSE4-LABEL: test162: 7969; SSE4: # %bb.0: # %entry 7970; SSE4-NEXT: movdqa %xmm0, %xmm4 7971; SSE4-NEXT: movdqa %xmm2, %xmm0 7972; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7973; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 7974; SSE4-NEXT: movdqa %xmm3, %xmm0 7975; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7976; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 7977; SSE4-NEXT: movapd %xmm2, %xmm0 7978; SSE4-NEXT: movapd %xmm3, %xmm1 7979; SSE4-NEXT: retq 7980; 7981; AVX1-LABEL: test162: 7982; AVX1: # %bb.0: # %entry 7983; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 7984; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 7985; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 7986; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 7987; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 7988; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7989; AVX1-NEXT: retq 7990; 7991; AVX2-LABEL: test162: 7992; AVX2: # %bb.0: # %entry 7993; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 7994; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7995; AVX2-NEXT: retq 7996; 7997; AVX512F-LABEL: test162: 7998; AVX512F: # %bb.0: # %entry 7999; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8000; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8001; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 8002; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8003; AVX512F-NEXT: retq 8004; 8005; AVX512BW-LABEL: test162: 8006; AVX512BW: # %bb.0: # %entry 8007; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 8008; AVX512BW-NEXT: retq 8009entry: 8010 %cmp = icmp sle <4 x i64> %a, %b 8011 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8012 ret <4 x i64> %sel 8013} 8014 8015define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) { 8016; SSE2-LABEL: test163: 8017; SSE2: # %bb.0: # %entry 8018; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 8019; SSE2-NEXT: movdqa %xmm2, %xmm5 8020; SSE2-NEXT: pxor %xmm4, %xmm5 8021; SSE2-NEXT: movdqa %xmm0, %xmm6 8022; SSE2-NEXT: pxor %xmm4, %xmm6 8023; SSE2-NEXT: movdqa %xmm6, %xmm7 8024; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8025; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8026; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8027; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8028; SSE2-NEXT: pand %xmm8, %xmm5 8029; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8030; SSE2-NEXT: por %xmm5, %xmm6 8031; SSE2-NEXT: pand %xmm6, %xmm0 8032; SSE2-NEXT: pandn %xmm2, %xmm6 8033; SSE2-NEXT: por %xmm6, %xmm0 8034; SSE2-NEXT: movdqa %xmm3, %xmm2 8035; SSE2-NEXT: pxor %xmm4, %xmm2 8036; SSE2-NEXT: pxor %xmm1, %xmm4 8037; SSE2-NEXT: movdqa %xmm4, %xmm5 8038; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8039; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8040; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8041; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8042; SSE2-NEXT: pand %xmm6, %xmm2 8043; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8044; SSE2-NEXT: por %xmm2, %xmm4 8045; SSE2-NEXT: pand %xmm4, %xmm1 8046; SSE2-NEXT: pandn %xmm3, %xmm4 8047; SSE2-NEXT: por %xmm4, %xmm1 8048; SSE2-NEXT: retq 8049; 8050; SSE4-LABEL: test163: 8051; SSE4: # %bb.0: # %entry 8052; SSE4-NEXT: movdqa %xmm0, %xmm4 8053; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8054; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8055; SSE4-NEXT: movdqa %xmm1, %xmm0 8056; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 8057; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8058; SSE4-NEXT: movapd %xmm2, %xmm0 8059; SSE4-NEXT: movapd %xmm3, %xmm1 8060; SSE4-NEXT: retq 8061; 8062; AVX1-LABEL: test163: 8063; AVX1: # %bb.0: # %entry 8064; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8065; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8066; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8067; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 8068; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8069; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8070; AVX1-NEXT: retq 8071; 8072; AVX2-LABEL: test163: 8073; AVX2: # %bb.0: # %entry 8074; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8075; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8076; AVX2-NEXT: retq 8077; 8078; AVX512F-LABEL: test163: 8079; AVX512F: # %bb.0: # %entry 8080; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8081; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8082; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 8083; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8084; AVX512F-NEXT: retq 8085; 8086; AVX512BW-LABEL: test163: 8087; AVX512BW: # %bb.0: # %entry 8088; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 8089; AVX512BW-NEXT: retq 8090entry: 8091 %cmp = icmp sgt <4 x i64> %a, %b 8092 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8093 ret <4 x i64> %sel 8094} 8095 8096define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) { 8097; SSE2-LABEL: test164: 8098; SSE2: # %bb.0: # %entry 8099; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 8100; SSE2-NEXT: movdqa %xmm2, %xmm5 8101; SSE2-NEXT: pxor %xmm4, %xmm5 8102; SSE2-NEXT: movdqa %xmm0, %xmm6 8103; SSE2-NEXT: pxor %xmm4, %xmm6 8104; SSE2-NEXT: movdqa %xmm6, %xmm7 8105; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8106; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8107; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8108; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8109; SSE2-NEXT: pand %xmm8, %xmm5 8110; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8111; SSE2-NEXT: por %xmm5, %xmm6 8112; SSE2-NEXT: pand %xmm6, %xmm0 8113; SSE2-NEXT: pandn %xmm2, %xmm6 8114; SSE2-NEXT: por %xmm6, %xmm0 8115; SSE2-NEXT: movdqa %xmm3, %xmm2 8116; SSE2-NEXT: pxor %xmm4, %xmm2 8117; SSE2-NEXT: pxor %xmm1, %xmm4 8118; SSE2-NEXT: movdqa %xmm4, %xmm5 8119; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8120; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8121; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8122; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8123; SSE2-NEXT: pand %xmm6, %xmm2 8124; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8125; SSE2-NEXT: por %xmm2, %xmm4 8126; SSE2-NEXT: pand %xmm4, %xmm1 8127; SSE2-NEXT: pandn %xmm3, %xmm4 8128; SSE2-NEXT: por %xmm4, %xmm1 8129; SSE2-NEXT: retq 8130; 8131; SSE4-LABEL: test164: 8132; SSE4: # %bb.0: # %entry 8133; SSE4-NEXT: movdqa %xmm0, %xmm4 8134; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8135; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8136; SSE4-NEXT: movdqa %xmm1, %xmm0 8137; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 8138; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8139; SSE4-NEXT: movapd %xmm2, %xmm0 8140; SSE4-NEXT: movapd %xmm3, %xmm1 8141; SSE4-NEXT: retq 8142; 8143; AVX1-LABEL: test164: 8144; AVX1: # %bb.0: # %entry 8145; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8146; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8147; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8148; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 8149; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8150; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8151; AVX1-NEXT: retq 8152; 8153; AVX2-LABEL: test164: 8154; AVX2: # %bb.0: # %entry 8155; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8156; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8157; AVX2-NEXT: retq 8158; 8159; AVX512F-LABEL: test164: 8160; AVX512F: # %bb.0: # %entry 8161; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8162; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8163; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 8164; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8165; AVX512F-NEXT: retq 8166; 8167; AVX512BW-LABEL: test164: 8168; AVX512BW: # %bb.0: # %entry 8169; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 8170; AVX512BW-NEXT: retq 8171entry: 8172 %cmp = icmp sge <4 x i64> %a, %b 8173 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8174 ret <4 x i64> %sel 8175} 8176 8177define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) { 8178; SSE2-LABEL: test165: 8179; SSE2: # %bb.0: # %entry 8180; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 8181; SSE2-NEXT: movdqa %xmm0, %xmm5 8182; SSE2-NEXT: pxor %xmm4, %xmm5 8183; SSE2-NEXT: movdqa %xmm2, %xmm6 8184; SSE2-NEXT: pxor %xmm4, %xmm6 8185; SSE2-NEXT: movdqa %xmm6, %xmm7 8186; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8187; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8188; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8189; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8190; SSE2-NEXT: pand %xmm8, %xmm5 8191; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8192; SSE2-NEXT: por %xmm5, %xmm6 8193; SSE2-NEXT: pand %xmm6, %xmm0 8194; SSE2-NEXT: pandn %xmm2, %xmm6 8195; SSE2-NEXT: por %xmm6, %xmm0 8196; SSE2-NEXT: movdqa %xmm1, %xmm2 8197; SSE2-NEXT: pxor %xmm4, %xmm2 8198; SSE2-NEXT: pxor %xmm3, %xmm4 8199; SSE2-NEXT: movdqa %xmm4, %xmm5 8200; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8201; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8202; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8203; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8204; SSE2-NEXT: pand %xmm6, %xmm2 8205; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8206; SSE2-NEXT: por %xmm2, %xmm4 8207; SSE2-NEXT: pand %xmm4, %xmm1 8208; SSE2-NEXT: pandn %xmm3, %xmm4 8209; SSE2-NEXT: por %xmm4, %xmm1 8210; SSE2-NEXT: retq 8211; 8212; SSE4-LABEL: test165: 8213; SSE4: # %bb.0: # %entry 8214; SSE4-NEXT: movdqa %xmm0, %xmm4 8215; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8216; SSE4-NEXT: movdqa %xmm0, %xmm6 8217; SSE4-NEXT: pxor %xmm5, %xmm6 8218; SSE4-NEXT: movdqa %xmm2, %xmm0 8219; SSE4-NEXT: pxor %xmm5, %xmm0 8220; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8221; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8222; SSE4-NEXT: movdqa %xmm1, %xmm0 8223; SSE4-NEXT: pxor %xmm5, %xmm0 8224; SSE4-NEXT: pxor %xmm3, %xmm5 8225; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8226; SSE4-NEXT: movdqa %xmm5, %xmm0 8227; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8228; SSE4-NEXT: movapd %xmm2, %xmm0 8229; SSE4-NEXT: movapd %xmm3, %xmm1 8230; SSE4-NEXT: retq 8231; 8232; AVX1-LABEL: test165: 8233; AVX1: # %bb.0: # %entry 8234; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8235; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8236; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8237; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 8238; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8239; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8240; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4 8241; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3 8242; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8243; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8244; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8245; AVX1-NEXT: retq 8246; 8247; AVX2-LABEL: test165: 8248; AVX2: # %bb.0: # %entry 8249; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8250; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 8251; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 8252; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8253; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8254; AVX2-NEXT: retq 8255; 8256; AVX512F-LABEL: test165: 8257; AVX512F: # %bb.0: # %entry 8258; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8259; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8260; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 8261; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8262; AVX512F-NEXT: retq 8263; 8264; AVX512BW-LABEL: test165: 8265; AVX512BW: # %bb.0: # %entry 8266; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 8267; AVX512BW-NEXT: retq 8268entry: 8269 %cmp = icmp ult <4 x i64> %a, %b 8270 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8271 ret <4 x i64> %sel 8272} 8273 8274define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) { 8275; SSE2-LABEL: test166: 8276; SSE2: # %bb.0: # %entry 8277; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 8278; SSE2-NEXT: movdqa %xmm0, %xmm5 8279; SSE2-NEXT: pxor %xmm4, %xmm5 8280; SSE2-NEXT: movdqa %xmm2, %xmm6 8281; SSE2-NEXT: pxor %xmm4, %xmm6 8282; SSE2-NEXT: movdqa %xmm6, %xmm7 8283; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8284; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8285; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8286; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8287; SSE2-NEXT: pand %xmm8, %xmm5 8288; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8289; SSE2-NEXT: por %xmm5, %xmm6 8290; SSE2-NEXT: pand %xmm6, %xmm0 8291; SSE2-NEXT: pandn %xmm2, %xmm6 8292; SSE2-NEXT: por %xmm6, %xmm0 8293; SSE2-NEXT: movdqa %xmm1, %xmm2 8294; SSE2-NEXT: pxor %xmm4, %xmm2 8295; SSE2-NEXT: pxor %xmm3, %xmm4 8296; SSE2-NEXT: movdqa %xmm4, %xmm5 8297; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8298; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8299; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8300; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8301; SSE2-NEXT: pand %xmm6, %xmm2 8302; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8303; SSE2-NEXT: por %xmm2, %xmm4 8304; SSE2-NEXT: pand %xmm4, %xmm1 8305; SSE2-NEXT: pandn %xmm3, %xmm4 8306; SSE2-NEXT: por %xmm4, %xmm1 8307; SSE2-NEXT: retq 8308; 8309; SSE4-LABEL: test166: 8310; SSE4: # %bb.0: # %entry 8311; SSE4-NEXT: movdqa %xmm0, %xmm4 8312; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8313; SSE4-NEXT: movdqa %xmm0, %xmm6 8314; SSE4-NEXT: pxor %xmm5, %xmm6 8315; SSE4-NEXT: movdqa %xmm2, %xmm0 8316; SSE4-NEXT: pxor %xmm5, %xmm0 8317; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8318; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8319; SSE4-NEXT: movdqa %xmm1, %xmm0 8320; SSE4-NEXT: pxor %xmm5, %xmm0 8321; SSE4-NEXT: pxor %xmm3, %xmm5 8322; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8323; SSE4-NEXT: movdqa %xmm5, %xmm0 8324; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8325; SSE4-NEXT: movapd %xmm2, %xmm0 8326; SSE4-NEXT: movapd %xmm3, %xmm1 8327; SSE4-NEXT: retq 8328; 8329; AVX1-LABEL: test166: 8330; AVX1: # %bb.0: # %entry 8331; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8332; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8333; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8334; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 8335; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8336; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8337; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4 8338; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3 8339; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8340; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8341; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8342; AVX1-NEXT: retq 8343; 8344; AVX2-LABEL: test166: 8345; AVX2: # %bb.0: # %entry 8346; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8347; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 8348; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 8349; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8350; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8351; AVX2-NEXT: retq 8352; 8353; AVX512F-LABEL: test166: 8354; AVX512F: # %bb.0: # %entry 8355; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8356; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8357; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 8358; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8359; AVX512F-NEXT: retq 8360; 8361; AVX512BW-LABEL: test166: 8362; AVX512BW: # %bb.0: # %entry 8363; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 8364; AVX512BW-NEXT: retq 8365entry: 8366 %cmp = icmp ule <4 x i64> %a, %b 8367 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8368 ret <4 x i64> %sel 8369} 8370 8371define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) { 8372; SSE2-LABEL: test167: 8373; SSE2: # %bb.0: # %entry 8374; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 8375; SSE2-NEXT: movdqa %xmm2, %xmm5 8376; SSE2-NEXT: pxor %xmm4, %xmm5 8377; SSE2-NEXT: movdqa %xmm0, %xmm6 8378; SSE2-NEXT: pxor %xmm4, %xmm6 8379; SSE2-NEXT: movdqa %xmm6, %xmm7 8380; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8381; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8382; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8383; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8384; SSE2-NEXT: pand %xmm8, %xmm5 8385; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8386; SSE2-NEXT: por %xmm5, %xmm6 8387; SSE2-NEXT: pand %xmm6, %xmm0 8388; SSE2-NEXT: pandn %xmm2, %xmm6 8389; SSE2-NEXT: por %xmm6, %xmm0 8390; SSE2-NEXT: movdqa %xmm3, %xmm2 8391; SSE2-NEXT: pxor %xmm4, %xmm2 8392; SSE2-NEXT: pxor %xmm1, %xmm4 8393; SSE2-NEXT: movdqa %xmm4, %xmm5 8394; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8395; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8396; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8397; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8398; SSE2-NEXT: pand %xmm6, %xmm2 8399; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8400; SSE2-NEXT: por %xmm2, %xmm4 8401; SSE2-NEXT: pand %xmm4, %xmm1 8402; SSE2-NEXT: pandn %xmm3, %xmm4 8403; SSE2-NEXT: por %xmm4, %xmm1 8404; SSE2-NEXT: retq 8405; 8406; SSE4-LABEL: test167: 8407; SSE4: # %bb.0: # %entry 8408; SSE4-NEXT: movdqa %xmm0, %xmm4 8409; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8410; SSE4-NEXT: movdqa %xmm2, %xmm6 8411; SSE4-NEXT: pxor %xmm5, %xmm6 8412; SSE4-NEXT: pxor %xmm5, %xmm0 8413; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8414; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8415; SSE4-NEXT: movdqa %xmm3, %xmm0 8416; SSE4-NEXT: pxor %xmm5, %xmm0 8417; SSE4-NEXT: pxor %xmm1, %xmm5 8418; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8419; SSE4-NEXT: movdqa %xmm5, %xmm0 8420; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8421; SSE4-NEXT: movapd %xmm2, %xmm0 8422; SSE4-NEXT: movapd %xmm3, %xmm1 8423; SSE4-NEXT: retq 8424; 8425; AVX1-LABEL: test167: 8426; AVX1: # %bb.0: # %entry 8427; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8428; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8429; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8430; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 8431; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8432; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8433; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4 8434; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3 8435; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8436; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8437; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8438; AVX1-NEXT: retq 8439; 8440; AVX2-LABEL: test167: 8441; AVX2: # %bb.0: # %entry 8442; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8443; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 8444; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 8445; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8446; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8447; AVX2-NEXT: retq 8448; 8449; AVX512F-LABEL: test167: 8450; AVX512F: # %bb.0: # %entry 8451; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8452; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8453; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 8454; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8455; AVX512F-NEXT: retq 8456; 8457; AVX512BW-LABEL: test167: 8458; AVX512BW: # %bb.0: # %entry 8459; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 8460; AVX512BW-NEXT: retq 8461entry: 8462 %cmp = icmp ugt <4 x i64> %a, %b 8463 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8464 ret <4 x i64> %sel 8465} 8466 8467define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) { 8468; SSE2-LABEL: test168: 8469; SSE2: # %bb.0: # %entry 8470; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 8471; SSE2-NEXT: movdqa %xmm2, %xmm5 8472; SSE2-NEXT: pxor %xmm4, %xmm5 8473; SSE2-NEXT: movdqa %xmm0, %xmm6 8474; SSE2-NEXT: pxor %xmm4, %xmm6 8475; SSE2-NEXT: movdqa %xmm6, %xmm7 8476; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8477; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8478; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8479; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8480; SSE2-NEXT: pand %xmm8, %xmm5 8481; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8482; SSE2-NEXT: por %xmm5, %xmm6 8483; SSE2-NEXT: pand %xmm6, %xmm0 8484; SSE2-NEXT: pandn %xmm2, %xmm6 8485; SSE2-NEXT: por %xmm6, %xmm0 8486; SSE2-NEXT: movdqa %xmm3, %xmm2 8487; SSE2-NEXT: pxor %xmm4, %xmm2 8488; SSE2-NEXT: pxor %xmm1, %xmm4 8489; SSE2-NEXT: movdqa %xmm4, %xmm5 8490; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8491; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8492; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8493; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8494; SSE2-NEXT: pand %xmm6, %xmm2 8495; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8496; SSE2-NEXT: por %xmm2, %xmm4 8497; SSE2-NEXT: pand %xmm4, %xmm1 8498; SSE2-NEXT: pandn %xmm3, %xmm4 8499; SSE2-NEXT: por %xmm4, %xmm1 8500; SSE2-NEXT: retq 8501; 8502; SSE4-LABEL: test168: 8503; SSE4: # %bb.0: # %entry 8504; SSE4-NEXT: movdqa %xmm0, %xmm4 8505; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8506; SSE4-NEXT: movdqa %xmm2, %xmm6 8507; SSE4-NEXT: pxor %xmm5, %xmm6 8508; SSE4-NEXT: pxor %xmm5, %xmm0 8509; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8510; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8511; SSE4-NEXT: movdqa %xmm3, %xmm0 8512; SSE4-NEXT: pxor %xmm5, %xmm0 8513; SSE4-NEXT: pxor %xmm1, %xmm5 8514; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8515; SSE4-NEXT: movdqa %xmm5, %xmm0 8516; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8517; SSE4-NEXT: movapd %xmm2, %xmm0 8518; SSE4-NEXT: movapd %xmm3, %xmm1 8519; SSE4-NEXT: retq 8520; 8521; AVX1-LABEL: test168: 8522; AVX1: # %bb.0: # %entry 8523; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8524; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8525; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8526; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 8527; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8528; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8529; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4 8530; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3 8531; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8532; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8533; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8534; AVX1-NEXT: retq 8535; 8536; AVX2-LABEL: test168: 8537; AVX2: # %bb.0: # %entry 8538; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8539; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 8540; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 8541; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8542; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8543; AVX2-NEXT: retq 8544; 8545; AVX512F-LABEL: test168: 8546; AVX512F: # %bb.0: # %entry 8547; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8548; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8549; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 8550; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8551; AVX512F-NEXT: retq 8552; 8553; AVX512BW-LABEL: test168: 8554; AVX512BW: # %bb.0: # %entry 8555; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 8556; AVX512BW-NEXT: retq 8557entry: 8558 %cmp = icmp uge <4 x i64> %a, %b 8559 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8560 ret <4 x i64> %sel 8561} 8562 8563define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) { 8564; SSE2-LABEL: test169: 8565; SSE2: # %bb.0: # %entry 8566; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 8567; SSE2-NEXT: movdqa %xmm2, %xmm5 8568; SSE2-NEXT: pxor %xmm4, %xmm5 8569; SSE2-NEXT: movdqa %xmm0, %xmm6 8570; SSE2-NEXT: pxor %xmm4, %xmm6 8571; SSE2-NEXT: movdqa %xmm6, %xmm7 8572; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8573; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8574; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8575; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8576; SSE2-NEXT: pand %xmm8, %xmm5 8577; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8578; SSE2-NEXT: por %xmm5, %xmm6 8579; SSE2-NEXT: pand %xmm6, %xmm0 8580; SSE2-NEXT: pandn %xmm2, %xmm6 8581; SSE2-NEXT: por %xmm6, %xmm0 8582; SSE2-NEXT: movdqa %xmm3, %xmm2 8583; SSE2-NEXT: pxor %xmm4, %xmm2 8584; SSE2-NEXT: pxor %xmm1, %xmm4 8585; SSE2-NEXT: movdqa %xmm4, %xmm5 8586; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8587; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8588; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8589; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8590; SSE2-NEXT: pand %xmm6, %xmm2 8591; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8592; SSE2-NEXT: por %xmm2, %xmm4 8593; SSE2-NEXT: pand %xmm4, %xmm1 8594; SSE2-NEXT: pandn %xmm3, %xmm4 8595; SSE2-NEXT: por %xmm4, %xmm1 8596; SSE2-NEXT: retq 8597; 8598; SSE4-LABEL: test169: 8599; SSE4: # %bb.0: # %entry 8600; SSE4-NEXT: movdqa %xmm0, %xmm4 8601; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8602; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8603; SSE4-NEXT: movdqa %xmm1, %xmm0 8604; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 8605; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8606; SSE4-NEXT: movapd %xmm2, %xmm0 8607; SSE4-NEXT: movapd %xmm3, %xmm1 8608; SSE4-NEXT: retq 8609; 8610; AVX1-LABEL: test169: 8611; AVX1: # %bb.0: # %entry 8612; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8613; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8614; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8615; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 8616; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8617; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8618; AVX1-NEXT: retq 8619; 8620; AVX2-LABEL: test169: 8621; AVX2: # %bb.0: # %entry 8622; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8623; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8624; AVX2-NEXT: retq 8625; 8626; AVX512F-LABEL: test169: 8627; AVX512F: # %bb.0: # %entry 8628; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8629; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8630; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 8631; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8632; AVX512F-NEXT: retq 8633; 8634; AVX512BW-LABEL: test169: 8635; AVX512BW: # %bb.0: # %entry 8636; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 8637; AVX512BW-NEXT: retq 8638entry: 8639 %cmp = icmp slt <4 x i64> %a, %b 8640 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8641 ret <4 x i64> %sel 8642} 8643 8644define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) { 8645; SSE2-LABEL: test170: 8646; SSE2: # %bb.0: # %entry 8647; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 8648; SSE2-NEXT: movdqa %xmm2, %xmm5 8649; SSE2-NEXT: pxor %xmm4, %xmm5 8650; SSE2-NEXT: movdqa %xmm0, %xmm6 8651; SSE2-NEXT: pxor %xmm4, %xmm6 8652; SSE2-NEXT: movdqa %xmm6, %xmm7 8653; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8654; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8655; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8656; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8657; SSE2-NEXT: pand %xmm8, %xmm5 8658; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8659; SSE2-NEXT: por %xmm5, %xmm6 8660; SSE2-NEXT: pand %xmm6, %xmm0 8661; SSE2-NEXT: pandn %xmm2, %xmm6 8662; SSE2-NEXT: por %xmm6, %xmm0 8663; SSE2-NEXT: movdqa %xmm3, %xmm2 8664; SSE2-NEXT: pxor %xmm4, %xmm2 8665; SSE2-NEXT: pxor %xmm1, %xmm4 8666; SSE2-NEXT: movdqa %xmm4, %xmm5 8667; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8668; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8669; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8670; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8671; SSE2-NEXT: pand %xmm6, %xmm2 8672; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8673; SSE2-NEXT: por %xmm2, %xmm4 8674; SSE2-NEXT: pand %xmm4, %xmm1 8675; SSE2-NEXT: pandn %xmm3, %xmm4 8676; SSE2-NEXT: por %xmm4, %xmm1 8677; SSE2-NEXT: retq 8678; 8679; SSE4-LABEL: test170: 8680; SSE4: # %bb.0: # %entry 8681; SSE4-NEXT: movdqa %xmm0, %xmm4 8682; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8683; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8684; SSE4-NEXT: movdqa %xmm1, %xmm0 8685; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 8686; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8687; SSE4-NEXT: movapd %xmm2, %xmm0 8688; SSE4-NEXT: movapd %xmm3, %xmm1 8689; SSE4-NEXT: retq 8690; 8691; AVX1-LABEL: test170: 8692; AVX1: # %bb.0: # %entry 8693; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8694; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8695; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8696; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 8697; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8698; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8699; AVX1-NEXT: retq 8700; 8701; AVX2-LABEL: test170: 8702; AVX2: # %bb.0: # %entry 8703; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8704; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8705; AVX2-NEXT: retq 8706; 8707; AVX512F-LABEL: test170: 8708; AVX512F: # %bb.0: # %entry 8709; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8710; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8711; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 8712; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8713; AVX512F-NEXT: retq 8714; 8715; AVX512BW-LABEL: test170: 8716; AVX512BW: # %bb.0: # %entry 8717; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 8718; AVX512BW-NEXT: retq 8719entry: 8720 %cmp = icmp sle <4 x i64> %a, %b 8721 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8722 ret <4 x i64> %sel 8723} 8724 8725define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) { 8726; SSE2-LABEL: test171: 8727; SSE2: # %bb.0: # %entry 8728; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 8729; SSE2-NEXT: movdqa %xmm0, %xmm5 8730; SSE2-NEXT: pxor %xmm4, %xmm5 8731; SSE2-NEXT: movdqa %xmm2, %xmm6 8732; SSE2-NEXT: pxor %xmm4, %xmm6 8733; SSE2-NEXT: movdqa %xmm6, %xmm7 8734; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8735; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8736; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8737; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8738; SSE2-NEXT: pand %xmm8, %xmm5 8739; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8740; SSE2-NEXT: por %xmm5, %xmm6 8741; SSE2-NEXT: pand %xmm6, %xmm0 8742; SSE2-NEXT: pandn %xmm2, %xmm6 8743; SSE2-NEXT: por %xmm6, %xmm0 8744; SSE2-NEXT: movdqa %xmm1, %xmm2 8745; SSE2-NEXT: pxor %xmm4, %xmm2 8746; SSE2-NEXT: pxor %xmm3, %xmm4 8747; SSE2-NEXT: movdqa %xmm4, %xmm5 8748; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8749; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8750; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8751; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8752; SSE2-NEXT: pand %xmm6, %xmm2 8753; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8754; SSE2-NEXT: por %xmm2, %xmm4 8755; SSE2-NEXT: pand %xmm4, %xmm1 8756; SSE2-NEXT: pandn %xmm3, %xmm4 8757; SSE2-NEXT: por %xmm4, %xmm1 8758; SSE2-NEXT: retq 8759; 8760; SSE4-LABEL: test171: 8761; SSE4: # %bb.0: # %entry 8762; SSE4-NEXT: movdqa %xmm0, %xmm4 8763; SSE4-NEXT: movdqa %xmm2, %xmm0 8764; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 8765; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8766; SSE4-NEXT: movdqa %xmm3, %xmm0 8767; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 8768; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8769; SSE4-NEXT: movapd %xmm2, %xmm0 8770; SSE4-NEXT: movapd %xmm3, %xmm1 8771; SSE4-NEXT: retq 8772; 8773; AVX1-LABEL: test171: 8774; AVX1: # %bb.0: # %entry 8775; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8776; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 8777; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8778; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 8779; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8780; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8781; AVX1-NEXT: retq 8782; 8783; AVX2-LABEL: test171: 8784; AVX2: # %bb.0: # %entry 8785; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 8786; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8787; AVX2-NEXT: retq 8788; 8789; AVX512F-LABEL: test171: 8790; AVX512F: # %bb.0: # %entry 8791; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8792; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8793; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 8794; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8795; AVX512F-NEXT: retq 8796; 8797; AVX512BW-LABEL: test171: 8798; AVX512BW: # %bb.0: # %entry 8799; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 8800; AVX512BW-NEXT: retq 8801entry: 8802 %cmp = icmp sgt <4 x i64> %a, %b 8803 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8804 ret <4 x i64> %sel 8805} 8806 8807define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) { 8808; SSE2-LABEL: test172: 8809; SSE2: # %bb.0: # %entry 8810; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 8811; SSE2-NEXT: movdqa %xmm0, %xmm5 8812; SSE2-NEXT: pxor %xmm4, %xmm5 8813; SSE2-NEXT: movdqa %xmm2, %xmm6 8814; SSE2-NEXT: pxor %xmm4, %xmm6 8815; SSE2-NEXT: movdqa %xmm6, %xmm7 8816; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8817; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8818; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8819; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8820; SSE2-NEXT: pand %xmm8, %xmm5 8821; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8822; SSE2-NEXT: por %xmm5, %xmm6 8823; SSE2-NEXT: pand %xmm6, %xmm0 8824; SSE2-NEXT: pandn %xmm2, %xmm6 8825; SSE2-NEXT: por %xmm6, %xmm0 8826; SSE2-NEXT: movdqa %xmm1, %xmm2 8827; SSE2-NEXT: pxor %xmm4, %xmm2 8828; SSE2-NEXT: pxor %xmm3, %xmm4 8829; SSE2-NEXT: movdqa %xmm4, %xmm5 8830; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8831; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8832; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8833; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8834; SSE2-NEXT: pand %xmm6, %xmm2 8835; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8836; SSE2-NEXT: por %xmm2, %xmm4 8837; SSE2-NEXT: pand %xmm4, %xmm1 8838; SSE2-NEXT: pandn %xmm3, %xmm4 8839; SSE2-NEXT: por %xmm4, %xmm1 8840; SSE2-NEXT: retq 8841; 8842; SSE4-LABEL: test172: 8843; SSE4: # %bb.0: # %entry 8844; SSE4-NEXT: movdqa %xmm0, %xmm4 8845; SSE4-NEXT: movdqa %xmm2, %xmm0 8846; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 8847; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8848; SSE4-NEXT: movdqa %xmm3, %xmm0 8849; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 8850; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8851; SSE4-NEXT: movapd %xmm2, %xmm0 8852; SSE4-NEXT: movapd %xmm3, %xmm1 8853; SSE4-NEXT: retq 8854; 8855; AVX1-LABEL: test172: 8856; AVX1: # %bb.0: # %entry 8857; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8858; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 8859; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8860; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 8861; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8862; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8863; AVX1-NEXT: retq 8864; 8865; AVX2-LABEL: test172: 8866; AVX2: # %bb.0: # %entry 8867; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 8868; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8869; AVX2-NEXT: retq 8870; 8871; AVX512F-LABEL: test172: 8872; AVX512F: # %bb.0: # %entry 8873; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8874; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8875; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 8876; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8877; AVX512F-NEXT: retq 8878; 8879; AVX512BW-LABEL: test172: 8880; AVX512BW: # %bb.0: # %entry 8881; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 8882; AVX512BW-NEXT: retq 8883entry: 8884 %cmp = icmp sge <4 x i64> %a, %b 8885 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8886 ret <4 x i64> %sel 8887} 8888 8889define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) { 8890; SSE2-LABEL: test173: 8891; SSE2: # %bb.0: # %entry 8892; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 8893; SSE2-NEXT: movdqa %xmm2, %xmm5 8894; SSE2-NEXT: pxor %xmm4, %xmm5 8895; SSE2-NEXT: movdqa %xmm0, %xmm6 8896; SSE2-NEXT: pxor %xmm4, %xmm6 8897; SSE2-NEXT: movdqa %xmm6, %xmm7 8898; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8899; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8900; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8901; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8902; SSE2-NEXT: pand %xmm8, %xmm5 8903; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8904; SSE2-NEXT: por %xmm5, %xmm6 8905; SSE2-NEXT: pand %xmm6, %xmm0 8906; SSE2-NEXT: pandn %xmm2, %xmm6 8907; SSE2-NEXT: por %xmm6, %xmm0 8908; SSE2-NEXT: movdqa %xmm3, %xmm2 8909; SSE2-NEXT: pxor %xmm4, %xmm2 8910; SSE2-NEXT: pxor %xmm1, %xmm4 8911; SSE2-NEXT: movdqa %xmm4, %xmm5 8912; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8913; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8914; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8915; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8916; SSE2-NEXT: pand %xmm6, %xmm2 8917; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8918; SSE2-NEXT: por %xmm2, %xmm4 8919; SSE2-NEXT: pand %xmm4, %xmm1 8920; SSE2-NEXT: pandn %xmm3, %xmm4 8921; SSE2-NEXT: por %xmm4, %xmm1 8922; SSE2-NEXT: retq 8923; 8924; SSE4-LABEL: test173: 8925; SSE4: # %bb.0: # %entry 8926; SSE4-NEXT: movdqa %xmm0, %xmm4 8927; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8928; SSE4-NEXT: movdqa %xmm2, %xmm6 8929; SSE4-NEXT: pxor %xmm5, %xmm6 8930; SSE4-NEXT: pxor %xmm5, %xmm0 8931; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8932; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8933; SSE4-NEXT: movdqa %xmm3, %xmm0 8934; SSE4-NEXT: pxor %xmm5, %xmm0 8935; SSE4-NEXT: pxor %xmm1, %xmm5 8936; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8937; SSE4-NEXT: movdqa %xmm5, %xmm0 8938; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8939; SSE4-NEXT: movapd %xmm2, %xmm0 8940; SSE4-NEXT: movapd %xmm3, %xmm1 8941; SSE4-NEXT: retq 8942; 8943; AVX1-LABEL: test173: 8944; AVX1: # %bb.0: # %entry 8945; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8946; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8947; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8948; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 8949; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8950; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8951; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4 8952; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3 8953; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8954; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8955; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8956; AVX1-NEXT: retq 8957; 8958; AVX2-LABEL: test173: 8959; AVX2: # %bb.0: # %entry 8960; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8961; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 8962; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 8963; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8964; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8965; AVX2-NEXT: retq 8966; 8967; AVX512F-LABEL: test173: 8968; AVX512F: # %bb.0: # %entry 8969; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8970; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8971; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 8972; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8973; AVX512F-NEXT: retq 8974; 8975; AVX512BW-LABEL: test173: 8976; AVX512BW: # %bb.0: # %entry 8977; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 8978; AVX512BW-NEXT: retq 8979entry: 8980 %cmp = icmp ult <4 x i64> %a, %b 8981 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8982 ret <4 x i64> %sel 8983} 8984 8985define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) { 8986; SSE2-LABEL: test174: 8987; SSE2: # %bb.0: # %entry 8988; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 8989; SSE2-NEXT: movdqa %xmm2, %xmm5 8990; SSE2-NEXT: pxor %xmm4, %xmm5 8991; SSE2-NEXT: movdqa %xmm0, %xmm6 8992; SSE2-NEXT: pxor %xmm4, %xmm6 8993; SSE2-NEXT: movdqa %xmm6, %xmm7 8994; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8995; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8996; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8997; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8998; SSE2-NEXT: pand %xmm8, %xmm5 8999; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9000; SSE2-NEXT: por %xmm5, %xmm6 9001; SSE2-NEXT: pand %xmm6, %xmm0 9002; SSE2-NEXT: pandn %xmm2, %xmm6 9003; SSE2-NEXT: por %xmm6, %xmm0 9004; SSE2-NEXT: movdqa %xmm3, %xmm2 9005; SSE2-NEXT: pxor %xmm4, %xmm2 9006; SSE2-NEXT: pxor %xmm1, %xmm4 9007; SSE2-NEXT: movdqa %xmm4, %xmm5 9008; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 9009; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 9010; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 9011; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 9012; SSE2-NEXT: pand %xmm6, %xmm2 9013; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9014; SSE2-NEXT: por %xmm2, %xmm4 9015; SSE2-NEXT: pand %xmm4, %xmm1 9016; SSE2-NEXT: pandn %xmm3, %xmm4 9017; SSE2-NEXT: por %xmm4, %xmm1 9018; SSE2-NEXT: retq 9019; 9020; SSE4-LABEL: test174: 9021; SSE4: # %bb.0: # %entry 9022; SSE4-NEXT: movdqa %xmm0, %xmm4 9023; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 9024; SSE4-NEXT: movdqa %xmm2, %xmm6 9025; SSE4-NEXT: pxor %xmm5, %xmm6 9026; SSE4-NEXT: pxor %xmm5, %xmm0 9027; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9028; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 9029; SSE4-NEXT: movdqa %xmm3, %xmm0 9030; SSE4-NEXT: pxor %xmm5, %xmm0 9031; SSE4-NEXT: pxor %xmm1, %xmm5 9032; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 9033; SSE4-NEXT: movdqa %xmm5, %xmm0 9034; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 9035; SSE4-NEXT: movapd %xmm2, %xmm0 9036; SSE4-NEXT: movapd %xmm3, %xmm1 9037; SSE4-NEXT: retq 9038; 9039; AVX1-LABEL: test174: 9040; AVX1: # %bb.0: # %entry 9041; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9042; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9043; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 9044; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 9045; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 9046; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9047; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4 9048; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3 9049; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9050; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9051; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9052; AVX1-NEXT: retq 9053; 9054; AVX2-LABEL: test174: 9055; AVX2: # %bb.0: # %entry 9056; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 9057; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 9058; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 9059; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9060; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9061; AVX2-NEXT: retq 9062; 9063; AVX512F-LABEL: test174: 9064; AVX512F: # %bb.0: # %entry 9065; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 9066; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9067; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 9068; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 9069; AVX512F-NEXT: retq 9070; 9071; AVX512BW-LABEL: test174: 9072; AVX512BW: # %bb.0: # %entry 9073; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 9074; AVX512BW-NEXT: retq 9075entry: 9076 %cmp = icmp ule <4 x i64> %a, %b 9077 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9078 ret <4 x i64> %sel 9079} 9080 9081define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) { 9082; SSE2-LABEL: test175: 9083; SSE2: # %bb.0: # %entry 9084; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 9085; SSE2-NEXT: movdqa %xmm0, %xmm5 9086; SSE2-NEXT: pxor %xmm4, %xmm5 9087; SSE2-NEXT: movdqa %xmm2, %xmm6 9088; SSE2-NEXT: pxor %xmm4, %xmm6 9089; SSE2-NEXT: movdqa %xmm6, %xmm7 9090; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 9091; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9092; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 9093; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 9094; SSE2-NEXT: pand %xmm8, %xmm5 9095; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9096; SSE2-NEXT: por %xmm5, %xmm6 9097; SSE2-NEXT: pand %xmm6, %xmm0 9098; SSE2-NEXT: pandn %xmm2, %xmm6 9099; SSE2-NEXT: por %xmm6, %xmm0 9100; SSE2-NEXT: movdqa %xmm1, %xmm2 9101; SSE2-NEXT: pxor %xmm4, %xmm2 9102; SSE2-NEXT: pxor %xmm3, %xmm4 9103; SSE2-NEXT: movdqa %xmm4, %xmm5 9104; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 9105; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 9106; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 9107; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 9108; SSE2-NEXT: pand %xmm6, %xmm2 9109; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9110; SSE2-NEXT: por %xmm2, %xmm4 9111; SSE2-NEXT: pand %xmm4, %xmm1 9112; SSE2-NEXT: pandn %xmm3, %xmm4 9113; SSE2-NEXT: por %xmm4, %xmm1 9114; SSE2-NEXT: retq 9115; 9116; SSE4-LABEL: test175: 9117; SSE4: # %bb.0: # %entry 9118; SSE4-NEXT: movdqa %xmm0, %xmm4 9119; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 9120; SSE4-NEXT: movdqa %xmm0, %xmm6 9121; SSE4-NEXT: pxor %xmm5, %xmm6 9122; SSE4-NEXT: movdqa %xmm2, %xmm0 9123; SSE4-NEXT: pxor %xmm5, %xmm0 9124; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9125; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 9126; SSE4-NEXT: movdqa %xmm1, %xmm0 9127; SSE4-NEXT: pxor %xmm5, %xmm0 9128; SSE4-NEXT: pxor %xmm3, %xmm5 9129; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 9130; SSE4-NEXT: movdqa %xmm5, %xmm0 9131; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 9132; SSE4-NEXT: movapd %xmm2, %xmm0 9133; SSE4-NEXT: movapd %xmm3, %xmm1 9134; SSE4-NEXT: retq 9135; 9136; AVX1-LABEL: test175: 9137; AVX1: # %bb.0: # %entry 9138; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9139; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9140; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 9141; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 9142; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 9143; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9144; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4 9145; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3 9146; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9147; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9148; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9149; AVX1-NEXT: retq 9150; 9151; AVX2-LABEL: test175: 9152; AVX2: # %bb.0: # %entry 9153; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 9154; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 9155; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 9156; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9157; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9158; AVX2-NEXT: retq 9159; 9160; AVX512F-LABEL: test175: 9161; AVX512F: # %bb.0: # %entry 9162; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 9163; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9164; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 9165; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 9166; AVX512F-NEXT: retq 9167; 9168; AVX512BW-LABEL: test175: 9169; AVX512BW: # %bb.0: # %entry 9170; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 9171; AVX512BW-NEXT: retq 9172entry: 9173 %cmp = icmp ugt <4 x i64> %a, %b 9174 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9175 ret <4 x i64> %sel 9176} 9177 9178define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) { 9179; SSE2-LABEL: test176: 9180; SSE2: # %bb.0: # %entry 9181; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 9182; SSE2-NEXT: movdqa %xmm0, %xmm5 9183; SSE2-NEXT: pxor %xmm4, %xmm5 9184; SSE2-NEXT: movdqa %xmm2, %xmm6 9185; SSE2-NEXT: pxor %xmm4, %xmm6 9186; SSE2-NEXT: movdqa %xmm6, %xmm7 9187; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 9188; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9189; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 9190; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 9191; SSE2-NEXT: pand %xmm8, %xmm5 9192; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9193; SSE2-NEXT: por %xmm5, %xmm6 9194; SSE2-NEXT: pand %xmm6, %xmm0 9195; SSE2-NEXT: pandn %xmm2, %xmm6 9196; SSE2-NEXT: por %xmm6, %xmm0 9197; SSE2-NEXT: movdqa %xmm1, %xmm2 9198; SSE2-NEXT: pxor %xmm4, %xmm2 9199; SSE2-NEXT: pxor %xmm3, %xmm4 9200; SSE2-NEXT: movdqa %xmm4, %xmm5 9201; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 9202; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 9203; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 9204; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 9205; SSE2-NEXT: pand %xmm6, %xmm2 9206; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9207; SSE2-NEXT: por %xmm2, %xmm4 9208; SSE2-NEXT: pand %xmm4, %xmm1 9209; SSE2-NEXT: pandn %xmm3, %xmm4 9210; SSE2-NEXT: por %xmm4, %xmm1 9211; SSE2-NEXT: retq 9212; 9213; SSE4-LABEL: test176: 9214; SSE4: # %bb.0: # %entry 9215; SSE4-NEXT: movdqa %xmm0, %xmm4 9216; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 9217; SSE4-NEXT: movdqa %xmm0, %xmm6 9218; SSE4-NEXT: pxor %xmm5, %xmm6 9219; SSE4-NEXT: movdqa %xmm2, %xmm0 9220; SSE4-NEXT: pxor %xmm5, %xmm0 9221; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9222; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 9223; SSE4-NEXT: movdqa %xmm1, %xmm0 9224; SSE4-NEXT: pxor %xmm5, %xmm0 9225; SSE4-NEXT: pxor %xmm3, %xmm5 9226; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 9227; SSE4-NEXT: movdqa %xmm5, %xmm0 9228; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 9229; SSE4-NEXT: movapd %xmm2, %xmm0 9230; SSE4-NEXT: movapd %xmm3, %xmm1 9231; SSE4-NEXT: retq 9232; 9233; AVX1-LABEL: test176: 9234; AVX1: # %bb.0: # %entry 9235; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9236; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9237; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 9238; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 9239; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 9240; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9241; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4 9242; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3 9243; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9244; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9245; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9246; AVX1-NEXT: retq 9247; 9248; AVX2-LABEL: test176: 9249; AVX2: # %bb.0: # %entry 9250; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 9251; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 9252; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 9253; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9254; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9255; AVX2-NEXT: retq 9256; 9257; AVX512F-LABEL: test176: 9258; AVX512F: # %bb.0: # %entry 9259; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 9260; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9261; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 9262; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 9263; AVX512F-NEXT: retq 9264; 9265; AVX512BW-LABEL: test176: 9266; AVX512BW: # %bb.0: # %entry 9267; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 9268; AVX512BW-NEXT: retq 9269entry: 9270 %cmp = icmp uge <4 x i64> %a, %b 9271 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9272 ret <4 x i64> %sel 9273} 9274 9275define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) { 9276; SSE2-LABEL: test177: 9277; SSE2: # %bb.0: # %entry 9278; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9279; SSE2-NEXT: movdqa %xmm0, %xmm3 9280; SSE2-NEXT: pxor %xmm2, %xmm3 9281; SSE2-NEXT: pxor %xmm1, %xmm2 9282; SSE2-NEXT: movdqa %xmm2, %xmm4 9283; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9284; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9285; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9286; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9287; SSE2-NEXT: pand %xmm5, %xmm2 9288; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9289; SSE2-NEXT: por %xmm2, %xmm3 9290; SSE2-NEXT: pand %xmm3, %xmm0 9291; SSE2-NEXT: pandn %xmm1, %xmm3 9292; SSE2-NEXT: por %xmm3, %xmm0 9293; SSE2-NEXT: retq 9294; 9295; SSE4-LABEL: test177: 9296; SSE4: # %bb.0: # %entry 9297; SSE4-NEXT: movdqa %xmm0, %xmm2 9298; SSE4-NEXT: movdqa %xmm1, %xmm0 9299; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9300; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9301; SSE4-NEXT: movapd %xmm1, %xmm0 9302; SSE4-NEXT: retq 9303; 9304; AVX1-LABEL: test177: 9305; AVX1: # %bb.0: # %entry 9306; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9307; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9308; AVX1-NEXT: retq 9309; 9310; AVX2-LABEL: test177: 9311; AVX2: # %bb.0: # %entry 9312; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9313; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9314; AVX2-NEXT: retq 9315; 9316; AVX512F-LABEL: test177: 9317; AVX512F: # %bb.0: # %entry 9318; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9319; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9320; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 9321; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9322; AVX512F-NEXT: retq 9323; 9324; AVX512BW-LABEL: test177: 9325; AVX512BW: # %bb.0: # %entry 9326; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 9327; AVX512BW-NEXT: retq 9328entry: 9329 %cmp = icmp slt <2 x i64> %a, %b 9330 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9331 ret <2 x i64> %sel 9332} 9333 9334define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) { 9335; SSE2-LABEL: test178: 9336; SSE2: # %bb.0: # %entry 9337; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9338; SSE2-NEXT: movdqa %xmm0, %xmm3 9339; SSE2-NEXT: pxor %xmm2, %xmm3 9340; SSE2-NEXT: pxor %xmm1, %xmm2 9341; SSE2-NEXT: movdqa %xmm2, %xmm4 9342; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9343; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9344; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9345; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9346; SSE2-NEXT: pand %xmm5, %xmm2 9347; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9348; SSE2-NEXT: por %xmm2, %xmm3 9349; SSE2-NEXT: pand %xmm3, %xmm0 9350; SSE2-NEXT: pandn %xmm1, %xmm3 9351; SSE2-NEXT: por %xmm3, %xmm0 9352; SSE2-NEXT: retq 9353; 9354; SSE4-LABEL: test178: 9355; SSE4: # %bb.0: # %entry 9356; SSE4-NEXT: movdqa %xmm0, %xmm2 9357; SSE4-NEXT: movdqa %xmm1, %xmm0 9358; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9359; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9360; SSE4-NEXT: movapd %xmm1, %xmm0 9361; SSE4-NEXT: retq 9362; 9363; AVX1-LABEL: test178: 9364; AVX1: # %bb.0: # %entry 9365; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9366; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9367; AVX1-NEXT: retq 9368; 9369; AVX2-LABEL: test178: 9370; AVX2: # %bb.0: # %entry 9371; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9372; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9373; AVX2-NEXT: retq 9374; 9375; AVX512F-LABEL: test178: 9376; AVX512F: # %bb.0: # %entry 9377; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9378; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9379; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 9380; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9381; AVX512F-NEXT: retq 9382; 9383; AVX512BW-LABEL: test178: 9384; AVX512BW: # %bb.0: # %entry 9385; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 9386; AVX512BW-NEXT: retq 9387entry: 9388 %cmp = icmp sle <2 x i64> %a, %b 9389 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9390 ret <2 x i64> %sel 9391} 9392 9393define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) { 9394; SSE2-LABEL: test179: 9395; SSE2: # %bb.0: # %entry 9396; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9397; SSE2-NEXT: movdqa %xmm1, %xmm3 9398; SSE2-NEXT: pxor %xmm2, %xmm3 9399; SSE2-NEXT: pxor %xmm0, %xmm2 9400; SSE2-NEXT: movdqa %xmm2, %xmm4 9401; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9402; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9403; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9404; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9405; SSE2-NEXT: pand %xmm5, %xmm2 9406; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9407; SSE2-NEXT: por %xmm2, %xmm3 9408; SSE2-NEXT: pand %xmm3, %xmm0 9409; SSE2-NEXT: pandn %xmm1, %xmm3 9410; SSE2-NEXT: por %xmm3, %xmm0 9411; SSE2-NEXT: retq 9412; 9413; SSE4-LABEL: test179: 9414; SSE4: # %bb.0: # %entry 9415; SSE4-NEXT: movdqa %xmm0, %xmm2 9416; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 9417; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9418; SSE4-NEXT: movapd %xmm1, %xmm0 9419; SSE4-NEXT: retq 9420; 9421; AVX1-LABEL: test179: 9422; AVX1: # %bb.0: # %entry 9423; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9424; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9425; AVX1-NEXT: retq 9426; 9427; AVX2-LABEL: test179: 9428; AVX2: # %bb.0: # %entry 9429; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9430; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9431; AVX2-NEXT: retq 9432; 9433; AVX512F-LABEL: test179: 9434; AVX512F: # %bb.0: # %entry 9435; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9436; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9437; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 9438; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9439; AVX512F-NEXT: retq 9440; 9441; AVX512BW-LABEL: test179: 9442; AVX512BW: # %bb.0: # %entry 9443; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 9444; AVX512BW-NEXT: retq 9445entry: 9446 %cmp = icmp sgt <2 x i64> %a, %b 9447 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9448 ret <2 x i64> %sel 9449} 9450 9451define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) { 9452; SSE2-LABEL: test180: 9453; SSE2: # %bb.0: # %entry 9454; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9455; SSE2-NEXT: movdqa %xmm1, %xmm3 9456; SSE2-NEXT: pxor %xmm2, %xmm3 9457; SSE2-NEXT: pxor %xmm0, %xmm2 9458; SSE2-NEXT: movdqa %xmm2, %xmm4 9459; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9460; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9461; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9462; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9463; SSE2-NEXT: pand %xmm5, %xmm2 9464; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9465; SSE2-NEXT: por %xmm2, %xmm3 9466; SSE2-NEXT: pand %xmm3, %xmm0 9467; SSE2-NEXT: pandn %xmm1, %xmm3 9468; SSE2-NEXT: por %xmm3, %xmm0 9469; SSE2-NEXT: retq 9470; 9471; SSE4-LABEL: test180: 9472; SSE4: # %bb.0: # %entry 9473; SSE4-NEXT: movdqa %xmm0, %xmm2 9474; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 9475; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9476; SSE4-NEXT: movapd %xmm1, %xmm0 9477; SSE4-NEXT: retq 9478; 9479; AVX1-LABEL: test180: 9480; AVX1: # %bb.0: # %entry 9481; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9482; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9483; AVX1-NEXT: retq 9484; 9485; AVX2-LABEL: test180: 9486; AVX2: # %bb.0: # %entry 9487; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9488; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9489; AVX2-NEXT: retq 9490; 9491; AVX512F-LABEL: test180: 9492; AVX512F: # %bb.0: # %entry 9493; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9494; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9495; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 9496; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9497; AVX512F-NEXT: retq 9498; 9499; AVX512BW-LABEL: test180: 9500; AVX512BW: # %bb.0: # %entry 9501; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 9502; AVX512BW-NEXT: retq 9503entry: 9504 %cmp = icmp sge <2 x i64> %a, %b 9505 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9506 ret <2 x i64> %sel 9507} 9508 9509define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) { 9510; SSE2-LABEL: test181: 9511; SSE2: # %bb.0: # %entry 9512; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 9513; SSE2-NEXT: movdqa %xmm0, %xmm3 9514; SSE2-NEXT: pxor %xmm2, %xmm3 9515; SSE2-NEXT: pxor %xmm1, %xmm2 9516; SSE2-NEXT: movdqa %xmm2, %xmm4 9517; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9518; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9519; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9520; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9521; SSE2-NEXT: pand %xmm5, %xmm2 9522; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9523; SSE2-NEXT: por %xmm2, %xmm3 9524; SSE2-NEXT: pand %xmm3, %xmm0 9525; SSE2-NEXT: pandn %xmm1, %xmm3 9526; SSE2-NEXT: por %xmm3, %xmm0 9527; SSE2-NEXT: retq 9528; 9529; SSE4-LABEL: test181: 9530; SSE4: # %bb.0: # %entry 9531; SSE4-NEXT: movdqa %xmm0, %xmm2 9532; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9533; SSE4-NEXT: movdqa %xmm2, %xmm3 9534; SSE4-NEXT: pxor %xmm0, %xmm3 9535; SSE4-NEXT: pxor %xmm1, %xmm0 9536; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9537; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9538; SSE4-NEXT: movapd %xmm1, %xmm0 9539; SSE4-NEXT: retq 9540; 9541; AVX1-LABEL: test181: 9542; AVX1: # %bb.0: # %entry 9543; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9544; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 9545; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 9546; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9547; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9548; AVX1-NEXT: retq 9549; 9550; AVX2-LABEL: test181: 9551; AVX2: # %bb.0: # %entry 9552; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9553; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 9554; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 9555; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9556; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9557; AVX2-NEXT: retq 9558; 9559; AVX512F-LABEL: test181: 9560; AVX512F: # %bb.0: # %entry 9561; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9562; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9563; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 9564; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9565; AVX512F-NEXT: retq 9566; 9567; AVX512BW-LABEL: test181: 9568; AVX512BW: # %bb.0: # %entry 9569; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 9570; AVX512BW-NEXT: retq 9571entry: 9572 %cmp = icmp ult <2 x i64> %a, %b 9573 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9574 ret <2 x i64> %sel 9575} 9576 9577define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) { 9578; SSE2-LABEL: test182: 9579; SSE2: # %bb.0: # %entry 9580; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 9581; SSE2-NEXT: movdqa %xmm0, %xmm3 9582; SSE2-NEXT: pxor %xmm2, %xmm3 9583; SSE2-NEXT: pxor %xmm1, %xmm2 9584; SSE2-NEXT: movdqa %xmm2, %xmm4 9585; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9586; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9587; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9588; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9589; SSE2-NEXT: pand %xmm5, %xmm2 9590; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9591; SSE2-NEXT: por %xmm2, %xmm3 9592; SSE2-NEXT: pand %xmm3, %xmm0 9593; SSE2-NEXT: pandn %xmm1, %xmm3 9594; SSE2-NEXT: por %xmm3, %xmm0 9595; SSE2-NEXT: retq 9596; 9597; SSE4-LABEL: test182: 9598; SSE4: # %bb.0: # %entry 9599; SSE4-NEXT: movdqa %xmm0, %xmm2 9600; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9601; SSE4-NEXT: movdqa %xmm2, %xmm3 9602; SSE4-NEXT: pxor %xmm0, %xmm3 9603; SSE4-NEXT: pxor %xmm1, %xmm0 9604; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9605; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9606; SSE4-NEXT: movapd %xmm1, %xmm0 9607; SSE4-NEXT: retq 9608; 9609; AVX1-LABEL: test182: 9610; AVX1: # %bb.0: # %entry 9611; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9612; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 9613; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 9614; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9615; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9616; AVX1-NEXT: retq 9617; 9618; AVX2-LABEL: test182: 9619; AVX2: # %bb.0: # %entry 9620; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9621; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 9622; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 9623; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9624; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9625; AVX2-NEXT: retq 9626; 9627; AVX512F-LABEL: test182: 9628; AVX512F: # %bb.0: # %entry 9629; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9630; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9631; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 9632; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9633; AVX512F-NEXT: retq 9634; 9635; AVX512BW-LABEL: test182: 9636; AVX512BW: # %bb.0: # %entry 9637; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 9638; AVX512BW-NEXT: retq 9639entry: 9640 %cmp = icmp ule <2 x i64> %a, %b 9641 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9642 ret <2 x i64> %sel 9643} 9644 9645define <2 x i64> @test183(<2 x i64> %a, <2 x i64> %b) { 9646; SSE2-LABEL: test183: 9647; SSE2: # %bb.0: # %entry 9648; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 9649; SSE2-NEXT: movdqa %xmm1, %xmm3 9650; SSE2-NEXT: pxor %xmm2, %xmm3 9651; SSE2-NEXT: pxor %xmm0, %xmm2 9652; SSE2-NEXT: movdqa %xmm2, %xmm4 9653; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9654; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9655; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9656; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9657; SSE2-NEXT: pand %xmm5, %xmm2 9658; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9659; SSE2-NEXT: por %xmm2, %xmm3 9660; SSE2-NEXT: pand %xmm3, %xmm0 9661; SSE2-NEXT: pandn %xmm1, %xmm3 9662; SSE2-NEXT: por %xmm3, %xmm0 9663; SSE2-NEXT: retq 9664; 9665; SSE4-LABEL: test183: 9666; SSE4: # %bb.0: # %entry 9667; SSE4-NEXT: movdqa %xmm0, %xmm2 9668; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9669; SSE4-NEXT: movdqa %xmm1, %xmm3 9670; SSE4-NEXT: pxor %xmm0, %xmm3 9671; SSE4-NEXT: pxor %xmm2, %xmm0 9672; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9673; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9674; SSE4-NEXT: movapd %xmm1, %xmm0 9675; SSE4-NEXT: retq 9676; 9677; AVX1-LABEL: test183: 9678; AVX1: # %bb.0: # %entry 9679; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9680; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 9681; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 9682; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9683; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9684; AVX1-NEXT: retq 9685; 9686; AVX2-LABEL: test183: 9687; AVX2: # %bb.0: # %entry 9688; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9689; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 9690; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 9691; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9692; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9693; AVX2-NEXT: retq 9694; 9695; AVX512F-LABEL: test183: 9696; AVX512F: # %bb.0: # %entry 9697; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9698; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9699; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 9700; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9701; AVX512F-NEXT: retq 9702; 9703; AVX512BW-LABEL: test183: 9704; AVX512BW: # %bb.0: # %entry 9705; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 9706; AVX512BW-NEXT: retq 9707entry: 9708 %cmp = icmp ugt <2 x i64> %a, %b 9709 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9710 ret <2 x i64> %sel 9711} 9712 9713define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) { 9714; SSE2-LABEL: test184: 9715; SSE2: # %bb.0: # %entry 9716; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 9717; SSE2-NEXT: movdqa %xmm1, %xmm3 9718; SSE2-NEXT: pxor %xmm2, %xmm3 9719; SSE2-NEXT: pxor %xmm0, %xmm2 9720; SSE2-NEXT: movdqa %xmm2, %xmm4 9721; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9722; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9723; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9724; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9725; SSE2-NEXT: pand %xmm5, %xmm2 9726; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9727; SSE2-NEXT: por %xmm2, %xmm3 9728; SSE2-NEXT: pand %xmm3, %xmm0 9729; SSE2-NEXT: pandn %xmm1, %xmm3 9730; SSE2-NEXT: por %xmm3, %xmm0 9731; SSE2-NEXT: retq 9732; 9733; SSE4-LABEL: test184: 9734; SSE4: # %bb.0: # %entry 9735; SSE4-NEXT: movdqa %xmm0, %xmm2 9736; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9737; SSE4-NEXT: movdqa %xmm1, %xmm3 9738; SSE4-NEXT: pxor %xmm0, %xmm3 9739; SSE4-NEXT: pxor %xmm2, %xmm0 9740; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9741; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9742; SSE4-NEXT: movapd %xmm1, %xmm0 9743; SSE4-NEXT: retq 9744; 9745; AVX1-LABEL: test184: 9746; AVX1: # %bb.0: # %entry 9747; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9748; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 9749; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 9750; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9751; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9752; AVX1-NEXT: retq 9753; 9754; AVX2-LABEL: test184: 9755; AVX2: # %bb.0: # %entry 9756; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9757; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 9758; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 9759; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9760; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9761; AVX2-NEXT: retq 9762; 9763; AVX512F-LABEL: test184: 9764; AVX512F: # %bb.0: # %entry 9765; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9766; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9767; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 9768; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9769; AVX512F-NEXT: retq 9770; 9771; AVX512BW-LABEL: test184: 9772; AVX512BW: # %bb.0: # %entry 9773; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 9774; AVX512BW-NEXT: retq 9775entry: 9776 %cmp = icmp uge <2 x i64> %a, %b 9777 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9778 ret <2 x i64> %sel 9779} 9780 9781define <2 x i64> @test185(<2 x i64> %a, <2 x i64> %b) { 9782; SSE2-LABEL: test185: 9783; SSE2: # %bb.0: # %entry 9784; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9785; SSE2-NEXT: movdqa %xmm1, %xmm3 9786; SSE2-NEXT: pxor %xmm2, %xmm3 9787; SSE2-NEXT: pxor %xmm0, %xmm2 9788; SSE2-NEXT: movdqa %xmm2, %xmm4 9789; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9790; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9791; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9792; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9793; SSE2-NEXT: pand %xmm5, %xmm2 9794; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9795; SSE2-NEXT: por %xmm2, %xmm3 9796; SSE2-NEXT: pand %xmm3, %xmm0 9797; SSE2-NEXT: pandn %xmm1, %xmm3 9798; SSE2-NEXT: por %xmm3, %xmm0 9799; SSE2-NEXT: retq 9800; 9801; SSE4-LABEL: test185: 9802; SSE4: # %bb.0: # %entry 9803; SSE4-NEXT: movdqa %xmm0, %xmm2 9804; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 9805; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9806; SSE4-NEXT: movapd %xmm1, %xmm0 9807; SSE4-NEXT: retq 9808; 9809; AVX1-LABEL: test185: 9810; AVX1: # %bb.0: # %entry 9811; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9812; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9813; AVX1-NEXT: retq 9814; 9815; AVX2-LABEL: test185: 9816; AVX2: # %bb.0: # %entry 9817; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9818; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9819; AVX2-NEXT: retq 9820; 9821; AVX512F-LABEL: test185: 9822; AVX512F: # %bb.0: # %entry 9823; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9824; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9825; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 9826; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9827; AVX512F-NEXT: retq 9828; 9829; AVX512BW-LABEL: test185: 9830; AVX512BW: # %bb.0: # %entry 9831; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 9832; AVX512BW-NEXT: retq 9833entry: 9834 %cmp = icmp slt <2 x i64> %a, %b 9835 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9836 ret <2 x i64> %sel 9837} 9838 9839define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) { 9840; SSE2-LABEL: test186: 9841; SSE2: # %bb.0: # %entry 9842; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9843; SSE2-NEXT: movdqa %xmm1, %xmm3 9844; SSE2-NEXT: pxor %xmm2, %xmm3 9845; SSE2-NEXT: pxor %xmm0, %xmm2 9846; SSE2-NEXT: movdqa %xmm2, %xmm4 9847; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9848; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9849; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9850; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9851; SSE2-NEXT: pand %xmm5, %xmm2 9852; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9853; SSE2-NEXT: por %xmm2, %xmm3 9854; SSE2-NEXT: pand %xmm3, %xmm0 9855; SSE2-NEXT: pandn %xmm1, %xmm3 9856; SSE2-NEXT: por %xmm3, %xmm0 9857; SSE2-NEXT: retq 9858; 9859; SSE4-LABEL: test186: 9860; SSE4: # %bb.0: # %entry 9861; SSE4-NEXT: movdqa %xmm0, %xmm2 9862; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 9863; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9864; SSE4-NEXT: movapd %xmm1, %xmm0 9865; SSE4-NEXT: retq 9866; 9867; AVX1-LABEL: test186: 9868; AVX1: # %bb.0: # %entry 9869; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9870; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9871; AVX1-NEXT: retq 9872; 9873; AVX2-LABEL: test186: 9874; AVX2: # %bb.0: # %entry 9875; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9876; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9877; AVX2-NEXT: retq 9878; 9879; AVX512F-LABEL: test186: 9880; AVX512F: # %bb.0: # %entry 9881; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9882; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9883; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 9884; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9885; AVX512F-NEXT: retq 9886; 9887; AVX512BW-LABEL: test186: 9888; AVX512BW: # %bb.0: # %entry 9889; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 9890; AVX512BW-NEXT: retq 9891entry: 9892 %cmp = icmp sle <2 x i64> %a, %b 9893 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9894 ret <2 x i64> %sel 9895} 9896 9897define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) { 9898; SSE2-LABEL: test187: 9899; SSE2: # %bb.0: # %entry 9900; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9901; SSE2-NEXT: movdqa %xmm0, %xmm3 9902; SSE2-NEXT: pxor %xmm2, %xmm3 9903; SSE2-NEXT: pxor %xmm1, %xmm2 9904; SSE2-NEXT: movdqa %xmm2, %xmm4 9905; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9906; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9907; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9908; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9909; SSE2-NEXT: pand %xmm5, %xmm2 9910; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9911; SSE2-NEXT: por %xmm2, %xmm3 9912; SSE2-NEXT: pand %xmm3, %xmm0 9913; SSE2-NEXT: pandn %xmm1, %xmm3 9914; SSE2-NEXT: por %xmm3, %xmm0 9915; SSE2-NEXT: retq 9916; 9917; SSE4-LABEL: test187: 9918; SSE4: # %bb.0: # %entry 9919; SSE4-NEXT: movdqa %xmm0, %xmm2 9920; SSE4-NEXT: movdqa %xmm1, %xmm0 9921; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9922; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9923; SSE4-NEXT: movapd %xmm1, %xmm0 9924; SSE4-NEXT: retq 9925; 9926; AVX1-LABEL: test187: 9927; AVX1: # %bb.0: # %entry 9928; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9929; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9930; AVX1-NEXT: retq 9931; 9932; AVX2-LABEL: test187: 9933; AVX2: # %bb.0: # %entry 9934; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9935; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9936; AVX2-NEXT: retq 9937; 9938; AVX512F-LABEL: test187: 9939; AVX512F: # %bb.0: # %entry 9940; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9941; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9942; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 9943; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9944; AVX512F-NEXT: retq 9945; 9946; AVX512BW-LABEL: test187: 9947; AVX512BW: # %bb.0: # %entry 9948; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 9949; AVX512BW-NEXT: retq 9950entry: 9951 %cmp = icmp sgt <2 x i64> %a, %b 9952 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9953 ret <2 x i64> %sel 9954} 9955 9956define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) { 9957; SSE2-LABEL: test188: 9958; SSE2: # %bb.0: # %entry 9959; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9960; SSE2-NEXT: movdqa %xmm0, %xmm3 9961; SSE2-NEXT: pxor %xmm2, %xmm3 9962; SSE2-NEXT: pxor %xmm1, %xmm2 9963; SSE2-NEXT: movdqa %xmm2, %xmm4 9964; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9965; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9966; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9967; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9968; SSE2-NEXT: pand %xmm5, %xmm2 9969; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9970; SSE2-NEXT: por %xmm2, %xmm3 9971; SSE2-NEXT: pand %xmm3, %xmm0 9972; SSE2-NEXT: pandn %xmm1, %xmm3 9973; SSE2-NEXT: por %xmm3, %xmm0 9974; SSE2-NEXT: retq 9975; 9976; SSE4-LABEL: test188: 9977; SSE4: # %bb.0: # %entry 9978; SSE4-NEXT: movdqa %xmm0, %xmm2 9979; SSE4-NEXT: movdqa %xmm1, %xmm0 9980; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9981; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9982; SSE4-NEXT: movapd %xmm1, %xmm0 9983; SSE4-NEXT: retq 9984; 9985; AVX1-LABEL: test188: 9986; AVX1: # %bb.0: # %entry 9987; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9988; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9989; AVX1-NEXT: retq 9990; 9991; AVX2-LABEL: test188: 9992; AVX2: # %bb.0: # %entry 9993; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9994; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9995; AVX2-NEXT: retq 9996; 9997; AVX512F-LABEL: test188: 9998; AVX512F: # %bb.0: # %entry 9999; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 10000; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 10001; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 10002; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 10003; AVX512F-NEXT: retq 10004; 10005; AVX512BW-LABEL: test188: 10006; AVX512BW: # %bb.0: # %entry 10007; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 10008; AVX512BW-NEXT: retq 10009entry: 10010 %cmp = icmp sge <2 x i64> %a, %b 10011 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10012 ret <2 x i64> %sel 10013} 10014 10015define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) { 10016; SSE2-LABEL: test189: 10017; SSE2: # %bb.0: # %entry 10018; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 10019; SSE2-NEXT: movdqa %xmm1, %xmm3 10020; SSE2-NEXT: pxor %xmm2, %xmm3 10021; SSE2-NEXT: pxor %xmm0, %xmm2 10022; SSE2-NEXT: movdqa %xmm2, %xmm4 10023; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10024; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10025; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10026; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10027; SSE2-NEXT: pand %xmm5, %xmm2 10028; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10029; SSE2-NEXT: por %xmm2, %xmm3 10030; SSE2-NEXT: pand %xmm3, %xmm0 10031; SSE2-NEXT: pandn %xmm1, %xmm3 10032; SSE2-NEXT: por %xmm3, %xmm0 10033; SSE2-NEXT: retq 10034; 10035; SSE4-LABEL: test189: 10036; SSE4: # %bb.0: # %entry 10037; SSE4-NEXT: movdqa %xmm0, %xmm2 10038; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10039; SSE4-NEXT: movdqa %xmm1, %xmm3 10040; SSE4-NEXT: pxor %xmm0, %xmm3 10041; SSE4-NEXT: pxor %xmm2, %xmm0 10042; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10043; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 10044; SSE4-NEXT: movapd %xmm1, %xmm0 10045; SSE4-NEXT: retq 10046; 10047; AVX1-LABEL: test189: 10048; AVX1: # %bb.0: # %entry 10049; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10050; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 10051; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 10052; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10053; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10054; AVX1-NEXT: retq 10055; 10056; AVX2-LABEL: test189: 10057; AVX2: # %bb.0: # %entry 10058; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10059; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 10060; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 10061; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10062; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10063; AVX2-NEXT: retq 10064; 10065; AVX512F-LABEL: test189: 10066; AVX512F: # %bb.0: # %entry 10067; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 10068; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 10069; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 10070; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 10071; AVX512F-NEXT: retq 10072; 10073; AVX512BW-LABEL: test189: 10074; AVX512BW: # %bb.0: # %entry 10075; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 10076; AVX512BW-NEXT: retq 10077entry: 10078 %cmp = icmp ult <2 x i64> %a, %b 10079 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10080 ret <2 x i64> %sel 10081} 10082 10083define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) { 10084; SSE2-LABEL: test190: 10085; SSE2: # %bb.0: # %entry 10086; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 10087; SSE2-NEXT: movdqa %xmm1, %xmm3 10088; SSE2-NEXT: pxor %xmm2, %xmm3 10089; SSE2-NEXT: pxor %xmm0, %xmm2 10090; SSE2-NEXT: movdqa %xmm2, %xmm4 10091; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10092; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10093; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10094; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10095; SSE2-NEXT: pand %xmm5, %xmm2 10096; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10097; SSE2-NEXT: por %xmm2, %xmm3 10098; SSE2-NEXT: pand %xmm3, %xmm0 10099; SSE2-NEXT: pandn %xmm1, %xmm3 10100; SSE2-NEXT: por %xmm3, %xmm0 10101; SSE2-NEXT: retq 10102; 10103; SSE4-LABEL: test190: 10104; SSE4: # %bb.0: # %entry 10105; SSE4-NEXT: movdqa %xmm0, %xmm2 10106; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10107; SSE4-NEXT: movdqa %xmm1, %xmm3 10108; SSE4-NEXT: pxor %xmm0, %xmm3 10109; SSE4-NEXT: pxor %xmm2, %xmm0 10110; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10111; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 10112; SSE4-NEXT: movapd %xmm1, %xmm0 10113; SSE4-NEXT: retq 10114; 10115; AVX1-LABEL: test190: 10116; AVX1: # %bb.0: # %entry 10117; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10118; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 10119; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 10120; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10121; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10122; AVX1-NEXT: retq 10123; 10124; AVX2-LABEL: test190: 10125; AVX2: # %bb.0: # %entry 10126; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10127; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 10128; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 10129; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10130; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10131; AVX2-NEXT: retq 10132; 10133; AVX512F-LABEL: test190: 10134; AVX512F: # %bb.0: # %entry 10135; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 10136; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 10137; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 10138; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 10139; AVX512F-NEXT: retq 10140; 10141; AVX512BW-LABEL: test190: 10142; AVX512BW: # %bb.0: # %entry 10143; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 10144; AVX512BW-NEXT: retq 10145entry: 10146 %cmp = icmp ule <2 x i64> %a, %b 10147 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10148 ret <2 x i64> %sel 10149} 10150 10151define <2 x i64> @test191(<2 x i64> %a, <2 x i64> %b) { 10152; SSE2-LABEL: test191: 10153; SSE2: # %bb.0: # %entry 10154; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 10155; SSE2-NEXT: movdqa %xmm0, %xmm3 10156; SSE2-NEXT: pxor %xmm2, %xmm3 10157; SSE2-NEXT: pxor %xmm1, %xmm2 10158; SSE2-NEXT: movdqa %xmm2, %xmm4 10159; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10160; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10161; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10162; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10163; SSE2-NEXT: pand %xmm5, %xmm2 10164; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10165; SSE2-NEXT: por %xmm2, %xmm3 10166; SSE2-NEXT: pand %xmm3, %xmm0 10167; SSE2-NEXT: pandn %xmm1, %xmm3 10168; SSE2-NEXT: por %xmm3, %xmm0 10169; SSE2-NEXT: retq 10170; 10171; SSE4-LABEL: test191: 10172; SSE4: # %bb.0: # %entry 10173; SSE4-NEXT: movdqa %xmm0, %xmm2 10174; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10175; SSE4-NEXT: movdqa %xmm2, %xmm3 10176; SSE4-NEXT: pxor %xmm0, %xmm3 10177; SSE4-NEXT: pxor %xmm1, %xmm0 10178; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10179; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 10180; SSE4-NEXT: movapd %xmm1, %xmm0 10181; SSE4-NEXT: retq 10182; 10183; AVX1-LABEL: test191: 10184; AVX1: # %bb.0: # %entry 10185; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10186; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 10187; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 10188; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10189; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10190; AVX1-NEXT: retq 10191; 10192; AVX2-LABEL: test191: 10193; AVX2: # %bb.0: # %entry 10194; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10195; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 10196; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 10197; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10198; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10199; AVX2-NEXT: retq 10200; 10201; AVX512F-LABEL: test191: 10202; AVX512F: # %bb.0: # %entry 10203; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 10204; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 10205; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 10206; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 10207; AVX512F-NEXT: retq 10208; 10209; AVX512BW-LABEL: test191: 10210; AVX512BW: # %bb.0: # %entry 10211; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 10212; AVX512BW-NEXT: retq 10213entry: 10214 %cmp = icmp ugt <2 x i64> %a, %b 10215 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10216 ret <2 x i64> %sel 10217} 10218 10219define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) { 10220; SSE2-LABEL: test192: 10221; SSE2: # %bb.0: # %entry 10222; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 10223; SSE2-NEXT: movdqa %xmm0, %xmm3 10224; SSE2-NEXT: pxor %xmm2, %xmm3 10225; SSE2-NEXT: pxor %xmm1, %xmm2 10226; SSE2-NEXT: movdqa %xmm2, %xmm4 10227; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10228; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10229; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10230; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10231; SSE2-NEXT: pand %xmm5, %xmm2 10232; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10233; SSE2-NEXT: por %xmm2, %xmm3 10234; SSE2-NEXT: pand %xmm3, %xmm0 10235; SSE2-NEXT: pandn %xmm1, %xmm3 10236; SSE2-NEXT: por %xmm3, %xmm0 10237; SSE2-NEXT: retq 10238; 10239; SSE4-LABEL: test192: 10240; SSE4: # %bb.0: # %entry 10241; SSE4-NEXT: movdqa %xmm0, %xmm2 10242; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10243; SSE4-NEXT: movdqa %xmm2, %xmm3 10244; SSE4-NEXT: pxor %xmm0, %xmm3 10245; SSE4-NEXT: pxor %xmm1, %xmm0 10246; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10247; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 10248; SSE4-NEXT: movapd %xmm1, %xmm0 10249; SSE4-NEXT: retq 10250; 10251; AVX1-LABEL: test192: 10252; AVX1: # %bb.0: # %entry 10253; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10254; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 10255; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 10256; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10257; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10258; AVX1-NEXT: retq 10259; 10260; AVX2-LABEL: test192: 10261; AVX2: # %bb.0: # %entry 10262; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10263; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 10264; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 10265; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10266; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10267; AVX2-NEXT: retq 10268; 10269; AVX512F-LABEL: test192: 10270; AVX512F: # %bb.0: # %entry 10271; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 10272; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 10273; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 10274; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 10275; AVX512F-NEXT: retq 10276; 10277; AVX512BW-LABEL: test192: 10278; AVX512BW: # %bb.0: # %entry 10279; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 10280; AVX512BW-NEXT: retq 10281entry: 10282 %cmp = icmp uge <2 x i64> %a, %b 10283 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10284 ret <2 x i64> %sel 10285} 10286 10287; FIXME: comparisons for smin/smax patterns can be reused 10288define <8 x i64> @concat_smin_smax(<4 x i64> %a0, <4 x i64> %a1) { 10289; SSE2-LABEL: concat_smin_smax: 10290; SSE2: # %bb.0: 10291; SSE2-NEXT: movdqa %xmm0, %xmm8 10292; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,2147483648] 10293; SSE2-NEXT: movdqa %xmm0, %xmm6 10294; SSE2-NEXT: pxor %xmm11, %xmm6 10295; SSE2-NEXT: movdqa %xmm2, %xmm9 10296; SSE2-NEXT: pxor %xmm11, %xmm9 10297; SSE2-NEXT: movdqa %xmm9, %xmm0 10298; SSE2-NEXT: pcmpgtd %xmm6, %xmm0 10299; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm0[0,0,2,2] 10300; SSE2-NEXT: movdqa %xmm9, %xmm5 10301; SSE2-NEXT: pcmpeqd %xmm6, %xmm5 10302; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[1,1,3,3] 10303; SSE2-NEXT: pand %xmm10, %xmm4 10304; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 10305; SSE2-NEXT: por %xmm4, %xmm0 10306; SSE2-NEXT: movdqa %xmm8, %xmm4 10307; SSE2-NEXT: pand %xmm0, %xmm4 10308; SSE2-NEXT: pandn %xmm2, %xmm0 10309; SSE2-NEXT: por %xmm4, %xmm0 10310; SSE2-NEXT: movdqa %xmm1, %xmm4 10311; SSE2-NEXT: pxor %xmm11, %xmm4 10312; SSE2-NEXT: pxor %xmm3, %xmm11 10313; SSE2-NEXT: movdqa %xmm11, %xmm5 10314; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 10315; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm5[0,0,2,2] 10316; SSE2-NEXT: movdqa %xmm11, %xmm7 10317; SSE2-NEXT: pcmpeqd %xmm4, %xmm7 10318; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm7[1,1,3,3] 10319; SSE2-NEXT: pand %xmm13, %xmm12 10320; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 10321; SSE2-NEXT: por %xmm12, %xmm5 10322; SSE2-NEXT: movdqa %xmm1, %xmm7 10323; SSE2-NEXT: pand %xmm5, %xmm7 10324; SSE2-NEXT: pandn %xmm3, %xmm5 10325; SSE2-NEXT: por %xmm7, %xmm5 10326; SSE2-NEXT: pcmpgtd %xmm9, %xmm6 10327; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 10328; SSE2-NEXT: pand %xmm10, %xmm7 10329; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 10330; SSE2-NEXT: por %xmm7, %xmm6 10331; SSE2-NEXT: pand %xmm6, %xmm8 10332; SSE2-NEXT: pandn %xmm2, %xmm6 10333; SSE2-NEXT: por %xmm8, %xmm6 10334; SSE2-NEXT: pcmpgtd %xmm11, %xmm4 10335; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[0,0,2,2] 10336; SSE2-NEXT: pand %xmm13, %xmm2 10337; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 10338; SSE2-NEXT: por %xmm2, %xmm4 10339; SSE2-NEXT: pand %xmm4, %xmm1 10340; SSE2-NEXT: pandn %xmm3, %xmm4 10341; SSE2-NEXT: por %xmm1, %xmm4 10342; SSE2-NEXT: movdqa %xmm5, %xmm1 10343; SSE2-NEXT: movdqa %xmm6, %xmm2 10344; SSE2-NEXT: movdqa %xmm4, %xmm3 10345; SSE2-NEXT: retq 10346; 10347; SSE4-LABEL: concat_smin_smax: 10348; SSE4: # %bb.0: 10349; SSE4-NEXT: movdqa %xmm0, %xmm4 10350; SSE4-NEXT: movdqa %xmm2, %xmm0 10351; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 10352; SSE4-NEXT: movdqa %xmm2, %xmm5 10353; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm5 10354; SSE4-NEXT: movdqa %xmm3, %xmm0 10355; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 10356; SSE4-NEXT: movdqa %xmm3, %xmm6 10357; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm6 10358; SSE4-NEXT: movdqa %xmm4, %xmm0 10359; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 10360; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 10361; SSE4-NEXT: movdqa %xmm1, %xmm0 10362; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10363; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 10364; SSE4-NEXT: movapd %xmm5, %xmm0 10365; SSE4-NEXT: movapd %xmm6, %xmm1 10366; SSE4-NEXT: retq 10367; 10368; AVX1-LABEL: concat_smin_smax: 10369; AVX1: # %bb.0: 10370; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 10371; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 10372; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm2 10373; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm5 10374; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm5, %ymm2 10375; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm2 10376; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 10377; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm4 10378; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3 10379; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm1, %ymm1 10380; AVX1-NEXT: vmovapd %ymm2, %ymm0 10381; AVX1-NEXT: retq 10382; 10383; AVX2-LABEL: concat_smin_smax: 10384; AVX2: # %bb.0: 10385; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 10386; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm2 10387; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm3 10388; AVX2-NEXT: vblendvpd %ymm3, %ymm0, %ymm1, %ymm1 10389; AVX2-NEXT: vmovapd %ymm2, %ymm0 10390; AVX2-NEXT: retq 10391; 10392; AVX512F-LABEL: concat_smin_smax: 10393; AVX512F: # %bb.0: 10394; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 10395; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10396; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm2 10397; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 10398; AVX512F-NEXT: vinserti64x4 $1, %ymm0, %zmm2, %zmm0 10399; AVX512F-NEXT: retq 10400; 10401; AVX512BW-LABEL: concat_smin_smax: 10402; AVX512BW: # %bb.0: 10403; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm2 10404; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 10405; AVX512BW-NEXT: vinserti64x4 $1, %ymm0, %zmm2, %zmm0 10406; AVX512BW-NEXT: retq 10407 %cmp = icmp slt <4 x i64> %a0, %a1 10408 %min = select <4 x i1> %cmp, <4 x i64> %a0, <4 x i64> %a1 10409 %max = select <4 x i1> %cmp, <4 x i64> %a1, <4 x i64> %a0 10410 %res = shufflevector <4 x i64> %min, <4 x i64> %max, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 10411 ret <8 x i64> %res 10412} 10413