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, %xmm4 4200; SSE2-NEXT: pxor %xmm8, %xmm4 4201; SSE2-NEXT: movdqa %xmm5, %xmm9 4202; SSE2-NEXT: pxor %xmm8, %xmm9 4203; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4204; SSE2-NEXT: pand %xmm9, %xmm1 4205; SSE2-NEXT: pandn %xmm5, %xmm9 4206; SSE2-NEXT: por %xmm9, %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, %xmm4 4275; SSE2-NEXT: pxor %xmm8, %xmm4 4276; SSE2-NEXT: movdqa %xmm5, %xmm9 4277; SSE2-NEXT: pxor %xmm8, %xmm9 4278; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4279; SSE2-NEXT: pand %xmm9, %xmm1 4280; SSE2-NEXT: pandn %xmm5, %xmm9 4281; SSE2-NEXT: por %xmm9, %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, %xmm4 4350; SSE2-NEXT: pxor %xmm8, %xmm4 4351; SSE2-NEXT: movdqa %xmm1, %xmm9 4352; SSE2-NEXT: pxor %xmm8, %xmm9 4353; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4354; SSE2-NEXT: pand %xmm9, %xmm1 4355; SSE2-NEXT: pandn %xmm5, %xmm9 4356; SSE2-NEXT: por %xmm9, %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, %xmm4 4425; SSE2-NEXT: pxor %xmm8, %xmm4 4426; SSE2-NEXT: movdqa %xmm1, %xmm9 4427; SSE2-NEXT: pxor %xmm8, %xmm9 4428; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4429; SSE2-NEXT: pand %xmm9, %xmm1 4430; SSE2-NEXT: pandn %xmm5, %xmm9 4431; SSE2-NEXT: por %xmm9, %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, %xmm4 4507; SSE2-NEXT: pxor %xmm8, %xmm4 4508; SSE2-NEXT: movdqa %xmm5, %xmm9 4509; SSE2-NEXT: pxor %xmm8, %xmm9 4510; SSE2-NEXT: movdqa %xmm9, %xmm10 4511; SSE2-NEXT: pcmpgtd %xmm4, %xmm10 4512; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4513; SSE2-NEXT: pcmpeqd %xmm4, %xmm9 4514; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3] 4515; SSE2-NEXT: pand %xmm11, %xmm4 4516; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4517; SSE2-NEXT: por %xmm4, %xmm9 4518; SSE2-NEXT: pand %xmm9, %xmm1 4519; SSE2-NEXT: pandn %xmm5, %xmm9 4520; SSE2-NEXT: por %xmm9, %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 %xmm0, %xmm8 4555; SSE4-NEXT: movdqa %xmm4, %xmm0 4556; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 4557; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 4558; SSE4-NEXT: movdqa %xmm5, %xmm0 4559; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 4560; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 4561; SSE4-NEXT: movdqa %xmm6, %xmm0 4562; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 4563; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 4564; SSE4-NEXT: movdqa %xmm7, %xmm0 4565; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 4566; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 4567; SSE4-NEXT: movapd %xmm4, %xmm0 4568; SSE4-NEXT: movapd %xmm5, %xmm1 4569; SSE4-NEXT: movapd %xmm6, %xmm2 4570; SSE4-NEXT: movapd %xmm7, %xmm3 4571; SSE4-NEXT: retq 4572; 4573; AVX1-LABEL: test121: 4574; AVX1: # %bb.0: # %entry 4575; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 4576; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 4577; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4578; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm5 4579; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4580; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4581; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 4582; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 4583; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 4584; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm4 4585; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 4586; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4587; AVX1-NEXT: retq 4588; 4589; AVX2-LABEL: test121: 4590; AVX2: # %bb.0: # %entry 4591; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm4 4592; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4593; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm2 4594; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4595; AVX2-NEXT: retq 4596; 4597; AVX512-LABEL: test121: 4598; AVX512: # %bb.0: # %entry 4599; AVX512-NEXT: vpminsq %zmm1, %zmm0, %zmm0 4600; AVX512-NEXT: retq 4601entry: 4602 %cmp = icmp slt <8 x i64> %a, %b 4603 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4604 ret <8 x i64> %sel 4605} 4606 4607define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) { 4608; SSE2-LABEL: test122: 4609; SSE2: # %bb.0: # %entry 4610; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 4611; SSE2-NEXT: movdqa %xmm0, %xmm9 4612; SSE2-NEXT: pxor %xmm8, %xmm9 4613; SSE2-NEXT: movdqa %xmm4, %xmm10 4614; SSE2-NEXT: pxor %xmm8, %xmm10 4615; SSE2-NEXT: movdqa %xmm10, %xmm11 4616; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4617; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4618; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4619; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4620; SSE2-NEXT: pand %xmm12, %xmm9 4621; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4622; SSE2-NEXT: por %xmm9, %xmm10 4623; SSE2-NEXT: pand %xmm10, %xmm0 4624; SSE2-NEXT: pandn %xmm4, %xmm10 4625; SSE2-NEXT: por %xmm10, %xmm0 4626; SSE2-NEXT: movdqa %xmm1, %xmm4 4627; SSE2-NEXT: pxor %xmm8, %xmm4 4628; SSE2-NEXT: movdqa %xmm5, %xmm9 4629; SSE2-NEXT: pxor %xmm8, %xmm9 4630; SSE2-NEXT: movdqa %xmm9, %xmm10 4631; SSE2-NEXT: pcmpgtd %xmm4, %xmm10 4632; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4633; SSE2-NEXT: pcmpeqd %xmm4, %xmm9 4634; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3] 4635; SSE2-NEXT: pand %xmm11, %xmm4 4636; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4637; SSE2-NEXT: por %xmm4, %xmm9 4638; SSE2-NEXT: pand %xmm9, %xmm1 4639; SSE2-NEXT: pandn %xmm5, %xmm9 4640; SSE2-NEXT: por %xmm9, %xmm1 4641; SSE2-NEXT: movdqa %xmm2, %xmm4 4642; SSE2-NEXT: pxor %xmm8, %xmm4 4643; SSE2-NEXT: movdqa %xmm6, %xmm5 4644; SSE2-NEXT: pxor %xmm8, %xmm5 4645; SSE2-NEXT: movdqa %xmm5, %xmm9 4646; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4647; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4648; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4649; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4650; SSE2-NEXT: pand %xmm10, %xmm4 4651; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4652; SSE2-NEXT: por %xmm4, %xmm5 4653; SSE2-NEXT: pand %xmm5, %xmm2 4654; SSE2-NEXT: pandn %xmm6, %xmm5 4655; SSE2-NEXT: por %xmm5, %xmm2 4656; SSE2-NEXT: movdqa %xmm3, %xmm4 4657; SSE2-NEXT: pxor %xmm8, %xmm4 4658; SSE2-NEXT: pxor %xmm7, %xmm8 4659; SSE2-NEXT: movdqa %xmm8, %xmm5 4660; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4661; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 4662; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 4663; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 4664; SSE2-NEXT: pand %xmm6, %xmm4 4665; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 4666; SSE2-NEXT: por %xmm4, %xmm5 4667; SSE2-NEXT: pand %xmm5, %xmm3 4668; SSE2-NEXT: pandn %xmm7, %xmm5 4669; SSE2-NEXT: por %xmm5, %xmm3 4670; SSE2-NEXT: retq 4671; 4672; SSE4-LABEL: test122: 4673; SSE4: # %bb.0: # %entry 4674; SSE4-NEXT: movdqa %xmm0, %xmm8 4675; SSE4-NEXT: movdqa %xmm4, %xmm0 4676; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 4677; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 4678; SSE4-NEXT: movdqa %xmm5, %xmm0 4679; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 4680; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 4681; SSE4-NEXT: movdqa %xmm6, %xmm0 4682; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 4683; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 4684; SSE4-NEXT: movdqa %xmm7, %xmm0 4685; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 4686; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 4687; SSE4-NEXT: movapd %xmm4, %xmm0 4688; SSE4-NEXT: movapd %xmm5, %xmm1 4689; SSE4-NEXT: movapd %xmm6, %xmm2 4690; SSE4-NEXT: movapd %xmm7, %xmm3 4691; SSE4-NEXT: retq 4692; 4693; AVX1-LABEL: test122: 4694; AVX1: # %bb.0: # %entry 4695; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 4696; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 4697; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4698; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm5 4699; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4700; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4701; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 4702; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 4703; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 4704; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm4 4705; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 4706; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4707; AVX1-NEXT: retq 4708; 4709; AVX2-LABEL: test122: 4710; AVX2: # %bb.0: # %entry 4711; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm4 4712; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4713; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm2 4714; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4715; AVX2-NEXT: retq 4716; 4717; AVX512-LABEL: test122: 4718; AVX512: # %bb.0: # %entry 4719; AVX512-NEXT: vpminsq %zmm1, %zmm0, %zmm0 4720; AVX512-NEXT: retq 4721entry: 4722 %cmp = icmp sle <8 x i64> %a, %b 4723 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4724 ret <8 x i64> %sel 4725} 4726 4727define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) { 4728; SSE2-LABEL: test123: 4729; SSE2: # %bb.0: # %entry 4730; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 4731; SSE2-NEXT: movdqa %xmm4, %xmm9 4732; SSE2-NEXT: pxor %xmm8, %xmm9 4733; SSE2-NEXT: movdqa %xmm0, %xmm10 4734; SSE2-NEXT: pxor %xmm8, %xmm10 4735; SSE2-NEXT: movdqa %xmm10, %xmm11 4736; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4737; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4738; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4739; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4740; SSE2-NEXT: pand %xmm12, %xmm9 4741; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4742; SSE2-NEXT: por %xmm9, %xmm10 4743; SSE2-NEXT: pand %xmm10, %xmm0 4744; SSE2-NEXT: pandn %xmm4, %xmm10 4745; SSE2-NEXT: por %xmm10, %xmm0 4746; SSE2-NEXT: movdqa %xmm5, %xmm4 4747; SSE2-NEXT: pxor %xmm8, %xmm4 4748; SSE2-NEXT: movdqa %xmm1, %xmm9 4749; SSE2-NEXT: pxor %xmm8, %xmm9 4750; SSE2-NEXT: movdqa %xmm9, %xmm10 4751; SSE2-NEXT: pcmpgtd %xmm4, %xmm10 4752; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4753; SSE2-NEXT: pcmpeqd %xmm4, %xmm9 4754; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3] 4755; SSE2-NEXT: pand %xmm11, %xmm4 4756; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4757; SSE2-NEXT: por %xmm4, %xmm9 4758; SSE2-NEXT: pand %xmm9, %xmm1 4759; SSE2-NEXT: pandn %xmm5, %xmm9 4760; SSE2-NEXT: por %xmm9, %xmm1 4761; SSE2-NEXT: movdqa %xmm6, %xmm4 4762; SSE2-NEXT: pxor %xmm8, %xmm4 4763; SSE2-NEXT: movdqa %xmm2, %xmm5 4764; SSE2-NEXT: pxor %xmm8, %xmm5 4765; SSE2-NEXT: movdqa %xmm5, %xmm9 4766; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4767; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4768; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4769; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4770; SSE2-NEXT: pand %xmm10, %xmm4 4771; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4772; SSE2-NEXT: por %xmm4, %xmm5 4773; SSE2-NEXT: pand %xmm5, %xmm2 4774; SSE2-NEXT: pandn %xmm6, %xmm5 4775; SSE2-NEXT: por %xmm5, %xmm2 4776; SSE2-NEXT: movdqa %xmm7, %xmm4 4777; SSE2-NEXT: pxor %xmm8, %xmm4 4778; SSE2-NEXT: pxor %xmm3, %xmm8 4779; SSE2-NEXT: movdqa %xmm8, %xmm5 4780; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4781; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 4782; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 4783; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 4784; SSE2-NEXT: pand %xmm6, %xmm4 4785; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 4786; SSE2-NEXT: por %xmm4, %xmm5 4787; SSE2-NEXT: pand %xmm5, %xmm3 4788; SSE2-NEXT: pandn %xmm7, %xmm5 4789; SSE2-NEXT: por %xmm5, %xmm3 4790; SSE2-NEXT: retq 4791; 4792; SSE4-LABEL: test123: 4793; SSE4: # %bb.0: # %entry 4794; SSE4-NEXT: movdqa %xmm0, %xmm8 4795; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 4796; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 4797; SSE4-NEXT: movdqa %xmm1, %xmm0 4798; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 4799; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 4800; SSE4-NEXT: movdqa %xmm2, %xmm0 4801; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 4802; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 4803; SSE4-NEXT: movdqa %xmm3, %xmm0 4804; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 4805; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 4806; SSE4-NEXT: movapd %xmm4, %xmm0 4807; SSE4-NEXT: movapd %xmm5, %xmm1 4808; SSE4-NEXT: movapd %xmm6, %xmm2 4809; SSE4-NEXT: movapd %xmm7, %xmm3 4810; SSE4-NEXT: retq 4811; 4812; AVX1-LABEL: test123: 4813; AVX1: # %bb.0: # %entry 4814; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4815; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4816; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4817; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5 4818; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4819; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4820; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4821; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4822; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 4823; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4 4824; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 4825; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4826; AVX1-NEXT: retq 4827; 4828; AVX2-LABEL: test123: 4829; AVX2: # %bb.0: # %entry 4830; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4 4831; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4832; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2 4833; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4834; AVX2-NEXT: retq 4835; 4836; AVX512-LABEL: test123: 4837; AVX512: # %bb.0: # %entry 4838; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 4839; AVX512-NEXT: retq 4840entry: 4841 %cmp = icmp sgt <8 x i64> %a, %b 4842 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4843 ret <8 x i64> %sel 4844} 4845 4846define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) { 4847; SSE2-LABEL: test124: 4848; SSE2: # %bb.0: # %entry 4849; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 4850; SSE2-NEXT: movdqa %xmm4, %xmm9 4851; SSE2-NEXT: pxor %xmm8, %xmm9 4852; SSE2-NEXT: movdqa %xmm0, %xmm10 4853; SSE2-NEXT: pxor %xmm8, %xmm10 4854; SSE2-NEXT: movdqa %xmm10, %xmm11 4855; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4856; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4857; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4858; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4859; SSE2-NEXT: pand %xmm12, %xmm9 4860; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4861; SSE2-NEXT: por %xmm9, %xmm10 4862; SSE2-NEXT: pand %xmm10, %xmm0 4863; SSE2-NEXT: pandn %xmm4, %xmm10 4864; SSE2-NEXT: por %xmm10, %xmm0 4865; SSE2-NEXT: movdqa %xmm5, %xmm4 4866; SSE2-NEXT: pxor %xmm8, %xmm4 4867; SSE2-NEXT: movdqa %xmm1, %xmm9 4868; SSE2-NEXT: pxor %xmm8, %xmm9 4869; SSE2-NEXT: movdqa %xmm9, %xmm10 4870; SSE2-NEXT: pcmpgtd %xmm4, %xmm10 4871; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4872; SSE2-NEXT: pcmpeqd %xmm4, %xmm9 4873; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3] 4874; SSE2-NEXT: pand %xmm11, %xmm4 4875; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4876; SSE2-NEXT: por %xmm4, %xmm9 4877; SSE2-NEXT: pand %xmm9, %xmm1 4878; SSE2-NEXT: pandn %xmm5, %xmm9 4879; SSE2-NEXT: por %xmm9, %xmm1 4880; SSE2-NEXT: movdqa %xmm6, %xmm4 4881; SSE2-NEXT: pxor %xmm8, %xmm4 4882; SSE2-NEXT: movdqa %xmm2, %xmm5 4883; SSE2-NEXT: pxor %xmm8, %xmm5 4884; SSE2-NEXT: movdqa %xmm5, %xmm9 4885; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4886; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4887; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4888; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4889; SSE2-NEXT: pand %xmm10, %xmm4 4890; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4891; SSE2-NEXT: por %xmm4, %xmm5 4892; SSE2-NEXT: pand %xmm5, %xmm2 4893; SSE2-NEXT: pandn %xmm6, %xmm5 4894; SSE2-NEXT: por %xmm5, %xmm2 4895; SSE2-NEXT: movdqa %xmm7, %xmm4 4896; SSE2-NEXT: pxor %xmm8, %xmm4 4897; SSE2-NEXT: pxor %xmm3, %xmm8 4898; SSE2-NEXT: movdqa %xmm8, %xmm5 4899; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4900; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 4901; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 4902; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 4903; SSE2-NEXT: pand %xmm6, %xmm4 4904; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 4905; SSE2-NEXT: por %xmm4, %xmm5 4906; SSE2-NEXT: pand %xmm5, %xmm3 4907; SSE2-NEXT: pandn %xmm7, %xmm5 4908; SSE2-NEXT: por %xmm5, %xmm3 4909; SSE2-NEXT: retq 4910; 4911; SSE4-LABEL: test124: 4912; SSE4: # %bb.0: # %entry 4913; SSE4-NEXT: movdqa %xmm0, %xmm8 4914; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 4915; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 4916; SSE4-NEXT: movdqa %xmm1, %xmm0 4917; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 4918; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 4919; SSE4-NEXT: movdqa %xmm2, %xmm0 4920; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 4921; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 4922; SSE4-NEXT: movdqa %xmm3, %xmm0 4923; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 4924; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 4925; SSE4-NEXT: movapd %xmm4, %xmm0 4926; SSE4-NEXT: movapd %xmm5, %xmm1 4927; SSE4-NEXT: movapd %xmm6, %xmm2 4928; SSE4-NEXT: movapd %xmm7, %xmm3 4929; SSE4-NEXT: retq 4930; 4931; AVX1-LABEL: test124: 4932; AVX1: # %bb.0: # %entry 4933; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4934; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4935; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4936; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5 4937; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4938; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4939; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4940; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4941; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 4942; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4 4943; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 4944; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4945; AVX1-NEXT: retq 4946; 4947; AVX2-LABEL: test124: 4948; AVX2: # %bb.0: # %entry 4949; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4 4950; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4951; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2 4952; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4953; AVX2-NEXT: retq 4954; 4955; AVX512-LABEL: test124: 4956; AVX512: # %bb.0: # %entry 4957; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 4958; AVX512-NEXT: retq 4959entry: 4960 %cmp = icmp sge <8 x i64> %a, %b 4961 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4962 ret <8 x i64> %sel 4963} 4964 4965define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) { 4966; SSE2-LABEL: test125: 4967; SSE2: # %bb.0: # %entry 4968; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 4969; SSE2-NEXT: movdqa %xmm0, %xmm9 4970; SSE2-NEXT: pxor %xmm8, %xmm9 4971; SSE2-NEXT: movdqa %xmm4, %xmm10 4972; SSE2-NEXT: pxor %xmm8, %xmm10 4973; SSE2-NEXT: movdqa %xmm10, %xmm11 4974; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4975; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4976; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4977; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4978; SSE2-NEXT: pand %xmm12, %xmm9 4979; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4980; SSE2-NEXT: por %xmm9, %xmm10 4981; SSE2-NEXT: pand %xmm10, %xmm0 4982; SSE2-NEXT: pandn %xmm4, %xmm10 4983; SSE2-NEXT: por %xmm10, %xmm0 4984; SSE2-NEXT: movdqa %xmm1, %xmm4 4985; SSE2-NEXT: pxor %xmm8, %xmm4 4986; SSE2-NEXT: movdqa %xmm5, %xmm9 4987; SSE2-NEXT: pxor %xmm8, %xmm9 4988; SSE2-NEXT: movdqa %xmm9, %xmm10 4989; SSE2-NEXT: pcmpgtd %xmm4, %xmm10 4990; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4991; SSE2-NEXT: pcmpeqd %xmm4, %xmm9 4992; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3] 4993; SSE2-NEXT: pand %xmm11, %xmm4 4994; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4995; SSE2-NEXT: por %xmm4, %xmm9 4996; SSE2-NEXT: pand %xmm9, %xmm1 4997; SSE2-NEXT: pandn %xmm5, %xmm9 4998; SSE2-NEXT: por %xmm9, %xmm1 4999; SSE2-NEXT: movdqa %xmm2, %xmm4 5000; SSE2-NEXT: pxor %xmm8, %xmm4 5001; SSE2-NEXT: movdqa %xmm6, %xmm5 5002; SSE2-NEXT: pxor %xmm8, %xmm5 5003; SSE2-NEXT: movdqa %xmm5, %xmm9 5004; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 5005; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 5006; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 5007; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 5008; SSE2-NEXT: pand %xmm10, %xmm4 5009; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 5010; SSE2-NEXT: por %xmm4, %xmm5 5011; SSE2-NEXT: pand %xmm5, %xmm2 5012; SSE2-NEXT: pandn %xmm6, %xmm5 5013; SSE2-NEXT: por %xmm5, %xmm2 5014; SSE2-NEXT: movdqa %xmm3, %xmm4 5015; SSE2-NEXT: pxor %xmm8, %xmm4 5016; SSE2-NEXT: pxor %xmm7, %xmm8 5017; SSE2-NEXT: movdqa %xmm8, %xmm5 5018; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 5019; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 5020; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 5021; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 5022; SSE2-NEXT: pand %xmm6, %xmm4 5023; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 5024; SSE2-NEXT: por %xmm4, %xmm5 5025; SSE2-NEXT: pand %xmm5, %xmm3 5026; SSE2-NEXT: pandn %xmm7, %xmm5 5027; SSE2-NEXT: por %xmm5, %xmm3 5028; SSE2-NEXT: retq 5029; 5030; SSE4-LABEL: test125: 5031; SSE4: # %bb.0: # %entry 5032; SSE4-NEXT: movdqa %xmm0, %xmm9 5033; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 5034; SSE4-NEXT: movdqa %xmm0, %xmm10 5035; SSE4-NEXT: pxor %xmm8, %xmm10 5036; SSE4-NEXT: movdqa %xmm4, %xmm0 5037; SSE4-NEXT: pxor %xmm8, %xmm0 5038; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 5039; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 5040; SSE4-NEXT: movdqa %xmm1, %xmm9 5041; SSE4-NEXT: pxor %xmm8, %xmm9 5042; SSE4-NEXT: movdqa %xmm5, %xmm0 5043; SSE4-NEXT: pxor %xmm8, %xmm0 5044; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 5045; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 5046; SSE4-NEXT: movdqa %xmm2, %xmm1 5047; SSE4-NEXT: pxor %xmm8, %xmm1 5048; SSE4-NEXT: movdqa %xmm6, %xmm0 5049; SSE4-NEXT: pxor %xmm8, %xmm0 5050; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 5051; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 5052; SSE4-NEXT: movdqa %xmm3, %xmm0 5053; SSE4-NEXT: pxor %xmm8, %xmm0 5054; SSE4-NEXT: pxor %xmm7, %xmm8 5055; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 5056; SSE4-NEXT: movdqa %xmm8, %xmm0 5057; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 5058; SSE4-NEXT: movapd %xmm4, %xmm0 5059; SSE4-NEXT: movapd %xmm5, %xmm1 5060; SSE4-NEXT: movapd %xmm6, %xmm2 5061; SSE4-NEXT: movapd %xmm7, %xmm3 5062; SSE4-NEXT: retq 5063; 5064; AVX1-LABEL: test125: 5065; AVX1: # %bb.0: # %entry 5066; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 5067; AVX1-NEXT: vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5068; AVX1-NEXT: # xmm5 = mem[0,0] 5069; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5070; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 5071; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5072; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5073; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6 5074; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7 5075; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5076; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5077; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5078; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 5079; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 5080; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5081; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5082; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 5083; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4 5084; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5 5085; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5086; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 5087; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5088; AVX1-NEXT: retq 5089; 5090; AVX2-LABEL: test125: 5091; AVX2: # %bb.0: # %entry 5092; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 5093; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5 5094; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 5095; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5096; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5097; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2 5098; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4 5099; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 5100; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5101; AVX2-NEXT: retq 5102; 5103; AVX512-LABEL: test125: 5104; AVX512: # %bb.0: # %entry 5105; AVX512-NEXT: vpminuq %zmm1, %zmm0, %zmm0 5106; AVX512-NEXT: retq 5107entry: 5108 %cmp = icmp ult <8 x i64> %a, %b 5109 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5110 ret <8 x i64> %sel 5111} 5112 5113define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) { 5114; SSE2-LABEL: test126: 5115; SSE2: # %bb.0: # %entry 5116; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 5117; SSE2-NEXT: movdqa %xmm0, %xmm9 5118; SSE2-NEXT: pxor %xmm8, %xmm9 5119; SSE2-NEXT: movdqa %xmm4, %xmm10 5120; SSE2-NEXT: pxor %xmm8, %xmm10 5121; SSE2-NEXT: movdqa %xmm10, %xmm11 5122; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 5123; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5124; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 5125; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 5126; SSE2-NEXT: pand %xmm12, %xmm9 5127; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 5128; SSE2-NEXT: por %xmm9, %xmm10 5129; SSE2-NEXT: pand %xmm10, %xmm0 5130; SSE2-NEXT: pandn %xmm4, %xmm10 5131; SSE2-NEXT: por %xmm10, %xmm0 5132; SSE2-NEXT: movdqa %xmm1, %xmm4 5133; SSE2-NEXT: pxor %xmm8, %xmm4 5134; SSE2-NEXT: movdqa %xmm5, %xmm9 5135; SSE2-NEXT: pxor %xmm8, %xmm9 5136; SSE2-NEXT: movdqa %xmm9, %xmm10 5137; SSE2-NEXT: pcmpgtd %xmm4, %xmm10 5138; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 5139; SSE2-NEXT: pcmpeqd %xmm4, %xmm9 5140; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3] 5141; SSE2-NEXT: pand %xmm11, %xmm4 5142; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 5143; SSE2-NEXT: por %xmm4, %xmm9 5144; SSE2-NEXT: pand %xmm9, %xmm1 5145; SSE2-NEXT: pandn %xmm5, %xmm9 5146; SSE2-NEXT: por %xmm9, %xmm1 5147; SSE2-NEXT: movdqa %xmm2, %xmm4 5148; SSE2-NEXT: pxor %xmm8, %xmm4 5149; SSE2-NEXT: movdqa %xmm6, %xmm5 5150; SSE2-NEXT: pxor %xmm8, %xmm5 5151; SSE2-NEXT: movdqa %xmm5, %xmm9 5152; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 5153; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 5154; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 5155; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 5156; SSE2-NEXT: pand %xmm10, %xmm4 5157; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 5158; SSE2-NEXT: por %xmm4, %xmm5 5159; SSE2-NEXT: pand %xmm5, %xmm2 5160; SSE2-NEXT: pandn %xmm6, %xmm5 5161; SSE2-NEXT: por %xmm5, %xmm2 5162; SSE2-NEXT: movdqa %xmm3, %xmm4 5163; SSE2-NEXT: pxor %xmm8, %xmm4 5164; SSE2-NEXT: pxor %xmm7, %xmm8 5165; SSE2-NEXT: movdqa %xmm8, %xmm5 5166; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 5167; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 5168; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 5169; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 5170; SSE2-NEXT: pand %xmm6, %xmm4 5171; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 5172; SSE2-NEXT: por %xmm4, %xmm5 5173; SSE2-NEXT: pand %xmm5, %xmm3 5174; SSE2-NEXT: pandn %xmm7, %xmm5 5175; SSE2-NEXT: por %xmm5, %xmm3 5176; SSE2-NEXT: retq 5177; 5178; SSE4-LABEL: test126: 5179; SSE4: # %bb.0: # %entry 5180; SSE4-NEXT: movdqa %xmm0, %xmm9 5181; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 5182; SSE4-NEXT: movdqa %xmm0, %xmm10 5183; SSE4-NEXT: pxor %xmm8, %xmm10 5184; SSE4-NEXT: movdqa %xmm4, %xmm0 5185; SSE4-NEXT: pxor %xmm8, %xmm0 5186; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 5187; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 5188; SSE4-NEXT: movdqa %xmm1, %xmm9 5189; SSE4-NEXT: pxor %xmm8, %xmm9 5190; SSE4-NEXT: movdqa %xmm5, %xmm0 5191; SSE4-NEXT: pxor %xmm8, %xmm0 5192; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 5193; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 5194; SSE4-NEXT: movdqa %xmm2, %xmm1 5195; SSE4-NEXT: pxor %xmm8, %xmm1 5196; SSE4-NEXT: movdqa %xmm6, %xmm0 5197; SSE4-NEXT: pxor %xmm8, %xmm0 5198; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 5199; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 5200; SSE4-NEXT: movdqa %xmm3, %xmm0 5201; SSE4-NEXT: pxor %xmm8, %xmm0 5202; SSE4-NEXT: pxor %xmm7, %xmm8 5203; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 5204; SSE4-NEXT: movdqa %xmm8, %xmm0 5205; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 5206; SSE4-NEXT: movapd %xmm4, %xmm0 5207; SSE4-NEXT: movapd %xmm5, %xmm1 5208; SSE4-NEXT: movapd %xmm6, %xmm2 5209; SSE4-NEXT: movapd %xmm7, %xmm3 5210; SSE4-NEXT: retq 5211; 5212; AVX1-LABEL: test126: 5213; AVX1: # %bb.0: # %entry 5214; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 5215; AVX1-NEXT: vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5216; AVX1-NEXT: # xmm5 = mem[0,0] 5217; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5218; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 5219; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5220; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5221; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6 5222; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7 5223; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5224; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5225; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5226; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 5227; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 5228; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5229; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5230; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 5231; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4 5232; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5 5233; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5234; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 5235; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5236; AVX1-NEXT: retq 5237; 5238; AVX2-LABEL: test126: 5239; AVX2: # %bb.0: # %entry 5240; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 5241; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5 5242; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 5243; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5244; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5245; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2 5246; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4 5247; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 5248; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5249; AVX2-NEXT: retq 5250; 5251; AVX512-LABEL: test126: 5252; AVX512: # %bb.0: # %entry 5253; AVX512-NEXT: vpminuq %zmm1, %zmm0, %zmm0 5254; AVX512-NEXT: retq 5255entry: 5256 %cmp = icmp ule <8 x i64> %a, %b 5257 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5258 ret <8 x i64> %sel 5259} 5260 5261define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) { 5262; SSE2-LABEL: test127: 5263; SSE2: # %bb.0: # %entry 5264; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 5265; SSE2-NEXT: movdqa %xmm4, %xmm9 5266; SSE2-NEXT: pxor %xmm8, %xmm9 5267; SSE2-NEXT: movdqa %xmm0, %xmm10 5268; SSE2-NEXT: pxor %xmm8, %xmm10 5269; SSE2-NEXT: movdqa %xmm10, %xmm11 5270; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 5271; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5272; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 5273; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 5274; SSE2-NEXT: pand %xmm12, %xmm9 5275; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 5276; SSE2-NEXT: por %xmm9, %xmm10 5277; SSE2-NEXT: pand %xmm10, %xmm0 5278; SSE2-NEXT: pandn %xmm4, %xmm10 5279; SSE2-NEXT: por %xmm10, %xmm0 5280; SSE2-NEXT: movdqa %xmm5, %xmm4 5281; SSE2-NEXT: pxor %xmm8, %xmm4 5282; SSE2-NEXT: movdqa %xmm1, %xmm9 5283; SSE2-NEXT: pxor %xmm8, %xmm9 5284; SSE2-NEXT: movdqa %xmm9, %xmm10 5285; SSE2-NEXT: pcmpgtd %xmm4, %xmm10 5286; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 5287; SSE2-NEXT: pcmpeqd %xmm4, %xmm9 5288; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3] 5289; SSE2-NEXT: pand %xmm11, %xmm4 5290; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 5291; SSE2-NEXT: por %xmm4, %xmm9 5292; SSE2-NEXT: pand %xmm9, %xmm1 5293; SSE2-NEXT: pandn %xmm5, %xmm9 5294; SSE2-NEXT: por %xmm9, %xmm1 5295; SSE2-NEXT: movdqa %xmm6, %xmm4 5296; SSE2-NEXT: pxor %xmm8, %xmm4 5297; SSE2-NEXT: movdqa %xmm2, %xmm5 5298; SSE2-NEXT: pxor %xmm8, %xmm5 5299; SSE2-NEXT: movdqa %xmm5, %xmm9 5300; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 5301; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 5302; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 5303; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 5304; SSE2-NEXT: pand %xmm10, %xmm4 5305; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 5306; SSE2-NEXT: por %xmm4, %xmm5 5307; SSE2-NEXT: pand %xmm5, %xmm2 5308; SSE2-NEXT: pandn %xmm6, %xmm5 5309; SSE2-NEXT: por %xmm5, %xmm2 5310; SSE2-NEXT: movdqa %xmm7, %xmm4 5311; SSE2-NEXT: pxor %xmm8, %xmm4 5312; SSE2-NEXT: pxor %xmm3, %xmm8 5313; SSE2-NEXT: movdqa %xmm8, %xmm5 5314; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 5315; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 5316; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 5317; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 5318; SSE2-NEXT: pand %xmm6, %xmm4 5319; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 5320; SSE2-NEXT: por %xmm4, %xmm5 5321; SSE2-NEXT: pand %xmm5, %xmm3 5322; SSE2-NEXT: pandn %xmm7, %xmm5 5323; SSE2-NEXT: por %xmm5, %xmm3 5324; SSE2-NEXT: retq 5325; 5326; SSE4-LABEL: test127: 5327; SSE4: # %bb.0: # %entry 5328; SSE4-NEXT: movdqa %xmm0, %xmm9 5329; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 5330; SSE4-NEXT: movdqa %xmm4, %xmm10 5331; SSE4-NEXT: pxor %xmm8, %xmm10 5332; SSE4-NEXT: pxor %xmm8, %xmm0 5333; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 5334; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 5335; SSE4-NEXT: movdqa %xmm5, %xmm9 5336; SSE4-NEXT: pxor %xmm8, %xmm9 5337; SSE4-NEXT: movdqa %xmm1, %xmm0 5338; SSE4-NEXT: pxor %xmm8, %xmm0 5339; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 5340; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 5341; SSE4-NEXT: movdqa %xmm6, %xmm1 5342; SSE4-NEXT: pxor %xmm8, %xmm1 5343; SSE4-NEXT: movdqa %xmm2, %xmm0 5344; SSE4-NEXT: pxor %xmm8, %xmm0 5345; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 5346; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 5347; SSE4-NEXT: movdqa %xmm7, %xmm0 5348; SSE4-NEXT: pxor %xmm8, %xmm0 5349; SSE4-NEXT: pxor %xmm3, %xmm8 5350; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 5351; SSE4-NEXT: movdqa %xmm8, %xmm0 5352; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 5353; SSE4-NEXT: movapd %xmm4, %xmm0 5354; SSE4-NEXT: movapd %xmm5, %xmm1 5355; SSE4-NEXT: movapd %xmm6, %xmm2 5356; SSE4-NEXT: movapd %xmm7, %xmm3 5357; SSE4-NEXT: retq 5358; 5359; AVX1-LABEL: test127: 5360; AVX1: # %bb.0: # %entry 5361; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5362; AVX1-NEXT: vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5363; AVX1-NEXT: # xmm5 = mem[0,0] 5364; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5365; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5366; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5367; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5368; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm6 5369; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7 5370; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5371; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5372; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5373; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5374; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 5375; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5376; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5377; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 5378; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm4 5379; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5 5380; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5381; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 5382; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5383; AVX1-NEXT: retq 5384; 5385; AVX2-LABEL: test127: 5386; AVX2: # %bb.0: # %entry 5387; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 5388; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm5 5389; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 5390; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5391; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5392; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm2 5393; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm4 5394; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 5395; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5396; AVX2-NEXT: retq 5397; 5398; AVX512-LABEL: test127: 5399; AVX512: # %bb.0: # %entry 5400; AVX512-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 5401; AVX512-NEXT: retq 5402entry: 5403 %cmp = icmp ugt <8 x i64> %a, %b 5404 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5405 ret <8 x i64> %sel 5406} 5407 5408define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) { 5409; SSE2-LABEL: test128: 5410; SSE2: # %bb.0: # %entry 5411; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 5412; SSE2-NEXT: movdqa %xmm4, %xmm9 5413; SSE2-NEXT: pxor %xmm8, %xmm9 5414; SSE2-NEXT: movdqa %xmm0, %xmm10 5415; SSE2-NEXT: pxor %xmm8, %xmm10 5416; SSE2-NEXT: movdqa %xmm10, %xmm11 5417; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 5418; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5419; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 5420; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 5421; SSE2-NEXT: pand %xmm12, %xmm9 5422; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 5423; SSE2-NEXT: por %xmm9, %xmm10 5424; SSE2-NEXT: pand %xmm10, %xmm0 5425; SSE2-NEXT: pandn %xmm4, %xmm10 5426; SSE2-NEXT: por %xmm10, %xmm0 5427; SSE2-NEXT: movdqa %xmm5, %xmm4 5428; SSE2-NEXT: pxor %xmm8, %xmm4 5429; SSE2-NEXT: movdqa %xmm1, %xmm9 5430; SSE2-NEXT: pxor %xmm8, %xmm9 5431; SSE2-NEXT: movdqa %xmm9, %xmm10 5432; SSE2-NEXT: pcmpgtd %xmm4, %xmm10 5433; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 5434; SSE2-NEXT: pcmpeqd %xmm4, %xmm9 5435; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3] 5436; SSE2-NEXT: pand %xmm11, %xmm4 5437; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 5438; SSE2-NEXT: por %xmm4, %xmm9 5439; SSE2-NEXT: pand %xmm9, %xmm1 5440; SSE2-NEXT: pandn %xmm5, %xmm9 5441; SSE2-NEXT: por %xmm9, %xmm1 5442; SSE2-NEXT: movdqa %xmm6, %xmm4 5443; SSE2-NEXT: pxor %xmm8, %xmm4 5444; SSE2-NEXT: movdqa %xmm2, %xmm5 5445; SSE2-NEXT: pxor %xmm8, %xmm5 5446; SSE2-NEXT: movdqa %xmm5, %xmm9 5447; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 5448; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 5449; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 5450; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 5451; SSE2-NEXT: pand %xmm10, %xmm4 5452; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 5453; SSE2-NEXT: por %xmm4, %xmm5 5454; SSE2-NEXT: pand %xmm5, %xmm2 5455; SSE2-NEXT: pandn %xmm6, %xmm5 5456; SSE2-NEXT: por %xmm5, %xmm2 5457; SSE2-NEXT: movdqa %xmm7, %xmm4 5458; SSE2-NEXT: pxor %xmm8, %xmm4 5459; SSE2-NEXT: pxor %xmm3, %xmm8 5460; SSE2-NEXT: movdqa %xmm8, %xmm5 5461; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 5462; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 5463; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 5464; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 5465; SSE2-NEXT: pand %xmm6, %xmm4 5466; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 5467; SSE2-NEXT: por %xmm4, %xmm5 5468; SSE2-NEXT: pand %xmm5, %xmm3 5469; SSE2-NEXT: pandn %xmm7, %xmm5 5470; SSE2-NEXT: por %xmm5, %xmm3 5471; SSE2-NEXT: retq 5472; 5473; SSE4-LABEL: test128: 5474; SSE4: # %bb.0: # %entry 5475; SSE4-NEXT: movdqa %xmm0, %xmm9 5476; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 5477; SSE4-NEXT: movdqa %xmm4, %xmm10 5478; SSE4-NEXT: pxor %xmm8, %xmm10 5479; SSE4-NEXT: pxor %xmm8, %xmm0 5480; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 5481; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 5482; SSE4-NEXT: movdqa %xmm5, %xmm9 5483; SSE4-NEXT: pxor %xmm8, %xmm9 5484; SSE4-NEXT: movdqa %xmm1, %xmm0 5485; SSE4-NEXT: pxor %xmm8, %xmm0 5486; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 5487; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 5488; SSE4-NEXT: movdqa %xmm6, %xmm1 5489; SSE4-NEXT: pxor %xmm8, %xmm1 5490; SSE4-NEXT: movdqa %xmm2, %xmm0 5491; SSE4-NEXT: pxor %xmm8, %xmm0 5492; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 5493; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 5494; SSE4-NEXT: movdqa %xmm7, %xmm0 5495; SSE4-NEXT: pxor %xmm8, %xmm0 5496; SSE4-NEXT: pxor %xmm3, %xmm8 5497; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 5498; SSE4-NEXT: movdqa %xmm8, %xmm0 5499; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 5500; SSE4-NEXT: movapd %xmm4, %xmm0 5501; SSE4-NEXT: movapd %xmm5, %xmm1 5502; SSE4-NEXT: movapd %xmm6, %xmm2 5503; SSE4-NEXT: movapd %xmm7, %xmm3 5504; SSE4-NEXT: retq 5505; 5506; AVX1-LABEL: test128: 5507; AVX1: # %bb.0: # %entry 5508; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5509; AVX1-NEXT: vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5510; AVX1-NEXT: # xmm5 = mem[0,0] 5511; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5512; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5513; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5514; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5515; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm6 5516; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7 5517; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5518; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5519; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5520; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5521; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 5522; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5523; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5524; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 5525; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm4 5526; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5 5527; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5528; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 5529; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5530; AVX1-NEXT: retq 5531; 5532; AVX2-LABEL: test128: 5533; AVX2: # %bb.0: # %entry 5534; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 5535; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm5 5536; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 5537; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5538; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5539; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm2 5540; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm4 5541; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 5542; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5543; AVX2-NEXT: retq 5544; 5545; AVX512-LABEL: test128: 5546; AVX512: # %bb.0: # %entry 5547; AVX512-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 5548; AVX512-NEXT: retq 5549entry: 5550 %cmp = icmp uge <8 x i64> %a, %b 5551 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5552 ret <8 x i64> %sel 5553} 5554 5555define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) { 5556; SSE2-LABEL: test129: 5557; SSE2: # %bb.0: # %entry 5558; SSE2-NEXT: movdqa %xmm0, %xmm8 5559; SSE2-NEXT: pcmpgtb %xmm4, %xmm8 5560; SSE2-NEXT: pand %xmm8, %xmm0 5561; SSE2-NEXT: pandn %xmm4, %xmm8 5562; SSE2-NEXT: por %xmm8, %xmm0 5563; SSE2-NEXT: movdqa %xmm1, %xmm4 5564; SSE2-NEXT: pcmpgtb %xmm5, %xmm4 5565; SSE2-NEXT: pand %xmm4, %xmm1 5566; SSE2-NEXT: pandn %xmm5, %xmm4 5567; SSE2-NEXT: por %xmm4, %xmm1 5568; SSE2-NEXT: movdqa %xmm2, %xmm4 5569; SSE2-NEXT: pcmpgtb %xmm6, %xmm4 5570; SSE2-NEXT: pand %xmm4, %xmm2 5571; SSE2-NEXT: pandn %xmm6, %xmm4 5572; SSE2-NEXT: por %xmm4, %xmm2 5573; SSE2-NEXT: movdqa %xmm3, %xmm4 5574; SSE2-NEXT: pcmpgtb %xmm7, %xmm4 5575; SSE2-NEXT: pand %xmm4, %xmm3 5576; SSE2-NEXT: pandn %xmm7, %xmm4 5577; SSE2-NEXT: por %xmm4, %xmm3 5578; SSE2-NEXT: retq 5579; 5580; SSE4-LABEL: test129: 5581; SSE4: # %bb.0: # %entry 5582; SSE4-NEXT: pmaxsb %xmm4, %xmm0 5583; SSE4-NEXT: pmaxsb %xmm5, %xmm1 5584; SSE4-NEXT: pmaxsb %xmm6, %xmm2 5585; SSE4-NEXT: pmaxsb %xmm7, %xmm3 5586; SSE4-NEXT: retq 5587; 5588; AVX1-LABEL: test129: 5589; AVX1: # %bb.0: # %entry 5590; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5591; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5592; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 5593; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 5594; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5595; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5596; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5597; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 5598; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 5599; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5600; AVX1-NEXT: retq 5601; 5602; AVX2-LABEL: test129: 5603; AVX2: # %bb.0: # %entry 5604; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 5605; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 5606; AVX2-NEXT: retq 5607; 5608; AVX512F-LABEL: test129: 5609; AVX512F: # %bb.0: # %entry 5610; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 5611; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 5612; AVX512F-NEXT: vpmaxsb %ymm2, %ymm3, %ymm2 5613; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 5614; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 5615; AVX512F-NEXT: retq 5616; 5617; AVX512BW-LABEL: test129: 5618; AVX512BW: # %bb.0: # %entry 5619; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 5620; AVX512BW-NEXT: retq 5621entry: 5622 %cmp = icmp slt <64 x i8> %a, %b 5623 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5624 ret <64 x i8> %sel 5625} 5626 5627define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) { 5628; SSE2-LABEL: test130: 5629; SSE2: # %bb.0: # %entry 5630; SSE2-NEXT: movdqa %xmm0, %xmm8 5631; SSE2-NEXT: pcmpgtb %xmm4, %xmm8 5632; SSE2-NEXT: pand %xmm8, %xmm0 5633; SSE2-NEXT: pandn %xmm4, %xmm8 5634; SSE2-NEXT: por %xmm8, %xmm0 5635; SSE2-NEXT: movdqa %xmm1, %xmm4 5636; SSE2-NEXT: pcmpgtb %xmm5, %xmm4 5637; SSE2-NEXT: pand %xmm4, %xmm1 5638; SSE2-NEXT: pandn %xmm5, %xmm4 5639; SSE2-NEXT: por %xmm4, %xmm1 5640; SSE2-NEXT: movdqa %xmm2, %xmm4 5641; SSE2-NEXT: pcmpgtb %xmm6, %xmm4 5642; SSE2-NEXT: pand %xmm4, %xmm2 5643; SSE2-NEXT: pandn %xmm6, %xmm4 5644; SSE2-NEXT: por %xmm4, %xmm2 5645; SSE2-NEXT: movdqa %xmm3, %xmm4 5646; SSE2-NEXT: pcmpgtb %xmm7, %xmm4 5647; SSE2-NEXT: pand %xmm4, %xmm3 5648; SSE2-NEXT: pandn %xmm7, %xmm4 5649; SSE2-NEXT: por %xmm4, %xmm3 5650; SSE2-NEXT: retq 5651; 5652; SSE4-LABEL: test130: 5653; SSE4: # %bb.0: # %entry 5654; SSE4-NEXT: pmaxsb %xmm4, %xmm0 5655; SSE4-NEXT: pmaxsb %xmm5, %xmm1 5656; SSE4-NEXT: pmaxsb %xmm6, %xmm2 5657; SSE4-NEXT: pmaxsb %xmm7, %xmm3 5658; SSE4-NEXT: retq 5659; 5660; AVX1-LABEL: test130: 5661; AVX1: # %bb.0: # %entry 5662; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5663; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5664; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 5665; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 5666; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5667; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5668; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5669; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 5670; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 5671; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5672; AVX1-NEXT: retq 5673; 5674; AVX2-LABEL: test130: 5675; AVX2: # %bb.0: # %entry 5676; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 5677; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 5678; AVX2-NEXT: retq 5679; 5680; AVX512F-LABEL: test130: 5681; AVX512F: # %bb.0: # %entry 5682; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 5683; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 5684; AVX512F-NEXT: vpmaxsb %ymm2, %ymm3, %ymm2 5685; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 5686; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 5687; AVX512F-NEXT: retq 5688; 5689; AVX512BW-LABEL: test130: 5690; AVX512BW: # %bb.0: # %entry 5691; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 5692; AVX512BW-NEXT: retq 5693entry: 5694 %cmp = icmp sle <64 x i8> %a, %b 5695 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5696 ret <64 x i8> %sel 5697} 5698 5699define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) { 5700; SSE2-LABEL: test131: 5701; SSE2: # %bb.0: # %entry 5702; SSE2-NEXT: movdqa %xmm4, %xmm8 5703; SSE2-NEXT: pcmpgtb %xmm0, %xmm8 5704; SSE2-NEXT: pand %xmm8, %xmm0 5705; SSE2-NEXT: pandn %xmm4, %xmm8 5706; SSE2-NEXT: por %xmm8, %xmm0 5707; SSE2-NEXT: movdqa %xmm5, %xmm4 5708; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 5709; SSE2-NEXT: pand %xmm4, %xmm1 5710; SSE2-NEXT: pandn %xmm5, %xmm4 5711; SSE2-NEXT: por %xmm4, %xmm1 5712; SSE2-NEXT: movdqa %xmm6, %xmm4 5713; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 5714; SSE2-NEXT: pand %xmm4, %xmm2 5715; SSE2-NEXT: pandn %xmm6, %xmm4 5716; SSE2-NEXT: por %xmm4, %xmm2 5717; SSE2-NEXT: movdqa %xmm7, %xmm4 5718; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 5719; SSE2-NEXT: pand %xmm4, %xmm3 5720; SSE2-NEXT: pandn %xmm7, %xmm4 5721; SSE2-NEXT: por %xmm4, %xmm3 5722; SSE2-NEXT: retq 5723; 5724; SSE4-LABEL: test131: 5725; SSE4: # %bb.0: # %entry 5726; SSE4-NEXT: pminsb %xmm4, %xmm0 5727; SSE4-NEXT: pminsb %xmm5, %xmm1 5728; SSE4-NEXT: pminsb %xmm6, %xmm2 5729; SSE4-NEXT: pminsb %xmm7, %xmm3 5730; SSE4-NEXT: retq 5731; 5732; AVX1-LABEL: test131: 5733; AVX1: # %bb.0: # %entry 5734; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5735; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5736; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 5737; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 5738; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5739; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5740; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5741; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 5742; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 5743; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5744; AVX1-NEXT: retq 5745; 5746; AVX2-LABEL: test131: 5747; AVX2: # %bb.0: # %entry 5748; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 5749; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 5750; AVX2-NEXT: retq 5751; 5752; AVX512F-LABEL: test131: 5753; AVX512F: # %bb.0: # %entry 5754; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 5755; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 5756; AVX512F-NEXT: vpminsb %ymm2, %ymm3, %ymm2 5757; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 5758; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 5759; AVX512F-NEXT: retq 5760; 5761; AVX512BW-LABEL: test131: 5762; AVX512BW: # %bb.0: # %entry 5763; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 5764; AVX512BW-NEXT: retq 5765entry: 5766 %cmp = icmp sgt <64 x i8> %a, %b 5767 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5768 ret <64 x i8> %sel 5769} 5770 5771define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) { 5772; SSE2-LABEL: test132: 5773; SSE2: # %bb.0: # %entry 5774; SSE2-NEXT: movdqa %xmm4, %xmm8 5775; SSE2-NEXT: pcmpgtb %xmm0, %xmm8 5776; SSE2-NEXT: pand %xmm8, %xmm0 5777; SSE2-NEXT: pandn %xmm4, %xmm8 5778; SSE2-NEXT: por %xmm8, %xmm0 5779; SSE2-NEXT: movdqa %xmm5, %xmm4 5780; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 5781; SSE2-NEXT: pand %xmm4, %xmm1 5782; SSE2-NEXT: pandn %xmm5, %xmm4 5783; SSE2-NEXT: por %xmm4, %xmm1 5784; SSE2-NEXT: movdqa %xmm6, %xmm4 5785; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 5786; SSE2-NEXT: pand %xmm4, %xmm2 5787; SSE2-NEXT: pandn %xmm6, %xmm4 5788; SSE2-NEXT: por %xmm4, %xmm2 5789; SSE2-NEXT: movdqa %xmm7, %xmm4 5790; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 5791; SSE2-NEXT: pand %xmm4, %xmm3 5792; SSE2-NEXT: pandn %xmm7, %xmm4 5793; SSE2-NEXT: por %xmm4, %xmm3 5794; SSE2-NEXT: retq 5795; 5796; SSE4-LABEL: test132: 5797; SSE4: # %bb.0: # %entry 5798; SSE4-NEXT: pminsb %xmm4, %xmm0 5799; SSE4-NEXT: pminsb %xmm5, %xmm1 5800; SSE4-NEXT: pminsb %xmm6, %xmm2 5801; SSE4-NEXT: pminsb %xmm7, %xmm3 5802; SSE4-NEXT: retq 5803; 5804; AVX1-LABEL: test132: 5805; AVX1: # %bb.0: # %entry 5806; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5807; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5808; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 5809; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 5810; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5811; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5812; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5813; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 5814; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 5815; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5816; AVX1-NEXT: retq 5817; 5818; AVX2-LABEL: test132: 5819; AVX2: # %bb.0: # %entry 5820; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 5821; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 5822; AVX2-NEXT: retq 5823; 5824; AVX512F-LABEL: test132: 5825; AVX512F: # %bb.0: # %entry 5826; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 5827; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 5828; AVX512F-NEXT: vpminsb %ymm2, %ymm3, %ymm2 5829; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 5830; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 5831; AVX512F-NEXT: retq 5832; 5833; AVX512BW-LABEL: test132: 5834; AVX512BW: # %bb.0: # %entry 5835; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 5836; AVX512BW-NEXT: retq 5837entry: 5838 %cmp = icmp sge <64 x i8> %a, %b 5839 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5840 ret <64 x i8> %sel 5841} 5842 5843define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) { 5844; SSE-LABEL: test133: 5845; SSE: # %bb.0: # %entry 5846; SSE-NEXT: pmaxub %xmm4, %xmm0 5847; SSE-NEXT: pmaxub %xmm5, %xmm1 5848; SSE-NEXT: pmaxub %xmm6, %xmm2 5849; SSE-NEXT: pmaxub %xmm7, %xmm3 5850; SSE-NEXT: retq 5851; 5852; AVX1-LABEL: test133: 5853; AVX1: # %bb.0: # %entry 5854; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5855; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5856; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 5857; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 5858; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5859; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5860; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5861; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 5862; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 5863; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5864; AVX1-NEXT: retq 5865; 5866; AVX2-LABEL: test133: 5867; AVX2: # %bb.0: # %entry 5868; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 5869; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 5870; AVX2-NEXT: retq 5871; 5872; AVX512F-LABEL: test133: 5873; AVX512F: # %bb.0: # %entry 5874; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 5875; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 5876; AVX512F-NEXT: vpmaxub %ymm2, %ymm3, %ymm2 5877; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 5878; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 5879; AVX512F-NEXT: retq 5880; 5881; AVX512BW-LABEL: test133: 5882; AVX512BW: # %bb.0: # %entry 5883; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 5884; AVX512BW-NEXT: retq 5885entry: 5886 %cmp = icmp ult <64 x i8> %a, %b 5887 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5888 ret <64 x i8> %sel 5889} 5890 5891define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) { 5892; SSE-LABEL: test134: 5893; SSE: # %bb.0: # %entry 5894; SSE-NEXT: pmaxub %xmm4, %xmm0 5895; SSE-NEXT: pmaxub %xmm5, %xmm1 5896; SSE-NEXT: pmaxub %xmm6, %xmm2 5897; SSE-NEXT: pmaxub %xmm7, %xmm3 5898; SSE-NEXT: retq 5899; 5900; AVX1-LABEL: test134: 5901; AVX1: # %bb.0: # %entry 5902; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5903; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5904; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 5905; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 5906; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5907; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5908; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5909; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 5910; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 5911; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5912; AVX1-NEXT: retq 5913; 5914; AVX2-LABEL: test134: 5915; AVX2: # %bb.0: # %entry 5916; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 5917; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 5918; AVX2-NEXT: retq 5919; 5920; AVX512F-LABEL: test134: 5921; AVX512F: # %bb.0: # %entry 5922; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 5923; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 5924; AVX512F-NEXT: vpmaxub %ymm2, %ymm3, %ymm2 5925; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 5926; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 5927; AVX512F-NEXT: retq 5928; 5929; AVX512BW-LABEL: test134: 5930; AVX512BW: # %bb.0: # %entry 5931; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 5932; AVX512BW-NEXT: retq 5933entry: 5934 %cmp = icmp ule <64 x i8> %a, %b 5935 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5936 ret <64 x i8> %sel 5937} 5938 5939define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) { 5940; SSE-LABEL: test135: 5941; SSE: # %bb.0: # %entry 5942; SSE-NEXT: pminub %xmm4, %xmm0 5943; SSE-NEXT: pminub %xmm5, %xmm1 5944; SSE-NEXT: pminub %xmm6, %xmm2 5945; SSE-NEXT: pminub %xmm7, %xmm3 5946; SSE-NEXT: retq 5947; 5948; AVX1-LABEL: test135: 5949; AVX1: # %bb.0: # %entry 5950; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5951; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5952; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 5953; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 5954; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5955; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5956; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5957; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 5958; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 5959; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5960; AVX1-NEXT: retq 5961; 5962; AVX2-LABEL: test135: 5963; AVX2: # %bb.0: # %entry 5964; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 5965; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 5966; AVX2-NEXT: retq 5967; 5968; AVX512F-LABEL: test135: 5969; AVX512F: # %bb.0: # %entry 5970; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 5971; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 5972; AVX512F-NEXT: vpminub %ymm2, %ymm3, %ymm2 5973; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 5974; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 5975; AVX512F-NEXT: retq 5976; 5977; AVX512BW-LABEL: test135: 5978; AVX512BW: # %bb.0: # %entry 5979; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 5980; AVX512BW-NEXT: retq 5981entry: 5982 %cmp = icmp ugt <64 x i8> %a, %b 5983 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5984 ret <64 x i8> %sel 5985} 5986 5987define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) { 5988; SSE-LABEL: test136: 5989; SSE: # %bb.0: # %entry 5990; SSE-NEXT: pminub %xmm4, %xmm0 5991; SSE-NEXT: pminub %xmm5, %xmm1 5992; SSE-NEXT: pminub %xmm6, %xmm2 5993; SSE-NEXT: pminub %xmm7, %xmm3 5994; SSE-NEXT: retq 5995; 5996; AVX1-LABEL: test136: 5997; AVX1: # %bb.0: # %entry 5998; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5999; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6000; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 6001; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 6002; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6003; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6004; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6005; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 6006; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 6007; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6008; AVX1-NEXT: retq 6009; 6010; AVX2-LABEL: test136: 6011; AVX2: # %bb.0: # %entry 6012; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 6013; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 6014; AVX2-NEXT: retq 6015; 6016; AVX512F-LABEL: test136: 6017; AVX512F: # %bb.0: # %entry 6018; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6019; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6020; AVX512F-NEXT: vpminub %ymm2, %ymm3, %ymm2 6021; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 6022; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6023; AVX512F-NEXT: retq 6024; 6025; AVX512BW-LABEL: test136: 6026; AVX512BW: # %bb.0: # %entry 6027; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 6028; AVX512BW-NEXT: retq 6029entry: 6030 %cmp = icmp uge <64 x i8> %a, %b 6031 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6032 ret <64 x i8> %sel 6033} 6034 6035define <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) { 6036; SSE-LABEL: test137: 6037; SSE: # %bb.0: # %entry 6038; SSE-NEXT: pmaxsw %xmm4, %xmm0 6039; SSE-NEXT: pmaxsw %xmm5, %xmm1 6040; SSE-NEXT: pmaxsw %xmm6, %xmm2 6041; SSE-NEXT: pmaxsw %xmm7, %xmm3 6042; SSE-NEXT: retq 6043; 6044; AVX1-LABEL: test137: 6045; AVX1: # %bb.0: # %entry 6046; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6047; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6048; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 6049; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 6050; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6051; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6052; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6053; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 6054; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 6055; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6056; AVX1-NEXT: retq 6057; 6058; AVX2-LABEL: test137: 6059; AVX2: # %bb.0: # %entry 6060; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 6061; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 6062; AVX2-NEXT: retq 6063; 6064; AVX512F-LABEL: test137: 6065; AVX512F: # %bb.0: # %entry 6066; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6067; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6068; AVX512F-NEXT: vpmaxsw %ymm2, %ymm3, %ymm2 6069; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 6070; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6071; AVX512F-NEXT: retq 6072; 6073; AVX512BW-LABEL: test137: 6074; AVX512BW: # %bb.0: # %entry 6075; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 6076; AVX512BW-NEXT: retq 6077entry: 6078 %cmp = icmp slt <32 x i16> %a, %b 6079 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6080 ret <32 x i16> %sel 6081} 6082 6083define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) { 6084; SSE-LABEL: test138: 6085; SSE: # %bb.0: # %entry 6086; SSE-NEXT: pmaxsw %xmm4, %xmm0 6087; SSE-NEXT: pmaxsw %xmm5, %xmm1 6088; SSE-NEXT: pmaxsw %xmm6, %xmm2 6089; SSE-NEXT: pmaxsw %xmm7, %xmm3 6090; SSE-NEXT: retq 6091; 6092; AVX1-LABEL: test138: 6093; AVX1: # %bb.0: # %entry 6094; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6095; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6096; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 6097; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 6098; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6099; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6100; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6101; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 6102; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 6103; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6104; AVX1-NEXT: retq 6105; 6106; AVX2-LABEL: test138: 6107; AVX2: # %bb.0: # %entry 6108; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 6109; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 6110; AVX2-NEXT: retq 6111; 6112; AVX512F-LABEL: test138: 6113; AVX512F: # %bb.0: # %entry 6114; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6115; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6116; AVX512F-NEXT: vpmaxsw %ymm2, %ymm3, %ymm2 6117; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 6118; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6119; AVX512F-NEXT: retq 6120; 6121; AVX512BW-LABEL: test138: 6122; AVX512BW: # %bb.0: # %entry 6123; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 6124; AVX512BW-NEXT: retq 6125entry: 6126 %cmp = icmp sle <32 x i16> %a, %b 6127 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6128 ret <32 x i16> %sel 6129} 6130 6131define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) { 6132; SSE-LABEL: test139: 6133; SSE: # %bb.0: # %entry 6134; SSE-NEXT: pminsw %xmm4, %xmm0 6135; SSE-NEXT: pminsw %xmm5, %xmm1 6136; SSE-NEXT: pminsw %xmm6, %xmm2 6137; SSE-NEXT: pminsw %xmm7, %xmm3 6138; SSE-NEXT: retq 6139; 6140; AVX1-LABEL: test139: 6141; AVX1: # %bb.0: # %entry 6142; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6143; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6144; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 6145; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 6146; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6147; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6148; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6149; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 6150; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 6151; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6152; AVX1-NEXT: retq 6153; 6154; AVX2-LABEL: test139: 6155; AVX2: # %bb.0: # %entry 6156; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 6157; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 6158; AVX2-NEXT: retq 6159; 6160; AVX512F-LABEL: test139: 6161; AVX512F: # %bb.0: # %entry 6162; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6163; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6164; AVX512F-NEXT: vpminsw %ymm2, %ymm3, %ymm2 6165; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 6166; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6167; AVX512F-NEXT: retq 6168; 6169; AVX512BW-LABEL: test139: 6170; AVX512BW: # %bb.0: # %entry 6171; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 6172; AVX512BW-NEXT: retq 6173entry: 6174 %cmp = icmp sgt <32 x i16> %a, %b 6175 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6176 ret <32 x i16> %sel 6177} 6178 6179define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) { 6180; SSE-LABEL: test140: 6181; SSE: # %bb.0: # %entry 6182; SSE-NEXT: pminsw %xmm4, %xmm0 6183; SSE-NEXT: pminsw %xmm5, %xmm1 6184; SSE-NEXT: pminsw %xmm6, %xmm2 6185; SSE-NEXT: pminsw %xmm7, %xmm3 6186; SSE-NEXT: retq 6187; 6188; AVX1-LABEL: test140: 6189; AVX1: # %bb.0: # %entry 6190; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6191; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6192; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 6193; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 6194; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6195; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6196; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6197; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 6198; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 6199; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6200; AVX1-NEXT: retq 6201; 6202; AVX2-LABEL: test140: 6203; AVX2: # %bb.0: # %entry 6204; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 6205; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 6206; AVX2-NEXT: retq 6207; 6208; AVX512F-LABEL: test140: 6209; AVX512F: # %bb.0: # %entry 6210; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6211; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6212; AVX512F-NEXT: vpminsw %ymm2, %ymm3, %ymm2 6213; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 6214; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6215; AVX512F-NEXT: retq 6216; 6217; AVX512BW-LABEL: test140: 6218; AVX512BW: # %bb.0: # %entry 6219; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 6220; AVX512BW-NEXT: retq 6221entry: 6222 %cmp = icmp sge <32 x i16> %a, %b 6223 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6224 ret <32 x i16> %sel 6225} 6226 6227define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) { 6228; SSE2-LABEL: test141: 6229; SSE2: # %bb.0: # %entry 6230; SSE2-NEXT: psubusw %xmm0, %xmm4 6231; SSE2-NEXT: paddw %xmm4, %xmm0 6232; SSE2-NEXT: psubusw %xmm1, %xmm5 6233; SSE2-NEXT: paddw %xmm5, %xmm1 6234; SSE2-NEXT: psubusw %xmm2, %xmm6 6235; SSE2-NEXT: paddw %xmm6, %xmm2 6236; SSE2-NEXT: psubusw %xmm3, %xmm7 6237; SSE2-NEXT: paddw %xmm7, %xmm3 6238; SSE2-NEXT: retq 6239; 6240; SSE4-LABEL: test141: 6241; SSE4: # %bb.0: # %entry 6242; SSE4-NEXT: pmaxuw %xmm4, %xmm0 6243; SSE4-NEXT: pmaxuw %xmm5, %xmm1 6244; SSE4-NEXT: pmaxuw %xmm6, %xmm2 6245; SSE4-NEXT: pmaxuw %xmm7, %xmm3 6246; SSE4-NEXT: retq 6247; 6248; AVX1-LABEL: test141: 6249; AVX1: # %bb.0: # %entry 6250; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6251; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6252; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 6253; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 6254; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6255; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6256; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6257; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 6258; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 6259; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6260; AVX1-NEXT: retq 6261; 6262; AVX2-LABEL: test141: 6263; AVX2: # %bb.0: # %entry 6264; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 6265; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 6266; AVX2-NEXT: retq 6267; 6268; AVX512F-LABEL: test141: 6269; AVX512F: # %bb.0: # %entry 6270; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6271; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6272; AVX512F-NEXT: vpmaxuw %ymm2, %ymm3, %ymm2 6273; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 6274; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6275; AVX512F-NEXT: retq 6276; 6277; AVX512BW-LABEL: test141: 6278; AVX512BW: # %bb.0: # %entry 6279; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 6280; AVX512BW-NEXT: retq 6281entry: 6282 %cmp = icmp ult <32 x i16> %a, %b 6283 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6284 ret <32 x i16> %sel 6285} 6286 6287define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) { 6288; SSE2-LABEL: test142: 6289; SSE2: # %bb.0: # %entry 6290; SSE2-NEXT: psubusw %xmm0, %xmm4 6291; SSE2-NEXT: paddw %xmm4, %xmm0 6292; SSE2-NEXT: psubusw %xmm1, %xmm5 6293; SSE2-NEXT: paddw %xmm5, %xmm1 6294; SSE2-NEXT: psubusw %xmm2, %xmm6 6295; SSE2-NEXT: paddw %xmm6, %xmm2 6296; SSE2-NEXT: psubusw %xmm3, %xmm7 6297; SSE2-NEXT: paddw %xmm7, %xmm3 6298; SSE2-NEXT: retq 6299; 6300; SSE4-LABEL: test142: 6301; SSE4: # %bb.0: # %entry 6302; SSE4-NEXT: pmaxuw %xmm4, %xmm0 6303; SSE4-NEXT: pmaxuw %xmm5, %xmm1 6304; SSE4-NEXT: pmaxuw %xmm6, %xmm2 6305; SSE4-NEXT: pmaxuw %xmm7, %xmm3 6306; SSE4-NEXT: retq 6307; 6308; AVX1-LABEL: test142: 6309; AVX1: # %bb.0: # %entry 6310; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6311; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6312; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 6313; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 6314; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6315; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6316; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6317; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 6318; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 6319; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6320; AVX1-NEXT: retq 6321; 6322; AVX2-LABEL: test142: 6323; AVX2: # %bb.0: # %entry 6324; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 6325; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 6326; AVX2-NEXT: retq 6327; 6328; AVX512F-LABEL: test142: 6329; AVX512F: # %bb.0: # %entry 6330; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6331; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6332; AVX512F-NEXT: vpmaxuw %ymm2, %ymm3, %ymm2 6333; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 6334; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6335; AVX512F-NEXT: retq 6336; 6337; AVX512BW-LABEL: test142: 6338; AVX512BW: # %bb.0: # %entry 6339; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 6340; AVX512BW-NEXT: retq 6341entry: 6342 %cmp = icmp ule <32 x i16> %a, %b 6343 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6344 ret <32 x i16> %sel 6345} 6346 6347define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) { 6348; SSE2-LABEL: test143: 6349; SSE2: # %bb.0: # %entry 6350; SSE2-NEXT: movdqa %xmm0, %xmm8 6351; SSE2-NEXT: psubusw %xmm4, %xmm8 6352; SSE2-NEXT: psubw %xmm8, %xmm0 6353; SSE2-NEXT: movdqa %xmm1, %xmm4 6354; SSE2-NEXT: psubusw %xmm5, %xmm4 6355; SSE2-NEXT: psubw %xmm4, %xmm1 6356; SSE2-NEXT: movdqa %xmm2, %xmm4 6357; SSE2-NEXT: psubusw %xmm6, %xmm4 6358; SSE2-NEXT: psubw %xmm4, %xmm2 6359; SSE2-NEXT: movdqa %xmm3, %xmm4 6360; SSE2-NEXT: psubusw %xmm7, %xmm4 6361; SSE2-NEXT: psubw %xmm4, %xmm3 6362; SSE2-NEXT: retq 6363; 6364; SSE4-LABEL: test143: 6365; SSE4: # %bb.0: # %entry 6366; SSE4-NEXT: pminuw %xmm4, %xmm0 6367; SSE4-NEXT: pminuw %xmm5, %xmm1 6368; SSE4-NEXT: pminuw %xmm6, %xmm2 6369; SSE4-NEXT: pminuw %xmm7, %xmm3 6370; SSE4-NEXT: retq 6371; 6372; AVX1-LABEL: test143: 6373; AVX1: # %bb.0: # %entry 6374; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6375; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6376; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 6377; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 6378; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6379; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6380; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6381; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 6382; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 6383; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6384; AVX1-NEXT: retq 6385; 6386; AVX2-LABEL: test143: 6387; AVX2: # %bb.0: # %entry 6388; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 6389; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 6390; AVX2-NEXT: retq 6391; 6392; AVX512F-LABEL: test143: 6393; AVX512F: # %bb.0: # %entry 6394; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6395; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6396; AVX512F-NEXT: vpminuw %ymm2, %ymm3, %ymm2 6397; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 6398; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6399; AVX512F-NEXT: retq 6400; 6401; AVX512BW-LABEL: test143: 6402; AVX512BW: # %bb.0: # %entry 6403; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 6404; AVX512BW-NEXT: retq 6405entry: 6406 %cmp = icmp ugt <32 x i16> %a, %b 6407 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6408 ret <32 x i16> %sel 6409} 6410 6411define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) { 6412; SSE2-LABEL: test144: 6413; SSE2: # %bb.0: # %entry 6414; SSE2-NEXT: movdqa %xmm0, %xmm8 6415; SSE2-NEXT: psubusw %xmm4, %xmm8 6416; SSE2-NEXT: psubw %xmm8, %xmm0 6417; SSE2-NEXT: movdqa %xmm1, %xmm4 6418; SSE2-NEXT: psubusw %xmm5, %xmm4 6419; SSE2-NEXT: psubw %xmm4, %xmm1 6420; SSE2-NEXT: movdqa %xmm2, %xmm4 6421; SSE2-NEXT: psubusw %xmm6, %xmm4 6422; SSE2-NEXT: psubw %xmm4, %xmm2 6423; SSE2-NEXT: movdqa %xmm3, %xmm4 6424; SSE2-NEXT: psubusw %xmm7, %xmm4 6425; SSE2-NEXT: psubw %xmm4, %xmm3 6426; SSE2-NEXT: retq 6427; 6428; SSE4-LABEL: test144: 6429; SSE4: # %bb.0: # %entry 6430; SSE4-NEXT: pminuw %xmm4, %xmm0 6431; SSE4-NEXT: pminuw %xmm5, %xmm1 6432; SSE4-NEXT: pminuw %xmm6, %xmm2 6433; SSE4-NEXT: pminuw %xmm7, %xmm3 6434; SSE4-NEXT: retq 6435; 6436; AVX1-LABEL: test144: 6437; AVX1: # %bb.0: # %entry 6438; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6439; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6440; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 6441; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 6442; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6443; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6444; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6445; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 6446; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 6447; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6448; AVX1-NEXT: retq 6449; 6450; AVX2-LABEL: test144: 6451; AVX2: # %bb.0: # %entry 6452; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 6453; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 6454; AVX2-NEXT: retq 6455; 6456; AVX512F-LABEL: test144: 6457; AVX512F: # %bb.0: # %entry 6458; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6459; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6460; AVX512F-NEXT: vpminuw %ymm2, %ymm3, %ymm2 6461; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 6462; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6463; AVX512F-NEXT: retq 6464; 6465; AVX512BW-LABEL: test144: 6466; AVX512BW: # %bb.0: # %entry 6467; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 6468; AVX512BW-NEXT: retq 6469entry: 6470 %cmp = icmp uge <32 x i16> %a, %b 6471 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6472 ret <32 x i16> %sel 6473} 6474 6475define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) { 6476; SSE2-LABEL: test145: 6477; SSE2: # %bb.0: # %entry 6478; SSE2-NEXT: movdqa %xmm0, %xmm8 6479; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6480; SSE2-NEXT: pand %xmm8, %xmm0 6481; SSE2-NEXT: pandn %xmm4, %xmm8 6482; SSE2-NEXT: por %xmm8, %xmm0 6483; SSE2-NEXT: movdqa %xmm1, %xmm4 6484; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 6485; SSE2-NEXT: pand %xmm4, %xmm1 6486; SSE2-NEXT: pandn %xmm5, %xmm4 6487; SSE2-NEXT: por %xmm4, %xmm1 6488; SSE2-NEXT: movdqa %xmm2, %xmm4 6489; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 6490; SSE2-NEXT: pand %xmm4, %xmm2 6491; SSE2-NEXT: pandn %xmm6, %xmm4 6492; SSE2-NEXT: por %xmm4, %xmm2 6493; SSE2-NEXT: movdqa %xmm3, %xmm4 6494; SSE2-NEXT: pcmpgtd %xmm7, %xmm4 6495; SSE2-NEXT: pand %xmm4, %xmm3 6496; SSE2-NEXT: pandn %xmm7, %xmm4 6497; SSE2-NEXT: por %xmm4, %xmm3 6498; SSE2-NEXT: retq 6499; 6500; SSE4-LABEL: test145: 6501; SSE4: # %bb.0: # %entry 6502; SSE4-NEXT: pmaxsd %xmm4, %xmm0 6503; SSE4-NEXT: pmaxsd %xmm5, %xmm1 6504; SSE4-NEXT: pmaxsd %xmm6, %xmm2 6505; SSE4-NEXT: pmaxsd %xmm7, %xmm3 6506; SSE4-NEXT: retq 6507; 6508; AVX1-LABEL: test145: 6509; AVX1: # %bb.0: # %entry 6510; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6511; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6512; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 6513; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 6514; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6515; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6516; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6517; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 6518; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 6519; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6520; AVX1-NEXT: retq 6521; 6522; AVX2-LABEL: test145: 6523; AVX2: # %bb.0: # %entry 6524; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 6525; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 6526; AVX2-NEXT: retq 6527; 6528; AVX512-LABEL: test145: 6529; AVX512: # %bb.0: # %entry 6530; AVX512-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 6531; AVX512-NEXT: retq 6532entry: 6533 %cmp = icmp slt <16 x i32> %a, %b 6534 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6535 ret <16 x i32> %sel 6536} 6537 6538define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) { 6539; SSE2-LABEL: test146: 6540; SSE2: # %bb.0: # %entry 6541; SSE2-NEXT: movdqa %xmm0, %xmm8 6542; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6543; SSE2-NEXT: pand %xmm8, %xmm0 6544; SSE2-NEXT: pandn %xmm4, %xmm8 6545; SSE2-NEXT: por %xmm8, %xmm0 6546; SSE2-NEXT: movdqa %xmm1, %xmm4 6547; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 6548; SSE2-NEXT: pand %xmm4, %xmm1 6549; SSE2-NEXT: pandn %xmm5, %xmm4 6550; SSE2-NEXT: por %xmm4, %xmm1 6551; SSE2-NEXT: movdqa %xmm2, %xmm4 6552; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 6553; SSE2-NEXT: pand %xmm4, %xmm2 6554; SSE2-NEXT: pandn %xmm6, %xmm4 6555; SSE2-NEXT: por %xmm4, %xmm2 6556; SSE2-NEXT: movdqa %xmm3, %xmm4 6557; SSE2-NEXT: pcmpgtd %xmm7, %xmm4 6558; SSE2-NEXT: pand %xmm4, %xmm3 6559; SSE2-NEXT: pandn %xmm7, %xmm4 6560; SSE2-NEXT: por %xmm4, %xmm3 6561; SSE2-NEXT: retq 6562; 6563; SSE4-LABEL: test146: 6564; SSE4: # %bb.0: # %entry 6565; SSE4-NEXT: pmaxsd %xmm4, %xmm0 6566; SSE4-NEXT: pmaxsd %xmm5, %xmm1 6567; SSE4-NEXT: pmaxsd %xmm6, %xmm2 6568; SSE4-NEXT: pmaxsd %xmm7, %xmm3 6569; SSE4-NEXT: retq 6570; 6571; AVX1-LABEL: test146: 6572; AVX1: # %bb.0: # %entry 6573; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6574; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6575; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 6576; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 6577; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6578; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6579; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6580; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 6581; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 6582; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6583; AVX1-NEXT: retq 6584; 6585; AVX2-LABEL: test146: 6586; AVX2: # %bb.0: # %entry 6587; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 6588; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 6589; AVX2-NEXT: retq 6590; 6591; AVX512-LABEL: test146: 6592; AVX512: # %bb.0: # %entry 6593; AVX512-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 6594; AVX512-NEXT: retq 6595entry: 6596 %cmp = icmp sle <16 x i32> %a, %b 6597 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6598 ret <16 x i32> %sel 6599} 6600 6601define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) { 6602; SSE2-LABEL: test147: 6603; SSE2: # %bb.0: # %entry 6604; SSE2-NEXT: movdqa %xmm4, %xmm8 6605; SSE2-NEXT: pcmpgtd %xmm0, %xmm8 6606; SSE2-NEXT: pand %xmm8, %xmm0 6607; SSE2-NEXT: pandn %xmm4, %xmm8 6608; SSE2-NEXT: por %xmm8, %xmm0 6609; SSE2-NEXT: movdqa %xmm5, %xmm4 6610; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 6611; SSE2-NEXT: pand %xmm4, %xmm1 6612; SSE2-NEXT: pandn %xmm5, %xmm4 6613; SSE2-NEXT: por %xmm4, %xmm1 6614; SSE2-NEXT: movdqa %xmm6, %xmm4 6615; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 6616; SSE2-NEXT: pand %xmm4, %xmm2 6617; SSE2-NEXT: pandn %xmm6, %xmm4 6618; SSE2-NEXT: por %xmm4, %xmm2 6619; SSE2-NEXT: movdqa %xmm7, %xmm4 6620; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 6621; SSE2-NEXT: pand %xmm4, %xmm3 6622; SSE2-NEXT: pandn %xmm7, %xmm4 6623; SSE2-NEXT: por %xmm4, %xmm3 6624; SSE2-NEXT: retq 6625; 6626; SSE4-LABEL: test147: 6627; SSE4: # %bb.0: # %entry 6628; SSE4-NEXT: pminsd %xmm4, %xmm0 6629; SSE4-NEXT: pminsd %xmm5, %xmm1 6630; SSE4-NEXT: pminsd %xmm6, %xmm2 6631; SSE4-NEXT: pminsd %xmm7, %xmm3 6632; SSE4-NEXT: retq 6633; 6634; AVX1-LABEL: test147: 6635; AVX1: # %bb.0: # %entry 6636; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6637; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6638; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 6639; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 6640; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6641; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6642; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6643; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 6644; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 6645; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6646; AVX1-NEXT: retq 6647; 6648; AVX2-LABEL: test147: 6649; AVX2: # %bb.0: # %entry 6650; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 6651; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 6652; AVX2-NEXT: retq 6653; 6654; AVX512-LABEL: test147: 6655; AVX512: # %bb.0: # %entry 6656; AVX512-NEXT: vpminsd %zmm1, %zmm0, %zmm0 6657; AVX512-NEXT: retq 6658entry: 6659 %cmp = icmp sgt <16 x i32> %a, %b 6660 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6661 ret <16 x i32> %sel 6662} 6663 6664define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) { 6665; SSE2-LABEL: test148: 6666; SSE2: # %bb.0: # %entry 6667; SSE2-NEXT: movdqa %xmm4, %xmm8 6668; SSE2-NEXT: pcmpgtd %xmm0, %xmm8 6669; SSE2-NEXT: pand %xmm8, %xmm0 6670; SSE2-NEXT: pandn %xmm4, %xmm8 6671; SSE2-NEXT: por %xmm8, %xmm0 6672; SSE2-NEXT: movdqa %xmm5, %xmm4 6673; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 6674; SSE2-NEXT: pand %xmm4, %xmm1 6675; SSE2-NEXT: pandn %xmm5, %xmm4 6676; SSE2-NEXT: por %xmm4, %xmm1 6677; SSE2-NEXT: movdqa %xmm6, %xmm4 6678; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 6679; SSE2-NEXT: pand %xmm4, %xmm2 6680; SSE2-NEXT: pandn %xmm6, %xmm4 6681; SSE2-NEXT: por %xmm4, %xmm2 6682; SSE2-NEXT: movdqa %xmm7, %xmm4 6683; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 6684; SSE2-NEXT: pand %xmm4, %xmm3 6685; SSE2-NEXT: pandn %xmm7, %xmm4 6686; SSE2-NEXT: por %xmm4, %xmm3 6687; SSE2-NEXT: retq 6688; 6689; SSE4-LABEL: test148: 6690; SSE4: # %bb.0: # %entry 6691; SSE4-NEXT: pminsd %xmm4, %xmm0 6692; SSE4-NEXT: pminsd %xmm5, %xmm1 6693; SSE4-NEXT: pminsd %xmm6, %xmm2 6694; SSE4-NEXT: pminsd %xmm7, %xmm3 6695; SSE4-NEXT: retq 6696; 6697; AVX1-LABEL: test148: 6698; AVX1: # %bb.0: # %entry 6699; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6700; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6701; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 6702; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 6703; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6704; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6705; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6706; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 6707; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 6708; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6709; AVX1-NEXT: retq 6710; 6711; AVX2-LABEL: test148: 6712; AVX2: # %bb.0: # %entry 6713; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 6714; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 6715; AVX2-NEXT: retq 6716; 6717; AVX512-LABEL: test148: 6718; AVX512: # %bb.0: # %entry 6719; AVX512-NEXT: vpminsd %zmm1, %zmm0, %zmm0 6720; AVX512-NEXT: retq 6721entry: 6722 %cmp = icmp sge <16 x i32> %a, %b 6723 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6724 ret <16 x i32> %sel 6725} 6726 6727define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) { 6728; SSE2-LABEL: test149: 6729; SSE2: # %bb.0: # %entry 6730; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 6731; SSE2-NEXT: movdqa %xmm4, %xmm9 6732; SSE2-NEXT: pxor %xmm8, %xmm9 6733; SSE2-NEXT: movdqa %xmm0, %xmm10 6734; SSE2-NEXT: pxor %xmm8, %xmm10 6735; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 6736; SSE2-NEXT: pand %xmm10, %xmm0 6737; SSE2-NEXT: pandn %xmm4, %xmm10 6738; SSE2-NEXT: por %xmm10, %xmm0 6739; SSE2-NEXT: movdqa %xmm5, %xmm4 6740; SSE2-NEXT: pxor %xmm8, %xmm4 6741; SSE2-NEXT: movdqa %xmm1, %xmm9 6742; SSE2-NEXT: pxor %xmm8, %xmm9 6743; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 6744; SSE2-NEXT: pand %xmm9, %xmm1 6745; SSE2-NEXT: pandn %xmm5, %xmm9 6746; SSE2-NEXT: por %xmm9, %xmm1 6747; SSE2-NEXT: movdqa %xmm6, %xmm4 6748; SSE2-NEXT: pxor %xmm8, %xmm4 6749; SSE2-NEXT: movdqa %xmm2, %xmm5 6750; SSE2-NEXT: pxor %xmm8, %xmm5 6751; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 6752; SSE2-NEXT: pand %xmm5, %xmm2 6753; SSE2-NEXT: pandn %xmm6, %xmm5 6754; SSE2-NEXT: por %xmm5, %xmm2 6755; SSE2-NEXT: movdqa %xmm7, %xmm4 6756; SSE2-NEXT: pxor %xmm8, %xmm4 6757; SSE2-NEXT: pxor %xmm3, %xmm8 6758; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6759; SSE2-NEXT: pand %xmm8, %xmm3 6760; SSE2-NEXT: pandn %xmm7, %xmm8 6761; SSE2-NEXT: por %xmm8, %xmm3 6762; SSE2-NEXT: retq 6763; 6764; SSE4-LABEL: test149: 6765; SSE4: # %bb.0: # %entry 6766; SSE4-NEXT: pmaxud %xmm4, %xmm0 6767; SSE4-NEXT: pmaxud %xmm5, %xmm1 6768; SSE4-NEXT: pmaxud %xmm6, %xmm2 6769; SSE4-NEXT: pmaxud %xmm7, %xmm3 6770; SSE4-NEXT: retq 6771; 6772; AVX1-LABEL: test149: 6773; AVX1: # %bb.0: # %entry 6774; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6775; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6776; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 6777; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 6778; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6779; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6780; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6781; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 6782; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 6783; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6784; AVX1-NEXT: retq 6785; 6786; AVX2-LABEL: test149: 6787; AVX2: # %bb.0: # %entry 6788; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 6789; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 6790; AVX2-NEXT: retq 6791; 6792; AVX512-LABEL: test149: 6793; AVX512: # %bb.0: # %entry 6794; AVX512-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 6795; AVX512-NEXT: retq 6796entry: 6797 %cmp = icmp ult <16 x i32> %a, %b 6798 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6799 ret <16 x i32> %sel 6800} 6801 6802define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) { 6803; SSE2-LABEL: test150: 6804; SSE2: # %bb.0: # %entry 6805; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 6806; SSE2-NEXT: movdqa %xmm4, %xmm9 6807; SSE2-NEXT: pxor %xmm8, %xmm9 6808; SSE2-NEXT: movdqa %xmm0, %xmm10 6809; SSE2-NEXT: pxor %xmm8, %xmm10 6810; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 6811; SSE2-NEXT: pand %xmm10, %xmm0 6812; SSE2-NEXT: pandn %xmm4, %xmm10 6813; SSE2-NEXT: por %xmm10, %xmm0 6814; SSE2-NEXT: movdqa %xmm5, %xmm4 6815; SSE2-NEXT: pxor %xmm8, %xmm4 6816; SSE2-NEXT: movdqa %xmm1, %xmm9 6817; SSE2-NEXT: pxor %xmm8, %xmm9 6818; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 6819; SSE2-NEXT: pand %xmm9, %xmm1 6820; SSE2-NEXT: pandn %xmm5, %xmm9 6821; SSE2-NEXT: por %xmm9, %xmm1 6822; SSE2-NEXT: movdqa %xmm6, %xmm4 6823; SSE2-NEXT: pxor %xmm8, %xmm4 6824; SSE2-NEXT: movdqa %xmm2, %xmm5 6825; SSE2-NEXT: pxor %xmm8, %xmm5 6826; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 6827; SSE2-NEXT: pand %xmm5, %xmm2 6828; SSE2-NEXT: pandn %xmm6, %xmm5 6829; SSE2-NEXT: por %xmm5, %xmm2 6830; SSE2-NEXT: movdqa %xmm7, %xmm4 6831; SSE2-NEXT: pxor %xmm8, %xmm4 6832; SSE2-NEXT: pxor %xmm3, %xmm8 6833; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6834; SSE2-NEXT: pand %xmm8, %xmm3 6835; SSE2-NEXT: pandn %xmm7, %xmm8 6836; SSE2-NEXT: por %xmm8, %xmm3 6837; SSE2-NEXT: retq 6838; 6839; SSE4-LABEL: test150: 6840; SSE4: # %bb.0: # %entry 6841; SSE4-NEXT: pmaxud %xmm4, %xmm0 6842; SSE4-NEXT: pmaxud %xmm5, %xmm1 6843; SSE4-NEXT: pmaxud %xmm6, %xmm2 6844; SSE4-NEXT: pmaxud %xmm7, %xmm3 6845; SSE4-NEXT: retq 6846; 6847; AVX1-LABEL: test150: 6848; AVX1: # %bb.0: # %entry 6849; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6850; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6851; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 6852; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 6853; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6854; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6855; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6856; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 6857; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 6858; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6859; AVX1-NEXT: retq 6860; 6861; AVX2-LABEL: test150: 6862; AVX2: # %bb.0: # %entry 6863; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 6864; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 6865; AVX2-NEXT: retq 6866; 6867; AVX512-LABEL: test150: 6868; AVX512: # %bb.0: # %entry 6869; AVX512-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 6870; AVX512-NEXT: retq 6871entry: 6872 %cmp = icmp ule <16 x i32> %a, %b 6873 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6874 ret <16 x i32> %sel 6875} 6876 6877define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) { 6878; SSE2-LABEL: test151: 6879; SSE2: # %bb.0: # %entry 6880; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 6881; SSE2-NEXT: movdqa %xmm0, %xmm9 6882; SSE2-NEXT: pxor %xmm8, %xmm9 6883; SSE2-NEXT: movdqa %xmm4, %xmm10 6884; SSE2-NEXT: pxor %xmm8, %xmm10 6885; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 6886; SSE2-NEXT: pand %xmm10, %xmm0 6887; SSE2-NEXT: pandn %xmm4, %xmm10 6888; SSE2-NEXT: por %xmm10, %xmm0 6889; SSE2-NEXT: movdqa %xmm1, %xmm4 6890; SSE2-NEXT: pxor %xmm8, %xmm4 6891; SSE2-NEXT: movdqa %xmm5, %xmm9 6892; SSE2-NEXT: pxor %xmm8, %xmm9 6893; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 6894; SSE2-NEXT: pand %xmm9, %xmm1 6895; SSE2-NEXT: pandn %xmm5, %xmm9 6896; SSE2-NEXT: por %xmm9, %xmm1 6897; SSE2-NEXT: movdqa %xmm2, %xmm4 6898; SSE2-NEXT: pxor %xmm8, %xmm4 6899; SSE2-NEXT: movdqa %xmm6, %xmm5 6900; SSE2-NEXT: pxor %xmm8, %xmm5 6901; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 6902; SSE2-NEXT: pand %xmm5, %xmm2 6903; SSE2-NEXT: pandn %xmm6, %xmm5 6904; SSE2-NEXT: por %xmm5, %xmm2 6905; SSE2-NEXT: movdqa %xmm3, %xmm4 6906; SSE2-NEXT: pxor %xmm8, %xmm4 6907; SSE2-NEXT: pxor %xmm7, %xmm8 6908; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6909; SSE2-NEXT: pand %xmm8, %xmm3 6910; SSE2-NEXT: pandn %xmm7, %xmm8 6911; SSE2-NEXT: por %xmm8, %xmm3 6912; SSE2-NEXT: retq 6913; 6914; SSE4-LABEL: test151: 6915; SSE4: # %bb.0: # %entry 6916; SSE4-NEXT: pminud %xmm4, %xmm0 6917; SSE4-NEXT: pminud %xmm5, %xmm1 6918; SSE4-NEXT: pminud %xmm6, %xmm2 6919; SSE4-NEXT: pminud %xmm7, %xmm3 6920; SSE4-NEXT: retq 6921; 6922; AVX1-LABEL: test151: 6923; AVX1: # %bb.0: # %entry 6924; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6925; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6926; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 6927; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 6928; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6929; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6930; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6931; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 6932; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 6933; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6934; AVX1-NEXT: retq 6935; 6936; AVX2-LABEL: test151: 6937; AVX2: # %bb.0: # %entry 6938; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 6939; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 6940; AVX2-NEXT: retq 6941; 6942; AVX512-LABEL: test151: 6943; AVX512: # %bb.0: # %entry 6944; AVX512-NEXT: vpminud %zmm1, %zmm0, %zmm0 6945; AVX512-NEXT: retq 6946entry: 6947 %cmp = icmp ugt <16 x i32> %a, %b 6948 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6949 ret <16 x i32> %sel 6950} 6951 6952define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) { 6953; SSE2-LABEL: test152: 6954; SSE2: # %bb.0: # %entry 6955; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 6956; SSE2-NEXT: movdqa %xmm0, %xmm9 6957; SSE2-NEXT: pxor %xmm8, %xmm9 6958; SSE2-NEXT: movdqa %xmm4, %xmm10 6959; SSE2-NEXT: pxor %xmm8, %xmm10 6960; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 6961; SSE2-NEXT: pand %xmm10, %xmm0 6962; SSE2-NEXT: pandn %xmm4, %xmm10 6963; SSE2-NEXT: por %xmm10, %xmm0 6964; SSE2-NEXT: movdqa %xmm1, %xmm4 6965; SSE2-NEXT: pxor %xmm8, %xmm4 6966; SSE2-NEXT: movdqa %xmm5, %xmm9 6967; SSE2-NEXT: pxor %xmm8, %xmm9 6968; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 6969; SSE2-NEXT: pand %xmm9, %xmm1 6970; SSE2-NEXT: pandn %xmm5, %xmm9 6971; SSE2-NEXT: por %xmm9, %xmm1 6972; SSE2-NEXT: movdqa %xmm2, %xmm4 6973; SSE2-NEXT: pxor %xmm8, %xmm4 6974; SSE2-NEXT: movdqa %xmm6, %xmm5 6975; SSE2-NEXT: pxor %xmm8, %xmm5 6976; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 6977; SSE2-NEXT: pand %xmm5, %xmm2 6978; SSE2-NEXT: pandn %xmm6, %xmm5 6979; SSE2-NEXT: por %xmm5, %xmm2 6980; SSE2-NEXT: movdqa %xmm3, %xmm4 6981; SSE2-NEXT: pxor %xmm8, %xmm4 6982; SSE2-NEXT: pxor %xmm7, %xmm8 6983; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6984; SSE2-NEXT: pand %xmm8, %xmm3 6985; SSE2-NEXT: pandn %xmm7, %xmm8 6986; SSE2-NEXT: por %xmm8, %xmm3 6987; SSE2-NEXT: retq 6988; 6989; SSE4-LABEL: test152: 6990; SSE4: # %bb.0: # %entry 6991; SSE4-NEXT: pminud %xmm4, %xmm0 6992; SSE4-NEXT: pminud %xmm5, %xmm1 6993; SSE4-NEXT: pminud %xmm6, %xmm2 6994; SSE4-NEXT: pminud %xmm7, %xmm3 6995; SSE4-NEXT: retq 6996; 6997; AVX1-LABEL: test152: 6998; AVX1: # %bb.0: # %entry 6999; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7000; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7001; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 7002; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 7003; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7004; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7005; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7006; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 7007; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 7008; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7009; AVX1-NEXT: retq 7010; 7011; AVX2-LABEL: test152: 7012; AVX2: # %bb.0: # %entry 7013; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 7014; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 7015; AVX2-NEXT: retq 7016; 7017; AVX512-LABEL: test152: 7018; AVX512: # %bb.0: # %entry 7019; AVX512-NEXT: vpminud %zmm1, %zmm0, %zmm0 7020; AVX512-NEXT: retq 7021entry: 7022 %cmp = icmp uge <16 x i32> %a, %b 7023 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7024 ret <16 x i32> %sel 7025} 7026 7027; ----------------------- 7028 7029define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) { 7030; SSE2-LABEL: test153: 7031; SSE2: # %bb.0: # %entry 7032; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 7033; SSE2-NEXT: movdqa %xmm4, %xmm9 7034; SSE2-NEXT: pxor %xmm8, %xmm9 7035; SSE2-NEXT: movdqa %xmm0, %xmm10 7036; SSE2-NEXT: pxor %xmm8, %xmm10 7037; SSE2-NEXT: movdqa %xmm10, %xmm11 7038; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7039; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7040; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7041; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7042; SSE2-NEXT: pand %xmm12, %xmm9 7043; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7044; SSE2-NEXT: por %xmm9, %xmm10 7045; SSE2-NEXT: pand %xmm10, %xmm0 7046; SSE2-NEXT: pandn %xmm4, %xmm10 7047; SSE2-NEXT: por %xmm10, %xmm0 7048; SSE2-NEXT: movdqa %xmm5, %xmm4 7049; SSE2-NEXT: pxor %xmm8, %xmm4 7050; SSE2-NEXT: movdqa %xmm1, %xmm9 7051; SSE2-NEXT: pxor %xmm8, %xmm9 7052; SSE2-NEXT: movdqa %xmm9, %xmm10 7053; SSE2-NEXT: pcmpgtd %xmm4, %xmm10 7054; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7055; SSE2-NEXT: pcmpeqd %xmm4, %xmm9 7056; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3] 7057; SSE2-NEXT: pand %xmm11, %xmm4 7058; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7059; SSE2-NEXT: por %xmm4, %xmm9 7060; SSE2-NEXT: pand %xmm9, %xmm1 7061; SSE2-NEXT: pandn %xmm5, %xmm9 7062; SSE2-NEXT: por %xmm9, %xmm1 7063; SSE2-NEXT: movdqa %xmm6, %xmm4 7064; SSE2-NEXT: pxor %xmm8, %xmm4 7065; SSE2-NEXT: movdqa %xmm2, %xmm5 7066; SSE2-NEXT: pxor %xmm8, %xmm5 7067; SSE2-NEXT: movdqa %xmm5, %xmm9 7068; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7069; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7070; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7071; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7072; SSE2-NEXT: pand %xmm10, %xmm4 7073; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7074; SSE2-NEXT: por %xmm4, %xmm5 7075; SSE2-NEXT: pand %xmm5, %xmm2 7076; SSE2-NEXT: pandn %xmm6, %xmm5 7077; SSE2-NEXT: por %xmm5, %xmm2 7078; SSE2-NEXT: movdqa %xmm7, %xmm4 7079; SSE2-NEXT: pxor %xmm8, %xmm4 7080; SSE2-NEXT: pxor %xmm3, %xmm8 7081; SSE2-NEXT: movdqa %xmm8, %xmm5 7082; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7083; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7084; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7085; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7086; SSE2-NEXT: pand %xmm6, %xmm4 7087; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7088; SSE2-NEXT: por %xmm4, %xmm5 7089; SSE2-NEXT: pand %xmm5, %xmm3 7090; SSE2-NEXT: pandn %xmm7, %xmm5 7091; SSE2-NEXT: por %xmm5, %xmm3 7092; SSE2-NEXT: retq 7093; 7094; SSE4-LABEL: test153: 7095; SSE4: # %bb.0: # %entry 7096; SSE4-NEXT: movdqa %xmm0, %xmm8 7097; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7098; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 7099; SSE4-NEXT: movdqa %xmm1, %xmm0 7100; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 7101; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7102; SSE4-NEXT: movdqa %xmm2, %xmm0 7103; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 7104; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7105; SSE4-NEXT: movdqa %xmm3, %xmm0 7106; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 7107; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 7108; SSE4-NEXT: movapd %xmm4, %xmm0 7109; SSE4-NEXT: movapd %xmm5, %xmm1 7110; SSE4-NEXT: movapd %xmm6, %xmm2 7111; SSE4-NEXT: movapd %xmm7, %xmm3 7112; SSE4-NEXT: retq 7113; 7114; AVX1-LABEL: test153: 7115; AVX1: # %bb.0: # %entry 7116; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7117; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7118; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7119; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5 7120; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7121; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7122; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7123; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7124; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7125; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4 7126; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7127; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7128; AVX1-NEXT: retq 7129; 7130; AVX2-LABEL: test153: 7131; AVX2: # %bb.0: # %entry 7132; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4 7133; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7134; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2 7135; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7136; AVX2-NEXT: retq 7137; 7138; AVX512-LABEL: test153: 7139; AVX512: # %bb.0: # %entry 7140; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 7141; AVX512-NEXT: retq 7142entry: 7143 %cmp = icmp slt <8 x i64> %a, %b 7144 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7145 ret <8 x i64> %sel 7146} 7147 7148define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) { 7149; SSE2-LABEL: test154: 7150; SSE2: # %bb.0: # %entry 7151; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 7152; SSE2-NEXT: movdqa %xmm4, %xmm9 7153; SSE2-NEXT: pxor %xmm8, %xmm9 7154; SSE2-NEXT: movdqa %xmm0, %xmm10 7155; SSE2-NEXT: pxor %xmm8, %xmm10 7156; SSE2-NEXT: movdqa %xmm10, %xmm11 7157; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7158; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7159; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7160; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7161; SSE2-NEXT: pand %xmm12, %xmm9 7162; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7163; SSE2-NEXT: por %xmm9, %xmm10 7164; SSE2-NEXT: pand %xmm10, %xmm0 7165; SSE2-NEXT: pandn %xmm4, %xmm10 7166; SSE2-NEXT: por %xmm10, %xmm0 7167; SSE2-NEXT: movdqa %xmm5, %xmm4 7168; SSE2-NEXT: pxor %xmm8, %xmm4 7169; SSE2-NEXT: movdqa %xmm1, %xmm9 7170; SSE2-NEXT: pxor %xmm8, %xmm9 7171; SSE2-NEXT: movdqa %xmm9, %xmm10 7172; SSE2-NEXT: pcmpgtd %xmm4, %xmm10 7173; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7174; SSE2-NEXT: pcmpeqd %xmm4, %xmm9 7175; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3] 7176; SSE2-NEXT: pand %xmm11, %xmm4 7177; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7178; SSE2-NEXT: por %xmm4, %xmm9 7179; SSE2-NEXT: pand %xmm9, %xmm1 7180; SSE2-NEXT: pandn %xmm5, %xmm9 7181; SSE2-NEXT: por %xmm9, %xmm1 7182; SSE2-NEXT: movdqa %xmm6, %xmm4 7183; SSE2-NEXT: pxor %xmm8, %xmm4 7184; SSE2-NEXT: movdqa %xmm2, %xmm5 7185; SSE2-NEXT: pxor %xmm8, %xmm5 7186; SSE2-NEXT: movdqa %xmm5, %xmm9 7187; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7188; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7189; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7190; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7191; SSE2-NEXT: pand %xmm10, %xmm4 7192; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7193; SSE2-NEXT: por %xmm4, %xmm5 7194; SSE2-NEXT: pand %xmm5, %xmm2 7195; SSE2-NEXT: pandn %xmm6, %xmm5 7196; SSE2-NEXT: por %xmm5, %xmm2 7197; SSE2-NEXT: movdqa %xmm7, %xmm4 7198; SSE2-NEXT: pxor %xmm8, %xmm4 7199; SSE2-NEXT: pxor %xmm3, %xmm8 7200; SSE2-NEXT: movdqa %xmm8, %xmm5 7201; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7202; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7203; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7204; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7205; SSE2-NEXT: pand %xmm6, %xmm4 7206; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7207; SSE2-NEXT: por %xmm4, %xmm5 7208; SSE2-NEXT: pand %xmm5, %xmm3 7209; SSE2-NEXT: pandn %xmm7, %xmm5 7210; SSE2-NEXT: por %xmm5, %xmm3 7211; SSE2-NEXT: retq 7212; 7213; SSE4-LABEL: test154: 7214; SSE4: # %bb.0: # %entry 7215; SSE4-NEXT: movdqa %xmm0, %xmm8 7216; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7217; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 7218; SSE4-NEXT: movdqa %xmm1, %xmm0 7219; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 7220; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7221; SSE4-NEXT: movdqa %xmm2, %xmm0 7222; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 7223; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7224; SSE4-NEXT: movdqa %xmm3, %xmm0 7225; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 7226; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 7227; SSE4-NEXT: movapd %xmm4, %xmm0 7228; SSE4-NEXT: movapd %xmm5, %xmm1 7229; SSE4-NEXT: movapd %xmm6, %xmm2 7230; SSE4-NEXT: movapd %xmm7, %xmm3 7231; SSE4-NEXT: retq 7232; 7233; AVX1-LABEL: test154: 7234; AVX1: # %bb.0: # %entry 7235; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7236; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7237; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7238; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5 7239; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7240; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7241; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7242; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7243; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7244; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4 7245; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7246; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7247; AVX1-NEXT: retq 7248; 7249; AVX2-LABEL: test154: 7250; AVX2: # %bb.0: # %entry 7251; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4 7252; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7253; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2 7254; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7255; AVX2-NEXT: retq 7256; 7257; AVX512-LABEL: test154: 7258; AVX512: # %bb.0: # %entry 7259; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 7260; AVX512-NEXT: retq 7261entry: 7262 %cmp = icmp sle <8 x i64> %a, %b 7263 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7264 ret <8 x i64> %sel 7265} 7266 7267define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) { 7268; SSE2-LABEL: test155: 7269; SSE2: # %bb.0: # %entry 7270; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 7271; SSE2-NEXT: movdqa %xmm0, %xmm9 7272; SSE2-NEXT: pxor %xmm8, %xmm9 7273; SSE2-NEXT: movdqa %xmm4, %xmm10 7274; SSE2-NEXT: pxor %xmm8, %xmm10 7275; SSE2-NEXT: movdqa %xmm10, %xmm11 7276; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7277; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7278; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7279; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7280; SSE2-NEXT: pand %xmm12, %xmm9 7281; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7282; SSE2-NEXT: por %xmm9, %xmm10 7283; SSE2-NEXT: pand %xmm10, %xmm0 7284; SSE2-NEXT: pandn %xmm4, %xmm10 7285; SSE2-NEXT: por %xmm10, %xmm0 7286; SSE2-NEXT: movdqa %xmm1, %xmm4 7287; SSE2-NEXT: pxor %xmm8, %xmm4 7288; SSE2-NEXT: movdqa %xmm5, %xmm9 7289; SSE2-NEXT: pxor %xmm8, %xmm9 7290; SSE2-NEXT: movdqa %xmm9, %xmm10 7291; SSE2-NEXT: pcmpgtd %xmm4, %xmm10 7292; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7293; SSE2-NEXT: pcmpeqd %xmm4, %xmm9 7294; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3] 7295; SSE2-NEXT: pand %xmm11, %xmm4 7296; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7297; SSE2-NEXT: por %xmm4, %xmm9 7298; SSE2-NEXT: pand %xmm9, %xmm1 7299; SSE2-NEXT: pandn %xmm5, %xmm9 7300; SSE2-NEXT: por %xmm9, %xmm1 7301; SSE2-NEXT: movdqa %xmm2, %xmm4 7302; SSE2-NEXT: pxor %xmm8, %xmm4 7303; SSE2-NEXT: movdqa %xmm6, %xmm5 7304; SSE2-NEXT: pxor %xmm8, %xmm5 7305; SSE2-NEXT: movdqa %xmm5, %xmm9 7306; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7307; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7308; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7309; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7310; SSE2-NEXT: pand %xmm10, %xmm4 7311; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7312; SSE2-NEXT: por %xmm4, %xmm5 7313; SSE2-NEXT: pand %xmm5, %xmm2 7314; SSE2-NEXT: pandn %xmm6, %xmm5 7315; SSE2-NEXT: por %xmm5, %xmm2 7316; SSE2-NEXT: movdqa %xmm3, %xmm4 7317; SSE2-NEXT: pxor %xmm8, %xmm4 7318; SSE2-NEXT: pxor %xmm7, %xmm8 7319; SSE2-NEXT: movdqa %xmm8, %xmm5 7320; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7321; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7322; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7323; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7324; SSE2-NEXT: pand %xmm6, %xmm4 7325; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7326; SSE2-NEXT: por %xmm4, %xmm5 7327; SSE2-NEXT: pand %xmm5, %xmm3 7328; SSE2-NEXT: pandn %xmm7, %xmm5 7329; SSE2-NEXT: por %xmm5, %xmm3 7330; SSE2-NEXT: retq 7331; 7332; SSE4-LABEL: test155: 7333; SSE4: # %bb.0: # %entry 7334; SSE4-NEXT: movdqa %xmm0, %xmm8 7335; SSE4-NEXT: movdqa %xmm4, %xmm0 7336; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 7337; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 7338; SSE4-NEXT: movdqa %xmm5, %xmm0 7339; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7340; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7341; SSE4-NEXT: movdqa %xmm6, %xmm0 7342; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 7343; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7344; SSE4-NEXT: movdqa %xmm7, %xmm0 7345; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 7346; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 7347; SSE4-NEXT: movapd %xmm4, %xmm0 7348; SSE4-NEXT: movapd %xmm5, %xmm1 7349; SSE4-NEXT: movapd %xmm6, %xmm2 7350; SSE4-NEXT: movapd %xmm7, %xmm3 7351; SSE4-NEXT: retq 7352; 7353; AVX1-LABEL: test155: 7354; AVX1: # %bb.0: # %entry 7355; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 7356; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 7357; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7358; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm5 7359; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7360; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7361; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 7362; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7363; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7364; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm4 7365; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7366; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7367; AVX1-NEXT: retq 7368; 7369; AVX2-LABEL: test155: 7370; AVX2: # %bb.0: # %entry 7371; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm4 7372; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7373; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm2 7374; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7375; AVX2-NEXT: retq 7376; 7377; AVX512-LABEL: test155: 7378; AVX512: # %bb.0: # %entry 7379; AVX512-NEXT: vpminsq %zmm1, %zmm0, %zmm0 7380; AVX512-NEXT: retq 7381entry: 7382 %cmp = icmp sgt <8 x i64> %a, %b 7383 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7384 ret <8 x i64> %sel 7385} 7386 7387define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) { 7388; SSE2-LABEL: test156: 7389; SSE2: # %bb.0: # %entry 7390; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 7391; SSE2-NEXT: movdqa %xmm4, %xmm9 7392; SSE2-NEXT: pxor %xmm8, %xmm9 7393; SSE2-NEXT: movdqa %xmm0, %xmm10 7394; SSE2-NEXT: pxor %xmm8, %xmm10 7395; SSE2-NEXT: movdqa %xmm10, %xmm11 7396; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7397; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7398; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7399; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7400; SSE2-NEXT: pand %xmm12, %xmm9 7401; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7402; SSE2-NEXT: por %xmm9, %xmm10 7403; SSE2-NEXT: pand %xmm10, %xmm0 7404; SSE2-NEXT: pandn %xmm4, %xmm10 7405; SSE2-NEXT: por %xmm10, %xmm0 7406; SSE2-NEXT: movdqa %xmm5, %xmm4 7407; SSE2-NEXT: pxor %xmm8, %xmm4 7408; SSE2-NEXT: movdqa %xmm1, %xmm9 7409; SSE2-NEXT: pxor %xmm8, %xmm9 7410; SSE2-NEXT: movdqa %xmm9, %xmm10 7411; SSE2-NEXT: pcmpgtd %xmm4, %xmm10 7412; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7413; SSE2-NEXT: pcmpeqd %xmm4, %xmm9 7414; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3] 7415; SSE2-NEXT: pand %xmm11, %xmm4 7416; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7417; SSE2-NEXT: por %xmm4, %xmm9 7418; SSE2-NEXT: pand %xmm9, %xmm1 7419; SSE2-NEXT: pandn %xmm5, %xmm9 7420; SSE2-NEXT: por %xmm9, %xmm1 7421; SSE2-NEXT: movdqa %xmm6, %xmm4 7422; SSE2-NEXT: pxor %xmm8, %xmm4 7423; SSE2-NEXT: movdqa %xmm2, %xmm5 7424; SSE2-NEXT: pxor %xmm8, %xmm5 7425; SSE2-NEXT: movdqa %xmm5, %xmm9 7426; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7427; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7428; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7429; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7430; SSE2-NEXT: pand %xmm10, %xmm4 7431; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7432; SSE2-NEXT: por %xmm4, %xmm5 7433; SSE2-NEXT: pand %xmm5, %xmm2 7434; SSE2-NEXT: pandn %xmm6, %xmm5 7435; SSE2-NEXT: por %xmm5, %xmm2 7436; SSE2-NEXT: movdqa %xmm7, %xmm4 7437; SSE2-NEXT: pxor %xmm8, %xmm4 7438; SSE2-NEXT: pxor %xmm3, %xmm8 7439; SSE2-NEXT: movdqa %xmm8, %xmm5 7440; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7441; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7442; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7443; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7444; SSE2-NEXT: pand %xmm6, %xmm4 7445; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7446; SSE2-NEXT: por %xmm4, %xmm5 7447; SSE2-NEXT: pand %xmm5, %xmm3 7448; SSE2-NEXT: pandn %xmm7, %xmm5 7449; SSE2-NEXT: por %xmm5, %xmm3 7450; SSE2-NEXT: retq 7451; 7452; SSE4-LABEL: test156: 7453; SSE4: # %bb.0: # %entry 7454; SSE4-NEXT: movdqa %xmm0, %xmm9 7455; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 7456; SSE4-NEXT: movdqa %xmm4, %xmm10 7457; SSE4-NEXT: pxor %xmm8, %xmm10 7458; SSE4-NEXT: pxor %xmm8, %xmm0 7459; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 7460; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 7461; SSE4-NEXT: movdqa %xmm5, %xmm9 7462; SSE4-NEXT: pxor %xmm8, %xmm9 7463; SSE4-NEXT: movdqa %xmm1, %xmm0 7464; SSE4-NEXT: pxor %xmm8, %xmm0 7465; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 7466; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7467; SSE4-NEXT: movdqa %xmm6, %xmm1 7468; SSE4-NEXT: pxor %xmm8, %xmm1 7469; SSE4-NEXT: movdqa %xmm2, %xmm0 7470; SSE4-NEXT: pxor %xmm8, %xmm0 7471; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7472; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7473; SSE4-NEXT: movdqa %xmm7, %xmm0 7474; SSE4-NEXT: pxor %xmm8, %xmm0 7475; SSE4-NEXT: pxor %xmm3, %xmm8 7476; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 7477; SSE4-NEXT: movdqa %xmm8, %xmm0 7478; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 7479; SSE4-NEXT: movapd %xmm4, %xmm0 7480; SSE4-NEXT: movapd %xmm5, %xmm1 7481; SSE4-NEXT: movapd %xmm6, %xmm2 7482; SSE4-NEXT: movapd %xmm7, %xmm3 7483; SSE4-NEXT: retq 7484; 7485; AVX1-LABEL: test156: 7486; AVX1: # %bb.0: # %entry 7487; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7488; AVX1-NEXT: vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 7489; AVX1-NEXT: # xmm5 = mem[0,0] 7490; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7491; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 7492; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7493; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 7494; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm6 7495; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7 7496; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 7497; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 7498; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7499; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7500; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 7501; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7502; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7503; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7504; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm4 7505; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5 7506; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7507; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7508; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7509; AVX1-NEXT: retq 7510; 7511; AVX2-LABEL: test156: 7512; AVX2: # %bb.0: # %entry 7513; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 7514; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm5 7515; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 7516; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 7517; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 7518; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm2 7519; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm4 7520; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 7521; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7522; AVX2-NEXT: retq 7523; 7524; AVX512-LABEL: test156: 7525; AVX512: # %bb.0: # %entry 7526; AVX512-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 7527; AVX512-NEXT: retq 7528entry: 7529 %cmp = icmp ule <8 x i64> %a, %b 7530 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7531 ret <8 x i64> %sel 7532} 7533 7534define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) { 7535; SSE2-LABEL: test159: 7536; SSE2: # %bb.0: # %entry 7537; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 7538; SSE2-NEXT: movdqa %xmm0, %xmm9 7539; SSE2-NEXT: pxor %xmm8, %xmm9 7540; SSE2-NEXT: movdqa %xmm4, %xmm10 7541; SSE2-NEXT: pxor %xmm8, %xmm10 7542; SSE2-NEXT: movdqa %xmm10, %xmm11 7543; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7544; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7545; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7546; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7547; SSE2-NEXT: pand %xmm12, %xmm9 7548; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7549; SSE2-NEXT: por %xmm9, %xmm10 7550; SSE2-NEXT: pand %xmm10, %xmm0 7551; SSE2-NEXT: pandn %xmm4, %xmm10 7552; SSE2-NEXT: por %xmm10, %xmm0 7553; SSE2-NEXT: movdqa %xmm1, %xmm4 7554; SSE2-NEXT: pxor %xmm8, %xmm4 7555; SSE2-NEXT: movdqa %xmm5, %xmm9 7556; SSE2-NEXT: pxor %xmm8, %xmm9 7557; SSE2-NEXT: movdqa %xmm9, %xmm10 7558; SSE2-NEXT: pcmpgtd %xmm4, %xmm10 7559; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7560; SSE2-NEXT: pcmpeqd %xmm4, %xmm9 7561; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3] 7562; SSE2-NEXT: pand %xmm11, %xmm4 7563; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7564; SSE2-NEXT: por %xmm4, %xmm9 7565; SSE2-NEXT: pand %xmm9, %xmm1 7566; SSE2-NEXT: pandn %xmm5, %xmm9 7567; SSE2-NEXT: por %xmm9, %xmm1 7568; SSE2-NEXT: movdqa %xmm2, %xmm4 7569; SSE2-NEXT: pxor %xmm8, %xmm4 7570; SSE2-NEXT: movdqa %xmm6, %xmm5 7571; SSE2-NEXT: pxor %xmm8, %xmm5 7572; SSE2-NEXT: movdqa %xmm5, %xmm9 7573; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7574; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7575; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7576; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7577; SSE2-NEXT: pand %xmm10, %xmm4 7578; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7579; SSE2-NEXT: por %xmm4, %xmm5 7580; SSE2-NEXT: pand %xmm5, %xmm2 7581; SSE2-NEXT: pandn %xmm6, %xmm5 7582; SSE2-NEXT: por %xmm5, %xmm2 7583; SSE2-NEXT: movdqa %xmm3, %xmm4 7584; SSE2-NEXT: pxor %xmm8, %xmm4 7585; SSE2-NEXT: pxor %xmm7, %xmm8 7586; SSE2-NEXT: movdqa %xmm8, %xmm5 7587; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7588; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7589; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7590; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7591; SSE2-NEXT: pand %xmm6, %xmm4 7592; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7593; SSE2-NEXT: por %xmm4, %xmm5 7594; SSE2-NEXT: pand %xmm5, %xmm3 7595; SSE2-NEXT: pandn %xmm7, %xmm5 7596; SSE2-NEXT: por %xmm5, %xmm3 7597; SSE2-NEXT: retq 7598; 7599; SSE4-LABEL: test159: 7600; SSE4: # %bb.0: # %entry 7601; SSE4-NEXT: movdqa %xmm0, %xmm9 7602; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 7603; SSE4-NEXT: movdqa %xmm0, %xmm10 7604; SSE4-NEXT: pxor %xmm8, %xmm10 7605; SSE4-NEXT: movdqa %xmm4, %xmm0 7606; SSE4-NEXT: pxor %xmm8, %xmm0 7607; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 7608; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 7609; SSE4-NEXT: movdqa %xmm1, %xmm9 7610; SSE4-NEXT: pxor %xmm8, %xmm9 7611; SSE4-NEXT: movdqa %xmm5, %xmm0 7612; SSE4-NEXT: pxor %xmm8, %xmm0 7613; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 7614; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7615; SSE4-NEXT: movdqa %xmm2, %xmm1 7616; SSE4-NEXT: pxor %xmm8, %xmm1 7617; SSE4-NEXT: movdqa %xmm6, %xmm0 7618; SSE4-NEXT: pxor %xmm8, %xmm0 7619; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7620; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7621; SSE4-NEXT: movdqa %xmm3, %xmm0 7622; SSE4-NEXT: pxor %xmm8, %xmm0 7623; SSE4-NEXT: pxor %xmm7, %xmm8 7624; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 7625; SSE4-NEXT: movdqa %xmm8, %xmm0 7626; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 7627; SSE4-NEXT: movapd %xmm4, %xmm0 7628; SSE4-NEXT: movapd %xmm5, %xmm1 7629; SSE4-NEXT: movapd %xmm6, %xmm2 7630; SSE4-NEXT: movapd %xmm7, %xmm3 7631; SSE4-NEXT: retq 7632; 7633; AVX1-LABEL: test159: 7634; AVX1: # %bb.0: # %entry 7635; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 7636; AVX1-NEXT: vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 7637; AVX1-NEXT: # xmm5 = mem[0,0] 7638; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7639; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 7640; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7641; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 7642; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6 7643; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7 7644; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 7645; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 7646; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7647; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 7648; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 7649; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7650; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7651; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7652; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4 7653; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5 7654; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7655; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7656; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7657; AVX1-NEXT: retq 7658; 7659; AVX2-LABEL: test159: 7660; AVX2: # %bb.0: # %entry 7661; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 7662; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5 7663; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 7664; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 7665; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 7666; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2 7667; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4 7668; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 7669; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7670; AVX2-NEXT: retq 7671; 7672; AVX512-LABEL: test159: 7673; AVX512: # %bb.0: # %entry 7674; AVX512-NEXT: vpminuq %zmm1, %zmm0, %zmm0 7675; AVX512-NEXT: retq 7676entry: 7677 %cmp = icmp ugt <8 x i64> %a, %b 7678 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7679 ret <8 x i64> %sel 7680} 7681 7682define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) { 7683; SSE2-LABEL: test160: 7684; SSE2: # %bb.0: # %entry 7685; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 7686; SSE2-NEXT: movdqa %xmm0, %xmm9 7687; SSE2-NEXT: pxor %xmm8, %xmm9 7688; SSE2-NEXT: movdqa %xmm4, %xmm10 7689; SSE2-NEXT: pxor %xmm8, %xmm10 7690; SSE2-NEXT: movdqa %xmm10, %xmm11 7691; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7692; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7693; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7694; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7695; SSE2-NEXT: pand %xmm12, %xmm9 7696; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7697; SSE2-NEXT: por %xmm9, %xmm10 7698; SSE2-NEXT: pand %xmm10, %xmm0 7699; SSE2-NEXT: pandn %xmm4, %xmm10 7700; SSE2-NEXT: por %xmm10, %xmm0 7701; SSE2-NEXT: movdqa %xmm1, %xmm4 7702; SSE2-NEXT: pxor %xmm8, %xmm4 7703; SSE2-NEXT: movdqa %xmm5, %xmm9 7704; SSE2-NEXT: pxor %xmm8, %xmm9 7705; SSE2-NEXT: movdqa %xmm9, %xmm10 7706; SSE2-NEXT: pcmpgtd %xmm4, %xmm10 7707; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7708; SSE2-NEXT: pcmpeqd %xmm4, %xmm9 7709; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3] 7710; SSE2-NEXT: pand %xmm11, %xmm4 7711; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7712; SSE2-NEXT: por %xmm4, %xmm9 7713; SSE2-NEXT: pand %xmm9, %xmm1 7714; SSE2-NEXT: pandn %xmm5, %xmm9 7715; SSE2-NEXT: por %xmm9, %xmm1 7716; SSE2-NEXT: movdqa %xmm2, %xmm4 7717; SSE2-NEXT: pxor %xmm8, %xmm4 7718; SSE2-NEXT: movdqa %xmm6, %xmm5 7719; SSE2-NEXT: pxor %xmm8, %xmm5 7720; SSE2-NEXT: movdqa %xmm5, %xmm9 7721; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7722; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7723; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7724; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7725; SSE2-NEXT: pand %xmm10, %xmm4 7726; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7727; SSE2-NEXT: por %xmm4, %xmm5 7728; SSE2-NEXT: pand %xmm5, %xmm2 7729; SSE2-NEXT: pandn %xmm6, %xmm5 7730; SSE2-NEXT: por %xmm5, %xmm2 7731; SSE2-NEXT: movdqa %xmm3, %xmm4 7732; SSE2-NEXT: pxor %xmm8, %xmm4 7733; SSE2-NEXT: pxor %xmm7, %xmm8 7734; SSE2-NEXT: movdqa %xmm8, %xmm5 7735; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7736; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7737; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7738; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7739; SSE2-NEXT: pand %xmm6, %xmm4 7740; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7741; SSE2-NEXT: por %xmm4, %xmm5 7742; SSE2-NEXT: pand %xmm5, %xmm3 7743; SSE2-NEXT: pandn %xmm7, %xmm5 7744; SSE2-NEXT: por %xmm5, %xmm3 7745; SSE2-NEXT: retq 7746; 7747; SSE4-LABEL: test160: 7748; SSE4: # %bb.0: # %entry 7749; SSE4-NEXT: movdqa %xmm0, %xmm9 7750; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 7751; SSE4-NEXT: movdqa %xmm0, %xmm10 7752; SSE4-NEXT: pxor %xmm8, %xmm10 7753; SSE4-NEXT: movdqa %xmm4, %xmm0 7754; SSE4-NEXT: pxor %xmm8, %xmm0 7755; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 7756; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 7757; SSE4-NEXT: movdqa %xmm1, %xmm9 7758; SSE4-NEXT: pxor %xmm8, %xmm9 7759; SSE4-NEXT: movdqa %xmm5, %xmm0 7760; SSE4-NEXT: pxor %xmm8, %xmm0 7761; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 7762; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7763; SSE4-NEXT: movdqa %xmm2, %xmm1 7764; SSE4-NEXT: pxor %xmm8, %xmm1 7765; SSE4-NEXT: movdqa %xmm6, %xmm0 7766; SSE4-NEXT: pxor %xmm8, %xmm0 7767; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7768; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7769; SSE4-NEXT: movdqa %xmm3, %xmm0 7770; SSE4-NEXT: pxor %xmm8, %xmm0 7771; SSE4-NEXT: pxor %xmm7, %xmm8 7772; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 7773; SSE4-NEXT: movdqa %xmm8, %xmm0 7774; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 7775; SSE4-NEXT: movapd %xmm4, %xmm0 7776; SSE4-NEXT: movapd %xmm5, %xmm1 7777; SSE4-NEXT: movapd %xmm6, %xmm2 7778; SSE4-NEXT: movapd %xmm7, %xmm3 7779; SSE4-NEXT: retq 7780; 7781; AVX1-LABEL: test160: 7782; AVX1: # %bb.0: # %entry 7783; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 7784; AVX1-NEXT: vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 7785; AVX1-NEXT: # xmm5 = mem[0,0] 7786; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7787; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 7788; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7789; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 7790; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6 7791; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7 7792; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 7793; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 7794; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7795; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 7796; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 7797; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7798; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7799; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7800; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4 7801; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5 7802; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7803; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7804; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7805; AVX1-NEXT: retq 7806; 7807; AVX2-LABEL: test160: 7808; AVX2: # %bb.0: # %entry 7809; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 7810; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5 7811; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 7812; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 7813; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 7814; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2 7815; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4 7816; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 7817; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7818; AVX2-NEXT: retq 7819; 7820; AVX512-LABEL: test160: 7821; AVX512: # %bb.0: # %entry 7822; AVX512-NEXT: vpminuq %zmm1, %zmm0, %zmm0 7823; AVX512-NEXT: retq 7824entry: 7825 %cmp = icmp uge <8 x i64> %a, %b 7826 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7827 ret <8 x i64> %sel 7828} 7829 7830define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) { 7831; SSE2-LABEL: test161: 7832; SSE2: # %bb.0: # %entry 7833; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 7834; SSE2-NEXT: movdqa %xmm0, %xmm5 7835; SSE2-NEXT: pxor %xmm4, %xmm5 7836; SSE2-NEXT: movdqa %xmm2, %xmm6 7837; SSE2-NEXT: pxor %xmm4, %xmm6 7838; SSE2-NEXT: movdqa %xmm6, %xmm7 7839; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 7840; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 7841; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 7842; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 7843; SSE2-NEXT: pand %xmm8, %xmm5 7844; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 7845; SSE2-NEXT: por %xmm5, %xmm6 7846; SSE2-NEXT: pand %xmm6, %xmm0 7847; SSE2-NEXT: pandn %xmm2, %xmm6 7848; SSE2-NEXT: por %xmm6, %xmm0 7849; SSE2-NEXT: movdqa %xmm1, %xmm2 7850; SSE2-NEXT: pxor %xmm4, %xmm2 7851; SSE2-NEXT: pxor %xmm3, %xmm4 7852; SSE2-NEXT: movdqa %xmm4, %xmm5 7853; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 7854; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7855; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 7856; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 7857; SSE2-NEXT: pand %xmm6, %xmm2 7858; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7859; SSE2-NEXT: por %xmm2, %xmm4 7860; SSE2-NEXT: pand %xmm4, %xmm1 7861; SSE2-NEXT: pandn %xmm3, %xmm4 7862; SSE2-NEXT: por %xmm4, %xmm1 7863; SSE2-NEXT: retq 7864; 7865; SSE4-LABEL: test161: 7866; SSE4: # %bb.0: # %entry 7867; SSE4-NEXT: movdqa %xmm0, %xmm4 7868; SSE4-NEXT: movdqa %xmm2, %xmm0 7869; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7870; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 7871; SSE4-NEXT: movdqa %xmm3, %xmm0 7872; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7873; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 7874; SSE4-NEXT: movapd %xmm2, %xmm0 7875; SSE4-NEXT: movapd %xmm3, %xmm1 7876; SSE4-NEXT: retq 7877; 7878; AVX1-LABEL: test161: 7879; AVX1: # %bb.0: # %entry 7880; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 7881; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 7882; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 7883; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 7884; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 7885; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7886; AVX1-NEXT: retq 7887; 7888; AVX2-LABEL: test161: 7889; AVX2: # %bb.0: # %entry 7890; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 7891; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7892; AVX2-NEXT: retq 7893; 7894; AVX512F-LABEL: test161: 7895; AVX512F: # %bb.0: # %entry 7896; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 7897; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7898; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 7899; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 7900; AVX512F-NEXT: retq 7901; 7902; AVX512BW-LABEL: test161: 7903; AVX512BW: # %bb.0: # %entry 7904; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 7905; AVX512BW-NEXT: retq 7906entry: 7907 %cmp = icmp slt <4 x i64> %a, %b 7908 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 7909 ret <4 x i64> %sel 7910} 7911 7912define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) { 7913; SSE2-LABEL: test162: 7914; SSE2: # %bb.0: # %entry 7915; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 7916; SSE2-NEXT: movdqa %xmm0, %xmm5 7917; SSE2-NEXT: pxor %xmm4, %xmm5 7918; SSE2-NEXT: movdqa %xmm2, %xmm6 7919; SSE2-NEXT: pxor %xmm4, %xmm6 7920; SSE2-NEXT: movdqa %xmm6, %xmm7 7921; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 7922; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 7923; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 7924; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 7925; SSE2-NEXT: pand %xmm8, %xmm5 7926; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 7927; SSE2-NEXT: por %xmm5, %xmm6 7928; SSE2-NEXT: pand %xmm6, %xmm0 7929; SSE2-NEXT: pandn %xmm2, %xmm6 7930; SSE2-NEXT: por %xmm6, %xmm0 7931; SSE2-NEXT: movdqa %xmm1, %xmm2 7932; SSE2-NEXT: pxor %xmm4, %xmm2 7933; SSE2-NEXT: pxor %xmm3, %xmm4 7934; SSE2-NEXT: movdqa %xmm4, %xmm5 7935; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 7936; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7937; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 7938; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 7939; SSE2-NEXT: pand %xmm6, %xmm2 7940; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7941; SSE2-NEXT: por %xmm2, %xmm4 7942; SSE2-NEXT: pand %xmm4, %xmm1 7943; SSE2-NEXT: pandn %xmm3, %xmm4 7944; SSE2-NEXT: por %xmm4, %xmm1 7945; SSE2-NEXT: retq 7946; 7947; SSE4-LABEL: test162: 7948; SSE4: # %bb.0: # %entry 7949; SSE4-NEXT: movdqa %xmm0, %xmm4 7950; SSE4-NEXT: movdqa %xmm2, %xmm0 7951; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7952; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 7953; SSE4-NEXT: movdqa %xmm3, %xmm0 7954; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7955; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 7956; SSE4-NEXT: movapd %xmm2, %xmm0 7957; SSE4-NEXT: movapd %xmm3, %xmm1 7958; SSE4-NEXT: retq 7959; 7960; AVX1-LABEL: test162: 7961; AVX1: # %bb.0: # %entry 7962; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 7963; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 7964; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 7965; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 7966; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 7967; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7968; AVX1-NEXT: retq 7969; 7970; AVX2-LABEL: test162: 7971; AVX2: # %bb.0: # %entry 7972; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 7973; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7974; AVX2-NEXT: retq 7975; 7976; AVX512F-LABEL: test162: 7977; AVX512F: # %bb.0: # %entry 7978; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 7979; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7980; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 7981; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 7982; AVX512F-NEXT: retq 7983; 7984; AVX512BW-LABEL: test162: 7985; AVX512BW: # %bb.0: # %entry 7986; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 7987; AVX512BW-NEXT: retq 7988entry: 7989 %cmp = icmp sle <4 x i64> %a, %b 7990 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 7991 ret <4 x i64> %sel 7992} 7993 7994define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) { 7995; SSE2-LABEL: test163: 7996; SSE2: # %bb.0: # %entry 7997; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 7998; SSE2-NEXT: movdqa %xmm2, %xmm5 7999; SSE2-NEXT: pxor %xmm4, %xmm5 8000; SSE2-NEXT: movdqa %xmm0, %xmm6 8001; SSE2-NEXT: pxor %xmm4, %xmm6 8002; SSE2-NEXT: movdqa %xmm6, %xmm7 8003; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8004; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8005; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8006; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8007; SSE2-NEXT: pand %xmm8, %xmm5 8008; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8009; SSE2-NEXT: por %xmm5, %xmm6 8010; SSE2-NEXT: pand %xmm6, %xmm0 8011; SSE2-NEXT: pandn %xmm2, %xmm6 8012; SSE2-NEXT: por %xmm6, %xmm0 8013; SSE2-NEXT: movdqa %xmm3, %xmm2 8014; SSE2-NEXT: pxor %xmm4, %xmm2 8015; SSE2-NEXT: pxor %xmm1, %xmm4 8016; SSE2-NEXT: movdqa %xmm4, %xmm5 8017; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8018; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8019; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8020; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8021; SSE2-NEXT: pand %xmm6, %xmm2 8022; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8023; SSE2-NEXT: por %xmm2, %xmm4 8024; SSE2-NEXT: pand %xmm4, %xmm1 8025; SSE2-NEXT: pandn %xmm3, %xmm4 8026; SSE2-NEXT: por %xmm4, %xmm1 8027; SSE2-NEXT: retq 8028; 8029; SSE4-LABEL: test163: 8030; SSE4: # %bb.0: # %entry 8031; SSE4-NEXT: movdqa %xmm0, %xmm4 8032; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8033; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8034; SSE4-NEXT: movdqa %xmm1, %xmm0 8035; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 8036; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8037; SSE4-NEXT: movapd %xmm2, %xmm0 8038; SSE4-NEXT: movapd %xmm3, %xmm1 8039; SSE4-NEXT: retq 8040; 8041; AVX1-LABEL: test163: 8042; AVX1: # %bb.0: # %entry 8043; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8044; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8045; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8046; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 8047; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8048; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8049; AVX1-NEXT: retq 8050; 8051; AVX2-LABEL: test163: 8052; AVX2: # %bb.0: # %entry 8053; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8054; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8055; AVX2-NEXT: retq 8056; 8057; AVX512F-LABEL: test163: 8058; AVX512F: # %bb.0: # %entry 8059; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8060; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8061; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 8062; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8063; AVX512F-NEXT: retq 8064; 8065; AVX512BW-LABEL: test163: 8066; AVX512BW: # %bb.0: # %entry 8067; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 8068; AVX512BW-NEXT: retq 8069entry: 8070 %cmp = icmp sgt <4 x i64> %a, %b 8071 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8072 ret <4 x i64> %sel 8073} 8074 8075define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) { 8076; SSE2-LABEL: test164: 8077; SSE2: # %bb.0: # %entry 8078; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 8079; SSE2-NEXT: movdqa %xmm2, %xmm5 8080; SSE2-NEXT: pxor %xmm4, %xmm5 8081; SSE2-NEXT: movdqa %xmm0, %xmm6 8082; SSE2-NEXT: pxor %xmm4, %xmm6 8083; SSE2-NEXT: movdqa %xmm6, %xmm7 8084; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8085; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8086; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8087; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8088; SSE2-NEXT: pand %xmm8, %xmm5 8089; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8090; SSE2-NEXT: por %xmm5, %xmm6 8091; SSE2-NEXT: pand %xmm6, %xmm0 8092; SSE2-NEXT: pandn %xmm2, %xmm6 8093; SSE2-NEXT: por %xmm6, %xmm0 8094; SSE2-NEXT: movdqa %xmm3, %xmm2 8095; SSE2-NEXT: pxor %xmm4, %xmm2 8096; SSE2-NEXT: pxor %xmm1, %xmm4 8097; SSE2-NEXT: movdqa %xmm4, %xmm5 8098; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8099; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8100; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8101; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8102; SSE2-NEXT: pand %xmm6, %xmm2 8103; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8104; SSE2-NEXT: por %xmm2, %xmm4 8105; SSE2-NEXT: pand %xmm4, %xmm1 8106; SSE2-NEXT: pandn %xmm3, %xmm4 8107; SSE2-NEXT: por %xmm4, %xmm1 8108; SSE2-NEXT: retq 8109; 8110; SSE4-LABEL: test164: 8111; SSE4: # %bb.0: # %entry 8112; SSE4-NEXT: movdqa %xmm0, %xmm4 8113; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8114; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8115; SSE4-NEXT: movdqa %xmm1, %xmm0 8116; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 8117; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8118; SSE4-NEXT: movapd %xmm2, %xmm0 8119; SSE4-NEXT: movapd %xmm3, %xmm1 8120; SSE4-NEXT: retq 8121; 8122; AVX1-LABEL: test164: 8123; AVX1: # %bb.0: # %entry 8124; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8125; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8126; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8127; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 8128; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8129; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8130; AVX1-NEXT: retq 8131; 8132; AVX2-LABEL: test164: 8133; AVX2: # %bb.0: # %entry 8134; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8135; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8136; AVX2-NEXT: retq 8137; 8138; AVX512F-LABEL: test164: 8139; AVX512F: # %bb.0: # %entry 8140; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8141; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8142; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 8143; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8144; AVX512F-NEXT: retq 8145; 8146; AVX512BW-LABEL: test164: 8147; AVX512BW: # %bb.0: # %entry 8148; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 8149; AVX512BW-NEXT: retq 8150entry: 8151 %cmp = icmp sge <4 x i64> %a, %b 8152 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8153 ret <4 x i64> %sel 8154} 8155 8156define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) { 8157; SSE2-LABEL: test165: 8158; SSE2: # %bb.0: # %entry 8159; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 8160; SSE2-NEXT: movdqa %xmm0, %xmm5 8161; SSE2-NEXT: pxor %xmm4, %xmm5 8162; SSE2-NEXT: movdqa %xmm2, %xmm6 8163; SSE2-NEXT: pxor %xmm4, %xmm6 8164; SSE2-NEXT: movdqa %xmm6, %xmm7 8165; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8166; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8167; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8168; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8169; SSE2-NEXT: pand %xmm8, %xmm5 8170; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8171; SSE2-NEXT: por %xmm5, %xmm6 8172; SSE2-NEXT: pand %xmm6, %xmm0 8173; SSE2-NEXT: pandn %xmm2, %xmm6 8174; SSE2-NEXT: por %xmm6, %xmm0 8175; SSE2-NEXT: movdqa %xmm1, %xmm2 8176; SSE2-NEXT: pxor %xmm4, %xmm2 8177; SSE2-NEXT: pxor %xmm3, %xmm4 8178; SSE2-NEXT: movdqa %xmm4, %xmm5 8179; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8180; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8181; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8182; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8183; SSE2-NEXT: pand %xmm6, %xmm2 8184; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8185; SSE2-NEXT: por %xmm2, %xmm4 8186; SSE2-NEXT: pand %xmm4, %xmm1 8187; SSE2-NEXT: pandn %xmm3, %xmm4 8188; SSE2-NEXT: por %xmm4, %xmm1 8189; SSE2-NEXT: retq 8190; 8191; SSE4-LABEL: test165: 8192; SSE4: # %bb.0: # %entry 8193; SSE4-NEXT: movdqa %xmm0, %xmm4 8194; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8195; SSE4-NEXT: movdqa %xmm0, %xmm6 8196; SSE4-NEXT: pxor %xmm5, %xmm6 8197; SSE4-NEXT: movdqa %xmm2, %xmm0 8198; SSE4-NEXT: pxor %xmm5, %xmm0 8199; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8200; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8201; SSE4-NEXT: movdqa %xmm1, %xmm0 8202; SSE4-NEXT: pxor %xmm5, %xmm0 8203; SSE4-NEXT: pxor %xmm3, %xmm5 8204; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8205; SSE4-NEXT: movdqa %xmm5, %xmm0 8206; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8207; SSE4-NEXT: movapd %xmm2, %xmm0 8208; SSE4-NEXT: movapd %xmm3, %xmm1 8209; SSE4-NEXT: retq 8210; 8211; AVX1-LABEL: test165: 8212; AVX1: # %bb.0: # %entry 8213; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8214; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8215; AVX1-NEXT: # xmm3 = mem[0,0] 8216; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8217; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 8218; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8219; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8220; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4 8221; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3 8222; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8223; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8224; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8225; AVX1-NEXT: retq 8226; 8227; AVX2-LABEL: test165: 8228; AVX2: # %bb.0: # %entry 8229; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8230; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 8231; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 8232; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8233; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8234; AVX2-NEXT: retq 8235; 8236; AVX512F-LABEL: test165: 8237; AVX512F: # %bb.0: # %entry 8238; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8239; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8240; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 8241; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8242; AVX512F-NEXT: retq 8243; 8244; AVX512BW-LABEL: test165: 8245; AVX512BW: # %bb.0: # %entry 8246; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 8247; AVX512BW-NEXT: retq 8248entry: 8249 %cmp = icmp ult <4 x i64> %a, %b 8250 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8251 ret <4 x i64> %sel 8252} 8253 8254define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) { 8255; SSE2-LABEL: test166: 8256; SSE2: # %bb.0: # %entry 8257; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 8258; SSE2-NEXT: movdqa %xmm0, %xmm5 8259; SSE2-NEXT: pxor %xmm4, %xmm5 8260; SSE2-NEXT: movdqa %xmm2, %xmm6 8261; SSE2-NEXT: pxor %xmm4, %xmm6 8262; SSE2-NEXT: movdqa %xmm6, %xmm7 8263; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8264; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8265; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8266; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8267; SSE2-NEXT: pand %xmm8, %xmm5 8268; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8269; SSE2-NEXT: por %xmm5, %xmm6 8270; SSE2-NEXT: pand %xmm6, %xmm0 8271; SSE2-NEXT: pandn %xmm2, %xmm6 8272; SSE2-NEXT: por %xmm6, %xmm0 8273; SSE2-NEXT: movdqa %xmm1, %xmm2 8274; SSE2-NEXT: pxor %xmm4, %xmm2 8275; SSE2-NEXT: pxor %xmm3, %xmm4 8276; SSE2-NEXT: movdqa %xmm4, %xmm5 8277; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8278; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8279; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8280; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8281; SSE2-NEXT: pand %xmm6, %xmm2 8282; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8283; SSE2-NEXT: por %xmm2, %xmm4 8284; SSE2-NEXT: pand %xmm4, %xmm1 8285; SSE2-NEXT: pandn %xmm3, %xmm4 8286; SSE2-NEXT: por %xmm4, %xmm1 8287; SSE2-NEXT: retq 8288; 8289; SSE4-LABEL: test166: 8290; SSE4: # %bb.0: # %entry 8291; SSE4-NEXT: movdqa %xmm0, %xmm4 8292; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8293; SSE4-NEXT: movdqa %xmm0, %xmm6 8294; SSE4-NEXT: pxor %xmm5, %xmm6 8295; SSE4-NEXT: movdqa %xmm2, %xmm0 8296; SSE4-NEXT: pxor %xmm5, %xmm0 8297; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8298; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8299; SSE4-NEXT: movdqa %xmm1, %xmm0 8300; SSE4-NEXT: pxor %xmm5, %xmm0 8301; SSE4-NEXT: pxor %xmm3, %xmm5 8302; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8303; SSE4-NEXT: movdqa %xmm5, %xmm0 8304; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8305; SSE4-NEXT: movapd %xmm2, %xmm0 8306; SSE4-NEXT: movapd %xmm3, %xmm1 8307; SSE4-NEXT: retq 8308; 8309; AVX1-LABEL: test166: 8310; AVX1: # %bb.0: # %entry 8311; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8312; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8313; AVX1-NEXT: # xmm3 = mem[0,0] 8314; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8315; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 8316; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8317; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8318; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4 8319; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3 8320; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8321; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8322; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8323; AVX1-NEXT: retq 8324; 8325; AVX2-LABEL: test166: 8326; AVX2: # %bb.0: # %entry 8327; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8328; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 8329; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 8330; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8331; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8332; AVX2-NEXT: retq 8333; 8334; AVX512F-LABEL: test166: 8335; AVX512F: # %bb.0: # %entry 8336; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8337; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8338; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 8339; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8340; AVX512F-NEXT: retq 8341; 8342; AVX512BW-LABEL: test166: 8343; AVX512BW: # %bb.0: # %entry 8344; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 8345; AVX512BW-NEXT: retq 8346entry: 8347 %cmp = icmp ule <4 x i64> %a, %b 8348 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8349 ret <4 x i64> %sel 8350} 8351 8352define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) { 8353; SSE2-LABEL: test167: 8354; SSE2: # %bb.0: # %entry 8355; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 8356; SSE2-NEXT: movdqa %xmm2, %xmm5 8357; SSE2-NEXT: pxor %xmm4, %xmm5 8358; SSE2-NEXT: movdqa %xmm0, %xmm6 8359; SSE2-NEXT: pxor %xmm4, %xmm6 8360; SSE2-NEXT: movdqa %xmm6, %xmm7 8361; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8362; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8363; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8364; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8365; SSE2-NEXT: pand %xmm8, %xmm5 8366; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8367; SSE2-NEXT: por %xmm5, %xmm6 8368; SSE2-NEXT: pand %xmm6, %xmm0 8369; SSE2-NEXT: pandn %xmm2, %xmm6 8370; SSE2-NEXT: por %xmm6, %xmm0 8371; SSE2-NEXT: movdqa %xmm3, %xmm2 8372; SSE2-NEXT: pxor %xmm4, %xmm2 8373; SSE2-NEXT: pxor %xmm1, %xmm4 8374; SSE2-NEXT: movdqa %xmm4, %xmm5 8375; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8376; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8377; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8378; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8379; SSE2-NEXT: pand %xmm6, %xmm2 8380; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8381; SSE2-NEXT: por %xmm2, %xmm4 8382; SSE2-NEXT: pand %xmm4, %xmm1 8383; SSE2-NEXT: pandn %xmm3, %xmm4 8384; SSE2-NEXT: por %xmm4, %xmm1 8385; SSE2-NEXT: retq 8386; 8387; SSE4-LABEL: test167: 8388; SSE4: # %bb.0: # %entry 8389; SSE4-NEXT: movdqa %xmm0, %xmm4 8390; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8391; SSE4-NEXT: movdqa %xmm2, %xmm6 8392; SSE4-NEXT: pxor %xmm5, %xmm6 8393; SSE4-NEXT: pxor %xmm5, %xmm0 8394; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8395; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8396; SSE4-NEXT: movdqa %xmm3, %xmm0 8397; SSE4-NEXT: pxor %xmm5, %xmm0 8398; SSE4-NEXT: pxor %xmm1, %xmm5 8399; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8400; SSE4-NEXT: movdqa %xmm5, %xmm0 8401; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8402; SSE4-NEXT: movapd %xmm2, %xmm0 8403; SSE4-NEXT: movapd %xmm3, %xmm1 8404; SSE4-NEXT: retq 8405; 8406; AVX1-LABEL: test167: 8407; AVX1: # %bb.0: # %entry 8408; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8409; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8410; AVX1-NEXT: # xmm3 = mem[0,0] 8411; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8412; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 8413; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8414; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8415; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4 8416; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3 8417; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8418; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8419; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8420; AVX1-NEXT: retq 8421; 8422; AVX2-LABEL: test167: 8423; AVX2: # %bb.0: # %entry 8424; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8425; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 8426; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 8427; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8428; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8429; AVX2-NEXT: retq 8430; 8431; AVX512F-LABEL: test167: 8432; AVX512F: # %bb.0: # %entry 8433; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8434; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8435; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 8436; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8437; AVX512F-NEXT: retq 8438; 8439; AVX512BW-LABEL: test167: 8440; AVX512BW: # %bb.0: # %entry 8441; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 8442; AVX512BW-NEXT: retq 8443entry: 8444 %cmp = icmp ugt <4 x i64> %a, %b 8445 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8446 ret <4 x i64> %sel 8447} 8448 8449define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) { 8450; SSE2-LABEL: test168: 8451; SSE2: # %bb.0: # %entry 8452; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 8453; SSE2-NEXT: movdqa %xmm2, %xmm5 8454; SSE2-NEXT: pxor %xmm4, %xmm5 8455; SSE2-NEXT: movdqa %xmm0, %xmm6 8456; SSE2-NEXT: pxor %xmm4, %xmm6 8457; SSE2-NEXT: movdqa %xmm6, %xmm7 8458; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8459; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8460; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8461; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8462; SSE2-NEXT: pand %xmm8, %xmm5 8463; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8464; SSE2-NEXT: por %xmm5, %xmm6 8465; SSE2-NEXT: pand %xmm6, %xmm0 8466; SSE2-NEXT: pandn %xmm2, %xmm6 8467; SSE2-NEXT: por %xmm6, %xmm0 8468; SSE2-NEXT: movdqa %xmm3, %xmm2 8469; SSE2-NEXT: pxor %xmm4, %xmm2 8470; SSE2-NEXT: pxor %xmm1, %xmm4 8471; SSE2-NEXT: movdqa %xmm4, %xmm5 8472; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8473; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8474; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8475; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8476; SSE2-NEXT: pand %xmm6, %xmm2 8477; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8478; SSE2-NEXT: por %xmm2, %xmm4 8479; SSE2-NEXT: pand %xmm4, %xmm1 8480; SSE2-NEXT: pandn %xmm3, %xmm4 8481; SSE2-NEXT: por %xmm4, %xmm1 8482; SSE2-NEXT: retq 8483; 8484; SSE4-LABEL: test168: 8485; SSE4: # %bb.0: # %entry 8486; SSE4-NEXT: movdqa %xmm0, %xmm4 8487; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8488; SSE4-NEXT: movdqa %xmm2, %xmm6 8489; SSE4-NEXT: pxor %xmm5, %xmm6 8490; SSE4-NEXT: pxor %xmm5, %xmm0 8491; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8492; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8493; SSE4-NEXT: movdqa %xmm3, %xmm0 8494; SSE4-NEXT: pxor %xmm5, %xmm0 8495; SSE4-NEXT: pxor %xmm1, %xmm5 8496; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8497; SSE4-NEXT: movdqa %xmm5, %xmm0 8498; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8499; SSE4-NEXT: movapd %xmm2, %xmm0 8500; SSE4-NEXT: movapd %xmm3, %xmm1 8501; SSE4-NEXT: retq 8502; 8503; AVX1-LABEL: test168: 8504; AVX1: # %bb.0: # %entry 8505; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8506; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8507; AVX1-NEXT: # xmm3 = mem[0,0] 8508; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8509; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 8510; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8511; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8512; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4 8513; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3 8514; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8515; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8516; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8517; AVX1-NEXT: retq 8518; 8519; AVX2-LABEL: test168: 8520; AVX2: # %bb.0: # %entry 8521; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8522; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 8523; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 8524; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8525; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8526; AVX2-NEXT: retq 8527; 8528; AVX512F-LABEL: test168: 8529; AVX512F: # %bb.0: # %entry 8530; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8531; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8532; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 8533; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8534; AVX512F-NEXT: retq 8535; 8536; AVX512BW-LABEL: test168: 8537; AVX512BW: # %bb.0: # %entry 8538; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 8539; AVX512BW-NEXT: retq 8540entry: 8541 %cmp = icmp uge <4 x i64> %a, %b 8542 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8543 ret <4 x i64> %sel 8544} 8545 8546define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) { 8547; SSE2-LABEL: test169: 8548; SSE2: # %bb.0: # %entry 8549; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 8550; SSE2-NEXT: movdqa %xmm2, %xmm5 8551; SSE2-NEXT: pxor %xmm4, %xmm5 8552; SSE2-NEXT: movdqa %xmm0, %xmm6 8553; SSE2-NEXT: pxor %xmm4, %xmm6 8554; SSE2-NEXT: movdqa %xmm6, %xmm7 8555; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8556; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8557; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8558; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8559; SSE2-NEXT: pand %xmm8, %xmm5 8560; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8561; SSE2-NEXT: por %xmm5, %xmm6 8562; SSE2-NEXT: pand %xmm6, %xmm0 8563; SSE2-NEXT: pandn %xmm2, %xmm6 8564; SSE2-NEXT: por %xmm6, %xmm0 8565; SSE2-NEXT: movdqa %xmm3, %xmm2 8566; SSE2-NEXT: pxor %xmm4, %xmm2 8567; SSE2-NEXT: pxor %xmm1, %xmm4 8568; SSE2-NEXT: movdqa %xmm4, %xmm5 8569; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8570; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8571; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8572; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8573; SSE2-NEXT: pand %xmm6, %xmm2 8574; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8575; SSE2-NEXT: por %xmm2, %xmm4 8576; SSE2-NEXT: pand %xmm4, %xmm1 8577; SSE2-NEXT: pandn %xmm3, %xmm4 8578; SSE2-NEXT: por %xmm4, %xmm1 8579; SSE2-NEXT: retq 8580; 8581; SSE4-LABEL: test169: 8582; SSE4: # %bb.0: # %entry 8583; SSE4-NEXT: movdqa %xmm0, %xmm4 8584; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8585; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8586; SSE4-NEXT: movdqa %xmm1, %xmm0 8587; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 8588; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8589; SSE4-NEXT: movapd %xmm2, %xmm0 8590; SSE4-NEXT: movapd %xmm3, %xmm1 8591; SSE4-NEXT: retq 8592; 8593; AVX1-LABEL: test169: 8594; AVX1: # %bb.0: # %entry 8595; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8596; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8597; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8598; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 8599; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8600; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8601; AVX1-NEXT: retq 8602; 8603; AVX2-LABEL: test169: 8604; AVX2: # %bb.0: # %entry 8605; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8606; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8607; AVX2-NEXT: retq 8608; 8609; AVX512F-LABEL: test169: 8610; AVX512F: # %bb.0: # %entry 8611; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8612; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8613; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 8614; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8615; AVX512F-NEXT: retq 8616; 8617; AVX512BW-LABEL: test169: 8618; AVX512BW: # %bb.0: # %entry 8619; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 8620; AVX512BW-NEXT: retq 8621entry: 8622 %cmp = icmp slt <4 x i64> %a, %b 8623 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8624 ret <4 x i64> %sel 8625} 8626 8627define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) { 8628; SSE2-LABEL: test170: 8629; SSE2: # %bb.0: # %entry 8630; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 8631; SSE2-NEXT: movdqa %xmm2, %xmm5 8632; SSE2-NEXT: pxor %xmm4, %xmm5 8633; SSE2-NEXT: movdqa %xmm0, %xmm6 8634; SSE2-NEXT: pxor %xmm4, %xmm6 8635; SSE2-NEXT: movdqa %xmm6, %xmm7 8636; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8637; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8638; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8639; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8640; SSE2-NEXT: pand %xmm8, %xmm5 8641; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8642; SSE2-NEXT: por %xmm5, %xmm6 8643; SSE2-NEXT: pand %xmm6, %xmm0 8644; SSE2-NEXT: pandn %xmm2, %xmm6 8645; SSE2-NEXT: por %xmm6, %xmm0 8646; SSE2-NEXT: movdqa %xmm3, %xmm2 8647; SSE2-NEXT: pxor %xmm4, %xmm2 8648; SSE2-NEXT: pxor %xmm1, %xmm4 8649; SSE2-NEXT: movdqa %xmm4, %xmm5 8650; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8651; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8652; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8653; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8654; SSE2-NEXT: pand %xmm6, %xmm2 8655; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8656; SSE2-NEXT: por %xmm2, %xmm4 8657; SSE2-NEXT: pand %xmm4, %xmm1 8658; SSE2-NEXT: pandn %xmm3, %xmm4 8659; SSE2-NEXT: por %xmm4, %xmm1 8660; SSE2-NEXT: retq 8661; 8662; SSE4-LABEL: test170: 8663; SSE4: # %bb.0: # %entry 8664; SSE4-NEXT: movdqa %xmm0, %xmm4 8665; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8666; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8667; SSE4-NEXT: movdqa %xmm1, %xmm0 8668; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 8669; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8670; SSE4-NEXT: movapd %xmm2, %xmm0 8671; SSE4-NEXT: movapd %xmm3, %xmm1 8672; SSE4-NEXT: retq 8673; 8674; AVX1-LABEL: test170: 8675; AVX1: # %bb.0: # %entry 8676; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8677; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8678; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8679; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 8680; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8681; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8682; AVX1-NEXT: retq 8683; 8684; AVX2-LABEL: test170: 8685; AVX2: # %bb.0: # %entry 8686; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8687; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8688; AVX2-NEXT: retq 8689; 8690; AVX512F-LABEL: test170: 8691; AVX512F: # %bb.0: # %entry 8692; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8693; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8694; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 8695; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8696; AVX512F-NEXT: retq 8697; 8698; AVX512BW-LABEL: test170: 8699; AVX512BW: # %bb.0: # %entry 8700; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 8701; AVX512BW-NEXT: retq 8702entry: 8703 %cmp = icmp sle <4 x i64> %a, %b 8704 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8705 ret <4 x i64> %sel 8706} 8707 8708define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) { 8709; SSE2-LABEL: test171: 8710; SSE2: # %bb.0: # %entry 8711; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 8712; SSE2-NEXT: movdqa %xmm0, %xmm5 8713; SSE2-NEXT: pxor %xmm4, %xmm5 8714; SSE2-NEXT: movdqa %xmm2, %xmm6 8715; SSE2-NEXT: pxor %xmm4, %xmm6 8716; SSE2-NEXT: movdqa %xmm6, %xmm7 8717; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8718; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8719; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8720; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8721; SSE2-NEXT: pand %xmm8, %xmm5 8722; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8723; SSE2-NEXT: por %xmm5, %xmm6 8724; SSE2-NEXT: pand %xmm6, %xmm0 8725; SSE2-NEXT: pandn %xmm2, %xmm6 8726; SSE2-NEXT: por %xmm6, %xmm0 8727; SSE2-NEXT: movdqa %xmm1, %xmm2 8728; SSE2-NEXT: pxor %xmm4, %xmm2 8729; SSE2-NEXT: pxor %xmm3, %xmm4 8730; SSE2-NEXT: movdqa %xmm4, %xmm5 8731; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8732; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8733; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8734; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8735; SSE2-NEXT: pand %xmm6, %xmm2 8736; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8737; SSE2-NEXT: por %xmm2, %xmm4 8738; SSE2-NEXT: pand %xmm4, %xmm1 8739; SSE2-NEXT: pandn %xmm3, %xmm4 8740; SSE2-NEXT: por %xmm4, %xmm1 8741; SSE2-NEXT: retq 8742; 8743; SSE4-LABEL: test171: 8744; SSE4: # %bb.0: # %entry 8745; SSE4-NEXT: movdqa %xmm0, %xmm4 8746; SSE4-NEXT: movdqa %xmm2, %xmm0 8747; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 8748; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8749; SSE4-NEXT: movdqa %xmm3, %xmm0 8750; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 8751; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8752; SSE4-NEXT: movapd %xmm2, %xmm0 8753; SSE4-NEXT: movapd %xmm3, %xmm1 8754; SSE4-NEXT: retq 8755; 8756; AVX1-LABEL: test171: 8757; AVX1: # %bb.0: # %entry 8758; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8759; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 8760; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8761; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 8762; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8763; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8764; AVX1-NEXT: retq 8765; 8766; AVX2-LABEL: test171: 8767; AVX2: # %bb.0: # %entry 8768; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 8769; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8770; AVX2-NEXT: retq 8771; 8772; AVX512F-LABEL: test171: 8773; AVX512F: # %bb.0: # %entry 8774; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8775; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8776; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 8777; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8778; AVX512F-NEXT: retq 8779; 8780; AVX512BW-LABEL: test171: 8781; AVX512BW: # %bb.0: # %entry 8782; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 8783; AVX512BW-NEXT: retq 8784entry: 8785 %cmp = icmp sgt <4 x i64> %a, %b 8786 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8787 ret <4 x i64> %sel 8788} 8789 8790define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) { 8791; SSE2-LABEL: test172: 8792; SSE2: # %bb.0: # %entry 8793; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 8794; SSE2-NEXT: movdqa %xmm0, %xmm5 8795; SSE2-NEXT: pxor %xmm4, %xmm5 8796; SSE2-NEXT: movdqa %xmm2, %xmm6 8797; SSE2-NEXT: pxor %xmm4, %xmm6 8798; SSE2-NEXT: movdqa %xmm6, %xmm7 8799; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8800; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8801; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8802; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8803; SSE2-NEXT: pand %xmm8, %xmm5 8804; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8805; SSE2-NEXT: por %xmm5, %xmm6 8806; SSE2-NEXT: pand %xmm6, %xmm0 8807; SSE2-NEXT: pandn %xmm2, %xmm6 8808; SSE2-NEXT: por %xmm6, %xmm0 8809; SSE2-NEXT: movdqa %xmm1, %xmm2 8810; SSE2-NEXT: pxor %xmm4, %xmm2 8811; SSE2-NEXT: pxor %xmm3, %xmm4 8812; SSE2-NEXT: movdqa %xmm4, %xmm5 8813; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8814; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8815; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8816; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8817; SSE2-NEXT: pand %xmm6, %xmm2 8818; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8819; SSE2-NEXT: por %xmm2, %xmm4 8820; SSE2-NEXT: pand %xmm4, %xmm1 8821; SSE2-NEXT: pandn %xmm3, %xmm4 8822; SSE2-NEXT: por %xmm4, %xmm1 8823; SSE2-NEXT: retq 8824; 8825; SSE4-LABEL: test172: 8826; SSE4: # %bb.0: # %entry 8827; SSE4-NEXT: movdqa %xmm0, %xmm4 8828; SSE4-NEXT: movdqa %xmm2, %xmm0 8829; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 8830; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8831; SSE4-NEXT: movdqa %xmm3, %xmm0 8832; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 8833; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8834; SSE4-NEXT: movapd %xmm2, %xmm0 8835; SSE4-NEXT: movapd %xmm3, %xmm1 8836; SSE4-NEXT: retq 8837; 8838; AVX1-LABEL: test172: 8839; AVX1: # %bb.0: # %entry 8840; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8841; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 8842; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8843; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 8844; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8845; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8846; AVX1-NEXT: retq 8847; 8848; AVX2-LABEL: test172: 8849; AVX2: # %bb.0: # %entry 8850; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 8851; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8852; AVX2-NEXT: retq 8853; 8854; AVX512F-LABEL: test172: 8855; AVX512F: # %bb.0: # %entry 8856; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8857; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8858; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 8859; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8860; AVX512F-NEXT: retq 8861; 8862; AVX512BW-LABEL: test172: 8863; AVX512BW: # %bb.0: # %entry 8864; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 8865; AVX512BW-NEXT: retq 8866entry: 8867 %cmp = icmp sge <4 x i64> %a, %b 8868 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8869 ret <4 x i64> %sel 8870} 8871 8872define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) { 8873; SSE2-LABEL: test173: 8874; SSE2: # %bb.0: # %entry 8875; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 8876; SSE2-NEXT: movdqa %xmm2, %xmm5 8877; SSE2-NEXT: pxor %xmm4, %xmm5 8878; SSE2-NEXT: movdqa %xmm0, %xmm6 8879; SSE2-NEXT: pxor %xmm4, %xmm6 8880; SSE2-NEXT: movdqa %xmm6, %xmm7 8881; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8882; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8883; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8884; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8885; SSE2-NEXT: pand %xmm8, %xmm5 8886; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8887; SSE2-NEXT: por %xmm5, %xmm6 8888; SSE2-NEXT: pand %xmm6, %xmm0 8889; SSE2-NEXT: pandn %xmm2, %xmm6 8890; SSE2-NEXT: por %xmm6, %xmm0 8891; SSE2-NEXT: movdqa %xmm3, %xmm2 8892; SSE2-NEXT: pxor %xmm4, %xmm2 8893; SSE2-NEXT: pxor %xmm1, %xmm4 8894; SSE2-NEXT: movdqa %xmm4, %xmm5 8895; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8896; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8897; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8898; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8899; SSE2-NEXT: pand %xmm6, %xmm2 8900; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8901; SSE2-NEXT: por %xmm2, %xmm4 8902; SSE2-NEXT: pand %xmm4, %xmm1 8903; SSE2-NEXT: pandn %xmm3, %xmm4 8904; SSE2-NEXT: por %xmm4, %xmm1 8905; SSE2-NEXT: retq 8906; 8907; SSE4-LABEL: test173: 8908; SSE4: # %bb.0: # %entry 8909; SSE4-NEXT: movdqa %xmm0, %xmm4 8910; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8911; SSE4-NEXT: movdqa %xmm2, %xmm6 8912; SSE4-NEXT: pxor %xmm5, %xmm6 8913; SSE4-NEXT: pxor %xmm5, %xmm0 8914; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8915; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8916; SSE4-NEXT: movdqa %xmm3, %xmm0 8917; SSE4-NEXT: pxor %xmm5, %xmm0 8918; SSE4-NEXT: pxor %xmm1, %xmm5 8919; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8920; SSE4-NEXT: movdqa %xmm5, %xmm0 8921; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8922; SSE4-NEXT: movapd %xmm2, %xmm0 8923; SSE4-NEXT: movapd %xmm3, %xmm1 8924; SSE4-NEXT: retq 8925; 8926; AVX1-LABEL: test173: 8927; AVX1: # %bb.0: # %entry 8928; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8929; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8930; AVX1-NEXT: # xmm3 = mem[0,0] 8931; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8932; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 8933; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8934; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8935; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4 8936; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3 8937; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8938; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8939; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8940; AVX1-NEXT: retq 8941; 8942; AVX2-LABEL: test173: 8943; AVX2: # %bb.0: # %entry 8944; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8945; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 8946; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 8947; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8948; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8949; AVX2-NEXT: retq 8950; 8951; AVX512F-LABEL: test173: 8952; AVX512F: # %bb.0: # %entry 8953; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8954; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8955; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 8956; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8957; AVX512F-NEXT: retq 8958; 8959; AVX512BW-LABEL: test173: 8960; AVX512BW: # %bb.0: # %entry 8961; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 8962; AVX512BW-NEXT: retq 8963entry: 8964 %cmp = icmp ult <4 x i64> %a, %b 8965 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8966 ret <4 x i64> %sel 8967} 8968 8969define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) { 8970; SSE2-LABEL: test174: 8971; SSE2: # %bb.0: # %entry 8972; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 8973; SSE2-NEXT: movdqa %xmm2, %xmm5 8974; SSE2-NEXT: pxor %xmm4, %xmm5 8975; SSE2-NEXT: movdqa %xmm0, %xmm6 8976; SSE2-NEXT: pxor %xmm4, %xmm6 8977; SSE2-NEXT: movdqa %xmm6, %xmm7 8978; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8979; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8980; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8981; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8982; SSE2-NEXT: pand %xmm8, %xmm5 8983; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8984; SSE2-NEXT: por %xmm5, %xmm6 8985; SSE2-NEXT: pand %xmm6, %xmm0 8986; SSE2-NEXT: pandn %xmm2, %xmm6 8987; SSE2-NEXT: por %xmm6, %xmm0 8988; SSE2-NEXT: movdqa %xmm3, %xmm2 8989; SSE2-NEXT: pxor %xmm4, %xmm2 8990; SSE2-NEXT: pxor %xmm1, %xmm4 8991; SSE2-NEXT: movdqa %xmm4, %xmm5 8992; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8993; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8994; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8995; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8996; SSE2-NEXT: pand %xmm6, %xmm2 8997; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8998; SSE2-NEXT: por %xmm2, %xmm4 8999; SSE2-NEXT: pand %xmm4, %xmm1 9000; SSE2-NEXT: pandn %xmm3, %xmm4 9001; SSE2-NEXT: por %xmm4, %xmm1 9002; SSE2-NEXT: retq 9003; 9004; SSE4-LABEL: test174: 9005; SSE4: # %bb.0: # %entry 9006; SSE4-NEXT: movdqa %xmm0, %xmm4 9007; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 9008; SSE4-NEXT: movdqa %xmm2, %xmm6 9009; SSE4-NEXT: pxor %xmm5, %xmm6 9010; SSE4-NEXT: pxor %xmm5, %xmm0 9011; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9012; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 9013; SSE4-NEXT: movdqa %xmm3, %xmm0 9014; SSE4-NEXT: pxor %xmm5, %xmm0 9015; SSE4-NEXT: pxor %xmm1, %xmm5 9016; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 9017; SSE4-NEXT: movdqa %xmm5, %xmm0 9018; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 9019; SSE4-NEXT: movapd %xmm2, %xmm0 9020; SSE4-NEXT: movapd %xmm3, %xmm1 9021; SSE4-NEXT: retq 9022; 9023; AVX1-LABEL: test174: 9024; AVX1: # %bb.0: # %entry 9025; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9026; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9027; AVX1-NEXT: # xmm3 = mem[0,0] 9028; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 9029; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 9030; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 9031; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9032; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4 9033; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3 9034; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9035; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9036; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9037; AVX1-NEXT: retq 9038; 9039; AVX2-LABEL: test174: 9040; AVX2: # %bb.0: # %entry 9041; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 9042; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 9043; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 9044; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9045; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9046; AVX2-NEXT: retq 9047; 9048; AVX512F-LABEL: test174: 9049; AVX512F: # %bb.0: # %entry 9050; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 9051; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9052; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 9053; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 9054; AVX512F-NEXT: retq 9055; 9056; AVX512BW-LABEL: test174: 9057; AVX512BW: # %bb.0: # %entry 9058; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 9059; AVX512BW-NEXT: retq 9060entry: 9061 %cmp = icmp ule <4 x i64> %a, %b 9062 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9063 ret <4 x i64> %sel 9064} 9065 9066define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) { 9067; SSE2-LABEL: test175: 9068; SSE2: # %bb.0: # %entry 9069; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 9070; SSE2-NEXT: movdqa %xmm0, %xmm5 9071; SSE2-NEXT: pxor %xmm4, %xmm5 9072; SSE2-NEXT: movdqa %xmm2, %xmm6 9073; SSE2-NEXT: pxor %xmm4, %xmm6 9074; SSE2-NEXT: movdqa %xmm6, %xmm7 9075; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 9076; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9077; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 9078; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 9079; SSE2-NEXT: pand %xmm8, %xmm5 9080; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9081; SSE2-NEXT: por %xmm5, %xmm6 9082; SSE2-NEXT: pand %xmm6, %xmm0 9083; SSE2-NEXT: pandn %xmm2, %xmm6 9084; SSE2-NEXT: por %xmm6, %xmm0 9085; SSE2-NEXT: movdqa %xmm1, %xmm2 9086; SSE2-NEXT: pxor %xmm4, %xmm2 9087; SSE2-NEXT: pxor %xmm3, %xmm4 9088; SSE2-NEXT: movdqa %xmm4, %xmm5 9089; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 9090; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 9091; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 9092; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 9093; SSE2-NEXT: pand %xmm6, %xmm2 9094; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9095; SSE2-NEXT: por %xmm2, %xmm4 9096; SSE2-NEXT: pand %xmm4, %xmm1 9097; SSE2-NEXT: pandn %xmm3, %xmm4 9098; SSE2-NEXT: por %xmm4, %xmm1 9099; SSE2-NEXT: retq 9100; 9101; SSE4-LABEL: test175: 9102; SSE4: # %bb.0: # %entry 9103; SSE4-NEXT: movdqa %xmm0, %xmm4 9104; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 9105; SSE4-NEXT: movdqa %xmm0, %xmm6 9106; SSE4-NEXT: pxor %xmm5, %xmm6 9107; SSE4-NEXT: movdqa %xmm2, %xmm0 9108; SSE4-NEXT: pxor %xmm5, %xmm0 9109; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9110; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 9111; SSE4-NEXT: movdqa %xmm1, %xmm0 9112; SSE4-NEXT: pxor %xmm5, %xmm0 9113; SSE4-NEXT: pxor %xmm3, %xmm5 9114; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 9115; SSE4-NEXT: movdqa %xmm5, %xmm0 9116; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 9117; SSE4-NEXT: movapd %xmm2, %xmm0 9118; SSE4-NEXT: movapd %xmm3, %xmm1 9119; SSE4-NEXT: retq 9120; 9121; AVX1-LABEL: test175: 9122; AVX1: # %bb.0: # %entry 9123; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9124; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9125; AVX1-NEXT: # xmm3 = mem[0,0] 9126; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 9127; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 9128; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 9129; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9130; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4 9131; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3 9132; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9133; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9134; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9135; AVX1-NEXT: retq 9136; 9137; AVX2-LABEL: test175: 9138; AVX2: # %bb.0: # %entry 9139; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 9140; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 9141; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 9142; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9143; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9144; AVX2-NEXT: retq 9145; 9146; AVX512F-LABEL: test175: 9147; AVX512F: # %bb.0: # %entry 9148; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 9149; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9150; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 9151; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 9152; AVX512F-NEXT: retq 9153; 9154; AVX512BW-LABEL: test175: 9155; AVX512BW: # %bb.0: # %entry 9156; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 9157; AVX512BW-NEXT: retq 9158entry: 9159 %cmp = icmp ugt <4 x i64> %a, %b 9160 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9161 ret <4 x i64> %sel 9162} 9163 9164define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) { 9165; SSE2-LABEL: test176: 9166; SSE2: # %bb.0: # %entry 9167; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 9168; SSE2-NEXT: movdqa %xmm0, %xmm5 9169; SSE2-NEXT: pxor %xmm4, %xmm5 9170; SSE2-NEXT: movdqa %xmm2, %xmm6 9171; SSE2-NEXT: pxor %xmm4, %xmm6 9172; SSE2-NEXT: movdqa %xmm6, %xmm7 9173; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 9174; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9175; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 9176; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 9177; SSE2-NEXT: pand %xmm8, %xmm5 9178; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9179; SSE2-NEXT: por %xmm5, %xmm6 9180; SSE2-NEXT: pand %xmm6, %xmm0 9181; SSE2-NEXT: pandn %xmm2, %xmm6 9182; SSE2-NEXT: por %xmm6, %xmm0 9183; SSE2-NEXT: movdqa %xmm1, %xmm2 9184; SSE2-NEXT: pxor %xmm4, %xmm2 9185; SSE2-NEXT: pxor %xmm3, %xmm4 9186; SSE2-NEXT: movdqa %xmm4, %xmm5 9187; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 9188; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 9189; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 9190; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 9191; SSE2-NEXT: pand %xmm6, %xmm2 9192; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9193; SSE2-NEXT: por %xmm2, %xmm4 9194; SSE2-NEXT: pand %xmm4, %xmm1 9195; SSE2-NEXT: pandn %xmm3, %xmm4 9196; SSE2-NEXT: por %xmm4, %xmm1 9197; SSE2-NEXT: retq 9198; 9199; SSE4-LABEL: test176: 9200; SSE4: # %bb.0: # %entry 9201; SSE4-NEXT: movdqa %xmm0, %xmm4 9202; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 9203; SSE4-NEXT: movdqa %xmm0, %xmm6 9204; SSE4-NEXT: pxor %xmm5, %xmm6 9205; SSE4-NEXT: movdqa %xmm2, %xmm0 9206; SSE4-NEXT: pxor %xmm5, %xmm0 9207; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9208; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 9209; SSE4-NEXT: movdqa %xmm1, %xmm0 9210; SSE4-NEXT: pxor %xmm5, %xmm0 9211; SSE4-NEXT: pxor %xmm3, %xmm5 9212; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 9213; SSE4-NEXT: movdqa %xmm5, %xmm0 9214; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 9215; SSE4-NEXT: movapd %xmm2, %xmm0 9216; SSE4-NEXT: movapd %xmm3, %xmm1 9217; SSE4-NEXT: retq 9218; 9219; AVX1-LABEL: test176: 9220; AVX1: # %bb.0: # %entry 9221; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9222; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9223; AVX1-NEXT: # xmm3 = mem[0,0] 9224; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 9225; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 9226; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 9227; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9228; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4 9229; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3 9230; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9231; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9232; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9233; AVX1-NEXT: retq 9234; 9235; AVX2-LABEL: test176: 9236; AVX2: # %bb.0: # %entry 9237; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 9238; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 9239; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 9240; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9241; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9242; AVX2-NEXT: retq 9243; 9244; AVX512F-LABEL: test176: 9245; AVX512F: # %bb.0: # %entry 9246; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 9247; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9248; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 9249; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 9250; AVX512F-NEXT: retq 9251; 9252; AVX512BW-LABEL: test176: 9253; AVX512BW: # %bb.0: # %entry 9254; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 9255; AVX512BW-NEXT: retq 9256entry: 9257 %cmp = icmp uge <4 x i64> %a, %b 9258 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9259 ret <4 x i64> %sel 9260} 9261 9262define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) { 9263; SSE2-LABEL: test177: 9264; SSE2: # %bb.0: # %entry 9265; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9266; SSE2-NEXT: movdqa %xmm0, %xmm3 9267; SSE2-NEXT: pxor %xmm2, %xmm3 9268; SSE2-NEXT: pxor %xmm1, %xmm2 9269; SSE2-NEXT: movdqa %xmm2, %xmm4 9270; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9271; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9272; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9273; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9274; SSE2-NEXT: pand %xmm5, %xmm2 9275; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9276; SSE2-NEXT: por %xmm2, %xmm3 9277; SSE2-NEXT: pand %xmm3, %xmm0 9278; SSE2-NEXT: pandn %xmm1, %xmm3 9279; SSE2-NEXT: por %xmm3, %xmm0 9280; SSE2-NEXT: retq 9281; 9282; SSE4-LABEL: test177: 9283; SSE4: # %bb.0: # %entry 9284; SSE4-NEXT: movdqa %xmm0, %xmm2 9285; SSE4-NEXT: movdqa %xmm1, %xmm0 9286; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9287; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9288; SSE4-NEXT: movapd %xmm1, %xmm0 9289; SSE4-NEXT: retq 9290; 9291; AVX1-LABEL: test177: 9292; AVX1: # %bb.0: # %entry 9293; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9294; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9295; AVX1-NEXT: retq 9296; 9297; AVX2-LABEL: test177: 9298; AVX2: # %bb.0: # %entry 9299; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9300; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9301; AVX2-NEXT: retq 9302; 9303; AVX512F-LABEL: test177: 9304; AVX512F: # %bb.0: # %entry 9305; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9306; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9307; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 9308; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9309; AVX512F-NEXT: retq 9310; 9311; AVX512BW-LABEL: test177: 9312; AVX512BW: # %bb.0: # %entry 9313; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 9314; AVX512BW-NEXT: retq 9315entry: 9316 %cmp = icmp slt <2 x i64> %a, %b 9317 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9318 ret <2 x i64> %sel 9319} 9320 9321define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) { 9322; SSE2-LABEL: test178: 9323; SSE2: # %bb.0: # %entry 9324; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9325; SSE2-NEXT: movdqa %xmm0, %xmm3 9326; SSE2-NEXT: pxor %xmm2, %xmm3 9327; SSE2-NEXT: pxor %xmm1, %xmm2 9328; SSE2-NEXT: movdqa %xmm2, %xmm4 9329; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9330; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9331; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9332; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9333; SSE2-NEXT: pand %xmm5, %xmm2 9334; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9335; SSE2-NEXT: por %xmm2, %xmm3 9336; SSE2-NEXT: pand %xmm3, %xmm0 9337; SSE2-NEXT: pandn %xmm1, %xmm3 9338; SSE2-NEXT: por %xmm3, %xmm0 9339; SSE2-NEXT: retq 9340; 9341; SSE4-LABEL: test178: 9342; SSE4: # %bb.0: # %entry 9343; SSE4-NEXT: movdqa %xmm0, %xmm2 9344; SSE4-NEXT: movdqa %xmm1, %xmm0 9345; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9346; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9347; SSE4-NEXT: movapd %xmm1, %xmm0 9348; SSE4-NEXT: retq 9349; 9350; AVX1-LABEL: test178: 9351; AVX1: # %bb.0: # %entry 9352; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9353; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9354; AVX1-NEXT: retq 9355; 9356; AVX2-LABEL: test178: 9357; AVX2: # %bb.0: # %entry 9358; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9359; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9360; AVX2-NEXT: retq 9361; 9362; AVX512F-LABEL: test178: 9363; AVX512F: # %bb.0: # %entry 9364; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9365; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9366; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 9367; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9368; AVX512F-NEXT: retq 9369; 9370; AVX512BW-LABEL: test178: 9371; AVX512BW: # %bb.0: # %entry 9372; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 9373; AVX512BW-NEXT: retq 9374entry: 9375 %cmp = icmp sle <2 x i64> %a, %b 9376 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9377 ret <2 x i64> %sel 9378} 9379 9380define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) { 9381; SSE2-LABEL: test179: 9382; SSE2: # %bb.0: # %entry 9383; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9384; SSE2-NEXT: movdqa %xmm1, %xmm3 9385; SSE2-NEXT: pxor %xmm2, %xmm3 9386; SSE2-NEXT: pxor %xmm0, %xmm2 9387; SSE2-NEXT: movdqa %xmm2, %xmm4 9388; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9389; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9390; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9391; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9392; SSE2-NEXT: pand %xmm5, %xmm2 9393; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9394; SSE2-NEXT: por %xmm2, %xmm3 9395; SSE2-NEXT: pand %xmm3, %xmm0 9396; SSE2-NEXT: pandn %xmm1, %xmm3 9397; SSE2-NEXT: por %xmm3, %xmm0 9398; SSE2-NEXT: retq 9399; 9400; SSE4-LABEL: test179: 9401; SSE4: # %bb.0: # %entry 9402; SSE4-NEXT: movdqa %xmm0, %xmm2 9403; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 9404; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9405; SSE4-NEXT: movapd %xmm1, %xmm0 9406; SSE4-NEXT: retq 9407; 9408; AVX1-LABEL: test179: 9409; AVX1: # %bb.0: # %entry 9410; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9411; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9412; AVX1-NEXT: retq 9413; 9414; AVX2-LABEL: test179: 9415; AVX2: # %bb.0: # %entry 9416; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9417; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9418; AVX2-NEXT: retq 9419; 9420; AVX512F-LABEL: test179: 9421; AVX512F: # %bb.0: # %entry 9422; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9423; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9424; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 9425; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9426; AVX512F-NEXT: retq 9427; 9428; AVX512BW-LABEL: test179: 9429; AVX512BW: # %bb.0: # %entry 9430; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 9431; AVX512BW-NEXT: retq 9432entry: 9433 %cmp = icmp sgt <2 x i64> %a, %b 9434 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9435 ret <2 x i64> %sel 9436} 9437 9438define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) { 9439; SSE2-LABEL: test180: 9440; SSE2: # %bb.0: # %entry 9441; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9442; SSE2-NEXT: movdqa %xmm1, %xmm3 9443; SSE2-NEXT: pxor %xmm2, %xmm3 9444; SSE2-NEXT: pxor %xmm0, %xmm2 9445; SSE2-NEXT: movdqa %xmm2, %xmm4 9446; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9447; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9448; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9449; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9450; SSE2-NEXT: pand %xmm5, %xmm2 9451; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9452; SSE2-NEXT: por %xmm2, %xmm3 9453; SSE2-NEXT: pand %xmm3, %xmm0 9454; SSE2-NEXT: pandn %xmm1, %xmm3 9455; SSE2-NEXT: por %xmm3, %xmm0 9456; SSE2-NEXT: retq 9457; 9458; SSE4-LABEL: test180: 9459; SSE4: # %bb.0: # %entry 9460; SSE4-NEXT: movdqa %xmm0, %xmm2 9461; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 9462; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9463; SSE4-NEXT: movapd %xmm1, %xmm0 9464; SSE4-NEXT: retq 9465; 9466; AVX1-LABEL: test180: 9467; AVX1: # %bb.0: # %entry 9468; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9469; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9470; AVX1-NEXT: retq 9471; 9472; AVX2-LABEL: test180: 9473; AVX2: # %bb.0: # %entry 9474; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9475; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9476; AVX2-NEXT: retq 9477; 9478; AVX512F-LABEL: test180: 9479; AVX512F: # %bb.0: # %entry 9480; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9481; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9482; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 9483; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9484; AVX512F-NEXT: retq 9485; 9486; AVX512BW-LABEL: test180: 9487; AVX512BW: # %bb.0: # %entry 9488; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 9489; AVX512BW-NEXT: retq 9490entry: 9491 %cmp = icmp sge <2 x i64> %a, %b 9492 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9493 ret <2 x i64> %sel 9494} 9495 9496define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) { 9497; SSE2-LABEL: test181: 9498; SSE2: # %bb.0: # %entry 9499; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 9500; SSE2-NEXT: movdqa %xmm0, %xmm3 9501; SSE2-NEXT: pxor %xmm2, %xmm3 9502; SSE2-NEXT: pxor %xmm1, %xmm2 9503; SSE2-NEXT: movdqa %xmm2, %xmm4 9504; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9505; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9506; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9507; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9508; SSE2-NEXT: pand %xmm5, %xmm2 9509; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9510; SSE2-NEXT: por %xmm2, %xmm3 9511; SSE2-NEXT: pand %xmm3, %xmm0 9512; SSE2-NEXT: pandn %xmm1, %xmm3 9513; SSE2-NEXT: por %xmm3, %xmm0 9514; SSE2-NEXT: retq 9515; 9516; SSE4-LABEL: test181: 9517; SSE4: # %bb.0: # %entry 9518; SSE4-NEXT: movdqa %xmm0, %xmm2 9519; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9520; SSE4-NEXT: movdqa %xmm2, %xmm3 9521; SSE4-NEXT: pxor %xmm0, %xmm3 9522; SSE4-NEXT: pxor %xmm1, %xmm0 9523; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9524; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9525; SSE4-NEXT: movapd %xmm1, %xmm0 9526; SSE4-NEXT: retq 9527; 9528; AVX1-LABEL: test181: 9529; AVX1: # %bb.0: # %entry 9530; AVX1-NEXT: vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9531; AVX1-NEXT: # xmm2 = mem[0,0] 9532; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 9533; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 9534; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9535; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9536; AVX1-NEXT: retq 9537; 9538; AVX2-LABEL: test181: 9539; AVX2: # %bb.0: # %entry 9540; AVX2-NEXT: vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9541; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 9542; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 9543; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9544; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9545; AVX2-NEXT: retq 9546; 9547; AVX512F-LABEL: test181: 9548; AVX512F: # %bb.0: # %entry 9549; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9550; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9551; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 9552; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9553; AVX512F-NEXT: retq 9554; 9555; AVX512BW-LABEL: test181: 9556; AVX512BW: # %bb.0: # %entry 9557; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 9558; AVX512BW-NEXT: retq 9559entry: 9560 %cmp = icmp ult <2 x i64> %a, %b 9561 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9562 ret <2 x i64> %sel 9563} 9564 9565define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) { 9566; SSE2-LABEL: test182: 9567; SSE2: # %bb.0: # %entry 9568; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 9569; SSE2-NEXT: movdqa %xmm0, %xmm3 9570; SSE2-NEXT: pxor %xmm2, %xmm3 9571; SSE2-NEXT: pxor %xmm1, %xmm2 9572; SSE2-NEXT: movdqa %xmm2, %xmm4 9573; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9574; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9575; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9576; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9577; SSE2-NEXT: pand %xmm5, %xmm2 9578; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9579; SSE2-NEXT: por %xmm2, %xmm3 9580; SSE2-NEXT: pand %xmm3, %xmm0 9581; SSE2-NEXT: pandn %xmm1, %xmm3 9582; SSE2-NEXT: por %xmm3, %xmm0 9583; SSE2-NEXT: retq 9584; 9585; SSE4-LABEL: test182: 9586; SSE4: # %bb.0: # %entry 9587; SSE4-NEXT: movdqa %xmm0, %xmm2 9588; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9589; SSE4-NEXT: movdqa %xmm2, %xmm3 9590; SSE4-NEXT: pxor %xmm0, %xmm3 9591; SSE4-NEXT: pxor %xmm1, %xmm0 9592; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9593; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9594; SSE4-NEXT: movapd %xmm1, %xmm0 9595; SSE4-NEXT: retq 9596; 9597; AVX1-LABEL: test182: 9598; AVX1: # %bb.0: # %entry 9599; AVX1-NEXT: vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9600; AVX1-NEXT: # xmm2 = mem[0,0] 9601; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 9602; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 9603; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9604; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9605; AVX1-NEXT: retq 9606; 9607; AVX2-LABEL: test182: 9608; AVX2: # %bb.0: # %entry 9609; AVX2-NEXT: vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9610; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 9611; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 9612; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9613; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9614; AVX2-NEXT: retq 9615; 9616; AVX512F-LABEL: test182: 9617; AVX512F: # %bb.0: # %entry 9618; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9619; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9620; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 9621; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9622; AVX512F-NEXT: retq 9623; 9624; AVX512BW-LABEL: test182: 9625; AVX512BW: # %bb.0: # %entry 9626; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 9627; AVX512BW-NEXT: retq 9628entry: 9629 %cmp = icmp ule <2 x i64> %a, %b 9630 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9631 ret <2 x i64> %sel 9632} 9633 9634define <2 x i64> @test183(<2 x i64> %a, <2 x i64> %b) { 9635; SSE2-LABEL: test183: 9636; SSE2: # %bb.0: # %entry 9637; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 9638; SSE2-NEXT: movdqa %xmm1, %xmm3 9639; SSE2-NEXT: pxor %xmm2, %xmm3 9640; SSE2-NEXT: pxor %xmm0, %xmm2 9641; SSE2-NEXT: movdqa %xmm2, %xmm4 9642; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9643; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9644; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9645; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9646; SSE2-NEXT: pand %xmm5, %xmm2 9647; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9648; SSE2-NEXT: por %xmm2, %xmm3 9649; SSE2-NEXT: pand %xmm3, %xmm0 9650; SSE2-NEXT: pandn %xmm1, %xmm3 9651; SSE2-NEXT: por %xmm3, %xmm0 9652; SSE2-NEXT: retq 9653; 9654; SSE4-LABEL: test183: 9655; SSE4: # %bb.0: # %entry 9656; SSE4-NEXT: movdqa %xmm0, %xmm2 9657; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9658; SSE4-NEXT: movdqa %xmm1, %xmm3 9659; SSE4-NEXT: pxor %xmm0, %xmm3 9660; SSE4-NEXT: pxor %xmm2, %xmm0 9661; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9662; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9663; SSE4-NEXT: movapd %xmm1, %xmm0 9664; SSE4-NEXT: retq 9665; 9666; AVX1-LABEL: test183: 9667; AVX1: # %bb.0: # %entry 9668; AVX1-NEXT: vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9669; AVX1-NEXT: # xmm2 = mem[0,0] 9670; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 9671; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 9672; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9673; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9674; AVX1-NEXT: retq 9675; 9676; AVX2-LABEL: test183: 9677; AVX2: # %bb.0: # %entry 9678; AVX2-NEXT: vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9679; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 9680; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 9681; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9682; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9683; AVX2-NEXT: retq 9684; 9685; AVX512F-LABEL: test183: 9686; AVX512F: # %bb.0: # %entry 9687; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9688; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9689; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 9690; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9691; AVX512F-NEXT: retq 9692; 9693; AVX512BW-LABEL: test183: 9694; AVX512BW: # %bb.0: # %entry 9695; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 9696; AVX512BW-NEXT: retq 9697entry: 9698 %cmp = icmp ugt <2 x i64> %a, %b 9699 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9700 ret <2 x i64> %sel 9701} 9702 9703define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) { 9704; SSE2-LABEL: test184: 9705; SSE2: # %bb.0: # %entry 9706; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 9707; SSE2-NEXT: movdqa %xmm1, %xmm3 9708; SSE2-NEXT: pxor %xmm2, %xmm3 9709; SSE2-NEXT: pxor %xmm0, %xmm2 9710; SSE2-NEXT: movdqa %xmm2, %xmm4 9711; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9712; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9713; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9714; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9715; SSE2-NEXT: pand %xmm5, %xmm2 9716; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9717; SSE2-NEXT: por %xmm2, %xmm3 9718; SSE2-NEXT: pand %xmm3, %xmm0 9719; SSE2-NEXT: pandn %xmm1, %xmm3 9720; SSE2-NEXT: por %xmm3, %xmm0 9721; SSE2-NEXT: retq 9722; 9723; SSE4-LABEL: test184: 9724; SSE4: # %bb.0: # %entry 9725; SSE4-NEXT: movdqa %xmm0, %xmm2 9726; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9727; SSE4-NEXT: movdqa %xmm1, %xmm3 9728; SSE4-NEXT: pxor %xmm0, %xmm3 9729; SSE4-NEXT: pxor %xmm2, %xmm0 9730; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9731; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9732; SSE4-NEXT: movapd %xmm1, %xmm0 9733; SSE4-NEXT: retq 9734; 9735; AVX1-LABEL: test184: 9736; AVX1: # %bb.0: # %entry 9737; AVX1-NEXT: vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9738; AVX1-NEXT: # xmm2 = mem[0,0] 9739; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 9740; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 9741; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9742; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9743; AVX1-NEXT: retq 9744; 9745; AVX2-LABEL: test184: 9746; AVX2: # %bb.0: # %entry 9747; AVX2-NEXT: vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9748; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 9749; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 9750; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9751; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9752; AVX2-NEXT: retq 9753; 9754; AVX512F-LABEL: test184: 9755; AVX512F: # %bb.0: # %entry 9756; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9757; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9758; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 9759; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9760; AVX512F-NEXT: retq 9761; 9762; AVX512BW-LABEL: test184: 9763; AVX512BW: # %bb.0: # %entry 9764; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 9765; AVX512BW-NEXT: retq 9766entry: 9767 %cmp = icmp uge <2 x i64> %a, %b 9768 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9769 ret <2 x i64> %sel 9770} 9771 9772define <2 x i64> @test185(<2 x i64> %a, <2 x i64> %b) { 9773; SSE2-LABEL: test185: 9774; SSE2: # %bb.0: # %entry 9775; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9776; SSE2-NEXT: movdqa %xmm1, %xmm3 9777; SSE2-NEXT: pxor %xmm2, %xmm3 9778; SSE2-NEXT: pxor %xmm0, %xmm2 9779; SSE2-NEXT: movdqa %xmm2, %xmm4 9780; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9781; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9782; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9783; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9784; SSE2-NEXT: pand %xmm5, %xmm2 9785; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9786; SSE2-NEXT: por %xmm2, %xmm3 9787; SSE2-NEXT: pand %xmm3, %xmm0 9788; SSE2-NEXT: pandn %xmm1, %xmm3 9789; SSE2-NEXT: por %xmm3, %xmm0 9790; SSE2-NEXT: retq 9791; 9792; SSE4-LABEL: test185: 9793; SSE4: # %bb.0: # %entry 9794; SSE4-NEXT: movdqa %xmm0, %xmm2 9795; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 9796; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9797; SSE4-NEXT: movapd %xmm1, %xmm0 9798; SSE4-NEXT: retq 9799; 9800; AVX1-LABEL: test185: 9801; AVX1: # %bb.0: # %entry 9802; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9803; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9804; AVX1-NEXT: retq 9805; 9806; AVX2-LABEL: test185: 9807; AVX2: # %bb.0: # %entry 9808; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9809; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9810; AVX2-NEXT: retq 9811; 9812; AVX512F-LABEL: test185: 9813; AVX512F: # %bb.0: # %entry 9814; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9815; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9816; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 9817; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9818; AVX512F-NEXT: retq 9819; 9820; AVX512BW-LABEL: test185: 9821; AVX512BW: # %bb.0: # %entry 9822; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 9823; AVX512BW-NEXT: retq 9824entry: 9825 %cmp = icmp slt <2 x i64> %a, %b 9826 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9827 ret <2 x i64> %sel 9828} 9829 9830define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) { 9831; SSE2-LABEL: test186: 9832; SSE2: # %bb.0: # %entry 9833; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9834; SSE2-NEXT: movdqa %xmm1, %xmm3 9835; SSE2-NEXT: pxor %xmm2, %xmm3 9836; SSE2-NEXT: pxor %xmm0, %xmm2 9837; SSE2-NEXT: movdqa %xmm2, %xmm4 9838; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9839; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9840; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9841; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9842; SSE2-NEXT: pand %xmm5, %xmm2 9843; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9844; SSE2-NEXT: por %xmm2, %xmm3 9845; SSE2-NEXT: pand %xmm3, %xmm0 9846; SSE2-NEXT: pandn %xmm1, %xmm3 9847; SSE2-NEXT: por %xmm3, %xmm0 9848; SSE2-NEXT: retq 9849; 9850; SSE4-LABEL: test186: 9851; SSE4: # %bb.0: # %entry 9852; SSE4-NEXT: movdqa %xmm0, %xmm2 9853; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 9854; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9855; SSE4-NEXT: movapd %xmm1, %xmm0 9856; SSE4-NEXT: retq 9857; 9858; AVX1-LABEL: test186: 9859; AVX1: # %bb.0: # %entry 9860; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9861; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9862; AVX1-NEXT: retq 9863; 9864; AVX2-LABEL: test186: 9865; AVX2: # %bb.0: # %entry 9866; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9867; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9868; AVX2-NEXT: retq 9869; 9870; AVX512F-LABEL: test186: 9871; AVX512F: # %bb.0: # %entry 9872; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9873; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9874; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 9875; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9876; AVX512F-NEXT: retq 9877; 9878; AVX512BW-LABEL: test186: 9879; AVX512BW: # %bb.0: # %entry 9880; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 9881; AVX512BW-NEXT: retq 9882entry: 9883 %cmp = icmp sle <2 x i64> %a, %b 9884 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9885 ret <2 x i64> %sel 9886} 9887 9888define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) { 9889; SSE2-LABEL: test187: 9890; SSE2: # %bb.0: # %entry 9891; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9892; SSE2-NEXT: movdqa %xmm0, %xmm3 9893; SSE2-NEXT: pxor %xmm2, %xmm3 9894; SSE2-NEXT: pxor %xmm1, %xmm2 9895; SSE2-NEXT: movdqa %xmm2, %xmm4 9896; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9897; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9898; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9899; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9900; SSE2-NEXT: pand %xmm5, %xmm2 9901; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9902; SSE2-NEXT: por %xmm2, %xmm3 9903; SSE2-NEXT: pand %xmm3, %xmm0 9904; SSE2-NEXT: pandn %xmm1, %xmm3 9905; SSE2-NEXT: por %xmm3, %xmm0 9906; SSE2-NEXT: retq 9907; 9908; SSE4-LABEL: test187: 9909; SSE4: # %bb.0: # %entry 9910; SSE4-NEXT: movdqa %xmm0, %xmm2 9911; SSE4-NEXT: movdqa %xmm1, %xmm0 9912; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9913; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9914; SSE4-NEXT: movapd %xmm1, %xmm0 9915; SSE4-NEXT: retq 9916; 9917; AVX1-LABEL: test187: 9918; AVX1: # %bb.0: # %entry 9919; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9920; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9921; AVX1-NEXT: retq 9922; 9923; AVX2-LABEL: test187: 9924; AVX2: # %bb.0: # %entry 9925; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9926; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9927; AVX2-NEXT: retq 9928; 9929; AVX512F-LABEL: test187: 9930; AVX512F: # %bb.0: # %entry 9931; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9932; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9933; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 9934; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9935; AVX512F-NEXT: retq 9936; 9937; AVX512BW-LABEL: test187: 9938; AVX512BW: # %bb.0: # %entry 9939; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 9940; AVX512BW-NEXT: retq 9941entry: 9942 %cmp = icmp sgt <2 x i64> %a, %b 9943 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9944 ret <2 x i64> %sel 9945} 9946 9947define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) { 9948; SSE2-LABEL: test188: 9949; SSE2: # %bb.0: # %entry 9950; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9951; SSE2-NEXT: movdqa %xmm0, %xmm3 9952; SSE2-NEXT: pxor %xmm2, %xmm3 9953; SSE2-NEXT: pxor %xmm1, %xmm2 9954; SSE2-NEXT: movdqa %xmm2, %xmm4 9955; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9956; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9957; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9958; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9959; SSE2-NEXT: pand %xmm5, %xmm2 9960; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9961; SSE2-NEXT: por %xmm2, %xmm3 9962; SSE2-NEXT: pand %xmm3, %xmm0 9963; SSE2-NEXT: pandn %xmm1, %xmm3 9964; SSE2-NEXT: por %xmm3, %xmm0 9965; SSE2-NEXT: retq 9966; 9967; SSE4-LABEL: test188: 9968; SSE4: # %bb.0: # %entry 9969; SSE4-NEXT: movdqa %xmm0, %xmm2 9970; SSE4-NEXT: movdqa %xmm1, %xmm0 9971; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9972; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9973; SSE4-NEXT: movapd %xmm1, %xmm0 9974; SSE4-NEXT: retq 9975; 9976; AVX1-LABEL: test188: 9977; AVX1: # %bb.0: # %entry 9978; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9979; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9980; AVX1-NEXT: retq 9981; 9982; AVX2-LABEL: test188: 9983; AVX2: # %bb.0: # %entry 9984; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9985; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9986; AVX2-NEXT: retq 9987; 9988; AVX512F-LABEL: test188: 9989; AVX512F: # %bb.0: # %entry 9990; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9991; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9992; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 9993; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9994; AVX512F-NEXT: retq 9995; 9996; AVX512BW-LABEL: test188: 9997; AVX512BW: # %bb.0: # %entry 9998; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 9999; AVX512BW-NEXT: retq 10000entry: 10001 %cmp = icmp sge <2 x i64> %a, %b 10002 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10003 ret <2 x i64> %sel 10004} 10005 10006define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) { 10007; SSE2-LABEL: test189: 10008; SSE2: # %bb.0: # %entry 10009; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 10010; SSE2-NEXT: movdqa %xmm1, %xmm3 10011; SSE2-NEXT: pxor %xmm2, %xmm3 10012; SSE2-NEXT: pxor %xmm0, %xmm2 10013; SSE2-NEXT: movdqa %xmm2, %xmm4 10014; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10015; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10016; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10017; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10018; SSE2-NEXT: pand %xmm5, %xmm2 10019; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10020; SSE2-NEXT: por %xmm2, %xmm3 10021; SSE2-NEXT: pand %xmm3, %xmm0 10022; SSE2-NEXT: pandn %xmm1, %xmm3 10023; SSE2-NEXT: por %xmm3, %xmm0 10024; SSE2-NEXT: retq 10025; 10026; SSE4-LABEL: test189: 10027; SSE4: # %bb.0: # %entry 10028; SSE4-NEXT: movdqa %xmm0, %xmm2 10029; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10030; SSE4-NEXT: movdqa %xmm1, %xmm3 10031; SSE4-NEXT: pxor %xmm0, %xmm3 10032; SSE4-NEXT: pxor %xmm2, %xmm0 10033; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10034; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 10035; SSE4-NEXT: movapd %xmm1, %xmm0 10036; SSE4-NEXT: retq 10037; 10038; AVX1-LABEL: test189: 10039; AVX1: # %bb.0: # %entry 10040; AVX1-NEXT: vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10041; AVX1-NEXT: # xmm2 = mem[0,0] 10042; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 10043; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 10044; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10045; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10046; AVX1-NEXT: retq 10047; 10048; AVX2-LABEL: test189: 10049; AVX2: # %bb.0: # %entry 10050; AVX2-NEXT: vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10051; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 10052; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 10053; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10054; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10055; AVX2-NEXT: retq 10056; 10057; AVX512F-LABEL: test189: 10058; AVX512F: # %bb.0: # %entry 10059; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 10060; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 10061; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 10062; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 10063; AVX512F-NEXT: retq 10064; 10065; AVX512BW-LABEL: test189: 10066; AVX512BW: # %bb.0: # %entry 10067; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 10068; AVX512BW-NEXT: retq 10069entry: 10070 %cmp = icmp ult <2 x i64> %a, %b 10071 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10072 ret <2 x i64> %sel 10073} 10074 10075define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) { 10076; SSE2-LABEL: test190: 10077; SSE2: # %bb.0: # %entry 10078; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 10079; SSE2-NEXT: movdqa %xmm1, %xmm3 10080; SSE2-NEXT: pxor %xmm2, %xmm3 10081; SSE2-NEXT: pxor %xmm0, %xmm2 10082; SSE2-NEXT: movdqa %xmm2, %xmm4 10083; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10084; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10085; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10086; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10087; SSE2-NEXT: pand %xmm5, %xmm2 10088; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10089; SSE2-NEXT: por %xmm2, %xmm3 10090; SSE2-NEXT: pand %xmm3, %xmm0 10091; SSE2-NEXT: pandn %xmm1, %xmm3 10092; SSE2-NEXT: por %xmm3, %xmm0 10093; SSE2-NEXT: retq 10094; 10095; SSE4-LABEL: test190: 10096; SSE4: # %bb.0: # %entry 10097; SSE4-NEXT: movdqa %xmm0, %xmm2 10098; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10099; SSE4-NEXT: movdqa %xmm1, %xmm3 10100; SSE4-NEXT: pxor %xmm0, %xmm3 10101; SSE4-NEXT: pxor %xmm2, %xmm0 10102; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10103; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 10104; SSE4-NEXT: movapd %xmm1, %xmm0 10105; SSE4-NEXT: retq 10106; 10107; AVX1-LABEL: test190: 10108; AVX1: # %bb.0: # %entry 10109; AVX1-NEXT: vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10110; AVX1-NEXT: # xmm2 = mem[0,0] 10111; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 10112; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 10113; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10114; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10115; AVX1-NEXT: retq 10116; 10117; AVX2-LABEL: test190: 10118; AVX2: # %bb.0: # %entry 10119; AVX2-NEXT: vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10120; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 10121; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 10122; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10123; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10124; AVX2-NEXT: retq 10125; 10126; AVX512F-LABEL: test190: 10127; AVX512F: # %bb.0: # %entry 10128; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 10129; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 10130; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 10131; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 10132; AVX512F-NEXT: retq 10133; 10134; AVX512BW-LABEL: test190: 10135; AVX512BW: # %bb.0: # %entry 10136; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 10137; AVX512BW-NEXT: retq 10138entry: 10139 %cmp = icmp ule <2 x i64> %a, %b 10140 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10141 ret <2 x i64> %sel 10142} 10143 10144define <2 x i64> @test191(<2 x i64> %a, <2 x i64> %b) { 10145; SSE2-LABEL: test191: 10146; SSE2: # %bb.0: # %entry 10147; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 10148; SSE2-NEXT: movdqa %xmm0, %xmm3 10149; SSE2-NEXT: pxor %xmm2, %xmm3 10150; SSE2-NEXT: pxor %xmm1, %xmm2 10151; SSE2-NEXT: movdqa %xmm2, %xmm4 10152; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10153; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10154; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10155; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10156; SSE2-NEXT: pand %xmm5, %xmm2 10157; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10158; SSE2-NEXT: por %xmm2, %xmm3 10159; SSE2-NEXT: pand %xmm3, %xmm0 10160; SSE2-NEXT: pandn %xmm1, %xmm3 10161; SSE2-NEXT: por %xmm3, %xmm0 10162; SSE2-NEXT: retq 10163; 10164; SSE4-LABEL: test191: 10165; SSE4: # %bb.0: # %entry 10166; SSE4-NEXT: movdqa %xmm0, %xmm2 10167; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10168; SSE4-NEXT: movdqa %xmm2, %xmm3 10169; SSE4-NEXT: pxor %xmm0, %xmm3 10170; SSE4-NEXT: pxor %xmm1, %xmm0 10171; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10172; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 10173; SSE4-NEXT: movapd %xmm1, %xmm0 10174; SSE4-NEXT: retq 10175; 10176; AVX1-LABEL: test191: 10177; AVX1: # %bb.0: # %entry 10178; AVX1-NEXT: vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10179; AVX1-NEXT: # xmm2 = mem[0,0] 10180; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 10181; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 10182; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10183; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10184; AVX1-NEXT: retq 10185; 10186; AVX2-LABEL: test191: 10187; AVX2: # %bb.0: # %entry 10188; AVX2-NEXT: vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10189; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 10190; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 10191; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10192; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10193; AVX2-NEXT: retq 10194; 10195; AVX512F-LABEL: test191: 10196; AVX512F: # %bb.0: # %entry 10197; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 10198; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 10199; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 10200; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 10201; AVX512F-NEXT: retq 10202; 10203; AVX512BW-LABEL: test191: 10204; AVX512BW: # %bb.0: # %entry 10205; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 10206; AVX512BW-NEXT: retq 10207entry: 10208 %cmp = icmp ugt <2 x i64> %a, %b 10209 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10210 ret <2 x i64> %sel 10211} 10212 10213define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) { 10214; SSE2-LABEL: test192: 10215; SSE2: # %bb.0: # %entry 10216; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 10217; SSE2-NEXT: movdqa %xmm0, %xmm3 10218; SSE2-NEXT: pxor %xmm2, %xmm3 10219; SSE2-NEXT: pxor %xmm1, %xmm2 10220; SSE2-NEXT: movdqa %xmm2, %xmm4 10221; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10222; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10223; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10224; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10225; SSE2-NEXT: pand %xmm5, %xmm2 10226; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10227; SSE2-NEXT: por %xmm2, %xmm3 10228; SSE2-NEXT: pand %xmm3, %xmm0 10229; SSE2-NEXT: pandn %xmm1, %xmm3 10230; SSE2-NEXT: por %xmm3, %xmm0 10231; SSE2-NEXT: retq 10232; 10233; SSE4-LABEL: test192: 10234; SSE4: # %bb.0: # %entry 10235; SSE4-NEXT: movdqa %xmm0, %xmm2 10236; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10237; SSE4-NEXT: movdqa %xmm2, %xmm3 10238; SSE4-NEXT: pxor %xmm0, %xmm3 10239; SSE4-NEXT: pxor %xmm1, %xmm0 10240; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10241; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 10242; SSE4-NEXT: movapd %xmm1, %xmm0 10243; SSE4-NEXT: retq 10244; 10245; AVX1-LABEL: test192: 10246; AVX1: # %bb.0: # %entry 10247; AVX1-NEXT: vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10248; AVX1-NEXT: # xmm2 = mem[0,0] 10249; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 10250; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 10251; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10252; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10253; AVX1-NEXT: retq 10254; 10255; AVX2-LABEL: test192: 10256; AVX2: # %bb.0: # %entry 10257; AVX2-NEXT: vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10258; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 10259; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 10260; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10261; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10262; AVX2-NEXT: retq 10263; 10264; AVX512F-LABEL: test192: 10265; AVX512F: # %bb.0: # %entry 10266; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 10267; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 10268; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 10269; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 10270; AVX512F-NEXT: retq 10271; 10272; AVX512BW-LABEL: test192: 10273; AVX512BW: # %bb.0: # %entry 10274; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 10275; AVX512BW-NEXT: retq 10276entry: 10277 %cmp = icmp uge <2 x i64> %a, %b 10278 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10279 ret <2 x i64> %sel 10280} 10281 10282; comparisons for smin/smax patterns can be reused 10283define <8 x i64> @concat_smin_smax(<4 x i64> %a0, <4 x i64> %a1) { 10284; SSE2-LABEL: concat_smin_smax: 10285; SSE2: # %bb.0: 10286; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648] 10287; SSE2-NEXT: movdqa %xmm0, %xmm4 10288; SSE2-NEXT: pxor %xmm6, %xmm4 10289; SSE2-NEXT: movdqa %xmm2, %xmm5 10290; SSE2-NEXT: pxor %xmm6, %xmm5 10291; SSE2-NEXT: movdqa %xmm5, %xmm7 10292; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 10293; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 10294; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 10295; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 10296; SSE2-NEXT: pand %xmm8, %xmm4 10297; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 10298; SSE2-NEXT: por %xmm4, %xmm5 10299; SSE2-NEXT: movdqa %xmm5, %xmm7 10300; SSE2-NEXT: pandn %xmm2, %xmm7 10301; SSE2-NEXT: movdqa %xmm0, %xmm4 10302; SSE2-NEXT: pand %xmm5, %xmm4 10303; SSE2-NEXT: por %xmm7, %xmm4 10304; SSE2-NEXT: movdqa %xmm1, %xmm7 10305; SSE2-NEXT: pxor %xmm6, %xmm7 10306; SSE2-NEXT: pxor %xmm3, %xmm6 10307; SSE2-NEXT: movdqa %xmm6, %xmm8 10308; SSE2-NEXT: pcmpgtd %xmm7, %xmm8 10309; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2] 10310; SSE2-NEXT: pcmpeqd %xmm7, %xmm6 10311; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 10312; SSE2-NEXT: pand %xmm9, %xmm6 10313; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm8[1,1,3,3] 10314; SSE2-NEXT: por %xmm6, %xmm7 10315; SSE2-NEXT: movdqa %xmm7, %xmm6 10316; SSE2-NEXT: pandn %xmm3, %xmm6 10317; SSE2-NEXT: movdqa %xmm7, %xmm8 10318; SSE2-NEXT: pandn %xmm1, %xmm8 10319; SSE2-NEXT: pand %xmm7, %xmm1 10320; SSE2-NEXT: por %xmm6, %xmm1 10321; SSE2-NEXT: pand %xmm5, %xmm2 10322; SSE2-NEXT: pandn %xmm0, %xmm5 10323; SSE2-NEXT: por %xmm5, %xmm2 10324; SSE2-NEXT: pand %xmm7, %xmm3 10325; SSE2-NEXT: por %xmm8, %xmm3 10326; SSE2-NEXT: movdqa %xmm4, %xmm0 10327; SSE2-NEXT: retq 10328; 10329; SSE4-LABEL: concat_smin_smax: 10330; SSE4: # %bb.0: 10331; SSE4-NEXT: movdqa %xmm1, %xmm4 10332; SSE4-NEXT: movdqa %xmm0, %xmm5 10333; SSE4-NEXT: movdqa %xmm2, %xmm8 10334; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 10335; SSE4-NEXT: movdqa %xmm2, %xmm6 10336; SSE4-NEXT: movdqa %xmm8, %xmm0 10337; SSE4-NEXT: blendvpd %xmm0, %xmm5, %xmm6 10338; SSE4-NEXT: movdqa %xmm3, %xmm7 10339; SSE4-NEXT: pcmpgtq %xmm1, %xmm7 10340; SSE4-NEXT: movdqa %xmm3, %xmm1 10341; SSE4-NEXT: movdqa %xmm7, %xmm0 10342; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm1 10343; SSE4-NEXT: movdqa %xmm8, %xmm0 10344; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm5 10345; SSE4-NEXT: movdqa %xmm7, %xmm0 10346; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm4 10347; SSE4-NEXT: movapd %xmm6, %xmm0 10348; SSE4-NEXT: movapd %xmm5, %xmm2 10349; SSE4-NEXT: movapd %xmm4, %xmm3 10350; SSE4-NEXT: retq 10351; 10352; AVX1-LABEL: concat_smin_smax: 10353; AVX1: # %bb.0: 10354; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10355; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 10356; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 10357; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3 10358; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm3 10359; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm0, %ymm2 10360; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm1, %ymm1 10361; AVX1-NEXT: vmovapd %ymm2, %ymm0 10362; AVX1-NEXT: retq 10363; 10364; AVX2-LABEL: concat_smin_smax: 10365; AVX2: # %bb.0: 10366; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm3 10367; AVX2-NEXT: vblendvpd %ymm3, %ymm1, %ymm0, %ymm2 10368; AVX2-NEXT: vblendvpd %ymm3, %ymm0, %ymm1, %ymm1 10369; AVX2-NEXT: vmovapd %ymm2, %ymm0 10370; AVX2-NEXT: retq 10371; 10372; AVX512F-LABEL: concat_smin_smax: 10373; AVX512F: # %bb.0: 10374; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 10375; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 10376; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm2 10377; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 10378; AVX512F-NEXT: vinserti64x4 $1, %ymm0, %zmm2, %zmm0 10379; AVX512F-NEXT: retq 10380; 10381; AVX512BW-LABEL: concat_smin_smax: 10382; AVX512BW: # %bb.0: 10383; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm2 10384; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 10385; AVX512BW-NEXT: vinserti64x4 $1, %ymm0, %zmm2, %zmm0 10386; AVX512BW-NEXT: retq 10387 %cmp = icmp slt <4 x i64> %a0, %a1 10388 %min = select <4 x i1> %cmp, <4 x i64> %a0, <4 x i64> %a1 10389 %max = select <4 x i1> %cmp, <4 x i64> %a1, <4 x i64> %a0 10390 %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> 10391 ret <8 x i64> %res 10392} 10393