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 %xmm0, %xmm2 67; SSE2-NEXT: movdqa %xmm2, %xmm0 68; SSE2-NEXT: retq 69; 70; SSE4-LABEL: test3: 71; SSE4: # %bb.0: # %entry 72; SSE4-NEXT: pmaxsb %xmm1, %xmm0 73; SSE4-NEXT: retq 74; 75; AVX-LABEL: test3: 76; AVX: # %bb.0: # %entry 77; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 78; AVX-NEXT: retq 79entry: 80 %cmp = icmp sgt <16 x i8> %a, %b 81 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 82 ret <16 x i8> %sel 83} 84 85define <16 x i8> @test4(<16 x i8> %a, <16 x i8> %b) { 86; SSE2-LABEL: test4: 87; SSE2: # %bb.0: # %entry 88; SSE2-NEXT: movdqa %xmm0, %xmm2 89; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 90; SSE2-NEXT: pand %xmm2, %xmm0 91; SSE2-NEXT: pandn %xmm1, %xmm2 92; SSE2-NEXT: por %xmm0, %xmm2 93; SSE2-NEXT: movdqa %xmm2, %xmm0 94; SSE2-NEXT: retq 95; 96; SSE4-LABEL: test4: 97; SSE4: # %bb.0: # %entry 98; SSE4-NEXT: pmaxsb %xmm1, %xmm0 99; SSE4-NEXT: retq 100; 101; AVX-LABEL: test4: 102; AVX: # %bb.0: # %entry 103; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 104; AVX-NEXT: retq 105entry: 106 %cmp = icmp sge <16 x i8> %a, %b 107 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 108 ret <16 x i8> %sel 109} 110 111define <16 x i8> @test5(<16 x i8> %a, <16 x i8> %b) { 112; SSE-LABEL: test5: 113; SSE: # %bb.0: # %entry 114; SSE-NEXT: pminub %xmm1, %xmm0 115; SSE-NEXT: retq 116; 117; AVX-LABEL: test5: 118; AVX: # %bb.0: # %entry 119; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 120; AVX-NEXT: retq 121entry: 122 %cmp = icmp ult <16 x i8> %a, %b 123 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 124 ret <16 x i8> %sel 125} 126 127define <16 x i8> @test6(<16 x i8> %a, <16 x i8> %b) { 128; SSE-LABEL: test6: 129; SSE: # %bb.0: # %entry 130; SSE-NEXT: pminub %xmm1, %xmm0 131; SSE-NEXT: retq 132; 133; AVX-LABEL: test6: 134; AVX: # %bb.0: # %entry 135; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 136; AVX-NEXT: retq 137entry: 138 %cmp = icmp ule <16 x i8> %a, %b 139 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 140 ret <16 x i8> %sel 141} 142 143define <16 x i8> @test7(<16 x i8> %a, <16 x i8> %b) { 144; SSE-LABEL: test7: 145; SSE: # %bb.0: # %entry 146; SSE-NEXT: pmaxub %xmm1, %xmm0 147; SSE-NEXT: retq 148; 149; AVX-LABEL: test7: 150; AVX: # %bb.0: # %entry 151; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 152; AVX-NEXT: retq 153entry: 154 %cmp = icmp ugt <16 x i8> %a, %b 155 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 156 ret <16 x i8> %sel 157} 158 159define <16 x i8> @test8(<16 x i8> %a, <16 x i8> %b) { 160; SSE-LABEL: test8: 161; SSE: # %bb.0: # %entry 162; SSE-NEXT: pmaxub %xmm1, %xmm0 163; SSE-NEXT: retq 164; 165; AVX-LABEL: test8: 166; AVX: # %bb.0: # %entry 167; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 168; AVX-NEXT: retq 169entry: 170 %cmp = icmp uge <16 x i8> %a, %b 171 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 172 ret <16 x i8> %sel 173} 174 175define <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) { 176; SSE-LABEL: test9: 177; SSE: # %bb.0: # %entry 178; SSE-NEXT: pminsw %xmm1, %xmm0 179; SSE-NEXT: retq 180; 181; AVX-LABEL: test9: 182; AVX: # %bb.0: # %entry 183; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 184; AVX-NEXT: retq 185entry: 186 %cmp = icmp slt <8 x i16> %a, %b 187 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 188 ret <8 x i16> %sel 189} 190 191define <8 x i16> @test10(<8 x i16> %a, <8 x i16> %b) { 192; SSE-LABEL: test10: 193; SSE: # %bb.0: # %entry 194; SSE-NEXT: pminsw %xmm1, %xmm0 195; SSE-NEXT: retq 196; 197; AVX-LABEL: test10: 198; AVX: # %bb.0: # %entry 199; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 200; AVX-NEXT: retq 201entry: 202 %cmp = icmp sle <8 x i16> %a, %b 203 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 204 ret <8 x i16> %sel 205} 206 207define <8 x i16> @test11(<8 x i16> %a, <8 x i16> %b) { 208; SSE-LABEL: test11: 209; SSE: # %bb.0: # %entry 210; SSE-NEXT: pmaxsw %xmm1, %xmm0 211; SSE-NEXT: retq 212; 213; AVX-LABEL: test11: 214; AVX: # %bb.0: # %entry 215; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 216; AVX-NEXT: retq 217entry: 218 %cmp = icmp sgt <8 x i16> %a, %b 219 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 220 ret <8 x i16> %sel 221} 222 223define <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) { 224; SSE-LABEL: test12: 225; SSE: # %bb.0: # %entry 226; SSE-NEXT: pmaxsw %xmm1, %xmm0 227; SSE-NEXT: retq 228; 229; AVX-LABEL: test12: 230; AVX: # %bb.0: # %entry 231; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 232; AVX-NEXT: retq 233entry: 234 %cmp = icmp sge <8 x i16> %a, %b 235 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 236 ret <8 x i16> %sel 237} 238 239define <8 x i16> @test13(<8 x i16> %a, <8 x i16> %b) { 240; SSE2-LABEL: test13: 241; SSE2: # %bb.0: # %entry 242; SSE2-NEXT: movdqa %xmm0, %xmm2 243; SSE2-NEXT: psubusw %xmm1, %xmm2 244; SSE2-NEXT: psubw %xmm2, %xmm0 245; SSE2-NEXT: retq 246; 247; SSE4-LABEL: test13: 248; SSE4: # %bb.0: # %entry 249; SSE4-NEXT: pminuw %xmm1, %xmm0 250; SSE4-NEXT: retq 251; 252; AVX-LABEL: test13: 253; AVX: # %bb.0: # %entry 254; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 255; AVX-NEXT: retq 256entry: 257 %cmp = icmp ult <8 x i16> %a, %b 258 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 259 ret <8 x i16> %sel 260} 261 262define <8 x i16> @test14(<8 x i16> %a, <8 x i16> %b) { 263; SSE2-LABEL: test14: 264; SSE2: # %bb.0: # %entry 265; SSE2-NEXT: movdqa %xmm0, %xmm2 266; SSE2-NEXT: psubusw %xmm1, %xmm2 267; SSE2-NEXT: psubw %xmm2, %xmm0 268; SSE2-NEXT: retq 269; 270; SSE4-LABEL: test14: 271; SSE4: # %bb.0: # %entry 272; SSE4-NEXT: pminuw %xmm1, %xmm0 273; SSE4-NEXT: retq 274; 275; AVX-LABEL: test14: 276; AVX: # %bb.0: # %entry 277; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 278; AVX-NEXT: retq 279entry: 280 %cmp = icmp ule <8 x i16> %a, %b 281 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 282 ret <8 x i16> %sel 283} 284 285define <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) { 286; SSE2-LABEL: test15: 287; SSE2: # %bb.0: # %entry 288; SSE2-NEXT: psubusw %xmm0, %xmm1 289; SSE2-NEXT: paddw %xmm1, %xmm0 290; SSE2-NEXT: retq 291; 292; SSE4-LABEL: test15: 293; SSE4: # %bb.0: # %entry 294; SSE4-NEXT: pmaxuw %xmm1, %xmm0 295; SSE4-NEXT: retq 296; 297; AVX-LABEL: test15: 298; AVX: # %bb.0: # %entry 299; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 300; AVX-NEXT: retq 301entry: 302 %cmp = icmp ugt <8 x i16> %a, %b 303 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 304 ret <8 x i16> %sel 305} 306 307define <8 x i16> @test16(<8 x i16> %a, <8 x i16> %b) { 308; SSE2-LABEL: test16: 309; SSE2: # %bb.0: # %entry 310; SSE2-NEXT: psubusw %xmm0, %xmm1 311; SSE2-NEXT: paddw %xmm1, %xmm0 312; SSE2-NEXT: retq 313; 314; SSE4-LABEL: test16: 315; SSE4: # %bb.0: # %entry 316; SSE4-NEXT: pmaxuw %xmm1, %xmm0 317; SSE4-NEXT: retq 318; 319; AVX-LABEL: test16: 320; AVX: # %bb.0: # %entry 321; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 322; AVX-NEXT: retq 323entry: 324 %cmp = icmp uge <8 x i16> %a, %b 325 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 326 ret <8 x i16> %sel 327} 328 329define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) { 330; SSE2-LABEL: test17: 331; SSE2: # %bb.0: # %entry 332; SSE2-NEXT: movdqa %xmm1, %xmm2 333; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 334; SSE2-NEXT: pand %xmm2, %xmm0 335; SSE2-NEXT: pandn %xmm1, %xmm2 336; SSE2-NEXT: por %xmm2, %xmm0 337; SSE2-NEXT: retq 338; 339; SSE4-LABEL: test17: 340; SSE4: # %bb.0: # %entry 341; SSE4-NEXT: pminsd %xmm1, %xmm0 342; SSE4-NEXT: retq 343; 344; AVX-LABEL: test17: 345; AVX: # %bb.0: # %entry 346; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 347; AVX-NEXT: retq 348entry: 349 %cmp = icmp slt <4 x i32> %a, %b 350 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 351 ret <4 x i32> %sel 352} 353 354define <4 x i32> @test18(<4 x i32> %a, <4 x i32> %b) { 355; SSE2-LABEL: test18: 356; SSE2: # %bb.0: # %entry 357; SSE2-NEXT: movdqa %xmm1, %xmm2 358; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 359; SSE2-NEXT: pand %xmm2, %xmm0 360; SSE2-NEXT: pandn %xmm1, %xmm2 361; SSE2-NEXT: por %xmm2, %xmm0 362; SSE2-NEXT: retq 363; 364; SSE4-LABEL: test18: 365; SSE4: # %bb.0: # %entry 366; SSE4-NEXT: pminsd %xmm1, %xmm0 367; SSE4-NEXT: retq 368; 369; AVX-LABEL: test18: 370; AVX: # %bb.0: # %entry 371; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 372; AVX-NEXT: retq 373entry: 374 %cmp = icmp sle <4 x i32> %a, %b 375 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 376 ret <4 x i32> %sel 377} 378 379define <4 x i32> @test19(<4 x i32> %a, <4 x i32> %b) { 380; SSE2-LABEL: test19: 381; SSE2: # %bb.0: # %entry 382; SSE2-NEXT: movdqa %xmm0, %xmm2 383; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 384; SSE2-NEXT: pand %xmm2, %xmm0 385; SSE2-NEXT: pandn %xmm1, %xmm2 386; SSE2-NEXT: por %xmm0, %xmm2 387; SSE2-NEXT: movdqa %xmm2, %xmm0 388; SSE2-NEXT: retq 389; 390; SSE4-LABEL: test19: 391; SSE4: # %bb.0: # %entry 392; SSE4-NEXT: pmaxsd %xmm1, %xmm0 393; SSE4-NEXT: retq 394; 395; AVX-LABEL: test19: 396; AVX: # %bb.0: # %entry 397; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 398; AVX-NEXT: retq 399entry: 400 %cmp = icmp sgt <4 x i32> %a, %b 401 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 402 ret <4 x i32> %sel 403} 404 405define <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b) { 406; SSE2-LABEL: test20: 407; SSE2: # %bb.0: # %entry 408; SSE2-NEXT: movdqa %xmm0, %xmm2 409; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 410; SSE2-NEXT: pand %xmm2, %xmm0 411; SSE2-NEXT: pandn %xmm1, %xmm2 412; SSE2-NEXT: por %xmm0, %xmm2 413; SSE2-NEXT: movdqa %xmm2, %xmm0 414; SSE2-NEXT: retq 415; 416; SSE4-LABEL: test20: 417; SSE4: # %bb.0: # %entry 418; SSE4-NEXT: pmaxsd %xmm1, %xmm0 419; SSE4-NEXT: retq 420; 421; AVX-LABEL: test20: 422; AVX: # %bb.0: # %entry 423; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 424; AVX-NEXT: retq 425entry: 426 %cmp = icmp sge <4 x i32> %a, %b 427 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 428 ret <4 x i32> %sel 429} 430 431define <4 x i32> @test21(<4 x i32> %a, <4 x i32> %b) { 432; SSE2-LABEL: test21: 433; SSE2: # %bb.0: # %entry 434; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 435; SSE2-NEXT: movdqa %xmm0, %xmm3 436; SSE2-NEXT: pxor %xmm2, %xmm3 437; SSE2-NEXT: pxor %xmm1, %xmm2 438; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 439; SSE2-NEXT: pand %xmm2, %xmm0 440; SSE2-NEXT: pandn %xmm1, %xmm2 441; SSE2-NEXT: por %xmm2, %xmm0 442; SSE2-NEXT: retq 443; 444; SSE4-LABEL: test21: 445; SSE4: # %bb.0: # %entry 446; SSE4-NEXT: pminud %xmm1, %xmm0 447; SSE4-NEXT: retq 448; 449; AVX-LABEL: test21: 450; AVX: # %bb.0: # %entry 451; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 452; AVX-NEXT: retq 453entry: 454 %cmp = icmp ult <4 x i32> %a, %b 455 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 456 ret <4 x i32> %sel 457} 458 459define <4 x i32> @test22(<4 x i32> %a, <4 x i32> %b) { 460; SSE2-LABEL: test22: 461; SSE2: # %bb.0: # %entry 462; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 463; SSE2-NEXT: movdqa %xmm0, %xmm3 464; SSE2-NEXT: pxor %xmm2, %xmm3 465; SSE2-NEXT: pxor %xmm1, %xmm2 466; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 467; SSE2-NEXT: pand %xmm2, %xmm0 468; SSE2-NEXT: pandn %xmm1, %xmm2 469; SSE2-NEXT: por %xmm2, %xmm0 470; SSE2-NEXT: retq 471; 472; SSE4-LABEL: test22: 473; SSE4: # %bb.0: # %entry 474; SSE4-NEXT: pminud %xmm1, %xmm0 475; SSE4-NEXT: retq 476; 477; AVX-LABEL: test22: 478; AVX: # %bb.0: # %entry 479; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 480; AVX-NEXT: retq 481entry: 482 %cmp = icmp ule <4 x i32> %a, %b 483 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 484 ret <4 x i32> %sel 485} 486 487define <4 x i32> @test23(<4 x i32> %a, <4 x i32> %b) { 488; SSE2-LABEL: test23: 489; SSE2: # %bb.0: # %entry 490; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 491; SSE2-NEXT: movdqa %xmm1, %xmm3 492; SSE2-NEXT: pxor %xmm2, %xmm3 493; SSE2-NEXT: pxor %xmm0, %xmm2 494; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 495; SSE2-NEXT: pand %xmm2, %xmm0 496; SSE2-NEXT: pandn %xmm1, %xmm2 497; SSE2-NEXT: por %xmm2, %xmm0 498; SSE2-NEXT: retq 499; 500; SSE4-LABEL: test23: 501; SSE4: # %bb.0: # %entry 502; SSE4-NEXT: pmaxud %xmm1, %xmm0 503; SSE4-NEXT: retq 504; 505; AVX-LABEL: test23: 506; AVX: # %bb.0: # %entry 507; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 508; AVX-NEXT: retq 509entry: 510 %cmp = icmp ugt <4 x i32> %a, %b 511 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 512 ret <4 x i32> %sel 513} 514 515define <4 x i32> @test24(<4 x i32> %a, <4 x i32> %b) { 516; SSE2-LABEL: test24: 517; SSE2: # %bb.0: # %entry 518; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 519; SSE2-NEXT: movdqa %xmm1, %xmm3 520; SSE2-NEXT: pxor %xmm2, %xmm3 521; SSE2-NEXT: pxor %xmm0, %xmm2 522; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 523; SSE2-NEXT: pand %xmm2, %xmm0 524; SSE2-NEXT: pandn %xmm1, %xmm2 525; SSE2-NEXT: por %xmm2, %xmm0 526; SSE2-NEXT: retq 527; 528; SSE4-LABEL: test24: 529; SSE4: # %bb.0: # %entry 530; SSE4-NEXT: pmaxud %xmm1, %xmm0 531; SSE4-NEXT: retq 532; 533; AVX-LABEL: test24: 534; AVX: # %bb.0: # %entry 535; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 536; AVX-NEXT: retq 537entry: 538 %cmp = icmp uge <4 x i32> %a, %b 539 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 540 ret <4 x i32> %sel 541} 542 543define <32 x i8> @test25(<32 x i8> %a, <32 x i8> %b) { 544; SSE2-LABEL: test25: 545; SSE2: # %bb.0: # %entry 546; SSE2-NEXT: movdqa %xmm2, %xmm4 547; SSE2-NEXT: pcmpgtb %xmm0, %xmm4 548; SSE2-NEXT: pand %xmm4, %xmm0 549; SSE2-NEXT: pandn %xmm2, %xmm4 550; SSE2-NEXT: por %xmm4, %xmm0 551; SSE2-NEXT: movdqa %xmm3, %xmm2 552; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 553; SSE2-NEXT: pand %xmm2, %xmm1 554; SSE2-NEXT: pandn %xmm3, %xmm2 555; SSE2-NEXT: por %xmm2, %xmm1 556; SSE2-NEXT: retq 557; 558; SSE4-LABEL: test25: 559; SSE4: # %bb.0: # %entry 560; SSE4-NEXT: pminsb %xmm2, %xmm0 561; SSE4-NEXT: pminsb %xmm3, %xmm1 562; SSE4-NEXT: retq 563; 564; AVX1-LABEL: test25: 565; AVX1: # %bb.0: # %entry 566; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 567; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 568; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 569; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 570; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 571; AVX1-NEXT: retq 572; 573; AVX2-LABEL: test25: 574; AVX2: # %bb.0: # %entry 575; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 576; AVX2-NEXT: retq 577; 578; AVX512-LABEL: test25: 579; AVX512: # %bb.0: # %entry 580; AVX512-NEXT: vpminsb %ymm1, %ymm0, %ymm0 581; AVX512-NEXT: retq 582entry: 583 %cmp = icmp slt <32 x i8> %a, %b 584 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 585 ret <32 x i8> %sel 586} 587 588define <32 x i8> @test26(<32 x i8> %a, <32 x i8> %b) { 589; SSE2-LABEL: test26: 590; SSE2: # %bb.0: # %entry 591; SSE2-NEXT: movdqa %xmm2, %xmm4 592; SSE2-NEXT: pcmpgtb %xmm0, %xmm4 593; SSE2-NEXT: pand %xmm4, %xmm0 594; SSE2-NEXT: pandn %xmm2, %xmm4 595; SSE2-NEXT: por %xmm4, %xmm0 596; SSE2-NEXT: movdqa %xmm3, %xmm2 597; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 598; SSE2-NEXT: pand %xmm2, %xmm1 599; SSE2-NEXT: pandn %xmm3, %xmm2 600; SSE2-NEXT: por %xmm2, %xmm1 601; SSE2-NEXT: retq 602; 603; SSE4-LABEL: test26: 604; SSE4: # %bb.0: # %entry 605; SSE4-NEXT: pminsb %xmm2, %xmm0 606; SSE4-NEXT: pminsb %xmm3, %xmm1 607; SSE4-NEXT: retq 608; 609; AVX1-LABEL: test26: 610; AVX1: # %bb.0: # %entry 611; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 612; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 613; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 614; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 615; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 616; AVX1-NEXT: retq 617; 618; AVX2-LABEL: test26: 619; AVX2: # %bb.0: # %entry 620; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 621; AVX2-NEXT: retq 622; 623; AVX512-LABEL: test26: 624; AVX512: # %bb.0: # %entry 625; AVX512-NEXT: vpminsb %ymm1, %ymm0, %ymm0 626; AVX512-NEXT: retq 627entry: 628 %cmp = icmp sle <32 x i8> %a, %b 629 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 630 ret <32 x i8> %sel 631} 632 633define <32 x i8> @test27(<32 x i8> %a, <32 x i8> %b) { 634; SSE2-LABEL: test27: 635; SSE2: # %bb.0: # %entry 636; SSE2-NEXT: movdqa %xmm0, %xmm4 637; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 638; SSE2-NEXT: pand %xmm4, %xmm0 639; SSE2-NEXT: pandn %xmm2, %xmm4 640; SSE2-NEXT: por %xmm0, %xmm4 641; SSE2-NEXT: movdqa %xmm1, %xmm2 642; SSE2-NEXT: pcmpgtb %xmm3, %xmm2 643; SSE2-NEXT: pand %xmm2, %xmm1 644; SSE2-NEXT: pandn %xmm3, %xmm2 645; SSE2-NEXT: por %xmm1, %xmm2 646; SSE2-NEXT: movdqa %xmm4, %xmm0 647; SSE2-NEXT: movdqa %xmm2, %xmm1 648; SSE2-NEXT: retq 649; 650; SSE4-LABEL: test27: 651; SSE4: # %bb.0: # %entry 652; SSE4-NEXT: pmaxsb %xmm2, %xmm0 653; SSE4-NEXT: pmaxsb %xmm3, %xmm1 654; SSE4-NEXT: retq 655; 656; AVX1-LABEL: test27: 657; AVX1: # %bb.0: # %entry 658; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 659; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 660; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 661; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 662; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 663; AVX1-NEXT: retq 664; 665; AVX2-LABEL: test27: 666; AVX2: # %bb.0: # %entry 667; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 668; AVX2-NEXT: retq 669; 670; AVX512-LABEL: test27: 671; AVX512: # %bb.0: # %entry 672; AVX512-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 673; AVX512-NEXT: retq 674entry: 675 %cmp = icmp sgt <32 x i8> %a, %b 676 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 677 ret <32 x i8> %sel 678} 679 680define <32 x i8> @test28(<32 x i8> %a, <32 x i8> %b) { 681; SSE2-LABEL: test28: 682; SSE2: # %bb.0: # %entry 683; SSE2-NEXT: movdqa %xmm0, %xmm4 684; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 685; SSE2-NEXT: pand %xmm4, %xmm0 686; SSE2-NEXT: pandn %xmm2, %xmm4 687; SSE2-NEXT: por %xmm0, %xmm4 688; SSE2-NEXT: movdqa %xmm1, %xmm2 689; SSE2-NEXT: pcmpgtb %xmm3, %xmm2 690; SSE2-NEXT: pand %xmm2, %xmm1 691; SSE2-NEXT: pandn %xmm3, %xmm2 692; SSE2-NEXT: por %xmm1, %xmm2 693; SSE2-NEXT: movdqa %xmm4, %xmm0 694; SSE2-NEXT: movdqa %xmm2, %xmm1 695; SSE2-NEXT: retq 696; 697; SSE4-LABEL: test28: 698; SSE4: # %bb.0: # %entry 699; SSE4-NEXT: pmaxsb %xmm2, %xmm0 700; SSE4-NEXT: pmaxsb %xmm3, %xmm1 701; SSE4-NEXT: retq 702; 703; AVX1-LABEL: test28: 704; AVX1: # %bb.0: # %entry 705; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 706; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 707; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 708; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 709; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 710; AVX1-NEXT: retq 711; 712; AVX2-LABEL: test28: 713; AVX2: # %bb.0: # %entry 714; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 715; AVX2-NEXT: retq 716; 717; AVX512-LABEL: test28: 718; AVX512: # %bb.0: # %entry 719; AVX512-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 720; AVX512-NEXT: retq 721entry: 722 %cmp = icmp sge <32 x i8> %a, %b 723 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 724 ret <32 x i8> %sel 725} 726 727define <32 x i8> @test29(<32 x i8> %a, <32 x i8> %b) { 728; SSE-LABEL: test29: 729; SSE: # %bb.0: # %entry 730; SSE-NEXT: pminub %xmm2, %xmm0 731; SSE-NEXT: pminub %xmm3, %xmm1 732; SSE-NEXT: retq 733; 734; AVX1-LABEL: test29: 735; AVX1: # %bb.0: # %entry 736; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 737; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 738; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 739; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 740; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 741; AVX1-NEXT: retq 742; 743; AVX2-LABEL: test29: 744; AVX2: # %bb.0: # %entry 745; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 746; AVX2-NEXT: retq 747; 748; AVX512-LABEL: test29: 749; AVX512: # %bb.0: # %entry 750; AVX512-NEXT: vpminub %ymm1, %ymm0, %ymm0 751; AVX512-NEXT: retq 752entry: 753 %cmp = icmp ult <32 x i8> %a, %b 754 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 755 ret <32 x i8> %sel 756} 757 758define <32 x i8> @test30(<32 x i8> %a, <32 x i8> %b) { 759; SSE-LABEL: test30: 760; SSE: # %bb.0: # %entry 761; SSE-NEXT: pminub %xmm2, %xmm0 762; SSE-NEXT: pminub %xmm3, %xmm1 763; SSE-NEXT: retq 764; 765; AVX1-LABEL: test30: 766; AVX1: # %bb.0: # %entry 767; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 768; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 769; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 770; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 771; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 772; AVX1-NEXT: retq 773; 774; AVX2-LABEL: test30: 775; AVX2: # %bb.0: # %entry 776; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 777; AVX2-NEXT: retq 778; 779; AVX512-LABEL: test30: 780; AVX512: # %bb.0: # %entry 781; AVX512-NEXT: vpminub %ymm1, %ymm0, %ymm0 782; AVX512-NEXT: retq 783entry: 784 %cmp = icmp ule <32 x i8> %a, %b 785 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 786 ret <32 x i8> %sel 787} 788 789define <32 x i8> @test31(<32 x i8> %a, <32 x i8> %b) { 790; SSE-LABEL: test31: 791; SSE: # %bb.0: # %entry 792; SSE-NEXT: pmaxub %xmm2, %xmm0 793; SSE-NEXT: pmaxub %xmm3, %xmm1 794; SSE-NEXT: retq 795; 796; AVX1-LABEL: test31: 797; AVX1: # %bb.0: # %entry 798; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 799; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 800; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 801; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 802; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 803; AVX1-NEXT: retq 804; 805; AVX2-LABEL: test31: 806; AVX2: # %bb.0: # %entry 807; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 808; AVX2-NEXT: retq 809; 810; AVX512-LABEL: test31: 811; AVX512: # %bb.0: # %entry 812; AVX512-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 813; AVX512-NEXT: retq 814entry: 815 %cmp = icmp ugt <32 x i8> %a, %b 816 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 817 ret <32 x i8> %sel 818} 819 820define <32 x i8> @test32(<32 x i8> %a, <32 x i8> %b) { 821; SSE-LABEL: test32: 822; SSE: # %bb.0: # %entry 823; SSE-NEXT: pmaxub %xmm2, %xmm0 824; SSE-NEXT: pmaxub %xmm3, %xmm1 825; SSE-NEXT: retq 826; 827; AVX1-LABEL: test32: 828; AVX1: # %bb.0: # %entry 829; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 830; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 831; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 832; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 833; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 834; AVX1-NEXT: retq 835; 836; AVX2-LABEL: test32: 837; AVX2: # %bb.0: # %entry 838; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 839; AVX2-NEXT: retq 840; 841; AVX512-LABEL: test32: 842; AVX512: # %bb.0: # %entry 843; AVX512-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 844; AVX512-NEXT: retq 845entry: 846 %cmp = icmp uge <32 x i8> %a, %b 847 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 848 ret <32 x i8> %sel 849} 850 851define <16 x i16> @test33(<16 x i16> %a, <16 x i16> %b) { 852; SSE-LABEL: test33: 853; SSE: # %bb.0: # %entry 854; SSE-NEXT: pminsw %xmm2, %xmm0 855; SSE-NEXT: pminsw %xmm3, %xmm1 856; SSE-NEXT: retq 857; 858; AVX1-LABEL: test33: 859; AVX1: # %bb.0: # %entry 860; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 861; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 862; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 863; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 864; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 865; AVX1-NEXT: retq 866; 867; AVX2-LABEL: test33: 868; AVX2: # %bb.0: # %entry 869; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 870; AVX2-NEXT: retq 871; 872; AVX512-LABEL: test33: 873; AVX512: # %bb.0: # %entry 874; AVX512-NEXT: vpminsw %ymm1, %ymm0, %ymm0 875; AVX512-NEXT: retq 876entry: 877 %cmp = icmp slt <16 x i16> %a, %b 878 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 879 ret <16 x i16> %sel 880} 881 882define <16 x i16> @test34(<16 x i16> %a, <16 x i16> %b) { 883; SSE-LABEL: test34: 884; SSE: # %bb.0: # %entry 885; SSE-NEXT: pminsw %xmm2, %xmm0 886; SSE-NEXT: pminsw %xmm3, %xmm1 887; SSE-NEXT: retq 888; 889; AVX1-LABEL: test34: 890; AVX1: # %bb.0: # %entry 891; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 892; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 893; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 894; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 895; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 896; AVX1-NEXT: retq 897; 898; AVX2-LABEL: test34: 899; AVX2: # %bb.0: # %entry 900; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 901; AVX2-NEXT: retq 902; 903; AVX512-LABEL: test34: 904; AVX512: # %bb.0: # %entry 905; AVX512-NEXT: vpminsw %ymm1, %ymm0, %ymm0 906; AVX512-NEXT: retq 907entry: 908 %cmp = icmp sle <16 x i16> %a, %b 909 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 910 ret <16 x i16> %sel 911} 912 913define <16 x i16> @test35(<16 x i16> %a, <16 x i16> %b) { 914; SSE-LABEL: test35: 915; SSE: # %bb.0: # %entry 916; SSE-NEXT: pmaxsw %xmm2, %xmm0 917; SSE-NEXT: pmaxsw %xmm3, %xmm1 918; SSE-NEXT: retq 919; 920; AVX1-LABEL: test35: 921; AVX1: # %bb.0: # %entry 922; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 923; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 924; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 925; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 926; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 927; AVX1-NEXT: retq 928; 929; AVX2-LABEL: test35: 930; AVX2: # %bb.0: # %entry 931; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 932; AVX2-NEXT: retq 933; 934; AVX512-LABEL: test35: 935; AVX512: # %bb.0: # %entry 936; AVX512-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 937; AVX512-NEXT: retq 938entry: 939 %cmp = icmp sgt <16 x i16> %a, %b 940 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 941 ret <16 x i16> %sel 942} 943 944define <16 x i16> @test36(<16 x i16> %a, <16 x i16> %b) { 945; SSE-LABEL: test36: 946; SSE: # %bb.0: # %entry 947; SSE-NEXT: pmaxsw %xmm2, %xmm0 948; SSE-NEXT: pmaxsw %xmm3, %xmm1 949; SSE-NEXT: retq 950; 951; AVX1-LABEL: test36: 952; AVX1: # %bb.0: # %entry 953; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 954; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 955; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 956; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 957; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 958; AVX1-NEXT: retq 959; 960; AVX2-LABEL: test36: 961; AVX2: # %bb.0: # %entry 962; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 963; AVX2-NEXT: retq 964; 965; AVX512-LABEL: test36: 966; AVX512: # %bb.0: # %entry 967; AVX512-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 968; AVX512-NEXT: retq 969entry: 970 %cmp = icmp sge <16 x i16> %a, %b 971 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 972 ret <16 x i16> %sel 973} 974 975define <16 x i16> @test37(<16 x i16> %a, <16 x i16> %b) { 976; SSE2-LABEL: test37: 977; SSE2: # %bb.0: # %entry 978; SSE2-NEXT: movdqa %xmm0, %xmm4 979; SSE2-NEXT: psubusw %xmm2, %xmm4 980; SSE2-NEXT: psubw %xmm4, %xmm0 981; SSE2-NEXT: movdqa %xmm1, %xmm2 982; SSE2-NEXT: psubusw %xmm3, %xmm2 983; SSE2-NEXT: psubw %xmm2, %xmm1 984; SSE2-NEXT: retq 985; 986; SSE4-LABEL: test37: 987; SSE4: # %bb.0: # %entry 988; SSE4-NEXT: pminuw %xmm2, %xmm0 989; SSE4-NEXT: pminuw %xmm3, %xmm1 990; SSE4-NEXT: retq 991; 992; AVX1-LABEL: test37: 993; AVX1: # %bb.0: # %entry 994; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 995; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 996; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 997; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 998; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 999; AVX1-NEXT: retq 1000; 1001; AVX2-LABEL: test37: 1002; AVX2: # %bb.0: # %entry 1003; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1004; AVX2-NEXT: retq 1005; 1006; AVX512-LABEL: test37: 1007; AVX512: # %bb.0: # %entry 1008; AVX512-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1009; AVX512-NEXT: retq 1010entry: 1011 %cmp = icmp ult <16 x i16> %a, %b 1012 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1013 ret <16 x i16> %sel 1014} 1015 1016define <16 x i16> @test38(<16 x i16> %a, <16 x i16> %b) { 1017; SSE2-LABEL: test38: 1018; SSE2: # %bb.0: # %entry 1019; SSE2-NEXT: movdqa %xmm0, %xmm4 1020; SSE2-NEXT: psubusw %xmm2, %xmm4 1021; SSE2-NEXT: psubw %xmm4, %xmm0 1022; SSE2-NEXT: movdqa %xmm1, %xmm2 1023; SSE2-NEXT: psubusw %xmm3, %xmm2 1024; SSE2-NEXT: psubw %xmm2, %xmm1 1025; SSE2-NEXT: retq 1026; 1027; SSE4-LABEL: test38: 1028; SSE4: # %bb.0: # %entry 1029; SSE4-NEXT: pminuw %xmm2, %xmm0 1030; SSE4-NEXT: pminuw %xmm3, %xmm1 1031; SSE4-NEXT: retq 1032; 1033; AVX1-LABEL: test38: 1034; AVX1: # %bb.0: # %entry 1035; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1036; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1037; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 1038; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1039; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1040; AVX1-NEXT: retq 1041; 1042; AVX2-LABEL: test38: 1043; AVX2: # %bb.0: # %entry 1044; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1045; AVX2-NEXT: retq 1046; 1047; AVX512-LABEL: test38: 1048; AVX512: # %bb.0: # %entry 1049; AVX512-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1050; AVX512-NEXT: retq 1051entry: 1052 %cmp = icmp ule <16 x i16> %a, %b 1053 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1054 ret <16 x i16> %sel 1055} 1056 1057define <16 x i16> @test39(<16 x i16> %a, <16 x i16> %b) { 1058; SSE2-LABEL: test39: 1059; SSE2: # %bb.0: # %entry 1060; SSE2-NEXT: psubusw %xmm0, %xmm2 1061; SSE2-NEXT: paddw %xmm2, %xmm0 1062; SSE2-NEXT: psubusw %xmm1, %xmm3 1063; SSE2-NEXT: paddw %xmm3, %xmm1 1064; SSE2-NEXT: retq 1065; 1066; SSE4-LABEL: test39: 1067; SSE4: # %bb.0: # %entry 1068; SSE4-NEXT: pmaxuw %xmm2, %xmm0 1069; SSE4-NEXT: pmaxuw %xmm3, %xmm1 1070; SSE4-NEXT: retq 1071; 1072; AVX1-LABEL: test39: 1073; AVX1: # %bb.0: # %entry 1074; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1075; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1076; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 1077; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1078; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1079; AVX1-NEXT: retq 1080; 1081; AVX2-LABEL: test39: 1082; AVX2: # %bb.0: # %entry 1083; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1084; AVX2-NEXT: retq 1085; 1086; AVX512-LABEL: test39: 1087; AVX512: # %bb.0: # %entry 1088; AVX512-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1089; AVX512-NEXT: retq 1090entry: 1091 %cmp = icmp ugt <16 x i16> %a, %b 1092 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1093 ret <16 x i16> %sel 1094} 1095 1096define <16 x i16> @test40(<16 x i16> %a, <16 x i16> %b) { 1097; SSE2-LABEL: test40: 1098; SSE2: # %bb.0: # %entry 1099; SSE2-NEXT: psubusw %xmm0, %xmm2 1100; SSE2-NEXT: paddw %xmm2, %xmm0 1101; SSE2-NEXT: psubusw %xmm1, %xmm3 1102; SSE2-NEXT: paddw %xmm3, %xmm1 1103; SSE2-NEXT: retq 1104; 1105; SSE4-LABEL: test40: 1106; SSE4: # %bb.0: # %entry 1107; SSE4-NEXT: pmaxuw %xmm2, %xmm0 1108; SSE4-NEXT: pmaxuw %xmm3, %xmm1 1109; SSE4-NEXT: retq 1110; 1111; AVX1-LABEL: test40: 1112; AVX1: # %bb.0: # %entry 1113; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1114; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1115; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 1116; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1117; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1118; AVX1-NEXT: retq 1119; 1120; AVX2-LABEL: test40: 1121; AVX2: # %bb.0: # %entry 1122; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1123; AVX2-NEXT: retq 1124; 1125; AVX512-LABEL: test40: 1126; AVX512: # %bb.0: # %entry 1127; AVX512-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1128; AVX512-NEXT: retq 1129entry: 1130 %cmp = icmp uge <16 x i16> %a, %b 1131 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1132 ret <16 x i16> %sel 1133} 1134 1135define <8 x i32> @test41(<8 x i32> %a, <8 x i32> %b) { 1136; SSE2-LABEL: test41: 1137; SSE2: # %bb.0: # %entry 1138; SSE2-NEXT: movdqa %xmm2, %xmm4 1139; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 1140; SSE2-NEXT: pand %xmm4, %xmm0 1141; SSE2-NEXT: pandn %xmm2, %xmm4 1142; SSE2-NEXT: por %xmm4, %xmm0 1143; SSE2-NEXT: movdqa %xmm3, %xmm2 1144; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 1145; SSE2-NEXT: pand %xmm2, %xmm1 1146; SSE2-NEXT: pandn %xmm3, %xmm2 1147; SSE2-NEXT: por %xmm2, %xmm1 1148; SSE2-NEXT: retq 1149; 1150; SSE4-LABEL: test41: 1151; SSE4: # %bb.0: # %entry 1152; SSE4-NEXT: pminsd %xmm2, %xmm0 1153; SSE4-NEXT: pminsd %xmm3, %xmm1 1154; SSE4-NEXT: retq 1155; 1156; AVX1-LABEL: test41: 1157; AVX1: # %bb.0: # %entry 1158; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1159; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1160; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 1161; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1162; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1163; AVX1-NEXT: retq 1164; 1165; AVX2-LABEL: test41: 1166; AVX2: # %bb.0: # %entry 1167; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1168; AVX2-NEXT: retq 1169; 1170; AVX512-LABEL: test41: 1171; AVX512: # %bb.0: # %entry 1172; AVX512-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1173; AVX512-NEXT: retq 1174entry: 1175 %cmp = icmp slt <8 x i32> %a, %b 1176 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1177 ret <8 x i32> %sel 1178} 1179 1180define <8 x i32> @test42(<8 x i32> %a, <8 x i32> %b) { 1181; SSE2-LABEL: test42: 1182; SSE2: # %bb.0: # %entry 1183; SSE2-NEXT: movdqa %xmm2, %xmm4 1184; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 1185; SSE2-NEXT: pand %xmm4, %xmm0 1186; SSE2-NEXT: pandn %xmm2, %xmm4 1187; SSE2-NEXT: por %xmm4, %xmm0 1188; SSE2-NEXT: movdqa %xmm3, %xmm2 1189; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 1190; SSE2-NEXT: pand %xmm2, %xmm1 1191; SSE2-NEXT: pandn %xmm3, %xmm2 1192; SSE2-NEXT: por %xmm2, %xmm1 1193; SSE2-NEXT: retq 1194; 1195; SSE4-LABEL: test42: 1196; SSE4: # %bb.0: # %entry 1197; SSE4-NEXT: pminsd %xmm2, %xmm0 1198; SSE4-NEXT: pminsd %xmm3, %xmm1 1199; SSE4-NEXT: retq 1200; 1201; AVX1-LABEL: test42: 1202; AVX1: # %bb.0: # %entry 1203; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1204; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1205; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 1206; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1207; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1208; AVX1-NEXT: retq 1209; 1210; AVX2-LABEL: test42: 1211; AVX2: # %bb.0: # %entry 1212; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1213; AVX2-NEXT: retq 1214; 1215; AVX512-LABEL: test42: 1216; AVX512: # %bb.0: # %entry 1217; AVX512-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1218; AVX512-NEXT: retq 1219entry: 1220 %cmp = icmp sle <8 x i32> %a, %b 1221 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1222 ret <8 x i32> %sel 1223} 1224 1225define <8 x i32> @test43(<8 x i32> %a, <8 x i32> %b) { 1226; SSE2-LABEL: test43: 1227; SSE2: # %bb.0: # %entry 1228; SSE2-NEXT: movdqa %xmm0, %xmm4 1229; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 1230; SSE2-NEXT: pand %xmm4, %xmm0 1231; SSE2-NEXT: pandn %xmm2, %xmm4 1232; SSE2-NEXT: por %xmm0, %xmm4 1233; SSE2-NEXT: movdqa %xmm1, %xmm2 1234; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 1235; SSE2-NEXT: pand %xmm2, %xmm1 1236; SSE2-NEXT: pandn %xmm3, %xmm2 1237; SSE2-NEXT: por %xmm1, %xmm2 1238; SSE2-NEXT: movdqa %xmm4, %xmm0 1239; SSE2-NEXT: movdqa %xmm2, %xmm1 1240; SSE2-NEXT: retq 1241; 1242; SSE4-LABEL: test43: 1243; SSE4: # %bb.0: # %entry 1244; SSE4-NEXT: pmaxsd %xmm2, %xmm0 1245; SSE4-NEXT: pmaxsd %xmm3, %xmm1 1246; SSE4-NEXT: retq 1247; 1248; AVX1-LABEL: test43: 1249; AVX1: # %bb.0: # %entry 1250; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1251; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1252; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 1253; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1254; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1255; AVX1-NEXT: retq 1256; 1257; AVX2-LABEL: test43: 1258; AVX2: # %bb.0: # %entry 1259; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1260; AVX2-NEXT: retq 1261; 1262; AVX512-LABEL: test43: 1263; AVX512: # %bb.0: # %entry 1264; AVX512-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1265; AVX512-NEXT: retq 1266entry: 1267 %cmp = icmp sgt <8 x i32> %a, %b 1268 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1269 ret <8 x i32> %sel 1270} 1271 1272define <8 x i32> @test44(<8 x i32> %a, <8 x i32> %b) { 1273; SSE2-LABEL: test44: 1274; SSE2: # %bb.0: # %entry 1275; SSE2-NEXT: movdqa %xmm0, %xmm4 1276; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 1277; SSE2-NEXT: pand %xmm4, %xmm0 1278; SSE2-NEXT: pandn %xmm2, %xmm4 1279; SSE2-NEXT: por %xmm0, %xmm4 1280; SSE2-NEXT: movdqa %xmm1, %xmm2 1281; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 1282; SSE2-NEXT: pand %xmm2, %xmm1 1283; SSE2-NEXT: pandn %xmm3, %xmm2 1284; SSE2-NEXT: por %xmm1, %xmm2 1285; SSE2-NEXT: movdqa %xmm4, %xmm0 1286; SSE2-NEXT: movdqa %xmm2, %xmm1 1287; SSE2-NEXT: retq 1288; 1289; SSE4-LABEL: test44: 1290; SSE4: # %bb.0: # %entry 1291; SSE4-NEXT: pmaxsd %xmm2, %xmm0 1292; SSE4-NEXT: pmaxsd %xmm3, %xmm1 1293; SSE4-NEXT: retq 1294; 1295; AVX1-LABEL: test44: 1296; AVX1: # %bb.0: # %entry 1297; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1298; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1299; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 1300; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1301; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1302; AVX1-NEXT: retq 1303; 1304; AVX2-LABEL: test44: 1305; AVX2: # %bb.0: # %entry 1306; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1307; AVX2-NEXT: retq 1308; 1309; AVX512-LABEL: test44: 1310; AVX512: # %bb.0: # %entry 1311; AVX512-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1312; AVX512-NEXT: retq 1313entry: 1314 %cmp = icmp sge <8 x i32> %a, %b 1315 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1316 ret <8 x i32> %sel 1317} 1318 1319define <8 x i32> @test45(<8 x i32> %a, <8 x i32> %b) { 1320; SSE2-LABEL: test45: 1321; SSE2: # %bb.0: # %entry 1322; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 1323; SSE2-NEXT: movdqa %xmm0, %xmm5 1324; SSE2-NEXT: pxor %xmm4, %xmm5 1325; SSE2-NEXT: movdqa %xmm2, %xmm6 1326; SSE2-NEXT: pxor %xmm4, %xmm6 1327; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 1328; SSE2-NEXT: pand %xmm6, %xmm0 1329; SSE2-NEXT: pandn %xmm2, %xmm6 1330; SSE2-NEXT: por %xmm6, %xmm0 1331; SSE2-NEXT: movdqa %xmm1, %xmm2 1332; SSE2-NEXT: pxor %xmm4, %xmm2 1333; SSE2-NEXT: pxor %xmm3, %xmm4 1334; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 1335; SSE2-NEXT: pand %xmm4, %xmm1 1336; SSE2-NEXT: pandn %xmm3, %xmm4 1337; SSE2-NEXT: por %xmm4, %xmm1 1338; SSE2-NEXT: retq 1339; 1340; SSE4-LABEL: test45: 1341; SSE4: # %bb.0: # %entry 1342; SSE4-NEXT: pminud %xmm2, %xmm0 1343; SSE4-NEXT: pminud %xmm3, %xmm1 1344; SSE4-NEXT: retq 1345; 1346; AVX1-LABEL: test45: 1347; AVX1: # %bb.0: # %entry 1348; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1349; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1350; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 1351; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 1352; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1353; AVX1-NEXT: retq 1354; 1355; AVX2-LABEL: test45: 1356; AVX2: # %bb.0: # %entry 1357; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 1358; AVX2-NEXT: retq 1359; 1360; AVX512-LABEL: test45: 1361; AVX512: # %bb.0: # %entry 1362; AVX512-NEXT: vpminud %ymm1, %ymm0, %ymm0 1363; AVX512-NEXT: retq 1364entry: 1365 %cmp = icmp ult <8 x i32> %a, %b 1366 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1367 ret <8 x i32> %sel 1368} 1369 1370define <8 x i32> @test46(<8 x i32> %a, <8 x i32> %b) { 1371; SSE2-LABEL: test46: 1372; SSE2: # %bb.0: # %entry 1373; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 1374; SSE2-NEXT: movdqa %xmm0, %xmm5 1375; SSE2-NEXT: pxor %xmm4, %xmm5 1376; SSE2-NEXT: movdqa %xmm2, %xmm6 1377; SSE2-NEXT: pxor %xmm4, %xmm6 1378; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 1379; SSE2-NEXT: pand %xmm6, %xmm0 1380; SSE2-NEXT: pandn %xmm2, %xmm6 1381; SSE2-NEXT: por %xmm6, %xmm0 1382; SSE2-NEXT: movdqa %xmm1, %xmm2 1383; SSE2-NEXT: pxor %xmm4, %xmm2 1384; SSE2-NEXT: pxor %xmm3, %xmm4 1385; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 1386; SSE2-NEXT: pand %xmm4, %xmm1 1387; SSE2-NEXT: pandn %xmm3, %xmm4 1388; SSE2-NEXT: por %xmm4, %xmm1 1389; SSE2-NEXT: retq 1390; 1391; SSE4-LABEL: test46: 1392; SSE4: # %bb.0: # %entry 1393; SSE4-NEXT: pminud %xmm2, %xmm0 1394; SSE4-NEXT: pminud %xmm3, %xmm1 1395; SSE4-NEXT: retq 1396; 1397; AVX1-LABEL: test46: 1398; AVX1: # %bb.0: # %entry 1399; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1400; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1401; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 1402; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 1403; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1404; AVX1-NEXT: retq 1405; 1406; AVX2-LABEL: test46: 1407; AVX2: # %bb.0: # %entry 1408; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 1409; AVX2-NEXT: retq 1410; 1411; AVX512-LABEL: test46: 1412; AVX512: # %bb.0: # %entry 1413; AVX512-NEXT: vpminud %ymm1, %ymm0, %ymm0 1414; AVX512-NEXT: retq 1415entry: 1416 %cmp = icmp ule <8 x i32> %a, %b 1417 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1418 ret <8 x i32> %sel 1419} 1420 1421define <8 x i32> @test47(<8 x i32> %a, <8 x i32> %b) { 1422; SSE2-LABEL: test47: 1423; SSE2: # %bb.0: # %entry 1424; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 1425; SSE2-NEXT: movdqa %xmm2, %xmm6 1426; SSE2-NEXT: pxor %xmm5, %xmm6 1427; SSE2-NEXT: movdqa %xmm0, %xmm4 1428; SSE2-NEXT: pxor %xmm5, %xmm4 1429; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 1430; SSE2-NEXT: pand %xmm4, %xmm0 1431; SSE2-NEXT: pandn %xmm2, %xmm4 1432; SSE2-NEXT: por %xmm0, %xmm4 1433; SSE2-NEXT: movdqa %xmm3, %xmm0 1434; SSE2-NEXT: pxor %xmm5, %xmm0 1435; SSE2-NEXT: pxor %xmm1, %xmm5 1436; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 1437; SSE2-NEXT: pand %xmm5, %xmm1 1438; SSE2-NEXT: pandn %xmm3, %xmm5 1439; SSE2-NEXT: por %xmm5, %xmm1 1440; SSE2-NEXT: movdqa %xmm4, %xmm0 1441; SSE2-NEXT: retq 1442; 1443; SSE4-LABEL: test47: 1444; SSE4: # %bb.0: # %entry 1445; SSE4-NEXT: pmaxud %xmm2, %xmm0 1446; SSE4-NEXT: pmaxud %xmm3, %xmm1 1447; SSE4-NEXT: retq 1448; 1449; AVX1-LABEL: test47: 1450; AVX1: # %bb.0: # %entry 1451; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1452; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1453; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 1454; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 1455; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1456; AVX1-NEXT: retq 1457; 1458; AVX2-LABEL: test47: 1459; AVX2: # %bb.0: # %entry 1460; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1461; AVX2-NEXT: retq 1462; 1463; AVX512-LABEL: test47: 1464; AVX512: # %bb.0: # %entry 1465; AVX512-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1466; AVX512-NEXT: retq 1467entry: 1468 %cmp = icmp ugt <8 x i32> %a, %b 1469 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1470 ret <8 x i32> %sel 1471} 1472 1473define <8 x i32> @test48(<8 x i32> %a, <8 x i32> %b) { 1474; SSE2-LABEL: test48: 1475; SSE2: # %bb.0: # %entry 1476; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 1477; SSE2-NEXT: movdqa %xmm2, %xmm6 1478; SSE2-NEXT: pxor %xmm5, %xmm6 1479; SSE2-NEXT: movdqa %xmm0, %xmm4 1480; SSE2-NEXT: pxor %xmm5, %xmm4 1481; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 1482; SSE2-NEXT: pand %xmm4, %xmm0 1483; SSE2-NEXT: pandn %xmm2, %xmm4 1484; SSE2-NEXT: por %xmm0, %xmm4 1485; SSE2-NEXT: movdqa %xmm3, %xmm0 1486; SSE2-NEXT: pxor %xmm5, %xmm0 1487; SSE2-NEXT: pxor %xmm1, %xmm5 1488; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 1489; SSE2-NEXT: pand %xmm5, %xmm1 1490; SSE2-NEXT: pandn %xmm3, %xmm5 1491; SSE2-NEXT: por %xmm5, %xmm1 1492; SSE2-NEXT: movdqa %xmm4, %xmm0 1493; SSE2-NEXT: retq 1494; 1495; SSE4-LABEL: test48: 1496; SSE4: # %bb.0: # %entry 1497; SSE4-NEXT: pmaxud %xmm2, %xmm0 1498; SSE4-NEXT: pmaxud %xmm3, %xmm1 1499; SSE4-NEXT: retq 1500; 1501; AVX1-LABEL: test48: 1502; AVX1: # %bb.0: # %entry 1503; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1504; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1505; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 1506; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 1507; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1508; AVX1-NEXT: retq 1509; 1510; AVX2-LABEL: test48: 1511; AVX2: # %bb.0: # %entry 1512; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1513; AVX2-NEXT: retq 1514; 1515; AVX512-LABEL: test48: 1516; AVX512: # %bb.0: # %entry 1517; AVX512-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1518; AVX512-NEXT: retq 1519entry: 1520 %cmp = icmp uge <8 x i32> %a, %b 1521 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1522 ret <8 x i32> %sel 1523} 1524 1525define <16 x i8> @test49(<16 x i8> %a, <16 x i8> %b) { 1526; SSE2-LABEL: test49: 1527; SSE2: # %bb.0: # %entry 1528; SSE2-NEXT: movdqa %xmm0, %xmm2 1529; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 1530; SSE2-NEXT: pand %xmm2, %xmm0 1531; SSE2-NEXT: pandn %xmm1, %xmm2 1532; SSE2-NEXT: por %xmm0, %xmm2 1533; SSE2-NEXT: movdqa %xmm2, %xmm0 1534; SSE2-NEXT: retq 1535; 1536; SSE4-LABEL: test49: 1537; SSE4: # %bb.0: # %entry 1538; SSE4-NEXT: pmaxsb %xmm1, %xmm0 1539; SSE4-NEXT: retq 1540; 1541; AVX-LABEL: test49: 1542; AVX: # %bb.0: # %entry 1543; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 1544; AVX-NEXT: retq 1545entry: 1546 %cmp = icmp slt <16 x i8> %a, %b 1547 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1548 ret <16 x i8> %sel 1549} 1550 1551define <16 x i8> @test50(<16 x i8> %a, <16 x i8> %b) { 1552; SSE2-LABEL: test50: 1553; SSE2: # %bb.0: # %entry 1554; SSE2-NEXT: movdqa %xmm0, %xmm2 1555; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 1556; SSE2-NEXT: pand %xmm2, %xmm0 1557; SSE2-NEXT: pandn %xmm1, %xmm2 1558; SSE2-NEXT: por %xmm0, %xmm2 1559; SSE2-NEXT: movdqa %xmm2, %xmm0 1560; SSE2-NEXT: retq 1561; 1562; SSE4-LABEL: test50: 1563; SSE4: # %bb.0: # %entry 1564; SSE4-NEXT: pmaxsb %xmm1, %xmm0 1565; SSE4-NEXT: retq 1566; 1567; AVX-LABEL: test50: 1568; AVX: # %bb.0: # %entry 1569; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 1570; AVX-NEXT: retq 1571entry: 1572 %cmp = icmp sle <16 x i8> %a, %b 1573 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1574 ret <16 x i8> %sel 1575} 1576 1577define <16 x i8> @test51(<16 x i8> %a, <16 x i8> %b) { 1578; SSE2-LABEL: test51: 1579; SSE2: # %bb.0: # %entry 1580; SSE2-NEXT: movdqa %xmm1, %xmm2 1581; SSE2-NEXT: pcmpgtb %xmm0, %xmm2 1582; SSE2-NEXT: pand %xmm2, %xmm0 1583; SSE2-NEXT: pandn %xmm1, %xmm2 1584; SSE2-NEXT: por %xmm2, %xmm0 1585; SSE2-NEXT: retq 1586; 1587; SSE4-LABEL: test51: 1588; SSE4: # %bb.0: # %entry 1589; SSE4-NEXT: pminsb %xmm1, %xmm0 1590; SSE4-NEXT: retq 1591; 1592; AVX-LABEL: test51: 1593; AVX: # %bb.0: # %entry 1594; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0 1595; AVX-NEXT: retq 1596entry: 1597 %cmp = icmp sgt <16 x i8> %a, %b 1598 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1599 ret <16 x i8> %sel 1600} 1601 1602define <16 x i8> @test52(<16 x i8> %a, <16 x i8> %b) { 1603; SSE2-LABEL: test52: 1604; SSE2: # %bb.0: # %entry 1605; SSE2-NEXT: movdqa %xmm1, %xmm2 1606; SSE2-NEXT: pcmpgtb %xmm0, %xmm2 1607; SSE2-NEXT: pand %xmm2, %xmm0 1608; SSE2-NEXT: pandn %xmm1, %xmm2 1609; SSE2-NEXT: por %xmm2, %xmm0 1610; SSE2-NEXT: retq 1611; 1612; SSE4-LABEL: test52: 1613; SSE4: # %bb.0: # %entry 1614; SSE4-NEXT: pminsb %xmm1, %xmm0 1615; SSE4-NEXT: retq 1616; 1617; AVX-LABEL: test52: 1618; AVX: # %bb.0: # %entry 1619; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0 1620; AVX-NEXT: retq 1621entry: 1622 %cmp = icmp sge <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> @test53(<16 x i8> %a, <16 x i8> %b) { 1628; SSE-LABEL: test53: 1629; SSE: # %bb.0: # %entry 1630; SSE-NEXT: pmaxub %xmm1, %xmm0 1631; SSE-NEXT: retq 1632; 1633; AVX-LABEL: test53: 1634; AVX: # %bb.0: # %entry 1635; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 1636; AVX-NEXT: retq 1637entry: 1638 %cmp = icmp ult <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> @test54(<16 x i8> %a, <16 x i8> %b) { 1644; SSE-LABEL: test54: 1645; SSE: # %bb.0: # %entry 1646; SSE-NEXT: pmaxub %xmm1, %xmm0 1647; SSE-NEXT: retq 1648; 1649; AVX-LABEL: test54: 1650; AVX: # %bb.0: # %entry 1651; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 1652; AVX-NEXT: retq 1653entry: 1654 %cmp = icmp ule <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> @test55(<16 x i8> %a, <16 x i8> %b) { 1660; SSE-LABEL: test55: 1661; SSE: # %bb.0: # %entry 1662; SSE-NEXT: pminub %xmm1, %xmm0 1663; SSE-NEXT: retq 1664; 1665; AVX-LABEL: test55: 1666; AVX: # %bb.0: # %entry 1667; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 1668; AVX-NEXT: retq 1669entry: 1670 %cmp = icmp ugt <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 <16 x i8> @test56(<16 x i8> %a, <16 x i8> %b) { 1676; SSE-LABEL: test56: 1677; SSE: # %bb.0: # %entry 1678; SSE-NEXT: pminub %xmm1, %xmm0 1679; SSE-NEXT: retq 1680; 1681; AVX-LABEL: test56: 1682; AVX: # %bb.0: # %entry 1683; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 1684; AVX-NEXT: retq 1685entry: 1686 %cmp = icmp uge <16 x i8> %a, %b 1687 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1688 ret <16 x i8> %sel 1689} 1690 1691define <8 x i16> @test57(<8 x i16> %a, <8 x i16> %b) { 1692; SSE-LABEL: test57: 1693; SSE: # %bb.0: # %entry 1694; SSE-NEXT: pmaxsw %xmm1, %xmm0 1695; SSE-NEXT: retq 1696; 1697; AVX-LABEL: test57: 1698; AVX: # %bb.0: # %entry 1699; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 1700; AVX-NEXT: retq 1701entry: 1702 %cmp = icmp slt <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> @test58(<8 x i16> %a, <8 x i16> %b) { 1708; SSE-LABEL: test58: 1709; SSE: # %bb.0: # %entry 1710; SSE-NEXT: pmaxsw %xmm1, %xmm0 1711; SSE-NEXT: retq 1712; 1713; AVX-LABEL: test58: 1714; AVX: # %bb.0: # %entry 1715; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 1716; AVX-NEXT: retq 1717entry: 1718 %cmp = icmp sle <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> @test59(<8 x i16> %a, <8 x i16> %b) { 1724; SSE-LABEL: test59: 1725; SSE: # %bb.0: # %entry 1726; SSE-NEXT: pminsw %xmm1, %xmm0 1727; SSE-NEXT: retq 1728; 1729; AVX-LABEL: test59: 1730; AVX: # %bb.0: # %entry 1731; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 1732; AVX-NEXT: retq 1733entry: 1734 %cmp = icmp sgt <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> @test60(<8 x i16> %a, <8 x i16> %b) { 1740; SSE-LABEL: test60: 1741; SSE: # %bb.0: # %entry 1742; SSE-NEXT: pminsw %xmm1, %xmm0 1743; SSE-NEXT: retq 1744; 1745; AVX-LABEL: test60: 1746; AVX: # %bb.0: # %entry 1747; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 1748; AVX-NEXT: retq 1749entry: 1750 %cmp = icmp sge <8 x i16> %a, %b 1751 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1752 ret <8 x i16> %sel 1753} 1754 1755define <8 x i16> @test61(<8 x i16> %a, <8 x i16> %b) { 1756; SSE2-LABEL: test61: 1757; SSE2: # %bb.0: # %entry 1758; SSE2-NEXT: psubusw %xmm0, %xmm1 1759; SSE2-NEXT: paddw %xmm1, %xmm0 1760; SSE2-NEXT: retq 1761; 1762; SSE4-LABEL: test61: 1763; SSE4: # %bb.0: # %entry 1764; SSE4-NEXT: pmaxuw %xmm1, %xmm0 1765; SSE4-NEXT: retq 1766; 1767; AVX-LABEL: test61: 1768; AVX: # %bb.0: # %entry 1769; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1770; AVX-NEXT: retq 1771entry: 1772 %cmp = icmp ult <8 x i16> %a, %b 1773 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1774 ret <8 x i16> %sel 1775} 1776 1777define <8 x i16> @test62(<8 x i16> %a, <8 x i16> %b) { 1778; SSE2-LABEL: test62: 1779; SSE2: # %bb.0: # %entry 1780; SSE2-NEXT: psubusw %xmm0, %xmm1 1781; SSE2-NEXT: paddw %xmm1, %xmm0 1782; SSE2-NEXT: retq 1783; 1784; SSE4-LABEL: test62: 1785; SSE4: # %bb.0: # %entry 1786; SSE4-NEXT: pmaxuw %xmm1, %xmm0 1787; SSE4-NEXT: retq 1788; 1789; AVX-LABEL: test62: 1790; AVX: # %bb.0: # %entry 1791; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1792; AVX-NEXT: retq 1793entry: 1794 %cmp = icmp ule <8 x i16> %a, %b 1795 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1796 ret <8 x i16> %sel 1797} 1798 1799define <8 x i16> @test63(<8 x i16> %a, <8 x i16> %b) { 1800; SSE2-LABEL: test63: 1801; SSE2: # %bb.0: # %entry 1802; SSE2-NEXT: movdqa %xmm0, %xmm2 1803; SSE2-NEXT: psubusw %xmm1, %xmm2 1804; SSE2-NEXT: psubw %xmm2, %xmm0 1805; SSE2-NEXT: retq 1806; 1807; SSE4-LABEL: test63: 1808; SSE4: # %bb.0: # %entry 1809; SSE4-NEXT: pminuw %xmm1, %xmm0 1810; SSE4-NEXT: retq 1811; 1812; AVX-LABEL: test63: 1813; AVX: # %bb.0: # %entry 1814; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1815; AVX-NEXT: retq 1816entry: 1817 %cmp = icmp ugt <8 x i16> %a, %b 1818 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1819 ret <8 x i16> %sel 1820} 1821 1822define <8 x i16> @test64(<8 x i16> %a, <8 x i16> %b) { 1823; SSE2-LABEL: test64: 1824; SSE2: # %bb.0: # %entry 1825; SSE2-NEXT: movdqa %xmm0, %xmm2 1826; SSE2-NEXT: psubusw %xmm1, %xmm2 1827; SSE2-NEXT: psubw %xmm2, %xmm0 1828; SSE2-NEXT: retq 1829; 1830; SSE4-LABEL: test64: 1831; SSE4: # %bb.0: # %entry 1832; SSE4-NEXT: pminuw %xmm1, %xmm0 1833; SSE4-NEXT: retq 1834; 1835; AVX-LABEL: test64: 1836; AVX: # %bb.0: # %entry 1837; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1838; AVX-NEXT: retq 1839entry: 1840 %cmp = icmp uge <8 x i16> %a, %b 1841 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1842 ret <8 x i16> %sel 1843} 1844 1845define <4 x i32> @test65(<4 x i32> %a, <4 x i32> %b) { 1846; SSE2-LABEL: test65: 1847; SSE2: # %bb.0: # %entry 1848; SSE2-NEXT: movdqa %xmm0, %xmm2 1849; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 1850; SSE2-NEXT: pand %xmm2, %xmm0 1851; SSE2-NEXT: pandn %xmm1, %xmm2 1852; SSE2-NEXT: por %xmm0, %xmm2 1853; SSE2-NEXT: movdqa %xmm2, %xmm0 1854; SSE2-NEXT: retq 1855; 1856; SSE4-LABEL: test65: 1857; SSE4: # %bb.0: # %entry 1858; SSE4-NEXT: pmaxsd %xmm1, %xmm0 1859; SSE4-NEXT: retq 1860; 1861; AVX-LABEL: test65: 1862; AVX: # %bb.0: # %entry 1863; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1864; AVX-NEXT: retq 1865entry: 1866 %cmp = icmp slt <4 x i32> %a, %b 1867 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 1868 ret <4 x i32> %sel 1869} 1870 1871define <4 x i32> @test66(<4 x i32> %a, <4 x i32> %b) { 1872; SSE2-LABEL: test66: 1873; SSE2: # %bb.0: # %entry 1874; SSE2-NEXT: movdqa %xmm0, %xmm2 1875; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 1876; SSE2-NEXT: pand %xmm2, %xmm0 1877; SSE2-NEXT: pandn %xmm1, %xmm2 1878; SSE2-NEXT: por %xmm0, %xmm2 1879; SSE2-NEXT: movdqa %xmm2, %xmm0 1880; SSE2-NEXT: retq 1881; 1882; SSE4-LABEL: test66: 1883; SSE4: # %bb.0: # %entry 1884; SSE4-NEXT: pmaxsd %xmm1, %xmm0 1885; SSE4-NEXT: retq 1886; 1887; AVX-LABEL: test66: 1888; AVX: # %bb.0: # %entry 1889; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1890; AVX-NEXT: retq 1891entry: 1892 %cmp = icmp sle <4 x i32> %a, %b 1893 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 1894 ret <4 x i32> %sel 1895} 1896 1897define <4 x i32> @test67(<4 x i32> %a, <4 x i32> %b) { 1898; SSE2-LABEL: test67: 1899; SSE2: # %bb.0: # %entry 1900; SSE2-NEXT: movdqa %xmm1, %xmm2 1901; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 1902; SSE2-NEXT: pand %xmm2, %xmm0 1903; SSE2-NEXT: pandn %xmm1, %xmm2 1904; SSE2-NEXT: por %xmm2, %xmm0 1905; SSE2-NEXT: retq 1906; 1907; SSE4-LABEL: test67: 1908; SSE4: # %bb.0: # %entry 1909; SSE4-NEXT: pminsd %xmm1, %xmm0 1910; SSE4-NEXT: retq 1911; 1912; AVX-LABEL: test67: 1913; AVX: # %bb.0: # %entry 1914; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1915; AVX-NEXT: retq 1916entry: 1917 %cmp = icmp sgt <4 x i32> %a, %b 1918 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 1919 ret <4 x i32> %sel 1920} 1921 1922define <4 x i32> @test68(<4 x i32> %a, <4 x i32> %b) { 1923; SSE2-LABEL: test68: 1924; SSE2: # %bb.0: # %entry 1925; SSE2-NEXT: movdqa %xmm1, %xmm2 1926; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 1927; SSE2-NEXT: pand %xmm2, %xmm0 1928; SSE2-NEXT: pandn %xmm1, %xmm2 1929; SSE2-NEXT: por %xmm2, %xmm0 1930; SSE2-NEXT: retq 1931; 1932; SSE4-LABEL: test68: 1933; SSE4: # %bb.0: # %entry 1934; SSE4-NEXT: pminsd %xmm1, %xmm0 1935; SSE4-NEXT: retq 1936; 1937; AVX-LABEL: test68: 1938; AVX: # %bb.0: # %entry 1939; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1940; AVX-NEXT: retq 1941entry: 1942 %cmp = icmp sge <4 x i32> %a, %b 1943 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 1944 ret <4 x i32> %sel 1945} 1946 1947define <4 x i32> @test69(<4 x i32> %a, <4 x i32> %b) { 1948; SSE2-LABEL: test69: 1949; SSE2: # %bb.0: # %entry 1950; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 1951; SSE2-NEXT: movdqa %xmm1, %xmm3 1952; SSE2-NEXT: pxor %xmm2, %xmm3 1953; SSE2-NEXT: pxor %xmm0, %xmm2 1954; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 1955; SSE2-NEXT: pand %xmm2, %xmm0 1956; SSE2-NEXT: pandn %xmm1, %xmm2 1957; SSE2-NEXT: por %xmm2, %xmm0 1958; SSE2-NEXT: retq 1959; 1960; SSE4-LABEL: test69: 1961; SSE4: # %bb.0: # %entry 1962; SSE4-NEXT: pmaxud %xmm1, %xmm0 1963; SSE4-NEXT: retq 1964; 1965; AVX-LABEL: test69: 1966; AVX: # %bb.0: # %entry 1967; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 1968; AVX-NEXT: retq 1969entry: 1970 %cmp = icmp ult <4 x i32> %a, %b 1971 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 1972 ret <4 x i32> %sel 1973} 1974 1975define <4 x i32> @test70(<4 x i32> %a, <4 x i32> %b) { 1976; SSE2-LABEL: test70: 1977; SSE2: # %bb.0: # %entry 1978; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 1979; SSE2-NEXT: movdqa %xmm1, %xmm3 1980; SSE2-NEXT: pxor %xmm2, %xmm3 1981; SSE2-NEXT: pxor %xmm0, %xmm2 1982; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 1983; SSE2-NEXT: pand %xmm2, %xmm0 1984; SSE2-NEXT: pandn %xmm1, %xmm2 1985; SSE2-NEXT: por %xmm2, %xmm0 1986; SSE2-NEXT: retq 1987; 1988; SSE4-LABEL: test70: 1989; SSE4: # %bb.0: # %entry 1990; SSE4-NEXT: pmaxud %xmm1, %xmm0 1991; SSE4-NEXT: retq 1992; 1993; AVX-LABEL: test70: 1994; AVX: # %bb.0: # %entry 1995; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 1996; AVX-NEXT: retq 1997entry: 1998 %cmp = icmp ule <4 x i32> %a, %b 1999 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2000 ret <4 x i32> %sel 2001} 2002 2003define <4 x i32> @test71(<4 x i32> %a, <4 x i32> %b) { 2004; SSE2-LABEL: test71: 2005; SSE2: # %bb.0: # %entry 2006; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 2007; SSE2-NEXT: movdqa %xmm0, %xmm3 2008; SSE2-NEXT: pxor %xmm2, %xmm3 2009; SSE2-NEXT: pxor %xmm1, %xmm2 2010; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2011; SSE2-NEXT: pand %xmm2, %xmm0 2012; SSE2-NEXT: pandn %xmm1, %xmm2 2013; SSE2-NEXT: por %xmm2, %xmm0 2014; SSE2-NEXT: retq 2015; 2016; SSE4-LABEL: test71: 2017; SSE4: # %bb.0: # %entry 2018; SSE4-NEXT: pminud %xmm1, %xmm0 2019; SSE4-NEXT: retq 2020; 2021; AVX-LABEL: test71: 2022; AVX: # %bb.0: # %entry 2023; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 2024; AVX-NEXT: retq 2025entry: 2026 %cmp = icmp ugt <4 x i32> %a, %b 2027 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2028 ret <4 x i32> %sel 2029} 2030 2031define <4 x i32> @test72(<4 x i32> %a, <4 x i32> %b) { 2032; SSE2-LABEL: test72: 2033; SSE2: # %bb.0: # %entry 2034; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 2035; SSE2-NEXT: movdqa %xmm0, %xmm3 2036; SSE2-NEXT: pxor %xmm2, %xmm3 2037; SSE2-NEXT: pxor %xmm1, %xmm2 2038; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2039; SSE2-NEXT: pand %xmm2, %xmm0 2040; SSE2-NEXT: pandn %xmm1, %xmm2 2041; SSE2-NEXT: por %xmm2, %xmm0 2042; SSE2-NEXT: retq 2043; 2044; SSE4-LABEL: test72: 2045; SSE4: # %bb.0: # %entry 2046; SSE4-NEXT: pminud %xmm1, %xmm0 2047; SSE4-NEXT: retq 2048; 2049; AVX-LABEL: test72: 2050; AVX: # %bb.0: # %entry 2051; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 2052; AVX-NEXT: retq 2053entry: 2054 %cmp = icmp uge <4 x i32> %a, %b 2055 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2056 ret <4 x i32> %sel 2057} 2058 2059define <32 x i8> @test73(<32 x i8> %a, <32 x i8> %b) { 2060; SSE2-LABEL: test73: 2061; SSE2: # %bb.0: # %entry 2062; SSE2-NEXT: movdqa %xmm0, %xmm4 2063; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 2064; SSE2-NEXT: pand %xmm4, %xmm0 2065; SSE2-NEXT: pandn %xmm2, %xmm4 2066; SSE2-NEXT: por %xmm0, %xmm4 2067; SSE2-NEXT: movdqa %xmm1, %xmm2 2068; SSE2-NEXT: pcmpgtb %xmm3, %xmm2 2069; SSE2-NEXT: pand %xmm2, %xmm1 2070; SSE2-NEXT: pandn %xmm3, %xmm2 2071; SSE2-NEXT: por %xmm1, %xmm2 2072; SSE2-NEXT: movdqa %xmm4, %xmm0 2073; SSE2-NEXT: movdqa %xmm2, %xmm1 2074; SSE2-NEXT: retq 2075; 2076; SSE4-LABEL: test73: 2077; SSE4: # %bb.0: # %entry 2078; SSE4-NEXT: pmaxsb %xmm2, %xmm0 2079; SSE4-NEXT: pmaxsb %xmm3, %xmm1 2080; SSE4-NEXT: retq 2081; 2082; AVX1-LABEL: test73: 2083; AVX1: # %bb.0: # %entry 2084; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2085; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2086; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 2087; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 2088; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2089; AVX1-NEXT: retq 2090; 2091; AVX2-LABEL: test73: 2092; AVX2: # %bb.0: # %entry 2093; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2094; AVX2-NEXT: retq 2095; 2096; AVX512-LABEL: test73: 2097; AVX512: # %bb.0: # %entry 2098; AVX512-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2099; AVX512-NEXT: retq 2100entry: 2101 %cmp = icmp slt <32 x i8> %a, %b 2102 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2103 ret <32 x i8> %sel 2104} 2105 2106define <32 x i8> @test74(<32 x i8> %a, <32 x i8> %b) { 2107; SSE2-LABEL: test74: 2108; SSE2: # %bb.0: # %entry 2109; SSE2-NEXT: movdqa %xmm0, %xmm4 2110; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 2111; SSE2-NEXT: pand %xmm4, %xmm0 2112; SSE2-NEXT: pandn %xmm2, %xmm4 2113; SSE2-NEXT: por %xmm0, %xmm4 2114; SSE2-NEXT: movdqa %xmm1, %xmm2 2115; SSE2-NEXT: pcmpgtb %xmm3, %xmm2 2116; SSE2-NEXT: pand %xmm2, %xmm1 2117; SSE2-NEXT: pandn %xmm3, %xmm2 2118; SSE2-NEXT: por %xmm1, %xmm2 2119; SSE2-NEXT: movdqa %xmm4, %xmm0 2120; SSE2-NEXT: movdqa %xmm2, %xmm1 2121; SSE2-NEXT: retq 2122; 2123; SSE4-LABEL: test74: 2124; SSE4: # %bb.0: # %entry 2125; SSE4-NEXT: pmaxsb %xmm2, %xmm0 2126; SSE4-NEXT: pmaxsb %xmm3, %xmm1 2127; SSE4-NEXT: retq 2128; 2129; AVX1-LABEL: test74: 2130; AVX1: # %bb.0: # %entry 2131; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2132; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2133; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 2134; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 2135; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2136; AVX1-NEXT: retq 2137; 2138; AVX2-LABEL: test74: 2139; AVX2: # %bb.0: # %entry 2140; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2141; AVX2-NEXT: retq 2142; 2143; AVX512-LABEL: test74: 2144; AVX512: # %bb.0: # %entry 2145; AVX512-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2146; AVX512-NEXT: retq 2147entry: 2148 %cmp = icmp sle <32 x i8> %a, %b 2149 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2150 ret <32 x i8> %sel 2151} 2152 2153define <32 x i8> @test75(<32 x i8> %a, <32 x i8> %b) { 2154; SSE2-LABEL: test75: 2155; SSE2: # %bb.0: # %entry 2156; SSE2-NEXT: movdqa %xmm2, %xmm4 2157; SSE2-NEXT: pcmpgtb %xmm0, %xmm4 2158; SSE2-NEXT: pand %xmm4, %xmm0 2159; SSE2-NEXT: pandn %xmm2, %xmm4 2160; SSE2-NEXT: por %xmm4, %xmm0 2161; SSE2-NEXT: movdqa %xmm3, %xmm2 2162; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 2163; SSE2-NEXT: pand %xmm2, %xmm1 2164; SSE2-NEXT: pandn %xmm3, %xmm2 2165; SSE2-NEXT: por %xmm2, %xmm1 2166; SSE2-NEXT: retq 2167; 2168; SSE4-LABEL: test75: 2169; SSE4: # %bb.0: # %entry 2170; SSE4-NEXT: pminsb %xmm2, %xmm0 2171; SSE4-NEXT: pminsb %xmm3, %xmm1 2172; SSE4-NEXT: retq 2173; 2174; AVX1-LABEL: test75: 2175; AVX1: # %bb.0: # %entry 2176; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2177; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2178; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 2179; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 2180; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2181; AVX1-NEXT: retq 2182; 2183; AVX2-LABEL: test75: 2184; AVX2: # %bb.0: # %entry 2185; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2186; AVX2-NEXT: retq 2187; 2188; AVX512-LABEL: test75: 2189; AVX512: # %bb.0: # %entry 2190; AVX512-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2191; AVX512-NEXT: retq 2192entry: 2193 %cmp = icmp sgt <32 x i8> %a, %b 2194 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2195 ret <32 x i8> %sel 2196} 2197 2198define <32 x i8> @test76(<32 x i8> %a, <32 x i8> %b) { 2199; SSE2-LABEL: test76: 2200; SSE2: # %bb.0: # %entry 2201; SSE2-NEXT: movdqa %xmm2, %xmm4 2202; SSE2-NEXT: pcmpgtb %xmm0, %xmm4 2203; SSE2-NEXT: pand %xmm4, %xmm0 2204; SSE2-NEXT: pandn %xmm2, %xmm4 2205; SSE2-NEXT: por %xmm4, %xmm0 2206; SSE2-NEXT: movdqa %xmm3, %xmm2 2207; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 2208; SSE2-NEXT: pand %xmm2, %xmm1 2209; SSE2-NEXT: pandn %xmm3, %xmm2 2210; SSE2-NEXT: por %xmm2, %xmm1 2211; SSE2-NEXT: retq 2212; 2213; SSE4-LABEL: test76: 2214; SSE4: # %bb.0: # %entry 2215; SSE4-NEXT: pminsb %xmm2, %xmm0 2216; SSE4-NEXT: pminsb %xmm3, %xmm1 2217; SSE4-NEXT: retq 2218; 2219; AVX1-LABEL: test76: 2220; AVX1: # %bb.0: # %entry 2221; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2222; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2223; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 2224; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 2225; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2226; AVX1-NEXT: retq 2227; 2228; AVX2-LABEL: test76: 2229; AVX2: # %bb.0: # %entry 2230; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2231; AVX2-NEXT: retq 2232; 2233; AVX512-LABEL: test76: 2234; AVX512: # %bb.0: # %entry 2235; AVX512-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2236; AVX512-NEXT: retq 2237entry: 2238 %cmp = icmp sge <32 x i8> %a, %b 2239 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2240 ret <32 x i8> %sel 2241} 2242 2243define <32 x i8> @test77(<32 x i8> %a, <32 x i8> %b) { 2244; SSE-LABEL: test77: 2245; SSE: # %bb.0: # %entry 2246; SSE-NEXT: pmaxub %xmm2, %xmm0 2247; SSE-NEXT: pmaxub %xmm3, %xmm1 2248; SSE-NEXT: retq 2249; 2250; AVX1-LABEL: test77: 2251; AVX1: # %bb.0: # %entry 2252; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2253; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2254; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 2255; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 2256; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2257; AVX1-NEXT: retq 2258; 2259; AVX2-LABEL: test77: 2260; AVX2: # %bb.0: # %entry 2261; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2262; AVX2-NEXT: retq 2263; 2264; AVX512-LABEL: test77: 2265; AVX512: # %bb.0: # %entry 2266; AVX512-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2267; AVX512-NEXT: retq 2268entry: 2269 %cmp = icmp ult <32 x i8> %a, %b 2270 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2271 ret <32 x i8> %sel 2272} 2273 2274define <32 x i8> @test78(<32 x i8> %a, <32 x i8> %b) { 2275; SSE-LABEL: test78: 2276; SSE: # %bb.0: # %entry 2277; SSE-NEXT: pmaxub %xmm2, %xmm0 2278; SSE-NEXT: pmaxub %xmm3, %xmm1 2279; SSE-NEXT: retq 2280; 2281; AVX1-LABEL: test78: 2282; AVX1: # %bb.0: # %entry 2283; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2284; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2285; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 2286; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 2287; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2288; AVX1-NEXT: retq 2289; 2290; AVX2-LABEL: test78: 2291; AVX2: # %bb.0: # %entry 2292; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2293; AVX2-NEXT: retq 2294; 2295; AVX512-LABEL: test78: 2296; AVX512: # %bb.0: # %entry 2297; AVX512-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2298; AVX512-NEXT: retq 2299entry: 2300 %cmp = icmp ule <32 x i8> %a, %b 2301 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2302 ret <32 x i8> %sel 2303} 2304 2305define <32 x i8> @test79(<32 x i8> %a, <32 x i8> %b) { 2306; SSE-LABEL: test79: 2307; SSE: # %bb.0: # %entry 2308; SSE-NEXT: pminub %xmm2, %xmm0 2309; SSE-NEXT: pminub %xmm3, %xmm1 2310; SSE-NEXT: retq 2311; 2312; AVX1-LABEL: test79: 2313; AVX1: # %bb.0: # %entry 2314; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2315; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2316; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 2317; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 2318; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2319; AVX1-NEXT: retq 2320; 2321; AVX2-LABEL: test79: 2322; AVX2: # %bb.0: # %entry 2323; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 2324; AVX2-NEXT: retq 2325; 2326; AVX512-LABEL: test79: 2327; AVX512: # %bb.0: # %entry 2328; AVX512-NEXT: vpminub %ymm1, %ymm0, %ymm0 2329; AVX512-NEXT: retq 2330entry: 2331 %cmp = icmp ugt <32 x i8> %a, %b 2332 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2333 ret <32 x i8> %sel 2334} 2335 2336define <32 x i8> @test80(<32 x i8> %a, <32 x i8> %b) { 2337; SSE-LABEL: test80: 2338; SSE: # %bb.0: # %entry 2339; SSE-NEXT: pminub %xmm2, %xmm0 2340; SSE-NEXT: pminub %xmm3, %xmm1 2341; SSE-NEXT: retq 2342; 2343; AVX1-LABEL: test80: 2344; AVX1: # %bb.0: # %entry 2345; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2346; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2347; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 2348; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 2349; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2350; AVX1-NEXT: retq 2351; 2352; AVX2-LABEL: test80: 2353; AVX2: # %bb.0: # %entry 2354; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 2355; AVX2-NEXT: retq 2356; 2357; AVX512-LABEL: test80: 2358; AVX512: # %bb.0: # %entry 2359; AVX512-NEXT: vpminub %ymm1, %ymm0, %ymm0 2360; AVX512-NEXT: retq 2361entry: 2362 %cmp = icmp uge <32 x i8> %a, %b 2363 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2364 ret <32 x i8> %sel 2365} 2366 2367define <16 x i16> @test81(<16 x i16> %a, <16 x i16> %b) { 2368; SSE-LABEL: test81: 2369; SSE: # %bb.0: # %entry 2370; SSE-NEXT: pmaxsw %xmm2, %xmm0 2371; SSE-NEXT: pmaxsw %xmm3, %xmm1 2372; SSE-NEXT: retq 2373; 2374; AVX1-LABEL: test81: 2375; AVX1: # %bb.0: # %entry 2376; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2377; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2378; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 2379; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 2380; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2381; AVX1-NEXT: retq 2382; 2383; AVX2-LABEL: test81: 2384; AVX2: # %bb.0: # %entry 2385; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2386; AVX2-NEXT: retq 2387; 2388; AVX512-LABEL: test81: 2389; AVX512: # %bb.0: # %entry 2390; AVX512-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2391; AVX512-NEXT: retq 2392entry: 2393 %cmp = icmp slt <16 x i16> %a, %b 2394 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2395 ret <16 x i16> %sel 2396} 2397 2398define <16 x i16> @test82(<16 x i16> %a, <16 x i16> %b) { 2399; SSE-LABEL: test82: 2400; SSE: # %bb.0: # %entry 2401; SSE-NEXT: pmaxsw %xmm2, %xmm0 2402; SSE-NEXT: pmaxsw %xmm3, %xmm1 2403; SSE-NEXT: retq 2404; 2405; AVX1-LABEL: test82: 2406; AVX1: # %bb.0: # %entry 2407; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2408; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2409; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 2410; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 2411; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2412; AVX1-NEXT: retq 2413; 2414; AVX2-LABEL: test82: 2415; AVX2: # %bb.0: # %entry 2416; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2417; AVX2-NEXT: retq 2418; 2419; AVX512-LABEL: test82: 2420; AVX512: # %bb.0: # %entry 2421; AVX512-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2422; AVX512-NEXT: retq 2423entry: 2424 %cmp = icmp sle <16 x i16> %a, %b 2425 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2426 ret <16 x i16> %sel 2427} 2428 2429define <16 x i16> @test83(<16 x i16> %a, <16 x i16> %b) { 2430; SSE-LABEL: test83: 2431; SSE: # %bb.0: # %entry 2432; SSE-NEXT: pminsw %xmm2, %xmm0 2433; SSE-NEXT: pminsw %xmm3, %xmm1 2434; SSE-NEXT: retq 2435; 2436; AVX1-LABEL: test83: 2437; AVX1: # %bb.0: # %entry 2438; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2439; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2440; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 2441; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 2442; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2443; AVX1-NEXT: retq 2444; 2445; AVX2-LABEL: test83: 2446; AVX2: # %bb.0: # %entry 2447; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2448; AVX2-NEXT: retq 2449; 2450; AVX512-LABEL: test83: 2451; AVX512: # %bb.0: # %entry 2452; AVX512-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2453; AVX512-NEXT: retq 2454entry: 2455 %cmp = icmp sgt <16 x i16> %a, %b 2456 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2457 ret <16 x i16> %sel 2458} 2459 2460define <16 x i16> @test84(<16 x i16> %a, <16 x i16> %b) { 2461; SSE-LABEL: test84: 2462; SSE: # %bb.0: # %entry 2463; SSE-NEXT: pminsw %xmm2, %xmm0 2464; SSE-NEXT: pminsw %xmm3, %xmm1 2465; SSE-NEXT: retq 2466; 2467; AVX1-LABEL: test84: 2468; AVX1: # %bb.0: # %entry 2469; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2470; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2471; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 2472; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 2473; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2474; AVX1-NEXT: retq 2475; 2476; AVX2-LABEL: test84: 2477; AVX2: # %bb.0: # %entry 2478; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2479; AVX2-NEXT: retq 2480; 2481; AVX512-LABEL: test84: 2482; AVX512: # %bb.0: # %entry 2483; AVX512-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2484; AVX512-NEXT: retq 2485entry: 2486 %cmp = icmp sge <16 x i16> %a, %b 2487 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2488 ret <16 x i16> %sel 2489} 2490 2491define <16 x i16> @test85(<16 x i16> %a, <16 x i16> %b) { 2492; SSE2-LABEL: test85: 2493; SSE2: # %bb.0: # %entry 2494; SSE2-NEXT: psubusw %xmm0, %xmm2 2495; SSE2-NEXT: paddw %xmm2, %xmm0 2496; SSE2-NEXT: psubusw %xmm1, %xmm3 2497; SSE2-NEXT: paddw %xmm3, %xmm1 2498; SSE2-NEXT: retq 2499; 2500; SSE4-LABEL: test85: 2501; SSE4: # %bb.0: # %entry 2502; SSE4-NEXT: pmaxuw %xmm2, %xmm0 2503; SSE4-NEXT: pmaxuw %xmm3, %xmm1 2504; SSE4-NEXT: retq 2505; 2506; AVX1-LABEL: test85: 2507; AVX1: # %bb.0: # %entry 2508; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2509; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2510; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 2511; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 2512; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2513; AVX1-NEXT: retq 2514; 2515; AVX2-LABEL: test85: 2516; AVX2: # %bb.0: # %entry 2517; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2518; AVX2-NEXT: retq 2519; 2520; AVX512-LABEL: test85: 2521; AVX512: # %bb.0: # %entry 2522; AVX512-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2523; AVX512-NEXT: retq 2524entry: 2525 %cmp = icmp ult <16 x i16> %a, %b 2526 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2527 ret <16 x i16> %sel 2528} 2529 2530define <16 x i16> @test86(<16 x i16> %a, <16 x i16> %b) { 2531; SSE2-LABEL: test86: 2532; SSE2: # %bb.0: # %entry 2533; SSE2-NEXT: psubusw %xmm0, %xmm2 2534; SSE2-NEXT: paddw %xmm2, %xmm0 2535; SSE2-NEXT: psubusw %xmm1, %xmm3 2536; SSE2-NEXT: paddw %xmm3, %xmm1 2537; SSE2-NEXT: retq 2538; 2539; SSE4-LABEL: test86: 2540; SSE4: # %bb.0: # %entry 2541; SSE4-NEXT: pmaxuw %xmm2, %xmm0 2542; SSE4-NEXT: pmaxuw %xmm3, %xmm1 2543; SSE4-NEXT: retq 2544; 2545; AVX1-LABEL: test86: 2546; AVX1: # %bb.0: # %entry 2547; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2548; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2549; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 2550; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 2551; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2552; AVX1-NEXT: retq 2553; 2554; AVX2-LABEL: test86: 2555; AVX2: # %bb.0: # %entry 2556; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2557; AVX2-NEXT: retq 2558; 2559; AVX512-LABEL: test86: 2560; AVX512: # %bb.0: # %entry 2561; AVX512-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2562; AVX512-NEXT: retq 2563entry: 2564 %cmp = icmp ule <16 x i16> %a, %b 2565 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2566 ret <16 x i16> %sel 2567} 2568 2569define <16 x i16> @test87(<16 x i16> %a, <16 x i16> %b) { 2570; SSE2-LABEL: test87: 2571; SSE2: # %bb.0: # %entry 2572; SSE2-NEXT: movdqa %xmm0, %xmm4 2573; SSE2-NEXT: psubusw %xmm2, %xmm4 2574; SSE2-NEXT: psubw %xmm4, %xmm0 2575; SSE2-NEXT: movdqa %xmm1, %xmm2 2576; SSE2-NEXT: psubusw %xmm3, %xmm2 2577; SSE2-NEXT: psubw %xmm2, %xmm1 2578; SSE2-NEXT: retq 2579; 2580; SSE4-LABEL: test87: 2581; SSE4: # %bb.0: # %entry 2582; SSE4-NEXT: pminuw %xmm2, %xmm0 2583; SSE4-NEXT: pminuw %xmm3, %xmm1 2584; SSE4-NEXT: retq 2585; 2586; AVX1-LABEL: test87: 2587; AVX1: # %bb.0: # %entry 2588; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2589; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2590; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 2591; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 2592; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2593; AVX1-NEXT: retq 2594; 2595; AVX2-LABEL: test87: 2596; AVX2: # %bb.0: # %entry 2597; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2598; AVX2-NEXT: retq 2599; 2600; AVX512-LABEL: test87: 2601; AVX512: # %bb.0: # %entry 2602; AVX512-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2603; AVX512-NEXT: retq 2604entry: 2605 %cmp = icmp ugt <16 x i16> %a, %b 2606 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2607 ret <16 x i16> %sel 2608} 2609 2610define <16 x i16> @test88(<16 x i16> %a, <16 x i16> %b) { 2611; SSE2-LABEL: test88: 2612; SSE2: # %bb.0: # %entry 2613; SSE2-NEXT: movdqa %xmm0, %xmm4 2614; SSE2-NEXT: psubusw %xmm2, %xmm4 2615; SSE2-NEXT: psubw %xmm4, %xmm0 2616; SSE2-NEXT: movdqa %xmm1, %xmm2 2617; SSE2-NEXT: psubusw %xmm3, %xmm2 2618; SSE2-NEXT: psubw %xmm2, %xmm1 2619; SSE2-NEXT: retq 2620; 2621; SSE4-LABEL: test88: 2622; SSE4: # %bb.0: # %entry 2623; SSE4-NEXT: pminuw %xmm2, %xmm0 2624; SSE4-NEXT: pminuw %xmm3, %xmm1 2625; SSE4-NEXT: retq 2626; 2627; AVX1-LABEL: test88: 2628; AVX1: # %bb.0: # %entry 2629; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2630; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2631; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 2632; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 2633; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2634; AVX1-NEXT: retq 2635; 2636; AVX2-LABEL: test88: 2637; AVX2: # %bb.0: # %entry 2638; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2639; AVX2-NEXT: retq 2640; 2641; AVX512-LABEL: test88: 2642; AVX512: # %bb.0: # %entry 2643; AVX512-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2644; AVX512-NEXT: retq 2645entry: 2646 %cmp = icmp uge <16 x i16> %a, %b 2647 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2648 ret <16 x i16> %sel 2649} 2650 2651define <8 x i32> @test89(<8 x i32> %a, <8 x i32> %b) { 2652; SSE2-LABEL: test89: 2653; SSE2: # %bb.0: # %entry 2654; SSE2-NEXT: movdqa %xmm0, %xmm4 2655; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 2656; SSE2-NEXT: pand %xmm4, %xmm0 2657; SSE2-NEXT: pandn %xmm2, %xmm4 2658; SSE2-NEXT: por %xmm0, %xmm4 2659; SSE2-NEXT: movdqa %xmm1, %xmm2 2660; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2661; SSE2-NEXT: pand %xmm2, %xmm1 2662; SSE2-NEXT: pandn %xmm3, %xmm2 2663; SSE2-NEXT: por %xmm1, %xmm2 2664; SSE2-NEXT: movdqa %xmm4, %xmm0 2665; SSE2-NEXT: movdqa %xmm2, %xmm1 2666; SSE2-NEXT: retq 2667; 2668; SSE4-LABEL: test89: 2669; SSE4: # %bb.0: # %entry 2670; SSE4-NEXT: pmaxsd %xmm2, %xmm0 2671; SSE4-NEXT: pmaxsd %xmm3, %xmm1 2672; SSE4-NEXT: retq 2673; 2674; AVX1-LABEL: test89: 2675; AVX1: # %bb.0: # %entry 2676; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2677; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2678; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 2679; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2680; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2681; AVX1-NEXT: retq 2682; 2683; AVX2-LABEL: test89: 2684; AVX2: # %bb.0: # %entry 2685; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2686; AVX2-NEXT: retq 2687; 2688; AVX512-LABEL: test89: 2689; AVX512: # %bb.0: # %entry 2690; AVX512-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2691; AVX512-NEXT: retq 2692entry: 2693 %cmp = icmp slt <8 x i32> %a, %b 2694 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2695 ret <8 x i32> %sel 2696} 2697 2698define <8 x i32> @test90(<8 x i32> %a, <8 x i32> %b) { 2699; SSE2-LABEL: test90: 2700; SSE2: # %bb.0: # %entry 2701; SSE2-NEXT: movdqa %xmm0, %xmm4 2702; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 2703; SSE2-NEXT: pand %xmm4, %xmm0 2704; SSE2-NEXT: pandn %xmm2, %xmm4 2705; SSE2-NEXT: por %xmm0, %xmm4 2706; SSE2-NEXT: movdqa %xmm1, %xmm2 2707; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2708; SSE2-NEXT: pand %xmm2, %xmm1 2709; SSE2-NEXT: pandn %xmm3, %xmm2 2710; SSE2-NEXT: por %xmm1, %xmm2 2711; SSE2-NEXT: movdqa %xmm4, %xmm0 2712; SSE2-NEXT: movdqa %xmm2, %xmm1 2713; SSE2-NEXT: retq 2714; 2715; SSE4-LABEL: test90: 2716; SSE4: # %bb.0: # %entry 2717; SSE4-NEXT: pmaxsd %xmm2, %xmm0 2718; SSE4-NEXT: pmaxsd %xmm3, %xmm1 2719; SSE4-NEXT: retq 2720; 2721; AVX1-LABEL: test90: 2722; AVX1: # %bb.0: # %entry 2723; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2724; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2725; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 2726; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2727; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2728; AVX1-NEXT: retq 2729; 2730; AVX2-LABEL: test90: 2731; AVX2: # %bb.0: # %entry 2732; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2733; AVX2-NEXT: retq 2734; 2735; AVX512-LABEL: test90: 2736; AVX512: # %bb.0: # %entry 2737; AVX512-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2738; AVX512-NEXT: retq 2739entry: 2740 %cmp = icmp sle <8 x i32> %a, %b 2741 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2742 ret <8 x i32> %sel 2743} 2744 2745define <8 x i32> @test91(<8 x i32> %a, <8 x i32> %b) { 2746; SSE2-LABEL: test91: 2747; SSE2: # %bb.0: # %entry 2748; SSE2-NEXT: movdqa %xmm2, %xmm4 2749; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 2750; SSE2-NEXT: pand %xmm4, %xmm0 2751; SSE2-NEXT: pandn %xmm2, %xmm4 2752; SSE2-NEXT: por %xmm4, %xmm0 2753; SSE2-NEXT: movdqa %xmm3, %xmm2 2754; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 2755; SSE2-NEXT: pand %xmm2, %xmm1 2756; SSE2-NEXT: pandn %xmm3, %xmm2 2757; SSE2-NEXT: por %xmm2, %xmm1 2758; SSE2-NEXT: retq 2759; 2760; SSE4-LABEL: test91: 2761; SSE4: # %bb.0: # %entry 2762; SSE4-NEXT: pminsd %xmm2, %xmm0 2763; SSE4-NEXT: pminsd %xmm3, %xmm1 2764; SSE4-NEXT: retq 2765; 2766; AVX1-LABEL: test91: 2767; AVX1: # %bb.0: # %entry 2768; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2769; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2770; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 2771; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 2772; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2773; AVX1-NEXT: retq 2774; 2775; AVX2-LABEL: test91: 2776; AVX2: # %bb.0: # %entry 2777; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2778; AVX2-NEXT: retq 2779; 2780; AVX512-LABEL: test91: 2781; AVX512: # %bb.0: # %entry 2782; AVX512-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2783; AVX512-NEXT: retq 2784entry: 2785 %cmp = icmp sgt <8 x i32> %a, %b 2786 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2787 ret <8 x i32> %sel 2788} 2789 2790define <8 x i32> @test92(<8 x i32> %a, <8 x i32> %b) { 2791; SSE2-LABEL: test92: 2792; SSE2: # %bb.0: # %entry 2793; SSE2-NEXT: movdqa %xmm2, %xmm4 2794; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 2795; SSE2-NEXT: pand %xmm4, %xmm0 2796; SSE2-NEXT: pandn %xmm2, %xmm4 2797; SSE2-NEXT: por %xmm4, %xmm0 2798; SSE2-NEXT: movdqa %xmm3, %xmm2 2799; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 2800; SSE2-NEXT: pand %xmm2, %xmm1 2801; SSE2-NEXT: pandn %xmm3, %xmm2 2802; SSE2-NEXT: por %xmm2, %xmm1 2803; SSE2-NEXT: retq 2804; 2805; SSE4-LABEL: test92: 2806; SSE4: # %bb.0: # %entry 2807; SSE4-NEXT: pminsd %xmm2, %xmm0 2808; SSE4-NEXT: pminsd %xmm3, %xmm1 2809; SSE4-NEXT: retq 2810; 2811; AVX1-LABEL: test92: 2812; AVX1: # %bb.0: # %entry 2813; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2814; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2815; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 2816; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 2817; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2818; AVX1-NEXT: retq 2819; 2820; AVX2-LABEL: test92: 2821; AVX2: # %bb.0: # %entry 2822; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2823; AVX2-NEXT: retq 2824; 2825; AVX512-LABEL: test92: 2826; AVX512: # %bb.0: # %entry 2827; AVX512-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2828; AVX512-NEXT: retq 2829entry: 2830 %cmp = icmp sge <8 x i32> %a, %b 2831 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2832 ret <8 x i32> %sel 2833} 2834 2835define <8 x i32> @test93(<8 x i32> %a, <8 x i32> %b) { 2836; SSE2-LABEL: test93: 2837; SSE2: # %bb.0: # %entry 2838; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 2839; SSE2-NEXT: movdqa %xmm2, %xmm6 2840; SSE2-NEXT: pxor %xmm5, %xmm6 2841; SSE2-NEXT: movdqa %xmm0, %xmm4 2842; SSE2-NEXT: pxor %xmm5, %xmm4 2843; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 2844; SSE2-NEXT: pand %xmm4, %xmm0 2845; SSE2-NEXT: pandn %xmm2, %xmm4 2846; SSE2-NEXT: por %xmm0, %xmm4 2847; SSE2-NEXT: movdqa %xmm3, %xmm0 2848; SSE2-NEXT: pxor %xmm5, %xmm0 2849; SSE2-NEXT: pxor %xmm1, %xmm5 2850; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 2851; SSE2-NEXT: pand %xmm5, %xmm1 2852; SSE2-NEXT: pandn %xmm3, %xmm5 2853; SSE2-NEXT: por %xmm5, %xmm1 2854; SSE2-NEXT: movdqa %xmm4, %xmm0 2855; SSE2-NEXT: retq 2856; 2857; SSE4-LABEL: test93: 2858; SSE4: # %bb.0: # %entry 2859; SSE4-NEXT: pmaxud %xmm2, %xmm0 2860; SSE4-NEXT: pmaxud %xmm3, %xmm1 2861; SSE4-NEXT: retq 2862; 2863; AVX1-LABEL: test93: 2864; AVX1: # %bb.0: # %entry 2865; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2866; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2867; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 2868; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 2869; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2870; AVX1-NEXT: retq 2871; 2872; AVX2-LABEL: test93: 2873; AVX2: # %bb.0: # %entry 2874; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 2875; AVX2-NEXT: retq 2876; 2877; AVX512-LABEL: test93: 2878; AVX512: # %bb.0: # %entry 2879; AVX512-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 2880; AVX512-NEXT: retq 2881entry: 2882 %cmp = icmp ult <8 x i32> %a, %b 2883 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2884 ret <8 x i32> %sel 2885} 2886 2887define <8 x i32> @test94(<8 x i32> %a, <8 x i32> %b) { 2888; SSE2-LABEL: test94: 2889; SSE2: # %bb.0: # %entry 2890; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 2891; SSE2-NEXT: movdqa %xmm2, %xmm6 2892; SSE2-NEXT: pxor %xmm5, %xmm6 2893; SSE2-NEXT: movdqa %xmm0, %xmm4 2894; SSE2-NEXT: pxor %xmm5, %xmm4 2895; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 2896; SSE2-NEXT: pand %xmm4, %xmm0 2897; SSE2-NEXT: pandn %xmm2, %xmm4 2898; SSE2-NEXT: por %xmm0, %xmm4 2899; SSE2-NEXT: movdqa %xmm3, %xmm0 2900; SSE2-NEXT: pxor %xmm5, %xmm0 2901; SSE2-NEXT: pxor %xmm1, %xmm5 2902; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 2903; SSE2-NEXT: pand %xmm5, %xmm1 2904; SSE2-NEXT: pandn %xmm3, %xmm5 2905; SSE2-NEXT: por %xmm5, %xmm1 2906; SSE2-NEXT: movdqa %xmm4, %xmm0 2907; SSE2-NEXT: retq 2908; 2909; SSE4-LABEL: test94: 2910; SSE4: # %bb.0: # %entry 2911; SSE4-NEXT: pmaxud %xmm2, %xmm0 2912; SSE4-NEXT: pmaxud %xmm3, %xmm1 2913; SSE4-NEXT: retq 2914; 2915; AVX1-LABEL: test94: 2916; AVX1: # %bb.0: # %entry 2917; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2918; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2919; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 2920; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 2921; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2922; AVX1-NEXT: retq 2923; 2924; AVX2-LABEL: test94: 2925; AVX2: # %bb.0: # %entry 2926; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 2927; AVX2-NEXT: retq 2928; 2929; AVX512-LABEL: test94: 2930; AVX512: # %bb.0: # %entry 2931; AVX512-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 2932; AVX512-NEXT: retq 2933entry: 2934 %cmp = icmp ule <8 x i32> %a, %b 2935 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2936 ret <8 x i32> %sel 2937} 2938 2939define <8 x i32> @test95(<8 x i32> %a, <8 x i32> %b) { 2940; SSE2-LABEL: test95: 2941; SSE2: # %bb.0: # %entry 2942; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 2943; SSE2-NEXT: movdqa %xmm0, %xmm5 2944; SSE2-NEXT: pxor %xmm4, %xmm5 2945; SSE2-NEXT: movdqa %xmm2, %xmm6 2946; SSE2-NEXT: pxor %xmm4, %xmm6 2947; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 2948; SSE2-NEXT: pand %xmm6, %xmm0 2949; SSE2-NEXT: pandn %xmm2, %xmm6 2950; SSE2-NEXT: por %xmm6, %xmm0 2951; SSE2-NEXT: movdqa %xmm1, %xmm2 2952; SSE2-NEXT: pxor %xmm4, %xmm2 2953; SSE2-NEXT: pxor %xmm3, %xmm4 2954; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 2955; SSE2-NEXT: pand %xmm4, %xmm1 2956; SSE2-NEXT: pandn %xmm3, %xmm4 2957; SSE2-NEXT: por %xmm4, %xmm1 2958; SSE2-NEXT: retq 2959; 2960; SSE4-LABEL: test95: 2961; SSE4: # %bb.0: # %entry 2962; SSE4-NEXT: pminud %xmm2, %xmm0 2963; SSE4-NEXT: pminud %xmm3, %xmm1 2964; SSE4-NEXT: retq 2965; 2966; AVX1-LABEL: test95: 2967; AVX1: # %bb.0: # %entry 2968; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2969; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2970; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 2971; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 2972; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2973; AVX1-NEXT: retq 2974; 2975; AVX2-LABEL: test95: 2976; AVX2: # %bb.0: # %entry 2977; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 2978; AVX2-NEXT: retq 2979; 2980; AVX512-LABEL: test95: 2981; AVX512: # %bb.0: # %entry 2982; AVX512-NEXT: vpminud %ymm1, %ymm0, %ymm0 2983; AVX512-NEXT: retq 2984entry: 2985 %cmp = icmp ugt <8 x i32> %a, %b 2986 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2987 ret <8 x i32> %sel 2988} 2989 2990define <8 x i32> @test96(<8 x i32> %a, <8 x i32> %b) { 2991; SSE2-LABEL: test96: 2992; SSE2: # %bb.0: # %entry 2993; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 2994; SSE2-NEXT: movdqa %xmm0, %xmm5 2995; SSE2-NEXT: pxor %xmm4, %xmm5 2996; SSE2-NEXT: movdqa %xmm2, %xmm6 2997; SSE2-NEXT: pxor %xmm4, %xmm6 2998; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 2999; SSE2-NEXT: pand %xmm6, %xmm0 3000; SSE2-NEXT: pandn %xmm2, %xmm6 3001; SSE2-NEXT: por %xmm6, %xmm0 3002; SSE2-NEXT: movdqa %xmm1, %xmm2 3003; SSE2-NEXT: pxor %xmm4, %xmm2 3004; SSE2-NEXT: pxor %xmm3, %xmm4 3005; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 3006; SSE2-NEXT: pand %xmm4, %xmm1 3007; SSE2-NEXT: pandn %xmm3, %xmm4 3008; SSE2-NEXT: por %xmm4, %xmm1 3009; SSE2-NEXT: retq 3010; 3011; SSE4-LABEL: test96: 3012; SSE4: # %bb.0: # %entry 3013; SSE4-NEXT: pminud %xmm2, %xmm0 3014; SSE4-NEXT: pminud %xmm3, %xmm1 3015; SSE4-NEXT: retq 3016; 3017; AVX1-LABEL: test96: 3018; AVX1: # %bb.0: # %entry 3019; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3020; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3021; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 3022; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 3023; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3024; AVX1-NEXT: retq 3025; 3026; AVX2-LABEL: test96: 3027; AVX2: # %bb.0: # %entry 3028; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 3029; AVX2-NEXT: retq 3030; 3031; AVX512-LABEL: test96: 3032; AVX512: # %bb.0: # %entry 3033; AVX512-NEXT: vpminud %ymm1, %ymm0, %ymm0 3034; AVX512-NEXT: retq 3035entry: 3036 %cmp = icmp uge <8 x i32> %a, %b 3037 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3038 ret <8 x i32> %sel 3039} 3040 3041; ---------------------------- 3042 3043define <64 x i8> @test97(<64 x i8> %a, <64 x i8> %b) { 3044; SSE2-LABEL: test97: 3045; SSE2: # %bb.0: # %entry 3046; SSE2-NEXT: movdqa %xmm4, %xmm8 3047; SSE2-NEXT: pcmpgtb %xmm0, %xmm8 3048; SSE2-NEXT: pand %xmm8, %xmm0 3049; SSE2-NEXT: pandn %xmm4, %xmm8 3050; SSE2-NEXT: por %xmm8, %xmm0 3051; SSE2-NEXT: movdqa %xmm5, %xmm4 3052; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 3053; SSE2-NEXT: pand %xmm4, %xmm1 3054; SSE2-NEXT: pandn %xmm5, %xmm4 3055; SSE2-NEXT: por %xmm4, %xmm1 3056; SSE2-NEXT: movdqa %xmm6, %xmm4 3057; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 3058; SSE2-NEXT: pand %xmm4, %xmm2 3059; SSE2-NEXT: pandn %xmm6, %xmm4 3060; SSE2-NEXT: por %xmm4, %xmm2 3061; SSE2-NEXT: movdqa %xmm7, %xmm4 3062; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 3063; SSE2-NEXT: pand %xmm4, %xmm3 3064; SSE2-NEXT: pandn %xmm7, %xmm4 3065; SSE2-NEXT: por %xmm4, %xmm3 3066; SSE2-NEXT: retq 3067; 3068; SSE4-LABEL: test97: 3069; SSE4: # %bb.0: # %entry 3070; SSE4-NEXT: pminsb %xmm4, %xmm0 3071; SSE4-NEXT: pminsb %xmm5, %xmm1 3072; SSE4-NEXT: pminsb %xmm6, %xmm2 3073; SSE4-NEXT: pminsb %xmm7, %xmm3 3074; SSE4-NEXT: retq 3075; 3076; AVX1-LABEL: test97: 3077; AVX1: # %bb.0: # %entry 3078; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3079; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3080; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 3081; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 3082; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3083; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3084; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3085; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 3086; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 3087; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3088; AVX1-NEXT: retq 3089; 3090; AVX2-LABEL: test97: 3091; AVX2: # %bb.0: # %entry 3092; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 3093; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 3094; AVX2-NEXT: retq 3095; 3096; AVX512F-LABEL: test97: 3097; AVX512F: # %bb.0: # %entry 3098; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3099; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3100; AVX512F-NEXT: vpminsb %ymm2, %ymm3, %ymm2 3101; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 3102; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3103; AVX512F-NEXT: retq 3104; 3105; AVX512BW-LABEL: test97: 3106; AVX512BW: # %bb.0: # %entry 3107; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 3108; AVX512BW-NEXT: retq 3109entry: 3110 %cmp = icmp slt <64 x i8> %a, %b 3111 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3112 ret <64 x i8> %sel 3113} 3114 3115define <64 x i8> @test98(<64 x i8> %a, <64 x i8> %b) { 3116; SSE2-LABEL: test98: 3117; SSE2: # %bb.0: # %entry 3118; SSE2-NEXT: movdqa %xmm4, %xmm8 3119; SSE2-NEXT: pcmpgtb %xmm0, %xmm8 3120; SSE2-NEXT: pand %xmm8, %xmm0 3121; SSE2-NEXT: pandn %xmm4, %xmm8 3122; SSE2-NEXT: por %xmm8, %xmm0 3123; SSE2-NEXT: movdqa %xmm5, %xmm4 3124; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 3125; SSE2-NEXT: pand %xmm4, %xmm1 3126; SSE2-NEXT: pandn %xmm5, %xmm4 3127; SSE2-NEXT: por %xmm4, %xmm1 3128; SSE2-NEXT: movdqa %xmm6, %xmm4 3129; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 3130; SSE2-NEXT: pand %xmm4, %xmm2 3131; SSE2-NEXT: pandn %xmm6, %xmm4 3132; SSE2-NEXT: por %xmm4, %xmm2 3133; SSE2-NEXT: movdqa %xmm7, %xmm4 3134; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 3135; SSE2-NEXT: pand %xmm4, %xmm3 3136; SSE2-NEXT: pandn %xmm7, %xmm4 3137; SSE2-NEXT: por %xmm4, %xmm3 3138; SSE2-NEXT: retq 3139; 3140; SSE4-LABEL: test98: 3141; SSE4: # %bb.0: # %entry 3142; SSE4-NEXT: pminsb %xmm4, %xmm0 3143; SSE4-NEXT: pminsb %xmm5, %xmm1 3144; SSE4-NEXT: pminsb %xmm6, %xmm2 3145; SSE4-NEXT: pminsb %xmm7, %xmm3 3146; SSE4-NEXT: retq 3147; 3148; AVX1-LABEL: test98: 3149; AVX1: # %bb.0: # %entry 3150; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3151; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3152; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 3153; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 3154; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3155; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3156; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3157; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 3158; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 3159; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3160; AVX1-NEXT: retq 3161; 3162; AVX2-LABEL: test98: 3163; AVX2: # %bb.0: # %entry 3164; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 3165; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 3166; AVX2-NEXT: retq 3167; 3168; AVX512F-LABEL: test98: 3169; AVX512F: # %bb.0: # %entry 3170; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3171; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3172; AVX512F-NEXT: vpminsb %ymm2, %ymm3, %ymm2 3173; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 3174; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3175; AVX512F-NEXT: retq 3176; 3177; AVX512BW-LABEL: test98: 3178; AVX512BW: # %bb.0: # %entry 3179; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 3180; AVX512BW-NEXT: retq 3181entry: 3182 %cmp = icmp sle <64 x i8> %a, %b 3183 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3184 ret <64 x i8> %sel 3185} 3186 3187define <64 x i8> @test99(<64 x i8> %a, <64 x i8> %b) { 3188; SSE2-LABEL: test99: 3189; SSE2: # %bb.0: # %entry 3190; SSE2-NEXT: movdqa %xmm0, %xmm8 3191; SSE2-NEXT: pcmpgtb %xmm4, %xmm8 3192; SSE2-NEXT: pand %xmm8, %xmm0 3193; SSE2-NEXT: pandn %xmm4, %xmm8 3194; SSE2-NEXT: por %xmm0, %xmm8 3195; SSE2-NEXT: movdqa %xmm1, %xmm4 3196; SSE2-NEXT: pcmpgtb %xmm5, %xmm4 3197; SSE2-NEXT: pand %xmm4, %xmm1 3198; SSE2-NEXT: pandn %xmm5, %xmm4 3199; SSE2-NEXT: por %xmm1, %xmm4 3200; SSE2-NEXT: movdqa %xmm2, %xmm5 3201; SSE2-NEXT: pcmpgtb %xmm6, %xmm5 3202; SSE2-NEXT: pand %xmm5, %xmm2 3203; SSE2-NEXT: pandn %xmm6, %xmm5 3204; SSE2-NEXT: por %xmm2, %xmm5 3205; SSE2-NEXT: movdqa %xmm3, %xmm6 3206; SSE2-NEXT: pcmpgtb %xmm7, %xmm6 3207; SSE2-NEXT: pand %xmm6, %xmm3 3208; SSE2-NEXT: pandn %xmm7, %xmm6 3209; SSE2-NEXT: por %xmm3, %xmm6 3210; SSE2-NEXT: movdqa %xmm8, %xmm0 3211; SSE2-NEXT: movdqa %xmm4, %xmm1 3212; SSE2-NEXT: movdqa %xmm5, %xmm2 3213; SSE2-NEXT: movdqa %xmm6, %xmm3 3214; SSE2-NEXT: retq 3215; 3216; SSE4-LABEL: test99: 3217; SSE4: # %bb.0: # %entry 3218; SSE4-NEXT: pmaxsb %xmm4, %xmm0 3219; SSE4-NEXT: pmaxsb %xmm5, %xmm1 3220; SSE4-NEXT: pmaxsb %xmm6, %xmm2 3221; SSE4-NEXT: pmaxsb %xmm7, %xmm3 3222; SSE4-NEXT: retq 3223; 3224; AVX1-LABEL: test99: 3225; AVX1: # %bb.0: # %entry 3226; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3227; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3228; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 3229; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 3230; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3231; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3232; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3233; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 3234; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 3235; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3236; AVX1-NEXT: retq 3237; 3238; AVX2-LABEL: test99: 3239; AVX2: # %bb.0: # %entry 3240; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 3241; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 3242; AVX2-NEXT: retq 3243; 3244; AVX512F-LABEL: test99: 3245; AVX512F: # %bb.0: # %entry 3246; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3247; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3248; AVX512F-NEXT: vpmaxsb %ymm2, %ymm3, %ymm2 3249; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 3250; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3251; AVX512F-NEXT: retq 3252; 3253; AVX512BW-LABEL: test99: 3254; AVX512BW: # %bb.0: # %entry 3255; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 3256; AVX512BW-NEXT: retq 3257entry: 3258 %cmp = icmp sgt <64 x i8> %a, %b 3259 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3260 ret <64 x i8> %sel 3261} 3262 3263define <64 x i8> @test100(<64 x i8> %a, <64 x i8> %b) { 3264; SSE2-LABEL: test100: 3265; SSE2: # %bb.0: # %entry 3266; SSE2-NEXT: movdqa %xmm0, %xmm8 3267; SSE2-NEXT: pcmpgtb %xmm4, %xmm8 3268; SSE2-NEXT: pand %xmm8, %xmm0 3269; SSE2-NEXT: pandn %xmm4, %xmm8 3270; SSE2-NEXT: por %xmm0, %xmm8 3271; SSE2-NEXT: movdqa %xmm1, %xmm4 3272; SSE2-NEXT: pcmpgtb %xmm5, %xmm4 3273; SSE2-NEXT: pand %xmm4, %xmm1 3274; SSE2-NEXT: pandn %xmm5, %xmm4 3275; SSE2-NEXT: por %xmm1, %xmm4 3276; SSE2-NEXT: movdqa %xmm2, %xmm5 3277; SSE2-NEXT: pcmpgtb %xmm6, %xmm5 3278; SSE2-NEXT: pand %xmm5, %xmm2 3279; SSE2-NEXT: pandn %xmm6, %xmm5 3280; SSE2-NEXT: por %xmm2, %xmm5 3281; SSE2-NEXT: movdqa %xmm3, %xmm6 3282; SSE2-NEXT: pcmpgtb %xmm7, %xmm6 3283; SSE2-NEXT: pand %xmm6, %xmm3 3284; SSE2-NEXT: pandn %xmm7, %xmm6 3285; SSE2-NEXT: por %xmm3, %xmm6 3286; SSE2-NEXT: movdqa %xmm8, %xmm0 3287; SSE2-NEXT: movdqa %xmm4, %xmm1 3288; SSE2-NEXT: movdqa %xmm5, %xmm2 3289; SSE2-NEXT: movdqa %xmm6, %xmm3 3290; SSE2-NEXT: retq 3291; 3292; SSE4-LABEL: test100: 3293; SSE4: # %bb.0: # %entry 3294; SSE4-NEXT: pmaxsb %xmm4, %xmm0 3295; SSE4-NEXT: pmaxsb %xmm5, %xmm1 3296; SSE4-NEXT: pmaxsb %xmm6, %xmm2 3297; SSE4-NEXT: pmaxsb %xmm7, %xmm3 3298; SSE4-NEXT: retq 3299; 3300; AVX1-LABEL: test100: 3301; AVX1: # %bb.0: # %entry 3302; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3303; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3304; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 3305; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 3306; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3307; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3308; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3309; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 3310; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 3311; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3312; AVX1-NEXT: retq 3313; 3314; AVX2-LABEL: test100: 3315; AVX2: # %bb.0: # %entry 3316; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 3317; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 3318; AVX2-NEXT: retq 3319; 3320; AVX512F-LABEL: test100: 3321; AVX512F: # %bb.0: # %entry 3322; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3323; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3324; AVX512F-NEXT: vpmaxsb %ymm2, %ymm3, %ymm2 3325; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 3326; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3327; AVX512F-NEXT: retq 3328; 3329; AVX512BW-LABEL: test100: 3330; AVX512BW: # %bb.0: # %entry 3331; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 3332; AVX512BW-NEXT: retq 3333entry: 3334 %cmp = icmp sge <64 x i8> %a, %b 3335 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3336 ret <64 x i8> %sel 3337} 3338 3339define <64 x i8> @test101(<64 x i8> %a, <64 x i8> %b) { 3340; SSE-LABEL: test101: 3341; SSE: # %bb.0: # %entry 3342; SSE-NEXT: pminub %xmm4, %xmm0 3343; SSE-NEXT: pminub %xmm5, %xmm1 3344; SSE-NEXT: pminub %xmm6, %xmm2 3345; SSE-NEXT: pminub %xmm7, %xmm3 3346; SSE-NEXT: retq 3347; 3348; AVX1-LABEL: test101: 3349; AVX1: # %bb.0: # %entry 3350; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3351; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3352; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 3353; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 3354; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3355; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3356; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3357; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 3358; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 3359; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3360; AVX1-NEXT: retq 3361; 3362; AVX2-LABEL: test101: 3363; AVX2: # %bb.0: # %entry 3364; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 3365; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 3366; AVX2-NEXT: retq 3367; 3368; AVX512F-LABEL: test101: 3369; AVX512F: # %bb.0: # %entry 3370; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3371; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3372; AVX512F-NEXT: vpminub %ymm2, %ymm3, %ymm2 3373; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 3374; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3375; AVX512F-NEXT: retq 3376; 3377; AVX512BW-LABEL: test101: 3378; AVX512BW: # %bb.0: # %entry 3379; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 3380; AVX512BW-NEXT: retq 3381entry: 3382 %cmp = icmp ult <64 x i8> %a, %b 3383 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3384 ret <64 x i8> %sel 3385} 3386 3387define <64 x i8> @test102(<64 x i8> %a, <64 x i8> %b) { 3388; SSE-LABEL: test102: 3389; SSE: # %bb.0: # %entry 3390; SSE-NEXT: pminub %xmm4, %xmm0 3391; SSE-NEXT: pminub %xmm5, %xmm1 3392; SSE-NEXT: pminub %xmm6, %xmm2 3393; SSE-NEXT: pminub %xmm7, %xmm3 3394; SSE-NEXT: retq 3395; 3396; AVX1-LABEL: test102: 3397; AVX1: # %bb.0: # %entry 3398; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3399; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3400; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 3401; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 3402; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3403; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3404; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3405; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 3406; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 3407; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3408; AVX1-NEXT: retq 3409; 3410; AVX2-LABEL: test102: 3411; AVX2: # %bb.0: # %entry 3412; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 3413; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 3414; AVX2-NEXT: retq 3415; 3416; AVX512F-LABEL: test102: 3417; AVX512F: # %bb.0: # %entry 3418; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3419; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3420; AVX512F-NEXT: vpminub %ymm2, %ymm3, %ymm2 3421; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 3422; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3423; AVX512F-NEXT: retq 3424; 3425; AVX512BW-LABEL: test102: 3426; AVX512BW: # %bb.0: # %entry 3427; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 3428; AVX512BW-NEXT: retq 3429entry: 3430 %cmp = icmp ule <64 x i8> %a, %b 3431 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3432 ret <64 x i8> %sel 3433} 3434 3435define <64 x i8> @test103(<64 x i8> %a, <64 x i8> %b) { 3436; SSE-LABEL: test103: 3437; SSE: # %bb.0: # %entry 3438; SSE-NEXT: pmaxub %xmm4, %xmm0 3439; SSE-NEXT: pmaxub %xmm5, %xmm1 3440; SSE-NEXT: pmaxub %xmm6, %xmm2 3441; SSE-NEXT: pmaxub %xmm7, %xmm3 3442; SSE-NEXT: retq 3443; 3444; AVX1-LABEL: test103: 3445; AVX1: # %bb.0: # %entry 3446; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3447; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3448; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 3449; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 3450; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3451; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3452; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3453; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 3454; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 3455; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3456; AVX1-NEXT: retq 3457; 3458; AVX2-LABEL: test103: 3459; AVX2: # %bb.0: # %entry 3460; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 3461; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 3462; AVX2-NEXT: retq 3463; 3464; AVX512F-LABEL: test103: 3465; AVX512F: # %bb.0: # %entry 3466; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3467; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3468; AVX512F-NEXT: vpmaxub %ymm2, %ymm3, %ymm2 3469; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 3470; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3471; AVX512F-NEXT: retq 3472; 3473; AVX512BW-LABEL: test103: 3474; AVX512BW: # %bb.0: # %entry 3475; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 3476; AVX512BW-NEXT: retq 3477entry: 3478 %cmp = icmp ugt <64 x i8> %a, %b 3479 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3480 ret <64 x i8> %sel 3481} 3482 3483define <64 x i8> @test104(<64 x i8> %a, <64 x i8> %b) { 3484; SSE-LABEL: test104: 3485; SSE: # %bb.0: # %entry 3486; SSE-NEXT: pmaxub %xmm4, %xmm0 3487; SSE-NEXT: pmaxub %xmm5, %xmm1 3488; SSE-NEXT: pmaxub %xmm6, %xmm2 3489; SSE-NEXT: pmaxub %xmm7, %xmm3 3490; SSE-NEXT: retq 3491; 3492; AVX1-LABEL: test104: 3493; AVX1: # %bb.0: # %entry 3494; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3495; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3496; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 3497; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 3498; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3499; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3500; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3501; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 3502; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 3503; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3504; AVX1-NEXT: retq 3505; 3506; AVX2-LABEL: test104: 3507; AVX2: # %bb.0: # %entry 3508; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 3509; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 3510; AVX2-NEXT: retq 3511; 3512; AVX512F-LABEL: test104: 3513; AVX512F: # %bb.0: # %entry 3514; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3515; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3516; AVX512F-NEXT: vpmaxub %ymm2, %ymm3, %ymm2 3517; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 3518; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3519; AVX512F-NEXT: retq 3520; 3521; AVX512BW-LABEL: test104: 3522; AVX512BW: # %bb.0: # %entry 3523; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 3524; AVX512BW-NEXT: retq 3525entry: 3526 %cmp = icmp uge <64 x i8> %a, %b 3527 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3528 ret <64 x i8> %sel 3529} 3530 3531define <32 x i16> @test105(<32 x i16> %a, <32 x i16> %b) { 3532; SSE-LABEL: test105: 3533; SSE: # %bb.0: # %entry 3534; SSE-NEXT: pminsw %xmm4, %xmm0 3535; SSE-NEXT: pminsw %xmm5, %xmm1 3536; SSE-NEXT: pminsw %xmm6, %xmm2 3537; SSE-NEXT: pminsw %xmm7, %xmm3 3538; SSE-NEXT: retq 3539; 3540; AVX1-LABEL: test105: 3541; AVX1: # %bb.0: # %entry 3542; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3543; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3544; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 3545; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 3546; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3547; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3548; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3549; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 3550; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 3551; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3552; AVX1-NEXT: retq 3553; 3554; AVX2-LABEL: test105: 3555; AVX2: # %bb.0: # %entry 3556; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 3557; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 3558; AVX2-NEXT: retq 3559; 3560; AVX512F-LABEL: test105: 3561; AVX512F: # %bb.0: # %entry 3562; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3563; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3564; AVX512F-NEXT: vpminsw %ymm2, %ymm3, %ymm2 3565; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 3566; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3567; AVX512F-NEXT: retq 3568; 3569; AVX512BW-LABEL: test105: 3570; AVX512BW: # %bb.0: # %entry 3571; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 3572; AVX512BW-NEXT: retq 3573entry: 3574 %cmp = icmp slt <32 x i16> %a, %b 3575 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3576 ret <32 x i16> %sel 3577} 3578 3579define <32 x i16> @test106(<32 x i16> %a, <32 x i16> %b) { 3580; SSE-LABEL: test106: 3581; SSE: # %bb.0: # %entry 3582; SSE-NEXT: pminsw %xmm4, %xmm0 3583; SSE-NEXT: pminsw %xmm5, %xmm1 3584; SSE-NEXT: pminsw %xmm6, %xmm2 3585; SSE-NEXT: pminsw %xmm7, %xmm3 3586; SSE-NEXT: retq 3587; 3588; AVX1-LABEL: test106: 3589; AVX1: # %bb.0: # %entry 3590; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3591; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3592; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 3593; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 3594; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3595; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3596; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3597; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 3598; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 3599; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3600; AVX1-NEXT: retq 3601; 3602; AVX2-LABEL: test106: 3603; AVX2: # %bb.0: # %entry 3604; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 3605; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 3606; AVX2-NEXT: retq 3607; 3608; AVX512F-LABEL: test106: 3609; AVX512F: # %bb.0: # %entry 3610; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3611; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3612; AVX512F-NEXT: vpminsw %ymm2, %ymm3, %ymm2 3613; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 3614; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3615; AVX512F-NEXT: retq 3616; 3617; AVX512BW-LABEL: test106: 3618; AVX512BW: # %bb.0: # %entry 3619; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 3620; AVX512BW-NEXT: retq 3621entry: 3622 %cmp = icmp sle <32 x i16> %a, %b 3623 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3624 ret <32 x i16> %sel 3625} 3626 3627define <32 x i16> @test107(<32 x i16> %a, <32 x i16> %b) { 3628; SSE-LABEL: test107: 3629; SSE: # %bb.0: # %entry 3630; SSE-NEXT: pmaxsw %xmm4, %xmm0 3631; SSE-NEXT: pmaxsw %xmm5, %xmm1 3632; SSE-NEXT: pmaxsw %xmm6, %xmm2 3633; SSE-NEXT: pmaxsw %xmm7, %xmm3 3634; SSE-NEXT: retq 3635; 3636; AVX1-LABEL: test107: 3637; AVX1: # %bb.0: # %entry 3638; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3639; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3640; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 3641; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 3642; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3643; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3644; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3645; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 3646; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 3647; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3648; AVX1-NEXT: retq 3649; 3650; AVX2-LABEL: test107: 3651; AVX2: # %bb.0: # %entry 3652; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 3653; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 3654; AVX2-NEXT: retq 3655; 3656; AVX512F-LABEL: test107: 3657; AVX512F: # %bb.0: # %entry 3658; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3659; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3660; AVX512F-NEXT: vpmaxsw %ymm2, %ymm3, %ymm2 3661; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 3662; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3663; AVX512F-NEXT: retq 3664; 3665; AVX512BW-LABEL: test107: 3666; AVX512BW: # %bb.0: # %entry 3667; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 3668; AVX512BW-NEXT: retq 3669entry: 3670 %cmp = icmp sgt <32 x i16> %a, %b 3671 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3672 ret <32 x i16> %sel 3673} 3674 3675define <32 x i16> @test108(<32 x i16> %a, <32 x i16> %b) { 3676; SSE-LABEL: test108: 3677; SSE: # %bb.0: # %entry 3678; SSE-NEXT: pmaxsw %xmm4, %xmm0 3679; SSE-NEXT: pmaxsw %xmm5, %xmm1 3680; SSE-NEXT: pmaxsw %xmm6, %xmm2 3681; SSE-NEXT: pmaxsw %xmm7, %xmm3 3682; SSE-NEXT: retq 3683; 3684; AVX1-LABEL: test108: 3685; AVX1: # %bb.0: # %entry 3686; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3687; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3688; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 3689; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 3690; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3691; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3692; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3693; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 3694; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 3695; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3696; AVX1-NEXT: retq 3697; 3698; AVX2-LABEL: test108: 3699; AVX2: # %bb.0: # %entry 3700; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 3701; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 3702; AVX2-NEXT: retq 3703; 3704; AVX512F-LABEL: test108: 3705; AVX512F: # %bb.0: # %entry 3706; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3707; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3708; AVX512F-NEXT: vpmaxsw %ymm2, %ymm3, %ymm2 3709; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 3710; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3711; AVX512F-NEXT: retq 3712; 3713; AVX512BW-LABEL: test108: 3714; AVX512BW: # %bb.0: # %entry 3715; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 3716; AVX512BW-NEXT: retq 3717entry: 3718 %cmp = icmp sge <32 x i16> %a, %b 3719 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3720 ret <32 x i16> %sel 3721} 3722 3723define <32 x i16> @test109(<32 x i16> %a, <32 x i16> %b) { 3724; SSE2-LABEL: test109: 3725; SSE2: # %bb.0: # %entry 3726; SSE2-NEXT: movdqa %xmm0, %xmm8 3727; SSE2-NEXT: psubusw %xmm4, %xmm8 3728; SSE2-NEXT: psubw %xmm8, %xmm0 3729; SSE2-NEXT: movdqa %xmm1, %xmm4 3730; SSE2-NEXT: psubusw %xmm5, %xmm4 3731; SSE2-NEXT: psubw %xmm4, %xmm1 3732; SSE2-NEXT: movdqa %xmm2, %xmm4 3733; SSE2-NEXT: psubusw %xmm6, %xmm4 3734; SSE2-NEXT: psubw %xmm4, %xmm2 3735; SSE2-NEXT: movdqa %xmm3, %xmm4 3736; SSE2-NEXT: psubusw %xmm7, %xmm4 3737; SSE2-NEXT: psubw %xmm4, %xmm3 3738; SSE2-NEXT: retq 3739; 3740; SSE4-LABEL: test109: 3741; SSE4: # %bb.0: # %entry 3742; SSE4-NEXT: pminuw %xmm4, %xmm0 3743; SSE4-NEXT: pminuw %xmm5, %xmm1 3744; SSE4-NEXT: pminuw %xmm6, %xmm2 3745; SSE4-NEXT: pminuw %xmm7, %xmm3 3746; SSE4-NEXT: retq 3747; 3748; AVX1-LABEL: test109: 3749; AVX1: # %bb.0: # %entry 3750; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3751; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3752; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 3753; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 3754; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3755; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3756; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3757; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 3758; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 3759; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3760; AVX1-NEXT: retq 3761; 3762; AVX2-LABEL: test109: 3763; AVX2: # %bb.0: # %entry 3764; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 3765; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 3766; AVX2-NEXT: retq 3767; 3768; AVX512F-LABEL: test109: 3769; AVX512F: # %bb.0: # %entry 3770; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3771; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3772; AVX512F-NEXT: vpminuw %ymm2, %ymm3, %ymm2 3773; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 3774; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3775; AVX512F-NEXT: retq 3776; 3777; AVX512BW-LABEL: test109: 3778; AVX512BW: # %bb.0: # %entry 3779; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 3780; AVX512BW-NEXT: retq 3781entry: 3782 %cmp = icmp ult <32 x i16> %a, %b 3783 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3784 ret <32 x i16> %sel 3785} 3786 3787define <32 x i16> @test110(<32 x i16> %a, <32 x i16> %b) { 3788; SSE2-LABEL: test110: 3789; SSE2: # %bb.0: # %entry 3790; SSE2-NEXT: movdqa %xmm0, %xmm8 3791; SSE2-NEXT: psubusw %xmm4, %xmm8 3792; SSE2-NEXT: psubw %xmm8, %xmm0 3793; SSE2-NEXT: movdqa %xmm1, %xmm4 3794; SSE2-NEXT: psubusw %xmm5, %xmm4 3795; SSE2-NEXT: psubw %xmm4, %xmm1 3796; SSE2-NEXT: movdqa %xmm2, %xmm4 3797; SSE2-NEXT: psubusw %xmm6, %xmm4 3798; SSE2-NEXT: psubw %xmm4, %xmm2 3799; SSE2-NEXT: movdqa %xmm3, %xmm4 3800; SSE2-NEXT: psubusw %xmm7, %xmm4 3801; SSE2-NEXT: psubw %xmm4, %xmm3 3802; SSE2-NEXT: retq 3803; 3804; SSE4-LABEL: test110: 3805; SSE4: # %bb.0: # %entry 3806; SSE4-NEXT: pminuw %xmm4, %xmm0 3807; SSE4-NEXT: pminuw %xmm5, %xmm1 3808; SSE4-NEXT: pminuw %xmm6, %xmm2 3809; SSE4-NEXT: pminuw %xmm7, %xmm3 3810; SSE4-NEXT: retq 3811; 3812; AVX1-LABEL: test110: 3813; AVX1: # %bb.0: # %entry 3814; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3815; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3816; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 3817; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 3818; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3819; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3820; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3821; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 3822; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 3823; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3824; AVX1-NEXT: retq 3825; 3826; AVX2-LABEL: test110: 3827; AVX2: # %bb.0: # %entry 3828; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 3829; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 3830; AVX2-NEXT: retq 3831; 3832; AVX512F-LABEL: test110: 3833; AVX512F: # %bb.0: # %entry 3834; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3835; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3836; AVX512F-NEXT: vpminuw %ymm2, %ymm3, %ymm2 3837; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 3838; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3839; AVX512F-NEXT: retq 3840; 3841; AVX512BW-LABEL: test110: 3842; AVX512BW: # %bb.0: # %entry 3843; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 3844; AVX512BW-NEXT: retq 3845entry: 3846 %cmp = icmp ule <32 x i16> %a, %b 3847 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3848 ret <32 x i16> %sel 3849} 3850 3851define <32 x i16> @test111(<32 x i16> %a, <32 x i16> %b) { 3852; SSE2-LABEL: test111: 3853; SSE2: # %bb.0: # %entry 3854; SSE2-NEXT: psubusw %xmm0, %xmm4 3855; SSE2-NEXT: paddw %xmm4, %xmm0 3856; SSE2-NEXT: psubusw %xmm1, %xmm5 3857; SSE2-NEXT: paddw %xmm5, %xmm1 3858; SSE2-NEXT: psubusw %xmm2, %xmm6 3859; SSE2-NEXT: paddw %xmm6, %xmm2 3860; SSE2-NEXT: psubusw %xmm3, %xmm7 3861; SSE2-NEXT: paddw %xmm7, %xmm3 3862; SSE2-NEXT: retq 3863; 3864; SSE4-LABEL: test111: 3865; SSE4: # %bb.0: # %entry 3866; SSE4-NEXT: pmaxuw %xmm4, %xmm0 3867; SSE4-NEXT: pmaxuw %xmm5, %xmm1 3868; SSE4-NEXT: pmaxuw %xmm6, %xmm2 3869; SSE4-NEXT: pmaxuw %xmm7, %xmm3 3870; SSE4-NEXT: retq 3871; 3872; AVX1-LABEL: test111: 3873; AVX1: # %bb.0: # %entry 3874; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3875; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3876; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 3877; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 3878; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3879; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3880; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3881; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 3882; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 3883; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3884; AVX1-NEXT: retq 3885; 3886; AVX2-LABEL: test111: 3887; AVX2: # %bb.0: # %entry 3888; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 3889; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 3890; AVX2-NEXT: retq 3891; 3892; AVX512F-LABEL: test111: 3893; AVX512F: # %bb.0: # %entry 3894; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3895; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3896; AVX512F-NEXT: vpmaxuw %ymm2, %ymm3, %ymm2 3897; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 3898; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3899; AVX512F-NEXT: retq 3900; 3901; AVX512BW-LABEL: test111: 3902; AVX512BW: # %bb.0: # %entry 3903; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 3904; AVX512BW-NEXT: retq 3905entry: 3906 %cmp = icmp ugt <32 x i16> %a, %b 3907 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3908 ret <32 x i16> %sel 3909} 3910 3911define <32 x i16> @test112(<32 x i16> %a, <32 x i16> %b) { 3912; SSE2-LABEL: test112: 3913; SSE2: # %bb.0: # %entry 3914; SSE2-NEXT: psubusw %xmm0, %xmm4 3915; SSE2-NEXT: paddw %xmm4, %xmm0 3916; SSE2-NEXT: psubusw %xmm1, %xmm5 3917; SSE2-NEXT: paddw %xmm5, %xmm1 3918; SSE2-NEXT: psubusw %xmm2, %xmm6 3919; SSE2-NEXT: paddw %xmm6, %xmm2 3920; SSE2-NEXT: psubusw %xmm3, %xmm7 3921; SSE2-NEXT: paddw %xmm7, %xmm3 3922; SSE2-NEXT: retq 3923; 3924; SSE4-LABEL: test112: 3925; SSE4: # %bb.0: # %entry 3926; SSE4-NEXT: pmaxuw %xmm4, %xmm0 3927; SSE4-NEXT: pmaxuw %xmm5, %xmm1 3928; SSE4-NEXT: pmaxuw %xmm6, %xmm2 3929; SSE4-NEXT: pmaxuw %xmm7, %xmm3 3930; SSE4-NEXT: retq 3931; 3932; AVX1-LABEL: test112: 3933; AVX1: # %bb.0: # %entry 3934; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3935; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3936; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 3937; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 3938; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3939; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3940; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3941; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 3942; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 3943; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3944; AVX1-NEXT: retq 3945; 3946; AVX2-LABEL: test112: 3947; AVX2: # %bb.0: # %entry 3948; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 3949; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 3950; AVX2-NEXT: retq 3951; 3952; AVX512F-LABEL: test112: 3953; AVX512F: # %bb.0: # %entry 3954; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 3955; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 3956; AVX512F-NEXT: vpmaxuw %ymm2, %ymm3, %ymm2 3957; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 3958; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 3959; AVX512F-NEXT: retq 3960; 3961; AVX512BW-LABEL: test112: 3962; AVX512BW: # %bb.0: # %entry 3963; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 3964; AVX512BW-NEXT: retq 3965entry: 3966 %cmp = icmp uge <32 x i16> %a, %b 3967 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3968 ret <32 x i16> %sel 3969} 3970 3971define <16 x i32> @test113(<16 x i32> %a, <16 x i32> %b) { 3972; SSE2-LABEL: test113: 3973; SSE2: # %bb.0: # %entry 3974; SSE2-NEXT: movdqa %xmm4, %xmm8 3975; SSE2-NEXT: pcmpgtd %xmm0, %xmm8 3976; SSE2-NEXT: pand %xmm8, %xmm0 3977; SSE2-NEXT: pandn %xmm4, %xmm8 3978; SSE2-NEXT: por %xmm8, %xmm0 3979; SSE2-NEXT: movdqa %xmm5, %xmm4 3980; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 3981; SSE2-NEXT: pand %xmm4, %xmm1 3982; SSE2-NEXT: pandn %xmm5, %xmm4 3983; SSE2-NEXT: por %xmm4, %xmm1 3984; SSE2-NEXT: movdqa %xmm6, %xmm4 3985; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 3986; SSE2-NEXT: pand %xmm4, %xmm2 3987; SSE2-NEXT: pandn %xmm6, %xmm4 3988; SSE2-NEXT: por %xmm4, %xmm2 3989; SSE2-NEXT: movdqa %xmm7, %xmm4 3990; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 3991; SSE2-NEXT: pand %xmm4, %xmm3 3992; SSE2-NEXT: pandn %xmm7, %xmm4 3993; SSE2-NEXT: por %xmm4, %xmm3 3994; SSE2-NEXT: retq 3995; 3996; SSE4-LABEL: test113: 3997; SSE4: # %bb.0: # %entry 3998; SSE4-NEXT: pminsd %xmm4, %xmm0 3999; SSE4-NEXT: pminsd %xmm5, %xmm1 4000; SSE4-NEXT: pminsd %xmm6, %xmm2 4001; SSE4-NEXT: pminsd %xmm7, %xmm3 4002; SSE4-NEXT: retq 4003; 4004; AVX1-LABEL: test113: 4005; AVX1: # %bb.0: # %entry 4006; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4007; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4008; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 4009; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 4010; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4011; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4012; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4013; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 4014; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 4015; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4016; AVX1-NEXT: retq 4017; 4018; AVX2-LABEL: test113: 4019; AVX2: # %bb.0: # %entry 4020; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 4021; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 4022; AVX2-NEXT: retq 4023; 4024; AVX512-LABEL: test113: 4025; AVX512: # %bb.0: # %entry 4026; AVX512-NEXT: vpminsd %zmm1, %zmm0, %zmm0 4027; AVX512-NEXT: retq 4028entry: 4029 %cmp = icmp slt <16 x i32> %a, %b 4030 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4031 ret <16 x i32> %sel 4032} 4033 4034define <16 x i32> @test114(<16 x i32> %a, <16 x i32> %b) { 4035; SSE2-LABEL: test114: 4036; SSE2: # %bb.0: # %entry 4037; SSE2-NEXT: movdqa %xmm4, %xmm8 4038; SSE2-NEXT: pcmpgtd %xmm0, %xmm8 4039; SSE2-NEXT: pand %xmm8, %xmm0 4040; SSE2-NEXT: pandn %xmm4, %xmm8 4041; SSE2-NEXT: por %xmm8, %xmm0 4042; SSE2-NEXT: movdqa %xmm5, %xmm4 4043; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 4044; SSE2-NEXT: pand %xmm4, %xmm1 4045; SSE2-NEXT: pandn %xmm5, %xmm4 4046; SSE2-NEXT: por %xmm4, %xmm1 4047; SSE2-NEXT: movdqa %xmm6, %xmm4 4048; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 4049; SSE2-NEXT: pand %xmm4, %xmm2 4050; SSE2-NEXT: pandn %xmm6, %xmm4 4051; SSE2-NEXT: por %xmm4, %xmm2 4052; SSE2-NEXT: movdqa %xmm7, %xmm4 4053; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 4054; SSE2-NEXT: pand %xmm4, %xmm3 4055; SSE2-NEXT: pandn %xmm7, %xmm4 4056; SSE2-NEXT: por %xmm4, %xmm3 4057; SSE2-NEXT: retq 4058; 4059; SSE4-LABEL: test114: 4060; SSE4: # %bb.0: # %entry 4061; SSE4-NEXT: pminsd %xmm4, %xmm0 4062; SSE4-NEXT: pminsd %xmm5, %xmm1 4063; SSE4-NEXT: pminsd %xmm6, %xmm2 4064; SSE4-NEXT: pminsd %xmm7, %xmm3 4065; SSE4-NEXT: retq 4066; 4067; AVX1-LABEL: test114: 4068; AVX1: # %bb.0: # %entry 4069; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4070; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4071; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 4072; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 4073; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4074; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4075; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4076; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 4077; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 4078; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4079; AVX1-NEXT: retq 4080; 4081; AVX2-LABEL: test114: 4082; AVX2: # %bb.0: # %entry 4083; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 4084; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 4085; AVX2-NEXT: retq 4086; 4087; AVX512-LABEL: test114: 4088; AVX512: # %bb.0: # %entry 4089; AVX512-NEXT: vpminsd %zmm1, %zmm0, %zmm0 4090; AVX512-NEXT: retq 4091entry: 4092 %cmp = icmp sle <16 x i32> %a, %b 4093 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4094 ret <16 x i32> %sel 4095} 4096 4097define <16 x i32> @test115(<16 x i32> %a, <16 x i32> %b) { 4098; SSE2-LABEL: test115: 4099; SSE2: # %bb.0: # %entry 4100; SSE2-NEXT: movdqa %xmm0, %xmm8 4101; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 4102; SSE2-NEXT: pand %xmm8, %xmm0 4103; SSE2-NEXT: pandn %xmm4, %xmm8 4104; SSE2-NEXT: por %xmm0, %xmm8 4105; SSE2-NEXT: movdqa %xmm1, %xmm4 4106; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 4107; SSE2-NEXT: pand %xmm4, %xmm1 4108; SSE2-NEXT: pandn %xmm5, %xmm4 4109; SSE2-NEXT: por %xmm1, %xmm4 4110; SSE2-NEXT: movdqa %xmm2, %xmm5 4111; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 4112; SSE2-NEXT: pand %xmm5, %xmm2 4113; SSE2-NEXT: pandn %xmm6, %xmm5 4114; SSE2-NEXT: por %xmm2, %xmm5 4115; SSE2-NEXT: movdqa %xmm3, %xmm6 4116; SSE2-NEXT: pcmpgtd %xmm7, %xmm6 4117; SSE2-NEXT: pand %xmm6, %xmm3 4118; SSE2-NEXT: pandn %xmm7, %xmm6 4119; SSE2-NEXT: por %xmm3, %xmm6 4120; SSE2-NEXT: movdqa %xmm8, %xmm0 4121; SSE2-NEXT: movdqa %xmm4, %xmm1 4122; SSE2-NEXT: movdqa %xmm5, %xmm2 4123; SSE2-NEXT: movdqa %xmm6, %xmm3 4124; SSE2-NEXT: retq 4125; 4126; SSE4-LABEL: test115: 4127; SSE4: # %bb.0: # %entry 4128; SSE4-NEXT: pmaxsd %xmm4, %xmm0 4129; SSE4-NEXT: pmaxsd %xmm5, %xmm1 4130; SSE4-NEXT: pmaxsd %xmm6, %xmm2 4131; SSE4-NEXT: pmaxsd %xmm7, %xmm3 4132; SSE4-NEXT: retq 4133; 4134; AVX1-LABEL: test115: 4135; AVX1: # %bb.0: # %entry 4136; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4137; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4138; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 4139; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 4140; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4141; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4142; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4143; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 4144; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 4145; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4146; AVX1-NEXT: retq 4147; 4148; AVX2-LABEL: test115: 4149; AVX2: # %bb.0: # %entry 4150; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 4151; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 4152; AVX2-NEXT: retq 4153; 4154; AVX512-LABEL: test115: 4155; AVX512: # %bb.0: # %entry 4156; AVX512-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 4157; AVX512-NEXT: retq 4158entry: 4159 %cmp = icmp sgt <16 x i32> %a, %b 4160 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4161 ret <16 x i32> %sel 4162} 4163 4164define <16 x i32> @test116(<16 x i32> %a, <16 x i32> %b) { 4165; SSE2-LABEL: test116: 4166; SSE2: # %bb.0: # %entry 4167; SSE2-NEXT: movdqa %xmm0, %xmm8 4168; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 4169; SSE2-NEXT: pand %xmm8, %xmm0 4170; SSE2-NEXT: pandn %xmm4, %xmm8 4171; SSE2-NEXT: por %xmm0, %xmm8 4172; SSE2-NEXT: movdqa %xmm1, %xmm4 4173; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 4174; SSE2-NEXT: pand %xmm4, %xmm1 4175; SSE2-NEXT: pandn %xmm5, %xmm4 4176; SSE2-NEXT: por %xmm1, %xmm4 4177; SSE2-NEXT: movdqa %xmm2, %xmm5 4178; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 4179; SSE2-NEXT: pand %xmm5, %xmm2 4180; SSE2-NEXT: pandn %xmm6, %xmm5 4181; SSE2-NEXT: por %xmm2, %xmm5 4182; SSE2-NEXT: movdqa %xmm3, %xmm6 4183; SSE2-NEXT: pcmpgtd %xmm7, %xmm6 4184; SSE2-NEXT: pand %xmm6, %xmm3 4185; SSE2-NEXT: pandn %xmm7, %xmm6 4186; SSE2-NEXT: por %xmm3, %xmm6 4187; SSE2-NEXT: movdqa %xmm8, %xmm0 4188; SSE2-NEXT: movdqa %xmm4, %xmm1 4189; SSE2-NEXT: movdqa %xmm5, %xmm2 4190; SSE2-NEXT: movdqa %xmm6, %xmm3 4191; SSE2-NEXT: retq 4192; 4193; SSE4-LABEL: test116: 4194; SSE4: # %bb.0: # %entry 4195; SSE4-NEXT: pmaxsd %xmm4, %xmm0 4196; SSE4-NEXT: pmaxsd %xmm5, %xmm1 4197; SSE4-NEXT: pmaxsd %xmm6, %xmm2 4198; SSE4-NEXT: pmaxsd %xmm7, %xmm3 4199; SSE4-NEXT: retq 4200; 4201; AVX1-LABEL: test116: 4202; AVX1: # %bb.0: # %entry 4203; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4204; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4205; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 4206; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 4207; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4208; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4209; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4210; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 4211; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 4212; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4213; AVX1-NEXT: retq 4214; 4215; AVX2-LABEL: test116: 4216; AVX2: # %bb.0: # %entry 4217; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 4218; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 4219; AVX2-NEXT: retq 4220; 4221; AVX512-LABEL: test116: 4222; AVX512: # %bb.0: # %entry 4223; AVX512-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 4224; AVX512-NEXT: retq 4225entry: 4226 %cmp = icmp sge <16 x i32> %a, %b 4227 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4228 ret <16 x i32> %sel 4229} 4230 4231define <16 x i32> @test117(<16 x i32> %a, <16 x i32> %b) { 4232; SSE2-LABEL: test117: 4233; SSE2: # %bb.0: # %entry 4234; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 4235; SSE2-NEXT: movdqa %xmm0, %xmm9 4236; SSE2-NEXT: pxor %xmm8, %xmm9 4237; SSE2-NEXT: movdqa %xmm4, %xmm10 4238; SSE2-NEXT: pxor %xmm8, %xmm10 4239; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4240; SSE2-NEXT: pand %xmm10, %xmm0 4241; SSE2-NEXT: pandn %xmm4, %xmm10 4242; SSE2-NEXT: por %xmm10, %xmm0 4243; SSE2-NEXT: movdqa %xmm1, %xmm9 4244; SSE2-NEXT: pxor %xmm8, %xmm9 4245; SSE2-NEXT: movdqa %xmm5, %xmm4 4246; SSE2-NEXT: pxor %xmm8, %xmm4 4247; SSE2-NEXT: pcmpgtd %xmm9, %xmm4 4248; SSE2-NEXT: pand %xmm4, %xmm1 4249; SSE2-NEXT: pandn %xmm5, %xmm4 4250; SSE2-NEXT: por %xmm4, %xmm1 4251; SSE2-NEXT: movdqa %xmm2, %xmm4 4252; SSE2-NEXT: pxor %xmm8, %xmm4 4253; SSE2-NEXT: movdqa %xmm6, %xmm5 4254; SSE2-NEXT: pxor %xmm8, %xmm5 4255; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4256; SSE2-NEXT: pand %xmm5, %xmm2 4257; SSE2-NEXT: pandn %xmm6, %xmm5 4258; SSE2-NEXT: por %xmm5, %xmm2 4259; SSE2-NEXT: movdqa %xmm3, %xmm4 4260; SSE2-NEXT: pxor %xmm8, %xmm4 4261; SSE2-NEXT: pxor %xmm7, %xmm8 4262; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 4263; SSE2-NEXT: pand %xmm8, %xmm3 4264; SSE2-NEXT: pandn %xmm7, %xmm8 4265; SSE2-NEXT: por %xmm8, %xmm3 4266; SSE2-NEXT: retq 4267; 4268; SSE4-LABEL: test117: 4269; SSE4: # %bb.0: # %entry 4270; SSE4-NEXT: pminud %xmm4, %xmm0 4271; SSE4-NEXT: pminud %xmm5, %xmm1 4272; SSE4-NEXT: pminud %xmm6, %xmm2 4273; SSE4-NEXT: pminud %xmm7, %xmm3 4274; SSE4-NEXT: retq 4275; 4276; AVX1-LABEL: test117: 4277; AVX1: # %bb.0: # %entry 4278; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4279; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4280; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 4281; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 4282; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4283; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4284; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4285; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 4286; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 4287; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4288; AVX1-NEXT: retq 4289; 4290; AVX2-LABEL: test117: 4291; AVX2: # %bb.0: # %entry 4292; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 4293; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 4294; AVX2-NEXT: retq 4295; 4296; AVX512-LABEL: test117: 4297; AVX512: # %bb.0: # %entry 4298; AVX512-NEXT: vpminud %zmm1, %zmm0, %zmm0 4299; AVX512-NEXT: retq 4300entry: 4301 %cmp = icmp ult <16 x i32> %a, %b 4302 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4303 ret <16 x i32> %sel 4304} 4305 4306define <16 x i32> @test118(<16 x i32> %a, <16 x i32> %b) { 4307; SSE2-LABEL: test118: 4308; SSE2: # %bb.0: # %entry 4309; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 4310; SSE2-NEXT: movdqa %xmm0, %xmm9 4311; SSE2-NEXT: pxor %xmm8, %xmm9 4312; SSE2-NEXT: movdqa %xmm4, %xmm10 4313; SSE2-NEXT: pxor %xmm8, %xmm10 4314; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4315; SSE2-NEXT: pand %xmm10, %xmm0 4316; SSE2-NEXT: pandn %xmm4, %xmm10 4317; SSE2-NEXT: por %xmm10, %xmm0 4318; SSE2-NEXT: movdqa %xmm1, %xmm9 4319; SSE2-NEXT: pxor %xmm8, %xmm9 4320; SSE2-NEXT: movdqa %xmm5, %xmm4 4321; SSE2-NEXT: pxor %xmm8, %xmm4 4322; SSE2-NEXT: pcmpgtd %xmm9, %xmm4 4323; SSE2-NEXT: pand %xmm4, %xmm1 4324; SSE2-NEXT: pandn %xmm5, %xmm4 4325; SSE2-NEXT: por %xmm4, %xmm1 4326; SSE2-NEXT: movdqa %xmm2, %xmm4 4327; SSE2-NEXT: pxor %xmm8, %xmm4 4328; SSE2-NEXT: movdqa %xmm6, %xmm5 4329; SSE2-NEXT: pxor %xmm8, %xmm5 4330; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4331; SSE2-NEXT: pand %xmm5, %xmm2 4332; SSE2-NEXT: pandn %xmm6, %xmm5 4333; SSE2-NEXT: por %xmm5, %xmm2 4334; SSE2-NEXT: movdqa %xmm3, %xmm4 4335; SSE2-NEXT: pxor %xmm8, %xmm4 4336; SSE2-NEXT: pxor %xmm7, %xmm8 4337; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 4338; SSE2-NEXT: pand %xmm8, %xmm3 4339; SSE2-NEXT: pandn %xmm7, %xmm8 4340; SSE2-NEXT: por %xmm8, %xmm3 4341; SSE2-NEXT: retq 4342; 4343; SSE4-LABEL: test118: 4344; SSE4: # %bb.0: # %entry 4345; SSE4-NEXT: pminud %xmm4, %xmm0 4346; SSE4-NEXT: pminud %xmm5, %xmm1 4347; SSE4-NEXT: pminud %xmm6, %xmm2 4348; SSE4-NEXT: pminud %xmm7, %xmm3 4349; SSE4-NEXT: retq 4350; 4351; AVX1-LABEL: test118: 4352; AVX1: # %bb.0: # %entry 4353; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4354; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4355; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 4356; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 4357; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4358; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4359; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4360; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 4361; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 4362; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4363; AVX1-NEXT: retq 4364; 4365; AVX2-LABEL: test118: 4366; AVX2: # %bb.0: # %entry 4367; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 4368; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 4369; AVX2-NEXT: retq 4370; 4371; AVX512-LABEL: test118: 4372; AVX512: # %bb.0: # %entry 4373; AVX512-NEXT: vpminud %zmm1, %zmm0, %zmm0 4374; AVX512-NEXT: retq 4375entry: 4376 %cmp = icmp ule <16 x i32> %a, %b 4377 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4378 ret <16 x i32> %sel 4379} 4380 4381define <16 x i32> @test119(<16 x i32> %a, <16 x i32> %b) { 4382; SSE2-LABEL: test119: 4383; SSE2: # %bb.0: # %entry 4384; SSE2-NEXT: movdqa %xmm1, %xmm8 4385; SSE2-NEXT: movdqa %xmm0, %xmm10 4386; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648] 4387; SSE2-NEXT: movdqa %xmm4, %xmm1 4388; SSE2-NEXT: pxor %xmm9, %xmm1 4389; SSE2-NEXT: pxor %xmm9, %xmm0 4390; SSE2-NEXT: pcmpgtd %xmm1, %xmm0 4391; SSE2-NEXT: pand %xmm0, %xmm10 4392; SSE2-NEXT: pandn %xmm4, %xmm0 4393; SSE2-NEXT: por %xmm10, %xmm0 4394; SSE2-NEXT: movdqa %xmm5, %xmm4 4395; SSE2-NEXT: pxor %xmm9, %xmm4 4396; SSE2-NEXT: movdqa %xmm8, %xmm1 4397; SSE2-NEXT: pxor %xmm9, %xmm1 4398; SSE2-NEXT: pcmpgtd %xmm4, %xmm1 4399; SSE2-NEXT: pand %xmm1, %xmm8 4400; SSE2-NEXT: pandn %xmm5, %xmm1 4401; SSE2-NEXT: por %xmm8, %xmm1 4402; SSE2-NEXT: movdqa %xmm6, %xmm5 4403; SSE2-NEXT: pxor %xmm9, %xmm5 4404; SSE2-NEXT: movdqa %xmm2, %xmm4 4405; SSE2-NEXT: pxor %xmm9, %xmm4 4406; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 4407; SSE2-NEXT: pand %xmm4, %xmm2 4408; SSE2-NEXT: pandn %xmm6, %xmm4 4409; SSE2-NEXT: por %xmm2, %xmm4 4410; SSE2-NEXT: movdqa %xmm7, %xmm2 4411; SSE2-NEXT: pxor %xmm9, %xmm2 4412; SSE2-NEXT: pxor %xmm3, %xmm9 4413; SSE2-NEXT: pcmpgtd %xmm2, %xmm9 4414; SSE2-NEXT: pand %xmm9, %xmm3 4415; SSE2-NEXT: pandn %xmm7, %xmm9 4416; SSE2-NEXT: por %xmm9, %xmm3 4417; SSE2-NEXT: movdqa %xmm4, %xmm2 4418; SSE2-NEXT: retq 4419; 4420; SSE4-LABEL: test119: 4421; SSE4: # %bb.0: # %entry 4422; SSE4-NEXT: pmaxud %xmm4, %xmm0 4423; SSE4-NEXT: pmaxud %xmm5, %xmm1 4424; SSE4-NEXT: pmaxud %xmm6, %xmm2 4425; SSE4-NEXT: pmaxud %xmm7, %xmm3 4426; SSE4-NEXT: retq 4427; 4428; AVX1-LABEL: test119: 4429; AVX1: # %bb.0: # %entry 4430; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4431; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4432; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 4433; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 4434; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4435; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4436; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4437; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 4438; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 4439; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4440; AVX1-NEXT: retq 4441; 4442; AVX2-LABEL: test119: 4443; AVX2: # %bb.0: # %entry 4444; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 4445; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 4446; AVX2-NEXT: retq 4447; 4448; AVX512-LABEL: test119: 4449; AVX512: # %bb.0: # %entry 4450; AVX512-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 4451; AVX512-NEXT: retq 4452entry: 4453 %cmp = icmp ugt <16 x i32> %a, %b 4454 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4455 ret <16 x i32> %sel 4456} 4457 4458define <16 x i32> @test120(<16 x i32> %a, <16 x i32> %b) { 4459; SSE2-LABEL: test120: 4460; SSE2: # %bb.0: # %entry 4461; SSE2-NEXT: movdqa %xmm1, %xmm8 4462; SSE2-NEXT: movdqa %xmm0, %xmm10 4463; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648] 4464; SSE2-NEXT: movdqa %xmm4, %xmm1 4465; SSE2-NEXT: pxor %xmm9, %xmm1 4466; SSE2-NEXT: pxor %xmm9, %xmm0 4467; SSE2-NEXT: pcmpgtd %xmm1, %xmm0 4468; SSE2-NEXT: pand %xmm0, %xmm10 4469; SSE2-NEXT: pandn %xmm4, %xmm0 4470; SSE2-NEXT: por %xmm10, %xmm0 4471; SSE2-NEXT: movdqa %xmm5, %xmm4 4472; SSE2-NEXT: pxor %xmm9, %xmm4 4473; SSE2-NEXT: movdqa %xmm8, %xmm1 4474; SSE2-NEXT: pxor %xmm9, %xmm1 4475; SSE2-NEXT: pcmpgtd %xmm4, %xmm1 4476; SSE2-NEXT: pand %xmm1, %xmm8 4477; SSE2-NEXT: pandn %xmm5, %xmm1 4478; SSE2-NEXT: por %xmm8, %xmm1 4479; SSE2-NEXT: movdqa %xmm6, %xmm5 4480; SSE2-NEXT: pxor %xmm9, %xmm5 4481; SSE2-NEXT: movdqa %xmm2, %xmm4 4482; SSE2-NEXT: pxor %xmm9, %xmm4 4483; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 4484; SSE2-NEXT: pand %xmm4, %xmm2 4485; SSE2-NEXT: pandn %xmm6, %xmm4 4486; SSE2-NEXT: por %xmm2, %xmm4 4487; SSE2-NEXT: movdqa %xmm7, %xmm2 4488; SSE2-NEXT: pxor %xmm9, %xmm2 4489; SSE2-NEXT: pxor %xmm3, %xmm9 4490; SSE2-NEXT: pcmpgtd %xmm2, %xmm9 4491; SSE2-NEXT: pand %xmm9, %xmm3 4492; SSE2-NEXT: pandn %xmm7, %xmm9 4493; SSE2-NEXT: por %xmm9, %xmm3 4494; SSE2-NEXT: movdqa %xmm4, %xmm2 4495; SSE2-NEXT: retq 4496; 4497; SSE4-LABEL: test120: 4498; SSE4: # %bb.0: # %entry 4499; SSE4-NEXT: pmaxud %xmm4, %xmm0 4500; SSE4-NEXT: pmaxud %xmm5, %xmm1 4501; SSE4-NEXT: pmaxud %xmm6, %xmm2 4502; SSE4-NEXT: pmaxud %xmm7, %xmm3 4503; SSE4-NEXT: retq 4504; 4505; AVX1-LABEL: test120: 4506; AVX1: # %bb.0: # %entry 4507; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4508; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4509; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 4510; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 4511; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4512; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4513; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4514; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 4515; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 4516; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4517; AVX1-NEXT: retq 4518; 4519; AVX2-LABEL: test120: 4520; AVX2: # %bb.0: # %entry 4521; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 4522; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 4523; AVX2-NEXT: retq 4524; 4525; AVX512-LABEL: test120: 4526; AVX512: # %bb.0: # %entry 4527; AVX512-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 4528; AVX512-NEXT: retq 4529entry: 4530 %cmp = icmp uge <16 x i32> %a, %b 4531 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4532 ret <16 x i32> %sel 4533} 4534 4535define <8 x i64> @test121(<8 x i64> %a, <8 x i64> %b) { 4536; SSE2-LABEL: test121: 4537; SSE2: # %bb.0: # %entry 4538; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 4539; SSE2-NEXT: movdqa %xmm0, %xmm9 4540; SSE2-NEXT: pxor %xmm8, %xmm9 4541; SSE2-NEXT: movdqa %xmm4, %xmm10 4542; SSE2-NEXT: pxor %xmm8, %xmm10 4543; SSE2-NEXT: movdqa %xmm10, %xmm11 4544; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4545; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4546; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4547; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4548; SSE2-NEXT: pand %xmm12, %xmm9 4549; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4550; SSE2-NEXT: por %xmm9, %xmm10 4551; SSE2-NEXT: pand %xmm10, %xmm0 4552; SSE2-NEXT: pandn %xmm4, %xmm10 4553; SSE2-NEXT: por %xmm10, %xmm0 4554; SSE2-NEXT: movdqa %xmm1, %xmm9 4555; SSE2-NEXT: pxor %xmm8, %xmm9 4556; SSE2-NEXT: movdqa %xmm5, %xmm4 4557; SSE2-NEXT: pxor %xmm8, %xmm4 4558; SSE2-NEXT: movdqa %xmm4, %xmm10 4559; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4560; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4561; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 4562; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 4563; SSE2-NEXT: pand %xmm11, %xmm9 4564; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 4565; SSE2-NEXT: por %xmm9, %xmm4 4566; SSE2-NEXT: pand %xmm4, %xmm1 4567; SSE2-NEXT: pandn %xmm5, %xmm4 4568; SSE2-NEXT: por %xmm4, %xmm1 4569; SSE2-NEXT: movdqa %xmm2, %xmm4 4570; SSE2-NEXT: pxor %xmm8, %xmm4 4571; SSE2-NEXT: movdqa %xmm6, %xmm5 4572; SSE2-NEXT: pxor %xmm8, %xmm5 4573; SSE2-NEXT: movdqa %xmm5, %xmm9 4574; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4575; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4576; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4577; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4578; SSE2-NEXT: pand %xmm10, %xmm4 4579; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4580; SSE2-NEXT: por %xmm4, %xmm5 4581; SSE2-NEXT: pand %xmm5, %xmm2 4582; SSE2-NEXT: pandn %xmm6, %xmm5 4583; SSE2-NEXT: por %xmm5, %xmm2 4584; SSE2-NEXT: movdqa %xmm3, %xmm4 4585; SSE2-NEXT: pxor %xmm8, %xmm4 4586; SSE2-NEXT: pxor %xmm7, %xmm8 4587; SSE2-NEXT: movdqa %xmm8, %xmm5 4588; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4589; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 4590; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 4591; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 4592; SSE2-NEXT: pand %xmm6, %xmm4 4593; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 4594; SSE2-NEXT: por %xmm4, %xmm5 4595; SSE2-NEXT: pand %xmm5, %xmm3 4596; SSE2-NEXT: pandn %xmm7, %xmm5 4597; SSE2-NEXT: por %xmm5, %xmm3 4598; SSE2-NEXT: retq 4599; 4600; SSE4-LABEL: test121: 4601; SSE4: # %bb.0: # %entry 4602; SSE4-NEXT: movdqa %xmm7, %xmm8 4603; SSE4-NEXT: movdqa %xmm0, %xmm7 4604; SSE4-NEXT: movdqa %xmm4, %xmm0 4605; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 4606; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm4 4607; SSE4-NEXT: movdqa %xmm5, %xmm0 4608; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 4609; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 4610; SSE4-NEXT: movdqa %xmm6, %xmm0 4611; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 4612; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 4613; SSE4-NEXT: movdqa %xmm8, %xmm0 4614; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 4615; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 4616; SSE4-NEXT: movapd %xmm4, %xmm0 4617; SSE4-NEXT: movapd %xmm5, %xmm1 4618; SSE4-NEXT: movapd %xmm6, %xmm2 4619; SSE4-NEXT: movapd %xmm8, %xmm3 4620; SSE4-NEXT: retq 4621; 4622; AVX1-LABEL: test121: 4623; AVX1: # %bb.0: # %entry 4624; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 4625; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 4626; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4627; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm5 4628; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4629; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4630; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 4631; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 4632; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 4633; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm4 4634; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 4635; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4636; AVX1-NEXT: retq 4637; 4638; AVX2-LABEL: test121: 4639; AVX2: # %bb.0: # %entry 4640; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm4 4641; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4642; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm2 4643; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4644; AVX2-NEXT: retq 4645; 4646; AVX512-LABEL: test121: 4647; AVX512: # %bb.0: # %entry 4648; AVX512-NEXT: vpminsq %zmm1, %zmm0, %zmm0 4649; AVX512-NEXT: retq 4650entry: 4651 %cmp = icmp slt <8 x i64> %a, %b 4652 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4653 ret <8 x i64> %sel 4654} 4655 4656define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) { 4657; SSE2-LABEL: test122: 4658; SSE2: # %bb.0: # %entry 4659; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 4660; SSE2-NEXT: movdqa %xmm0, %xmm9 4661; SSE2-NEXT: pxor %xmm8, %xmm9 4662; SSE2-NEXT: movdqa %xmm4, %xmm10 4663; SSE2-NEXT: pxor %xmm8, %xmm10 4664; SSE2-NEXT: movdqa %xmm10, %xmm11 4665; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4666; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4667; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4668; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4669; SSE2-NEXT: pand %xmm12, %xmm9 4670; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4671; SSE2-NEXT: por %xmm9, %xmm10 4672; SSE2-NEXT: pand %xmm10, %xmm0 4673; SSE2-NEXT: pandn %xmm4, %xmm10 4674; SSE2-NEXT: por %xmm10, %xmm0 4675; SSE2-NEXT: movdqa %xmm1, %xmm9 4676; SSE2-NEXT: pxor %xmm8, %xmm9 4677; SSE2-NEXT: movdqa %xmm5, %xmm4 4678; SSE2-NEXT: pxor %xmm8, %xmm4 4679; SSE2-NEXT: movdqa %xmm4, %xmm10 4680; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4681; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4682; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 4683; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 4684; SSE2-NEXT: pand %xmm11, %xmm9 4685; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 4686; SSE2-NEXT: por %xmm9, %xmm4 4687; SSE2-NEXT: pand %xmm4, %xmm1 4688; SSE2-NEXT: pandn %xmm5, %xmm4 4689; SSE2-NEXT: por %xmm4, %xmm1 4690; SSE2-NEXT: movdqa %xmm2, %xmm4 4691; SSE2-NEXT: pxor %xmm8, %xmm4 4692; SSE2-NEXT: movdqa %xmm6, %xmm5 4693; SSE2-NEXT: pxor %xmm8, %xmm5 4694; SSE2-NEXT: movdqa %xmm5, %xmm9 4695; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4696; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4697; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4698; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4699; SSE2-NEXT: pand %xmm10, %xmm4 4700; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4701; SSE2-NEXT: por %xmm4, %xmm5 4702; SSE2-NEXT: pand %xmm5, %xmm2 4703; SSE2-NEXT: pandn %xmm6, %xmm5 4704; SSE2-NEXT: por %xmm5, %xmm2 4705; SSE2-NEXT: movdqa %xmm3, %xmm4 4706; SSE2-NEXT: pxor %xmm8, %xmm4 4707; SSE2-NEXT: pxor %xmm7, %xmm8 4708; SSE2-NEXT: movdqa %xmm8, %xmm5 4709; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4710; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 4711; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 4712; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 4713; SSE2-NEXT: pand %xmm6, %xmm4 4714; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 4715; SSE2-NEXT: por %xmm4, %xmm5 4716; SSE2-NEXT: pand %xmm5, %xmm3 4717; SSE2-NEXT: pandn %xmm7, %xmm5 4718; SSE2-NEXT: por %xmm5, %xmm3 4719; SSE2-NEXT: retq 4720; 4721; SSE4-LABEL: test122: 4722; SSE4: # %bb.0: # %entry 4723; SSE4-NEXT: movdqa %xmm7, %xmm8 4724; SSE4-NEXT: movdqa %xmm0, %xmm7 4725; SSE4-NEXT: movdqa %xmm4, %xmm0 4726; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 4727; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm4 4728; SSE4-NEXT: movdqa %xmm5, %xmm0 4729; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 4730; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 4731; SSE4-NEXT: movdqa %xmm6, %xmm0 4732; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 4733; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 4734; SSE4-NEXT: movdqa %xmm8, %xmm0 4735; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 4736; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 4737; SSE4-NEXT: movapd %xmm4, %xmm0 4738; SSE4-NEXT: movapd %xmm5, %xmm1 4739; SSE4-NEXT: movapd %xmm6, %xmm2 4740; SSE4-NEXT: movapd %xmm8, %xmm3 4741; SSE4-NEXT: retq 4742; 4743; AVX1-LABEL: test122: 4744; AVX1: # %bb.0: # %entry 4745; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 4746; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 4747; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4748; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm5 4749; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4750; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4751; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 4752; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 4753; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 4754; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm4 4755; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 4756; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4757; AVX1-NEXT: retq 4758; 4759; AVX2-LABEL: test122: 4760; AVX2: # %bb.0: # %entry 4761; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm4 4762; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4763; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm2 4764; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4765; AVX2-NEXT: retq 4766; 4767; AVX512-LABEL: test122: 4768; AVX512: # %bb.0: # %entry 4769; AVX512-NEXT: vpminsq %zmm1, %zmm0, %zmm0 4770; AVX512-NEXT: retq 4771entry: 4772 %cmp = icmp sle <8 x i64> %a, %b 4773 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4774 ret <8 x i64> %sel 4775} 4776 4777define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) { 4778; SSE2-LABEL: test123: 4779; SSE2: # %bb.0: # %entry 4780; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 4781; SSE2-NEXT: movdqa %xmm4, %xmm9 4782; SSE2-NEXT: pxor %xmm8, %xmm9 4783; SSE2-NEXT: movdqa %xmm0, %xmm10 4784; SSE2-NEXT: pxor %xmm8, %xmm10 4785; SSE2-NEXT: movdqa %xmm10, %xmm11 4786; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4787; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4788; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4789; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4790; SSE2-NEXT: pand %xmm12, %xmm9 4791; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4792; SSE2-NEXT: por %xmm9, %xmm10 4793; SSE2-NEXT: pand %xmm10, %xmm0 4794; SSE2-NEXT: pandn %xmm4, %xmm10 4795; SSE2-NEXT: por %xmm10, %xmm0 4796; SSE2-NEXT: movdqa %xmm5, %xmm9 4797; SSE2-NEXT: pxor %xmm8, %xmm9 4798; SSE2-NEXT: movdqa %xmm1, %xmm4 4799; SSE2-NEXT: pxor %xmm8, %xmm4 4800; SSE2-NEXT: movdqa %xmm4, %xmm10 4801; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4802; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4803; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 4804; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 4805; SSE2-NEXT: pand %xmm11, %xmm9 4806; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 4807; SSE2-NEXT: por %xmm9, %xmm4 4808; SSE2-NEXT: pand %xmm4, %xmm1 4809; SSE2-NEXT: pandn %xmm5, %xmm4 4810; SSE2-NEXT: por %xmm4, %xmm1 4811; SSE2-NEXT: movdqa %xmm6, %xmm4 4812; SSE2-NEXT: pxor %xmm8, %xmm4 4813; SSE2-NEXT: movdqa %xmm2, %xmm5 4814; SSE2-NEXT: pxor %xmm8, %xmm5 4815; SSE2-NEXT: movdqa %xmm5, %xmm9 4816; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4817; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4818; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4819; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4820; SSE2-NEXT: pand %xmm10, %xmm4 4821; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4822; SSE2-NEXT: por %xmm4, %xmm5 4823; SSE2-NEXT: pand %xmm5, %xmm2 4824; SSE2-NEXT: pandn %xmm6, %xmm5 4825; SSE2-NEXT: por %xmm5, %xmm2 4826; SSE2-NEXT: movdqa %xmm7, %xmm4 4827; SSE2-NEXT: pxor %xmm8, %xmm4 4828; SSE2-NEXT: pxor %xmm3, %xmm8 4829; SSE2-NEXT: movdqa %xmm8, %xmm5 4830; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4831; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 4832; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 4833; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 4834; SSE2-NEXT: pand %xmm6, %xmm4 4835; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 4836; SSE2-NEXT: por %xmm4, %xmm5 4837; SSE2-NEXT: pand %xmm5, %xmm3 4838; SSE2-NEXT: pandn %xmm7, %xmm5 4839; SSE2-NEXT: por %xmm5, %xmm3 4840; SSE2-NEXT: retq 4841; 4842; SSE4-LABEL: test123: 4843; SSE4: # %bb.0: # %entry 4844; SSE4-NEXT: movdqa %xmm7, %xmm8 4845; SSE4-NEXT: movdqa %xmm0, %xmm7 4846; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 4847; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm4 4848; SSE4-NEXT: movdqa %xmm1, %xmm0 4849; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 4850; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 4851; SSE4-NEXT: movdqa %xmm2, %xmm0 4852; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 4853; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 4854; SSE4-NEXT: movdqa %xmm3, %xmm0 4855; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 4856; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 4857; SSE4-NEXT: movapd %xmm4, %xmm0 4858; SSE4-NEXT: movapd %xmm5, %xmm1 4859; SSE4-NEXT: movapd %xmm6, %xmm2 4860; SSE4-NEXT: movapd %xmm8, %xmm3 4861; SSE4-NEXT: retq 4862; 4863; AVX1-LABEL: test123: 4864; AVX1: # %bb.0: # %entry 4865; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4866; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4867; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4868; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5 4869; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4870; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4871; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4872; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4873; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 4874; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4 4875; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 4876; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4877; AVX1-NEXT: retq 4878; 4879; AVX2-LABEL: test123: 4880; AVX2: # %bb.0: # %entry 4881; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4 4882; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4883; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2 4884; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4885; AVX2-NEXT: retq 4886; 4887; AVX512-LABEL: test123: 4888; AVX512: # %bb.0: # %entry 4889; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 4890; AVX512-NEXT: retq 4891entry: 4892 %cmp = icmp sgt <8 x i64> %a, %b 4893 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4894 ret <8 x i64> %sel 4895} 4896 4897define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) { 4898; SSE2-LABEL: test124: 4899; SSE2: # %bb.0: # %entry 4900; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 4901; SSE2-NEXT: movdqa %xmm4, %xmm9 4902; SSE2-NEXT: pxor %xmm8, %xmm9 4903; SSE2-NEXT: movdqa %xmm0, %xmm10 4904; SSE2-NEXT: pxor %xmm8, %xmm10 4905; SSE2-NEXT: movdqa %xmm10, %xmm11 4906; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4907; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4908; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4909; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4910; SSE2-NEXT: pand %xmm12, %xmm9 4911; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4912; SSE2-NEXT: por %xmm9, %xmm10 4913; SSE2-NEXT: pand %xmm10, %xmm0 4914; SSE2-NEXT: pandn %xmm4, %xmm10 4915; SSE2-NEXT: por %xmm10, %xmm0 4916; SSE2-NEXT: movdqa %xmm5, %xmm9 4917; SSE2-NEXT: pxor %xmm8, %xmm9 4918; SSE2-NEXT: movdqa %xmm1, %xmm4 4919; SSE2-NEXT: pxor %xmm8, %xmm4 4920; SSE2-NEXT: movdqa %xmm4, %xmm10 4921; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4922; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4923; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 4924; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 4925; SSE2-NEXT: pand %xmm11, %xmm9 4926; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 4927; SSE2-NEXT: por %xmm9, %xmm4 4928; SSE2-NEXT: pand %xmm4, %xmm1 4929; SSE2-NEXT: pandn %xmm5, %xmm4 4930; SSE2-NEXT: por %xmm4, %xmm1 4931; SSE2-NEXT: movdqa %xmm6, %xmm4 4932; SSE2-NEXT: pxor %xmm8, %xmm4 4933; SSE2-NEXT: movdqa %xmm2, %xmm5 4934; SSE2-NEXT: pxor %xmm8, %xmm5 4935; SSE2-NEXT: movdqa %xmm5, %xmm9 4936; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4937; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4938; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4939; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4940; SSE2-NEXT: pand %xmm10, %xmm4 4941; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4942; SSE2-NEXT: por %xmm4, %xmm5 4943; SSE2-NEXT: pand %xmm5, %xmm2 4944; SSE2-NEXT: pandn %xmm6, %xmm5 4945; SSE2-NEXT: por %xmm5, %xmm2 4946; SSE2-NEXT: movdqa %xmm7, %xmm4 4947; SSE2-NEXT: pxor %xmm8, %xmm4 4948; SSE2-NEXT: pxor %xmm3, %xmm8 4949; SSE2-NEXT: movdqa %xmm8, %xmm5 4950; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4951; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 4952; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 4953; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 4954; SSE2-NEXT: pand %xmm6, %xmm4 4955; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 4956; SSE2-NEXT: por %xmm4, %xmm5 4957; SSE2-NEXT: pand %xmm5, %xmm3 4958; SSE2-NEXT: pandn %xmm7, %xmm5 4959; SSE2-NEXT: por %xmm5, %xmm3 4960; SSE2-NEXT: retq 4961; 4962; SSE4-LABEL: test124: 4963; SSE4: # %bb.0: # %entry 4964; SSE4-NEXT: movdqa %xmm7, %xmm8 4965; SSE4-NEXT: movdqa %xmm0, %xmm7 4966; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 4967; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm4 4968; SSE4-NEXT: movdqa %xmm1, %xmm0 4969; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 4970; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 4971; SSE4-NEXT: movdqa %xmm2, %xmm0 4972; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 4973; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 4974; SSE4-NEXT: movdqa %xmm3, %xmm0 4975; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 4976; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 4977; SSE4-NEXT: movapd %xmm4, %xmm0 4978; SSE4-NEXT: movapd %xmm5, %xmm1 4979; SSE4-NEXT: movapd %xmm6, %xmm2 4980; SSE4-NEXT: movapd %xmm8, %xmm3 4981; SSE4-NEXT: retq 4982; 4983; AVX1-LABEL: test124: 4984; AVX1: # %bb.0: # %entry 4985; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4986; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4987; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4988; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5 4989; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4990; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4991; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4992; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4993; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 4994; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4 4995; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 4996; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4997; AVX1-NEXT: retq 4998; 4999; AVX2-LABEL: test124: 5000; AVX2: # %bb.0: # %entry 5001; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4 5002; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5003; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2 5004; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5005; AVX2-NEXT: retq 5006; 5007; AVX512-LABEL: test124: 5008; AVX512: # %bb.0: # %entry 5009; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 5010; AVX512-NEXT: retq 5011entry: 5012 %cmp = icmp sge <8 x i64> %a, %b 5013 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5014 ret <8 x i64> %sel 5015} 5016 5017define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) { 5018; SSE2-LABEL: test125: 5019; SSE2: # %bb.0: # %entry 5020; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 5021; SSE2-NEXT: movdqa %xmm0, %xmm9 5022; SSE2-NEXT: pxor %xmm8, %xmm9 5023; SSE2-NEXT: movdqa %xmm4, %xmm10 5024; SSE2-NEXT: pxor %xmm8, %xmm10 5025; SSE2-NEXT: movdqa %xmm10, %xmm11 5026; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 5027; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5028; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 5029; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 5030; SSE2-NEXT: pand %xmm12, %xmm9 5031; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 5032; SSE2-NEXT: por %xmm9, %xmm10 5033; SSE2-NEXT: pand %xmm10, %xmm0 5034; SSE2-NEXT: pandn %xmm4, %xmm10 5035; SSE2-NEXT: por %xmm10, %xmm0 5036; SSE2-NEXT: movdqa %xmm1, %xmm9 5037; SSE2-NEXT: pxor %xmm8, %xmm9 5038; SSE2-NEXT: movdqa %xmm5, %xmm4 5039; SSE2-NEXT: pxor %xmm8, %xmm4 5040; SSE2-NEXT: movdqa %xmm4, %xmm10 5041; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 5042; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 5043; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 5044; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 5045; SSE2-NEXT: pand %xmm11, %xmm9 5046; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 5047; SSE2-NEXT: por %xmm9, %xmm4 5048; SSE2-NEXT: pand %xmm4, %xmm1 5049; SSE2-NEXT: pandn %xmm5, %xmm4 5050; SSE2-NEXT: por %xmm4, %xmm1 5051; SSE2-NEXT: movdqa %xmm2, %xmm4 5052; SSE2-NEXT: pxor %xmm8, %xmm4 5053; SSE2-NEXT: movdqa %xmm6, %xmm5 5054; SSE2-NEXT: pxor %xmm8, %xmm5 5055; SSE2-NEXT: movdqa %xmm5, %xmm9 5056; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 5057; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 5058; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 5059; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 5060; SSE2-NEXT: pand %xmm10, %xmm4 5061; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 5062; SSE2-NEXT: por %xmm4, %xmm5 5063; SSE2-NEXT: pand %xmm5, %xmm2 5064; SSE2-NEXT: pandn %xmm6, %xmm5 5065; SSE2-NEXT: por %xmm5, %xmm2 5066; SSE2-NEXT: movdqa %xmm3, %xmm4 5067; SSE2-NEXT: pxor %xmm8, %xmm4 5068; SSE2-NEXT: pxor %xmm7, %xmm8 5069; SSE2-NEXT: movdqa %xmm8, %xmm5 5070; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 5071; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 5072; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 5073; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 5074; SSE2-NEXT: pand %xmm6, %xmm4 5075; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 5076; SSE2-NEXT: por %xmm4, %xmm5 5077; SSE2-NEXT: pand %xmm5, %xmm3 5078; SSE2-NEXT: pandn %xmm7, %xmm5 5079; SSE2-NEXT: por %xmm5, %xmm3 5080; SSE2-NEXT: retq 5081; 5082; SSE4-LABEL: test125: 5083; SSE4: # %bb.0: # %entry 5084; SSE4-NEXT: movdqa %xmm7, %xmm8 5085; SSE4-NEXT: movdqa %xmm6, %xmm9 5086; SSE4-NEXT: movdqa %xmm5, %xmm10 5087; SSE4-NEXT: movdqa %xmm0, %xmm5 5088; SSE4-NEXT: movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808] 5089; SSE4-NEXT: movdqa %xmm0, %xmm6 5090; SSE4-NEXT: pxor %xmm7, %xmm6 5091; SSE4-NEXT: movdqa %xmm4, %xmm0 5092; SSE4-NEXT: pxor %xmm7, %xmm0 5093; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 5094; SSE4-NEXT: blendvpd %xmm0, %xmm5, %xmm4 5095; SSE4-NEXT: movdqa %xmm1, %xmm5 5096; SSE4-NEXT: pxor %xmm7, %xmm5 5097; SSE4-NEXT: movdqa %xmm10, %xmm0 5098; SSE4-NEXT: pxor %xmm7, %xmm0 5099; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 5100; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm10 5101; SSE4-NEXT: movdqa %xmm2, %xmm1 5102; SSE4-NEXT: pxor %xmm7, %xmm1 5103; SSE4-NEXT: movdqa %xmm9, %xmm0 5104; SSE4-NEXT: pxor %xmm7, %xmm0 5105; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 5106; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm9 5107; SSE4-NEXT: movdqa %xmm3, %xmm0 5108; SSE4-NEXT: pxor %xmm7, %xmm0 5109; SSE4-NEXT: pxor %xmm8, %xmm7 5110; SSE4-NEXT: pcmpgtq %xmm0, %xmm7 5111; SSE4-NEXT: movdqa %xmm7, %xmm0 5112; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 5113; SSE4-NEXT: movapd %xmm4, %xmm0 5114; SSE4-NEXT: movapd %xmm10, %xmm1 5115; SSE4-NEXT: movapd %xmm9, %xmm2 5116; SSE4-NEXT: movapd %xmm8, %xmm3 5117; SSE4-NEXT: retq 5118; 5119; AVX1-LABEL: test125: 5120; AVX1: # %bb.0: # %entry 5121; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 5122; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5123; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5124; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 5125; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5126; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5127; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6 5128; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7 5129; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5130; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5131; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5132; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 5133; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 5134; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5135; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5136; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 5137; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4 5138; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5 5139; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5140; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 5141; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5142; AVX1-NEXT: retq 5143; 5144; AVX2-LABEL: test125: 5145; AVX2: # %bb.0: # %entry 5146; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 5147; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5 5148; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 5149; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5150; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5151; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2 5152; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4 5153; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 5154; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5155; AVX2-NEXT: retq 5156; 5157; AVX512-LABEL: test125: 5158; AVX512: # %bb.0: # %entry 5159; AVX512-NEXT: vpminuq %zmm1, %zmm0, %zmm0 5160; AVX512-NEXT: retq 5161entry: 5162 %cmp = icmp ult <8 x i64> %a, %b 5163 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5164 ret <8 x i64> %sel 5165} 5166 5167define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) { 5168; SSE2-LABEL: test126: 5169; SSE2: # %bb.0: # %entry 5170; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 5171; SSE2-NEXT: movdqa %xmm0, %xmm9 5172; SSE2-NEXT: pxor %xmm8, %xmm9 5173; SSE2-NEXT: movdqa %xmm4, %xmm10 5174; SSE2-NEXT: pxor %xmm8, %xmm10 5175; SSE2-NEXT: movdqa %xmm10, %xmm11 5176; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 5177; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5178; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 5179; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 5180; SSE2-NEXT: pand %xmm12, %xmm9 5181; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 5182; SSE2-NEXT: por %xmm9, %xmm10 5183; SSE2-NEXT: pand %xmm10, %xmm0 5184; SSE2-NEXT: pandn %xmm4, %xmm10 5185; SSE2-NEXT: por %xmm10, %xmm0 5186; SSE2-NEXT: movdqa %xmm1, %xmm9 5187; SSE2-NEXT: pxor %xmm8, %xmm9 5188; SSE2-NEXT: movdqa %xmm5, %xmm4 5189; SSE2-NEXT: pxor %xmm8, %xmm4 5190; SSE2-NEXT: movdqa %xmm4, %xmm10 5191; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 5192; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 5193; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 5194; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 5195; SSE2-NEXT: pand %xmm11, %xmm9 5196; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 5197; SSE2-NEXT: por %xmm9, %xmm4 5198; SSE2-NEXT: pand %xmm4, %xmm1 5199; SSE2-NEXT: pandn %xmm5, %xmm4 5200; SSE2-NEXT: por %xmm4, %xmm1 5201; SSE2-NEXT: movdqa %xmm2, %xmm4 5202; SSE2-NEXT: pxor %xmm8, %xmm4 5203; SSE2-NEXT: movdqa %xmm6, %xmm5 5204; SSE2-NEXT: pxor %xmm8, %xmm5 5205; SSE2-NEXT: movdqa %xmm5, %xmm9 5206; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 5207; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 5208; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 5209; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 5210; SSE2-NEXT: pand %xmm10, %xmm4 5211; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 5212; SSE2-NEXT: por %xmm4, %xmm5 5213; SSE2-NEXT: pand %xmm5, %xmm2 5214; SSE2-NEXT: pandn %xmm6, %xmm5 5215; SSE2-NEXT: por %xmm5, %xmm2 5216; SSE2-NEXT: movdqa %xmm3, %xmm4 5217; SSE2-NEXT: pxor %xmm8, %xmm4 5218; SSE2-NEXT: pxor %xmm7, %xmm8 5219; SSE2-NEXT: movdqa %xmm8, %xmm5 5220; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 5221; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 5222; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 5223; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 5224; SSE2-NEXT: pand %xmm6, %xmm4 5225; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 5226; SSE2-NEXT: por %xmm4, %xmm5 5227; SSE2-NEXT: pand %xmm5, %xmm3 5228; SSE2-NEXT: pandn %xmm7, %xmm5 5229; SSE2-NEXT: por %xmm5, %xmm3 5230; SSE2-NEXT: retq 5231; 5232; SSE4-LABEL: test126: 5233; SSE4: # %bb.0: # %entry 5234; SSE4-NEXT: movdqa %xmm7, %xmm8 5235; SSE4-NEXT: movdqa %xmm6, %xmm9 5236; SSE4-NEXT: movdqa %xmm5, %xmm10 5237; SSE4-NEXT: movdqa %xmm0, %xmm5 5238; SSE4-NEXT: movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808] 5239; SSE4-NEXT: movdqa %xmm0, %xmm6 5240; SSE4-NEXT: pxor %xmm7, %xmm6 5241; SSE4-NEXT: movdqa %xmm4, %xmm0 5242; SSE4-NEXT: pxor %xmm7, %xmm0 5243; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 5244; SSE4-NEXT: blendvpd %xmm0, %xmm5, %xmm4 5245; SSE4-NEXT: movdqa %xmm1, %xmm5 5246; SSE4-NEXT: pxor %xmm7, %xmm5 5247; SSE4-NEXT: movdqa %xmm10, %xmm0 5248; SSE4-NEXT: pxor %xmm7, %xmm0 5249; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 5250; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm10 5251; SSE4-NEXT: movdqa %xmm2, %xmm1 5252; SSE4-NEXT: pxor %xmm7, %xmm1 5253; SSE4-NEXT: movdqa %xmm9, %xmm0 5254; SSE4-NEXT: pxor %xmm7, %xmm0 5255; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 5256; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm9 5257; SSE4-NEXT: movdqa %xmm3, %xmm0 5258; SSE4-NEXT: pxor %xmm7, %xmm0 5259; SSE4-NEXT: pxor %xmm8, %xmm7 5260; SSE4-NEXT: pcmpgtq %xmm0, %xmm7 5261; SSE4-NEXT: movdqa %xmm7, %xmm0 5262; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 5263; SSE4-NEXT: movapd %xmm4, %xmm0 5264; SSE4-NEXT: movapd %xmm10, %xmm1 5265; SSE4-NEXT: movapd %xmm9, %xmm2 5266; SSE4-NEXT: movapd %xmm8, %xmm3 5267; SSE4-NEXT: retq 5268; 5269; AVX1-LABEL: test126: 5270; AVX1: # %bb.0: # %entry 5271; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 5272; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5273; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5274; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 5275; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5276; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5277; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6 5278; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7 5279; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5280; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5281; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5282; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 5283; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 5284; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5285; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5286; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 5287; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4 5288; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5 5289; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5290; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 5291; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5292; AVX1-NEXT: retq 5293; 5294; AVX2-LABEL: test126: 5295; AVX2: # %bb.0: # %entry 5296; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 5297; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5 5298; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 5299; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5300; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5301; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2 5302; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4 5303; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 5304; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5305; AVX2-NEXT: retq 5306; 5307; AVX512-LABEL: test126: 5308; AVX512: # %bb.0: # %entry 5309; AVX512-NEXT: vpminuq %zmm1, %zmm0, %zmm0 5310; AVX512-NEXT: retq 5311entry: 5312 %cmp = icmp ule <8 x i64> %a, %b 5313 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5314 ret <8 x i64> %sel 5315} 5316 5317define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) { 5318; SSE2-LABEL: test127: 5319; SSE2: # %bb.0: # %entry 5320; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 5321; SSE2-NEXT: movdqa %xmm4, %xmm9 5322; SSE2-NEXT: pxor %xmm8, %xmm9 5323; SSE2-NEXT: movdqa %xmm0, %xmm10 5324; SSE2-NEXT: pxor %xmm8, %xmm10 5325; SSE2-NEXT: movdqa %xmm10, %xmm11 5326; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 5327; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5328; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 5329; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 5330; SSE2-NEXT: pand %xmm12, %xmm9 5331; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 5332; SSE2-NEXT: por %xmm9, %xmm10 5333; SSE2-NEXT: pand %xmm10, %xmm0 5334; SSE2-NEXT: pandn %xmm4, %xmm10 5335; SSE2-NEXT: por %xmm10, %xmm0 5336; SSE2-NEXT: movdqa %xmm5, %xmm9 5337; SSE2-NEXT: pxor %xmm8, %xmm9 5338; SSE2-NEXT: movdqa %xmm1, %xmm4 5339; SSE2-NEXT: pxor %xmm8, %xmm4 5340; SSE2-NEXT: movdqa %xmm4, %xmm10 5341; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 5342; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 5343; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 5344; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 5345; SSE2-NEXT: pand %xmm11, %xmm9 5346; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 5347; SSE2-NEXT: por %xmm9, %xmm4 5348; SSE2-NEXT: pand %xmm4, %xmm1 5349; SSE2-NEXT: pandn %xmm5, %xmm4 5350; SSE2-NEXT: por %xmm4, %xmm1 5351; SSE2-NEXT: movdqa %xmm6, %xmm4 5352; SSE2-NEXT: pxor %xmm8, %xmm4 5353; SSE2-NEXT: movdqa %xmm2, %xmm5 5354; SSE2-NEXT: pxor %xmm8, %xmm5 5355; SSE2-NEXT: movdqa %xmm5, %xmm9 5356; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 5357; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 5358; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 5359; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 5360; SSE2-NEXT: pand %xmm10, %xmm4 5361; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 5362; SSE2-NEXT: por %xmm4, %xmm5 5363; SSE2-NEXT: pand %xmm5, %xmm2 5364; SSE2-NEXT: pandn %xmm6, %xmm5 5365; SSE2-NEXT: por %xmm5, %xmm2 5366; SSE2-NEXT: movdqa %xmm7, %xmm4 5367; SSE2-NEXT: pxor %xmm8, %xmm4 5368; SSE2-NEXT: pxor %xmm3, %xmm8 5369; SSE2-NEXT: movdqa %xmm8, %xmm5 5370; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 5371; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 5372; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 5373; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 5374; SSE2-NEXT: pand %xmm6, %xmm4 5375; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 5376; SSE2-NEXT: por %xmm4, %xmm5 5377; SSE2-NEXT: pand %xmm5, %xmm3 5378; SSE2-NEXT: pandn %xmm7, %xmm5 5379; SSE2-NEXT: por %xmm5, %xmm3 5380; SSE2-NEXT: retq 5381; 5382; SSE4-LABEL: test127: 5383; SSE4: # %bb.0: # %entry 5384; SSE4-NEXT: movdqa %xmm7, %xmm8 5385; SSE4-NEXT: movdqa %xmm6, %xmm9 5386; SSE4-NEXT: movdqa %xmm5, %xmm10 5387; SSE4-NEXT: movdqa %xmm4, %xmm5 5388; SSE4-NEXT: movdqa %xmm0, %xmm6 5389; SSE4-NEXT: movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808] 5390; SSE4-NEXT: pxor %xmm7, %xmm4 5391; SSE4-NEXT: pxor %xmm7, %xmm0 5392; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 5393; SSE4-NEXT: blendvpd %xmm0, %xmm6, %xmm5 5394; SSE4-NEXT: movdqa %xmm10, %xmm4 5395; SSE4-NEXT: pxor %xmm7, %xmm4 5396; SSE4-NEXT: movdqa %xmm1, %xmm0 5397; SSE4-NEXT: pxor %xmm7, %xmm0 5398; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 5399; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm10 5400; SSE4-NEXT: movdqa %xmm9, %xmm1 5401; SSE4-NEXT: pxor %xmm7, %xmm1 5402; SSE4-NEXT: movdqa %xmm2, %xmm0 5403; SSE4-NEXT: pxor %xmm7, %xmm0 5404; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 5405; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm9 5406; SSE4-NEXT: movdqa %xmm8, %xmm0 5407; SSE4-NEXT: pxor %xmm7, %xmm0 5408; SSE4-NEXT: pxor %xmm3, %xmm7 5409; SSE4-NEXT: pcmpgtq %xmm0, %xmm7 5410; SSE4-NEXT: movdqa %xmm7, %xmm0 5411; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 5412; SSE4-NEXT: movapd %xmm5, %xmm0 5413; SSE4-NEXT: movapd %xmm10, %xmm1 5414; SSE4-NEXT: movapd %xmm9, %xmm2 5415; SSE4-NEXT: movapd %xmm8, %xmm3 5416; SSE4-NEXT: retq 5417; 5418; AVX1-LABEL: test127: 5419; AVX1: # %bb.0: # %entry 5420; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5421; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5422; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5423; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5424; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5425; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5426; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm6 5427; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7 5428; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5429; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5430; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5431; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5432; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 5433; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5434; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5435; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 5436; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm4 5437; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5 5438; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5439; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 5440; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5441; AVX1-NEXT: retq 5442; 5443; AVX2-LABEL: test127: 5444; AVX2: # %bb.0: # %entry 5445; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 5446; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm5 5447; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 5448; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5449; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5450; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm2 5451; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm4 5452; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 5453; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5454; AVX2-NEXT: retq 5455; 5456; AVX512-LABEL: test127: 5457; AVX512: # %bb.0: # %entry 5458; AVX512-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 5459; AVX512-NEXT: retq 5460entry: 5461 %cmp = icmp ugt <8 x i64> %a, %b 5462 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5463 ret <8 x i64> %sel 5464} 5465 5466define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) { 5467; SSE2-LABEL: test128: 5468; SSE2: # %bb.0: # %entry 5469; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 5470; SSE2-NEXT: movdqa %xmm4, %xmm9 5471; SSE2-NEXT: pxor %xmm8, %xmm9 5472; SSE2-NEXT: movdqa %xmm0, %xmm10 5473; SSE2-NEXT: pxor %xmm8, %xmm10 5474; SSE2-NEXT: movdqa %xmm10, %xmm11 5475; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 5476; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5477; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 5478; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 5479; SSE2-NEXT: pand %xmm12, %xmm9 5480; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 5481; SSE2-NEXT: por %xmm9, %xmm10 5482; SSE2-NEXT: pand %xmm10, %xmm0 5483; SSE2-NEXT: pandn %xmm4, %xmm10 5484; SSE2-NEXT: por %xmm10, %xmm0 5485; SSE2-NEXT: movdqa %xmm5, %xmm9 5486; SSE2-NEXT: pxor %xmm8, %xmm9 5487; SSE2-NEXT: movdqa %xmm1, %xmm4 5488; SSE2-NEXT: pxor %xmm8, %xmm4 5489; SSE2-NEXT: movdqa %xmm4, %xmm10 5490; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 5491; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 5492; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 5493; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 5494; SSE2-NEXT: pand %xmm11, %xmm9 5495; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 5496; SSE2-NEXT: por %xmm9, %xmm4 5497; SSE2-NEXT: pand %xmm4, %xmm1 5498; SSE2-NEXT: pandn %xmm5, %xmm4 5499; SSE2-NEXT: por %xmm4, %xmm1 5500; SSE2-NEXT: movdqa %xmm6, %xmm4 5501; SSE2-NEXT: pxor %xmm8, %xmm4 5502; SSE2-NEXT: movdqa %xmm2, %xmm5 5503; SSE2-NEXT: pxor %xmm8, %xmm5 5504; SSE2-NEXT: movdqa %xmm5, %xmm9 5505; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 5506; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 5507; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 5508; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 5509; SSE2-NEXT: pand %xmm10, %xmm4 5510; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 5511; SSE2-NEXT: por %xmm4, %xmm5 5512; SSE2-NEXT: pand %xmm5, %xmm2 5513; SSE2-NEXT: pandn %xmm6, %xmm5 5514; SSE2-NEXT: por %xmm5, %xmm2 5515; SSE2-NEXT: movdqa %xmm7, %xmm4 5516; SSE2-NEXT: pxor %xmm8, %xmm4 5517; SSE2-NEXT: pxor %xmm3, %xmm8 5518; SSE2-NEXT: movdqa %xmm8, %xmm5 5519; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 5520; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 5521; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 5522; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 5523; SSE2-NEXT: pand %xmm6, %xmm4 5524; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 5525; SSE2-NEXT: por %xmm4, %xmm5 5526; SSE2-NEXT: pand %xmm5, %xmm3 5527; SSE2-NEXT: pandn %xmm7, %xmm5 5528; SSE2-NEXT: por %xmm5, %xmm3 5529; SSE2-NEXT: retq 5530; 5531; SSE4-LABEL: test128: 5532; SSE4: # %bb.0: # %entry 5533; SSE4-NEXT: movdqa %xmm7, %xmm8 5534; SSE4-NEXT: movdqa %xmm6, %xmm9 5535; SSE4-NEXT: movdqa %xmm5, %xmm10 5536; SSE4-NEXT: movdqa %xmm4, %xmm5 5537; SSE4-NEXT: movdqa %xmm0, %xmm6 5538; SSE4-NEXT: movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808] 5539; SSE4-NEXT: pxor %xmm7, %xmm4 5540; SSE4-NEXT: pxor %xmm7, %xmm0 5541; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 5542; SSE4-NEXT: blendvpd %xmm0, %xmm6, %xmm5 5543; SSE4-NEXT: movdqa %xmm10, %xmm4 5544; SSE4-NEXT: pxor %xmm7, %xmm4 5545; SSE4-NEXT: movdqa %xmm1, %xmm0 5546; SSE4-NEXT: pxor %xmm7, %xmm0 5547; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 5548; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm10 5549; SSE4-NEXT: movdqa %xmm9, %xmm1 5550; SSE4-NEXT: pxor %xmm7, %xmm1 5551; SSE4-NEXT: movdqa %xmm2, %xmm0 5552; SSE4-NEXT: pxor %xmm7, %xmm0 5553; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 5554; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm9 5555; SSE4-NEXT: movdqa %xmm8, %xmm0 5556; SSE4-NEXT: pxor %xmm7, %xmm0 5557; SSE4-NEXT: pxor %xmm3, %xmm7 5558; SSE4-NEXT: pcmpgtq %xmm0, %xmm7 5559; SSE4-NEXT: movdqa %xmm7, %xmm0 5560; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 5561; SSE4-NEXT: movapd %xmm5, %xmm0 5562; SSE4-NEXT: movapd %xmm10, %xmm1 5563; SSE4-NEXT: movapd %xmm9, %xmm2 5564; SSE4-NEXT: movapd %xmm8, %xmm3 5565; SSE4-NEXT: retq 5566; 5567; AVX1-LABEL: test128: 5568; AVX1: # %bb.0: # %entry 5569; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5570; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5571; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5572; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5573; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5574; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5575; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm6 5576; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7 5577; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5578; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5579; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5580; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5581; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 5582; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5583; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5584; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 5585; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm4 5586; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5 5587; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5588; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 5589; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5590; AVX1-NEXT: retq 5591; 5592; AVX2-LABEL: test128: 5593; AVX2: # %bb.0: # %entry 5594; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 5595; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm5 5596; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 5597; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5598; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5599; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm2 5600; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm4 5601; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 5602; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5603; AVX2-NEXT: retq 5604; 5605; AVX512-LABEL: test128: 5606; AVX512: # %bb.0: # %entry 5607; AVX512-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 5608; AVX512-NEXT: retq 5609entry: 5610 %cmp = icmp uge <8 x i64> %a, %b 5611 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5612 ret <8 x i64> %sel 5613} 5614 5615define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) { 5616; SSE2-LABEL: test129: 5617; SSE2: # %bb.0: # %entry 5618; SSE2-NEXT: movdqa %xmm0, %xmm8 5619; SSE2-NEXT: pcmpgtb %xmm4, %xmm8 5620; SSE2-NEXT: pand %xmm8, %xmm0 5621; SSE2-NEXT: pandn %xmm4, %xmm8 5622; SSE2-NEXT: por %xmm0, %xmm8 5623; SSE2-NEXT: movdqa %xmm1, %xmm4 5624; SSE2-NEXT: pcmpgtb %xmm5, %xmm4 5625; SSE2-NEXT: pand %xmm4, %xmm1 5626; SSE2-NEXT: pandn %xmm5, %xmm4 5627; SSE2-NEXT: por %xmm1, %xmm4 5628; SSE2-NEXT: movdqa %xmm2, %xmm5 5629; SSE2-NEXT: pcmpgtb %xmm6, %xmm5 5630; SSE2-NEXT: pand %xmm5, %xmm2 5631; SSE2-NEXT: pandn %xmm6, %xmm5 5632; SSE2-NEXT: por %xmm2, %xmm5 5633; SSE2-NEXT: movdqa %xmm3, %xmm6 5634; SSE2-NEXT: pcmpgtb %xmm7, %xmm6 5635; SSE2-NEXT: pand %xmm6, %xmm3 5636; SSE2-NEXT: pandn %xmm7, %xmm6 5637; SSE2-NEXT: por %xmm3, %xmm6 5638; SSE2-NEXT: movdqa %xmm8, %xmm0 5639; SSE2-NEXT: movdqa %xmm4, %xmm1 5640; SSE2-NEXT: movdqa %xmm5, %xmm2 5641; SSE2-NEXT: movdqa %xmm6, %xmm3 5642; SSE2-NEXT: retq 5643; 5644; SSE4-LABEL: test129: 5645; SSE4: # %bb.0: # %entry 5646; SSE4-NEXT: pmaxsb %xmm4, %xmm0 5647; SSE4-NEXT: pmaxsb %xmm5, %xmm1 5648; SSE4-NEXT: pmaxsb %xmm6, %xmm2 5649; SSE4-NEXT: pmaxsb %xmm7, %xmm3 5650; SSE4-NEXT: retq 5651; 5652; AVX1-LABEL: test129: 5653; AVX1: # %bb.0: # %entry 5654; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5655; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5656; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 5657; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 5658; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5659; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5660; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5661; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 5662; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 5663; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5664; AVX1-NEXT: retq 5665; 5666; AVX2-LABEL: test129: 5667; AVX2: # %bb.0: # %entry 5668; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 5669; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 5670; AVX2-NEXT: retq 5671; 5672; AVX512F-LABEL: test129: 5673; AVX512F: # %bb.0: # %entry 5674; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 5675; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 5676; AVX512F-NEXT: vpmaxsb %ymm2, %ymm3, %ymm2 5677; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 5678; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 5679; AVX512F-NEXT: retq 5680; 5681; AVX512BW-LABEL: test129: 5682; AVX512BW: # %bb.0: # %entry 5683; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 5684; AVX512BW-NEXT: retq 5685entry: 5686 %cmp = icmp slt <64 x i8> %a, %b 5687 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5688 ret <64 x i8> %sel 5689} 5690 5691define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) { 5692; SSE2-LABEL: test130: 5693; SSE2: # %bb.0: # %entry 5694; SSE2-NEXT: movdqa %xmm0, %xmm8 5695; SSE2-NEXT: pcmpgtb %xmm4, %xmm8 5696; SSE2-NEXT: pand %xmm8, %xmm0 5697; SSE2-NEXT: pandn %xmm4, %xmm8 5698; SSE2-NEXT: por %xmm0, %xmm8 5699; SSE2-NEXT: movdqa %xmm1, %xmm4 5700; SSE2-NEXT: pcmpgtb %xmm5, %xmm4 5701; SSE2-NEXT: pand %xmm4, %xmm1 5702; SSE2-NEXT: pandn %xmm5, %xmm4 5703; SSE2-NEXT: por %xmm1, %xmm4 5704; SSE2-NEXT: movdqa %xmm2, %xmm5 5705; SSE2-NEXT: pcmpgtb %xmm6, %xmm5 5706; SSE2-NEXT: pand %xmm5, %xmm2 5707; SSE2-NEXT: pandn %xmm6, %xmm5 5708; SSE2-NEXT: por %xmm2, %xmm5 5709; SSE2-NEXT: movdqa %xmm3, %xmm6 5710; SSE2-NEXT: pcmpgtb %xmm7, %xmm6 5711; SSE2-NEXT: pand %xmm6, %xmm3 5712; SSE2-NEXT: pandn %xmm7, %xmm6 5713; SSE2-NEXT: por %xmm3, %xmm6 5714; SSE2-NEXT: movdqa %xmm8, %xmm0 5715; SSE2-NEXT: movdqa %xmm4, %xmm1 5716; SSE2-NEXT: movdqa %xmm5, %xmm2 5717; SSE2-NEXT: movdqa %xmm6, %xmm3 5718; SSE2-NEXT: retq 5719; 5720; SSE4-LABEL: test130: 5721; SSE4: # %bb.0: # %entry 5722; SSE4-NEXT: pmaxsb %xmm4, %xmm0 5723; SSE4-NEXT: pmaxsb %xmm5, %xmm1 5724; SSE4-NEXT: pmaxsb %xmm6, %xmm2 5725; SSE4-NEXT: pmaxsb %xmm7, %xmm3 5726; SSE4-NEXT: retq 5727; 5728; AVX1-LABEL: test130: 5729; AVX1: # %bb.0: # %entry 5730; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5731; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5732; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 5733; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 5734; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5735; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5736; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5737; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 5738; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 5739; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5740; AVX1-NEXT: retq 5741; 5742; AVX2-LABEL: test130: 5743; AVX2: # %bb.0: # %entry 5744; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 5745; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 5746; AVX2-NEXT: retq 5747; 5748; AVX512F-LABEL: test130: 5749; AVX512F: # %bb.0: # %entry 5750; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 5751; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 5752; AVX512F-NEXT: vpmaxsb %ymm2, %ymm3, %ymm2 5753; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 5754; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 5755; AVX512F-NEXT: retq 5756; 5757; AVX512BW-LABEL: test130: 5758; AVX512BW: # %bb.0: # %entry 5759; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 5760; AVX512BW-NEXT: retq 5761entry: 5762 %cmp = icmp sle <64 x i8> %a, %b 5763 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5764 ret <64 x i8> %sel 5765} 5766 5767define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) { 5768; SSE2-LABEL: test131: 5769; SSE2: # %bb.0: # %entry 5770; SSE2-NEXT: movdqa %xmm4, %xmm8 5771; SSE2-NEXT: pcmpgtb %xmm0, %xmm8 5772; SSE2-NEXT: pand %xmm8, %xmm0 5773; SSE2-NEXT: pandn %xmm4, %xmm8 5774; SSE2-NEXT: por %xmm8, %xmm0 5775; SSE2-NEXT: movdqa %xmm5, %xmm4 5776; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 5777; SSE2-NEXT: pand %xmm4, %xmm1 5778; SSE2-NEXT: pandn %xmm5, %xmm4 5779; SSE2-NEXT: por %xmm4, %xmm1 5780; SSE2-NEXT: movdqa %xmm6, %xmm4 5781; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 5782; SSE2-NEXT: pand %xmm4, %xmm2 5783; SSE2-NEXT: pandn %xmm6, %xmm4 5784; SSE2-NEXT: por %xmm4, %xmm2 5785; SSE2-NEXT: movdqa %xmm7, %xmm4 5786; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 5787; SSE2-NEXT: pand %xmm4, %xmm3 5788; SSE2-NEXT: pandn %xmm7, %xmm4 5789; SSE2-NEXT: por %xmm4, %xmm3 5790; SSE2-NEXT: retq 5791; 5792; SSE4-LABEL: test131: 5793; SSE4: # %bb.0: # %entry 5794; SSE4-NEXT: pminsb %xmm4, %xmm0 5795; SSE4-NEXT: pminsb %xmm5, %xmm1 5796; SSE4-NEXT: pminsb %xmm6, %xmm2 5797; SSE4-NEXT: pminsb %xmm7, %xmm3 5798; SSE4-NEXT: retq 5799; 5800; AVX1-LABEL: test131: 5801; AVX1: # %bb.0: # %entry 5802; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5803; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5804; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 5805; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 5806; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5807; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5808; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5809; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 5810; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 5811; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5812; AVX1-NEXT: retq 5813; 5814; AVX2-LABEL: test131: 5815; AVX2: # %bb.0: # %entry 5816; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 5817; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 5818; AVX2-NEXT: retq 5819; 5820; AVX512F-LABEL: test131: 5821; AVX512F: # %bb.0: # %entry 5822; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 5823; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 5824; AVX512F-NEXT: vpminsb %ymm2, %ymm3, %ymm2 5825; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 5826; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 5827; AVX512F-NEXT: retq 5828; 5829; AVX512BW-LABEL: test131: 5830; AVX512BW: # %bb.0: # %entry 5831; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 5832; AVX512BW-NEXT: retq 5833entry: 5834 %cmp = icmp sgt <64 x i8> %a, %b 5835 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5836 ret <64 x i8> %sel 5837} 5838 5839define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) { 5840; SSE2-LABEL: test132: 5841; SSE2: # %bb.0: # %entry 5842; SSE2-NEXT: movdqa %xmm4, %xmm8 5843; SSE2-NEXT: pcmpgtb %xmm0, %xmm8 5844; SSE2-NEXT: pand %xmm8, %xmm0 5845; SSE2-NEXT: pandn %xmm4, %xmm8 5846; SSE2-NEXT: por %xmm8, %xmm0 5847; SSE2-NEXT: movdqa %xmm5, %xmm4 5848; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 5849; SSE2-NEXT: pand %xmm4, %xmm1 5850; SSE2-NEXT: pandn %xmm5, %xmm4 5851; SSE2-NEXT: por %xmm4, %xmm1 5852; SSE2-NEXT: movdqa %xmm6, %xmm4 5853; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 5854; SSE2-NEXT: pand %xmm4, %xmm2 5855; SSE2-NEXT: pandn %xmm6, %xmm4 5856; SSE2-NEXT: por %xmm4, %xmm2 5857; SSE2-NEXT: movdqa %xmm7, %xmm4 5858; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 5859; SSE2-NEXT: pand %xmm4, %xmm3 5860; SSE2-NEXT: pandn %xmm7, %xmm4 5861; SSE2-NEXT: por %xmm4, %xmm3 5862; SSE2-NEXT: retq 5863; 5864; SSE4-LABEL: test132: 5865; SSE4: # %bb.0: # %entry 5866; SSE4-NEXT: pminsb %xmm4, %xmm0 5867; SSE4-NEXT: pminsb %xmm5, %xmm1 5868; SSE4-NEXT: pminsb %xmm6, %xmm2 5869; SSE4-NEXT: pminsb %xmm7, %xmm3 5870; SSE4-NEXT: retq 5871; 5872; AVX1-LABEL: test132: 5873; AVX1: # %bb.0: # %entry 5874; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5875; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5876; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 5877; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 5878; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5879; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5880; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5881; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 5882; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 5883; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5884; AVX1-NEXT: retq 5885; 5886; AVX2-LABEL: test132: 5887; AVX2: # %bb.0: # %entry 5888; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 5889; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 5890; AVX2-NEXT: retq 5891; 5892; AVX512F-LABEL: test132: 5893; AVX512F: # %bb.0: # %entry 5894; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 5895; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 5896; AVX512F-NEXT: vpminsb %ymm2, %ymm3, %ymm2 5897; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 5898; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 5899; AVX512F-NEXT: retq 5900; 5901; AVX512BW-LABEL: test132: 5902; AVX512BW: # %bb.0: # %entry 5903; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 5904; AVX512BW-NEXT: retq 5905entry: 5906 %cmp = icmp sge <64 x i8> %a, %b 5907 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5908 ret <64 x i8> %sel 5909} 5910 5911define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) { 5912; SSE-LABEL: test133: 5913; SSE: # %bb.0: # %entry 5914; SSE-NEXT: pmaxub %xmm4, %xmm0 5915; SSE-NEXT: pmaxub %xmm5, %xmm1 5916; SSE-NEXT: pmaxub %xmm6, %xmm2 5917; SSE-NEXT: pmaxub %xmm7, %xmm3 5918; SSE-NEXT: retq 5919; 5920; AVX1-LABEL: test133: 5921; AVX1: # %bb.0: # %entry 5922; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5923; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5924; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 5925; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 5926; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5927; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5928; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5929; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 5930; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 5931; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5932; AVX1-NEXT: retq 5933; 5934; AVX2-LABEL: test133: 5935; AVX2: # %bb.0: # %entry 5936; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 5937; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 5938; AVX2-NEXT: retq 5939; 5940; AVX512F-LABEL: test133: 5941; AVX512F: # %bb.0: # %entry 5942; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 5943; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 5944; AVX512F-NEXT: vpmaxub %ymm2, %ymm3, %ymm2 5945; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 5946; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 5947; AVX512F-NEXT: retq 5948; 5949; AVX512BW-LABEL: test133: 5950; AVX512BW: # %bb.0: # %entry 5951; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 5952; AVX512BW-NEXT: retq 5953entry: 5954 %cmp = icmp ult <64 x i8> %a, %b 5955 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5956 ret <64 x i8> %sel 5957} 5958 5959define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) { 5960; SSE-LABEL: test134: 5961; SSE: # %bb.0: # %entry 5962; SSE-NEXT: pmaxub %xmm4, %xmm0 5963; SSE-NEXT: pmaxub %xmm5, %xmm1 5964; SSE-NEXT: pmaxub %xmm6, %xmm2 5965; SSE-NEXT: pmaxub %xmm7, %xmm3 5966; SSE-NEXT: retq 5967; 5968; AVX1-LABEL: test134: 5969; AVX1: # %bb.0: # %entry 5970; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5971; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5972; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 5973; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 5974; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5975; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5976; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5977; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 5978; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 5979; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5980; AVX1-NEXT: retq 5981; 5982; AVX2-LABEL: test134: 5983; AVX2: # %bb.0: # %entry 5984; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 5985; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 5986; AVX2-NEXT: retq 5987; 5988; AVX512F-LABEL: test134: 5989; AVX512F: # %bb.0: # %entry 5990; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 5991; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 5992; AVX512F-NEXT: vpmaxub %ymm2, %ymm3, %ymm2 5993; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 5994; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 5995; AVX512F-NEXT: retq 5996; 5997; AVX512BW-LABEL: test134: 5998; AVX512BW: # %bb.0: # %entry 5999; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 6000; AVX512BW-NEXT: retq 6001entry: 6002 %cmp = icmp ule <64 x i8> %a, %b 6003 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6004 ret <64 x i8> %sel 6005} 6006 6007define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) { 6008; SSE-LABEL: test135: 6009; SSE: # %bb.0: # %entry 6010; SSE-NEXT: pminub %xmm4, %xmm0 6011; SSE-NEXT: pminub %xmm5, %xmm1 6012; SSE-NEXT: pminub %xmm6, %xmm2 6013; SSE-NEXT: pminub %xmm7, %xmm3 6014; SSE-NEXT: retq 6015; 6016; AVX1-LABEL: test135: 6017; AVX1: # %bb.0: # %entry 6018; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6019; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6020; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 6021; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 6022; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6023; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6024; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6025; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 6026; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 6027; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6028; AVX1-NEXT: retq 6029; 6030; AVX2-LABEL: test135: 6031; AVX2: # %bb.0: # %entry 6032; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 6033; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 6034; AVX2-NEXT: retq 6035; 6036; AVX512F-LABEL: test135: 6037; AVX512F: # %bb.0: # %entry 6038; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6039; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6040; AVX512F-NEXT: vpminub %ymm2, %ymm3, %ymm2 6041; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 6042; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6043; AVX512F-NEXT: retq 6044; 6045; AVX512BW-LABEL: test135: 6046; AVX512BW: # %bb.0: # %entry 6047; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 6048; AVX512BW-NEXT: retq 6049entry: 6050 %cmp = icmp ugt <64 x i8> %a, %b 6051 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6052 ret <64 x i8> %sel 6053} 6054 6055define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) { 6056; SSE-LABEL: test136: 6057; SSE: # %bb.0: # %entry 6058; SSE-NEXT: pminub %xmm4, %xmm0 6059; SSE-NEXT: pminub %xmm5, %xmm1 6060; SSE-NEXT: pminub %xmm6, %xmm2 6061; SSE-NEXT: pminub %xmm7, %xmm3 6062; SSE-NEXT: retq 6063; 6064; AVX1-LABEL: test136: 6065; AVX1: # %bb.0: # %entry 6066; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6067; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6068; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 6069; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 6070; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6071; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6072; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6073; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 6074; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 6075; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6076; AVX1-NEXT: retq 6077; 6078; AVX2-LABEL: test136: 6079; AVX2: # %bb.0: # %entry 6080; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 6081; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 6082; AVX2-NEXT: retq 6083; 6084; AVX512F-LABEL: test136: 6085; AVX512F: # %bb.0: # %entry 6086; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6087; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6088; AVX512F-NEXT: vpminub %ymm2, %ymm3, %ymm2 6089; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 6090; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6091; AVX512F-NEXT: retq 6092; 6093; AVX512BW-LABEL: test136: 6094; AVX512BW: # %bb.0: # %entry 6095; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 6096; AVX512BW-NEXT: retq 6097entry: 6098 %cmp = icmp uge <64 x i8> %a, %b 6099 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6100 ret <64 x i8> %sel 6101} 6102 6103define <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) { 6104; SSE-LABEL: test137: 6105; SSE: # %bb.0: # %entry 6106; SSE-NEXT: pmaxsw %xmm4, %xmm0 6107; SSE-NEXT: pmaxsw %xmm5, %xmm1 6108; SSE-NEXT: pmaxsw %xmm6, %xmm2 6109; SSE-NEXT: pmaxsw %xmm7, %xmm3 6110; SSE-NEXT: retq 6111; 6112; AVX1-LABEL: test137: 6113; AVX1: # %bb.0: # %entry 6114; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6115; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6116; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 6117; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 6118; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6119; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6120; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6121; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 6122; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 6123; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6124; AVX1-NEXT: retq 6125; 6126; AVX2-LABEL: test137: 6127; AVX2: # %bb.0: # %entry 6128; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 6129; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 6130; AVX2-NEXT: retq 6131; 6132; AVX512F-LABEL: test137: 6133; AVX512F: # %bb.0: # %entry 6134; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6135; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6136; AVX512F-NEXT: vpmaxsw %ymm2, %ymm3, %ymm2 6137; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 6138; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6139; AVX512F-NEXT: retq 6140; 6141; AVX512BW-LABEL: test137: 6142; AVX512BW: # %bb.0: # %entry 6143; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 6144; AVX512BW-NEXT: retq 6145entry: 6146 %cmp = icmp slt <32 x i16> %a, %b 6147 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6148 ret <32 x i16> %sel 6149} 6150 6151define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) { 6152; SSE-LABEL: test138: 6153; SSE: # %bb.0: # %entry 6154; SSE-NEXT: pmaxsw %xmm4, %xmm0 6155; SSE-NEXT: pmaxsw %xmm5, %xmm1 6156; SSE-NEXT: pmaxsw %xmm6, %xmm2 6157; SSE-NEXT: pmaxsw %xmm7, %xmm3 6158; SSE-NEXT: retq 6159; 6160; AVX1-LABEL: test138: 6161; AVX1: # %bb.0: # %entry 6162; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6163; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6164; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 6165; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 6166; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6167; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6168; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6169; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 6170; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 6171; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6172; AVX1-NEXT: retq 6173; 6174; AVX2-LABEL: test138: 6175; AVX2: # %bb.0: # %entry 6176; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 6177; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 6178; AVX2-NEXT: retq 6179; 6180; AVX512F-LABEL: test138: 6181; AVX512F: # %bb.0: # %entry 6182; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6183; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6184; AVX512F-NEXT: vpmaxsw %ymm2, %ymm3, %ymm2 6185; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 6186; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6187; AVX512F-NEXT: retq 6188; 6189; AVX512BW-LABEL: test138: 6190; AVX512BW: # %bb.0: # %entry 6191; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 6192; AVX512BW-NEXT: retq 6193entry: 6194 %cmp = icmp sle <32 x i16> %a, %b 6195 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6196 ret <32 x i16> %sel 6197} 6198 6199define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) { 6200; SSE-LABEL: test139: 6201; SSE: # %bb.0: # %entry 6202; SSE-NEXT: pminsw %xmm4, %xmm0 6203; SSE-NEXT: pminsw %xmm5, %xmm1 6204; SSE-NEXT: pminsw %xmm6, %xmm2 6205; SSE-NEXT: pminsw %xmm7, %xmm3 6206; SSE-NEXT: retq 6207; 6208; AVX1-LABEL: test139: 6209; AVX1: # %bb.0: # %entry 6210; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6211; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6212; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 6213; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 6214; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6215; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6216; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6217; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 6218; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 6219; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6220; AVX1-NEXT: retq 6221; 6222; AVX2-LABEL: test139: 6223; AVX2: # %bb.0: # %entry 6224; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 6225; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 6226; AVX2-NEXT: retq 6227; 6228; AVX512F-LABEL: test139: 6229; AVX512F: # %bb.0: # %entry 6230; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6231; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6232; AVX512F-NEXT: vpminsw %ymm2, %ymm3, %ymm2 6233; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 6234; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6235; AVX512F-NEXT: retq 6236; 6237; AVX512BW-LABEL: test139: 6238; AVX512BW: # %bb.0: # %entry 6239; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 6240; AVX512BW-NEXT: retq 6241entry: 6242 %cmp = icmp sgt <32 x i16> %a, %b 6243 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6244 ret <32 x i16> %sel 6245} 6246 6247define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) { 6248; SSE-LABEL: test140: 6249; SSE: # %bb.0: # %entry 6250; SSE-NEXT: pminsw %xmm4, %xmm0 6251; SSE-NEXT: pminsw %xmm5, %xmm1 6252; SSE-NEXT: pminsw %xmm6, %xmm2 6253; SSE-NEXT: pminsw %xmm7, %xmm3 6254; SSE-NEXT: retq 6255; 6256; AVX1-LABEL: test140: 6257; AVX1: # %bb.0: # %entry 6258; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6259; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6260; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 6261; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 6262; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6263; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6264; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6265; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 6266; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 6267; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6268; AVX1-NEXT: retq 6269; 6270; AVX2-LABEL: test140: 6271; AVX2: # %bb.0: # %entry 6272; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 6273; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 6274; AVX2-NEXT: retq 6275; 6276; AVX512F-LABEL: test140: 6277; AVX512F: # %bb.0: # %entry 6278; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6279; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6280; AVX512F-NEXT: vpminsw %ymm2, %ymm3, %ymm2 6281; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 6282; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6283; AVX512F-NEXT: retq 6284; 6285; AVX512BW-LABEL: test140: 6286; AVX512BW: # %bb.0: # %entry 6287; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 6288; AVX512BW-NEXT: retq 6289entry: 6290 %cmp = icmp sge <32 x i16> %a, %b 6291 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6292 ret <32 x i16> %sel 6293} 6294 6295define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) { 6296; SSE2-LABEL: test141: 6297; SSE2: # %bb.0: # %entry 6298; SSE2-NEXT: psubusw %xmm0, %xmm4 6299; SSE2-NEXT: paddw %xmm4, %xmm0 6300; SSE2-NEXT: psubusw %xmm1, %xmm5 6301; SSE2-NEXT: paddw %xmm5, %xmm1 6302; SSE2-NEXT: psubusw %xmm2, %xmm6 6303; SSE2-NEXT: paddw %xmm6, %xmm2 6304; SSE2-NEXT: psubusw %xmm3, %xmm7 6305; SSE2-NEXT: paddw %xmm7, %xmm3 6306; SSE2-NEXT: retq 6307; 6308; SSE4-LABEL: test141: 6309; SSE4: # %bb.0: # %entry 6310; SSE4-NEXT: pmaxuw %xmm4, %xmm0 6311; SSE4-NEXT: pmaxuw %xmm5, %xmm1 6312; SSE4-NEXT: pmaxuw %xmm6, %xmm2 6313; SSE4-NEXT: pmaxuw %xmm7, %xmm3 6314; SSE4-NEXT: retq 6315; 6316; AVX1-LABEL: test141: 6317; AVX1: # %bb.0: # %entry 6318; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6319; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6320; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 6321; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 6322; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6323; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6324; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6325; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 6326; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 6327; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6328; AVX1-NEXT: retq 6329; 6330; AVX2-LABEL: test141: 6331; AVX2: # %bb.0: # %entry 6332; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 6333; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 6334; AVX2-NEXT: retq 6335; 6336; AVX512F-LABEL: test141: 6337; AVX512F: # %bb.0: # %entry 6338; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6339; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6340; AVX512F-NEXT: vpmaxuw %ymm2, %ymm3, %ymm2 6341; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 6342; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6343; AVX512F-NEXT: retq 6344; 6345; AVX512BW-LABEL: test141: 6346; AVX512BW: # %bb.0: # %entry 6347; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 6348; AVX512BW-NEXT: retq 6349entry: 6350 %cmp = icmp ult <32 x i16> %a, %b 6351 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6352 ret <32 x i16> %sel 6353} 6354 6355define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) { 6356; SSE2-LABEL: test142: 6357; SSE2: # %bb.0: # %entry 6358; SSE2-NEXT: psubusw %xmm0, %xmm4 6359; SSE2-NEXT: paddw %xmm4, %xmm0 6360; SSE2-NEXT: psubusw %xmm1, %xmm5 6361; SSE2-NEXT: paddw %xmm5, %xmm1 6362; SSE2-NEXT: psubusw %xmm2, %xmm6 6363; SSE2-NEXT: paddw %xmm6, %xmm2 6364; SSE2-NEXT: psubusw %xmm3, %xmm7 6365; SSE2-NEXT: paddw %xmm7, %xmm3 6366; SSE2-NEXT: retq 6367; 6368; SSE4-LABEL: test142: 6369; SSE4: # %bb.0: # %entry 6370; SSE4-NEXT: pmaxuw %xmm4, %xmm0 6371; SSE4-NEXT: pmaxuw %xmm5, %xmm1 6372; SSE4-NEXT: pmaxuw %xmm6, %xmm2 6373; SSE4-NEXT: pmaxuw %xmm7, %xmm3 6374; SSE4-NEXT: retq 6375; 6376; AVX1-LABEL: test142: 6377; AVX1: # %bb.0: # %entry 6378; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6379; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6380; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 6381; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 6382; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6383; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6384; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6385; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 6386; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 6387; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6388; AVX1-NEXT: retq 6389; 6390; AVX2-LABEL: test142: 6391; AVX2: # %bb.0: # %entry 6392; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 6393; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 6394; AVX2-NEXT: retq 6395; 6396; AVX512F-LABEL: test142: 6397; AVX512F: # %bb.0: # %entry 6398; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6399; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6400; AVX512F-NEXT: vpmaxuw %ymm2, %ymm3, %ymm2 6401; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 6402; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6403; AVX512F-NEXT: retq 6404; 6405; AVX512BW-LABEL: test142: 6406; AVX512BW: # %bb.0: # %entry 6407; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 6408; AVX512BW-NEXT: retq 6409entry: 6410 %cmp = icmp ule <32 x i16> %a, %b 6411 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6412 ret <32 x i16> %sel 6413} 6414 6415define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) { 6416; SSE2-LABEL: test143: 6417; SSE2: # %bb.0: # %entry 6418; SSE2-NEXT: movdqa %xmm0, %xmm8 6419; SSE2-NEXT: psubusw %xmm4, %xmm8 6420; SSE2-NEXT: psubw %xmm8, %xmm0 6421; SSE2-NEXT: movdqa %xmm1, %xmm4 6422; SSE2-NEXT: psubusw %xmm5, %xmm4 6423; SSE2-NEXT: psubw %xmm4, %xmm1 6424; SSE2-NEXT: movdqa %xmm2, %xmm4 6425; SSE2-NEXT: psubusw %xmm6, %xmm4 6426; SSE2-NEXT: psubw %xmm4, %xmm2 6427; SSE2-NEXT: movdqa %xmm3, %xmm4 6428; SSE2-NEXT: psubusw %xmm7, %xmm4 6429; SSE2-NEXT: psubw %xmm4, %xmm3 6430; SSE2-NEXT: retq 6431; 6432; SSE4-LABEL: test143: 6433; SSE4: # %bb.0: # %entry 6434; SSE4-NEXT: pminuw %xmm4, %xmm0 6435; SSE4-NEXT: pminuw %xmm5, %xmm1 6436; SSE4-NEXT: pminuw %xmm6, %xmm2 6437; SSE4-NEXT: pminuw %xmm7, %xmm3 6438; SSE4-NEXT: retq 6439; 6440; AVX1-LABEL: test143: 6441; AVX1: # %bb.0: # %entry 6442; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6443; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6444; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 6445; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 6446; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6447; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6448; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6449; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 6450; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 6451; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6452; AVX1-NEXT: retq 6453; 6454; AVX2-LABEL: test143: 6455; AVX2: # %bb.0: # %entry 6456; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 6457; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 6458; AVX2-NEXT: retq 6459; 6460; AVX512F-LABEL: test143: 6461; AVX512F: # %bb.0: # %entry 6462; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6463; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6464; AVX512F-NEXT: vpminuw %ymm2, %ymm3, %ymm2 6465; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 6466; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6467; AVX512F-NEXT: retq 6468; 6469; AVX512BW-LABEL: test143: 6470; AVX512BW: # %bb.0: # %entry 6471; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 6472; AVX512BW-NEXT: retq 6473entry: 6474 %cmp = icmp ugt <32 x i16> %a, %b 6475 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6476 ret <32 x i16> %sel 6477} 6478 6479define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) { 6480; SSE2-LABEL: test144: 6481; SSE2: # %bb.0: # %entry 6482; SSE2-NEXT: movdqa %xmm0, %xmm8 6483; SSE2-NEXT: psubusw %xmm4, %xmm8 6484; SSE2-NEXT: psubw %xmm8, %xmm0 6485; SSE2-NEXT: movdqa %xmm1, %xmm4 6486; SSE2-NEXT: psubusw %xmm5, %xmm4 6487; SSE2-NEXT: psubw %xmm4, %xmm1 6488; SSE2-NEXT: movdqa %xmm2, %xmm4 6489; SSE2-NEXT: psubusw %xmm6, %xmm4 6490; SSE2-NEXT: psubw %xmm4, %xmm2 6491; SSE2-NEXT: movdqa %xmm3, %xmm4 6492; SSE2-NEXT: psubusw %xmm7, %xmm4 6493; SSE2-NEXT: psubw %xmm4, %xmm3 6494; SSE2-NEXT: retq 6495; 6496; SSE4-LABEL: test144: 6497; SSE4: # %bb.0: # %entry 6498; SSE4-NEXT: pminuw %xmm4, %xmm0 6499; SSE4-NEXT: pminuw %xmm5, %xmm1 6500; SSE4-NEXT: pminuw %xmm6, %xmm2 6501; SSE4-NEXT: pminuw %xmm7, %xmm3 6502; SSE4-NEXT: retq 6503; 6504; AVX1-LABEL: test144: 6505; AVX1: # %bb.0: # %entry 6506; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6507; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6508; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 6509; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 6510; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6511; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6512; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6513; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 6514; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 6515; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6516; AVX1-NEXT: retq 6517; 6518; AVX2-LABEL: test144: 6519; AVX2: # %bb.0: # %entry 6520; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 6521; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 6522; AVX2-NEXT: retq 6523; 6524; AVX512F-LABEL: test144: 6525; AVX512F: # %bb.0: # %entry 6526; AVX512F-NEXT: vextracti64x4 $1, %zmm1, %ymm2 6527; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3 6528; AVX512F-NEXT: vpminuw %ymm2, %ymm3, %ymm2 6529; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 6530; AVX512F-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0 6531; AVX512F-NEXT: retq 6532; 6533; AVX512BW-LABEL: test144: 6534; AVX512BW: # %bb.0: # %entry 6535; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 6536; AVX512BW-NEXT: retq 6537entry: 6538 %cmp = icmp uge <32 x i16> %a, %b 6539 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6540 ret <32 x i16> %sel 6541} 6542 6543define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) { 6544; SSE2-LABEL: test145: 6545; SSE2: # %bb.0: # %entry 6546; SSE2-NEXT: movdqa %xmm0, %xmm8 6547; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6548; SSE2-NEXT: pand %xmm8, %xmm0 6549; SSE2-NEXT: pandn %xmm4, %xmm8 6550; SSE2-NEXT: por %xmm0, %xmm8 6551; SSE2-NEXT: movdqa %xmm1, %xmm4 6552; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 6553; SSE2-NEXT: pand %xmm4, %xmm1 6554; SSE2-NEXT: pandn %xmm5, %xmm4 6555; SSE2-NEXT: por %xmm1, %xmm4 6556; SSE2-NEXT: movdqa %xmm2, %xmm5 6557; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 6558; SSE2-NEXT: pand %xmm5, %xmm2 6559; SSE2-NEXT: pandn %xmm6, %xmm5 6560; SSE2-NEXT: por %xmm2, %xmm5 6561; SSE2-NEXT: movdqa %xmm3, %xmm6 6562; SSE2-NEXT: pcmpgtd %xmm7, %xmm6 6563; SSE2-NEXT: pand %xmm6, %xmm3 6564; SSE2-NEXT: pandn %xmm7, %xmm6 6565; SSE2-NEXT: por %xmm3, %xmm6 6566; SSE2-NEXT: movdqa %xmm8, %xmm0 6567; SSE2-NEXT: movdqa %xmm4, %xmm1 6568; SSE2-NEXT: movdqa %xmm5, %xmm2 6569; SSE2-NEXT: movdqa %xmm6, %xmm3 6570; SSE2-NEXT: retq 6571; 6572; SSE4-LABEL: test145: 6573; SSE4: # %bb.0: # %entry 6574; SSE4-NEXT: pmaxsd %xmm4, %xmm0 6575; SSE4-NEXT: pmaxsd %xmm5, %xmm1 6576; SSE4-NEXT: pmaxsd %xmm6, %xmm2 6577; SSE4-NEXT: pmaxsd %xmm7, %xmm3 6578; SSE4-NEXT: retq 6579; 6580; AVX1-LABEL: test145: 6581; AVX1: # %bb.0: # %entry 6582; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6583; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6584; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 6585; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 6586; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6587; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6588; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6589; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 6590; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 6591; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6592; AVX1-NEXT: retq 6593; 6594; AVX2-LABEL: test145: 6595; AVX2: # %bb.0: # %entry 6596; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 6597; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 6598; AVX2-NEXT: retq 6599; 6600; AVX512-LABEL: test145: 6601; AVX512: # %bb.0: # %entry 6602; AVX512-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 6603; AVX512-NEXT: retq 6604entry: 6605 %cmp = icmp slt <16 x i32> %a, %b 6606 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6607 ret <16 x i32> %sel 6608} 6609 6610define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) { 6611; SSE2-LABEL: test146: 6612; SSE2: # %bb.0: # %entry 6613; SSE2-NEXT: movdqa %xmm0, %xmm8 6614; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6615; SSE2-NEXT: pand %xmm8, %xmm0 6616; SSE2-NEXT: pandn %xmm4, %xmm8 6617; SSE2-NEXT: por %xmm0, %xmm8 6618; SSE2-NEXT: movdqa %xmm1, %xmm4 6619; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 6620; SSE2-NEXT: pand %xmm4, %xmm1 6621; SSE2-NEXT: pandn %xmm5, %xmm4 6622; SSE2-NEXT: por %xmm1, %xmm4 6623; SSE2-NEXT: movdqa %xmm2, %xmm5 6624; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 6625; SSE2-NEXT: pand %xmm5, %xmm2 6626; SSE2-NEXT: pandn %xmm6, %xmm5 6627; SSE2-NEXT: por %xmm2, %xmm5 6628; SSE2-NEXT: movdqa %xmm3, %xmm6 6629; SSE2-NEXT: pcmpgtd %xmm7, %xmm6 6630; SSE2-NEXT: pand %xmm6, %xmm3 6631; SSE2-NEXT: pandn %xmm7, %xmm6 6632; SSE2-NEXT: por %xmm3, %xmm6 6633; SSE2-NEXT: movdqa %xmm8, %xmm0 6634; SSE2-NEXT: movdqa %xmm4, %xmm1 6635; SSE2-NEXT: movdqa %xmm5, %xmm2 6636; SSE2-NEXT: movdqa %xmm6, %xmm3 6637; SSE2-NEXT: retq 6638; 6639; SSE4-LABEL: test146: 6640; SSE4: # %bb.0: # %entry 6641; SSE4-NEXT: pmaxsd %xmm4, %xmm0 6642; SSE4-NEXT: pmaxsd %xmm5, %xmm1 6643; SSE4-NEXT: pmaxsd %xmm6, %xmm2 6644; SSE4-NEXT: pmaxsd %xmm7, %xmm3 6645; SSE4-NEXT: retq 6646; 6647; AVX1-LABEL: test146: 6648; AVX1: # %bb.0: # %entry 6649; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6650; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6651; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 6652; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 6653; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6654; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6655; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6656; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 6657; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 6658; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6659; AVX1-NEXT: retq 6660; 6661; AVX2-LABEL: test146: 6662; AVX2: # %bb.0: # %entry 6663; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 6664; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 6665; AVX2-NEXT: retq 6666; 6667; AVX512-LABEL: test146: 6668; AVX512: # %bb.0: # %entry 6669; AVX512-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 6670; AVX512-NEXT: retq 6671entry: 6672 %cmp = icmp sle <16 x i32> %a, %b 6673 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6674 ret <16 x i32> %sel 6675} 6676 6677define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) { 6678; SSE2-LABEL: test147: 6679; SSE2: # %bb.0: # %entry 6680; SSE2-NEXT: movdqa %xmm4, %xmm8 6681; SSE2-NEXT: pcmpgtd %xmm0, %xmm8 6682; SSE2-NEXT: pand %xmm8, %xmm0 6683; SSE2-NEXT: pandn %xmm4, %xmm8 6684; SSE2-NEXT: por %xmm8, %xmm0 6685; SSE2-NEXT: movdqa %xmm5, %xmm4 6686; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 6687; SSE2-NEXT: pand %xmm4, %xmm1 6688; SSE2-NEXT: pandn %xmm5, %xmm4 6689; SSE2-NEXT: por %xmm4, %xmm1 6690; SSE2-NEXT: movdqa %xmm6, %xmm4 6691; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 6692; SSE2-NEXT: pand %xmm4, %xmm2 6693; SSE2-NEXT: pandn %xmm6, %xmm4 6694; SSE2-NEXT: por %xmm4, %xmm2 6695; SSE2-NEXT: movdqa %xmm7, %xmm4 6696; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 6697; SSE2-NEXT: pand %xmm4, %xmm3 6698; SSE2-NEXT: pandn %xmm7, %xmm4 6699; SSE2-NEXT: por %xmm4, %xmm3 6700; SSE2-NEXT: retq 6701; 6702; SSE4-LABEL: test147: 6703; SSE4: # %bb.0: # %entry 6704; SSE4-NEXT: pminsd %xmm4, %xmm0 6705; SSE4-NEXT: pminsd %xmm5, %xmm1 6706; SSE4-NEXT: pminsd %xmm6, %xmm2 6707; SSE4-NEXT: pminsd %xmm7, %xmm3 6708; SSE4-NEXT: retq 6709; 6710; AVX1-LABEL: test147: 6711; AVX1: # %bb.0: # %entry 6712; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6713; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6714; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 6715; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 6716; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6717; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6718; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6719; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 6720; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 6721; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6722; AVX1-NEXT: retq 6723; 6724; AVX2-LABEL: test147: 6725; AVX2: # %bb.0: # %entry 6726; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 6727; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 6728; AVX2-NEXT: retq 6729; 6730; AVX512-LABEL: test147: 6731; AVX512: # %bb.0: # %entry 6732; AVX512-NEXT: vpminsd %zmm1, %zmm0, %zmm0 6733; AVX512-NEXT: retq 6734entry: 6735 %cmp = icmp sgt <16 x i32> %a, %b 6736 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6737 ret <16 x i32> %sel 6738} 6739 6740define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) { 6741; SSE2-LABEL: test148: 6742; SSE2: # %bb.0: # %entry 6743; SSE2-NEXT: movdqa %xmm4, %xmm8 6744; SSE2-NEXT: pcmpgtd %xmm0, %xmm8 6745; SSE2-NEXT: pand %xmm8, %xmm0 6746; SSE2-NEXT: pandn %xmm4, %xmm8 6747; SSE2-NEXT: por %xmm8, %xmm0 6748; SSE2-NEXT: movdqa %xmm5, %xmm4 6749; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 6750; SSE2-NEXT: pand %xmm4, %xmm1 6751; SSE2-NEXT: pandn %xmm5, %xmm4 6752; SSE2-NEXT: por %xmm4, %xmm1 6753; SSE2-NEXT: movdqa %xmm6, %xmm4 6754; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 6755; SSE2-NEXT: pand %xmm4, %xmm2 6756; SSE2-NEXT: pandn %xmm6, %xmm4 6757; SSE2-NEXT: por %xmm4, %xmm2 6758; SSE2-NEXT: movdqa %xmm7, %xmm4 6759; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 6760; SSE2-NEXT: pand %xmm4, %xmm3 6761; SSE2-NEXT: pandn %xmm7, %xmm4 6762; SSE2-NEXT: por %xmm4, %xmm3 6763; SSE2-NEXT: retq 6764; 6765; SSE4-LABEL: test148: 6766; SSE4: # %bb.0: # %entry 6767; SSE4-NEXT: pminsd %xmm4, %xmm0 6768; SSE4-NEXT: pminsd %xmm5, %xmm1 6769; SSE4-NEXT: pminsd %xmm6, %xmm2 6770; SSE4-NEXT: pminsd %xmm7, %xmm3 6771; SSE4-NEXT: retq 6772; 6773; AVX1-LABEL: test148: 6774; AVX1: # %bb.0: # %entry 6775; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6776; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6777; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 6778; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 6779; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6780; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6781; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6782; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 6783; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 6784; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6785; AVX1-NEXT: retq 6786; 6787; AVX2-LABEL: test148: 6788; AVX2: # %bb.0: # %entry 6789; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 6790; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 6791; AVX2-NEXT: retq 6792; 6793; AVX512-LABEL: test148: 6794; AVX512: # %bb.0: # %entry 6795; AVX512-NEXT: vpminsd %zmm1, %zmm0, %zmm0 6796; AVX512-NEXT: retq 6797entry: 6798 %cmp = icmp sge <16 x i32> %a, %b 6799 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6800 ret <16 x i32> %sel 6801} 6802 6803define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) { 6804; SSE2-LABEL: test149: 6805; SSE2: # %bb.0: # %entry 6806; SSE2-NEXT: movdqa %xmm1, %xmm8 6807; SSE2-NEXT: movdqa %xmm0, %xmm10 6808; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648] 6809; SSE2-NEXT: movdqa %xmm4, %xmm1 6810; SSE2-NEXT: pxor %xmm9, %xmm1 6811; SSE2-NEXT: pxor %xmm9, %xmm0 6812; SSE2-NEXT: pcmpgtd %xmm1, %xmm0 6813; SSE2-NEXT: pand %xmm0, %xmm10 6814; SSE2-NEXT: pandn %xmm4, %xmm0 6815; SSE2-NEXT: por %xmm10, %xmm0 6816; SSE2-NEXT: movdqa %xmm5, %xmm4 6817; SSE2-NEXT: pxor %xmm9, %xmm4 6818; SSE2-NEXT: movdqa %xmm8, %xmm1 6819; SSE2-NEXT: pxor %xmm9, %xmm1 6820; SSE2-NEXT: pcmpgtd %xmm4, %xmm1 6821; SSE2-NEXT: pand %xmm1, %xmm8 6822; SSE2-NEXT: pandn %xmm5, %xmm1 6823; SSE2-NEXT: por %xmm8, %xmm1 6824; SSE2-NEXT: movdqa %xmm6, %xmm5 6825; SSE2-NEXT: pxor %xmm9, %xmm5 6826; SSE2-NEXT: movdqa %xmm2, %xmm4 6827; SSE2-NEXT: pxor %xmm9, %xmm4 6828; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 6829; SSE2-NEXT: pand %xmm4, %xmm2 6830; SSE2-NEXT: pandn %xmm6, %xmm4 6831; SSE2-NEXT: por %xmm2, %xmm4 6832; SSE2-NEXT: movdqa %xmm7, %xmm2 6833; SSE2-NEXT: pxor %xmm9, %xmm2 6834; SSE2-NEXT: pxor %xmm3, %xmm9 6835; SSE2-NEXT: pcmpgtd %xmm2, %xmm9 6836; SSE2-NEXT: pand %xmm9, %xmm3 6837; SSE2-NEXT: pandn %xmm7, %xmm9 6838; SSE2-NEXT: por %xmm9, %xmm3 6839; SSE2-NEXT: movdqa %xmm4, %xmm2 6840; SSE2-NEXT: retq 6841; 6842; SSE4-LABEL: test149: 6843; SSE4: # %bb.0: # %entry 6844; SSE4-NEXT: pmaxud %xmm4, %xmm0 6845; SSE4-NEXT: pmaxud %xmm5, %xmm1 6846; SSE4-NEXT: pmaxud %xmm6, %xmm2 6847; SSE4-NEXT: pmaxud %xmm7, %xmm3 6848; SSE4-NEXT: retq 6849; 6850; AVX1-LABEL: test149: 6851; AVX1: # %bb.0: # %entry 6852; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6853; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6854; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 6855; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 6856; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6857; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6858; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6859; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 6860; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 6861; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6862; AVX1-NEXT: retq 6863; 6864; AVX2-LABEL: test149: 6865; AVX2: # %bb.0: # %entry 6866; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 6867; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 6868; AVX2-NEXT: retq 6869; 6870; AVX512-LABEL: test149: 6871; AVX512: # %bb.0: # %entry 6872; AVX512-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 6873; AVX512-NEXT: retq 6874entry: 6875 %cmp = icmp ult <16 x i32> %a, %b 6876 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6877 ret <16 x i32> %sel 6878} 6879 6880define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) { 6881; SSE2-LABEL: test150: 6882; SSE2: # %bb.0: # %entry 6883; SSE2-NEXT: movdqa %xmm1, %xmm8 6884; SSE2-NEXT: movdqa %xmm0, %xmm10 6885; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648] 6886; SSE2-NEXT: movdqa %xmm4, %xmm1 6887; SSE2-NEXT: pxor %xmm9, %xmm1 6888; SSE2-NEXT: pxor %xmm9, %xmm0 6889; SSE2-NEXT: pcmpgtd %xmm1, %xmm0 6890; SSE2-NEXT: pand %xmm0, %xmm10 6891; SSE2-NEXT: pandn %xmm4, %xmm0 6892; SSE2-NEXT: por %xmm10, %xmm0 6893; SSE2-NEXT: movdqa %xmm5, %xmm4 6894; SSE2-NEXT: pxor %xmm9, %xmm4 6895; SSE2-NEXT: movdqa %xmm8, %xmm1 6896; SSE2-NEXT: pxor %xmm9, %xmm1 6897; SSE2-NEXT: pcmpgtd %xmm4, %xmm1 6898; SSE2-NEXT: pand %xmm1, %xmm8 6899; SSE2-NEXT: pandn %xmm5, %xmm1 6900; SSE2-NEXT: por %xmm8, %xmm1 6901; SSE2-NEXT: movdqa %xmm6, %xmm5 6902; SSE2-NEXT: pxor %xmm9, %xmm5 6903; SSE2-NEXT: movdqa %xmm2, %xmm4 6904; SSE2-NEXT: pxor %xmm9, %xmm4 6905; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 6906; SSE2-NEXT: pand %xmm4, %xmm2 6907; SSE2-NEXT: pandn %xmm6, %xmm4 6908; SSE2-NEXT: por %xmm2, %xmm4 6909; SSE2-NEXT: movdqa %xmm7, %xmm2 6910; SSE2-NEXT: pxor %xmm9, %xmm2 6911; SSE2-NEXT: pxor %xmm3, %xmm9 6912; SSE2-NEXT: pcmpgtd %xmm2, %xmm9 6913; SSE2-NEXT: pand %xmm9, %xmm3 6914; SSE2-NEXT: pandn %xmm7, %xmm9 6915; SSE2-NEXT: por %xmm9, %xmm3 6916; SSE2-NEXT: movdqa %xmm4, %xmm2 6917; SSE2-NEXT: retq 6918; 6919; SSE4-LABEL: test150: 6920; SSE4: # %bb.0: # %entry 6921; SSE4-NEXT: pmaxud %xmm4, %xmm0 6922; SSE4-NEXT: pmaxud %xmm5, %xmm1 6923; SSE4-NEXT: pmaxud %xmm6, %xmm2 6924; SSE4-NEXT: pmaxud %xmm7, %xmm3 6925; SSE4-NEXT: retq 6926; 6927; AVX1-LABEL: test150: 6928; AVX1: # %bb.0: # %entry 6929; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6930; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6931; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 6932; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 6933; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6934; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6935; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6936; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 6937; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 6938; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6939; AVX1-NEXT: retq 6940; 6941; AVX2-LABEL: test150: 6942; AVX2: # %bb.0: # %entry 6943; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 6944; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 6945; AVX2-NEXT: retq 6946; 6947; AVX512-LABEL: test150: 6948; AVX512: # %bb.0: # %entry 6949; AVX512-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 6950; AVX512-NEXT: retq 6951entry: 6952 %cmp = icmp ule <16 x i32> %a, %b 6953 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6954 ret <16 x i32> %sel 6955} 6956 6957define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) { 6958; SSE2-LABEL: test151: 6959; SSE2: # %bb.0: # %entry 6960; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 6961; SSE2-NEXT: movdqa %xmm0, %xmm9 6962; SSE2-NEXT: pxor %xmm8, %xmm9 6963; SSE2-NEXT: movdqa %xmm4, %xmm10 6964; SSE2-NEXT: pxor %xmm8, %xmm10 6965; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 6966; SSE2-NEXT: pand %xmm10, %xmm0 6967; SSE2-NEXT: pandn %xmm4, %xmm10 6968; SSE2-NEXT: por %xmm10, %xmm0 6969; SSE2-NEXT: movdqa %xmm1, %xmm9 6970; SSE2-NEXT: pxor %xmm8, %xmm9 6971; SSE2-NEXT: movdqa %xmm5, %xmm4 6972; SSE2-NEXT: pxor %xmm8, %xmm4 6973; SSE2-NEXT: pcmpgtd %xmm9, %xmm4 6974; SSE2-NEXT: pand %xmm4, %xmm1 6975; SSE2-NEXT: pandn %xmm5, %xmm4 6976; SSE2-NEXT: por %xmm4, %xmm1 6977; SSE2-NEXT: movdqa %xmm2, %xmm4 6978; SSE2-NEXT: pxor %xmm8, %xmm4 6979; SSE2-NEXT: movdqa %xmm6, %xmm5 6980; SSE2-NEXT: pxor %xmm8, %xmm5 6981; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 6982; SSE2-NEXT: pand %xmm5, %xmm2 6983; SSE2-NEXT: pandn %xmm6, %xmm5 6984; SSE2-NEXT: por %xmm5, %xmm2 6985; SSE2-NEXT: movdqa %xmm3, %xmm4 6986; SSE2-NEXT: pxor %xmm8, %xmm4 6987; SSE2-NEXT: pxor %xmm7, %xmm8 6988; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6989; SSE2-NEXT: pand %xmm8, %xmm3 6990; SSE2-NEXT: pandn %xmm7, %xmm8 6991; SSE2-NEXT: por %xmm8, %xmm3 6992; SSE2-NEXT: retq 6993; 6994; SSE4-LABEL: test151: 6995; SSE4: # %bb.0: # %entry 6996; SSE4-NEXT: pminud %xmm4, %xmm0 6997; SSE4-NEXT: pminud %xmm5, %xmm1 6998; SSE4-NEXT: pminud %xmm6, %xmm2 6999; SSE4-NEXT: pminud %xmm7, %xmm3 7000; SSE4-NEXT: retq 7001; 7002; AVX1-LABEL: test151: 7003; AVX1: # %bb.0: # %entry 7004; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7005; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7006; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 7007; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 7008; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7009; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7010; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7011; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 7012; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 7013; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7014; AVX1-NEXT: retq 7015; 7016; AVX2-LABEL: test151: 7017; AVX2: # %bb.0: # %entry 7018; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 7019; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 7020; AVX2-NEXT: retq 7021; 7022; AVX512-LABEL: test151: 7023; AVX512: # %bb.0: # %entry 7024; AVX512-NEXT: vpminud %zmm1, %zmm0, %zmm0 7025; AVX512-NEXT: retq 7026entry: 7027 %cmp = icmp ugt <16 x i32> %a, %b 7028 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7029 ret <16 x i32> %sel 7030} 7031 7032define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) { 7033; SSE2-LABEL: test152: 7034; SSE2: # %bb.0: # %entry 7035; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 7036; SSE2-NEXT: movdqa %xmm0, %xmm9 7037; SSE2-NEXT: pxor %xmm8, %xmm9 7038; SSE2-NEXT: movdqa %xmm4, %xmm10 7039; SSE2-NEXT: pxor %xmm8, %xmm10 7040; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7041; SSE2-NEXT: pand %xmm10, %xmm0 7042; SSE2-NEXT: pandn %xmm4, %xmm10 7043; SSE2-NEXT: por %xmm10, %xmm0 7044; SSE2-NEXT: movdqa %xmm1, %xmm9 7045; SSE2-NEXT: pxor %xmm8, %xmm9 7046; SSE2-NEXT: movdqa %xmm5, %xmm4 7047; SSE2-NEXT: pxor %xmm8, %xmm4 7048; SSE2-NEXT: pcmpgtd %xmm9, %xmm4 7049; SSE2-NEXT: pand %xmm4, %xmm1 7050; SSE2-NEXT: pandn %xmm5, %xmm4 7051; SSE2-NEXT: por %xmm4, %xmm1 7052; SSE2-NEXT: movdqa %xmm2, %xmm4 7053; SSE2-NEXT: pxor %xmm8, %xmm4 7054; SSE2-NEXT: movdqa %xmm6, %xmm5 7055; SSE2-NEXT: pxor %xmm8, %xmm5 7056; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7057; SSE2-NEXT: pand %xmm5, %xmm2 7058; SSE2-NEXT: pandn %xmm6, %xmm5 7059; SSE2-NEXT: por %xmm5, %xmm2 7060; SSE2-NEXT: movdqa %xmm3, %xmm4 7061; SSE2-NEXT: pxor %xmm8, %xmm4 7062; SSE2-NEXT: pxor %xmm7, %xmm8 7063; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 7064; SSE2-NEXT: pand %xmm8, %xmm3 7065; SSE2-NEXT: pandn %xmm7, %xmm8 7066; SSE2-NEXT: por %xmm8, %xmm3 7067; SSE2-NEXT: retq 7068; 7069; SSE4-LABEL: test152: 7070; SSE4: # %bb.0: # %entry 7071; SSE4-NEXT: pminud %xmm4, %xmm0 7072; SSE4-NEXT: pminud %xmm5, %xmm1 7073; SSE4-NEXT: pminud %xmm6, %xmm2 7074; SSE4-NEXT: pminud %xmm7, %xmm3 7075; SSE4-NEXT: retq 7076; 7077; AVX1-LABEL: test152: 7078; AVX1: # %bb.0: # %entry 7079; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7080; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7081; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 7082; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 7083; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7084; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7085; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7086; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 7087; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 7088; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7089; AVX1-NEXT: retq 7090; 7091; AVX2-LABEL: test152: 7092; AVX2: # %bb.0: # %entry 7093; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 7094; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 7095; AVX2-NEXT: retq 7096; 7097; AVX512-LABEL: test152: 7098; AVX512: # %bb.0: # %entry 7099; AVX512-NEXT: vpminud %zmm1, %zmm0, %zmm0 7100; AVX512-NEXT: retq 7101entry: 7102 %cmp = icmp uge <16 x i32> %a, %b 7103 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7104 ret <16 x i32> %sel 7105} 7106 7107; ----------------------- 7108 7109define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) { 7110; SSE2-LABEL: test153: 7111; SSE2: # %bb.0: # %entry 7112; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 7113; SSE2-NEXT: movdqa %xmm4, %xmm9 7114; SSE2-NEXT: pxor %xmm8, %xmm9 7115; SSE2-NEXT: movdqa %xmm0, %xmm10 7116; SSE2-NEXT: pxor %xmm8, %xmm10 7117; SSE2-NEXT: movdqa %xmm10, %xmm11 7118; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7119; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7120; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7121; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7122; SSE2-NEXT: pand %xmm12, %xmm9 7123; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7124; SSE2-NEXT: por %xmm9, %xmm10 7125; SSE2-NEXT: pand %xmm10, %xmm0 7126; SSE2-NEXT: pandn %xmm4, %xmm10 7127; SSE2-NEXT: por %xmm10, %xmm0 7128; SSE2-NEXT: movdqa %xmm5, %xmm9 7129; SSE2-NEXT: pxor %xmm8, %xmm9 7130; SSE2-NEXT: movdqa %xmm1, %xmm4 7131; SSE2-NEXT: pxor %xmm8, %xmm4 7132; SSE2-NEXT: movdqa %xmm4, %xmm10 7133; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7134; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7135; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7136; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7137; SSE2-NEXT: pand %xmm11, %xmm9 7138; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7139; SSE2-NEXT: por %xmm9, %xmm4 7140; SSE2-NEXT: pand %xmm4, %xmm1 7141; SSE2-NEXT: pandn %xmm5, %xmm4 7142; SSE2-NEXT: por %xmm4, %xmm1 7143; SSE2-NEXT: movdqa %xmm6, %xmm4 7144; SSE2-NEXT: pxor %xmm8, %xmm4 7145; SSE2-NEXT: movdqa %xmm2, %xmm5 7146; SSE2-NEXT: pxor %xmm8, %xmm5 7147; SSE2-NEXT: movdqa %xmm5, %xmm9 7148; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7149; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7150; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7151; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7152; SSE2-NEXT: pand %xmm10, %xmm4 7153; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7154; SSE2-NEXT: por %xmm4, %xmm5 7155; SSE2-NEXT: pand %xmm5, %xmm2 7156; SSE2-NEXT: pandn %xmm6, %xmm5 7157; SSE2-NEXT: por %xmm5, %xmm2 7158; SSE2-NEXT: movdqa %xmm7, %xmm4 7159; SSE2-NEXT: pxor %xmm8, %xmm4 7160; SSE2-NEXT: pxor %xmm3, %xmm8 7161; SSE2-NEXT: movdqa %xmm8, %xmm5 7162; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7163; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7164; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7165; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7166; SSE2-NEXT: pand %xmm6, %xmm4 7167; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7168; SSE2-NEXT: por %xmm4, %xmm5 7169; SSE2-NEXT: pand %xmm5, %xmm3 7170; SSE2-NEXT: pandn %xmm7, %xmm5 7171; SSE2-NEXT: por %xmm5, %xmm3 7172; SSE2-NEXT: retq 7173; 7174; SSE4-LABEL: test153: 7175; SSE4: # %bb.0: # %entry 7176; SSE4-NEXT: movdqa %xmm7, %xmm8 7177; SSE4-NEXT: movdqa %xmm0, %xmm7 7178; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7179; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm4 7180; SSE4-NEXT: movdqa %xmm1, %xmm0 7181; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 7182; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7183; SSE4-NEXT: movdqa %xmm2, %xmm0 7184; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 7185; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7186; SSE4-NEXT: movdqa %xmm3, %xmm0 7187; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 7188; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 7189; SSE4-NEXT: movapd %xmm4, %xmm0 7190; SSE4-NEXT: movapd %xmm5, %xmm1 7191; SSE4-NEXT: movapd %xmm6, %xmm2 7192; SSE4-NEXT: movapd %xmm8, %xmm3 7193; SSE4-NEXT: retq 7194; 7195; AVX1-LABEL: test153: 7196; AVX1: # %bb.0: # %entry 7197; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7198; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7199; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7200; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5 7201; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7202; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7203; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7204; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7205; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7206; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4 7207; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7208; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7209; AVX1-NEXT: retq 7210; 7211; AVX2-LABEL: test153: 7212; AVX2: # %bb.0: # %entry 7213; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4 7214; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7215; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2 7216; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7217; AVX2-NEXT: retq 7218; 7219; AVX512-LABEL: test153: 7220; AVX512: # %bb.0: # %entry 7221; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 7222; AVX512-NEXT: retq 7223entry: 7224 %cmp = icmp slt <8 x i64> %a, %b 7225 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7226 ret <8 x i64> %sel 7227} 7228 7229define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) { 7230; SSE2-LABEL: test154: 7231; SSE2: # %bb.0: # %entry 7232; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 7233; SSE2-NEXT: movdqa %xmm4, %xmm9 7234; SSE2-NEXT: pxor %xmm8, %xmm9 7235; SSE2-NEXT: movdqa %xmm0, %xmm10 7236; SSE2-NEXT: pxor %xmm8, %xmm10 7237; SSE2-NEXT: movdqa %xmm10, %xmm11 7238; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7239; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7240; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7241; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7242; SSE2-NEXT: pand %xmm12, %xmm9 7243; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7244; SSE2-NEXT: por %xmm9, %xmm10 7245; SSE2-NEXT: pand %xmm10, %xmm0 7246; SSE2-NEXT: pandn %xmm4, %xmm10 7247; SSE2-NEXT: por %xmm10, %xmm0 7248; SSE2-NEXT: movdqa %xmm5, %xmm9 7249; SSE2-NEXT: pxor %xmm8, %xmm9 7250; SSE2-NEXT: movdqa %xmm1, %xmm4 7251; SSE2-NEXT: pxor %xmm8, %xmm4 7252; SSE2-NEXT: movdqa %xmm4, %xmm10 7253; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7254; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7255; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7256; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7257; SSE2-NEXT: pand %xmm11, %xmm9 7258; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7259; SSE2-NEXT: por %xmm9, %xmm4 7260; SSE2-NEXT: pand %xmm4, %xmm1 7261; SSE2-NEXT: pandn %xmm5, %xmm4 7262; SSE2-NEXT: por %xmm4, %xmm1 7263; SSE2-NEXT: movdqa %xmm6, %xmm4 7264; SSE2-NEXT: pxor %xmm8, %xmm4 7265; SSE2-NEXT: movdqa %xmm2, %xmm5 7266; SSE2-NEXT: pxor %xmm8, %xmm5 7267; SSE2-NEXT: movdqa %xmm5, %xmm9 7268; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7269; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7270; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7271; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7272; SSE2-NEXT: pand %xmm10, %xmm4 7273; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7274; SSE2-NEXT: por %xmm4, %xmm5 7275; SSE2-NEXT: pand %xmm5, %xmm2 7276; SSE2-NEXT: pandn %xmm6, %xmm5 7277; SSE2-NEXT: por %xmm5, %xmm2 7278; SSE2-NEXT: movdqa %xmm7, %xmm4 7279; SSE2-NEXT: pxor %xmm8, %xmm4 7280; SSE2-NEXT: pxor %xmm3, %xmm8 7281; SSE2-NEXT: movdqa %xmm8, %xmm5 7282; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7283; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7284; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7285; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7286; SSE2-NEXT: pand %xmm6, %xmm4 7287; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7288; SSE2-NEXT: por %xmm4, %xmm5 7289; SSE2-NEXT: pand %xmm5, %xmm3 7290; SSE2-NEXT: pandn %xmm7, %xmm5 7291; SSE2-NEXT: por %xmm5, %xmm3 7292; SSE2-NEXT: retq 7293; 7294; SSE4-LABEL: test154: 7295; SSE4: # %bb.0: # %entry 7296; SSE4-NEXT: movdqa %xmm7, %xmm8 7297; SSE4-NEXT: movdqa %xmm0, %xmm7 7298; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7299; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm4 7300; SSE4-NEXT: movdqa %xmm1, %xmm0 7301; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 7302; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7303; SSE4-NEXT: movdqa %xmm2, %xmm0 7304; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 7305; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7306; SSE4-NEXT: movdqa %xmm3, %xmm0 7307; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 7308; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 7309; SSE4-NEXT: movapd %xmm4, %xmm0 7310; SSE4-NEXT: movapd %xmm5, %xmm1 7311; SSE4-NEXT: movapd %xmm6, %xmm2 7312; SSE4-NEXT: movapd %xmm8, %xmm3 7313; SSE4-NEXT: retq 7314; 7315; AVX1-LABEL: test154: 7316; AVX1: # %bb.0: # %entry 7317; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7318; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7319; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7320; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5 7321; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7322; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7323; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7324; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7325; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7326; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4 7327; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7328; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7329; AVX1-NEXT: retq 7330; 7331; AVX2-LABEL: test154: 7332; AVX2: # %bb.0: # %entry 7333; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4 7334; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7335; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2 7336; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7337; AVX2-NEXT: retq 7338; 7339; AVX512-LABEL: test154: 7340; AVX512: # %bb.0: # %entry 7341; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 7342; AVX512-NEXT: retq 7343entry: 7344 %cmp = icmp sle <8 x i64> %a, %b 7345 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7346 ret <8 x i64> %sel 7347} 7348 7349define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) { 7350; SSE2-LABEL: test155: 7351; SSE2: # %bb.0: # %entry 7352; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648] 7353; SSE2-NEXT: movdqa %xmm0, %xmm9 7354; SSE2-NEXT: pxor %xmm8, %xmm9 7355; SSE2-NEXT: movdqa %xmm4, %xmm10 7356; SSE2-NEXT: pxor %xmm8, %xmm10 7357; SSE2-NEXT: movdqa %xmm10, %xmm11 7358; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7359; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7360; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7361; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7362; SSE2-NEXT: pand %xmm12, %xmm9 7363; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7364; SSE2-NEXT: por %xmm9, %xmm10 7365; SSE2-NEXT: pand %xmm10, %xmm0 7366; SSE2-NEXT: pandn %xmm4, %xmm10 7367; SSE2-NEXT: por %xmm10, %xmm0 7368; SSE2-NEXT: movdqa %xmm1, %xmm9 7369; SSE2-NEXT: pxor %xmm8, %xmm9 7370; SSE2-NEXT: movdqa %xmm5, %xmm4 7371; SSE2-NEXT: pxor %xmm8, %xmm4 7372; SSE2-NEXT: movdqa %xmm4, %xmm10 7373; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7374; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7375; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7376; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7377; SSE2-NEXT: pand %xmm11, %xmm9 7378; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7379; SSE2-NEXT: por %xmm9, %xmm4 7380; SSE2-NEXT: pand %xmm4, %xmm1 7381; SSE2-NEXT: pandn %xmm5, %xmm4 7382; SSE2-NEXT: por %xmm4, %xmm1 7383; SSE2-NEXT: movdqa %xmm2, %xmm4 7384; SSE2-NEXT: pxor %xmm8, %xmm4 7385; SSE2-NEXT: movdqa %xmm6, %xmm5 7386; SSE2-NEXT: pxor %xmm8, %xmm5 7387; SSE2-NEXT: movdqa %xmm5, %xmm9 7388; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7389; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7390; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7391; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7392; SSE2-NEXT: pand %xmm10, %xmm4 7393; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7394; SSE2-NEXT: por %xmm4, %xmm5 7395; SSE2-NEXT: pand %xmm5, %xmm2 7396; SSE2-NEXT: pandn %xmm6, %xmm5 7397; SSE2-NEXT: por %xmm5, %xmm2 7398; SSE2-NEXT: movdqa %xmm3, %xmm4 7399; SSE2-NEXT: pxor %xmm8, %xmm4 7400; SSE2-NEXT: pxor %xmm7, %xmm8 7401; SSE2-NEXT: movdqa %xmm8, %xmm5 7402; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7403; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7404; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7405; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7406; SSE2-NEXT: pand %xmm6, %xmm4 7407; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7408; SSE2-NEXT: por %xmm4, %xmm5 7409; SSE2-NEXT: pand %xmm5, %xmm3 7410; SSE2-NEXT: pandn %xmm7, %xmm5 7411; SSE2-NEXT: por %xmm5, %xmm3 7412; SSE2-NEXT: retq 7413; 7414; SSE4-LABEL: test155: 7415; SSE4: # %bb.0: # %entry 7416; SSE4-NEXT: movdqa %xmm7, %xmm8 7417; SSE4-NEXT: movdqa %xmm0, %xmm7 7418; SSE4-NEXT: movdqa %xmm4, %xmm0 7419; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 7420; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm4 7421; SSE4-NEXT: movdqa %xmm5, %xmm0 7422; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7423; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7424; SSE4-NEXT: movdqa %xmm6, %xmm0 7425; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 7426; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7427; SSE4-NEXT: movdqa %xmm8, %xmm0 7428; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 7429; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 7430; SSE4-NEXT: movapd %xmm4, %xmm0 7431; SSE4-NEXT: movapd %xmm5, %xmm1 7432; SSE4-NEXT: movapd %xmm6, %xmm2 7433; SSE4-NEXT: movapd %xmm8, %xmm3 7434; SSE4-NEXT: retq 7435; 7436; AVX1-LABEL: test155: 7437; AVX1: # %bb.0: # %entry 7438; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 7439; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 7440; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7441; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm5 7442; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7443; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7444; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 7445; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7446; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7447; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm4 7448; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7449; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7450; AVX1-NEXT: retq 7451; 7452; AVX2-LABEL: test155: 7453; AVX2: # %bb.0: # %entry 7454; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm4 7455; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7456; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm2 7457; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7458; AVX2-NEXT: retq 7459; 7460; AVX512-LABEL: test155: 7461; AVX512: # %bb.0: # %entry 7462; AVX512-NEXT: vpminsq %zmm1, %zmm0, %zmm0 7463; AVX512-NEXT: retq 7464entry: 7465 %cmp = icmp sgt <8 x i64> %a, %b 7466 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7467 ret <8 x i64> %sel 7468} 7469 7470define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) { 7471; SSE2-LABEL: test156: 7472; SSE2: # %bb.0: # %entry 7473; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 7474; SSE2-NEXT: movdqa %xmm4, %xmm9 7475; SSE2-NEXT: pxor %xmm8, %xmm9 7476; SSE2-NEXT: movdqa %xmm0, %xmm10 7477; SSE2-NEXT: pxor %xmm8, %xmm10 7478; SSE2-NEXT: movdqa %xmm10, %xmm11 7479; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7480; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7481; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7482; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7483; SSE2-NEXT: pand %xmm12, %xmm9 7484; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7485; SSE2-NEXT: por %xmm9, %xmm10 7486; SSE2-NEXT: pand %xmm10, %xmm0 7487; SSE2-NEXT: pandn %xmm4, %xmm10 7488; SSE2-NEXT: por %xmm10, %xmm0 7489; SSE2-NEXT: movdqa %xmm5, %xmm9 7490; SSE2-NEXT: pxor %xmm8, %xmm9 7491; SSE2-NEXT: movdqa %xmm1, %xmm4 7492; SSE2-NEXT: pxor %xmm8, %xmm4 7493; SSE2-NEXT: movdqa %xmm4, %xmm10 7494; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7495; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7496; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7497; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7498; SSE2-NEXT: pand %xmm11, %xmm9 7499; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7500; SSE2-NEXT: por %xmm9, %xmm4 7501; SSE2-NEXT: pand %xmm4, %xmm1 7502; SSE2-NEXT: pandn %xmm5, %xmm4 7503; SSE2-NEXT: por %xmm4, %xmm1 7504; SSE2-NEXT: movdqa %xmm6, %xmm4 7505; SSE2-NEXT: pxor %xmm8, %xmm4 7506; SSE2-NEXT: movdqa %xmm2, %xmm5 7507; SSE2-NEXT: pxor %xmm8, %xmm5 7508; SSE2-NEXT: movdqa %xmm5, %xmm9 7509; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7510; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7511; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7512; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7513; SSE2-NEXT: pand %xmm10, %xmm4 7514; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7515; SSE2-NEXT: por %xmm4, %xmm5 7516; SSE2-NEXT: pand %xmm5, %xmm2 7517; SSE2-NEXT: pandn %xmm6, %xmm5 7518; SSE2-NEXT: por %xmm5, %xmm2 7519; SSE2-NEXT: movdqa %xmm7, %xmm4 7520; SSE2-NEXT: pxor %xmm8, %xmm4 7521; SSE2-NEXT: pxor %xmm3, %xmm8 7522; SSE2-NEXT: movdqa %xmm8, %xmm5 7523; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7524; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7525; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7526; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7527; SSE2-NEXT: pand %xmm6, %xmm4 7528; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7529; SSE2-NEXT: por %xmm4, %xmm5 7530; SSE2-NEXT: pand %xmm5, %xmm3 7531; SSE2-NEXT: pandn %xmm7, %xmm5 7532; SSE2-NEXT: por %xmm5, %xmm3 7533; SSE2-NEXT: retq 7534; 7535; SSE4-LABEL: test156: 7536; SSE4: # %bb.0: # %entry 7537; SSE4-NEXT: movdqa %xmm7, %xmm8 7538; SSE4-NEXT: movdqa %xmm6, %xmm9 7539; SSE4-NEXT: movdqa %xmm5, %xmm10 7540; SSE4-NEXT: movdqa %xmm4, %xmm5 7541; SSE4-NEXT: movdqa %xmm0, %xmm6 7542; SSE4-NEXT: movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808] 7543; SSE4-NEXT: pxor %xmm7, %xmm4 7544; SSE4-NEXT: pxor %xmm7, %xmm0 7545; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7546; SSE4-NEXT: blendvpd %xmm0, %xmm6, %xmm5 7547; SSE4-NEXT: movdqa %xmm10, %xmm4 7548; SSE4-NEXT: pxor %xmm7, %xmm4 7549; SSE4-NEXT: movdqa %xmm1, %xmm0 7550; SSE4-NEXT: pxor %xmm7, %xmm0 7551; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7552; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm10 7553; SSE4-NEXT: movdqa %xmm9, %xmm1 7554; SSE4-NEXT: pxor %xmm7, %xmm1 7555; SSE4-NEXT: movdqa %xmm2, %xmm0 7556; SSE4-NEXT: pxor %xmm7, %xmm0 7557; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7558; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm9 7559; SSE4-NEXT: movdqa %xmm8, %xmm0 7560; SSE4-NEXT: pxor %xmm7, %xmm0 7561; SSE4-NEXT: pxor %xmm3, %xmm7 7562; SSE4-NEXT: pcmpgtq %xmm0, %xmm7 7563; SSE4-NEXT: movdqa %xmm7, %xmm0 7564; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 7565; SSE4-NEXT: movapd %xmm5, %xmm0 7566; SSE4-NEXT: movapd %xmm10, %xmm1 7567; SSE4-NEXT: movapd %xmm9, %xmm2 7568; SSE4-NEXT: movapd %xmm8, %xmm3 7569; SSE4-NEXT: retq 7570; 7571; AVX1-LABEL: test156: 7572; AVX1: # %bb.0: # %entry 7573; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7574; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 7575; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7576; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 7577; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7578; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 7579; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm6 7580; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7 7581; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 7582; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 7583; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7584; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7585; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 7586; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7587; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7588; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7589; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm4 7590; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5 7591; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7592; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7593; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7594; AVX1-NEXT: retq 7595; 7596; AVX2-LABEL: test156: 7597; AVX2: # %bb.0: # %entry 7598; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 7599; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm5 7600; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 7601; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 7602; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 7603; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm2 7604; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm4 7605; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 7606; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7607; AVX2-NEXT: retq 7608; 7609; AVX512-LABEL: test156: 7610; AVX512: # %bb.0: # %entry 7611; AVX512-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 7612; AVX512-NEXT: retq 7613entry: 7614 %cmp = icmp ule <8 x i64> %a, %b 7615 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7616 ret <8 x i64> %sel 7617} 7618 7619define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) { 7620; SSE2-LABEL: test159: 7621; SSE2: # %bb.0: # %entry 7622; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 7623; SSE2-NEXT: movdqa %xmm0, %xmm9 7624; SSE2-NEXT: pxor %xmm8, %xmm9 7625; SSE2-NEXT: movdqa %xmm4, %xmm10 7626; SSE2-NEXT: pxor %xmm8, %xmm10 7627; SSE2-NEXT: movdqa %xmm10, %xmm11 7628; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7629; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7630; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7631; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7632; SSE2-NEXT: pand %xmm12, %xmm9 7633; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7634; SSE2-NEXT: por %xmm9, %xmm10 7635; SSE2-NEXT: pand %xmm10, %xmm0 7636; SSE2-NEXT: pandn %xmm4, %xmm10 7637; SSE2-NEXT: por %xmm10, %xmm0 7638; SSE2-NEXT: movdqa %xmm1, %xmm9 7639; SSE2-NEXT: pxor %xmm8, %xmm9 7640; SSE2-NEXT: movdqa %xmm5, %xmm4 7641; SSE2-NEXT: pxor %xmm8, %xmm4 7642; SSE2-NEXT: movdqa %xmm4, %xmm10 7643; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7644; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7645; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7646; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7647; SSE2-NEXT: pand %xmm11, %xmm9 7648; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7649; SSE2-NEXT: por %xmm9, %xmm4 7650; SSE2-NEXT: pand %xmm4, %xmm1 7651; SSE2-NEXT: pandn %xmm5, %xmm4 7652; SSE2-NEXT: por %xmm4, %xmm1 7653; SSE2-NEXT: movdqa %xmm2, %xmm4 7654; SSE2-NEXT: pxor %xmm8, %xmm4 7655; SSE2-NEXT: movdqa %xmm6, %xmm5 7656; SSE2-NEXT: pxor %xmm8, %xmm5 7657; SSE2-NEXT: movdqa %xmm5, %xmm9 7658; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7659; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7660; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7661; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7662; SSE2-NEXT: pand %xmm10, %xmm4 7663; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7664; SSE2-NEXT: por %xmm4, %xmm5 7665; SSE2-NEXT: pand %xmm5, %xmm2 7666; SSE2-NEXT: pandn %xmm6, %xmm5 7667; SSE2-NEXT: por %xmm5, %xmm2 7668; SSE2-NEXT: movdqa %xmm3, %xmm4 7669; SSE2-NEXT: pxor %xmm8, %xmm4 7670; SSE2-NEXT: pxor %xmm7, %xmm8 7671; SSE2-NEXT: movdqa %xmm8, %xmm5 7672; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7673; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7674; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7675; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7676; SSE2-NEXT: pand %xmm6, %xmm4 7677; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7678; SSE2-NEXT: por %xmm4, %xmm5 7679; SSE2-NEXT: pand %xmm5, %xmm3 7680; SSE2-NEXT: pandn %xmm7, %xmm5 7681; SSE2-NEXT: por %xmm5, %xmm3 7682; SSE2-NEXT: retq 7683; 7684; SSE4-LABEL: test159: 7685; SSE4: # %bb.0: # %entry 7686; SSE4-NEXT: movdqa %xmm7, %xmm8 7687; SSE4-NEXT: movdqa %xmm6, %xmm9 7688; SSE4-NEXT: movdqa %xmm5, %xmm10 7689; SSE4-NEXT: movdqa %xmm0, %xmm5 7690; SSE4-NEXT: movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808] 7691; SSE4-NEXT: movdqa %xmm0, %xmm6 7692; SSE4-NEXT: pxor %xmm7, %xmm6 7693; SSE4-NEXT: movdqa %xmm4, %xmm0 7694; SSE4-NEXT: pxor %xmm7, %xmm0 7695; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 7696; SSE4-NEXT: blendvpd %xmm0, %xmm5, %xmm4 7697; SSE4-NEXT: movdqa %xmm1, %xmm5 7698; SSE4-NEXT: pxor %xmm7, %xmm5 7699; SSE4-NEXT: movdqa %xmm10, %xmm0 7700; SSE4-NEXT: pxor %xmm7, %xmm0 7701; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 7702; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm10 7703; SSE4-NEXT: movdqa %xmm2, %xmm1 7704; SSE4-NEXT: pxor %xmm7, %xmm1 7705; SSE4-NEXT: movdqa %xmm9, %xmm0 7706; SSE4-NEXT: pxor %xmm7, %xmm0 7707; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7708; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm9 7709; SSE4-NEXT: movdqa %xmm3, %xmm0 7710; SSE4-NEXT: pxor %xmm7, %xmm0 7711; SSE4-NEXT: pxor %xmm8, %xmm7 7712; SSE4-NEXT: pcmpgtq %xmm0, %xmm7 7713; SSE4-NEXT: movdqa %xmm7, %xmm0 7714; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 7715; SSE4-NEXT: movapd %xmm4, %xmm0 7716; SSE4-NEXT: movapd %xmm10, %xmm1 7717; SSE4-NEXT: movapd %xmm9, %xmm2 7718; SSE4-NEXT: movapd %xmm8, %xmm3 7719; SSE4-NEXT: retq 7720; 7721; AVX1-LABEL: test159: 7722; AVX1: # %bb.0: # %entry 7723; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 7724; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 7725; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7726; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 7727; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7728; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 7729; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6 7730; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7 7731; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 7732; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 7733; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7734; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 7735; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 7736; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7737; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7738; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7739; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4 7740; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5 7741; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7742; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7743; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7744; AVX1-NEXT: retq 7745; 7746; AVX2-LABEL: test159: 7747; AVX2: # %bb.0: # %entry 7748; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 7749; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5 7750; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 7751; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 7752; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 7753; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2 7754; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4 7755; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 7756; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7757; AVX2-NEXT: retq 7758; 7759; AVX512-LABEL: test159: 7760; AVX512: # %bb.0: # %entry 7761; AVX512-NEXT: vpminuq %zmm1, %zmm0, %zmm0 7762; AVX512-NEXT: retq 7763entry: 7764 %cmp = icmp ugt <8 x i64> %a, %b 7765 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7766 ret <8 x i64> %sel 7767} 7768 7769define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) { 7770; SSE2-LABEL: test160: 7771; SSE2: # %bb.0: # %entry 7772; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456] 7773; SSE2-NEXT: movdqa %xmm0, %xmm9 7774; SSE2-NEXT: pxor %xmm8, %xmm9 7775; SSE2-NEXT: movdqa %xmm4, %xmm10 7776; SSE2-NEXT: pxor %xmm8, %xmm10 7777; SSE2-NEXT: movdqa %xmm10, %xmm11 7778; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7779; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7780; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7781; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7782; SSE2-NEXT: pand %xmm12, %xmm9 7783; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7784; SSE2-NEXT: por %xmm9, %xmm10 7785; SSE2-NEXT: pand %xmm10, %xmm0 7786; SSE2-NEXT: pandn %xmm4, %xmm10 7787; SSE2-NEXT: por %xmm10, %xmm0 7788; SSE2-NEXT: movdqa %xmm1, %xmm9 7789; SSE2-NEXT: pxor %xmm8, %xmm9 7790; SSE2-NEXT: movdqa %xmm5, %xmm4 7791; SSE2-NEXT: pxor %xmm8, %xmm4 7792; SSE2-NEXT: movdqa %xmm4, %xmm10 7793; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7794; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7795; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7796; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7797; SSE2-NEXT: pand %xmm11, %xmm9 7798; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7799; SSE2-NEXT: por %xmm9, %xmm4 7800; SSE2-NEXT: pand %xmm4, %xmm1 7801; SSE2-NEXT: pandn %xmm5, %xmm4 7802; SSE2-NEXT: por %xmm4, %xmm1 7803; SSE2-NEXT: movdqa %xmm2, %xmm4 7804; SSE2-NEXT: pxor %xmm8, %xmm4 7805; SSE2-NEXT: movdqa %xmm6, %xmm5 7806; SSE2-NEXT: pxor %xmm8, %xmm5 7807; SSE2-NEXT: movdqa %xmm5, %xmm9 7808; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7809; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7810; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7811; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7812; SSE2-NEXT: pand %xmm10, %xmm4 7813; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7814; SSE2-NEXT: por %xmm4, %xmm5 7815; SSE2-NEXT: pand %xmm5, %xmm2 7816; SSE2-NEXT: pandn %xmm6, %xmm5 7817; SSE2-NEXT: por %xmm5, %xmm2 7818; SSE2-NEXT: movdqa %xmm3, %xmm4 7819; SSE2-NEXT: pxor %xmm8, %xmm4 7820; SSE2-NEXT: pxor %xmm7, %xmm8 7821; SSE2-NEXT: movdqa %xmm8, %xmm5 7822; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7823; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7824; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7825; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7826; SSE2-NEXT: pand %xmm6, %xmm4 7827; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7828; SSE2-NEXT: por %xmm4, %xmm5 7829; SSE2-NEXT: pand %xmm5, %xmm3 7830; SSE2-NEXT: pandn %xmm7, %xmm5 7831; SSE2-NEXT: por %xmm5, %xmm3 7832; SSE2-NEXT: retq 7833; 7834; SSE4-LABEL: test160: 7835; SSE4: # %bb.0: # %entry 7836; SSE4-NEXT: movdqa %xmm7, %xmm8 7837; SSE4-NEXT: movdqa %xmm6, %xmm9 7838; SSE4-NEXT: movdqa %xmm5, %xmm10 7839; SSE4-NEXT: movdqa %xmm0, %xmm5 7840; SSE4-NEXT: movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808] 7841; SSE4-NEXT: movdqa %xmm0, %xmm6 7842; SSE4-NEXT: pxor %xmm7, %xmm6 7843; SSE4-NEXT: movdqa %xmm4, %xmm0 7844; SSE4-NEXT: pxor %xmm7, %xmm0 7845; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 7846; SSE4-NEXT: blendvpd %xmm0, %xmm5, %xmm4 7847; SSE4-NEXT: movdqa %xmm1, %xmm5 7848; SSE4-NEXT: pxor %xmm7, %xmm5 7849; SSE4-NEXT: movdqa %xmm10, %xmm0 7850; SSE4-NEXT: pxor %xmm7, %xmm0 7851; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 7852; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm10 7853; SSE4-NEXT: movdqa %xmm2, %xmm1 7854; SSE4-NEXT: pxor %xmm7, %xmm1 7855; SSE4-NEXT: movdqa %xmm9, %xmm0 7856; SSE4-NEXT: pxor %xmm7, %xmm0 7857; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7858; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm9 7859; SSE4-NEXT: movdqa %xmm3, %xmm0 7860; SSE4-NEXT: pxor %xmm7, %xmm0 7861; SSE4-NEXT: pxor %xmm8, %xmm7 7862; SSE4-NEXT: pcmpgtq %xmm0, %xmm7 7863; SSE4-NEXT: movdqa %xmm7, %xmm0 7864; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm8 7865; SSE4-NEXT: movapd %xmm4, %xmm0 7866; SSE4-NEXT: movapd %xmm10, %xmm1 7867; SSE4-NEXT: movapd %xmm9, %xmm2 7868; SSE4-NEXT: movapd %xmm8, %xmm3 7869; SSE4-NEXT: retq 7870; 7871; AVX1-LABEL: test160: 7872; AVX1: # %bb.0: # %entry 7873; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 7874; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 7875; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7876; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 7877; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7878; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 7879; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6 7880; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7 7881; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 7882; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 7883; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7884; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 7885; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 7886; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7887; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7888; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7889; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4 7890; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5 7891; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7892; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7893; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7894; AVX1-NEXT: retq 7895; 7896; AVX2-LABEL: test160: 7897; AVX2: # %bb.0: # %entry 7898; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 7899; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5 7900; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 7901; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 7902; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 7903; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2 7904; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4 7905; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 7906; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7907; AVX2-NEXT: retq 7908; 7909; AVX512-LABEL: test160: 7910; AVX512: # %bb.0: # %entry 7911; AVX512-NEXT: vpminuq %zmm1, %zmm0, %zmm0 7912; AVX512-NEXT: retq 7913entry: 7914 %cmp = icmp uge <8 x i64> %a, %b 7915 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7916 ret <8 x i64> %sel 7917} 7918 7919define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) { 7920; SSE2-LABEL: test161: 7921; SSE2: # %bb.0: # %entry 7922; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 7923; SSE2-NEXT: movdqa %xmm0, %xmm5 7924; SSE2-NEXT: pxor %xmm4, %xmm5 7925; SSE2-NEXT: movdqa %xmm2, %xmm6 7926; SSE2-NEXT: pxor %xmm4, %xmm6 7927; SSE2-NEXT: movdqa %xmm6, %xmm7 7928; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 7929; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 7930; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 7931; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 7932; SSE2-NEXT: pand %xmm8, %xmm5 7933; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 7934; SSE2-NEXT: por %xmm5, %xmm6 7935; SSE2-NEXT: pand %xmm6, %xmm0 7936; SSE2-NEXT: pandn %xmm2, %xmm6 7937; SSE2-NEXT: por %xmm6, %xmm0 7938; SSE2-NEXT: movdqa %xmm1, %xmm2 7939; SSE2-NEXT: pxor %xmm4, %xmm2 7940; SSE2-NEXT: pxor %xmm3, %xmm4 7941; SSE2-NEXT: movdqa %xmm4, %xmm5 7942; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 7943; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7944; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 7945; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 7946; SSE2-NEXT: pand %xmm6, %xmm2 7947; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7948; SSE2-NEXT: por %xmm2, %xmm4 7949; SSE2-NEXT: pand %xmm4, %xmm1 7950; SSE2-NEXT: pandn %xmm3, %xmm4 7951; SSE2-NEXT: por %xmm4, %xmm1 7952; SSE2-NEXT: retq 7953; 7954; SSE4-LABEL: test161: 7955; SSE4: # %bb.0: # %entry 7956; SSE4-NEXT: movdqa %xmm0, %xmm4 7957; SSE4-NEXT: movdqa %xmm2, %xmm0 7958; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7959; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 7960; SSE4-NEXT: movdqa %xmm3, %xmm0 7961; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7962; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 7963; SSE4-NEXT: movapd %xmm2, %xmm0 7964; SSE4-NEXT: movapd %xmm3, %xmm1 7965; SSE4-NEXT: retq 7966; 7967; AVX1-LABEL: test161: 7968; AVX1: # %bb.0: # %entry 7969; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 7970; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 7971; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 7972; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 7973; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 7974; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7975; AVX1-NEXT: retq 7976; 7977; AVX2-LABEL: test161: 7978; AVX2: # %bb.0: # %entry 7979; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 7980; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7981; AVX2-NEXT: retq 7982; 7983; AVX512F-LABEL: test161: 7984; AVX512F: # %bb.0: # %entry 7985; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 7986; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 7987; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 7988; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 7989; AVX512F-NEXT: retq 7990; 7991; AVX512BW-LABEL: test161: 7992; AVX512BW: # %bb.0: # %entry 7993; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 7994; AVX512BW-NEXT: retq 7995entry: 7996 %cmp = icmp slt <4 x i64> %a, %b 7997 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 7998 ret <4 x i64> %sel 7999} 8000 8001define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) { 8002; SSE2-LABEL: test162: 8003; SSE2: # %bb.0: # %entry 8004; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 8005; SSE2-NEXT: movdqa %xmm0, %xmm5 8006; SSE2-NEXT: pxor %xmm4, %xmm5 8007; SSE2-NEXT: movdqa %xmm2, %xmm6 8008; SSE2-NEXT: pxor %xmm4, %xmm6 8009; SSE2-NEXT: movdqa %xmm6, %xmm7 8010; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8011; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8012; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8013; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8014; SSE2-NEXT: pand %xmm8, %xmm5 8015; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8016; SSE2-NEXT: por %xmm5, %xmm6 8017; SSE2-NEXT: pand %xmm6, %xmm0 8018; SSE2-NEXT: pandn %xmm2, %xmm6 8019; SSE2-NEXT: por %xmm6, %xmm0 8020; SSE2-NEXT: movdqa %xmm1, %xmm2 8021; SSE2-NEXT: pxor %xmm4, %xmm2 8022; SSE2-NEXT: pxor %xmm3, %xmm4 8023; SSE2-NEXT: movdqa %xmm4, %xmm5 8024; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8025; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8026; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8027; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8028; SSE2-NEXT: pand %xmm6, %xmm2 8029; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8030; SSE2-NEXT: por %xmm2, %xmm4 8031; SSE2-NEXT: pand %xmm4, %xmm1 8032; SSE2-NEXT: pandn %xmm3, %xmm4 8033; SSE2-NEXT: por %xmm4, %xmm1 8034; SSE2-NEXT: retq 8035; 8036; SSE4-LABEL: test162: 8037; SSE4: # %bb.0: # %entry 8038; SSE4-NEXT: movdqa %xmm0, %xmm4 8039; SSE4-NEXT: movdqa %xmm2, %xmm0 8040; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 8041; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8042; SSE4-NEXT: movdqa %xmm3, %xmm0 8043; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 8044; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8045; SSE4-NEXT: movapd %xmm2, %xmm0 8046; SSE4-NEXT: movapd %xmm3, %xmm1 8047; SSE4-NEXT: retq 8048; 8049; AVX1-LABEL: test162: 8050; AVX1: # %bb.0: # %entry 8051; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8052; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 8053; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8054; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 8055; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8056; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8057; AVX1-NEXT: retq 8058; 8059; AVX2-LABEL: test162: 8060; AVX2: # %bb.0: # %entry 8061; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 8062; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8063; AVX2-NEXT: retq 8064; 8065; AVX512F-LABEL: test162: 8066; AVX512F: # %bb.0: # %entry 8067; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8068; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8069; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 8070; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8071; AVX512F-NEXT: retq 8072; 8073; AVX512BW-LABEL: test162: 8074; AVX512BW: # %bb.0: # %entry 8075; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 8076; AVX512BW-NEXT: retq 8077entry: 8078 %cmp = icmp sle <4 x i64> %a, %b 8079 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8080 ret <4 x i64> %sel 8081} 8082 8083define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) { 8084; SSE2-LABEL: test163: 8085; SSE2: # %bb.0: # %entry 8086; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 8087; SSE2-NEXT: movdqa %xmm2, %xmm5 8088; SSE2-NEXT: pxor %xmm4, %xmm5 8089; SSE2-NEXT: movdqa %xmm0, %xmm6 8090; SSE2-NEXT: pxor %xmm4, %xmm6 8091; SSE2-NEXT: movdqa %xmm6, %xmm7 8092; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8093; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8094; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8095; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8096; SSE2-NEXT: pand %xmm8, %xmm5 8097; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8098; SSE2-NEXT: por %xmm5, %xmm6 8099; SSE2-NEXT: pand %xmm6, %xmm0 8100; SSE2-NEXT: pandn %xmm2, %xmm6 8101; SSE2-NEXT: por %xmm6, %xmm0 8102; SSE2-NEXT: movdqa %xmm3, %xmm2 8103; SSE2-NEXT: pxor %xmm4, %xmm2 8104; SSE2-NEXT: pxor %xmm1, %xmm4 8105; SSE2-NEXT: movdqa %xmm4, %xmm5 8106; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8107; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8108; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8109; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8110; SSE2-NEXT: pand %xmm6, %xmm2 8111; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8112; SSE2-NEXT: por %xmm2, %xmm4 8113; SSE2-NEXT: pand %xmm4, %xmm1 8114; SSE2-NEXT: pandn %xmm3, %xmm4 8115; SSE2-NEXT: por %xmm4, %xmm1 8116; SSE2-NEXT: retq 8117; 8118; SSE4-LABEL: test163: 8119; SSE4: # %bb.0: # %entry 8120; SSE4-NEXT: movdqa %xmm0, %xmm4 8121; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8122; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8123; SSE4-NEXT: movdqa %xmm1, %xmm0 8124; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 8125; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8126; SSE4-NEXT: movapd %xmm2, %xmm0 8127; SSE4-NEXT: movapd %xmm3, %xmm1 8128; SSE4-NEXT: retq 8129; 8130; AVX1-LABEL: test163: 8131; AVX1: # %bb.0: # %entry 8132; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8133; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8134; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8135; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 8136; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8137; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8138; AVX1-NEXT: retq 8139; 8140; AVX2-LABEL: test163: 8141; AVX2: # %bb.0: # %entry 8142; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8143; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8144; AVX2-NEXT: retq 8145; 8146; AVX512F-LABEL: test163: 8147; AVX512F: # %bb.0: # %entry 8148; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8149; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8150; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 8151; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8152; AVX512F-NEXT: retq 8153; 8154; AVX512BW-LABEL: test163: 8155; AVX512BW: # %bb.0: # %entry 8156; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 8157; AVX512BW-NEXT: retq 8158entry: 8159 %cmp = icmp sgt <4 x i64> %a, %b 8160 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8161 ret <4 x i64> %sel 8162} 8163 8164define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) { 8165; SSE2-LABEL: test164: 8166; SSE2: # %bb.0: # %entry 8167; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 8168; SSE2-NEXT: movdqa %xmm2, %xmm5 8169; SSE2-NEXT: pxor %xmm4, %xmm5 8170; SSE2-NEXT: movdqa %xmm0, %xmm6 8171; SSE2-NEXT: pxor %xmm4, %xmm6 8172; SSE2-NEXT: movdqa %xmm6, %xmm7 8173; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8174; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8175; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8176; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8177; SSE2-NEXT: pand %xmm8, %xmm5 8178; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8179; SSE2-NEXT: por %xmm5, %xmm6 8180; SSE2-NEXT: pand %xmm6, %xmm0 8181; SSE2-NEXT: pandn %xmm2, %xmm6 8182; SSE2-NEXT: por %xmm6, %xmm0 8183; SSE2-NEXT: movdqa %xmm3, %xmm2 8184; SSE2-NEXT: pxor %xmm4, %xmm2 8185; SSE2-NEXT: pxor %xmm1, %xmm4 8186; SSE2-NEXT: movdqa %xmm4, %xmm5 8187; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8188; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8189; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8190; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8191; SSE2-NEXT: pand %xmm6, %xmm2 8192; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8193; SSE2-NEXT: por %xmm2, %xmm4 8194; SSE2-NEXT: pand %xmm4, %xmm1 8195; SSE2-NEXT: pandn %xmm3, %xmm4 8196; SSE2-NEXT: por %xmm4, %xmm1 8197; SSE2-NEXT: retq 8198; 8199; SSE4-LABEL: test164: 8200; SSE4: # %bb.0: # %entry 8201; SSE4-NEXT: movdqa %xmm0, %xmm4 8202; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8203; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8204; SSE4-NEXT: movdqa %xmm1, %xmm0 8205; SSE4-NEXT: pcmpgtq %xmm3, %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: test164: 8212; AVX1: # %bb.0: # %entry 8213; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8214; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8215; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8216; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 8217; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8218; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8219; AVX1-NEXT: retq 8220; 8221; AVX2-LABEL: test164: 8222; AVX2: # %bb.0: # %entry 8223; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8224; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8225; AVX2-NEXT: retq 8226; 8227; AVX512F-LABEL: test164: 8228; AVX512F: # %bb.0: # %entry 8229; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8230; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8231; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 8232; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8233; AVX512F-NEXT: retq 8234; 8235; AVX512BW-LABEL: test164: 8236; AVX512BW: # %bb.0: # %entry 8237; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 8238; AVX512BW-NEXT: retq 8239entry: 8240 %cmp = icmp sge <4 x i64> %a, %b 8241 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8242 ret <4 x i64> %sel 8243} 8244 8245define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) { 8246; SSE2-LABEL: test165: 8247; SSE2: # %bb.0: # %entry 8248; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 8249; SSE2-NEXT: movdqa %xmm0, %xmm5 8250; SSE2-NEXT: pxor %xmm4, %xmm5 8251; SSE2-NEXT: movdqa %xmm2, %xmm6 8252; SSE2-NEXT: pxor %xmm4, %xmm6 8253; SSE2-NEXT: movdqa %xmm6, %xmm7 8254; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8255; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8256; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8257; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8258; SSE2-NEXT: pand %xmm8, %xmm5 8259; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8260; SSE2-NEXT: por %xmm5, %xmm6 8261; SSE2-NEXT: pand %xmm6, %xmm0 8262; SSE2-NEXT: pandn %xmm2, %xmm6 8263; SSE2-NEXT: por %xmm6, %xmm0 8264; SSE2-NEXT: movdqa %xmm1, %xmm2 8265; SSE2-NEXT: pxor %xmm4, %xmm2 8266; SSE2-NEXT: pxor %xmm3, %xmm4 8267; SSE2-NEXT: movdqa %xmm4, %xmm5 8268; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8269; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8270; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8271; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8272; SSE2-NEXT: pand %xmm6, %xmm2 8273; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8274; SSE2-NEXT: por %xmm2, %xmm4 8275; SSE2-NEXT: pand %xmm4, %xmm1 8276; SSE2-NEXT: pandn %xmm3, %xmm4 8277; SSE2-NEXT: por %xmm4, %xmm1 8278; SSE2-NEXT: retq 8279; 8280; SSE4-LABEL: test165: 8281; SSE4: # %bb.0: # %entry 8282; SSE4-NEXT: movdqa %xmm0, %xmm4 8283; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8284; SSE4-NEXT: movdqa %xmm0, %xmm6 8285; SSE4-NEXT: pxor %xmm5, %xmm6 8286; SSE4-NEXT: movdqa %xmm2, %xmm0 8287; SSE4-NEXT: pxor %xmm5, %xmm0 8288; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8289; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8290; SSE4-NEXT: movdqa %xmm1, %xmm0 8291; SSE4-NEXT: pxor %xmm5, %xmm0 8292; SSE4-NEXT: pxor %xmm3, %xmm5 8293; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8294; SSE4-NEXT: movdqa %xmm5, %xmm0 8295; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8296; SSE4-NEXT: movapd %xmm2, %xmm0 8297; SSE4-NEXT: movapd %xmm3, %xmm1 8298; SSE4-NEXT: retq 8299; 8300; AVX1-LABEL: test165: 8301; AVX1: # %bb.0: # %entry 8302; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8303; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8304; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8305; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 8306; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8307; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8308; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4 8309; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3 8310; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8311; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8312; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8313; AVX1-NEXT: retq 8314; 8315; AVX2-LABEL: test165: 8316; AVX2: # %bb.0: # %entry 8317; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8318; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 8319; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 8320; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8321; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8322; AVX2-NEXT: retq 8323; 8324; AVX512F-LABEL: test165: 8325; AVX512F: # %bb.0: # %entry 8326; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8327; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8328; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 8329; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8330; AVX512F-NEXT: retq 8331; 8332; AVX512BW-LABEL: test165: 8333; AVX512BW: # %bb.0: # %entry 8334; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 8335; AVX512BW-NEXT: retq 8336entry: 8337 %cmp = icmp ult <4 x i64> %a, %b 8338 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8339 ret <4 x i64> %sel 8340} 8341 8342define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) { 8343; SSE2-LABEL: test166: 8344; SSE2: # %bb.0: # %entry 8345; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 8346; SSE2-NEXT: movdqa %xmm0, %xmm5 8347; SSE2-NEXT: pxor %xmm4, %xmm5 8348; SSE2-NEXT: movdqa %xmm2, %xmm6 8349; SSE2-NEXT: pxor %xmm4, %xmm6 8350; SSE2-NEXT: movdqa %xmm6, %xmm7 8351; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8352; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8353; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8354; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8355; SSE2-NEXT: pand %xmm8, %xmm5 8356; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8357; SSE2-NEXT: por %xmm5, %xmm6 8358; SSE2-NEXT: pand %xmm6, %xmm0 8359; SSE2-NEXT: pandn %xmm2, %xmm6 8360; SSE2-NEXT: por %xmm6, %xmm0 8361; SSE2-NEXT: movdqa %xmm1, %xmm2 8362; SSE2-NEXT: pxor %xmm4, %xmm2 8363; SSE2-NEXT: pxor %xmm3, %xmm4 8364; SSE2-NEXT: movdqa %xmm4, %xmm5 8365; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8366; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8367; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8368; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8369; SSE2-NEXT: pand %xmm6, %xmm2 8370; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8371; SSE2-NEXT: por %xmm2, %xmm4 8372; SSE2-NEXT: pand %xmm4, %xmm1 8373; SSE2-NEXT: pandn %xmm3, %xmm4 8374; SSE2-NEXT: por %xmm4, %xmm1 8375; SSE2-NEXT: retq 8376; 8377; SSE4-LABEL: test166: 8378; SSE4: # %bb.0: # %entry 8379; SSE4-NEXT: movdqa %xmm0, %xmm4 8380; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8381; SSE4-NEXT: movdqa %xmm0, %xmm6 8382; SSE4-NEXT: pxor %xmm5, %xmm6 8383; SSE4-NEXT: movdqa %xmm2, %xmm0 8384; SSE4-NEXT: pxor %xmm5, %xmm0 8385; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8386; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8387; SSE4-NEXT: movdqa %xmm1, %xmm0 8388; SSE4-NEXT: pxor %xmm5, %xmm0 8389; SSE4-NEXT: pxor %xmm3, %xmm5 8390; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8391; SSE4-NEXT: movdqa %xmm5, %xmm0 8392; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8393; SSE4-NEXT: movapd %xmm2, %xmm0 8394; SSE4-NEXT: movapd %xmm3, %xmm1 8395; SSE4-NEXT: retq 8396; 8397; AVX1-LABEL: test166: 8398; AVX1: # %bb.0: # %entry 8399; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8400; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8401; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8402; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 8403; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8404; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8405; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4 8406; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3 8407; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8408; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8409; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8410; AVX1-NEXT: retq 8411; 8412; AVX2-LABEL: test166: 8413; AVX2: # %bb.0: # %entry 8414; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8415; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 8416; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 8417; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8418; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8419; AVX2-NEXT: retq 8420; 8421; AVX512F-LABEL: test166: 8422; AVX512F: # %bb.0: # %entry 8423; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8424; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8425; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 8426; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8427; AVX512F-NEXT: retq 8428; 8429; AVX512BW-LABEL: test166: 8430; AVX512BW: # %bb.0: # %entry 8431; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 8432; AVX512BW-NEXT: retq 8433entry: 8434 %cmp = icmp ule <4 x i64> %a, %b 8435 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8436 ret <4 x i64> %sel 8437} 8438 8439define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) { 8440; SSE2-LABEL: test167: 8441; SSE2: # %bb.0: # %entry 8442; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 8443; SSE2-NEXT: movdqa %xmm2, %xmm5 8444; SSE2-NEXT: pxor %xmm4, %xmm5 8445; SSE2-NEXT: movdqa %xmm0, %xmm6 8446; SSE2-NEXT: pxor %xmm4, %xmm6 8447; SSE2-NEXT: movdqa %xmm6, %xmm7 8448; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8449; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8450; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8451; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8452; SSE2-NEXT: pand %xmm8, %xmm5 8453; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8454; SSE2-NEXT: por %xmm5, %xmm6 8455; SSE2-NEXT: pand %xmm6, %xmm0 8456; SSE2-NEXT: pandn %xmm2, %xmm6 8457; SSE2-NEXT: por %xmm6, %xmm0 8458; SSE2-NEXT: movdqa %xmm3, %xmm2 8459; SSE2-NEXT: pxor %xmm4, %xmm2 8460; SSE2-NEXT: pxor %xmm1, %xmm4 8461; SSE2-NEXT: movdqa %xmm4, %xmm5 8462; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8463; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8464; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8465; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8466; SSE2-NEXT: pand %xmm6, %xmm2 8467; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8468; SSE2-NEXT: por %xmm2, %xmm4 8469; SSE2-NEXT: pand %xmm4, %xmm1 8470; SSE2-NEXT: pandn %xmm3, %xmm4 8471; SSE2-NEXT: por %xmm4, %xmm1 8472; SSE2-NEXT: retq 8473; 8474; SSE4-LABEL: test167: 8475; SSE4: # %bb.0: # %entry 8476; SSE4-NEXT: movdqa %xmm0, %xmm4 8477; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8478; SSE4-NEXT: movdqa %xmm2, %xmm6 8479; SSE4-NEXT: pxor %xmm5, %xmm6 8480; SSE4-NEXT: pxor %xmm5, %xmm0 8481; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8482; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8483; SSE4-NEXT: movdqa %xmm3, %xmm0 8484; SSE4-NEXT: pxor %xmm5, %xmm0 8485; SSE4-NEXT: pxor %xmm1, %xmm5 8486; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8487; SSE4-NEXT: movdqa %xmm5, %xmm0 8488; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8489; SSE4-NEXT: movapd %xmm2, %xmm0 8490; SSE4-NEXT: movapd %xmm3, %xmm1 8491; SSE4-NEXT: retq 8492; 8493; AVX1-LABEL: test167: 8494; AVX1: # %bb.0: # %entry 8495; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8496; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8497; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8498; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 8499; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8500; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8501; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4 8502; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3 8503; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8504; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8505; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8506; AVX1-NEXT: retq 8507; 8508; AVX2-LABEL: test167: 8509; AVX2: # %bb.0: # %entry 8510; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8511; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 8512; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 8513; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8514; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8515; AVX2-NEXT: retq 8516; 8517; AVX512F-LABEL: test167: 8518; AVX512F: # %bb.0: # %entry 8519; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8520; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8521; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 8522; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8523; AVX512F-NEXT: retq 8524; 8525; AVX512BW-LABEL: test167: 8526; AVX512BW: # %bb.0: # %entry 8527; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 8528; AVX512BW-NEXT: retq 8529entry: 8530 %cmp = icmp ugt <4 x i64> %a, %b 8531 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8532 ret <4 x i64> %sel 8533} 8534 8535define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) { 8536; SSE2-LABEL: test168: 8537; SSE2: # %bb.0: # %entry 8538; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 8539; SSE2-NEXT: movdqa %xmm2, %xmm5 8540; SSE2-NEXT: pxor %xmm4, %xmm5 8541; SSE2-NEXT: movdqa %xmm0, %xmm6 8542; SSE2-NEXT: pxor %xmm4, %xmm6 8543; SSE2-NEXT: movdqa %xmm6, %xmm7 8544; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8545; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8546; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8547; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8548; SSE2-NEXT: pand %xmm8, %xmm5 8549; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8550; SSE2-NEXT: por %xmm5, %xmm6 8551; SSE2-NEXT: pand %xmm6, %xmm0 8552; SSE2-NEXT: pandn %xmm2, %xmm6 8553; SSE2-NEXT: por %xmm6, %xmm0 8554; SSE2-NEXT: movdqa %xmm3, %xmm2 8555; SSE2-NEXT: pxor %xmm4, %xmm2 8556; SSE2-NEXT: pxor %xmm1, %xmm4 8557; SSE2-NEXT: movdqa %xmm4, %xmm5 8558; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8559; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8560; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8561; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8562; SSE2-NEXT: pand %xmm6, %xmm2 8563; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8564; SSE2-NEXT: por %xmm2, %xmm4 8565; SSE2-NEXT: pand %xmm4, %xmm1 8566; SSE2-NEXT: pandn %xmm3, %xmm4 8567; SSE2-NEXT: por %xmm4, %xmm1 8568; SSE2-NEXT: retq 8569; 8570; SSE4-LABEL: test168: 8571; SSE4: # %bb.0: # %entry 8572; SSE4-NEXT: movdqa %xmm0, %xmm4 8573; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8574; SSE4-NEXT: movdqa %xmm2, %xmm6 8575; SSE4-NEXT: pxor %xmm5, %xmm6 8576; SSE4-NEXT: pxor %xmm5, %xmm0 8577; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8578; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8579; SSE4-NEXT: movdqa %xmm3, %xmm0 8580; SSE4-NEXT: pxor %xmm5, %xmm0 8581; SSE4-NEXT: pxor %xmm1, %xmm5 8582; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8583; SSE4-NEXT: movdqa %xmm5, %xmm0 8584; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8585; SSE4-NEXT: movapd %xmm2, %xmm0 8586; SSE4-NEXT: movapd %xmm3, %xmm1 8587; SSE4-NEXT: retq 8588; 8589; AVX1-LABEL: test168: 8590; AVX1: # %bb.0: # %entry 8591; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8592; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8593; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8594; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 8595; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8596; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8597; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4 8598; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3 8599; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8600; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8601; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8602; AVX1-NEXT: retq 8603; 8604; AVX2-LABEL: test168: 8605; AVX2: # %bb.0: # %entry 8606; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8607; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 8608; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 8609; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8610; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8611; AVX2-NEXT: retq 8612; 8613; AVX512F-LABEL: test168: 8614; AVX512F: # %bb.0: # %entry 8615; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8616; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8617; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 8618; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8619; AVX512F-NEXT: retq 8620; 8621; AVX512BW-LABEL: test168: 8622; AVX512BW: # %bb.0: # %entry 8623; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 8624; AVX512BW-NEXT: retq 8625entry: 8626 %cmp = icmp uge <4 x i64> %a, %b 8627 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8628 ret <4 x i64> %sel 8629} 8630 8631define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) { 8632; SSE2-LABEL: test169: 8633; SSE2: # %bb.0: # %entry 8634; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 8635; SSE2-NEXT: movdqa %xmm2, %xmm5 8636; SSE2-NEXT: pxor %xmm4, %xmm5 8637; SSE2-NEXT: movdqa %xmm0, %xmm6 8638; SSE2-NEXT: pxor %xmm4, %xmm6 8639; SSE2-NEXT: movdqa %xmm6, %xmm7 8640; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8641; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8642; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8643; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8644; SSE2-NEXT: pand %xmm8, %xmm5 8645; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8646; SSE2-NEXT: por %xmm5, %xmm6 8647; SSE2-NEXT: pand %xmm6, %xmm0 8648; SSE2-NEXT: pandn %xmm2, %xmm6 8649; SSE2-NEXT: por %xmm6, %xmm0 8650; SSE2-NEXT: movdqa %xmm3, %xmm2 8651; SSE2-NEXT: pxor %xmm4, %xmm2 8652; SSE2-NEXT: pxor %xmm1, %xmm4 8653; SSE2-NEXT: movdqa %xmm4, %xmm5 8654; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8655; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8656; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8657; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8658; SSE2-NEXT: pand %xmm6, %xmm2 8659; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8660; SSE2-NEXT: por %xmm2, %xmm4 8661; SSE2-NEXT: pand %xmm4, %xmm1 8662; SSE2-NEXT: pandn %xmm3, %xmm4 8663; SSE2-NEXT: por %xmm4, %xmm1 8664; SSE2-NEXT: retq 8665; 8666; SSE4-LABEL: test169: 8667; SSE4: # %bb.0: # %entry 8668; SSE4-NEXT: movdqa %xmm0, %xmm4 8669; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8670; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8671; SSE4-NEXT: movdqa %xmm1, %xmm0 8672; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 8673; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8674; SSE4-NEXT: movapd %xmm2, %xmm0 8675; SSE4-NEXT: movapd %xmm3, %xmm1 8676; SSE4-NEXT: retq 8677; 8678; AVX1-LABEL: test169: 8679; AVX1: # %bb.0: # %entry 8680; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8681; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8682; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8683; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 8684; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8685; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8686; AVX1-NEXT: retq 8687; 8688; AVX2-LABEL: test169: 8689; AVX2: # %bb.0: # %entry 8690; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8691; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8692; AVX2-NEXT: retq 8693; 8694; AVX512F-LABEL: test169: 8695; AVX512F: # %bb.0: # %entry 8696; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8697; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8698; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 8699; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8700; AVX512F-NEXT: retq 8701; 8702; AVX512BW-LABEL: test169: 8703; AVX512BW: # %bb.0: # %entry 8704; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 8705; AVX512BW-NEXT: retq 8706entry: 8707 %cmp = icmp slt <4 x i64> %a, %b 8708 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8709 ret <4 x i64> %sel 8710} 8711 8712define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) { 8713; SSE2-LABEL: test170: 8714; SSE2: # %bb.0: # %entry 8715; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 8716; SSE2-NEXT: movdqa %xmm2, %xmm5 8717; SSE2-NEXT: pxor %xmm4, %xmm5 8718; SSE2-NEXT: movdqa %xmm0, %xmm6 8719; SSE2-NEXT: pxor %xmm4, %xmm6 8720; SSE2-NEXT: movdqa %xmm6, %xmm7 8721; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8722; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8723; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8724; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8725; SSE2-NEXT: pand %xmm8, %xmm5 8726; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8727; SSE2-NEXT: por %xmm5, %xmm6 8728; SSE2-NEXT: pand %xmm6, %xmm0 8729; SSE2-NEXT: pandn %xmm2, %xmm6 8730; SSE2-NEXT: por %xmm6, %xmm0 8731; SSE2-NEXT: movdqa %xmm3, %xmm2 8732; SSE2-NEXT: pxor %xmm4, %xmm2 8733; SSE2-NEXT: pxor %xmm1, %xmm4 8734; SSE2-NEXT: movdqa %xmm4, %xmm5 8735; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8736; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8737; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8738; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8739; SSE2-NEXT: pand %xmm6, %xmm2 8740; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8741; SSE2-NEXT: por %xmm2, %xmm4 8742; SSE2-NEXT: pand %xmm4, %xmm1 8743; SSE2-NEXT: pandn %xmm3, %xmm4 8744; SSE2-NEXT: por %xmm4, %xmm1 8745; SSE2-NEXT: retq 8746; 8747; SSE4-LABEL: test170: 8748; SSE4: # %bb.0: # %entry 8749; SSE4-NEXT: movdqa %xmm0, %xmm4 8750; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8751; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8752; SSE4-NEXT: movdqa %xmm1, %xmm0 8753; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 8754; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8755; SSE4-NEXT: movapd %xmm2, %xmm0 8756; SSE4-NEXT: movapd %xmm3, %xmm1 8757; SSE4-NEXT: retq 8758; 8759; AVX1-LABEL: test170: 8760; AVX1: # %bb.0: # %entry 8761; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8762; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8763; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8764; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 8765; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8766; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8767; AVX1-NEXT: retq 8768; 8769; AVX2-LABEL: test170: 8770; AVX2: # %bb.0: # %entry 8771; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8772; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8773; AVX2-NEXT: retq 8774; 8775; AVX512F-LABEL: test170: 8776; AVX512F: # %bb.0: # %entry 8777; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8778; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8779; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 8780; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8781; AVX512F-NEXT: retq 8782; 8783; AVX512BW-LABEL: test170: 8784; AVX512BW: # %bb.0: # %entry 8785; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 8786; AVX512BW-NEXT: retq 8787entry: 8788 %cmp = icmp sle <4 x i64> %a, %b 8789 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8790 ret <4 x i64> %sel 8791} 8792 8793define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) { 8794; SSE2-LABEL: test171: 8795; SSE2: # %bb.0: # %entry 8796; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 8797; SSE2-NEXT: movdqa %xmm0, %xmm5 8798; SSE2-NEXT: pxor %xmm4, %xmm5 8799; SSE2-NEXT: movdqa %xmm2, %xmm6 8800; SSE2-NEXT: pxor %xmm4, %xmm6 8801; SSE2-NEXT: movdqa %xmm6, %xmm7 8802; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8803; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8804; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8805; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8806; SSE2-NEXT: pand %xmm8, %xmm5 8807; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8808; SSE2-NEXT: por %xmm5, %xmm6 8809; SSE2-NEXT: pand %xmm6, %xmm0 8810; SSE2-NEXT: pandn %xmm2, %xmm6 8811; SSE2-NEXT: por %xmm6, %xmm0 8812; SSE2-NEXT: movdqa %xmm1, %xmm2 8813; SSE2-NEXT: pxor %xmm4, %xmm2 8814; SSE2-NEXT: pxor %xmm3, %xmm4 8815; SSE2-NEXT: movdqa %xmm4, %xmm5 8816; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8817; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8818; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8819; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8820; SSE2-NEXT: pand %xmm6, %xmm2 8821; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8822; SSE2-NEXT: por %xmm2, %xmm4 8823; SSE2-NEXT: pand %xmm4, %xmm1 8824; SSE2-NEXT: pandn %xmm3, %xmm4 8825; SSE2-NEXT: por %xmm4, %xmm1 8826; SSE2-NEXT: retq 8827; 8828; SSE4-LABEL: test171: 8829; SSE4: # %bb.0: # %entry 8830; SSE4-NEXT: movdqa %xmm0, %xmm4 8831; SSE4-NEXT: movdqa %xmm2, %xmm0 8832; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 8833; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8834; SSE4-NEXT: movdqa %xmm3, %xmm0 8835; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 8836; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8837; SSE4-NEXT: movapd %xmm2, %xmm0 8838; SSE4-NEXT: movapd %xmm3, %xmm1 8839; SSE4-NEXT: retq 8840; 8841; AVX1-LABEL: test171: 8842; AVX1: # %bb.0: # %entry 8843; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8844; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 8845; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8846; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 8847; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8848; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8849; AVX1-NEXT: retq 8850; 8851; AVX2-LABEL: test171: 8852; AVX2: # %bb.0: # %entry 8853; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 8854; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8855; AVX2-NEXT: retq 8856; 8857; AVX512F-LABEL: test171: 8858; AVX512F: # %bb.0: # %entry 8859; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8860; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8861; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 8862; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8863; AVX512F-NEXT: retq 8864; 8865; AVX512BW-LABEL: test171: 8866; AVX512BW: # %bb.0: # %entry 8867; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 8868; AVX512BW-NEXT: retq 8869entry: 8870 %cmp = icmp sgt <4 x i64> %a, %b 8871 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8872 ret <4 x i64> %sel 8873} 8874 8875define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) { 8876; SSE2-LABEL: test172: 8877; SSE2: # %bb.0: # %entry 8878; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648] 8879; SSE2-NEXT: movdqa %xmm0, %xmm5 8880; SSE2-NEXT: pxor %xmm4, %xmm5 8881; SSE2-NEXT: movdqa %xmm2, %xmm6 8882; SSE2-NEXT: pxor %xmm4, %xmm6 8883; SSE2-NEXT: movdqa %xmm6, %xmm7 8884; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8885; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8886; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8887; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8888; SSE2-NEXT: pand %xmm8, %xmm5 8889; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8890; SSE2-NEXT: por %xmm5, %xmm6 8891; SSE2-NEXT: pand %xmm6, %xmm0 8892; SSE2-NEXT: pandn %xmm2, %xmm6 8893; SSE2-NEXT: por %xmm6, %xmm0 8894; SSE2-NEXT: movdqa %xmm1, %xmm2 8895; SSE2-NEXT: pxor %xmm4, %xmm2 8896; SSE2-NEXT: pxor %xmm3, %xmm4 8897; SSE2-NEXT: movdqa %xmm4, %xmm5 8898; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8899; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8900; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8901; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8902; SSE2-NEXT: pand %xmm6, %xmm2 8903; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8904; SSE2-NEXT: por %xmm2, %xmm4 8905; SSE2-NEXT: pand %xmm4, %xmm1 8906; SSE2-NEXT: pandn %xmm3, %xmm4 8907; SSE2-NEXT: por %xmm4, %xmm1 8908; SSE2-NEXT: retq 8909; 8910; SSE4-LABEL: test172: 8911; SSE4: # %bb.0: # %entry 8912; SSE4-NEXT: movdqa %xmm0, %xmm4 8913; SSE4-NEXT: movdqa %xmm2, %xmm0 8914; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 8915; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8916; SSE4-NEXT: movdqa %xmm3, %xmm0 8917; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 8918; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8919; SSE4-NEXT: movapd %xmm2, %xmm0 8920; SSE4-NEXT: movapd %xmm3, %xmm1 8921; SSE4-NEXT: retq 8922; 8923; AVX1-LABEL: test172: 8924; AVX1: # %bb.0: # %entry 8925; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8926; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 8927; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8928; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 8929; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8930; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8931; AVX1-NEXT: retq 8932; 8933; AVX2-LABEL: test172: 8934; AVX2: # %bb.0: # %entry 8935; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 8936; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8937; AVX2-NEXT: retq 8938; 8939; AVX512F-LABEL: test172: 8940; AVX512F: # %bb.0: # %entry 8941; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 8942; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 8943; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 8944; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 8945; AVX512F-NEXT: retq 8946; 8947; AVX512BW-LABEL: test172: 8948; AVX512BW: # %bb.0: # %entry 8949; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 8950; AVX512BW-NEXT: retq 8951entry: 8952 %cmp = icmp sge <4 x i64> %a, %b 8953 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8954 ret <4 x i64> %sel 8955} 8956 8957define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) { 8958; SSE2-LABEL: test173: 8959; SSE2: # %bb.0: # %entry 8960; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 8961; SSE2-NEXT: movdqa %xmm2, %xmm5 8962; SSE2-NEXT: pxor %xmm4, %xmm5 8963; SSE2-NEXT: movdqa %xmm0, %xmm6 8964; SSE2-NEXT: pxor %xmm4, %xmm6 8965; SSE2-NEXT: movdqa %xmm6, %xmm7 8966; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8967; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8968; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8969; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8970; SSE2-NEXT: pand %xmm8, %xmm5 8971; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8972; SSE2-NEXT: por %xmm5, %xmm6 8973; SSE2-NEXT: pand %xmm6, %xmm0 8974; SSE2-NEXT: pandn %xmm2, %xmm6 8975; SSE2-NEXT: por %xmm6, %xmm0 8976; SSE2-NEXT: movdqa %xmm3, %xmm2 8977; SSE2-NEXT: pxor %xmm4, %xmm2 8978; SSE2-NEXT: pxor %xmm1, %xmm4 8979; SSE2-NEXT: movdqa %xmm4, %xmm5 8980; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8981; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8982; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8983; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8984; SSE2-NEXT: pand %xmm6, %xmm2 8985; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8986; SSE2-NEXT: por %xmm2, %xmm4 8987; SSE2-NEXT: pand %xmm4, %xmm1 8988; SSE2-NEXT: pandn %xmm3, %xmm4 8989; SSE2-NEXT: por %xmm4, %xmm1 8990; SSE2-NEXT: retq 8991; 8992; SSE4-LABEL: test173: 8993; SSE4: # %bb.0: # %entry 8994; SSE4-NEXT: movdqa %xmm0, %xmm4 8995; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8996; SSE4-NEXT: movdqa %xmm2, %xmm6 8997; SSE4-NEXT: pxor %xmm5, %xmm6 8998; SSE4-NEXT: pxor %xmm5, %xmm0 8999; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9000; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 9001; SSE4-NEXT: movdqa %xmm3, %xmm0 9002; SSE4-NEXT: pxor %xmm5, %xmm0 9003; SSE4-NEXT: pxor %xmm1, %xmm5 9004; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 9005; SSE4-NEXT: movdqa %xmm5, %xmm0 9006; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 9007; SSE4-NEXT: movapd %xmm2, %xmm0 9008; SSE4-NEXT: movapd %xmm3, %xmm1 9009; SSE4-NEXT: retq 9010; 9011; AVX1-LABEL: test173: 9012; AVX1: # %bb.0: # %entry 9013; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9014; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9015; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 9016; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 9017; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 9018; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9019; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4 9020; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3 9021; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9022; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9023; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9024; AVX1-NEXT: retq 9025; 9026; AVX2-LABEL: test173: 9027; AVX2: # %bb.0: # %entry 9028; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 9029; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 9030; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 9031; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9032; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9033; AVX2-NEXT: retq 9034; 9035; AVX512F-LABEL: test173: 9036; AVX512F: # %bb.0: # %entry 9037; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 9038; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9039; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 9040; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 9041; AVX512F-NEXT: retq 9042; 9043; AVX512BW-LABEL: test173: 9044; AVX512BW: # %bb.0: # %entry 9045; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 9046; AVX512BW-NEXT: retq 9047entry: 9048 %cmp = icmp ult <4 x i64> %a, %b 9049 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9050 ret <4 x i64> %sel 9051} 9052 9053define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) { 9054; SSE2-LABEL: test174: 9055; SSE2: # %bb.0: # %entry 9056; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 9057; SSE2-NEXT: movdqa %xmm2, %xmm5 9058; SSE2-NEXT: pxor %xmm4, %xmm5 9059; SSE2-NEXT: movdqa %xmm0, %xmm6 9060; SSE2-NEXT: pxor %xmm4, %xmm6 9061; SSE2-NEXT: movdqa %xmm6, %xmm7 9062; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 9063; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9064; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 9065; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 9066; SSE2-NEXT: pand %xmm8, %xmm5 9067; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9068; SSE2-NEXT: por %xmm5, %xmm6 9069; SSE2-NEXT: pand %xmm6, %xmm0 9070; SSE2-NEXT: pandn %xmm2, %xmm6 9071; SSE2-NEXT: por %xmm6, %xmm0 9072; SSE2-NEXT: movdqa %xmm3, %xmm2 9073; SSE2-NEXT: pxor %xmm4, %xmm2 9074; SSE2-NEXT: pxor %xmm1, %xmm4 9075; SSE2-NEXT: movdqa %xmm4, %xmm5 9076; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 9077; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 9078; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 9079; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 9080; SSE2-NEXT: pand %xmm6, %xmm2 9081; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9082; SSE2-NEXT: por %xmm2, %xmm4 9083; SSE2-NEXT: pand %xmm4, %xmm1 9084; SSE2-NEXT: pandn %xmm3, %xmm4 9085; SSE2-NEXT: por %xmm4, %xmm1 9086; SSE2-NEXT: retq 9087; 9088; SSE4-LABEL: test174: 9089; SSE4: # %bb.0: # %entry 9090; SSE4-NEXT: movdqa %xmm0, %xmm4 9091; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 9092; SSE4-NEXT: movdqa %xmm2, %xmm6 9093; SSE4-NEXT: pxor %xmm5, %xmm6 9094; SSE4-NEXT: pxor %xmm5, %xmm0 9095; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9096; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 9097; SSE4-NEXT: movdqa %xmm3, %xmm0 9098; SSE4-NEXT: pxor %xmm5, %xmm0 9099; SSE4-NEXT: pxor %xmm1, %xmm5 9100; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 9101; SSE4-NEXT: movdqa %xmm5, %xmm0 9102; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 9103; SSE4-NEXT: movapd %xmm2, %xmm0 9104; SSE4-NEXT: movapd %xmm3, %xmm1 9105; SSE4-NEXT: retq 9106; 9107; AVX1-LABEL: test174: 9108; AVX1: # %bb.0: # %entry 9109; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9110; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9111; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 9112; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 9113; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 9114; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9115; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4 9116; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3 9117; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9118; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9119; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9120; AVX1-NEXT: retq 9121; 9122; AVX2-LABEL: test174: 9123; AVX2: # %bb.0: # %entry 9124; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 9125; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 9126; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 9127; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9128; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9129; AVX2-NEXT: retq 9130; 9131; AVX512F-LABEL: test174: 9132; AVX512F: # %bb.0: # %entry 9133; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 9134; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9135; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 9136; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 9137; AVX512F-NEXT: retq 9138; 9139; AVX512BW-LABEL: test174: 9140; AVX512BW: # %bb.0: # %entry 9141; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 9142; AVX512BW-NEXT: retq 9143entry: 9144 %cmp = icmp ule <4 x i64> %a, %b 9145 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9146 ret <4 x i64> %sel 9147} 9148 9149define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) { 9150; SSE2-LABEL: test175: 9151; SSE2: # %bb.0: # %entry 9152; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 9153; SSE2-NEXT: movdqa %xmm0, %xmm5 9154; SSE2-NEXT: pxor %xmm4, %xmm5 9155; SSE2-NEXT: movdqa %xmm2, %xmm6 9156; SSE2-NEXT: pxor %xmm4, %xmm6 9157; SSE2-NEXT: movdqa %xmm6, %xmm7 9158; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 9159; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9160; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 9161; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 9162; SSE2-NEXT: pand %xmm8, %xmm5 9163; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9164; SSE2-NEXT: por %xmm5, %xmm6 9165; SSE2-NEXT: pand %xmm6, %xmm0 9166; SSE2-NEXT: pandn %xmm2, %xmm6 9167; SSE2-NEXT: por %xmm6, %xmm0 9168; SSE2-NEXT: movdqa %xmm1, %xmm2 9169; SSE2-NEXT: pxor %xmm4, %xmm2 9170; SSE2-NEXT: pxor %xmm3, %xmm4 9171; SSE2-NEXT: movdqa %xmm4, %xmm5 9172; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 9173; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 9174; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 9175; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 9176; SSE2-NEXT: pand %xmm6, %xmm2 9177; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9178; SSE2-NEXT: por %xmm2, %xmm4 9179; SSE2-NEXT: pand %xmm4, %xmm1 9180; SSE2-NEXT: pandn %xmm3, %xmm4 9181; SSE2-NEXT: por %xmm4, %xmm1 9182; SSE2-NEXT: retq 9183; 9184; SSE4-LABEL: test175: 9185; SSE4: # %bb.0: # %entry 9186; SSE4-NEXT: movdqa %xmm0, %xmm4 9187; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 9188; SSE4-NEXT: movdqa %xmm0, %xmm6 9189; SSE4-NEXT: pxor %xmm5, %xmm6 9190; SSE4-NEXT: movdqa %xmm2, %xmm0 9191; SSE4-NEXT: pxor %xmm5, %xmm0 9192; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9193; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 9194; SSE4-NEXT: movdqa %xmm1, %xmm0 9195; SSE4-NEXT: pxor %xmm5, %xmm0 9196; SSE4-NEXT: pxor %xmm3, %xmm5 9197; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 9198; SSE4-NEXT: movdqa %xmm5, %xmm0 9199; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 9200; SSE4-NEXT: movapd %xmm2, %xmm0 9201; SSE4-NEXT: movapd %xmm3, %xmm1 9202; SSE4-NEXT: retq 9203; 9204; AVX1-LABEL: test175: 9205; AVX1: # %bb.0: # %entry 9206; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9207; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9208; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 9209; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 9210; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 9211; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9212; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4 9213; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3 9214; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9215; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9216; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9217; AVX1-NEXT: retq 9218; 9219; AVX2-LABEL: test175: 9220; AVX2: # %bb.0: # %entry 9221; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 9222; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 9223; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 9224; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9225; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9226; AVX2-NEXT: retq 9227; 9228; AVX512F-LABEL: test175: 9229; AVX512F: # %bb.0: # %entry 9230; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 9231; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9232; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 9233; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 9234; AVX512F-NEXT: retq 9235; 9236; AVX512BW-LABEL: test175: 9237; AVX512BW: # %bb.0: # %entry 9238; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 9239; AVX512BW-NEXT: retq 9240entry: 9241 %cmp = icmp ugt <4 x i64> %a, %b 9242 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9243 ret <4 x i64> %sel 9244} 9245 9246define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) { 9247; SSE2-LABEL: test176: 9248; SSE2: # %bb.0: # %entry 9249; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456] 9250; SSE2-NEXT: movdqa %xmm0, %xmm5 9251; SSE2-NEXT: pxor %xmm4, %xmm5 9252; SSE2-NEXT: movdqa %xmm2, %xmm6 9253; SSE2-NEXT: pxor %xmm4, %xmm6 9254; SSE2-NEXT: movdqa %xmm6, %xmm7 9255; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 9256; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9257; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 9258; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 9259; SSE2-NEXT: pand %xmm8, %xmm5 9260; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9261; SSE2-NEXT: por %xmm5, %xmm6 9262; SSE2-NEXT: pand %xmm6, %xmm0 9263; SSE2-NEXT: pandn %xmm2, %xmm6 9264; SSE2-NEXT: por %xmm6, %xmm0 9265; SSE2-NEXT: movdqa %xmm1, %xmm2 9266; SSE2-NEXT: pxor %xmm4, %xmm2 9267; SSE2-NEXT: pxor %xmm3, %xmm4 9268; SSE2-NEXT: movdqa %xmm4, %xmm5 9269; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 9270; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 9271; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 9272; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 9273; SSE2-NEXT: pand %xmm6, %xmm2 9274; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9275; SSE2-NEXT: por %xmm2, %xmm4 9276; SSE2-NEXT: pand %xmm4, %xmm1 9277; SSE2-NEXT: pandn %xmm3, %xmm4 9278; SSE2-NEXT: por %xmm4, %xmm1 9279; SSE2-NEXT: retq 9280; 9281; SSE4-LABEL: test176: 9282; SSE4: # %bb.0: # %entry 9283; SSE4-NEXT: movdqa %xmm0, %xmm4 9284; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 9285; SSE4-NEXT: movdqa %xmm0, %xmm6 9286; SSE4-NEXT: pxor %xmm5, %xmm6 9287; SSE4-NEXT: movdqa %xmm2, %xmm0 9288; SSE4-NEXT: pxor %xmm5, %xmm0 9289; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9290; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 9291; SSE4-NEXT: movdqa %xmm1, %xmm0 9292; SSE4-NEXT: pxor %xmm5, %xmm0 9293; SSE4-NEXT: pxor %xmm3, %xmm5 9294; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 9295; SSE4-NEXT: movdqa %xmm5, %xmm0 9296; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 9297; SSE4-NEXT: movapd %xmm2, %xmm0 9298; SSE4-NEXT: movapd %xmm3, %xmm1 9299; SSE4-NEXT: retq 9300; 9301; AVX1-LABEL: test176: 9302; AVX1: # %bb.0: # %entry 9303; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9304; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9305; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 9306; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 9307; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 9308; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9309; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4 9310; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3 9311; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9312; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9313; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9314; AVX1-NEXT: retq 9315; 9316; AVX2-LABEL: test176: 9317; AVX2: # %bb.0: # %entry 9318; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 9319; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 9320; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 9321; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9322; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9323; AVX2-NEXT: retq 9324; 9325; AVX512F-LABEL: test176: 9326; AVX512F: # %bb.0: # %entry 9327; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 9328; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 9329; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 9330; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 9331; AVX512F-NEXT: retq 9332; 9333; AVX512BW-LABEL: test176: 9334; AVX512BW: # %bb.0: # %entry 9335; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 9336; AVX512BW-NEXT: retq 9337entry: 9338 %cmp = icmp uge <4 x i64> %a, %b 9339 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9340 ret <4 x i64> %sel 9341} 9342 9343define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) { 9344; SSE2-LABEL: test177: 9345; SSE2: # %bb.0: # %entry 9346; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9347; SSE2-NEXT: movdqa %xmm0, %xmm3 9348; SSE2-NEXT: pxor %xmm2, %xmm3 9349; SSE2-NEXT: pxor %xmm1, %xmm2 9350; SSE2-NEXT: movdqa %xmm2, %xmm4 9351; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9352; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9353; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9354; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9355; SSE2-NEXT: pand %xmm5, %xmm2 9356; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9357; SSE2-NEXT: por %xmm2, %xmm3 9358; SSE2-NEXT: pand %xmm3, %xmm0 9359; SSE2-NEXT: pandn %xmm1, %xmm3 9360; SSE2-NEXT: por %xmm3, %xmm0 9361; SSE2-NEXT: retq 9362; 9363; SSE4-LABEL: test177: 9364; SSE4: # %bb.0: # %entry 9365; SSE4-NEXT: movdqa %xmm0, %xmm2 9366; SSE4-NEXT: movdqa %xmm1, %xmm0 9367; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9368; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9369; SSE4-NEXT: movapd %xmm1, %xmm0 9370; SSE4-NEXT: retq 9371; 9372; AVX1-LABEL: test177: 9373; AVX1: # %bb.0: # %entry 9374; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9375; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9376; AVX1-NEXT: retq 9377; 9378; AVX2-LABEL: test177: 9379; AVX2: # %bb.0: # %entry 9380; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9381; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9382; AVX2-NEXT: retq 9383; 9384; AVX512F-LABEL: test177: 9385; AVX512F: # %bb.0: # %entry 9386; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9387; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9388; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 9389; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9390; AVX512F-NEXT: retq 9391; 9392; AVX512BW-LABEL: test177: 9393; AVX512BW: # %bb.0: # %entry 9394; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 9395; AVX512BW-NEXT: retq 9396entry: 9397 %cmp = icmp slt <2 x i64> %a, %b 9398 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9399 ret <2 x i64> %sel 9400} 9401 9402define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) { 9403; SSE2-LABEL: test178: 9404; SSE2: # %bb.0: # %entry 9405; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9406; SSE2-NEXT: movdqa %xmm0, %xmm3 9407; SSE2-NEXT: pxor %xmm2, %xmm3 9408; SSE2-NEXT: pxor %xmm1, %xmm2 9409; SSE2-NEXT: movdqa %xmm2, %xmm4 9410; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9411; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9412; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9413; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9414; SSE2-NEXT: pand %xmm5, %xmm2 9415; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9416; SSE2-NEXT: por %xmm2, %xmm3 9417; SSE2-NEXT: pand %xmm3, %xmm0 9418; SSE2-NEXT: pandn %xmm1, %xmm3 9419; SSE2-NEXT: por %xmm3, %xmm0 9420; SSE2-NEXT: retq 9421; 9422; SSE4-LABEL: test178: 9423; SSE4: # %bb.0: # %entry 9424; SSE4-NEXT: movdqa %xmm0, %xmm2 9425; SSE4-NEXT: movdqa %xmm1, %xmm0 9426; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9427; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9428; SSE4-NEXT: movapd %xmm1, %xmm0 9429; SSE4-NEXT: retq 9430; 9431; AVX1-LABEL: test178: 9432; AVX1: # %bb.0: # %entry 9433; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9434; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9435; AVX1-NEXT: retq 9436; 9437; AVX2-LABEL: test178: 9438; AVX2: # %bb.0: # %entry 9439; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9440; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9441; AVX2-NEXT: retq 9442; 9443; AVX512F-LABEL: test178: 9444; AVX512F: # %bb.0: # %entry 9445; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9446; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9447; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 9448; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9449; AVX512F-NEXT: retq 9450; 9451; AVX512BW-LABEL: test178: 9452; AVX512BW: # %bb.0: # %entry 9453; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 9454; AVX512BW-NEXT: retq 9455entry: 9456 %cmp = icmp sle <2 x i64> %a, %b 9457 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9458 ret <2 x i64> %sel 9459} 9460 9461define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) { 9462; SSE2-LABEL: test179: 9463; SSE2: # %bb.0: # %entry 9464; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9465; SSE2-NEXT: movdqa %xmm1, %xmm3 9466; SSE2-NEXT: pxor %xmm2, %xmm3 9467; SSE2-NEXT: pxor %xmm0, %xmm2 9468; SSE2-NEXT: movdqa %xmm2, %xmm4 9469; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9470; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9471; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9472; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9473; SSE2-NEXT: pand %xmm5, %xmm2 9474; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9475; SSE2-NEXT: por %xmm2, %xmm3 9476; SSE2-NEXT: pand %xmm3, %xmm0 9477; SSE2-NEXT: pandn %xmm1, %xmm3 9478; SSE2-NEXT: por %xmm3, %xmm0 9479; SSE2-NEXT: retq 9480; 9481; SSE4-LABEL: test179: 9482; SSE4: # %bb.0: # %entry 9483; SSE4-NEXT: movdqa %xmm0, %xmm2 9484; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 9485; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9486; SSE4-NEXT: movapd %xmm1, %xmm0 9487; SSE4-NEXT: retq 9488; 9489; AVX1-LABEL: test179: 9490; AVX1: # %bb.0: # %entry 9491; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9492; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9493; AVX1-NEXT: retq 9494; 9495; AVX2-LABEL: test179: 9496; AVX2: # %bb.0: # %entry 9497; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9498; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9499; AVX2-NEXT: retq 9500; 9501; AVX512F-LABEL: test179: 9502; AVX512F: # %bb.0: # %entry 9503; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9504; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9505; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 9506; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9507; AVX512F-NEXT: retq 9508; 9509; AVX512BW-LABEL: test179: 9510; AVX512BW: # %bb.0: # %entry 9511; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 9512; AVX512BW-NEXT: retq 9513entry: 9514 %cmp = icmp sgt <2 x i64> %a, %b 9515 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9516 ret <2 x i64> %sel 9517} 9518 9519define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) { 9520; SSE2-LABEL: test180: 9521; SSE2: # %bb.0: # %entry 9522; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9523; SSE2-NEXT: movdqa %xmm1, %xmm3 9524; SSE2-NEXT: pxor %xmm2, %xmm3 9525; SSE2-NEXT: pxor %xmm0, %xmm2 9526; SSE2-NEXT: movdqa %xmm2, %xmm4 9527; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9528; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9529; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9530; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9531; SSE2-NEXT: pand %xmm5, %xmm2 9532; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9533; SSE2-NEXT: por %xmm2, %xmm3 9534; SSE2-NEXT: pand %xmm3, %xmm0 9535; SSE2-NEXT: pandn %xmm1, %xmm3 9536; SSE2-NEXT: por %xmm3, %xmm0 9537; SSE2-NEXT: retq 9538; 9539; SSE4-LABEL: test180: 9540; SSE4: # %bb.0: # %entry 9541; SSE4-NEXT: movdqa %xmm0, %xmm2 9542; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 9543; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9544; SSE4-NEXT: movapd %xmm1, %xmm0 9545; SSE4-NEXT: retq 9546; 9547; AVX1-LABEL: test180: 9548; AVX1: # %bb.0: # %entry 9549; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9550; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9551; AVX1-NEXT: retq 9552; 9553; AVX2-LABEL: test180: 9554; AVX2: # %bb.0: # %entry 9555; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9556; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9557; AVX2-NEXT: retq 9558; 9559; AVX512F-LABEL: test180: 9560; AVX512F: # %bb.0: # %entry 9561; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9562; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9563; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 9564; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9565; AVX512F-NEXT: retq 9566; 9567; AVX512BW-LABEL: test180: 9568; AVX512BW: # %bb.0: # %entry 9569; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 9570; AVX512BW-NEXT: retq 9571entry: 9572 %cmp = icmp sge <2 x i64> %a, %b 9573 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9574 ret <2 x i64> %sel 9575} 9576 9577define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) { 9578; SSE2-LABEL: test181: 9579; SSE2: # %bb.0: # %entry 9580; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 9581; SSE2-NEXT: movdqa %xmm0, %xmm3 9582; SSE2-NEXT: pxor %xmm2, %xmm3 9583; SSE2-NEXT: pxor %xmm1, %xmm2 9584; SSE2-NEXT: movdqa %xmm2, %xmm4 9585; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9586; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9587; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9588; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9589; SSE2-NEXT: pand %xmm5, %xmm2 9590; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9591; SSE2-NEXT: por %xmm2, %xmm3 9592; SSE2-NEXT: pand %xmm3, %xmm0 9593; SSE2-NEXT: pandn %xmm1, %xmm3 9594; SSE2-NEXT: por %xmm3, %xmm0 9595; SSE2-NEXT: retq 9596; 9597; SSE4-LABEL: test181: 9598; SSE4: # %bb.0: # %entry 9599; SSE4-NEXT: movdqa %xmm0, %xmm2 9600; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9601; SSE4-NEXT: movdqa %xmm2, %xmm3 9602; SSE4-NEXT: pxor %xmm0, %xmm3 9603; SSE4-NEXT: pxor %xmm1, %xmm0 9604; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9605; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9606; SSE4-NEXT: movapd %xmm1, %xmm0 9607; SSE4-NEXT: retq 9608; 9609; AVX1-LABEL: test181: 9610; AVX1: # %bb.0: # %entry 9611; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9612; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 9613; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 9614; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9615; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9616; AVX1-NEXT: retq 9617; 9618; AVX2-LABEL: test181: 9619; AVX2: # %bb.0: # %entry 9620; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9621; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 9622; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 9623; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9624; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9625; AVX2-NEXT: retq 9626; 9627; AVX512F-LABEL: test181: 9628; AVX512F: # %bb.0: # %entry 9629; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9630; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9631; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 9632; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9633; AVX512F-NEXT: retq 9634; 9635; AVX512BW-LABEL: test181: 9636; AVX512BW: # %bb.0: # %entry 9637; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 9638; AVX512BW-NEXT: retq 9639entry: 9640 %cmp = icmp ult <2 x i64> %a, %b 9641 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9642 ret <2 x i64> %sel 9643} 9644 9645define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) { 9646; SSE2-LABEL: test182: 9647; SSE2: # %bb.0: # %entry 9648; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 9649; SSE2-NEXT: movdqa %xmm0, %xmm3 9650; SSE2-NEXT: pxor %xmm2, %xmm3 9651; SSE2-NEXT: pxor %xmm1, %xmm2 9652; SSE2-NEXT: movdqa %xmm2, %xmm4 9653; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9654; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9655; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9656; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9657; SSE2-NEXT: pand %xmm5, %xmm2 9658; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9659; SSE2-NEXT: por %xmm2, %xmm3 9660; SSE2-NEXT: pand %xmm3, %xmm0 9661; SSE2-NEXT: pandn %xmm1, %xmm3 9662; SSE2-NEXT: por %xmm3, %xmm0 9663; SSE2-NEXT: retq 9664; 9665; SSE4-LABEL: test182: 9666; SSE4: # %bb.0: # %entry 9667; SSE4-NEXT: movdqa %xmm0, %xmm2 9668; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9669; SSE4-NEXT: movdqa %xmm2, %xmm3 9670; SSE4-NEXT: pxor %xmm0, %xmm3 9671; SSE4-NEXT: pxor %xmm1, %xmm0 9672; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9673; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9674; SSE4-NEXT: movapd %xmm1, %xmm0 9675; SSE4-NEXT: retq 9676; 9677; AVX1-LABEL: test182: 9678; AVX1: # %bb.0: # %entry 9679; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9680; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 9681; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 9682; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9683; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9684; AVX1-NEXT: retq 9685; 9686; AVX2-LABEL: test182: 9687; AVX2: # %bb.0: # %entry 9688; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9689; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 9690; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 9691; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9692; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9693; AVX2-NEXT: retq 9694; 9695; AVX512F-LABEL: test182: 9696; AVX512F: # %bb.0: # %entry 9697; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9698; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9699; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 9700; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9701; AVX512F-NEXT: retq 9702; 9703; AVX512BW-LABEL: test182: 9704; AVX512BW: # %bb.0: # %entry 9705; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 9706; AVX512BW-NEXT: retq 9707entry: 9708 %cmp = icmp ule <2 x i64> %a, %b 9709 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9710 ret <2 x i64> %sel 9711} 9712 9713define <2 x i64> @test183(<2 x i64> %a, <2 x i64> %b) { 9714; SSE2-LABEL: test183: 9715; SSE2: # %bb.0: # %entry 9716; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 9717; SSE2-NEXT: movdqa %xmm1, %xmm3 9718; SSE2-NEXT: pxor %xmm2, %xmm3 9719; SSE2-NEXT: pxor %xmm0, %xmm2 9720; SSE2-NEXT: movdqa %xmm2, %xmm4 9721; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9722; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9723; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9724; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9725; SSE2-NEXT: pand %xmm5, %xmm2 9726; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9727; SSE2-NEXT: por %xmm2, %xmm3 9728; SSE2-NEXT: pand %xmm3, %xmm0 9729; SSE2-NEXT: pandn %xmm1, %xmm3 9730; SSE2-NEXT: por %xmm3, %xmm0 9731; SSE2-NEXT: retq 9732; 9733; SSE4-LABEL: test183: 9734; SSE4: # %bb.0: # %entry 9735; SSE4-NEXT: movdqa %xmm0, %xmm2 9736; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9737; SSE4-NEXT: movdqa %xmm1, %xmm3 9738; SSE4-NEXT: pxor %xmm0, %xmm3 9739; SSE4-NEXT: pxor %xmm2, %xmm0 9740; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9741; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9742; SSE4-NEXT: movapd %xmm1, %xmm0 9743; SSE4-NEXT: retq 9744; 9745; AVX1-LABEL: test183: 9746; AVX1: # %bb.0: # %entry 9747; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9748; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 9749; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 9750; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9751; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9752; AVX1-NEXT: retq 9753; 9754; AVX2-LABEL: test183: 9755; AVX2: # %bb.0: # %entry 9756; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9757; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 9758; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 9759; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9760; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9761; AVX2-NEXT: retq 9762; 9763; AVX512F-LABEL: test183: 9764; AVX512F: # %bb.0: # %entry 9765; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9766; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9767; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 9768; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9769; AVX512F-NEXT: retq 9770; 9771; AVX512BW-LABEL: test183: 9772; AVX512BW: # %bb.0: # %entry 9773; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 9774; AVX512BW-NEXT: retq 9775entry: 9776 %cmp = icmp ugt <2 x i64> %a, %b 9777 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9778 ret <2 x i64> %sel 9779} 9780 9781define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) { 9782; SSE2-LABEL: test184: 9783; SSE2: # %bb.0: # %entry 9784; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 9785; SSE2-NEXT: movdqa %xmm1, %xmm3 9786; SSE2-NEXT: pxor %xmm2, %xmm3 9787; SSE2-NEXT: pxor %xmm0, %xmm2 9788; SSE2-NEXT: movdqa %xmm2, %xmm4 9789; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9790; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9791; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9792; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9793; SSE2-NEXT: pand %xmm5, %xmm2 9794; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9795; SSE2-NEXT: por %xmm2, %xmm3 9796; SSE2-NEXT: pand %xmm3, %xmm0 9797; SSE2-NEXT: pandn %xmm1, %xmm3 9798; SSE2-NEXT: por %xmm3, %xmm0 9799; SSE2-NEXT: retq 9800; 9801; SSE4-LABEL: test184: 9802; SSE4: # %bb.0: # %entry 9803; SSE4-NEXT: movdqa %xmm0, %xmm2 9804; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9805; SSE4-NEXT: movdqa %xmm1, %xmm3 9806; SSE4-NEXT: pxor %xmm0, %xmm3 9807; SSE4-NEXT: pxor %xmm2, %xmm0 9808; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9809; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9810; SSE4-NEXT: movapd %xmm1, %xmm0 9811; SSE4-NEXT: retq 9812; 9813; AVX1-LABEL: test184: 9814; AVX1: # %bb.0: # %entry 9815; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9816; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 9817; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 9818; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9819; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9820; AVX1-NEXT: retq 9821; 9822; AVX2-LABEL: test184: 9823; AVX2: # %bb.0: # %entry 9824; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9825; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 9826; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 9827; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9828; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9829; AVX2-NEXT: retq 9830; 9831; AVX512F-LABEL: test184: 9832; AVX512F: # %bb.0: # %entry 9833; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9834; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9835; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 9836; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9837; AVX512F-NEXT: retq 9838; 9839; AVX512BW-LABEL: test184: 9840; AVX512BW: # %bb.0: # %entry 9841; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 9842; AVX512BW-NEXT: retq 9843entry: 9844 %cmp = icmp uge <2 x i64> %a, %b 9845 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9846 ret <2 x i64> %sel 9847} 9848 9849define <2 x i64> @test185(<2 x i64> %a, <2 x i64> %b) { 9850; SSE2-LABEL: test185: 9851; SSE2: # %bb.0: # %entry 9852; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9853; SSE2-NEXT: movdqa %xmm1, %xmm3 9854; SSE2-NEXT: pxor %xmm2, %xmm3 9855; SSE2-NEXT: pxor %xmm0, %xmm2 9856; SSE2-NEXT: movdqa %xmm2, %xmm4 9857; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9858; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9859; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9860; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9861; SSE2-NEXT: pand %xmm5, %xmm2 9862; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9863; SSE2-NEXT: por %xmm2, %xmm3 9864; SSE2-NEXT: pand %xmm3, %xmm0 9865; SSE2-NEXT: pandn %xmm1, %xmm3 9866; SSE2-NEXT: por %xmm3, %xmm0 9867; SSE2-NEXT: retq 9868; 9869; SSE4-LABEL: test185: 9870; SSE4: # %bb.0: # %entry 9871; SSE4-NEXT: movdqa %xmm0, %xmm2 9872; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 9873; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9874; SSE4-NEXT: movapd %xmm1, %xmm0 9875; SSE4-NEXT: retq 9876; 9877; AVX1-LABEL: test185: 9878; AVX1: # %bb.0: # %entry 9879; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9880; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9881; AVX1-NEXT: retq 9882; 9883; AVX2-LABEL: test185: 9884; AVX2: # %bb.0: # %entry 9885; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9886; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9887; AVX2-NEXT: retq 9888; 9889; AVX512F-LABEL: test185: 9890; AVX512F: # %bb.0: # %entry 9891; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9892; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9893; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 9894; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9895; AVX512F-NEXT: retq 9896; 9897; AVX512BW-LABEL: test185: 9898; AVX512BW: # %bb.0: # %entry 9899; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 9900; AVX512BW-NEXT: retq 9901entry: 9902 %cmp = icmp slt <2 x i64> %a, %b 9903 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9904 ret <2 x i64> %sel 9905} 9906 9907define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) { 9908; SSE2-LABEL: test186: 9909; SSE2: # %bb.0: # %entry 9910; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9911; SSE2-NEXT: movdqa %xmm1, %xmm3 9912; SSE2-NEXT: pxor %xmm2, %xmm3 9913; SSE2-NEXT: pxor %xmm0, %xmm2 9914; SSE2-NEXT: movdqa %xmm2, %xmm4 9915; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9916; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9917; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9918; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9919; SSE2-NEXT: pand %xmm5, %xmm2 9920; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9921; SSE2-NEXT: por %xmm2, %xmm3 9922; SSE2-NEXT: pand %xmm3, %xmm0 9923; SSE2-NEXT: pandn %xmm1, %xmm3 9924; SSE2-NEXT: por %xmm3, %xmm0 9925; SSE2-NEXT: retq 9926; 9927; SSE4-LABEL: test186: 9928; SSE4: # %bb.0: # %entry 9929; SSE4-NEXT: movdqa %xmm0, %xmm2 9930; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 9931; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9932; SSE4-NEXT: movapd %xmm1, %xmm0 9933; SSE4-NEXT: retq 9934; 9935; AVX1-LABEL: test186: 9936; AVX1: # %bb.0: # %entry 9937; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9938; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9939; AVX1-NEXT: retq 9940; 9941; AVX2-LABEL: test186: 9942; AVX2: # %bb.0: # %entry 9943; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9944; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9945; AVX2-NEXT: retq 9946; 9947; AVX512F-LABEL: test186: 9948; AVX512F: # %bb.0: # %entry 9949; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 9950; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 9951; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 9952; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 9953; AVX512F-NEXT: retq 9954; 9955; AVX512BW-LABEL: test186: 9956; AVX512BW: # %bb.0: # %entry 9957; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 9958; AVX512BW-NEXT: retq 9959entry: 9960 %cmp = icmp sle <2 x i64> %a, %b 9961 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9962 ret <2 x i64> %sel 9963} 9964 9965define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) { 9966; SSE2-LABEL: test187: 9967; SSE2: # %bb.0: # %entry 9968; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 9969; SSE2-NEXT: movdqa %xmm0, %xmm3 9970; SSE2-NEXT: pxor %xmm2, %xmm3 9971; SSE2-NEXT: pxor %xmm1, %xmm2 9972; SSE2-NEXT: movdqa %xmm2, %xmm4 9973; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9974; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9975; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9976; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9977; SSE2-NEXT: pand %xmm5, %xmm2 9978; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9979; SSE2-NEXT: por %xmm2, %xmm3 9980; SSE2-NEXT: pand %xmm3, %xmm0 9981; SSE2-NEXT: pandn %xmm1, %xmm3 9982; SSE2-NEXT: por %xmm3, %xmm0 9983; SSE2-NEXT: retq 9984; 9985; SSE4-LABEL: test187: 9986; SSE4: # %bb.0: # %entry 9987; SSE4-NEXT: movdqa %xmm0, %xmm2 9988; SSE4-NEXT: movdqa %xmm1, %xmm0 9989; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9990; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9991; SSE4-NEXT: movapd %xmm1, %xmm0 9992; SSE4-NEXT: retq 9993; 9994; AVX1-LABEL: test187: 9995; AVX1: # %bb.0: # %entry 9996; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9997; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9998; AVX1-NEXT: retq 9999; 10000; AVX2-LABEL: test187: 10001; AVX2: # %bb.0: # %entry 10002; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10003; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10004; AVX2-NEXT: retq 10005; 10006; AVX512F-LABEL: test187: 10007; AVX512F: # %bb.0: # %entry 10008; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 10009; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 10010; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 10011; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 10012; AVX512F-NEXT: retq 10013; 10014; AVX512BW-LABEL: test187: 10015; AVX512BW: # %bb.0: # %entry 10016; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 10017; AVX512BW-NEXT: retq 10018entry: 10019 %cmp = icmp sgt <2 x i64> %a, %b 10020 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10021 ret <2 x i64> %sel 10022} 10023 10024define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) { 10025; SSE2-LABEL: test188: 10026; SSE2: # %bb.0: # %entry 10027; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648] 10028; SSE2-NEXT: movdqa %xmm0, %xmm3 10029; SSE2-NEXT: pxor %xmm2, %xmm3 10030; SSE2-NEXT: pxor %xmm1, %xmm2 10031; SSE2-NEXT: movdqa %xmm2, %xmm4 10032; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10033; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10034; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10035; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10036; SSE2-NEXT: pand %xmm5, %xmm2 10037; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10038; SSE2-NEXT: por %xmm2, %xmm3 10039; SSE2-NEXT: pand %xmm3, %xmm0 10040; SSE2-NEXT: pandn %xmm1, %xmm3 10041; SSE2-NEXT: por %xmm3, %xmm0 10042; SSE2-NEXT: retq 10043; 10044; SSE4-LABEL: test188: 10045; SSE4: # %bb.0: # %entry 10046; SSE4-NEXT: movdqa %xmm0, %xmm2 10047; SSE4-NEXT: movdqa %xmm1, %xmm0 10048; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 10049; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 10050; SSE4-NEXT: movapd %xmm1, %xmm0 10051; SSE4-NEXT: retq 10052; 10053; AVX1-LABEL: test188: 10054; AVX1: # %bb.0: # %entry 10055; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10056; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10057; AVX1-NEXT: retq 10058; 10059; AVX2-LABEL: test188: 10060; AVX2: # %bb.0: # %entry 10061; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10062; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10063; AVX2-NEXT: retq 10064; 10065; AVX512F-LABEL: test188: 10066; AVX512F: # %bb.0: # %entry 10067; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 10068; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 10069; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 10070; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 10071; AVX512F-NEXT: retq 10072; 10073; AVX512BW-LABEL: test188: 10074; AVX512BW: # %bb.0: # %entry 10075; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 10076; AVX512BW-NEXT: retq 10077entry: 10078 %cmp = icmp sge <2 x i64> %a, %b 10079 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10080 ret <2 x i64> %sel 10081} 10082 10083define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) { 10084; SSE2-LABEL: test189: 10085; SSE2: # %bb.0: # %entry 10086; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 10087; SSE2-NEXT: movdqa %xmm1, %xmm3 10088; SSE2-NEXT: pxor %xmm2, %xmm3 10089; SSE2-NEXT: pxor %xmm0, %xmm2 10090; SSE2-NEXT: movdqa %xmm2, %xmm4 10091; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10092; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10093; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10094; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10095; SSE2-NEXT: pand %xmm5, %xmm2 10096; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10097; SSE2-NEXT: por %xmm2, %xmm3 10098; SSE2-NEXT: pand %xmm3, %xmm0 10099; SSE2-NEXT: pandn %xmm1, %xmm3 10100; SSE2-NEXT: por %xmm3, %xmm0 10101; SSE2-NEXT: retq 10102; 10103; SSE4-LABEL: test189: 10104; SSE4: # %bb.0: # %entry 10105; SSE4-NEXT: movdqa %xmm0, %xmm2 10106; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10107; SSE4-NEXT: movdqa %xmm1, %xmm3 10108; SSE4-NEXT: pxor %xmm0, %xmm3 10109; SSE4-NEXT: pxor %xmm2, %xmm0 10110; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10111; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 10112; SSE4-NEXT: movapd %xmm1, %xmm0 10113; SSE4-NEXT: retq 10114; 10115; AVX1-LABEL: test189: 10116; AVX1: # %bb.0: # %entry 10117; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10118; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 10119; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 10120; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10121; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10122; AVX1-NEXT: retq 10123; 10124; AVX2-LABEL: test189: 10125; AVX2: # %bb.0: # %entry 10126; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10127; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 10128; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 10129; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10130; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10131; AVX2-NEXT: retq 10132; 10133; AVX512F-LABEL: test189: 10134; AVX512F: # %bb.0: # %entry 10135; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 10136; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 10137; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 10138; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 10139; AVX512F-NEXT: retq 10140; 10141; AVX512BW-LABEL: test189: 10142; AVX512BW: # %bb.0: # %entry 10143; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 10144; AVX512BW-NEXT: retq 10145entry: 10146 %cmp = icmp ult <2 x i64> %a, %b 10147 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10148 ret <2 x i64> %sel 10149} 10150 10151define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) { 10152; SSE2-LABEL: test190: 10153; SSE2: # %bb.0: # %entry 10154; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 10155; SSE2-NEXT: movdqa %xmm1, %xmm3 10156; SSE2-NEXT: pxor %xmm2, %xmm3 10157; SSE2-NEXT: pxor %xmm0, %xmm2 10158; SSE2-NEXT: movdqa %xmm2, %xmm4 10159; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10160; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10161; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10162; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10163; SSE2-NEXT: pand %xmm5, %xmm2 10164; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10165; SSE2-NEXT: por %xmm2, %xmm3 10166; SSE2-NEXT: pand %xmm3, %xmm0 10167; SSE2-NEXT: pandn %xmm1, %xmm3 10168; SSE2-NEXT: por %xmm3, %xmm0 10169; SSE2-NEXT: retq 10170; 10171; SSE4-LABEL: test190: 10172; SSE4: # %bb.0: # %entry 10173; SSE4-NEXT: movdqa %xmm0, %xmm2 10174; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10175; SSE4-NEXT: movdqa %xmm1, %xmm3 10176; SSE4-NEXT: pxor %xmm0, %xmm3 10177; SSE4-NEXT: pxor %xmm2, %xmm0 10178; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10179; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 10180; SSE4-NEXT: movapd %xmm1, %xmm0 10181; SSE4-NEXT: retq 10182; 10183; AVX1-LABEL: test190: 10184; AVX1: # %bb.0: # %entry 10185; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10186; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 10187; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 10188; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10189; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10190; AVX1-NEXT: retq 10191; 10192; AVX2-LABEL: test190: 10193; AVX2: # %bb.0: # %entry 10194; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10195; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 10196; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 10197; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10198; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10199; AVX2-NEXT: retq 10200; 10201; AVX512F-LABEL: test190: 10202; AVX512F: # %bb.0: # %entry 10203; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 10204; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 10205; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 10206; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 10207; AVX512F-NEXT: retq 10208; 10209; AVX512BW-LABEL: test190: 10210; AVX512BW: # %bb.0: # %entry 10211; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 10212; AVX512BW-NEXT: retq 10213entry: 10214 %cmp = icmp ule <2 x i64> %a, %b 10215 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10216 ret <2 x i64> %sel 10217} 10218 10219define <2 x i64> @test191(<2 x i64> %a, <2 x i64> %b) { 10220; SSE2-LABEL: test191: 10221; SSE2: # %bb.0: # %entry 10222; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 10223; SSE2-NEXT: movdqa %xmm0, %xmm3 10224; SSE2-NEXT: pxor %xmm2, %xmm3 10225; SSE2-NEXT: pxor %xmm1, %xmm2 10226; SSE2-NEXT: movdqa %xmm2, %xmm4 10227; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10228; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10229; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10230; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10231; SSE2-NEXT: pand %xmm5, %xmm2 10232; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10233; SSE2-NEXT: por %xmm2, %xmm3 10234; SSE2-NEXT: pand %xmm3, %xmm0 10235; SSE2-NEXT: pandn %xmm1, %xmm3 10236; SSE2-NEXT: por %xmm3, %xmm0 10237; SSE2-NEXT: retq 10238; 10239; SSE4-LABEL: test191: 10240; SSE4: # %bb.0: # %entry 10241; SSE4-NEXT: movdqa %xmm0, %xmm2 10242; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10243; SSE4-NEXT: movdqa %xmm2, %xmm3 10244; SSE4-NEXT: pxor %xmm0, %xmm3 10245; SSE4-NEXT: pxor %xmm1, %xmm0 10246; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10247; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 10248; SSE4-NEXT: movapd %xmm1, %xmm0 10249; SSE4-NEXT: retq 10250; 10251; AVX1-LABEL: test191: 10252; AVX1: # %bb.0: # %entry 10253; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10254; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 10255; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 10256; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10257; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10258; AVX1-NEXT: retq 10259; 10260; AVX2-LABEL: test191: 10261; AVX2: # %bb.0: # %entry 10262; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10263; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 10264; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 10265; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10266; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10267; AVX2-NEXT: retq 10268; 10269; AVX512F-LABEL: test191: 10270; AVX512F: # %bb.0: # %entry 10271; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 10272; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 10273; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 10274; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 10275; AVX512F-NEXT: retq 10276; 10277; AVX512BW-LABEL: test191: 10278; AVX512BW: # %bb.0: # %entry 10279; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 10280; AVX512BW-NEXT: retq 10281entry: 10282 %cmp = icmp ugt <2 x i64> %a, %b 10283 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10284 ret <2 x i64> %sel 10285} 10286 10287define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) { 10288; SSE2-LABEL: test192: 10289; SSE2: # %bb.0: # %entry 10290; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456] 10291; SSE2-NEXT: movdqa %xmm0, %xmm3 10292; SSE2-NEXT: pxor %xmm2, %xmm3 10293; SSE2-NEXT: pxor %xmm1, %xmm2 10294; SSE2-NEXT: movdqa %xmm2, %xmm4 10295; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10296; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10297; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10298; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10299; SSE2-NEXT: pand %xmm5, %xmm2 10300; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10301; SSE2-NEXT: por %xmm2, %xmm3 10302; SSE2-NEXT: pand %xmm3, %xmm0 10303; SSE2-NEXT: pandn %xmm1, %xmm3 10304; SSE2-NEXT: por %xmm3, %xmm0 10305; SSE2-NEXT: retq 10306; 10307; SSE4-LABEL: test192: 10308; SSE4: # %bb.0: # %entry 10309; SSE4-NEXT: movdqa %xmm0, %xmm2 10310; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10311; SSE4-NEXT: movdqa %xmm2, %xmm3 10312; SSE4-NEXT: pxor %xmm0, %xmm3 10313; SSE4-NEXT: pxor %xmm1, %xmm0 10314; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10315; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 10316; SSE4-NEXT: movapd %xmm1, %xmm0 10317; SSE4-NEXT: retq 10318; 10319; AVX1-LABEL: test192: 10320; AVX1: # %bb.0: # %entry 10321; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10322; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 10323; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 10324; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10325; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10326; AVX1-NEXT: retq 10327; 10328; AVX2-LABEL: test192: 10329; AVX2: # %bb.0: # %entry 10330; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10331; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 10332; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 10333; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10334; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10335; AVX2-NEXT: retq 10336; 10337; AVX512F-LABEL: test192: 10338; AVX512F: # %bb.0: # %entry 10339; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 10340; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 10341; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 10342; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 10343; AVX512F-NEXT: retq 10344; 10345; AVX512BW-LABEL: test192: 10346; AVX512BW: # %bb.0: # %entry 10347; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 10348; AVX512BW-NEXT: retq 10349entry: 10350 %cmp = icmp uge <2 x i64> %a, %b 10351 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10352 ret <2 x i64> %sel 10353} 10354