1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2 3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE4 4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1 5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2 6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=knl | FileCheck %s --check-prefix=AVX --check-prefix=AVX512F 7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=skx | FileCheck %s --check-prefix=AVX --check-prefix=AVX512F --check-prefix=AVX512BW --check-prefix=AVX512VL 8 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 {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 243; SSE2-NEXT: pxor %xmm2, %xmm1 244; SSE2-NEXT: pxor %xmm2, %xmm0 245; SSE2-NEXT: pminsw %xmm1, %xmm0 246; SSE2-NEXT: pxor %xmm2, %xmm0 247; SSE2-NEXT: retq 248; 249; SSE4-LABEL: test13: 250; SSE4: # %bb.0: # %entry 251; SSE4-NEXT: pminuw %xmm1, %xmm0 252; SSE4-NEXT: retq 253; 254; AVX-LABEL: test13: 255; AVX: # %bb.0: # %entry 256; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 257; AVX-NEXT: retq 258entry: 259 %cmp = icmp ult <8 x i16> %a, %b 260 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 261 ret <8 x i16> %sel 262} 263 264define <8 x i16> @test14(<8 x i16> %a, <8 x i16> %b) { 265; SSE2-LABEL: test14: 266; SSE2: # %bb.0: # %entry 267; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 268; SSE2-NEXT: pxor %xmm2, %xmm1 269; SSE2-NEXT: pxor %xmm2, %xmm0 270; SSE2-NEXT: pminsw %xmm1, %xmm0 271; SSE2-NEXT: pxor %xmm2, %xmm0 272; SSE2-NEXT: retq 273; 274; SSE4-LABEL: test14: 275; SSE4: # %bb.0: # %entry 276; SSE4-NEXT: pminuw %xmm1, %xmm0 277; SSE4-NEXT: retq 278; 279; AVX-LABEL: test14: 280; AVX: # %bb.0: # %entry 281; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 282; AVX-NEXT: retq 283entry: 284 %cmp = icmp ule <8 x i16> %a, %b 285 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 286 ret <8 x i16> %sel 287} 288 289define <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) { 290; SSE2-LABEL: test15: 291; SSE2: # %bb.0: # %entry 292; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 293; SSE2-NEXT: pxor %xmm2, %xmm1 294; SSE2-NEXT: pxor %xmm2, %xmm0 295; SSE2-NEXT: pmaxsw %xmm1, %xmm0 296; SSE2-NEXT: pxor %xmm2, %xmm0 297; SSE2-NEXT: retq 298; 299; SSE4-LABEL: test15: 300; SSE4: # %bb.0: # %entry 301; SSE4-NEXT: pmaxuw %xmm1, %xmm0 302; SSE4-NEXT: retq 303; 304; AVX-LABEL: test15: 305; AVX: # %bb.0: # %entry 306; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 307; AVX-NEXT: retq 308entry: 309 %cmp = icmp ugt <8 x i16> %a, %b 310 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 311 ret <8 x i16> %sel 312} 313 314define <8 x i16> @test16(<8 x i16> %a, <8 x i16> %b) { 315; SSE2-LABEL: test16: 316; SSE2: # %bb.0: # %entry 317; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 318; SSE2-NEXT: pxor %xmm2, %xmm1 319; SSE2-NEXT: pxor %xmm2, %xmm0 320; SSE2-NEXT: pmaxsw %xmm1, %xmm0 321; SSE2-NEXT: pxor %xmm2, %xmm0 322; SSE2-NEXT: retq 323; 324; SSE4-LABEL: test16: 325; SSE4: # %bb.0: # %entry 326; SSE4-NEXT: pmaxuw %xmm1, %xmm0 327; SSE4-NEXT: retq 328; 329; AVX-LABEL: test16: 330; AVX: # %bb.0: # %entry 331; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 332; AVX-NEXT: retq 333entry: 334 %cmp = icmp uge <8 x i16> %a, %b 335 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 336 ret <8 x i16> %sel 337} 338 339define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) { 340; SSE2-LABEL: test17: 341; SSE2: # %bb.0: # %entry 342; SSE2-NEXT: movdqa %xmm1, %xmm2 343; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 344; SSE2-NEXT: pand %xmm2, %xmm0 345; SSE2-NEXT: pandn %xmm1, %xmm2 346; SSE2-NEXT: por %xmm2, %xmm0 347; SSE2-NEXT: retq 348; 349; SSE4-LABEL: test17: 350; SSE4: # %bb.0: # %entry 351; SSE4-NEXT: pminsd %xmm1, %xmm0 352; SSE4-NEXT: retq 353; 354; AVX-LABEL: test17: 355; AVX: # %bb.0: # %entry 356; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 357; AVX-NEXT: retq 358entry: 359 %cmp = icmp slt <4 x i32> %a, %b 360 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 361 ret <4 x i32> %sel 362} 363 364define <4 x i32> @test18(<4 x i32> %a, <4 x i32> %b) { 365; SSE2-LABEL: test18: 366; SSE2: # %bb.0: # %entry 367; SSE2-NEXT: movdqa %xmm1, %xmm2 368; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 369; SSE2-NEXT: pand %xmm2, %xmm0 370; SSE2-NEXT: pandn %xmm1, %xmm2 371; SSE2-NEXT: por %xmm2, %xmm0 372; SSE2-NEXT: retq 373; 374; SSE4-LABEL: test18: 375; SSE4: # %bb.0: # %entry 376; SSE4-NEXT: pminsd %xmm1, %xmm0 377; SSE4-NEXT: retq 378; 379; AVX-LABEL: test18: 380; AVX: # %bb.0: # %entry 381; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 382; AVX-NEXT: retq 383entry: 384 %cmp = icmp sle <4 x i32> %a, %b 385 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 386 ret <4 x i32> %sel 387} 388 389define <4 x i32> @test19(<4 x i32> %a, <4 x i32> %b) { 390; SSE2-LABEL: test19: 391; SSE2: # %bb.0: # %entry 392; SSE2-NEXT: movdqa %xmm0, %xmm2 393; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 394; SSE2-NEXT: pand %xmm2, %xmm0 395; SSE2-NEXT: pandn %xmm1, %xmm2 396; SSE2-NEXT: por %xmm0, %xmm2 397; SSE2-NEXT: movdqa %xmm2, %xmm0 398; SSE2-NEXT: retq 399; 400; SSE4-LABEL: test19: 401; SSE4: # %bb.0: # %entry 402; SSE4-NEXT: pmaxsd %xmm1, %xmm0 403; SSE4-NEXT: retq 404; 405; AVX-LABEL: test19: 406; AVX: # %bb.0: # %entry 407; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 408; AVX-NEXT: retq 409entry: 410 %cmp = icmp sgt <4 x i32> %a, %b 411 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 412 ret <4 x i32> %sel 413} 414 415define <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b) { 416; SSE2-LABEL: test20: 417; SSE2: # %bb.0: # %entry 418; SSE2-NEXT: movdqa %xmm0, %xmm2 419; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 420; SSE2-NEXT: pand %xmm2, %xmm0 421; SSE2-NEXT: pandn %xmm1, %xmm2 422; SSE2-NEXT: por %xmm0, %xmm2 423; SSE2-NEXT: movdqa %xmm2, %xmm0 424; SSE2-NEXT: retq 425; 426; SSE4-LABEL: test20: 427; SSE4: # %bb.0: # %entry 428; SSE4-NEXT: pmaxsd %xmm1, %xmm0 429; SSE4-NEXT: retq 430; 431; AVX-LABEL: test20: 432; AVX: # %bb.0: # %entry 433; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 434; AVX-NEXT: retq 435entry: 436 %cmp = icmp sge <4 x i32> %a, %b 437 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 438 ret <4 x i32> %sel 439} 440 441define <4 x i32> @test21(<4 x i32> %a, <4 x i32> %b) { 442; SSE2-LABEL: test21: 443; SSE2: # %bb.0: # %entry 444; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 445; SSE2-NEXT: movdqa %xmm0, %xmm3 446; SSE2-NEXT: pxor %xmm2, %xmm3 447; SSE2-NEXT: pxor %xmm1, %xmm2 448; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 449; SSE2-NEXT: pand %xmm2, %xmm0 450; SSE2-NEXT: pandn %xmm1, %xmm2 451; SSE2-NEXT: por %xmm2, %xmm0 452; SSE2-NEXT: retq 453; 454; SSE4-LABEL: test21: 455; SSE4: # %bb.0: # %entry 456; SSE4-NEXT: pminud %xmm1, %xmm0 457; SSE4-NEXT: retq 458; 459; AVX-LABEL: test21: 460; AVX: # %bb.0: # %entry 461; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 462; AVX-NEXT: retq 463entry: 464 %cmp = icmp ult <4 x i32> %a, %b 465 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 466 ret <4 x i32> %sel 467} 468 469define <4 x i32> @test22(<4 x i32> %a, <4 x i32> %b) { 470; SSE2-LABEL: test22: 471; SSE2: # %bb.0: # %entry 472; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 473; SSE2-NEXT: movdqa %xmm0, %xmm3 474; SSE2-NEXT: pxor %xmm2, %xmm3 475; SSE2-NEXT: pxor %xmm1, %xmm2 476; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 477; SSE2-NEXT: pand %xmm2, %xmm0 478; SSE2-NEXT: pandn %xmm1, %xmm2 479; SSE2-NEXT: por %xmm2, %xmm0 480; SSE2-NEXT: retq 481; 482; SSE4-LABEL: test22: 483; SSE4: # %bb.0: # %entry 484; SSE4-NEXT: pminud %xmm1, %xmm0 485; SSE4-NEXT: retq 486; 487; AVX-LABEL: test22: 488; AVX: # %bb.0: # %entry 489; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 490; AVX-NEXT: retq 491entry: 492 %cmp = icmp ule <4 x i32> %a, %b 493 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 494 ret <4 x i32> %sel 495} 496 497define <4 x i32> @test23(<4 x i32> %a, <4 x i32> %b) { 498; SSE2-LABEL: test23: 499; SSE2: # %bb.0: # %entry 500; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 501; SSE2-NEXT: movdqa %xmm1, %xmm3 502; SSE2-NEXT: pxor %xmm2, %xmm3 503; SSE2-NEXT: pxor %xmm0, %xmm2 504; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 505; SSE2-NEXT: pand %xmm2, %xmm0 506; SSE2-NEXT: pandn %xmm1, %xmm2 507; SSE2-NEXT: por %xmm2, %xmm0 508; SSE2-NEXT: retq 509; 510; SSE4-LABEL: test23: 511; SSE4: # %bb.0: # %entry 512; SSE4-NEXT: pmaxud %xmm1, %xmm0 513; SSE4-NEXT: retq 514; 515; AVX-LABEL: test23: 516; AVX: # %bb.0: # %entry 517; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 518; AVX-NEXT: retq 519entry: 520 %cmp = icmp ugt <4 x i32> %a, %b 521 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 522 ret <4 x i32> %sel 523} 524 525define <4 x i32> @test24(<4 x i32> %a, <4 x i32> %b) { 526; SSE2-LABEL: test24: 527; SSE2: # %bb.0: # %entry 528; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 529; SSE2-NEXT: movdqa %xmm1, %xmm3 530; SSE2-NEXT: pxor %xmm2, %xmm3 531; SSE2-NEXT: pxor %xmm0, %xmm2 532; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 533; SSE2-NEXT: pand %xmm2, %xmm0 534; SSE2-NEXT: pandn %xmm1, %xmm2 535; SSE2-NEXT: por %xmm2, %xmm0 536; SSE2-NEXT: retq 537; 538; SSE4-LABEL: test24: 539; SSE4: # %bb.0: # %entry 540; SSE4-NEXT: pmaxud %xmm1, %xmm0 541; SSE4-NEXT: retq 542; 543; AVX-LABEL: test24: 544; AVX: # %bb.0: # %entry 545; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 546; AVX-NEXT: retq 547entry: 548 %cmp = icmp uge <4 x i32> %a, %b 549 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 550 ret <4 x i32> %sel 551} 552 553define <32 x i8> @test25(<32 x i8> %a, <32 x i8> %b) { 554; SSE2-LABEL: test25: 555; SSE2: # %bb.0: # %entry 556; SSE2-NEXT: movdqa %xmm2, %xmm4 557; SSE2-NEXT: pcmpgtb %xmm0, %xmm4 558; SSE2-NEXT: pand %xmm4, %xmm0 559; SSE2-NEXT: pandn %xmm2, %xmm4 560; SSE2-NEXT: por %xmm4, %xmm0 561; SSE2-NEXT: movdqa %xmm3, %xmm2 562; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 563; SSE2-NEXT: pand %xmm2, %xmm1 564; SSE2-NEXT: pandn %xmm3, %xmm2 565; SSE2-NEXT: por %xmm2, %xmm1 566; SSE2-NEXT: retq 567; 568; SSE4-LABEL: test25: 569; SSE4: # %bb.0: # %entry 570; SSE4-NEXT: pminsb %xmm2, %xmm0 571; SSE4-NEXT: pminsb %xmm3, %xmm1 572; SSE4-NEXT: retq 573; 574; AVX1-LABEL: test25: 575; AVX1: # %bb.0: # %entry 576; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 577; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 578; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 579; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 580; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 581; AVX1-NEXT: retq 582; 583; AVX2-LABEL: test25: 584; AVX2: # %bb.0: # %entry 585; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 586; AVX2-NEXT: retq 587; 588; AVX512F-LABEL: test25: 589; AVX512F: # %bb.0: # %entry 590; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 591; AVX512F-NEXT: retq 592entry: 593 %cmp = icmp slt <32 x i8> %a, %b 594 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 595 ret <32 x i8> %sel 596} 597 598define <32 x i8> @test26(<32 x i8> %a, <32 x i8> %b) { 599; SSE2-LABEL: test26: 600; SSE2: # %bb.0: # %entry 601; SSE2-NEXT: movdqa %xmm2, %xmm4 602; SSE2-NEXT: pcmpgtb %xmm0, %xmm4 603; SSE2-NEXT: pand %xmm4, %xmm0 604; SSE2-NEXT: pandn %xmm2, %xmm4 605; SSE2-NEXT: por %xmm4, %xmm0 606; SSE2-NEXT: movdqa %xmm3, %xmm2 607; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 608; SSE2-NEXT: pand %xmm2, %xmm1 609; SSE2-NEXT: pandn %xmm3, %xmm2 610; SSE2-NEXT: por %xmm2, %xmm1 611; SSE2-NEXT: retq 612; 613; SSE4-LABEL: test26: 614; SSE4: # %bb.0: # %entry 615; SSE4-NEXT: pminsb %xmm2, %xmm0 616; SSE4-NEXT: pminsb %xmm3, %xmm1 617; SSE4-NEXT: retq 618; 619; AVX1-LABEL: test26: 620; AVX1: # %bb.0: # %entry 621; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 622; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 623; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 624; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 625; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 626; AVX1-NEXT: retq 627; 628; AVX2-LABEL: test26: 629; AVX2: # %bb.0: # %entry 630; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 631; AVX2-NEXT: retq 632; 633; AVX512F-LABEL: test26: 634; AVX512F: # %bb.0: # %entry 635; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 636; AVX512F-NEXT: retq 637entry: 638 %cmp = icmp sle <32 x i8> %a, %b 639 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 640 ret <32 x i8> %sel 641} 642 643define <32 x i8> @test27(<32 x i8> %a, <32 x i8> %b) { 644; SSE2-LABEL: test27: 645; SSE2: # %bb.0: # %entry 646; SSE2-NEXT: movdqa %xmm0, %xmm4 647; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 648; SSE2-NEXT: pand %xmm4, %xmm0 649; SSE2-NEXT: pandn %xmm2, %xmm4 650; SSE2-NEXT: por %xmm0, %xmm4 651; SSE2-NEXT: movdqa %xmm1, %xmm2 652; SSE2-NEXT: pcmpgtb %xmm3, %xmm2 653; SSE2-NEXT: pand %xmm2, %xmm1 654; SSE2-NEXT: pandn %xmm3, %xmm2 655; SSE2-NEXT: por %xmm1, %xmm2 656; SSE2-NEXT: movdqa %xmm4, %xmm0 657; SSE2-NEXT: movdqa %xmm2, %xmm1 658; SSE2-NEXT: retq 659; 660; SSE4-LABEL: test27: 661; SSE4: # %bb.0: # %entry 662; SSE4-NEXT: pmaxsb %xmm2, %xmm0 663; SSE4-NEXT: pmaxsb %xmm3, %xmm1 664; SSE4-NEXT: retq 665; 666; AVX1-LABEL: test27: 667; AVX1: # %bb.0: # %entry 668; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 669; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 670; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 671; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 672; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 673; AVX1-NEXT: retq 674; 675; AVX2-LABEL: test27: 676; AVX2: # %bb.0: # %entry 677; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 678; AVX2-NEXT: retq 679; 680; AVX512F-LABEL: test27: 681; AVX512F: # %bb.0: # %entry 682; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 683; AVX512F-NEXT: retq 684entry: 685 %cmp = icmp sgt <32 x i8> %a, %b 686 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 687 ret <32 x i8> %sel 688} 689 690define <32 x i8> @test28(<32 x i8> %a, <32 x i8> %b) { 691; SSE2-LABEL: test28: 692; SSE2: # %bb.0: # %entry 693; SSE2-NEXT: movdqa %xmm0, %xmm4 694; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 695; SSE2-NEXT: pand %xmm4, %xmm0 696; SSE2-NEXT: pandn %xmm2, %xmm4 697; SSE2-NEXT: por %xmm0, %xmm4 698; SSE2-NEXT: movdqa %xmm1, %xmm2 699; SSE2-NEXT: pcmpgtb %xmm3, %xmm2 700; SSE2-NEXT: pand %xmm2, %xmm1 701; SSE2-NEXT: pandn %xmm3, %xmm2 702; SSE2-NEXT: por %xmm1, %xmm2 703; SSE2-NEXT: movdqa %xmm4, %xmm0 704; SSE2-NEXT: movdqa %xmm2, %xmm1 705; SSE2-NEXT: retq 706; 707; SSE4-LABEL: test28: 708; SSE4: # %bb.0: # %entry 709; SSE4-NEXT: pmaxsb %xmm2, %xmm0 710; SSE4-NEXT: pmaxsb %xmm3, %xmm1 711; SSE4-NEXT: retq 712; 713; AVX1-LABEL: test28: 714; AVX1: # %bb.0: # %entry 715; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 716; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 717; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 718; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 719; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 720; AVX1-NEXT: retq 721; 722; AVX2-LABEL: test28: 723; AVX2: # %bb.0: # %entry 724; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 725; AVX2-NEXT: retq 726; 727; AVX512F-LABEL: test28: 728; AVX512F: # %bb.0: # %entry 729; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 730; AVX512F-NEXT: retq 731entry: 732 %cmp = icmp sge <32 x i8> %a, %b 733 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 734 ret <32 x i8> %sel 735} 736 737define <32 x i8> @test29(<32 x i8> %a, <32 x i8> %b) { 738; SSE-LABEL: test29: 739; SSE: # %bb.0: # %entry 740; SSE-NEXT: pminub %xmm2, %xmm0 741; SSE-NEXT: pminub %xmm3, %xmm1 742; SSE-NEXT: retq 743; 744; AVX1-LABEL: test29: 745; AVX1: # %bb.0: # %entry 746; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 747; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 748; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 749; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 750; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 751; AVX1-NEXT: retq 752; 753; AVX2-LABEL: test29: 754; AVX2: # %bb.0: # %entry 755; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 756; AVX2-NEXT: retq 757; 758; AVX512F-LABEL: test29: 759; AVX512F: # %bb.0: # %entry 760; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 761; AVX512F-NEXT: retq 762entry: 763 %cmp = icmp ult <32 x i8> %a, %b 764 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 765 ret <32 x i8> %sel 766} 767 768define <32 x i8> @test30(<32 x i8> %a, <32 x i8> %b) { 769; SSE-LABEL: test30: 770; SSE: # %bb.0: # %entry 771; SSE-NEXT: pminub %xmm2, %xmm0 772; SSE-NEXT: pminub %xmm3, %xmm1 773; SSE-NEXT: retq 774; 775; AVX1-LABEL: test30: 776; AVX1: # %bb.0: # %entry 777; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 778; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 779; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 780; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 781; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 782; AVX1-NEXT: retq 783; 784; AVX2-LABEL: test30: 785; AVX2: # %bb.0: # %entry 786; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 787; AVX2-NEXT: retq 788; 789; AVX512F-LABEL: test30: 790; AVX512F: # %bb.0: # %entry 791; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 792; AVX512F-NEXT: retq 793entry: 794 %cmp = icmp ule <32 x i8> %a, %b 795 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 796 ret <32 x i8> %sel 797} 798 799define <32 x i8> @test31(<32 x i8> %a, <32 x i8> %b) { 800; SSE-LABEL: test31: 801; SSE: # %bb.0: # %entry 802; SSE-NEXT: pmaxub %xmm2, %xmm0 803; SSE-NEXT: pmaxub %xmm3, %xmm1 804; SSE-NEXT: retq 805; 806; AVX1-LABEL: test31: 807; AVX1: # %bb.0: # %entry 808; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 809; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 810; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 811; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 812; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 813; AVX1-NEXT: retq 814; 815; AVX2-LABEL: test31: 816; AVX2: # %bb.0: # %entry 817; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 818; AVX2-NEXT: retq 819; 820; AVX512F-LABEL: test31: 821; AVX512F: # %bb.0: # %entry 822; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 823; AVX512F-NEXT: retq 824entry: 825 %cmp = icmp ugt <32 x i8> %a, %b 826 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 827 ret <32 x i8> %sel 828} 829 830define <32 x i8> @test32(<32 x i8> %a, <32 x i8> %b) { 831; SSE-LABEL: test32: 832; SSE: # %bb.0: # %entry 833; SSE-NEXT: pmaxub %xmm2, %xmm0 834; SSE-NEXT: pmaxub %xmm3, %xmm1 835; SSE-NEXT: retq 836; 837; AVX1-LABEL: test32: 838; AVX1: # %bb.0: # %entry 839; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 840; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 841; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 842; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 843; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 844; AVX1-NEXT: retq 845; 846; AVX2-LABEL: test32: 847; AVX2: # %bb.0: # %entry 848; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 849; AVX2-NEXT: retq 850; 851; AVX512F-LABEL: test32: 852; AVX512F: # %bb.0: # %entry 853; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 854; AVX512F-NEXT: retq 855entry: 856 %cmp = icmp uge <32 x i8> %a, %b 857 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 858 ret <32 x i8> %sel 859} 860 861define <16 x i16> @test33(<16 x i16> %a, <16 x i16> %b) { 862; SSE-LABEL: test33: 863; SSE: # %bb.0: # %entry 864; SSE-NEXT: pminsw %xmm2, %xmm0 865; SSE-NEXT: pminsw %xmm3, %xmm1 866; SSE-NEXT: retq 867; 868; AVX1-LABEL: test33: 869; AVX1: # %bb.0: # %entry 870; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 871; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 872; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 873; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 874; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 875; AVX1-NEXT: retq 876; 877; AVX2-LABEL: test33: 878; AVX2: # %bb.0: # %entry 879; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 880; AVX2-NEXT: retq 881; 882; AVX512F-LABEL: test33: 883; AVX512F: # %bb.0: # %entry 884; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 885; AVX512F-NEXT: retq 886entry: 887 %cmp = icmp slt <16 x i16> %a, %b 888 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 889 ret <16 x i16> %sel 890} 891 892define <16 x i16> @test34(<16 x i16> %a, <16 x i16> %b) { 893; SSE-LABEL: test34: 894; SSE: # %bb.0: # %entry 895; SSE-NEXT: pminsw %xmm2, %xmm0 896; SSE-NEXT: pminsw %xmm3, %xmm1 897; SSE-NEXT: retq 898; 899; AVX1-LABEL: test34: 900; AVX1: # %bb.0: # %entry 901; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 902; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 903; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 904; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 905; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 906; AVX1-NEXT: retq 907; 908; AVX2-LABEL: test34: 909; AVX2: # %bb.0: # %entry 910; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 911; AVX2-NEXT: retq 912; 913; AVX512F-LABEL: test34: 914; AVX512F: # %bb.0: # %entry 915; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 916; AVX512F-NEXT: retq 917entry: 918 %cmp = icmp sle <16 x i16> %a, %b 919 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 920 ret <16 x i16> %sel 921} 922 923define <16 x i16> @test35(<16 x i16> %a, <16 x i16> %b) { 924; SSE-LABEL: test35: 925; SSE: # %bb.0: # %entry 926; SSE-NEXT: pmaxsw %xmm2, %xmm0 927; SSE-NEXT: pmaxsw %xmm3, %xmm1 928; SSE-NEXT: retq 929; 930; AVX1-LABEL: test35: 931; AVX1: # %bb.0: # %entry 932; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 933; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 934; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 935; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 936; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 937; AVX1-NEXT: retq 938; 939; AVX2-LABEL: test35: 940; AVX2: # %bb.0: # %entry 941; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 942; AVX2-NEXT: retq 943; 944; AVX512F-LABEL: test35: 945; AVX512F: # %bb.0: # %entry 946; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 947; AVX512F-NEXT: retq 948entry: 949 %cmp = icmp sgt <16 x i16> %a, %b 950 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 951 ret <16 x i16> %sel 952} 953 954define <16 x i16> @test36(<16 x i16> %a, <16 x i16> %b) { 955; SSE-LABEL: test36: 956; SSE: # %bb.0: # %entry 957; SSE-NEXT: pmaxsw %xmm2, %xmm0 958; SSE-NEXT: pmaxsw %xmm3, %xmm1 959; SSE-NEXT: retq 960; 961; AVX1-LABEL: test36: 962; AVX1: # %bb.0: # %entry 963; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 964; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 965; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 966; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 967; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 968; AVX1-NEXT: retq 969; 970; AVX2-LABEL: test36: 971; AVX2: # %bb.0: # %entry 972; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 973; AVX2-NEXT: retq 974; 975; AVX512F-LABEL: test36: 976; AVX512F: # %bb.0: # %entry 977; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 978; AVX512F-NEXT: retq 979entry: 980 %cmp = icmp sge <16 x i16> %a, %b 981 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 982 ret <16 x i16> %sel 983} 984 985define <16 x i16> @test37(<16 x i16> %a, <16 x i16> %b) { 986; SSE2-LABEL: test37: 987; SSE2: # %bb.0: # %entry 988; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 989; SSE2-NEXT: pxor %xmm4, %xmm2 990; SSE2-NEXT: pxor %xmm4, %xmm0 991; SSE2-NEXT: pminsw %xmm2, %xmm0 992; SSE2-NEXT: pxor %xmm4, %xmm0 993; SSE2-NEXT: pxor %xmm4, %xmm3 994; SSE2-NEXT: pxor %xmm4, %xmm1 995; SSE2-NEXT: pminsw %xmm3, %xmm1 996; SSE2-NEXT: pxor %xmm4, %xmm1 997; SSE2-NEXT: retq 998; 999; SSE4-LABEL: test37: 1000; SSE4: # %bb.0: # %entry 1001; SSE4-NEXT: pminuw %xmm2, %xmm0 1002; SSE4-NEXT: pminuw %xmm3, %xmm1 1003; SSE4-NEXT: retq 1004; 1005; AVX1-LABEL: test37: 1006; AVX1: # %bb.0: # %entry 1007; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1008; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1009; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 1010; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1011; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1012; AVX1-NEXT: retq 1013; 1014; AVX2-LABEL: test37: 1015; AVX2: # %bb.0: # %entry 1016; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1017; AVX2-NEXT: retq 1018; 1019; AVX512F-LABEL: test37: 1020; AVX512F: # %bb.0: # %entry 1021; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1022; AVX512F-NEXT: retq 1023entry: 1024 %cmp = icmp ult <16 x i16> %a, %b 1025 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1026 ret <16 x i16> %sel 1027} 1028 1029define <16 x i16> @test38(<16 x i16> %a, <16 x i16> %b) { 1030; SSE2-LABEL: test38: 1031; SSE2: # %bb.0: # %entry 1032; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 1033; SSE2-NEXT: pxor %xmm4, %xmm2 1034; SSE2-NEXT: pxor %xmm4, %xmm0 1035; SSE2-NEXT: pminsw %xmm2, %xmm0 1036; SSE2-NEXT: pxor %xmm4, %xmm0 1037; SSE2-NEXT: pxor %xmm4, %xmm3 1038; SSE2-NEXT: pxor %xmm4, %xmm1 1039; SSE2-NEXT: pminsw %xmm3, %xmm1 1040; SSE2-NEXT: pxor %xmm4, %xmm1 1041; SSE2-NEXT: retq 1042; 1043; SSE4-LABEL: test38: 1044; SSE4: # %bb.0: # %entry 1045; SSE4-NEXT: pminuw %xmm2, %xmm0 1046; SSE4-NEXT: pminuw %xmm3, %xmm1 1047; SSE4-NEXT: retq 1048; 1049; AVX1-LABEL: test38: 1050; AVX1: # %bb.0: # %entry 1051; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1052; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1053; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 1054; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1055; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1056; AVX1-NEXT: retq 1057; 1058; AVX2-LABEL: test38: 1059; AVX2: # %bb.0: # %entry 1060; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1061; AVX2-NEXT: retq 1062; 1063; AVX512F-LABEL: test38: 1064; AVX512F: # %bb.0: # %entry 1065; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1066; AVX512F-NEXT: retq 1067entry: 1068 %cmp = icmp ule <16 x i16> %a, %b 1069 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1070 ret <16 x i16> %sel 1071} 1072 1073define <16 x i16> @test39(<16 x i16> %a, <16 x i16> %b) { 1074; SSE2-LABEL: test39: 1075; SSE2: # %bb.0: # %entry 1076; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 1077; SSE2-NEXT: pxor %xmm4, %xmm2 1078; SSE2-NEXT: pxor %xmm4, %xmm0 1079; SSE2-NEXT: pmaxsw %xmm2, %xmm0 1080; SSE2-NEXT: pxor %xmm4, %xmm0 1081; SSE2-NEXT: pxor %xmm4, %xmm3 1082; SSE2-NEXT: pxor %xmm4, %xmm1 1083; SSE2-NEXT: pmaxsw %xmm3, %xmm1 1084; SSE2-NEXT: pxor %xmm4, %xmm1 1085; SSE2-NEXT: retq 1086; 1087; SSE4-LABEL: test39: 1088; SSE4: # %bb.0: # %entry 1089; SSE4-NEXT: pmaxuw %xmm2, %xmm0 1090; SSE4-NEXT: pmaxuw %xmm3, %xmm1 1091; SSE4-NEXT: retq 1092; 1093; AVX1-LABEL: test39: 1094; AVX1: # %bb.0: # %entry 1095; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1096; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1097; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 1098; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1099; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1100; AVX1-NEXT: retq 1101; 1102; AVX2-LABEL: test39: 1103; AVX2: # %bb.0: # %entry 1104; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1105; AVX2-NEXT: retq 1106; 1107; AVX512F-LABEL: test39: 1108; AVX512F: # %bb.0: # %entry 1109; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1110; AVX512F-NEXT: retq 1111entry: 1112 %cmp = icmp ugt <16 x i16> %a, %b 1113 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1114 ret <16 x i16> %sel 1115} 1116 1117define <16 x i16> @test40(<16 x i16> %a, <16 x i16> %b) { 1118; SSE2-LABEL: test40: 1119; SSE2: # %bb.0: # %entry 1120; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 1121; SSE2-NEXT: pxor %xmm4, %xmm2 1122; SSE2-NEXT: pxor %xmm4, %xmm0 1123; SSE2-NEXT: pmaxsw %xmm2, %xmm0 1124; SSE2-NEXT: pxor %xmm4, %xmm0 1125; SSE2-NEXT: pxor %xmm4, %xmm3 1126; SSE2-NEXT: pxor %xmm4, %xmm1 1127; SSE2-NEXT: pmaxsw %xmm3, %xmm1 1128; SSE2-NEXT: pxor %xmm4, %xmm1 1129; SSE2-NEXT: retq 1130; 1131; SSE4-LABEL: test40: 1132; SSE4: # %bb.0: # %entry 1133; SSE4-NEXT: pmaxuw %xmm2, %xmm0 1134; SSE4-NEXT: pmaxuw %xmm3, %xmm1 1135; SSE4-NEXT: retq 1136; 1137; AVX1-LABEL: test40: 1138; AVX1: # %bb.0: # %entry 1139; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1140; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1141; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 1142; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1143; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1144; AVX1-NEXT: retq 1145; 1146; AVX2-LABEL: test40: 1147; AVX2: # %bb.0: # %entry 1148; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1149; AVX2-NEXT: retq 1150; 1151; AVX512F-LABEL: test40: 1152; AVX512F: # %bb.0: # %entry 1153; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1154; AVX512F-NEXT: retq 1155entry: 1156 %cmp = icmp uge <16 x i16> %a, %b 1157 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1158 ret <16 x i16> %sel 1159} 1160 1161define <8 x i32> @test41(<8 x i32> %a, <8 x i32> %b) { 1162; SSE2-LABEL: test41: 1163; SSE2: # %bb.0: # %entry 1164; SSE2-NEXT: movdqa %xmm2, %xmm4 1165; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 1166; SSE2-NEXT: pand %xmm4, %xmm0 1167; SSE2-NEXT: pandn %xmm2, %xmm4 1168; SSE2-NEXT: por %xmm4, %xmm0 1169; SSE2-NEXT: movdqa %xmm3, %xmm2 1170; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 1171; SSE2-NEXT: pand %xmm2, %xmm1 1172; SSE2-NEXT: pandn %xmm3, %xmm2 1173; SSE2-NEXT: por %xmm2, %xmm1 1174; SSE2-NEXT: retq 1175; 1176; SSE4-LABEL: test41: 1177; SSE4: # %bb.0: # %entry 1178; SSE4-NEXT: pminsd %xmm2, %xmm0 1179; SSE4-NEXT: pminsd %xmm3, %xmm1 1180; SSE4-NEXT: retq 1181; 1182; AVX1-LABEL: test41: 1183; AVX1: # %bb.0: # %entry 1184; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1185; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1186; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 1187; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1188; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1189; AVX1-NEXT: retq 1190; 1191; AVX2-LABEL: test41: 1192; AVX2: # %bb.0: # %entry 1193; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1194; AVX2-NEXT: retq 1195; 1196; AVX512F-LABEL: test41: 1197; AVX512F: # %bb.0: # %entry 1198; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1199; AVX512F-NEXT: retq 1200entry: 1201 %cmp = icmp slt <8 x i32> %a, %b 1202 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1203 ret <8 x i32> %sel 1204} 1205 1206define <8 x i32> @test42(<8 x i32> %a, <8 x i32> %b) { 1207; SSE2-LABEL: test42: 1208; SSE2: # %bb.0: # %entry 1209; SSE2-NEXT: movdqa %xmm2, %xmm4 1210; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 1211; SSE2-NEXT: pand %xmm4, %xmm0 1212; SSE2-NEXT: pandn %xmm2, %xmm4 1213; SSE2-NEXT: por %xmm4, %xmm0 1214; SSE2-NEXT: movdqa %xmm3, %xmm2 1215; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 1216; SSE2-NEXT: pand %xmm2, %xmm1 1217; SSE2-NEXT: pandn %xmm3, %xmm2 1218; SSE2-NEXT: por %xmm2, %xmm1 1219; SSE2-NEXT: retq 1220; 1221; SSE4-LABEL: test42: 1222; SSE4: # %bb.0: # %entry 1223; SSE4-NEXT: pminsd %xmm2, %xmm0 1224; SSE4-NEXT: pminsd %xmm3, %xmm1 1225; SSE4-NEXT: retq 1226; 1227; AVX1-LABEL: test42: 1228; AVX1: # %bb.0: # %entry 1229; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1230; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1231; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 1232; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1233; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1234; AVX1-NEXT: retq 1235; 1236; AVX2-LABEL: test42: 1237; AVX2: # %bb.0: # %entry 1238; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1239; AVX2-NEXT: retq 1240; 1241; AVX512F-LABEL: test42: 1242; AVX512F: # %bb.0: # %entry 1243; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1244; AVX512F-NEXT: retq 1245entry: 1246 %cmp = icmp sle <8 x i32> %a, %b 1247 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1248 ret <8 x i32> %sel 1249} 1250 1251define <8 x i32> @test43(<8 x i32> %a, <8 x i32> %b) { 1252; SSE2-LABEL: test43: 1253; SSE2: # %bb.0: # %entry 1254; SSE2-NEXT: movdqa %xmm0, %xmm4 1255; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 1256; SSE2-NEXT: pand %xmm4, %xmm0 1257; SSE2-NEXT: pandn %xmm2, %xmm4 1258; SSE2-NEXT: por %xmm0, %xmm4 1259; SSE2-NEXT: movdqa %xmm1, %xmm2 1260; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 1261; SSE2-NEXT: pand %xmm2, %xmm1 1262; SSE2-NEXT: pandn %xmm3, %xmm2 1263; SSE2-NEXT: por %xmm1, %xmm2 1264; SSE2-NEXT: movdqa %xmm4, %xmm0 1265; SSE2-NEXT: movdqa %xmm2, %xmm1 1266; SSE2-NEXT: retq 1267; 1268; SSE4-LABEL: test43: 1269; SSE4: # %bb.0: # %entry 1270; SSE4-NEXT: pmaxsd %xmm2, %xmm0 1271; SSE4-NEXT: pmaxsd %xmm3, %xmm1 1272; SSE4-NEXT: retq 1273; 1274; AVX1-LABEL: test43: 1275; AVX1: # %bb.0: # %entry 1276; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1277; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1278; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 1279; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1280; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1281; AVX1-NEXT: retq 1282; 1283; AVX2-LABEL: test43: 1284; AVX2: # %bb.0: # %entry 1285; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1286; AVX2-NEXT: retq 1287; 1288; AVX512F-LABEL: test43: 1289; AVX512F: # %bb.0: # %entry 1290; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1291; AVX512F-NEXT: retq 1292entry: 1293 %cmp = icmp sgt <8 x i32> %a, %b 1294 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1295 ret <8 x i32> %sel 1296} 1297 1298define <8 x i32> @test44(<8 x i32> %a, <8 x i32> %b) { 1299; SSE2-LABEL: test44: 1300; SSE2: # %bb.0: # %entry 1301; SSE2-NEXT: movdqa %xmm0, %xmm4 1302; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 1303; SSE2-NEXT: pand %xmm4, %xmm0 1304; SSE2-NEXT: pandn %xmm2, %xmm4 1305; SSE2-NEXT: por %xmm0, %xmm4 1306; SSE2-NEXT: movdqa %xmm1, %xmm2 1307; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 1308; SSE2-NEXT: pand %xmm2, %xmm1 1309; SSE2-NEXT: pandn %xmm3, %xmm2 1310; SSE2-NEXT: por %xmm1, %xmm2 1311; SSE2-NEXT: movdqa %xmm4, %xmm0 1312; SSE2-NEXT: movdqa %xmm2, %xmm1 1313; SSE2-NEXT: retq 1314; 1315; SSE4-LABEL: test44: 1316; SSE4: # %bb.0: # %entry 1317; SSE4-NEXT: pmaxsd %xmm2, %xmm0 1318; SSE4-NEXT: pmaxsd %xmm3, %xmm1 1319; SSE4-NEXT: retq 1320; 1321; AVX1-LABEL: test44: 1322; AVX1: # %bb.0: # %entry 1323; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1324; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1325; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 1326; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1327; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1328; AVX1-NEXT: retq 1329; 1330; AVX2-LABEL: test44: 1331; AVX2: # %bb.0: # %entry 1332; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1333; AVX2-NEXT: retq 1334; 1335; AVX512F-LABEL: test44: 1336; AVX512F: # %bb.0: # %entry 1337; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1338; AVX512F-NEXT: retq 1339entry: 1340 %cmp = icmp sge <8 x i32> %a, %b 1341 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1342 ret <8 x i32> %sel 1343} 1344 1345define <8 x i32> @test45(<8 x i32> %a, <8 x i32> %b) { 1346; SSE2-LABEL: test45: 1347; SSE2: # %bb.0: # %entry 1348; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 1349; SSE2-NEXT: movdqa %xmm0, %xmm5 1350; SSE2-NEXT: pxor %xmm4, %xmm5 1351; SSE2-NEXT: movdqa %xmm2, %xmm6 1352; SSE2-NEXT: pxor %xmm4, %xmm6 1353; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 1354; SSE2-NEXT: pand %xmm6, %xmm0 1355; SSE2-NEXT: pandn %xmm2, %xmm6 1356; SSE2-NEXT: por %xmm6, %xmm0 1357; SSE2-NEXT: movdqa %xmm1, %xmm2 1358; SSE2-NEXT: pxor %xmm4, %xmm2 1359; SSE2-NEXT: pxor %xmm3, %xmm4 1360; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 1361; SSE2-NEXT: pand %xmm4, %xmm1 1362; SSE2-NEXT: pandn %xmm3, %xmm4 1363; SSE2-NEXT: por %xmm4, %xmm1 1364; SSE2-NEXT: retq 1365; 1366; SSE4-LABEL: test45: 1367; SSE4: # %bb.0: # %entry 1368; SSE4-NEXT: pminud %xmm2, %xmm0 1369; SSE4-NEXT: pminud %xmm3, %xmm1 1370; SSE4-NEXT: retq 1371; 1372; AVX1-LABEL: test45: 1373; AVX1: # %bb.0: # %entry 1374; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1375; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1376; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 1377; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 1378; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1379; AVX1-NEXT: retq 1380; 1381; AVX2-LABEL: test45: 1382; AVX2: # %bb.0: # %entry 1383; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 1384; AVX2-NEXT: retq 1385; 1386; AVX512F-LABEL: test45: 1387; AVX512F: # %bb.0: # %entry 1388; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0 1389; AVX512F-NEXT: retq 1390entry: 1391 %cmp = icmp ult <8 x i32> %a, %b 1392 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1393 ret <8 x i32> %sel 1394} 1395 1396define <8 x i32> @test46(<8 x i32> %a, <8 x i32> %b) { 1397; SSE2-LABEL: test46: 1398; SSE2: # %bb.0: # %entry 1399; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 1400; SSE2-NEXT: movdqa %xmm0, %xmm5 1401; SSE2-NEXT: pxor %xmm4, %xmm5 1402; SSE2-NEXT: movdqa %xmm2, %xmm6 1403; SSE2-NEXT: pxor %xmm4, %xmm6 1404; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 1405; SSE2-NEXT: pand %xmm6, %xmm0 1406; SSE2-NEXT: pandn %xmm2, %xmm6 1407; SSE2-NEXT: por %xmm6, %xmm0 1408; SSE2-NEXT: movdqa %xmm1, %xmm2 1409; SSE2-NEXT: pxor %xmm4, %xmm2 1410; SSE2-NEXT: pxor %xmm3, %xmm4 1411; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 1412; SSE2-NEXT: pand %xmm4, %xmm1 1413; SSE2-NEXT: pandn %xmm3, %xmm4 1414; SSE2-NEXT: por %xmm4, %xmm1 1415; SSE2-NEXT: retq 1416; 1417; SSE4-LABEL: test46: 1418; SSE4: # %bb.0: # %entry 1419; SSE4-NEXT: pminud %xmm2, %xmm0 1420; SSE4-NEXT: pminud %xmm3, %xmm1 1421; SSE4-NEXT: retq 1422; 1423; AVX1-LABEL: test46: 1424; AVX1: # %bb.0: # %entry 1425; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1426; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1427; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 1428; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 1429; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1430; AVX1-NEXT: retq 1431; 1432; AVX2-LABEL: test46: 1433; AVX2: # %bb.0: # %entry 1434; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 1435; AVX2-NEXT: retq 1436; 1437; AVX512F-LABEL: test46: 1438; AVX512F: # %bb.0: # %entry 1439; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0 1440; AVX512F-NEXT: retq 1441entry: 1442 %cmp = icmp ule <8 x i32> %a, %b 1443 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1444 ret <8 x i32> %sel 1445} 1446 1447define <8 x i32> @test47(<8 x i32> %a, <8 x i32> %b) { 1448; SSE2-LABEL: test47: 1449; SSE2: # %bb.0: # %entry 1450; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 1451; SSE2-NEXT: movdqa %xmm2, %xmm6 1452; SSE2-NEXT: pxor %xmm5, %xmm6 1453; SSE2-NEXT: movdqa %xmm0, %xmm4 1454; SSE2-NEXT: pxor %xmm5, %xmm4 1455; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 1456; SSE2-NEXT: pand %xmm4, %xmm0 1457; SSE2-NEXT: pandn %xmm2, %xmm4 1458; SSE2-NEXT: por %xmm0, %xmm4 1459; SSE2-NEXT: movdqa %xmm3, %xmm0 1460; SSE2-NEXT: pxor %xmm5, %xmm0 1461; SSE2-NEXT: pxor %xmm1, %xmm5 1462; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 1463; SSE2-NEXT: pand %xmm5, %xmm1 1464; SSE2-NEXT: pandn %xmm3, %xmm5 1465; SSE2-NEXT: por %xmm5, %xmm1 1466; SSE2-NEXT: movdqa %xmm4, %xmm0 1467; SSE2-NEXT: retq 1468; 1469; SSE4-LABEL: test47: 1470; SSE4: # %bb.0: # %entry 1471; SSE4-NEXT: pmaxud %xmm2, %xmm0 1472; SSE4-NEXT: pmaxud %xmm3, %xmm1 1473; SSE4-NEXT: retq 1474; 1475; AVX1-LABEL: test47: 1476; AVX1: # %bb.0: # %entry 1477; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1478; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1479; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 1480; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 1481; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1482; AVX1-NEXT: retq 1483; 1484; AVX2-LABEL: test47: 1485; AVX2: # %bb.0: # %entry 1486; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1487; AVX2-NEXT: retq 1488; 1489; AVX512F-LABEL: test47: 1490; AVX512F: # %bb.0: # %entry 1491; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1492; AVX512F-NEXT: retq 1493entry: 1494 %cmp = icmp ugt <8 x i32> %a, %b 1495 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1496 ret <8 x i32> %sel 1497} 1498 1499define <8 x i32> @test48(<8 x i32> %a, <8 x i32> %b) { 1500; SSE2-LABEL: test48: 1501; SSE2: # %bb.0: # %entry 1502; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 1503; SSE2-NEXT: movdqa %xmm2, %xmm6 1504; SSE2-NEXT: pxor %xmm5, %xmm6 1505; SSE2-NEXT: movdqa %xmm0, %xmm4 1506; SSE2-NEXT: pxor %xmm5, %xmm4 1507; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 1508; SSE2-NEXT: pand %xmm4, %xmm0 1509; SSE2-NEXT: pandn %xmm2, %xmm4 1510; SSE2-NEXT: por %xmm0, %xmm4 1511; SSE2-NEXT: movdqa %xmm3, %xmm0 1512; SSE2-NEXT: pxor %xmm5, %xmm0 1513; SSE2-NEXT: pxor %xmm1, %xmm5 1514; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 1515; SSE2-NEXT: pand %xmm5, %xmm1 1516; SSE2-NEXT: pandn %xmm3, %xmm5 1517; SSE2-NEXT: por %xmm5, %xmm1 1518; SSE2-NEXT: movdqa %xmm4, %xmm0 1519; SSE2-NEXT: retq 1520; 1521; SSE4-LABEL: test48: 1522; SSE4: # %bb.0: # %entry 1523; SSE4-NEXT: pmaxud %xmm2, %xmm0 1524; SSE4-NEXT: pmaxud %xmm3, %xmm1 1525; SSE4-NEXT: retq 1526; 1527; AVX1-LABEL: test48: 1528; AVX1: # %bb.0: # %entry 1529; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1530; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1531; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 1532; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 1533; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1534; AVX1-NEXT: retq 1535; 1536; AVX2-LABEL: test48: 1537; AVX2: # %bb.0: # %entry 1538; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1539; AVX2-NEXT: retq 1540; 1541; AVX512F-LABEL: test48: 1542; AVX512F: # %bb.0: # %entry 1543; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1544; AVX512F-NEXT: retq 1545entry: 1546 %cmp = icmp uge <8 x i32> %a, %b 1547 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1548 ret <8 x i32> %sel 1549} 1550 1551define <16 x i8> @test49(<16 x i8> %a, <16 x i8> %b) { 1552; SSE2-LABEL: test49: 1553; SSE2: # %bb.0: # %entry 1554; SSE2-NEXT: movdqa %xmm0, %xmm2 1555; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 1556; SSE2-NEXT: pand %xmm2, %xmm0 1557; SSE2-NEXT: pandn %xmm1, %xmm2 1558; SSE2-NEXT: por %xmm0, %xmm2 1559; SSE2-NEXT: movdqa %xmm2, %xmm0 1560; SSE2-NEXT: retq 1561; 1562; SSE4-LABEL: test49: 1563; SSE4: # %bb.0: # %entry 1564; SSE4-NEXT: pmaxsb %xmm1, %xmm0 1565; SSE4-NEXT: retq 1566; 1567; AVX-LABEL: test49: 1568; AVX: # %bb.0: # %entry 1569; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 1570; AVX-NEXT: retq 1571entry: 1572 %cmp = icmp slt <16 x i8> %a, %b 1573 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1574 ret <16 x i8> %sel 1575} 1576 1577define <16 x i8> @test50(<16 x i8> %a, <16 x i8> %b) { 1578; SSE2-LABEL: test50: 1579; SSE2: # %bb.0: # %entry 1580; SSE2-NEXT: movdqa %xmm0, %xmm2 1581; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 1582; SSE2-NEXT: pand %xmm2, %xmm0 1583; SSE2-NEXT: pandn %xmm1, %xmm2 1584; SSE2-NEXT: por %xmm0, %xmm2 1585; SSE2-NEXT: movdqa %xmm2, %xmm0 1586; SSE2-NEXT: retq 1587; 1588; SSE4-LABEL: test50: 1589; SSE4: # %bb.0: # %entry 1590; SSE4-NEXT: pmaxsb %xmm1, %xmm0 1591; SSE4-NEXT: retq 1592; 1593; AVX-LABEL: test50: 1594; AVX: # %bb.0: # %entry 1595; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 1596; AVX-NEXT: retq 1597entry: 1598 %cmp = icmp sle <16 x i8> %a, %b 1599 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1600 ret <16 x i8> %sel 1601} 1602 1603define <16 x i8> @test51(<16 x i8> %a, <16 x i8> %b) { 1604; SSE2-LABEL: test51: 1605; SSE2: # %bb.0: # %entry 1606; SSE2-NEXT: movdqa %xmm1, %xmm2 1607; SSE2-NEXT: pcmpgtb %xmm0, %xmm2 1608; SSE2-NEXT: pand %xmm2, %xmm0 1609; SSE2-NEXT: pandn %xmm1, %xmm2 1610; SSE2-NEXT: por %xmm2, %xmm0 1611; SSE2-NEXT: retq 1612; 1613; SSE4-LABEL: test51: 1614; SSE4: # %bb.0: # %entry 1615; SSE4-NEXT: pminsb %xmm1, %xmm0 1616; SSE4-NEXT: retq 1617; 1618; AVX-LABEL: test51: 1619; AVX: # %bb.0: # %entry 1620; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0 1621; AVX-NEXT: retq 1622entry: 1623 %cmp = icmp sgt <16 x i8> %a, %b 1624 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1625 ret <16 x i8> %sel 1626} 1627 1628define <16 x i8> @test52(<16 x i8> %a, <16 x i8> %b) { 1629; SSE2-LABEL: test52: 1630; SSE2: # %bb.0: # %entry 1631; SSE2-NEXT: movdqa %xmm1, %xmm2 1632; SSE2-NEXT: pcmpgtb %xmm0, %xmm2 1633; SSE2-NEXT: pand %xmm2, %xmm0 1634; SSE2-NEXT: pandn %xmm1, %xmm2 1635; SSE2-NEXT: por %xmm2, %xmm0 1636; SSE2-NEXT: retq 1637; 1638; SSE4-LABEL: test52: 1639; SSE4: # %bb.0: # %entry 1640; SSE4-NEXT: pminsb %xmm1, %xmm0 1641; SSE4-NEXT: retq 1642; 1643; AVX-LABEL: test52: 1644; AVX: # %bb.0: # %entry 1645; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0 1646; AVX-NEXT: retq 1647entry: 1648 %cmp = icmp sge <16 x i8> %a, %b 1649 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1650 ret <16 x i8> %sel 1651} 1652 1653define <16 x i8> @test53(<16 x i8> %a, <16 x i8> %b) { 1654; SSE-LABEL: test53: 1655; SSE: # %bb.0: # %entry 1656; SSE-NEXT: pmaxub %xmm1, %xmm0 1657; SSE-NEXT: retq 1658; 1659; AVX-LABEL: test53: 1660; AVX: # %bb.0: # %entry 1661; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 1662; AVX-NEXT: retq 1663entry: 1664 %cmp = icmp ult <16 x i8> %a, %b 1665 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1666 ret <16 x i8> %sel 1667} 1668 1669define <16 x i8> @test54(<16 x i8> %a, <16 x i8> %b) { 1670; SSE-LABEL: test54: 1671; SSE: # %bb.0: # %entry 1672; SSE-NEXT: pmaxub %xmm1, %xmm0 1673; SSE-NEXT: retq 1674; 1675; AVX-LABEL: test54: 1676; AVX: # %bb.0: # %entry 1677; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 1678; AVX-NEXT: retq 1679entry: 1680 %cmp = icmp ule <16 x i8> %a, %b 1681 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1682 ret <16 x i8> %sel 1683} 1684 1685define <16 x i8> @test55(<16 x i8> %a, <16 x i8> %b) { 1686; SSE-LABEL: test55: 1687; SSE: # %bb.0: # %entry 1688; SSE-NEXT: pminub %xmm1, %xmm0 1689; SSE-NEXT: retq 1690; 1691; AVX-LABEL: test55: 1692; AVX: # %bb.0: # %entry 1693; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 1694; AVX-NEXT: retq 1695entry: 1696 %cmp = icmp ugt <16 x i8> %a, %b 1697 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1698 ret <16 x i8> %sel 1699} 1700 1701define <16 x i8> @test56(<16 x i8> %a, <16 x i8> %b) { 1702; SSE-LABEL: test56: 1703; SSE: # %bb.0: # %entry 1704; SSE-NEXT: pminub %xmm1, %xmm0 1705; SSE-NEXT: retq 1706; 1707; AVX-LABEL: test56: 1708; AVX: # %bb.0: # %entry 1709; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 1710; AVX-NEXT: retq 1711entry: 1712 %cmp = icmp uge <16 x i8> %a, %b 1713 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1714 ret <16 x i8> %sel 1715} 1716 1717define <8 x i16> @test57(<8 x i16> %a, <8 x i16> %b) { 1718; SSE-LABEL: test57: 1719; SSE: # %bb.0: # %entry 1720; SSE-NEXT: pmaxsw %xmm1, %xmm0 1721; SSE-NEXT: retq 1722; 1723; AVX-LABEL: test57: 1724; AVX: # %bb.0: # %entry 1725; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 1726; AVX-NEXT: retq 1727entry: 1728 %cmp = icmp slt <8 x i16> %a, %b 1729 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1730 ret <8 x i16> %sel 1731} 1732 1733define <8 x i16> @test58(<8 x i16> %a, <8 x i16> %b) { 1734; SSE-LABEL: test58: 1735; SSE: # %bb.0: # %entry 1736; SSE-NEXT: pmaxsw %xmm1, %xmm0 1737; SSE-NEXT: retq 1738; 1739; AVX-LABEL: test58: 1740; AVX: # %bb.0: # %entry 1741; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 1742; AVX-NEXT: retq 1743entry: 1744 %cmp = icmp sle <8 x i16> %a, %b 1745 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1746 ret <8 x i16> %sel 1747} 1748 1749define <8 x i16> @test59(<8 x i16> %a, <8 x i16> %b) { 1750; SSE-LABEL: test59: 1751; SSE: # %bb.0: # %entry 1752; SSE-NEXT: pminsw %xmm1, %xmm0 1753; SSE-NEXT: retq 1754; 1755; AVX-LABEL: test59: 1756; AVX: # %bb.0: # %entry 1757; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 1758; AVX-NEXT: retq 1759entry: 1760 %cmp = icmp sgt <8 x i16> %a, %b 1761 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1762 ret <8 x i16> %sel 1763} 1764 1765define <8 x i16> @test60(<8 x i16> %a, <8 x i16> %b) { 1766; SSE-LABEL: test60: 1767; SSE: # %bb.0: # %entry 1768; SSE-NEXT: pminsw %xmm1, %xmm0 1769; SSE-NEXT: retq 1770; 1771; AVX-LABEL: test60: 1772; AVX: # %bb.0: # %entry 1773; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 1774; AVX-NEXT: retq 1775entry: 1776 %cmp = icmp sge <8 x i16> %a, %b 1777 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1778 ret <8 x i16> %sel 1779} 1780 1781define <8 x i16> @test61(<8 x i16> %a, <8 x i16> %b) { 1782; SSE2-LABEL: test61: 1783; SSE2: # %bb.0: # %entry 1784; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 1785; SSE2-NEXT: pxor %xmm2, %xmm1 1786; SSE2-NEXT: pxor %xmm2, %xmm0 1787; SSE2-NEXT: pmaxsw %xmm1, %xmm0 1788; SSE2-NEXT: pxor %xmm2, %xmm0 1789; SSE2-NEXT: retq 1790; 1791; SSE4-LABEL: test61: 1792; SSE4: # %bb.0: # %entry 1793; SSE4-NEXT: pmaxuw %xmm1, %xmm0 1794; SSE4-NEXT: retq 1795; 1796; AVX-LABEL: test61: 1797; AVX: # %bb.0: # %entry 1798; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1799; AVX-NEXT: retq 1800entry: 1801 %cmp = icmp ult <8 x i16> %a, %b 1802 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1803 ret <8 x i16> %sel 1804} 1805 1806define <8 x i16> @test62(<8 x i16> %a, <8 x i16> %b) { 1807; SSE2-LABEL: test62: 1808; SSE2: # %bb.0: # %entry 1809; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 1810; SSE2-NEXT: pxor %xmm2, %xmm1 1811; SSE2-NEXT: pxor %xmm2, %xmm0 1812; SSE2-NEXT: pmaxsw %xmm1, %xmm0 1813; SSE2-NEXT: pxor %xmm2, %xmm0 1814; SSE2-NEXT: retq 1815; 1816; SSE4-LABEL: test62: 1817; SSE4: # %bb.0: # %entry 1818; SSE4-NEXT: pmaxuw %xmm1, %xmm0 1819; SSE4-NEXT: retq 1820; 1821; AVX-LABEL: test62: 1822; AVX: # %bb.0: # %entry 1823; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1824; AVX-NEXT: retq 1825entry: 1826 %cmp = icmp ule <8 x i16> %a, %b 1827 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1828 ret <8 x i16> %sel 1829} 1830 1831define <8 x i16> @test63(<8 x i16> %a, <8 x i16> %b) { 1832; SSE2-LABEL: test63: 1833; SSE2: # %bb.0: # %entry 1834; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 1835; SSE2-NEXT: pxor %xmm2, %xmm1 1836; SSE2-NEXT: pxor %xmm2, %xmm0 1837; SSE2-NEXT: pminsw %xmm1, %xmm0 1838; SSE2-NEXT: pxor %xmm2, %xmm0 1839; SSE2-NEXT: retq 1840; 1841; SSE4-LABEL: test63: 1842; SSE4: # %bb.0: # %entry 1843; SSE4-NEXT: pminuw %xmm1, %xmm0 1844; SSE4-NEXT: retq 1845; 1846; AVX-LABEL: test63: 1847; AVX: # %bb.0: # %entry 1848; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1849; AVX-NEXT: retq 1850entry: 1851 %cmp = icmp ugt <8 x i16> %a, %b 1852 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1853 ret <8 x i16> %sel 1854} 1855 1856define <8 x i16> @test64(<8 x i16> %a, <8 x i16> %b) { 1857; SSE2-LABEL: test64: 1858; SSE2: # %bb.0: # %entry 1859; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 1860; SSE2-NEXT: pxor %xmm2, %xmm1 1861; SSE2-NEXT: pxor %xmm2, %xmm0 1862; SSE2-NEXT: pminsw %xmm1, %xmm0 1863; SSE2-NEXT: pxor %xmm2, %xmm0 1864; SSE2-NEXT: retq 1865; 1866; SSE4-LABEL: test64: 1867; SSE4: # %bb.0: # %entry 1868; SSE4-NEXT: pminuw %xmm1, %xmm0 1869; SSE4-NEXT: retq 1870; 1871; AVX-LABEL: test64: 1872; AVX: # %bb.0: # %entry 1873; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1874; AVX-NEXT: retq 1875entry: 1876 %cmp = icmp uge <8 x i16> %a, %b 1877 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1878 ret <8 x i16> %sel 1879} 1880 1881define <4 x i32> @test65(<4 x i32> %a, <4 x i32> %b) { 1882; SSE2-LABEL: test65: 1883; SSE2: # %bb.0: # %entry 1884; SSE2-NEXT: movdqa %xmm0, %xmm2 1885; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 1886; SSE2-NEXT: pand %xmm2, %xmm0 1887; SSE2-NEXT: pandn %xmm1, %xmm2 1888; SSE2-NEXT: por %xmm0, %xmm2 1889; SSE2-NEXT: movdqa %xmm2, %xmm0 1890; SSE2-NEXT: retq 1891; 1892; SSE4-LABEL: test65: 1893; SSE4: # %bb.0: # %entry 1894; SSE4-NEXT: pmaxsd %xmm1, %xmm0 1895; SSE4-NEXT: retq 1896; 1897; AVX-LABEL: test65: 1898; AVX: # %bb.0: # %entry 1899; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1900; AVX-NEXT: retq 1901entry: 1902 %cmp = icmp slt <4 x i32> %a, %b 1903 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 1904 ret <4 x i32> %sel 1905} 1906 1907define <4 x i32> @test66(<4 x i32> %a, <4 x i32> %b) { 1908; SSE2-LABEL: test66: 1909; SSE2: # %bb.0: # %entry 1910; SSE2-NEXT: movdqa %xmm0, %xmm2 1911; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 1912; SSE2-NEXT: pand %xmm2, %xmm0 1913; SSE2-NEXT: pandn %xmm1, %xmm2 1914; SSE2-NEXT: por %xmm0, %xmm2 1915; SSE2-NEXT: movdqa %xmm2, %xmm0 1916; SSE2-NEXT: retq 1917; 1918; SSE4-LABEL: test66: 1919; SSE4: # %bb.0: # %entry 1920; SSE4-NEXT: pmaxsd %xmm1, %xmm0 1921; SSE4-NEXT: retq 1922; 1923; AVX-LABEL: test66: 1924; AVX: # %bb.0: # %entry 1925; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1926; AVX-NEXT: retq 1927entry: 1928 %cmp = icmp sle <4 x i32> %a, %b 1929 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 1930 ret <4 x i32> %sel 1931} 1932 1933define <4 x i32> @test67(<4 x i32> %a, <4 x i32> %b) { 1934; SSE2-LABEL: test67: 1935; SSE2: # %bb.0: # %entry 1936; SSE2-NEXT: movdqa %xmm1, %xmm2 1937; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 1938; SSE2-NEXT: pand %xmm2, %xmm0 1939; SSE2-NEXT: pandn %xmm1, %xmm2 1940; SSE2-NEXT: por %xmm2, %xmm0 1941; SSE2-NEXT: retq 1942; 1943; SSE4-LABEL: test67: 1944; SSE4: # %bb.0: # %entry 1945; SSE4-NEXT: pminsd %xmm1, %xmm0 1946; SSE4-NEXT: retq 1947; 1948; AVX-LABEL: test67: 1949; AVX: # %bb.0: # %entry 1950; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1951; AVX-NEXT: retq 1952entry: 1953 %cmp = icmp sgt <4 x i32> %a, %b 1954 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 1955 ret <4 x i32> %sel 1956} 1957 1958define <4 x i32> @test68(<4 x i32> %a, <4 x i32> %b) { 1959; SSE2-LABEL: test68: 1960; SSE2: # %bb.0: # %entry 1961; SSE2-NEXT: movdqa %xmm1, %xmm2 1962; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 1963; SSE2-NEXT: pand %xmm2, %xmm0 1964; SSE2-NEXT: pandn %xmm1, %xmm2 1965; SSE2-NEXT: por %xmm2, %xmm0 1966; SSE2-NEXT: retq 1967; 1968; SSE4-LABEL: test68: 1969; SSE4: # %bb.0: # %entry 1970; SSE4-NEXT: pminsd %xmm1, %xmm0 1971; SSE4-NEXT: retq 1972; 1973; AVX-LABEL: test68: 1974; AVX: # %bb.0: # %entry 1975; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1976; AVX-NEXT: retq 1977entry: 1978 %cmp = icmp sge <4 x i32> %a, %b 1979 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 1980 ret <4 x i32> %sel 1981} 1982 1983define <4 x i32> @test69(<4 x i32> %a, <4 x i32> %b) { 1984; SSE2-LABEL: test69: 1985; SSE2: # %bb.0: # %entry 1986; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 1987; SSE2-NEXT: movdqa %xmm1, %xmm3 1988; SSE2-NEXT: pxor %xmm2, %xmm3 1989; SSE2-NEXT: pxor %xmm0, %xmm2 1990; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 1991; SSE2-NEXT: pand %xmm2, %xmm0 1992; SSE2-NEXT: pandn %xmm1, %xmm2 1993; SSE2-NEXT: por %xmm2, %xmm0 1994; SSE2-NEXT: retq 1995; 1996; SSE4-LABEL: test69: 1997; SSE4: # %bb.0: # %entry 1998; SSE4-NEXT: pmaxud %xmm1, %xmm0 1999; SSE4-NEXT: retq 2000; 2001; AVX-LABEL: test69: 2002; AVX: # %bb.0: # %entry 2003; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 2004; AVX-NEXT: retq 2005entry: 2006 %cmp = icmp ult <4 x i32> %a, %b 2007 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2008 ret <4 x i32> %sel 2009} 2010 2011define <4 x i32> @test70(<4 x i32> %a, <4 x i32> %b) { 2012; SSE2-LABEL: test70: 2013; SSE2: # %bb.0: # %entry 2014; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 2015; SSE2-NEXT: movdqa %xmm1, %xmm3 2016; SSE2-NEXT: pxor %xmm2, %xmm3 2017; SSE2-NEXT: pxor %xmm0, %xmm2 2018; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2019; SSE2-NEXT: pand %xmm2, %xmm0 2020; SSE2-NEXT: pandn %xmm1, %xmm2 2021; SSE2-NEXT: por %xmm2, %xmm0 2022; SSE2-NEXT: retq 2023; 2024; SSE4-LABEL: test70: 2025; SSE4: # %bb.0: # %entry 2026; SSE4-NEXT: pmaxud %xmm1, %xmm0 2027; SSE4-NEXT: retq 2028; 2029; AVX-LABEL: test70: 2030; AVX: # %bb.0: # %entry 2031; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 2032; AVX-NEXT: retq 2033entry: 2034 %cmp = icmp ule <4 x i32> %a, %b 2035 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2036 ret <4 x i32> %sel 2037} 2038 2039define <4 x i32> @test71(<4 x i32> %a, <4 x i32> %b) { 2040; SSE2-LABEL: test71: 2041; SSE2: # %bb.0: # %entry 2042; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 2043; SSE2-NEXT: movdqa %xmm0, %xmm3 2044; SSE2-NEXT: pxor %xmm2, %xmm3 2045; SSE2-NEXT: pxor %xmm1, %xmm2 2046; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2047; SSE2-NEXT: pand %xmm2, %xmm0 2048; SSE2-NEXT: pandn %xmm1, %xmm2 2049; SSE2-NEXT: por %xmm2, %xmm0 2050; SSE2-NEXT: retq 2051; 2052; SSE4-LABEL: test71: 2053; SSE4: # %bb.0: # %entry 2054; SSE4-NEXT: pminud %xmm1, %xmm0 2055; SSE4-NEXT: retq 2056; 2057; AVX-LABEL: test71: 2058; AVX: # %bb.0: # %entry 2059; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 2060; AVX-NEXT: retq 2061entry: 2062 %cmp = icmp ugt <4 x i32> %a, %b 2063 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2064 ret <4 x i32> %sel 2065} 2066 2067define <4 x i32> @test72(<4 x i32> %a, <4 x i32> %b) { 2068; SSE2-LABEL: test72: 2069; SSE2: # %bb.0: # %entry 2070; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 2071; SSE2-NEXT: movdqa %xmm0, %xmm3 2072; SSE2-NEXT: pxor %xmm2, %xmm3 2073; SSE2-NEXT: pxor %xmm1, %xmm2 2074; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2075; SSE2-NEXT: pand %xmm2, %xmm0 2076; SSE2-NEXT: pandn %xmm1, %xmm2 2077; SSE2-NEXT: por %xmm2, %xmm0 2078; SSE2-NEXT: retq 2079; 2080; SSE4-LABEL: test72: 2081; SSE4: # %bb.0: # %entry 2082; SSE4-NEXT: pminud %xmm1, %xmm0 2083; SSE4-NEXT: retq 2084; 2085; AVX-LABEL: test72: 2086; AVX: # %bb.0: # %entry 2087; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 2088; AVX-NEXT: retq 2089entry: 2090 %cmp = icmp uge <4 x i32> %a, %b 2091 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2092 ret <4 x i32> %sel 2093} 2094 2095define <32 x i8> @test73(<32 x i8> %a, <32 x i8> %b) { 2096; SSE2-LABEL: test73: 2097; SSE2: # %bb.0: # %entry 2098; SSE2-NEXT: movdqa %xmm0, %xmm4 2099; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 2100; SSE2-NEXT: pand %xmm4, %xmm0 2101; SSE2-NEXT: pandn %xmm2, %xmm4 2102; SSE2-NEXT: por %xmm0, %xmm4 2103; SSE2-NEXT: movdqa %xmm1, %xmm2 2104; SSE2-NEXT: pcmpgtb %xmm3, %xmm2 2105; SSE2-NEXT: pand %xmm2, %xmm1 2106; SSE2-NEXT: pandn %xmm3, %xmm2 2107; SSE2-NEXT: por %xmm1, %xmm2 2108; SSE2-NEXT: movdqa %xmm4, %xmm0 2109; SSE2-NEXT: movdqa %xmm2, %xmm1 2110; SSE2-NEXT: retq 2111; 2112; SSE4-LABEL: test73: 2113; SSE4: # %bb.0: # %entry 2114; SSE4-NEXT: pmaxsb %xmm2, %xmm0 2115; SSE4-NEXT: pmaxsb %xmm3, %xmm1 2116; SSE4-NEXT: retq 2117; 2118; AVX1-LABEL: test73: 2119; AVX1: # %bb.0: # %entry 2120; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2121; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2122; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 2123; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 2124; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2125; AVX1-NEXT: retq 2126; 2127; AVX2-LABEL: test73: 2128; AVX2: # %bb.0: # %entry 2129; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2130; AVX2-NEXT: retq 2131; 2132; AVX512F-LABEL: test73: 2133; AVX512F: # %bb.0: # %entry 2134; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2135; AVX512F-NEXT: retq 2136entry: 2137 %cmp = icmp slt <32 x i8> %a, %b 2138 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2139 ret <32 x i8> %sel 2140} 2141 2142define <32 x i8> @test74(<32 x i8> %a, <32 x i8> %b) { 2143; SSE2-LABEL: test74: 2144; SSE2: # %bb.0: # %entry 2145; SSE2-NEXT: movdqa %xmm0, %xmm4 2146; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 2147; SSE2-NEXT: pand %xmm4, %xmm0 2148; SSE2-NEXT: pandn %xmm2, %xmm4 2149; SSE2-NEXT: por %xmm0, %xmm4 2150; SSE2-NEXT: movdqa %xmm1, %xmm2 2151; SSE2-NEXT: pcmpgtb %xmm3, %xmm2 2152; SSE2-NEXT: pand %xmm2, %xmm1 2153; SSE2-NEXT: pandn %xmm3, %xmm2 2154; SSE2-NEXT: por %xmm1, %xmm2 2155; SSE2-NEXT: movdqa %xmm4, %xmm0 2156; SSE2-NEXT: movdqa %xmm2, %xmm1 2157; SSE2-NEXT: retq 2158; 2159; SSE4-LABEL: test74: 2160; SSE4: # %bb.0: # %entry 2161; SSE4-NEXT: pmaxsb %xmm2, %xmm0 2162; SSE4-NEXT: pmaxsb %xmm3, %xmm1 2163; SSE4-NEXT: retq 2164; 2165; AVX1-LABEL: test74: 2166; AVX1: # %bb.0: # %entry 2167; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2168; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2169; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 2170; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 2171; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2172; AVX1-NEXT: retq 2173; 2174; AVX2-LABEL: test74: 2175; AVX2: # %bb.0: # %entry 2176; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2177; AVX2-NEXT: retq 2178; 2179; AVX512F-LABEL: test74: 2180; AVX512F: # %bb.0: # %entry 2181; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2182; AVX512F-NEXT: retq 2183entry: 2184 %cmp = icmp sle <32 x i8> %a, %b 2185 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2186 ret <32 x i8> %sel 2187} 2188 2189define <32 x i8> @test75(<32 x i8> %a, <32 x i8> %b) { 2190; SSE2-LABEL: test75: 2191; SSE2: # %bb.0: # %entry 2192; SSE2-NEXT: movdqa %xmm2, %xmm4 2193; SSE2-NEXT: pcmpgtb %xmm0, %xmm4 2194; SSE2-NEXT: pand %xmm4, %xmm0 2195; SSE2-NEXT: pandn %xmm2, %xmm4 2196; SSE2-NEXT: por %xmm4, %xmm0 2197; SSE2-NEXT: movdqa %xmm3, %xmm2 2198; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 2199; SSE2-NEXT: pand %xmm2, %xmm1 2200; SSE2-NEXT: pandn %xmm3, %xmm2 2201; SSE2-NEXT: por %xmm2, %xmm1 2202; SSE2-NEXT: retq 2203; 2204; SSE4-LABEL: test75: 2205; SSE4: # %bb.0: # %entry 2206; SSE4-NEXT: pminsb %xmm2, %xmm0 2207; SSE4-NEXT: pminsb %xmm3, %xmm1 2208; SSE4-NEXT: retq 2209; 2210; AVX1-LABEL: test75: 2211; AVX1: # %bb.0: # %entry 2212; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2213; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2214; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 2215; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 2216; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2217; AVX1-NEXT: retq 2218; 2219; AVX2-LABEL: test75: 2220; AVX2: # %bb.0: # %entry 2221; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2222; AVX2-NEXT: retq 2223; 2224; AVX512F-LABEL: test75: 2225; AVX512F: # %bb.0: # %entry 2226; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2227; AVX512F-NEXT: retq 2228entry: 2229 %cmp = icmp sgt <32 x i8> %a, %b 2230 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2231 ret <32 x i8> %sel 2232} 2233 2234define <32 x i8> @test76(<32 x i8> %a, <32 x i8> %b) { 2235; SSE2-LABEL: test76: 2236; SSE2: # %bb.0: # %entry 2237; SSE2-NEXT: movdqa %xmm2, %xmm4 2238; SSE2-NEXT: pcmpgtb %xmm0, %xmm4 2239; SSE2-NEXT: pand %xmm4, %xmm0 2240; SSE2-NEXT: pandn %xmm2, %xmm4 2241; SSE2-NEXT: por %xmm4, %xmm0 2242; SSE2-NEXT: movdqa %xmm3, %xmm2 2243; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 2244; SSE2-NEXT: pand %xmm2, %xmm1 2245; SSE2-NEXT: pandn %xmm3, %xmm2 2246; SSE2-NEXT: por %xmm2, %xmm1 2247; SSE2-NEXT: retq 2248; 2249; SSE4-LABEL: test76: 2250; SSE4: # %bb.0: # %entry 2251; SSE4-NEXT: pminsb %xmm2, %xmm0 2252; SSE4-NEXT: pminsb %xmm3, %xmm1 2253; SSE4-NEXT: retq 2254; 2255; AVX1-LABEL: test76: 2256; AVX1: # %bb.0: # %entry 2257; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2258; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2259; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 2260; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 2261; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2262; AVX1-NEXT: retq 2263; 2264; AVX2-LABEL: test76: 2265; AVX2: # %bb.0: # %entry 2266; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2267; AVX2-NEXT: retq 2268; 2269; AVX512F-LABEL: test76: 2270; AVX512F: # %bb.0: # %entry 2271; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2272; AVX512F-NEXT: retq 2273entry: 2274 %cmp = icmp sge <32 x i8> %a, %b 2275 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2276 ret <32 x i8> %sel 2277} 2278 2279define <32 x i8> @test77(<32 x i8> %a, <32 x i8> %b) { 2280; SSE-LABEL: test77: 2281; SSE: # %bb.0: # %entry 2282; SSE-NEXT: pmaxub %xmm2, %xmm0 2283; SSE-NEXT: pmaxub %xmm3, %xmm1 2284; SSE-NEXT: retq 2285; 2286; AVX1-LABEL: test77: 2287; AVX1: # %bb.0: # %entry 2288; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2289; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2290; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 2291; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 2292; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2293; AVX1-NEXT: retq 2294; 2295; AVX2-LABEL: test77: 2296; AVX2: # %bb.0: # %entry 2297; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2298; AVX2-NEXT: retq 2299; 2300; AVX512F-LABEL: test77: 2301; AVX512F: # %bb.0: # %entry 2302; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2303; AVX512F-NEXT: retq 2304entry: 2305 %cmp = icmp ult <32 x i8> %a, %b 2306 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2307 ret <32 x i8> %sel 2308} 2309 2310define <32 x i8> @test78(<32 x i8> %a, <32 x i8> %b) { 2311; SSE-LABEL: test78: 2312; SSE: # %bb.0: # %entry 2313; SSE-NEXT: pmaxub %xmm2, %xmm0 2314; SSE-NEXT: pmaxub %xmm3, %xmm1 2315; SSE-NEXT: retq 2316; 2317; AVX1-LABEL: test78: 2318; AVX1: # %bb.0: # %entry 2319; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2320; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2321; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 2322; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 2323; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2324; AVX1-NEXT: retq 2325; 2326; AVX2-LABEL: test78: 2327; AVX2: # %bb.0: # %entry 2328; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2329; AVX2-NEXT: retq 2330; 2331; AVX512F-LABEL: test78: 2332; AVX512F: # %bb.0: # %entry 2333; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2334; AVX512F-NEXT: retq 2335entry: 2336 %cmp = icmp ule <32 x i8> %a, %b 2337 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2338 ret <32 x i8> %sel 2339} 2340 2341define <32 x i8> @test79(<32 x i8> %a, <32 x i8> %b) { 2342; SSE-LABEL: test79: 2343; SSE: # %bb.0: # %entry 2344; SSE-NEXT: pminub %xmm2, %xmm0 2345; SSE-NEXT: pminub %xmm3, %xmm1 2346; SSE-NEXT: retq 2347; 2348; AVX1-LABEL: test79: 2349; AVX1: # %bb.0: # %entry 2350; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2351; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2352; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 2353; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 2354; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2355; AVX1-NEXT: retq 2356; 2357; AVX2-LABEL: test79: 2358; AVX2: # %bb.0: # %entry 2359; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 2360; AVX2-NEXT: retq 2361; 2362; AVX512F-LABEL: test79: 2363; AVX512F: # %bb.0: # %entry 2364; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 2365; AVX512F-NEXT: retq 2366entry: 2367 %cmp = icmp ugt <32 x i8> %a, %b 2368 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2369 ret <32 x i8> %sel 2370} 2371 2372define <32 x i8> @test80(<32 x i8> %a, <32 x i8> %b) { 2373; SSE-LABEL: test80: 2374; SSE: # %bb.0: # %entry 2375; SSE-NEXT: pminub %xmm2, %xmm0 2376; SSE-NEXT: pminub %xmm3, %xmm1 2377; SSE-NEXT: retq 2378; 2379; AVX1-LABEL: test80: 2380; AVX1: # %bb.0: # %entry 2381; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2382; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2383; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 2384; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 2385; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2386; AVX1-NEXT: retq 2387; 2388; AVX2-LABEL: test80: 2389; AVX2: # %bb.0: # %entry 2390; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 2391; AVX2-NEXT: retq 2392; 2393; AVX512F-LABEL: test80: 2394; AVX512F: # %bb.0: # %entry 2395; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 2396; AVX512F-NEXT: retq 2397entry: 2398 %cmp = icmp uge <32 x i8> %a, %b 2399 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2400 ret <32 x i8> %sel 2401} 2402 2403define <16 x i16> @test81(<16 x i16> %a, <16 x i16> %b) { 2404; SSE-LABEL: test81: 2405; SSE: # %bb.0: # %entry 2406; SSE-NEXT: pmaxsw %xmm2, %xmm0 2407; SSE-NEXT: pmaxsw %xmm3, %xmm1 2408; SSE-NEXT: retq 2409; 2410; AVX1-LABEL: test81: 2411; AVX1: # %bb.0: # %entry 2412; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2413; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2414; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 2415; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 2416; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2417; AVX1-NEXT: retq 2418; 2419; AVX2-LABEL: test81: 2420; AVX2: # %bb.0: # %entry 2421; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2422; AVX2-NEXT: retq 2423; 2424; AVX512F-LABEL: test81: 2425; AVX512F: # %bb.0: # %entry 2426; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2427; AVX512F-NEXT: retq 2428entry: 2429 %cmp = icmp slt <16 x i16> %a, %b 2430 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2431 ret <16 x i16> %sel 2432} 2433 2434define <16 x i16> @test82(<16 x i16> %a, <16 x i16> %b) { 2435; SSE-LABEL: test82: 2436; SSE: # %bb.0: # %entry 2437; SSE-NEXT: pmaxsw %xmm2, %xmm0 2438; SSE-NEXT: pmaxsw %xmm3, %xmm1 2439; SSE-NEXT: retq 2440; 2441; AVX1-LABEL: test82: 2442; AVX1: # %bb.0: # %entry 2443; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2444; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2445; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 2446; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 2447; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2448; AVX1-NEXT: retq 2449; 2450; AVX2-LABEL: test82: 2451; AVX2: # %bb.0: # %entry 2452; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2453; AVX2-NEXT: retq 2454; 2455; AVX512F-LABEL: test82: 2456; AVX512F: # %bb.0: # %entry 2457; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2458; AVX512F-NEXT: retq 2459entry: 2460 %cmp = icmp sle <16 x i16> %a, %b 2461 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2462 ret <16 x i16> %sel 2463} 2464 2465define <16 x i16> @test83(<16 x i16> %a, <16 x i16> %b) { 2466; SSE-LABEL: test83: 2467; SSE: # %bb.0: # %entry 2468; SSE-NEXT: pminsw %xmm2, %xmm0 2469; SSE-NEXT: pminsw %xmm3, %xmm1 2470; SSE-NEXT: retq 2471; 2472; AVX1-LABEL: test83: 2473; AVX1: # %bb.0: # %entry 2474; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2475; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2476; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 2477; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 2478; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2479; AVX1-NEXT: retq 2480; 2481; AVX2-LABEL: test83: 2482; AVX2: # %bb.0: # %entry 2483; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2484; AVX2-NEXT: retq 2485; 2486; AVX512F-LABEL: test83: 2487; AVX512F: # %bb.0: # %entry 2488; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2489; AVX512F-NEXT: retq 2490entry: 2491 %cmp = icmp sgt <16 x i16> %a, %b 2492 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2493 ret <16 x i16> %sel 2494} 2495 2496define <16 x i16> @test84(<16 x i16> %a, <16 x i16> %b) { 2497; SSE-LABEL: test84: 2498; SSE: # %bb.0: # %entry 2499; SSE-NEXT: pminsw %xmm2, %xmm0 2500; SSE-NEXT: pminsw %xmm3, %xmm1 2501; SSE-NEXT: retq 2502; 2503; AVX1-LABEL: test84: 2504; AVX1: # %bb.0: # %entry 2505; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2506; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2507; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 2508; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 2509; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2510; AVX1-NEXT: retq 2511; 2512; AVX2-LABEL: test84: 2513; AVX2: # %bb.0: # %entry 2514; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2515; AVX2-NEXT: retq 2516; 2517; AVX512F-LABEL: test84: 2518; AVX512F: # %bb.0: # %entry 2519; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2520; AVX512F-NEXT: retq 2521entry: 2522 %cmp = icmp sge <16 x i16> %a, %b 2523 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2524 ret <16 x i16> %sel 2525} 2526 2527define <16 x i16> @test85(<16 x i16> %a, <16 x i16> %b) { 2528; SSE2-LABEL: test85: 2529; SSE2: # %bb.0: # %entry 2530; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 2531; SSE2-NEXT: pxor %xmm4, %xmm2 2532; SSE2-NEXT: pxor %xmm4, %xmm0 2533; SSE2-NEXT: pmaxsw %xmm2, %xmm0 2534; SSE2-NEXT: pxor %xmm4, %xmm0 2535; SSE2-NEXT: pxor %xmm4, %xmm3 2536; SSE2-NEXT: pxor %xmm4, %xmm1 2537; SSE2-NEXT: pmaxsw %xmm3, %xmm1 2538; SSE2-NEXT: pxor %xmm4, %xmm1 2539; SSE2-NEXT: retq 2540; 2541; SSE4-LABEL: test85: 2542; SSE4: # %bb.0: # %entry 2543; SSE4-NEXT: pmaxuw %xmm2, %xmm0 2544; SSE4-NEXT: pmaxuw %xmm3, %xmm1 2545; SSE4-NEXT: retq 2546; 2547; AVX1-LABEL: test85: 2548; AVX1: # %bb.0: # %entry 2549; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2550; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2551; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 2552; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 2553; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2554; AVX1-NEXT: retq 2555; 2556; AVX2-LABEL: test85: 2557; AVX2: # %bb.0: # %entry 2558; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2559; AVX2-NEXT: retq 2560; 2561; AVX512F-LABEL: test85: 2562; AVX512F: # %bb.0: # %entry 2563; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2564; AVX512F-NEXT: retq 2565entry: 2566 %cmp = icmp ult <16 x i16> %a, %b 2567 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2568 ret <16 x i16> %sel 2569} 2570 2571define <16 x i16> @test86(<16 x i16> %a, <16 x i16> %b) { 2572; SSE2-LABEL: test86: 2573; SSE2: # %bb.0: # %entry 2574; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 2575; SSE2-NEXT: pxor %xmm4, %xmm2 2576; SSE2-NEXT: pxor %xmm4, %xmm0 2577; SSE2-NEXT: pmaxsw %xmm2, %xmm0 2578; SSE2-NEXT: pxor %xmm4, %xmm0 2579; SSE2-NEXT: pxor %xmm4, %xmm3 2580; SSE2-NEXT: pxor %xmm4, %xmm1 2581; SSE2-NEXT: pmaxsw %xmm3, %xmm1 2582; SSE2-NEXT: pxor %xmm4, %xmm1 2583; SSE2-NEXT: retq 2584; 2585; SSE4-LABEL: test86: 2586; SSE4: # %bb.0: # %entry 2587; SSE4-NEXT: pmaxuw %xmm2, %xmm0 2588; SSE4-NEXT: pmaxuw %xmm3, %xmm1 2589; SSE4-NEXT: retq 2590; 2591; AVX1-LABEL: test86: 2592; AVX1: # %bb.0: # %entry 2593; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2594; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2595; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 2596; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 2597; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2598; AVX1-NEXT: retq 2599; 2600; AVX2-LABEL: test86: 2601; AVX2: # %bb.0: # %entry 2602; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2603; AVX2-NEXT: retq 2604; 2605; AVX512F-LABEL: test86: 2606; AVX512F: # %bb.0: # %entry 2607; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2608; AVX512F-NEXT: retq 2609entry: 2610 %cmp = icmp ule <16 x i16> %a, %b 2611 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2612 ret <16 x i16> %sel 2613} 2614 2615define <16 x i16> @test87(<16 x i16> %a, <16 x i16> %b) { 2616; SSE2-LABEL: test87: 2617; SSE2: # %bb.0: # %entry 2618; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 2619; SSE2-NEXT: pxor %xmm4, %xmm2 2620; SSE2-NEXT: pxor %xmm4, %xmm0 2621; SSE2-NEXT: pminsw %xmm2, %xmm0 2622; SSE2-NEXT: pxor %xmm4, %xmm0 2623; SSE2-NEXT: pxor %xmm4, %xmm3 2624; SSE2-NEXT: pxor %xmm4, %xmm1 2625; SSE2-NEXT: pminsw %xmm3, %xmm1 2626; SSE2-NEXT: pxor %xmm4, %xmm1 2627; SSE2-NEXT: retq 2628; 2629; SSE4-LABEL: test87: 2630; SSE4: # %bb.0: # %entry 2631; SSE4-NEXT: pminuw %xmm2, %xmm0 2632; SSE4-NEXT: pminuw %xmm3, %xmm1 2633; SSE4-NEXT: retq 2634; 2635; AVX1-LABEL: test87: 2636; AVX1: # %bb.0: # %entry 2637; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2638; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2639; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 2640; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 2641; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2642; AVX1-NEXT: retq 2643; 2644; AVX2-LABEL: test87: 2645; AVX2: # %bb.0: # %entry 2646; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2647; AVX2-NEXT: retq 2648; 2649; AVX512F-LABEL: test87: 2650; AVX512F: # %bb.0: # %entry 2651; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2652; AVX512F-NEXT: retq 2653entry: 2654 %cmp = icmp ugt <16 x i16> %a, %b 2655 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2656 ret <16 x i16> %sel 2657} 2658 2659define <16 x i16> @test88(<16 x i16> %a, <16 x i16> %b) { 2660; SSE2-LABEL: test88: 2661; SSE2: # %bb.0: # %entry 2662; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 2663; SSE2-NEXT: pxor %xmm4, %xmm2 2664; SSE2-NEXT: pxor %xmm4, %xmm0 2665; SSE2-NEXT: pminsw %xmm2, %xmm0 2666; SSE2-NEXT: pxor %xmm4, %xmm0 2667; SSE2-NEXT: pxor %xmm4, %xmm3 2668; SSE2-NEXT: pxor %xmm4, %xmm1 2669; SSE2-NEXT: pminsw %xmm3, %xmm1 2670; SSE2-NEXT: pxor %xmm4, %xmm1 2671; SSE2-NEXT: retq 2672; 2673; SSE4-LABEL: test88: 2674; SSE4: # %bb.0: # %entry 2675; SSE4-NEXT: pminuw %xmm2, %xmm0 2676; SSE4-NEXT: pminuw %xmm3, %xmm1 2677; SSE4-NEXT: retq 2678; 2679; AVX1-LABEL: test88: 2680; AVX1: # %bb.0: # %entry 2681; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2682; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2683; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 2684; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 2685; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2686; AVX1-NEXT: retq 2687; 2688; AVX2-LABEL: test88: 2689; AVX2: # %bb.0: # %entry 2690; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2691; AVX2-NEXT: retq 2692; 2693; AVX512F-LABEL: test88: 2694; AVX512F: # %bb.0: # %entry 2695; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2696; AVX512F-NEXT: retq 2697entry: 2698 %cmp = icmp uge <16 x i16> %a, %b 2699 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2700 ret <16 x i16> %sel 2701} 2702 2703define <8 x i32> @test89(<8 x i32> %a, <8 x i32> %b) { 2704; SSE2-LABEL: test89: 2705; SSE2: # %bb.0: # %entry 2706; SSE2-NEXT: movdqa %xmm0, %xmm4 2707; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 2708; SSE2-NEXT: pand %xmm4, %xmm0 2709; SSE2-NEXT: pandn %xmm2, %xmm4 2710; SSE2-NEXT: por %xmm0, %xmm4 2711; SSE2-NEXT: movdqa %xmm1, %xmm2 2712; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2713; SSE2-NEXT: pand %xmm2, %xmm1 2714; SSE2-NEXT: pandn %xmm3, %xmm2 2715; SSE2-NEXT: por %xmm1, %xmm2 2716; SSE2-NEXT: movdqa %xmm4, %xmm0 2717; SSE2-NEXT: movdqa %xmm2, %xmm1 2718; SSE2-NEXT: retq 2719; 2720; SSE4-LABEL: test89: 2721; SSE4: # %bb.0: # %entry 2722; SSE4-NEXT: pmaxsd %xmm2, %xmm0 2723; SSE4-NEXT: pmaxsd %xmm3, %xmm1 2724; SSE4-NEXT: retq 2725; 2726; AVX1-LABEL: test89: 2727; AVX1: # %bb.0: # %entry 2728; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2729; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2730; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 2731; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2732; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2733; AVX1-NEXT: retq 2734; 2735; AVX2-LABEL: test89: 2736; AVX2: # %bb.0: # %entry 2737; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2738; AVX2-NEXT: retq 2739; 2740; AVX512F-LABEL: test89: 2741; AVX512F: # %bb.0: # %entry 2742; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2743; AVX512F-NEXT: retq 2744entry: 2745 %cmp = icmp slt <8 x i32> %a, %b 2746 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2747 ret <8 x i32> %sel 2748} 2749 2750define <8 x i32> @test90(<8 x i32> %a, <8 x i32> %b) { 2751; SSE2-LABEL: test90: 2752; SSE2: # %bb.0: # %entry 2753; SSE2-NEXT: movdqa %xmm0, %xmm4 2754; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 2755; SSE2-NEXT: pand %xmm4, %xmm0 2756; SSE2-NEXT: pandn %xmm2, %xmm4 2757; SSE2-NEXT: por %xmm0, %xmm4 2758; SSE2-NEXT: movdqa %xmm1, %xmm2 2759; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2760; SSE2-NEXT: pand %xmm2, %xmm1 2761; SSE2-NEXT: pandn %xmm3, %xmm2 2762; SSE2-NEXT: por %xmm1, %xmm2 2763; SSE2-NEXT: movdqa %xmm4, %xmm0 2764; SSE2-NEXT: movdqa %xmm2, %xmm1 2765; SSE2-NEXT: retq 2766; 2767; SSE4-LABEL: test90: 2768; SSE4: # %bb.0: # %entry 2769; SSE4-NEXT: pmaxsd %xmm2, %xmm0 2770; SSE4-NEXT: pmaxsd %xmm3, %xmm1 2771; SSE4-NEXT: retq 2772; 2773; AVX1-LABEL: test90: 2774; AVX1: # %bb.0: # %entry 2775; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2776; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2777; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 2778; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2779; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2780; AVX1-NEXT: retq 2781; 2782; AVX2-LABEL: test90: 2783; AVX2: # %bb.0: # %entry 2784; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2785; AVX2-NEXT: retq 2786; 2787; AVX512F-LABEL: test90: 2788; AVX512F: # %bb.0: # %entry 2789; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2790; AVX512F-NEXT: retq 2791entry: 2792 %cmp = icmp sle <8 x i32> %a, %b 2793 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2794 ret <8 x i32> %sel 2795} 2796 2797define <8 x i32> @test91(<8 x i32> %a, <8 x i32> %b) { 2798; SSE2-LABEL: test91: 2799; SSE2: # %bb.0: # %entry 2800; SSE2-NEXT: movdqa %xmm2, %xmm4 2801; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 2802; SSE2-NEXT: pand %xmm4, %xmm0 2803; SSE2-NEXT: pandn %xmm2, %xmm4 2804; SSE2-NEXT: por %xmm4, %xmm0 2805; SSE2-NEXT: movdqa %xmm3, %xmm2 2806; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 2807; SSE2-NEXT: pand %xmm2, %xmm1 2808; SSE2-NEXT: pandn %xmm3, %xmm2 2809; SSE2-NEXT: por %xmm2, %xmm1 2810; SSE2-NEXT: retq 2811; 2812; SSE4-LABEL: test91: 2813; SSE4: # %bb.0: # %entry 2814; SSE4-NEXT: pminsd %xmm2, %xmm0 2815; SSE4-NEXT: pminsd %xmm3, %xmm1 2816; SSE4-NEXT: retq 2817; 2818; AVX1-LABEL: test91: 2819; AVX1: # %bb.0: # %entry 2820; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2821; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2822; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 2823; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 2824; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2825; AVX1-NEXT: retq 2826; 2827; AVX2-LABEL: test91: 2828; AVX2: # %bb.0: # %entry 2829; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2830; AVX2-NEXT: retq 2831; 2832; AVX512F-LABEL: test91: 2833; AVX512F: # %bb.0: # %entry 2834; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2835; AVX512F-NEXT: retq 2836entry: 2837 %cmp = icmp sgt <8 x i32> %a, %b 2838 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2839 ret <8 x i32> %sel 2840} 2841 2842define <8 x i32> @test92(<8 x i32> %a, <8 x i32> %b) { 2843; SSE2-LABEL: test92: 2844; SSE2: # %bb.0: # %entry 2845; SSE2-NEXT: movdqa %xmm2, %xmm4 2846; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 2847; SSE2-NEXT: pand %xmm4, %xmm0 2848; SSE2-NEXT: pandn %xmm2, %xmm4 2849; SSE2-NEXT: por %xmm4, %xmm0 2850; SSE2-NEXT: movdqa %xmm3, %xmm2 2851; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 2852; SSE2-NEXT: pand %xmm2, %xmm1 2853; SSE2-NEXT: pandn %xmm3, %xmm2 2854; SSE2-NEXT: por %xmm2, %xmm1 2855; SSE2-NEXT: retq 2856; 2857; SSE4-LABEL: test92: 2858; SSE4: # %bb.0: # %entry 2859; SSE4-NEXT: pminsd %xmm2, %xmm0 2860; SSE4-NEXT: pminsd %xmm3, %xmm1 2861; SSE4-NEXT: retq 2862; 2863; AVX1-LABEL: test92: 2864; AVX1: # %bb.0: # %entry 2865; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2866; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2867; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 2868; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 2869; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2870; AVX1-NEXT: retq 2871; 2872; AVX2-LABEL: test92: 2873; AVX2: # %bb.0: # %entry 2874; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2875; AVX2-NEXT: retq 2876; 2877; AVX512F-LABEL: test92: 2878; AVX512F: # %bb.0: # %entry 2879; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2880; AVX512F-NEXT: retq 2881entry: 2882 %cmp = icmp sge <8 x i32> %a, %b 2883 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2884 ret <8 x i32> %sel 2885} 2886 2887define <8 x i32> @test93(<8 x i32> %a, <8 x i32> %b) { 2888; SSE2-LABEL: test93: 2889; SSE2: # %bb.0: # %entry 2890; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 2891; SSE2-NEXT: movdqa %xmm2, %xmm6 2892; SSE2-NEXT: pxor %xmm5, %xmm6 2893; SSE2-NEXT: movdqa %xmm0, %xmm4 2894; SSE2-NEXT: pxor %xmm5, %xmm4 2895; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 2896; SSE2-NEXT: pand %xmm4, %xmm0 2897; SSE2-NEXT: pandn %xmm2, %xmm4 2898; SSE2-NEXT: por %xmm0, %xmm4 2899; SSE2-NEXT: movdqa %xmm3, %xmm0 2900; SSE2-NEXT: pxor %xmm5, %xmm0 2901; SSE2-NEXT: pxor %xmm1, %xmm5 2902; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 2903; SSE2-NEXT: pand %xmm5, %xmm1 2904; SSE2-NEXT: pandn %xmm3, %xmm5 2905; SSE2-NEXT: por %xmm5, %xmm1 2906; SSE2-NEXT: movdqa %xmm4, %xmm0 2907; SSE2-NEXT: retq 2908; 2909; SSE4-LABEL: test93: 2910; SSE4: # %bb.0: # %entry 2911; SSE4-NEXT: pmaxud %xmm2, %xmm0 2912; SSE4-NEXT: pmaxud %xmm3, %xmm1 2913; SSE4-NEXT: retq 2914; 2915; AVX1-LABEL: test93: 2916; AVX1: # %bb.0: # %entry 2917; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2918; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2919; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 2920; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 2921; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2922; AVX1-NEXT: retq 2923; 2924; AVX2-LABEL: test93: 2925; AVX2: # %bb.0: # %entry 2926; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 2927; AVX2-NEXT: retq 2928; 2929; AVX512F-LABEL: test93: 2930; AVX512F: # %bb.0: # %entry 2931; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 2932; AVX512F-NEXT: retq 2933entry: 2934 %cmp = icmp ult <8 x i32> %a, %b 2935 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2936 ret <8 x i32> %sel 2937} 2938 2939define <8 x i32> @test94(<8 x i32> %a, <8 x i32> %b) { 2940; SSE2-LABEL: test94: 2941; SSE2: # %bb.0: # %entry 2942; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 2943; SSE2-NEXT: movdqa %xmm2, %xmm6 2944; SSE2-NEXT: pxor %xmm5, %xmm6 2945; SSE2-NEXT: movdqa %xmm0, %xmm4 2946; SSE2-NEXT: pxor %xmm5, %xmm4 2947; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 2948; SSE2-NEXT: pand %xmm4, %xmm0 2949; SSE2-NEXT: pandn %xmm2, %xmm4 2950; SSE2-NEXT: por %xmm0, %xmm4 2951; SSE2-NEXT: movdqa %xmm3, %xmm0 2952; SSE2-NEXT: pxor %xmm5, %xmm0 2953; SSE2-NEXT: pxor %xmm1, %xmm5 2954; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 2955; SSE2-NEXT: pand %xmm5, %xmm1 2956; SSE2-NEXT: pandn %xmm3, %xmm5 2957; SSE2-NEXT: por %xmm5, %xmm1 2958; SSE2-NEXT: movdqa %xmm4, %xmm0 2959; SSE2-NEXT: retq 2960; 2961; SSE4-LABEL: test94: 2962; SSE4: # %bb.0: # %entry 2963; SSE4-NEXT: pmaxud %xmm2, %xmm0 2964; SSE4-NEXT: pmaxud %xmm3, %xmm1 2965; SSE4-NEXT: retq 2966; 2967; AVX1-LABEL: test94: 2968; AVX1: # %bb.0: # %entry 2969; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2970; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2971; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 2972; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 2973; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2974; AVX1-NEXT: retq 2975; 2976; AVX2-LABEL: test94: 2977; AVX2: # %bb.0: # %entry 2978; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 2979; AVX2-NEXT: retq 2980; 2981; AVX512F-LABEL: test94: 2982; AVX512F: # %bb.0: # %entry 2983; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 2984; AVX512F-NEXT: retq 2985entry: 2986 %cmp = icmp ule <8 x i32> %a, %b 2987 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2988 ret <8 x i32> %sel 2989} 2990 2991define <8 x i32> @test95(<8 x i32> %a, <8 x i32> %b) { 2992; SSE2-LABEL: test95: 2993; SSE2: # %bb.0: # %entry 2994; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 2995; SSE2-NEXT: movdqa %xmm0, %xmm5 2996; SSE2-NEXT: pxor %xmm4, %xmm5 2997; SSE2-NEXT: movdqa %xmm2, %xmm6 2998; SSE2-NEXT: pxor %xmm4, %xmm6 2999; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 3000; SSE2-NEXT: pand %xmm6, %xmm0 3001; SSE2-NEXT: pandn %xmm2, %xmm6 3002; SSE2-NEXT: por %xmm6, %xmm0 3003; SSE2-NEXT: movdqa %xmm1, %xmm2 3004; SSE2-NEXT: pxor %xmm4, %xmm2 3005; SSE2-NEXT: pxor %xmm3, %xmm4 3006; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 3007; SSE2-NEXT: pand %xmm4, %xmm1 3008; SSE2-NEXT: pandn %xmm3, %xmm4 3009; SSE2-NEXT: por %xmm4, %xmm1 3010; SSE2-NEXT: retq 3011; 3012; SSE4-LABEL: test95: 3013; SSE4: # %bb.0: # %entry 3014; SSE4-NEXT: pminud %xmm2, %xmm0 3015; SSE4-NEXT: pminud %xmm3, %xmm1 3016; SSE4-NEXT: retq 3017; 3018; AVX1-LABEL: test95: 3019; AVX1: # %bb.0: # %entry 3020; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3021; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3022; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 3023; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 3024; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3025; AVX1-NEXT: retq 3026; 3027; AVX2-LABEL: test95: 3028; AVX2: # %bb.0: # %entry 3029; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 3030; AVX2-NEXT: retq 3031; 3032; AVX512F-LABEL: test95: 3033; AVX512F: # %bb.0: # %entry 3034; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0 3035; AVX512F-NEXT: retq 3036entry: 3037 %cmp = icmp ugt <8 x i32> %a, %b 3038 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3039 ret <8 x i32> %sel 3040} 3041 3042define <8 x i32> @test96(<8 x i32> %a, <8 x i32> %b) { 3043; SSE2-LABEL: test96: 3044; SSE2: # %bb.0: # %entry 3045; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 3046; SSE2-NEXT: movdqa %xmm0, %xmm5 3047; SSE2-NEXT: pxor %xmm4, %xmm5 3048; SSE2-NEXT: movdqa %xmm2, %xmm6 3049; SSE2-NEXT: pxor %xmm4, %xmm6 3050; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 3051; SSE2-NEXT: pand %xmm6, %xmm0 3052; SSE2-NEXT: pandn %xmm2, %xmm6 3053; SSE2-NEXT: por %xmm6, %xmm0 3054; SSE2-NEXT: movdqa %xmm1, %xmm2 3055; SSE2-NEXT: pxor %xmm4, %xmm2 3056; SSE2-NEXT: pxor %xmm3, %xmm4 3057; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 3058; SSE2-NEXT: pand %xmm4, %xmm1 3059; SSE2-NEXT: pandn %xmm3, %xmm4 3060; SSE2-NEXT: por %xmm4, %xmm1 3061; SSE2-NEXT: retq 3062; 3063; SSE4-LABEL: test96: 3064; SSE4: # %bb.0: # %entry 3065; SSE4-NEXT: pminud %xmm2, %xmm0 3066; SSE4-NEXT: pminud %xmm3, %xmm1 3067; SSE4-NEXT: retq 3068; 3069; AVX1-LABEL: test96: 3070; AVX1: # %bb.0: # %entry 3071; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3072; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3073; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 3074; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 3075; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3076; AVX1-NEXT: retq 3077; 3078; AVX2-LABEL: test96: 3079; AVX2: # %bb.0: # %entry 3080; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 3081; AVX2-NEXT: retq 3082; 3083; AVX512F-LABEL: test96: 3084; AVX512F: # %bb.0: # %entry 3085; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0 3086; AVX512F-NEXT: retq 3087entry: 3088 %cmp = icmp uge <8 x i32> %a, %b 3089 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3090 ret <8 x i32> %sel 3091} 3092 3093; ---------------------------- 3094 3095define <64 x i8> @test97(<64 x i8> %a, <64 x i8> %b) { 3096; SSE2-LABEL: test97: 3097; SSE2: # %bb.0: # %entry 3098; SSE2-NEXT: movdqa %xmm4, %xmm8 3099; SSE2-NEXT: pcmpgtb %xmm0, %xmm8 3100; SSE2-NEXT: pand %xmm8, %xmm0 3101; SSE2-NEXT: pandn %xmm4, %xmm8 3102; SSE2-NEXT: por %xmm8, %xmm0 3103; SSE2-NEXT: movdqa %xmm5, %xmm4 3104; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 3105; SSE2-NEXT: pand %xmm4, %xmm1 3106; SSE2-NEXT: pandn %xmm5, %xmm4 3107; SSE2-NEXT: por %xmm4, %xmm1 3108; SSE2-NEXT: movdqa %xmm6, %xmm4 3109; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 3110; SSE2-NEXT: pand %xmm4, %xmm2 3111; SSE2-NEXT: pandn %xmm6, %xmm4 3112; SSE2-NEXT: por %xmm4, %xmm2 3113; SSE2-NEXT: movdqa %xmm7, %xmm4 3114; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 3115; SSE2-NEXT: pand %xmm4, %xmm3 3116; SSE2-NEXT: pandn %xmm7, %xmm4 3117; SSE2-NEXT: por %xmm4, %xmm3 3118; SSE2-NEXT: retq 3119; 3120; SSE4-LABEL: test97: 3121; SSE4: # %bb.0: # %entry 3122; SSE4-NEXT: pminsb %xmm4, %xmm0 3123; SSE4-NEXT: pminsb %xmm5, %xmm1 3124; SSE4-NEXT: pminsb %xmm6, %xmm2 3125; SSE4-NEXT: pminsb %xmm7, %xmm3 3126; SSE4-NEXT: retq 3127; 3128; AVX1-LABEL: test97: 3129; AVX1: # %bb.0: # %entry 3130; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3131; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3132; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 3133; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 3134; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3135; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3136; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3137; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 3138; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 3139; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3140; AVX1-NEXT: retq 3141; 3142; AVX2-LABEL: test97: 3143; AVX2: # %bb.0: # %entry 3144; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 3145; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 3146; AVX2-NEXT: retq 3147; 3148; AVX512BW-LABEL: test97: 3149; AVX512BW: # %bb.0: # %entry 3150; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 3151; AVX512BW-NEXT: retq 3152entry: 3153 %cmp = icmp slt <64 x i8> %a, %b 3154 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3155 ret <64 x i8> %sel 3156} 3157 3158define <64 x i8> @test98(<64 x i8> %a, <64 x i8> %b) { 3159; SSE2-LABEL: test98: 3160; SSE2: # %bb.0: # %entry 3161; SSE2-NEXT: movdqa %xmm4, %xmm8 3162; SSE2-NEXT: pcmpgtb %xmm0, %xmm8 3163; SSE2-NEXT: pand %xmm8, %xmm0 3164; SSE2-NEXT: pandn %xmm4, %xmm8 3165; SSE2-NEXT: por %xmm8, %xmm0 3166; SSE2-NEXT: movdqa %xmm5, %xmm4 3167; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 3168; SSE2-NEXT: pand %xmm4, %xmm1 3169; SSE2-NEXT: pandn %xmm5, %xmm4 3170; SSE2-NEXT: por %xmm4, %xmm1 3171; SSE2-NEXT: movdqa %xmm6, %xmm4 3172; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 3173; SSE2-NEXT: pand %xmm4, %xmm2 3174; SSE2-NEXT: pandn %xmm6, %xmm4 3175; SSE2-NEXT: por %xmm4, %xmm2 3176; SSE2-NEXT: movdqa %xmm7, %xmm4 3177; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 3178; SSE2-NEXT: pand %xmm4, %xmm3 3179; SSE2-NEXT: pandn %xmm7, %xmm4 3180; SSE2-NEXT: por %xmm4, %xmm3 3181; SSE2-NEXT: retq 3182; 3183; SSE4-LABEL: test98: 3184; SSE4: # %bb.0: # %entry 3185; SSE4-NEXT: pminsb %xmm4, %xmm0 3186; SSE4-NEXT: pminsb %xmm5, %xmm1 3187; SSE4-NEXT: pminsb %xmm6, %xmm2 3188; SSE4-NEXT: pminsb %xmm7, %xmm3 3189; SSE4-NEXT: retq 3190; 3191; AVX1-LABEL: test98: 3192; AVX1: # %bb.0: # %entry 3193; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3194; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3195; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 3196; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 3197; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3198; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3199; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3200; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 3201; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 3202; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3203; AVX1-NEXT: retq 3204; 3205; AVX2-LABEL: test98: 3206; AVX2: # %bb.0: # %entry 3207; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 3208; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 3209; AVX2-NEXT: retq 3210; 3211; AVX512BW-LABEL: test98: 3212; AVX512BW: # %bb.0: # %entry 3213; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 3214; AVX512BW-NEXT: retq 3215entry: 3216 %cmp = icmp sle <64 x i8> %a, %b 3217 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3218 ret <64 x i8> %sel 3219} 3220 3221define <64 x i8> @test99(<64 x i8> %a, <64 x i8> %b) { 3222; SSE2-LABEL: test99: 3223; SSE2: # %bb.0: # %entry 3224; SSE2-NEXT: movdqa %xmm0, %xmm8 3225; SSE2-NEXT: pcmpgtb %xmm4, %xmm8 3226; SSE2-NEXT: pand %xmm8, %xmm0 3227; SSE2-NEXT: pandn %xmm4, %xmm8 3228; SSE2-NEXT: por %xmm0, %xmm8 3229; SSE2-NEXT: movdqa %xmm1, %xmm4 3230; SSE2-NEXT: pcmpgtb %xmm5, %xmm4 3231; SSE2-NEXT: pand %xmm4, %xmm1 3232; SSE2-NEXT: pandn %xmm5, %xmm4 3233; SSE2-NEXT: por %xmm1, %xmm4 3234; SSE2-NEXT: movdqa %xmm2, %xmm5 3235; SSE2-NEXT: pcmpgtb %xmm6, %xmm5 3236; SSE2-NEXT: pand %xmm5, %xmm2 3237; SSE2-NEXT: pandn %xmm6, %xmm5 3238; SSE2-NEXT: por %xmm2, %xmm5 3239; SSE2-NEXT: movdqa %xmm3, %xmm6 3240; SSE2-NEXT: pcmpgtb %xmm7, %xmm6 3241; SSE2-NEXT: pand %xmm6, %xmm3 3242; SSE2-NEXT: pandn %xmm7, %xmm6 3243; SSE2-NEXT: por %xmm3, %xmm6 3244; SSE2-NEXT: movdqa %xmm8, %xmm0 3245; SSE2-NEXT: movdqa %xmm4, %xmm1 3246; SSE2-NEXT: movdqa %xmm5, %xmm2 3247; SSE2-NEXT: movdqa %xmm6, %xmm3 3248; SSE2-NEXT: retq 3249; 3250; SSE4-LABEL: test99: 3251; SSE4: # %bb.0: # %entry 3252; SSE4-NEXT: pmaxsb %xmm4, %xmm0 3253; SSE4-NEXT: pmaxsb %xmm5, %xmm1 3254; SSE4-NEXT: pmaxsb %xmm6, %xmm2 3255; SSE4-NEXT: pmaxsb %xmm7, %xmm3 3256; SSE4-NEXT: retq 3257; 3258; AVX1-LABEL: test99: 3259; AVX1: # %bb.0: # %entry 3260; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3261; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3262; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 3263; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 3264; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3265; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3266; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3267; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 3268; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 3269; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3270; AVX1-NEXT: retq 3271; 3272; AVX2-LABEL: test99: 3273; AVX2: # %bb.0: # %entry 3274; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 3275; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 3276; AVX2-NEXT: retq 3277; 3278; AVX512BW-LABEL: test99: 3279; AVX512BW: # %bb.0: # %entry 3280; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 3281; AVX512BW-NEXT: retq 3282entry: 3283 %cmp = icmp sgt <64 x i8> %a, %b 3284 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3285 ret <64 x i8> %sel 3286} 3287 3288define <64 x i8> @test100(<64 x i8> %a, <64 x i8> %b) { 3289; SSE2-LABEL: test100: 3290; SSE2: # %bb.0: # %entry 3291; SSE2-NEXT: movdqa %xmm0, %xmm8 3292; SSE2-NEXT: pcmpgtb %xmm4, %xmm8 3293; SSE2-NEXT: pand %xmm8, %xmm0 3294; SSE2-NEXT: pandn %xmm4, %xmm8 3295; SSE2-NEXT: por %xmm0, %xmm8 3296; SSE2-NEXT: movdqa %xmm1, %xmm4 3297; SSE2-NEXT: pcmpgtb %xmm5, %xmm4 3298; SSE2-NEXT: pand %xmm4, %xmm1 3299; SSE2-NEXT: pandn %xmm5, %xmm4 3300; SSE2-NEXT: por %xmm1, %xmm4 3301; SSE2-NEXT: movdqa %xmm2, %xmm5 3302; SSE2-NEXT: pcmpgtb %xmm6, %xmm5 3303; SSE2-NEXT: pand %xmm5, %xmm2 3304; SSE2-NEXT: pandn %xmm6, %xmm5 3305; SSE2-NEXT: por %xmm2, %xmm5 3306; SSE2-NEXT: movdqa %xmm3, %xmm6 3307; SSE2-NEXT: pcmpgtb %xmm7, %xmm6 3308; SSE2-NEXT: pand %xmm6, %xmm3 3309; SSE2-NEXT: pandn %xmm7, %xmm6 3310; SSE2-NEXT: por %xmm3, %xmm6 3311; SSE2-NEXT: movdqa %xmm8, %xmm0 3312; SSE2-NEXT: movdqa %xmm4, %xmm1 3313; SSE2-NEXT: movdqa %xmm5, %xmm2 3314; SSE2-NEXT: movdqa %xmm6, %xmm3 3315; SSE2-NEXT: retq 3316; 3317; SSE4-LABEL: test100: 3318; SSE4: # %bb.0: # %entry 3319; SSE4-NEXT: pmaxsb %xmm4, %xmm0 3320; SSE4-NEXT: pmaxsb %xmm5, %xmm1 3321; SSE4-NEXT: pmaxsb %xmm6, %xmm2 3322; SSE4-NEXT: pmaxsb %xmm7, %xmm3 3323; SSE4-NEXT: retq 3324; 3325; AVX1-LABEL: test100: 3326; AVX1: # %bb.0: # %entry 3327; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3328; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3329; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 3330; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 3331; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3332; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3333; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3334; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 3335; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 3336; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3337; AVX1-NEXT: retq 3338; 3339; AVX2-LABEL: test100: 3340; AVX2: # %bb.0: # %entry 3341; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 3342; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 3343; AVX2-NEXT: retq 3344; 3345; AVX512BW-LABEL: test100: 3346; AVX512BW: # %bb.0: # %entry 3347; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 3348; AVX512BW-NEXT: retq 3349entry: 3350 %cmp = icmp sge <64 x i8> %a, %b 3351 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3352 ret <64 x i8> %sel 3353} 3354 3355define <64 x i8> @test101(<64 x i8> %a, <64 x i8> %b) { 3356; SSE-LABEL: test101: 3357; SSE: # %bb.0: # %entry 3358; SSE-NEXT: pminub %xmm4, %xmm0 3359; SSE-NEXT: pminub %xmm5, %xmm1 3360; SSE-NEXT: pminub %xmm6, %xmm2 3361; SSE-NEXT: pminub %xmm7, %xmm3 3362; SSE-NEXT: retq 3363; 3364; AVX1-LABEL: test101: 3365; AVX1: # %bb.0: # %entry 3366; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3367; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3368; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 3369; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 3370; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3371; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3372; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3373; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 3374; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 3375; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3376; AVX1-NEXT: retq 3377; 3378; AVX2-LABEL: test101: 3379; AVX2: # %bb.0: # %entry 3380; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 3381; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 3382; AVX2-NEXT: retq 3383; 3384; AVX512BW-LABEL: test101: 3385; AVX512BW: # %bb.0: # %entry 3386; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 3387; AVX512BW-NEXT: retq 3388entry: 3389 %cmp = icmp ult <64 x i8> %a, %b 3390 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3391 ret <64 x i8> %sel 3392} 3393 3394define <64 x i8> @test102(<64 x i8> %a, <64 x i8> %b) { 3395; SSE-LABEL: test102: 3396; SSE: # %bb.0: # %entry 3397; SSE-NEXT: pminub %xmm4, %xmm0 3398; SSE-NEXT: pminub %xmm5, %xmm1 3399; SSE-NEXT: pminub %xmm6, %xmm2 3400; SSE-NEXT: pminub %xmm7, %xmm3 3401; SSE-NEXT: retq 3402; 3403; AVX1-LABEL: test102: 3404; AVX1: # %bb.0: # %entry 3405; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3406; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3407; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 3408; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 3409; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3410; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3411; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3412; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 3413; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 3414; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3415; AVX1-NEXT: retq 3416; 3417; AVX2-LABEL: test102: 3418; AVX2: # %bb.0: # %entry 3419; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 3420; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 3421; AVX2-NEXT: retq 3422; 3423; AVX512BW-LABEL: test102: 3424; AVX512BW: # %bb.0: # %entry 3425; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 3426; AVX512BW-NEXT: retq 3427entry: 3428 %cmp = icmp ule <64 x i8> %a, %b 3429 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3430 ret <64 x i8> %sel 3431} 3432 3433define <64 x i8> @test103(<64 x i8> %a, <64 x i8> %b) { 3434; SSE-LABEL: test103: 3435; SSE: # %bb.0: # %entry 3436; SSE-NEXT: pmaxub %xmm4, %xmm0 3437; SSE-NEXT: pmaxub %xmm5, %xmm1 3438; SSE-NEXT: pmaxub %xmm6, %xmm2 3439; SSE-NEXT: pmaxub %xmm7, %xmm3 3440; SSE-NEXT: retq 3441; 3442; AVX1-LABEL: test103: 3443; AVX1: # %bb.0: # %entry 3444; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3445; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3446; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 3447; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 3448; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3449; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3450; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3451; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 3452; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 3453; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3454; AVX1-NEXT: retq 3455; 3456; AVX2-LABEL: test103: 3457; AVX2: # %bb.0: # %entry 3458; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 3459; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 3460; AVX2-NEXT: retq 3461; 3462; AVX512BW-LABEL: test103: 3463; AVX512BW: # %bb.0: # %entry 3464; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 3465; AVX512BW-NEXT: retq 3466entry: 3467 %cmp = icmp ugt <64 x i8> %a, %b 3468 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3469 ret <64 x i8> %sel 3470} 3471 3472define <64 x i8> @test104(<64 x i8> %a, <64 x i8> %b) { 3473; SSE-LABEL: test104: 3474; SSE: # %bb.0: # %entry 3475; SSE-NEXT: pmaxub %xmm4, %xmm0 3476; SSE-NEXT: pmaxub %xmm5, %xmm1 3477; SSE-NEXT: pmaxub %xmm6, %xmm2 3478; SSE-NEXT: pmaxub %xmm7, %xmm3 3479; SSE-NEXT: retq 3480; 3481; AVX1-LABEL: test104: 3482; AVX1: # %bb.0: # %entry 3483; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3484; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3485; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 3486; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 3487; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3488; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3489; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3490; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 3491; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 3492; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3493; AVX1-NEXT: retq 3494; 3495; AVX2-LABEL: test104: 3496; AVX2: # %bb.0: # %entry 3497; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 3498; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 3499; AVX2-NEXT: retq 3500; 3501; AVX512BW-LABEL: test104: 3502; AVX512BW: # %bb.0: # %entry 3503; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 3504; AVX512BW-NEXT: retq 3505entry: 3506 %cmp = icmp uge <64 x i8> %a, %b 3507 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3508 ret <64 x i8> %sel 3509} 3510 3511define <32 x i16> @test105(<32 x i16> %a, <32 x i16> %b) { 3512; SSE-LABEL: test105: 3513; SSE: # %bb.0: # %entry 3514; SSE-NEXT: pminsw %xmm4, %xmm0 3515; SSE-NEXT: pminsw %xmm5, %xmm1 3516; SSE-NEXT: pminsw %xmm6, %xmm2 3517; SSE-NEXT: pminsw %xmm7, %xmm3 3518; SSE-NEXT: retq 3519; 3520; AVX1-LABEL: test105: 3521; AVX1: # %bb.0: # %entry 3522; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3523; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3524; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 3525; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 3526; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3527; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3528; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3529; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 3530; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 3531; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3532; AVX1-NEXT: retq 3533; 3534; AVX2-LABEL: test105: 3535; AVX2: # %bb.0: # %entry 3536; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 3537; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 3538; AVX2-NEXT: retq 3539; 3540; AVX512BW-LABEL: test105: 3541; AVX512BW: # %bb.0: # %entry 3542; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 3543; AVX512BW-NEXT: retq 3544entry: 3545 %cmp = icmp slt <32 x i16> %a, %b 3546 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3547 ret <32 x i16> %sel 3548} 3549 3550define <32 x i16> @test106(<32 x i16> %a, <32 x i16> %b) { 3551; SSE-LABEL: test106: 3552; SSE: # %bb.0: # %entry 3553; SSE-NEXT: pminsw %xmm4, %xmm0 3554; SSE-NEXT: pminsw %xmm5, %xmm1 3555; SSE-NEXT: pminsw %xmm6, %xmm2 3556; SSE-NEXT: pminsw %xmm7, %xmm3 3557; SSE-NEXT: retq 3558; 3559; AVX1-LABEL: test106: 3560; AVX1: # %bb.0: # %entry 3561; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3562; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3563; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 3564; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 3565; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3566; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3567; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3568; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 3569; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 3570; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3571; AVX1-NEXT: retq 3572; 3573; AVX2-LABEL: test106: 3574; AVX2: # %bb.0: # %entry 3575; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 3576; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 3577; AVX2-NEXT: retq 3578; 3579; AVX512BW-LABEL: test106: 3580; AVX512BW: # %bb.0: # %entry 3581; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 3582; AVX512BW-NEXT: retq 3583entry: 3584 %cmp = icmp sle <32 x i16> %a, %b 3585 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3586 ret <32 x i16> %sel 3587} 3588 3589define <32 x i16> @test107(<32 x i16> %a, <32 x i16> %b) { 3590; SSE-LABEL: test107: 3591; SSE: # %bb.0: # %entry 3592; SSE-NEXT: pmaxsw %xmm4, %xmm0 3593; SSE-NEXT: pmaxsw %xmm5, %xmm1 3594; SSE-NEXT: pmaxsw %xmm6, %xmm2 3595; SSE-NEXT: pmaxsw %xmm7, %xmm3 3596; SSE-NEXT: retq 3597; 3598; AVX1-LABEL: test107: 3599; AVX1: # %bb.0: # %entry 3600; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3601; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3602; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 3603; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 3604; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3605; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3606; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3607; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 3608; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 3609; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3610; AVX1-NEXT: retq 3611; 3612; AVX2-LABEL: test107: 3613; AVX2: # %bb.0: # %entry 3614; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 3615; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 3616; AVX2-NEXT: retq 3617; 3618; AVX512BW-LABEL: test107: 3619; AVX512BW: # %bb.0: # %entry 3620; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 3621; AVX512BW-NEXT: retq 3622entry: 3623 %cmp = icmp sgt <32 x i16> %a, %b 3624 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3625 ret <32 x i16> %sel 3626} 3627 3628define <32 x i16> @test108(<32 x i16> %a, <32 x i16> %b) { 3629; SSE-LABEL: test108: 3630; SSE: # %bb.0: # %entry 3631; SSE-NEXT: pmaxsw %xmm4, %xmm0 3632; SSE-NEXT: pmaxsw %xmm5, %xmm1 3633; SSE-NEXT: pmaxsw %xmm6, %xmm2 3634; SSE-NEXT: pmaxsw %xmm7, %xmm3 3635; SSE-NEXT: retq 3636; 3637; AVX1-LABEL: test108: 3638; AVX1: # %bb.0: # %entry 3639; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3640; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3641; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 3642; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 3643; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3644; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3645; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3646; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 3647; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 3648; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3649; AVX1-NEXT: retq 3650; 3651; AVX2-LABEL: test108: 3652; AVX2: # %bb.0: # %entry 3653; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 3654; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 3655; AVX2-NEXT: retq 3656; 3657; AVX512BW-LABEL: test108: 3658; AVX512BW: # %bb.0: # %entry 3659; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 3660; AVX512BW-NEXT: retq 3661entry: 3662 %cmp = icmp sge <32 x i16> %a, %b 3663 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3664 ret <32 x i16> %sel 3665} 3666 3667define <32 x i16> @test109(<32 x i16> %a, <32 x i16> %b) { 3668; SSE2-LABEL: test109: 3669; SSE2: # %bb.0: # %entry 3670; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768] 3671; SSE2-NEXT: pxor %xmm8, %xmm4 3672; SSE2-NEXT: pxor %xmm8, %xmm0 3673; SSE2-NEXT: pminsw %xmm4, %xmm0 3674; SSE2-NEXT: pxor %xmm8, %xmm0 3675; SSE2-NEXT: pxor %xmm8, %xmm5 3676; SSE2-NEXT: pxor %xmm8, %xmm1 3677; SSE2-NEXT: pminsw %xmm5, %xmm1 3678; SSE2-NEXT: pxor %xmm8, %xmm1 3679; SSE2-NEXT: pxor %xmm8, %xmm6 3680; SSE2-NEXT: pxor %xmm8, %xmm2 3681; SSE2-NEXT: pminsw %xmm6, %xmm2 3682; SSE2-NEXT: pxor %xmm8, %xmm2 3683; SSE2-NEXT: pxor %xmm8, %xmm7 3684; SSE2-NEXT: pxor %xmm8, %xmm3 3685; SSE2-NEXT: pminsw %xmm7, %xmm3 3686; SSE2-NEXT: pxor %xmm8, %xmm3 3687; SSE2-NEXT: retq 3688; 3689; SSE4-LABEL: test109: 3690; SSE4: # %bb.0: # %entry 3691; SSE4-NEXT: pminuw %xmm4, %xmm0 3692; SSE4-NEXT: pminuw %xmm5, %xmm1 3693; SSE4-NEXT: pminuw %xmm6, %xmm2 3694; SSE4-NEXT: pminuw %xmm7, %xmm3 3695; SSE4-NEXT: retq 3696; 3697; AVX1-LABEL: test109: 3698; AVX1: # %bb.0: # %entry 3699; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3700; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3701; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 3702; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 3703; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3704; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3705; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3706; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 3707; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 3708; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3709; AVX1-NEXT: retq 3710; 3711; AVX2-LABEL: test109: 3712; AVX2: # %bb.0: # %entry 3713; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 3714; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 3715; AVX2-NEXT: retq 3716; 3717; AVX512BW-LABEL: test109: 3718; AVX512BW: # %bb.0: # %entry 3719; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 3720; AVX512BW-NEXT: retq 3721entry: 3722 %cmp = icmp ult <32 x i16> %a, %b 3723 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3724 ret <32 x i16> %sel 3725} 3726 3727define <32 x i16> @test110(<32 x i16> %a, <32 x i16> %b) { 3728; SSE2-LABEL: test110: 3729; SSE2: # %bb.0: # %entry 3730; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768] 3731; SSE2-NEXT: pxor %xmm8, %xmm4 3732; SSE2-NEXT: pxor %xmm8, %xmm0 3733; SSE2-NEXT: pminsw %xmm4, %xmm0 3734; SSE2-NEXT: pxor %xmm8, %xmm0 3735; SSE2-NEXT: pxor %xmm8, %xmm5 3736; SSE2-NEXT: pxor %xmm8, %xmm1 3737; SSE2-NEXT: pminsw %xmm5, %xmm1 3738; SSE2-NEXT: pxor %xmm8, %xmm1 3739; SSE2-NEXT: pxor %xmm8, %xmm6 3740; SSE2-NEXT: pxor %xmm8, %xmm2 3741; SSE2-NEXT: pminsw %xmm6, %xmm2 3742; SSE2-NEXT: pxor %xmm8, %xmm2 3743; SSE2-NEXT: pxor %xmm8, %xmm7 3744; SSE2-NEXT: pxor %xmm8, %xmm3 3745; SSE2-NEXT: pminsw %xmm7, %xmm3 3746; SSE2-NEXT: pxor %xmm8, %xmm3 3747; SSE2-NEXT: retq 3748; 3749; SSE4-LABEL: test110: 3750; SSE4: # %bb.0: # %entry 3751; SSE4-NEXT: pminuw %xmm4, %xmm0 3752; SSE4-NEXT: pminuw %xmm5, %xmm1 3753; SSE4-NEXT: pminuw %xmm6, %xmm2 3754; SSE4-NEXT: pminuw %xmm7, %xmm3 3755; SSE4-NEXT: retq 3756; 3757; AVX1-LABEL: test110: 3758; AVX1: # %bb.0: # %entry 3759; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3760; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3761; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 3762; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 3763; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3764; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3765; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3766; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 3767; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 3768; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3769; AVX1-NEXT: retq 3770; 3771; AVX2-LABEL: test110: 3772; AVX2: # %bb.0: # %entry 3773; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 3774; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 3775; AVX2-NEXT: retq 3776; 3777; AVX512BW-LABEL: test110: 3778; AVX512BW: # %bb.0: # %entry 3779; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 3780; AVX512BW-NEXT: retq 3781entry: 3782 %cmp = icmp ule <32 x i16> %a, %b 3783 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3784 ret <32 x i16> %sel 3785} 3786 3787define <32 x i16> @test111(<32 x i16> %a, <32 x i16> %b) { 3788; SSE2-LABEL: test111: 3789; SSE2: # %bb.0: # %entry 3790; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768] 3791; SSE2-NEXT: pxor %xmm8, %xmm4 3792; SSE2-NEXT: pxor %xmm8, %xmm0 3793; SSE2-NEXT: pmaxsw %xmm4, %xmm0 3794; SSE2-NEXT: pxor %xmm8, %xmm0 3795; SSE2-NEXT: pxor %xmm8, %xmm5 3796; SSE2-NEXT: pxor %xmm8, %xmm1 3797; SSE2-NEXT: pmaxsw %xmm5, %xmm1 3798; SSE2-NEXT: pxor %xmm8, %xmm1 3799; SSE2-NEXT: pxor %xmm8, %xmm6 3800; SSE2-NEXT: pxor %xmm8, %xmm2 3801; SSE2-NEXT: pmaxsw %xmm6, %xmm2 3802; SSE2-NEXT: pxor %xmm8, %xmm2 3803; SSE2-NEXT: pxor %xmm8, %xmm7 3804; SSE2-NEXT: pxor %xmm8, %xmm3 3805; SSE2-NEXT: pmaxsw %xmm7, %xmm3 3806; SSE2-NEXT: pxor %xmm8, %xmm3 3807; SSE2-NEXT: retq 3808; 3809; SSE4-LABEL: test111: 3810; SSE4: # %bb.0: # %entry 3811; SSE4-NEXT: pmaxuw %xmm4, %xmm0 3812; SSE4-NEXT: pmaxuw %xmm5, %xmm1 3813; SSE4-NEXT: pmaxuw %xmm6, %xmm2 3814; SSE4-NEXT: pmaxuw %xmm7, %xmm3 3815; SSE4-NEXT: retq 3816; 3817; AVX1-LABEL: test111: 3818; AVX1: # %bb.0: # %entry 3819; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3820; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3821; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 3822; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 3823; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3824; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3825; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3826; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 3827; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 3828; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3829; AVX1-NEXT: retq 3830; 3831; AVX2-LABEL: test111: 3832; AVX2: # %bb.0: # %entry 3833; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 3834; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 3835; AVX2-NEXT: retq 3836; 3837; AVX512BW-LABEL: test111: 3838; AVX512BW: # %bb.0: # %entry 3839; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 3840; AVX512BW-NEXT: retq 3841entry: 3842 %cmp = icmp ugt <32 x i16> %a, %b 3843 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3844 ret <32 x i16> %sel 3845} 3846 3847define <32 x i16> @test112(<32 x i16> %a, <32 x i16> %b) { 3848; SSE2-LABEL: test112: 3849; SSE2: # %bb.0: # %entry 3850; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768] 3851; SSE2-NEXT: pxor %xmm8, %xmm4 3852; SSE2-NEXT: pxor %xmm8, %xmm0 3853; SSE2-NEXT: pmaxsw %xmm4, %xmm0 3854; SSE2-NEXT: pxor %xmm8, %xmm0 3855; SSE2-NEXT: pxor %xmm8, %xmm5 3856; SSE2-NEXT: pxor %xmm8, %xmm1 3857; SSE2-NEXT: pmaxsw %xmm5, %xmm1 3858; SSE2-NEXT: pxor %xmm8, %xmm1 3859; SSE2-NEXT: pxor %xmm8, %xmm6 3860; SSE2-NEXT: pxor %xmm8, %xmm2 3861; SSE2-NEXT: pmaxsw %xmm6, %xmm2 3862; SSE2-NEXT: pxor %xmm8, %xmm2 3863; SSE2-NEXT: pxor %xmm8, %xmm7 3864; SSE2-NEXT: pxor %xmm8, %xmm3 3865; SSE2-NEXT: pmaxsw %xmm7, %xmm3 3866; SSE2-NEXT: pxor %xmm8, %xmm3 3867; SSE2-NEXT: retq 3868; 3869; SSE4-LABEL: test112: 3870; SSE4: # %bb.0: # %entry 3871; SSE4-NEXT: pmaxuw %xmm4, %xmm0 3872; SSE4-NEXT: pmaxuw %xmm5, %xmm1 3873; SSE4-NEXT: pmaxuw %xmm6, %xmm2 3874; SSE4-NEXT: pmaxuw %xmm7, %xmm3 3875; SSE4-NEXT: retq 3876; 3877; AVX1-LABEL: test112: 3878; AVX1: # %bb.0: # %entry 3879; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3880; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3881; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 3882; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 3883; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3884; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3885; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3886; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 3887; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 3888; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3889; AVX1-NEXT: retq 3890; 3891; AVX2-LABEL: test112: 3892; AVX2: # %bb.0: # %entry 3893; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 3894; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 3895; AVX2-NEXT: retq 3896; 3897; AVX512BW-LABEL: test112: 3898; AVX512BW: # %bb.0: # %entry 3899; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 3900; AVX512BW-NEXT: retq 3901entry: 3902 %cmp = icmp uge <32 x i16> %a, %b 3903 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3904 ret <32 x i16> %sel 3905} 3906 3907define <16 x i32> @test113(<16 x i32> %a, <16 x i32> %b) { 3908; SSE2-LABEL: test113: 3909; SSE2: # %bb.0: # %entry 3910; SSE2-NEXT: movdqa %xmm4, %xmm8 3911; SSE2-NEXT: pcmpgtd %xmm0, %xmm8 3912; SSE2-NEXT: pand %xmm8, %xmm0 3913; SSE2-NEXT: pandn %xmm4, %xmm8 3914; SSE2-NEXT: por %xmm8, %xmm0 3915; SSE2-NEXT: movdqa %xmm5, %xmm4 3916; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 3917; SSE2-NEXT: pand %xmm4, %xmm1 3918; SSE2-NEXT: pandn %xmm5, %xmm4 3919; SSE2-NEXT: por %xmm4, %xmm1 3920; SSE2-NEXT: movdqa %xmm6, %xmm4 3921; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 3922; SSE2-NEXT: pand %xmm4, %xmm2 3923; SSE2-NEXT: pandn %xmm6, %xmm4 3924; SSE2-NEXT: por %xmm4, %xmm2 3925; SSE2-NEXT: movdqa %xmm7, %xmm4 3926; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 3927; SSE2-NEXT: pand %xmm4, %xmm3 3928; SSE2-NEXT: pandn %xmm7, %xmm4 3929; SSE2-NEXT: por %xmm4, %xmm3 3930; SSE2-NEXT: retq 3931; 3932; SSE4-LABEL: test113: 3933; SSE4: # %bb.0: # %entry 3934; SSE4-NEXT: pminsd %xmm4, %xmm0 3935; SSE4-NEXT: pminsd %xmm5, %xmm1 3936; SSE4-NEXT: pminsd %xmm6, %xmm2 3937; SSE4-NEXT: pminsd %xmm7, %xmm3 3938; SSE4-NEXT: retq 3939; 3940; AVX1-LABEL: test113: 3941; AVX1: # %bb.0: # %entry 3942; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3943; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3944; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 3945; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 3946; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3947; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3948; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3949; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 3950; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 3951; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3952; AVX1-NEXT: retq 3953; 3954; AVX2-LABEL: test113: 3955; AVX2: # %bb.0: # %entry 3956; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 3957; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 3958; AVX2-NEXT: retq 3959; 3960; AVX512F-LABEL: test113: 3961; AVX512F: # %bb.0: # %entry 3962; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0 3963; AVX512F-NEXT: retq 3964entry: 3965 %cmp = icmp slt <16 x i32> %a, %b 3966 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 3967 ret <16 x i32> %sel 3968} 3969 3970define <16 x i32> @test114(<16 x i32> %a, <16 x i32> %b) { 3971; SSE2-LABEL: test114: 3972; SSE2: # %bb.0: # %entry 3973; SSE2-NEXT: movdqa %xmm4, %xmm8 3974; SSE2-NEXT: pcmpgtd %xmm0, %xmm8 3975; SSE2-NEXT: pand %xmm8, %xmm0 3976; SSE2-NEXT: pandn %xmm4, %xmm8 3977; SSE2-NEXT: por %xmm8, %xmm0 3978; SSE2-NEXT: movdqa %xmm5, %xmm4 3979; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 3980; SSE2-NEXT: pand %xmm4, %xmm1 3981; SSE2-NEXT: pandn %xmm5, %xmm4 3982; SSE2-NEXT: por %xmm4, %xmm1 3983; SSE2-NEXT: movdqa %xmm6, %xmm4 3984; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 3985; SSE2-NEXT: pand %xmm4, %xmm2 3986; SSE2-NEXT: pandn %xmm6, %xmm4 3987; SSE2-NEXT: por %xmm4, %xmm2 3988; SSE2-NEXT: movdqa %xmm7, %xmm4 3989; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 3990; SSE2-NEXT: pand %xmm4, %xmm3 3991; SSE2-NEXT: pandn %xmm7, %xmm4 3992; SSE2-NEXT: por %xmm4, %xmm3 3993; SSE2-NEXT: retq 3994; 3995; SSE4-LABEL: test114: 3996; SSE4: # %bb.0: # %entry 3997; SSE4-NEXT: pminsd %xmm4, %xmm0 3998; SSE4-NEXT: pminsd %xmm5, %xmm1 3999; SSE4-NEXT: pminsd %xmm6, %xmm2 4000; SSE4-NEXT: pminsd %xmm7, %xmm3 4001; SSE4-NEXT: retq 4002; 4003; AVX1-LABEL: test114: 4004; AVX1: # %bb.0: # %entry 4005; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4006; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4007; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 4008; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 4009; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4010; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4011; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4012; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 4013; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 4014; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4015; AVX1-NEXT: retq 4016; 4017; AVX2-LABEL: test114: 4018; AVX2: # %bb.0: # %entry 4019; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 4020; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 4021; AVX2-NEXT: retq 4022; 4023; AVX512F-LABEL: test114: 4024; AVX512F: # %bb.0: # %entry 4025; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0 4026; AVX512F-NEXT: retq 4027entry: 4028 %cmp = icmp sle <16 x i32> %a, %b 4029 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4030 ret <16 x i32> %sel 4031} 4032 4033define <16 x i32> @test115(<16 x i32> %a, <16 x i32> %b) { 4034; SSE2-LABEL: test115: 4035; SSE2: # %bb.0: # %entry 4036; SSE2-NEXT: movdqa %xmm0, %xmm8 4037; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 4038; SSE2-NEXT: pand %xmm8, %xmm0 4039; SSE2-NEXT: pandn %xmm4, %xmm8 4040; SSE2-NEXT: por %xmm0, %xmm8 4041; SSE2-NEXT: movdqa %xmm1, %xmm4 4042; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 4043; SSE2-NEXT: pand %xmm4, %xmm1 4044; SSE2-NEXT: pandn %xmm5, %xmm4 4045; SSE2-NEXT: por %xmm1, %xmm4 4046; SSE2-NEXT: movdqa %xmm2, %xmm5 4047; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 4048; SSE2-NEXT: pand %xmm5, %xmm2 4049; SSE2-NEXT: pandn %xmm6, %xmm5 4050; SSE2-NEXT: por %xmm2, %xmm5 4051; SSE2-NEXT: movdqa %xmm3, %xmm6 4052; SSE2-NEXT: pcmpgtd %xmm7, %xmm6 4053; SSE2-NEXT: pand %xmm6, %xmm3 4054; SSE2-NEXT: pandn %xmm7, %xmm6 4055; SSE2-NEXT: por %xmm3, %xmm6 4056; SSE2-NEXT: movdqa %xmm8, %xmm0 4057; SSE2-NEXT: movdqa %xmm4, %xmm1 4058; SSE2-NEXT: movdqa %xmm5, %xmm2 4059; SSE2-NEXT: movdqa %xmm6, %xmm3 4060; SSE2-NEXT: retq 4061; 4062; SSE4-LABEL: test115: 4063; SSE4: # %bb.0: # %entry 4064; SSE4-NEXT: pmaxsd %xmm4, %xmm0 4065; SSE4-NEXT: pmaxsd %xmm5, %xmm1 4066; SSE4-NEXT: pmaxsd %xmm6, %xmm2 4067; SSE4-NEXT: pmaxsd %xmm7, %xmm3 4068; SSE4-NEXT: retq 4069; 4070; AVX1-LABEL: test115: 4071; AVX1: # %bb.0: # %entry 4072; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4073; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4074; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 4075; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 4076; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4077; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4078; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4079; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 4080; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 4081; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4082; AVX1-NEXT: retq 4083; 4084; AVX2-LABEL: test115: 4085; AVX2: # %bb.0: # %entry 4086; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 4087; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 4088; AVX2-NEXT: retq 4089; 4090; AVX512F-LABEL: test115: 4091; AVX512F: # %bb.0: # %entry 4092; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 4093; AVX512F-NEXT: retq 4094entry: 4095 %cmp = icmp sgt <16 x i32> %a, %b 4096 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4097 ret <16 x i32> %sel 4098} 4099 4100define <16 x i32> @test116(<16 x i32> %a, <16 x i32> %b) { 4101; SSE2-LABEL: test116: 4102; SSE2: # %bb.0: # %entry 4103; SSE2-NEXT: movdqa %xmm0, %xmm8 4104; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 4105; SSE2-NEXT: pand %xmm8, %xmm0 4106; SSE2-NEXT: pandn %xmm4, %xmm8 4107; SSE2-NEXT: por %xmm0, %xmm8 4108; SSE2-NEXT: movdqa %xmm1, %xmm4 4109; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 4110; SSE2-NEXT: pand %xmm4, %xmm1 4111; SSE2-NEXT: pandn %xmm5, %xmm4 4112; SSE2-NEXT: por %xmm1, %xmm4 4113; SSE2-NEXT: movdqa %xmm2, %xmm5 4114; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 4115; SSE2-NEXT: pand %xmm5, %xmm2 4116; SSE2-NEXT: pandn %xmm6, %xmm5 4117; SSE2-NEXT: por %xmm2, %xmm5 4118; SSE2-NEXT: movdqa %xmm3, %xmm6 4119; SSE2-NEXT: pcmpgtd %xmm7, %xmm6 4120; SSE2-NEXT: pand %xmm6, %xmm3 4121; SSE2-NEXT: pandn %xmm7, %xmm6 4122; SSE2-NEXT: por %xmm3, %xmm6 4123; SSE2-NEXT: movdqa %xmm8, %xmm0 4124; SSE2-NEXT: movdqa %xmm4, %xmm1 4125; SSE2-NEXT: movdqa %xmm5, %xmm2 4126; SSE2-NEXT: movdqa %xmm6, %xmm3 4127; SSE2-NEXT: retq 4128; 4129; SSE4-LABEL: test116: 4130; SSE4: # %bb.0: # %entry 4131; SSE4-NEXT: pmaxsd %xmm4, %xmm0 4132; SSE4-NEXT: pmaxsd %xmm5, %xmm1 4133; SSE4-NEXT: pmaxsd %xmm6, %xmm2 4134; SSE4-NEXT: pmaxsd %xmm7, %xmm3 4135; SSE4-NEXT: retq 4136; 4137; AVX1-LABEL: test116: 4138; AVX1: # %bb.0: # %entry 4139; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4140; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4141; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 4142; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 4143; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4144; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4145; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4146; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 4147; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 4148; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4149; AVX1-NEXT: retq 4150; 4151; AVX2-LABEL: test116: 4152; AVX2: # %bb.0: # %entry 4153; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 4154; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 4155; AVX2-NEXT: retq 4156; 4157; AVX512F-LABEL: test116: 4158; AVX512F: # %bb.0: # %entry 4159; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 4160; AVX512F-NEXT: retq 4161entry: 4162 %cmp = icmp sge <16 x i32> %a, %b 4163 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4164 ret <16 x i32> %sel 4165} 4166 4167define <16 x i32> @test117(<16 x i32> %a, <16 x i32> %b) { 4168; SSE2-LABEL: test117: 4169; SSE2: # %bb.0: # %entry 4170; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 4171; SSE2-NEXT: movdqa %xmm0, %xmm9 4172; SSE2-NEXT: pxor %xmm8, %xmm9 4173; SSE2-NEXT: movdqa %xmm4, %xmm10 4174; SSE2-NEXT: pxor %xmm8, %xmm10 4175; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4176; SSE2-NEXT: pand %xmm10, %xmm0 4177; SSE2-NEXT: pandn %xmm4, %xmm10 4178; SSE2-NEXT: por %xmm10, %xmm0 4179; SSE2-NEXT: movdqa %xmm1, %xmm9 4180; SSE2-NEXT: pxor %xmm8, %xmm9 4181; SSE2-NEXT: movdqa %xmm5, %xmm4 4182; SSE2-NEXT: pxor %xmm8, %xmm4 4183; SSE2-NEXT: pcmpgtd %xmm9, %xmm4 4184; SSE2-NEXT: pand %xmm4, %xmm1 4185; SSE2-NEXT: pandn %xmm5, %xmm4 4186; SSE2-NEXT: por %xmm4, %xmm1 4187; SSE2-NEXT: movdqa %xmm2, %xmm4 4188; SSE2-NEXT: pxor %xmm8, %xmm4 4189; SSE2-NEXT: movdqa %xmm6, %xmm5 4190; SSE2-NEXT: pxor %xmm8, %xmm5 4191; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4192; SSE2-NEXT: pand %xmm5, %xmm2 4193; SSE2-NEXT: pandn %xmm6, %xmm5 4194; SSE2-NEXT: por %xmm5, %xmm2 4195; SSE2-NEXT: movdqa %xmm3, %xmm4 4196; SSE2-NEXT: pxor %xmm8, %xmm4 4197; SSE2-NEXT: pxor %xmm7, %xmm8 4198; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 4199; SSE2-NEXT: pand %xmm8, %xmm3 4200; SSE2-NEXT: pandn %xmm7, %xmm8 4201; SSE2-NEXT: por %xmm8, %xmm3 4202; SSE2-NEXT: retq 4203; 4204; SSE4-LABEL: test117: 4205; SSE4: # %bb.0: # %entry 4206; SSE4-NEXT: pminud %xmm4, %xmm0 4207; SSE4-NEXT: pminud %xmm5, %xmm1 4208; SSE4-NEXT: pminud %xmm6, %xmm2 4209; SSE4-NEXT: pminud %xmm7, %xmm3 4210; SSE4-NEXT: retq 4211; 4212; AVX1-LABEL: test117: 4213; AVX1: # %bb.0: # %entry 4214; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4215; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4216; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 4217; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 4218; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4219; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4220; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4221; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 4222; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 4223; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4224; AVX1-NEXT: retq 4225; 4226; AVX2-LABEL: test117: 4227; AVX2: # %bb.0: # %entry 4228; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 4229; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 4230; AVX2-NEXT: retq 4231; 4232; AVX512F-LABEL: test117: 4233; AVX512F: # %bb.0: # %entry 4234; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0 4235; AVX512F-NEXT: retq 4236entry: 4237 %cmp = icmp ult <16 x i32> %a, %b 4238 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4239 ret <16 x i32> %sel 4240} 4241 4242define <16 x i32> @test118(<16 x i32> %a, <16 x i32> %b) { 4243; SSE2-LABEL: test118: 4244; SSE2: # %bb.0: # %entry 4245; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 4246; SSE2-NEXT: movdqa %xmm0, %xmm9 4247; SSE2-NEXT: pxor %xmm8, %xmm9 4248; SSE2-NEXT: movdqa %xmm4, %xmm10 4249; SSE2-NEXT: pxor %xmm8, %xmm10 4250; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4251; SSE2-NEXT: pand %xmm10, %xmm0 4252; SSE2-NEXT: pandn %xmm4, %xmm10 4253; SSE2-NEXT: por %xmm10, %xmm0 4254; SSE2-NEXT: movdqa %xmm1, %xmm9 4255; SSE2-NEXT: pxor %xmm8, %xmm9 4256; SSE2-NEXT: movdqa %xmm5, %xmm4 4257; SSE2-NEXT: pxor %xmm8, %xmm4 4258; SSE2-NEXT: pcmpgtd %xmm9, %xmm4 4259; SSE2-NEXT: pand %xmm4, %xmm1 4260; SSE2-NEXT: pandn %xmm5, %xmm4 4261; SSE2-NEXT: por %xmm4, %xmm1 4262; SSE2-NEXT: movdqa %xmm2, %xmm4 4263; SSE2-NEXT: pxor %xmm8, %xmm4 4264; SSE2-NEXT: movdqa %xmm6, %xmm5 4265; SSE2-NEXT: pxor %xmm8, %xmm5 4266; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4267; SSE2-NEXT: pand %xmm5, %xmm2 4268; SSE2-NEXT: pandn %xmm6, %xmm5 4269; SSE2-NEXT: por %xmm5, %xmm2 4270; SSE2-NEXT: movdqa %xmm3, %xmm4 4271; SSE2-NEXT: pxor %xmm8, %xmm4 4272; SSE2-NEXT: pxor %xmm7, %xmm8 4273; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 4274; SSE2-NEXT: pand %xmm8, %xmm3 4275; SSE2-NEXT: pandn %xmm7, %xmm8 4276; SSE2-NEXT: por %xmm8, %xmm3 4277; SSE2-NEXT: retq 4278; 4279; SSE4-LABEL: test118: 4280; SSE4: # %bb.0: # %entry 4281; SSE4-NEXT: pminud %xmm4, %xmm0 4282; SSE4-NEXT: pminud %xmm5, %xmm1 4283; SSE4-NEXT: pminud %xmm6, %xmm2 4284; SSE4-NEXT: pminud %xmm7, %xmm3 4285; SSE4-NEXT: retq 4286; 4287; AVX1-LABEL: test118: 4288; AVX1: # %bb.0: # %entry 4289; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4290; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4291; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 4292; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 4293; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4294; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4295; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4296; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 4297; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 4298; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4299; AVX1-NEXT: retq 4300; 4301; AVX2-LABEL: test118: 4302; AVX2: # %bb.0: # %entry 4303; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 4304; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 4305; AVX2-NEXT: retq 4306; 4307; AVX512F-LABEL: test118: 4308; AVX512F: # %bb.0: # %entry 4309; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0 4310; AVX512F-NEXT: retq 4311entry: 4312 %cmp = icmp ule <16 x i32> %a, %b 4313 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4314 ret <16 x i32> %sel 4315} 4316 4317define <16 x i32> @test119(<16 x i32> %a, <16 x i32> %b) { 4318; SSE2-LABEL: test119: 4319; SSE2: # %bb.0: # %entry 4320; SSE2-NEXT: movdqa %xmm1, %xmm8 4321; SSE2-NEXT: movdqa %xmm0, %xmm10 4322; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648] 4323; SSE2-NEXT: movdqa %xmm4, %xmm1 4324; SSE2-NEXT: pxor %xmm9, %xmm1 4325; SSE2-NEXT: pxor %xmm9, %xmm0 4326; SSE2-NEXT: pcmpgtd %xmm1, %xmm0 4327; SSE2-NEXT: pand %xmm0, %xmm10 4328; SSE2-NEXT: pandn %xmm4, %xmm0 4329; SSE2-NEXT: por %xmm10, %xmm0 4330; SSE2-NEXT: movdqa %xmm5, %xmm4 4331; SSE2-NEXT: pxor %xmm9, %xmm4 4332; SSE2-NEXT: movdqa %xmm8, %xmm1 4333; SSE2-NEXT: pxor %xmm9, %xmm1 4334; SSE2-NEXT: pcmpgtd %xmm4, %xmm1 4335; SSE2-NEXT: pand %xmm1, %xmm8 4336; SSE2-NEXT: pandn %xmm5, %xmm1 4337; SSE2-NEXT: por %xmm8, %xmm1 4338; SSE2-NEXT: movdqa %xmm6, %xmm5 4339; SSE2-NEXT: pxor %xmm9, %xmm5 4340; SSE2-NEXT: movdqa %xmm2, %xmm4 4341; SSE2-NEXT: pxor %xmm9, %xmm4 4342; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 4343; SSE2-NEXT: pand %xmm4, %xmm2 4344; SSE2-NEXT: pandn %xmm6, %xmm4 4345; SSE2-NEXT: por %xmm2, %xmm4 4346; SSE2-NEXT: movdqa %xmm7, %xmm2 4347; SSE2-NEXT: pxor %xmm9, %xmm2 4348; SSE2-NEXT: pxor %xmm3, %xmm9 4349; SSE2-NEXT: pcmpgtd %xmm2, %xmm9 4350; SSE2-NEXT: pand %xmm9, %xmm3 4351; SSE2-NEXT: pandn %xmm7, %xmm9 4352; SSE2-NEXT: por %xmm9, %xmm3 4353; SSE2-NEXT: movdqa %xmm4, %xmm2 4354; SSE2-NEXT: retq 4355; 4356; SSE4-LABEL: test119: 4357; SSE4: # %bb.0: # %entry 4358; SSE4-NEXT: pmaxud %xmm4, %xmm0 4359; SSE4-NEXT: pmaxud %xmm5, %xmm1 4360; SSE4-NEXT: pmaxud %xmm6, %xmm2 4361; SSE4-NEXT: pmaxud %xmm7, %xmm3 4362; SSE4-NEXT: retq 4363; 4364; AVX1-LABEL: test119: 4365; AVX1: # %bb.0: # %entry 4366; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4367; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4368; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 4369; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 4370; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4371; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4372; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4373; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 4374; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 4375; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4376; AVX1-NEXT: retq 4377; 4378; AVX2-LABEL: test119: 4379; AVX2: # %bb.0: # %entry 4380; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 4381; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 4382; AVX2-NEXT: retq 4383; 4384; AVX512F-LABEL: test119: 4385; AVX512F: # %bb.0: # %entry 4386; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 4387; AVX512F-NEXT: retq 4388entry: 4389 %cmp = icmp ugt <16 x i32> %a, %b 4390 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4391 ret <16 x i32> %sel 4392} 4393 4394define <16 x i32> @test120(<16 x i32> %a, <16 x i32> %b) { 4395; SSE2-LABEL: test120: 4396; SSE2: # %bb.0: # %entry 4397; SSE2-NEXT: movdqa %xmm1, %xmm8 4398; SSE2-NEXT: movdqa %xmm0, %xmm10 4399; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648] 4400; SSE2-NEXT: movdqa %xmm4, %xmm1 4401; SSE2-NEXT: pxor %xmm9, %xmm1 4402; SSE2-NEXT: pxor %xmm9, %xmm0 4403; SSE2-NEXT: pcmpgtd %xmm1, %xmm0 4404; SSE2-NEXT: pand %xmm0, %xmm10 4405; SSE2-NEXT: pandn %xmm4, %xmm0 4406; SSE2-NEXT: por %xmm10, %xmm0 4407; SSE2-NEXT: movdqa %xmm5, %xmm4 4408; SSE2-NEXT: pxor %xmm9, %xmm4 4409; SSE2-NEXT: movdqa %xmm8, %xmm1 4410; SSE2-NEXT: pxor %xmm9, %xmm1 4411; SSE2-NEXT: pcmpgtd %xmm4, %xmm1 4412; SSE2-NEXT: pand %xmm1, %xmm8 4413; SSE2-NEXT: pandn %xmm5, %xmm1 4414; SSE2-NEXT: por %xmm8, %xmm1 4415; SSE2-NEXT: movdqa %xmm6, %xmm5 4416; SSE2-NEXT: pxor %xmm9, %xmm5 4417; SSE2-NEXT: movdqa %xmm2, %xmm4 4418; SSE2-NEXT: pxor %xmm9, %xmm4 4419; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 4420; SSE2-NEXT: pand %xmm4, %xmm2 4421; SSE2-NEXT: pandn %xmm6, %xmm4 4422; SSE2-NEXT: por %xmm2, %xmm4 4423; SSE2-NEXT: movdqa %xmm7, %xmm2 4424; SSE2-NEXT: pxor %xmm9, %xmm2 4425; SSE2-NEXT: pxor %xmm3, %xmm9 4426; SSE2-NEXT: pcmpgtd %xmm2, %xmm9 4427; SSE2-NEXT: pand %xmm9, %xmm3 4428; SSE2-NEXT: pandn %xmm7, %xmm9 4429; SSE2-NEXT: por %xmm9, %xmm3 4430; SSE2-NEXT: movdqa %xmm4, %xmm2 4431; SSE2-NEXT: retq 4432; 4433; SSE4-LABEL: test120: 4434; SSE4: # %bb.0: # %entry 4435; SSE4-NEXT: pmaxud %xmm4, %xmm0 4436; SSE4-NEXT: pmaxud %xmm5, %xmm1 4437; SSE4-NEXT: pmaxud %xmm6, %xmm2 4438; SSE4-NEXT: pmaxud %xmm7, %xmm3 4439; SSE4-NEXT: retq 4440; 4441; AVX1-LABEL: test120: 4442; AVX1: # %bb.0: # %entry 4443; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4444; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4445; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 4446; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 4447; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4448; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4449; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4450; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 4451; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 4452; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4453; AVX1-NEXT: retq 4454; 4455; AVX2-LABEL: test120: 4456; AVX2: # %bb.0: # %entry 4457; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 4458; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 4459; AVX2-NEXT: retq 4460; 4461; AVX512F-LABEL: test120: 4462; AVX512F: # %bb.0: # %entry 4463; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 4464; AVX512F-NEXT: retq 4465entry: 4466 %cmp = icmp uge <16 x i32> %a, %b 4467 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4468 ret <16 x i32> %sel 4469} 4470 4471define <8 x i64> @test121(<8 x i64> %a, <8 x i64> %b) { 4472; SSE2-LABEL: test121: 4473; SSE2: # %bb.0: # %entry 4474; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0] 4475; SSE2-NEXT: movdqa %xmm0, %xmm9 4476; SSE2-NEXT: pxor %xmm8, %xmm9 4477; SSE2-NEXT: movdqa %xmm4, %xmm10 4478; SSE2-NEXT: pxor %xmm8, %xmm10 4479; SSE2-NEXT: movdqa %xmm10, %xmm11 4480; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4481; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4482; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4483; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4484; SSE2-NEXT: pand %xmm12, %xmm9 4485; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4486; SSE2-NEXT: por %xmm9, %xmm10 4487; SSE2-NEXT: pand %xmm10, %xmm0 4488; SSE2-NEXT: pandn %xmm4, %xmm10 4489; SSE2-NEXT: por %xmm10, %xmm0 4490; SSE2-NEXT: movdqa %xmm1, %xmm9 4491; SSE2-NEXT: pxor %xmm8, %xmm9 4492; SSE2-NEXT: movdqa %xmm5, %xmm4 4493; SSE2-NEXT: pxor %xmm8, %xmm4 4494; SSE2-NEXT: movdqa %xmm4, %xmm10 4495; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4496; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4497; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 4498; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 4499; SSE2-NEXT: pand %xmm11, %xmm9 4500; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 4501; SSE2-NEXT: por %xmm9, %xmm4 4502; SSE2-NEXT: pand %xmm4, %xmm1 4503; SSE2-NEXT: pandn %xmm5, %xmm4 4504; SSE2-NEXT: por %xmm4, %xmm1 4505; SSE2-NEXT: movdqa %xmm2, %xmm4 4506; SSE2-NEXT: pxor %xmm8, %xmm4 4507; SSE2-NEXT: movdqa %xmm6, %xmm5 4508; SSE2-NEXT: pxor %xmm8, %xmm5 4509; SSE2-NEXT: movdqa %xmm5, %xmm9 4510; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4511; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4512; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4513; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4514; SSE2-NEXT: pand %xmm10, %xmm4 4515; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4516; SSE2-NEXT: por %xmm4, %xmm5 4517; SSE2-NEXT: pand %xmm5, %xmm2 4518; SSE2-NEXT: pandn %xmm6, %xmm5 4519; SSE2-NEXT: por %xmm5, %xmm2 4520; SSE2-NEXT: movdqa %xmm3, %xmm4 4521; SSE2-NEXT: pxor %xmm8, %xmm4 4522; SSE2-NEXT: pxor %xmm7, %xmm8 4523; SSE2-NEXT: movdqa %xmm8, %xmm5 4524; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4525; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 4526; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 4527; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 4528; SSE2-NEXT: pand %xmm6, %xmm4 4529; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 4530; SSE2-NEXT: por %xmm4, %xmm5 4531; SSE2-NEXT: pand %xmm5, %xmm3 4532; SSE2-NEXT: pandn %xmm7, %xmm5 4533; SSE2-NEXT: por %xmm5, %xmm3 4534; SSE2-NEXT: retq 4535; 4536; SSE4-LABEL: test121: 4537; SSE4: # %bb.0: # %entry 4538; SSE4-NEXT: movdqa %xmm0, %xmm8 4539; SSE4-NEXT: movdqa %xmm4, %xmm0 4540; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 4541; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 4542; SSE4-NEXT: movdqa %xmm5, %xmm0 4543; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 4544; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 4545; SSE4-NEXT: movdqa %xmm6, %xmm0 4546; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 4547; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 4548; SSE4-NEXT: movdqa %xmm7, %xmm0 4549; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 4550; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 4551; SSE4-NEXT: movapd %xmm4, %xmm0 4552; SSE4-NEXT: movapd %xmm5, %xmm1 4553; SSE4-NEXT: movapd %xmm6, %xmm2 4554; SSE4-NEXT: movapd %xmm7, %xmm3 4555; SSE4-NEXT: retq 4556; 4557; AVX1-LABEL: test121: 4558; AVX1: # %bb.0: # %entry 4559; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 4560; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 4561; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4562; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm5 4563; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4564; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4565; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 4566; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 4567; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 4568; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm4 4569; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 4570; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4571; AVX1-NEXT: retq 4572; 4573; AVX2-LABEL: test121: 4574; AVX2: # %bb.0: # %entry 4575; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm4 4576; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4577; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm2 4578; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4579; AVX2-NEXT: retq 4580; 4581; AVX512F-LABEL: test121: 4582; AVX512F: # %bb.0: # %entry 4583; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 4584; AVX512F-NEXT: retq 4585entry: 4586 %cmp = icmp slt <8 x i64> %a, %b 4587 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4588 ret <8 x i64> %sel 4589} 4590 4591define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) { 4592; SSE2-LABEL: test122: 4593; SSE2: # %bb.0: # %entry 4594; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0] 4595; SSE2-NEXT: movdqa %xmm0, %xmm9 4596; SSE2-NEXT: pxor %xmm8, %xmm9 4597; SSE2-NEXT: movdqa %xmm4, %xmm10 4598; SSE2-NEXT: pxor %xmm8, %xmm10 4599; SSE2-NEXT: movdqa %xmm10, %xmm11 4600; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4601; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4602; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4603; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4604; SSE2-NEXT: pand %xmm12, %xmm9 4605; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4606; SSE2-NEXT: por %xmm9, %xmm10 4607; SSE2-NEXT: pand %xmm10, %xmm0 4608; SSE2-NEXT: pandn %xmm4, %xmm10 4609; SSE2-NEXT: por %xmm10, %xmm0 4610; SSE2-NEXT: movdqa %xmm1, %xmm9 4611; SSE2-NEXT: pxor %xmm8, %xmm9 4612; SSE2-NEXT: movdqa %xmm5, %xmm4 4613; SSE2-NEXT: pxor %xmm8, %xmm4 4614; SSE2-NEXT: movdqa %xmm4, %xmm10 4615; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4616; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4617; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 4618; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 4619; SSE2-NEXT: pand %xmm11, %xmm9 4620; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 4621; SSE2-NEXT: por %xmm9, %xmm4 4622; SSE2-NEXT: pand %xmm4, %xmm1 4623; SSE2-NEXT: pandn %xmm5, %xmm4 4624; SSE2-NEXT: por %xmm4, %xmm1 4625; SSE2-NEXT: movdqa %xmm2, %xmm4 4626; SSE2-NEXT: pxor %xmm8, %xmm4 4627; SSE2-NEXT: movdqa %xmm6, %xmm5 4628; SSE2-NEXT: pxor %xmm8, %xmm5 4629; SSE2-NEXT: movdqa %xmm5, %xmm9 4630; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4631; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4632; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4633; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4634; SSE2-NEXT: pand %xmm10, %xmm4 4635; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4636; SSE2-NEXT: por %xmm4, %xmm5 4637; SSE2-NEXT: pand %xmm5, %xmm2 4638; SSE2-NEXT: pandn %xmm6, %xmm5 4639; SSE2-NEXT: por %xmm5, %xmm2 4640; SSE2-NEXT: movdqa %xmm3, %xmm4 4641; SSE2-NEXT: pxor %xmm8, %xmm4 4642; SSE2-NEXT: pxor %xmm7, %xmm8 4643; SSE2-NEXT: movdqa %xmm8, %xmm5 4644; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4645; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 4646; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 4647; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 4648; SSE2-NEXT: pand %xmm6, %xmm4 4649; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 4650; SSE2-NEXT: por %xmm4, %xmm5 4651; SSE2-NEXT: pand %xmm5, %xmm3 4652; SSE2-NEXT: pandn %xmm7, %xmm5 4653; SSE2-NEXT: por %xmm5, %xmm3 4654; SSE2-NEXT: retq 4655; 4656; SSE4-LABEL: test122: 4657; SSE4: # %bb.0: # %entry 4658; SSE4-NEXT: movdqa %xmm0, %xmm8 4659; SSE4-NEXT: movdqa %xmm4, %xmm0 4660; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 4661; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 4662; SSE4-NEXT: movdqa %xmm5, %xmm0 4663; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 4664; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 4665; SSE4-NEXT: movdqa %xmm6, %xmm0 4666; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 4667; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 4668; SSE4-NEXT: movdqa %xmm7, %xmm0 4669; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 4670; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 4671; SSE4-NEXT: movapd %xmm4, %xmm0 4672; SSE4-NEXT: movapd %xmm5, %xmm1 4673; SSE4-NEXT: movapd %xmm6, %xmm2 4674; SSE4-NEXT: movapd %xmm7, %xmm3 4675; SSE4-NEXT: retq 4676; 4677; AVX1-LABEL: test122: 4678; AVX1: # %bb.0: # %entry 4679; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 4680; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 4681; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4682; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm5 4683; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4684; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4685; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 4686; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 4687; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 4688; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm4 4689; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 4690; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4691; AVX1-NEXT: retq 4692; 4693; AVX2-LABEL: test122: 4694; AVX2: # %bb.0: # %entry 4695; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm4 4696; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4697; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm2 4698; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4699; AVX2-NEXT: retq 4700; 4701; AVX512F-LABEL: test122: 4702; AVX512F: # %bb.0: # %entry 4703; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 4704; AVX512F-NEXT: retq 4705entry: 4706 %cmp = icmp sle <8 x i64> %a, %b 4707 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4708 ret <8 x i64> %sel 4709} 4710 4711define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) { 4712; SSE2-LABEL: test123: 4713; SSE2: # %bb.0: # %entry 4714; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0] 4715; SSE2-NEXT: movdqa %xmm4, %xmm9 4716; SSE2-NEXT: pxor %xmm8, %xmm9 4717; SSE2-NEXT: movdqa %xmm0, %xmm10 4718; SSE2-NEXT: pxor %xmm8, %xmm10 4719; SSE2-NEXT: movdqa %xmm10, %xmm11 4720; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4721; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4722; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4723; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4724; SSE2-NEXT: pand %xmm12, %xmm9 4725; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4726; SSE2-NEXT: por %xmm9, %xmm10 4727; SSE2-NEXT: pand %xmm10, %xmm0 4728; SSE2-NEXT: pandn %xmm4, %xmm10 4729; SSE2-NEXT: por %xmm10, %xmm0 4730; SSE2-NEXT: movdqa %xmm5, %xmm9 4731; SSE2-NEXT: pxor %xmm8, %xmm9 4732; SSE2-NEXT: movdqa %xmm1, %xmm4 4733; SSE2-NEXT: pxor %xmm8, %xmm4 4734; SSE2-NEXT: movdqa %xmm4, %xmm10 4735; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4736; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4737; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 4738; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 4739; SSE2-NEXT: pand %xmm11, %xmm9 4740; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 4741; SSE2-NEXT: por %xmm9, %xmm4 4742; SSE2-NEXT: pand %xmm4, %xmm1 4743; SSE2-NEXT: pandn %xmm5, %xmm4 4744; SSE2-NEXT: por %xmm4, %xmm1 4745; SSE2-NEXT: movdqa %xmm6, %xmm4 4746; SSE2-NEXT: pxor %xmm8, %xmm4 4747; SSE2-NEXT: movdqa %xmm2, %xmm5 4748; SSE2-NEXT: pxor %xmm8, %xmm5 4749; SSE2-NEXT: movdqa %xmm5, %xmm9 4750; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4751; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4752; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4753; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4754; SSE2-NEXT: pand %xmm10, %xmm4 4755; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4756; SSE2-NEXT: por %xmm4, %xmm5 4757; SSE2-NEXT: pand %xmm5, %xmm2 4758; SSE2-NEXT: pandn %xmm6, %xmm5 4759; SSE2-NEXT: por %xmm5, %xmm2 4760; SSE2-NEXT: movdqa %xmm7, %xmm4 4761; SSE2-NEXT: pxor %xmm8, %xmm4 4762; SSE2-NEXT: pxor %xmm3, %xmm8 4763; SSE2-NEXT: movdqa %xmm8, %xmm5 4764; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4765; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 4766; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 4767; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 4768; SSE2-NEXT: pand %xmm6, %xmm4 4769; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 4770; SSE2-NEXT: por %xmm4, %xmm5 4771; SSE2-NEXT: pand %xmm5, %xmm3 4772; SSE2-NEXT: pandn %xmm7, %xmm5 4773; SSE2-NEXT: por %xmm5, %xmm3 4774; SSE2-NEXT: retq 4775; 4776; SSE4-LABEL: test123: 4777; SSE4: # %bb.0: # %entry 4778; SSE4-NEXT: movdqa %xmm0, %xmm8 4779; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 4780; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 4781; SSE4-NEXT: movdqa %xmm1, %xmm0 4782; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 4783; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 4784; SSE4-NEXT: movdqa %xmm2, %xmm0 4785; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 4786; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 4787; SSE4-NEXT: movdqa %xmm3, %xmm0 4788; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 4789; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 4790; SSE4-NEXT: movapd %xmm4, %xmm0 4791; SSE4-NEXT: movapd %xmm5, %xmm1 4792; SSE4-NEXT: movapd %xmm6, %xmm2 4793; SSE4-NEXT: movapd %xmm7, %xmm3 4794; SSE4-NEXT: retq 4795; 4796; AVX1-LABEL: test123: 4797; AVX1: # %bb.0: # %entry 4798; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4799; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4800; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4801; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5 4802; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4803; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4804; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4805; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4806; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 4807; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4 4808; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 4809; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4810; AVX1-NEXT: retq 4811; 4812; AVX2-LABEL: test123: 4813; AVX2: # %bb.0: # %entry 4814; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4 4815; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4816; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2 4817; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4818; AVX2-NEXT: retq 4819; 4820; AVX512F-LABEL: test123: 4821; AVX512F: # %bb.0: # %entry 4822; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 4823; AVX512F-NEXT: retq 4824entry: 4825 %cmp = icmp sgt <8 x i64> %a, %b 4826 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4827 ret <8 x i64> %sel 4828} 4829 4830define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) { 4831; SSE2-LABEL: test124: 4832; SSE2: # %bb.0: # %entry 4833; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0] 4834; SSE2-NEXT: movdqa %xmm4, %xmm9 4835; SSE2-NEXT: pxor %xmm8, %xmm9 4836; SSE2-NEXT: movdqa %xmm0, %xmm10 4837; SSE2-NEXT: pxor %xmm8, %xmm10 4838; SSE2-NEXT: movdqa %xmm10, %xmm11 4839; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4840; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4841; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4842; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4843; SSE2-NEXT: pand %xmm12, %xmm9 4844; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4845; SSE2-NEXT: por %xmm9, %xmm10 4846; SSE2-NEXT: pand %xmm10, %xmm0 4847; SSE2-NEXT: pandn %xmm4, %xmm10 4848; SSE2-NEXT: por %xmm10, %xmm0 4849; SSE2-NEXT: movdqa %xmm5, %xmm9 4850; SSE2-NEXT: pxor %xmm8, %xmm9 4851; SSE2-NEXT: movdqa %xmm1, %xmm4 4852; SSE2-NEXT: pxor %xmm8, %xmm4 4853; SSE2-NEXT: movdqa %xmm4, %xmm10 4854; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4855; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4856; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 4857; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 4858; SSE2-NEXT: pand %xmm11, %xmm9 4859; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 4860; SSE2-NEXT: por %xmm9, %xmm4 4861; SSE2-NEXT: pand %xmm4, %xmm1 4862; SSE2-NEXT: pandn %xmm5, %xmm4 4863; SSE2-NEXT: por %xmm4, %xmm1 4864; SSE2-NEXT: movdqa %xmm6, %xmm4 4865; SSE2-NEXT: pxor %xmm8, %xmm4 4866; SSE2-NEXT: movdqa %xmm2, %xmm5 4867; SSE2-NEXT: pxor %xmm8, %xmm5 4868; SSE2-NEXT: movdqa %xmm5, %xmm9 4869; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4870; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4871; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4872; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4873; SSE2-NEXT: pand %xmm10, %xmm4 4874; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4875; SSE2-NEXT: por %xmm4, %xmm5 4876; SSE2-NEXT: pand %xmm5, %xmm2 4877; SSE2-NEXT: pandn %xmm6, %xmm5 4878; SSE2-NEXT: por %xmm5, %xmm2 4879; SSE2-NEXT: movdqa %xmm7, %xmm4 4880; SSE2-NEXT: pxor %xmm8, %xmm4 4881; SSE2-NEXT: pxor %xmm3, %xmm8 4882; SSE2-NEXT: movdqa %xmm8, %xmm5 4883; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 4884; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 4885; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 4886; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 4887; SSE2-NEXT: pand %xmm6, %xmm4 4888; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 4889; SSE2-NEXT: por %xmm4, %xmm5 4890; SSE2-NEXT: pand %xmm5, %xmm3 4891; SSE2-NEXT: pandn %xmm7, %xmm5 4892; SSE2-NEXT: por %xmm5, %xmm3 4893; SSE2-NEXT: retq 4894; 4895; SSE4-LABEL: test124: 4896; SSE4: # %bb.0: # %entry 4897; SSE4-NEXT: movdqa %xmm0, %xmm8 4898; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 4899; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 4900; SSE4-NEXT: movdqa %xmm1, %xmm0 4901; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 4902; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 4903; SSE4-NEXT: movdqa %xmm2, %xmm0 4904; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 4905; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 4906; SSE4-NEXT: movdqa %xmm3, %xmm0 4907; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 4908; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 4909; SSE4-NEXT: movapd %xmm4, %xmm0 4910; SSE4-NEXT: movapd %xmm5, %xmm1 4911; SSE4-NEXT: movapd %xmm6, %xmm2 4912; SSE4-NEXT: movapd %xmm7, %xmm3 4913; SSE4-NEXT: retq 4914; 4915; AVX1-LABEL: test124: 4916; AVX1: # %bb.0: # %entry 4917; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4918; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4919; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4920; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5 4921; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4922; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4923; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4924; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4925; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 4926; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4 4927; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 4928; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4929; AVX1-NEXT: retq 4930; 4931; AVX2-LABEL: test124: 4932; AVX2: # %bb.0: # %entry 4933; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4 4934; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 4935; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2 4936; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 4937; AVX2-NEXT: retq 4938; 4939; AVX512F-LABEL: test124: 4940; AVX512F: # %bb.0: # %entry 4941; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 4942; AVX512F-NEXT: retq 4943entry: 4944 %cmp = icmp sge <8 x i64> %a, %b 4945 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4946 ret <8 x i64> %sel 4947} 4948 4949define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) { 4950; SSE2-LABEL: test125: 4951; SSE2: # %bb.0: # %entry 4952; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 4953; SSE2-NEXT: movdqa %xmm0, %xmm9 4954; SSE2-NEXT: pxor %xmm8, %xmm9 4955; SSE2-NEXT: movdqa %xmm4, %xmm10 4956; SSE2-NEXT: pxor %xmm8, %xmm10 4957; SSE2-NEXT: movdqa %xmm10, %xmm11 4958; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 4959; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4960; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 4961; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 4962; SSE2-NEXT: pand %xmm12, %xmm9 4963; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 4964; SSE2-NEXT: por %xmm9, %xmm10 4965; SSE2-NEXT: pand %xmm10, %xmm0 4966; SSE2-NEXT: pandn %xmm4, %xmm10 4967; SSE2-NEXT: por %xmm10, %xmm0 4968; SSE2-NEXT: movdqa %xmm1, %xmm9 4969; SSE2-NEXT: pxor %xmm8, %xmm9 4970; SSE2-NEXT: movdqa %xmm5, %xmm4 4971; SSE2-NEXT: pxor %xmm8, %xmm4 4972; SSE2-NEXT: movdqa %xmm4, %xmm10 4973; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 4974; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 4975; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 4976; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 4977; SSE2-NEXT: pand %xmm11, %xmm9 4978; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 4979; SSE2-NEXT: por %xmm9, %xmm4 4980; SSE2-NEXT: pand %xmm4, %xmm1 4981; SSE2-NEXT: pandn %xmm5, %xmm4 4982; SSE2-NEXT: por %xmm4, %xmm1 4983; SSE2-NEXT: movdqa %xmm2, %xmm4 4984; SSE2-NEXT: pxor %xmm8, %xmm4 4985; SSE2-NEXT: movdqa %xmm6, %xmm5 4986; SSE2-NEXT: pxor %xmm8, %xmm5 4987; SSE2-NEXT: movdqa %xmm5, %xmm9 4988; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 4989; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 4990; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 4991; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 4992; SSE2-NEXT: pand %xmm10, %xmm4 4993; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 4994; SSE2-NEXT: por %xmm4, %xmm5 4995; SSE2-NEXT: pand %xmm5, %xmm2 4996; SSE2-NEXT: pandn %xmm6, %xmm5 4997; SSE2-NEXT: por %xmm5, %xmm2 4998; SSE2-NEXT: movdqa %xmm3, %xmm4 4999; SSE2-NEXT: pxor %xmm8, %xmm4 5000; SSE2-NEXT: pxor %xmm7, %xmm8 5001; SSE2-NEXT: movdqa %xmm8, %xmm5 5002; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 5003; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 5004; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 5005; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 5006; SSE2-NEXT: pand %xmm6, %xmm4 5007; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 5008; SSE2-NEXT: por %xmm4, %xmm5 5009; SSE2-NEXT: pand %xmm5, %xmm3 5010; SSE2-NEXT: pandn %xmm7, %xmm5 5011; SSE2-NEXT: por %xmm5, %xmm3 5012; SSE2-NEXT: retq 5013; 5014; SSE4-LABEL: test125: 5015; SSE4: # %bb.0: # %entry 5016; SSE4-NEXT: movdqa %xmm0, %xmm9 5017; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 5018; SSE4-NEXT: movdqa %xmm0, %xmm10 5019; SSE4-NEXT: pxor %xmm8, %xmm10 5020; SSE4-NEXT: movdqa %xmm4, %xmm0 5021; SSE4-NEXT: pxor %xmm8, %xmm0 5022; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 5023; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 5024; SSE4-NEXT: movdqa %xmm1, %xmm9 5025; SSE4-NEXT: pxor %xmm8, %xmm9 5026; SSE4-NEXT: movdqa %xmm5, %xmm0 5027; SSE4-NEXT: pxor %xmm8, %xmm0 5028; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 5029; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 5030; SSE4-NEXT: movdqa %xmm2, %xmm1 5031; SSE4-NEXT: pxor %xmm8, %xmm1 5032; SSE4-NEXT: movdqa %xmm6, %xmm0 5033; SSE4-NEXT: pxor %xmm8, %xmm0 5034; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 5035; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 5036; SSE4-NEXT: movdqa %xmm3, %xmm0 5037; SSE4-NEXT: pxor %xmm8, %xmm0 5038; SSE4-NEXT: pxor %xmm7, %xmm8 5039; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 5040; SSE4-NEXT: movdqa %xmm8, %xmm0 5041; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 5042; SSE4-NEXT: movapd %xmm4, %xmm0 5043; SSE4-NEXT: movapd %xmm5, %xmm1 5044; SSE4-NEXT: movapd %xmm6, %xmm2 5045; SSE4-NEXT: movapd %xmm7, %xmm3 5046; SSE4-NEXT: retq 5047; 5048; AVX1-LABEL: test125: 5049; AVX1: # %bb.0: # %entry 5050; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 5051; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5052; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5053; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 5054; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5055; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5056; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6 5057; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7 5058; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5059; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5060; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5061; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 5062; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 5063; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5064; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5065; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 5066; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4 5067; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5 5068; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5069; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 5070; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5071; AVX1-NEXT: retq 5072; 5073; AVX2-LABEL: test125: 5074; AVX2: # %bb.0: # %entry 5075; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 5076; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5 5077; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 5078; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5079; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5080; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2 5081; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4 5082; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 5083; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5084; AVX2-NEXT: retq 5085; 5086; AVX512F-LABEL: test125: 5087; AVX512F: # %bb.0: # %entry 5088; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 5089; AVX512F-NEXT: retq 5090entry: 5091 %cmp = icmp ult <8 x i64> %a, %b 5092 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5093 ret <8 x i64> %sel 5094} 5095 5096define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) { 5097; SSE2-LABEL: test126: 5098; SSE2: # %bb.0: # %entry 5099; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 5100; SSE2-NEXT: movdqa %xmm0, %xmm9 5101; SSE2-NEXT: pxor %xmm8, %xmm9 5102; SSE2-NEXT: movdqa %xmm4, %xmm10 5103; SSE2-NEXT: pxor %xmm8, %xmm10 5104; SSE2-NEXT: movdqa %xmm10, %xmm11 5105; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 5106; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5107; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 5108; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 5109; SSE2-NEXT: pand %xmm12, %xmm9 5110; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 5111; SSE2-NEXT: por %xmm9, %xmm10 5112; SSE2-NEXT: pand %xmm10, %xmm0 5113; SSE2-NEXT: pandn %xmm4, %xmm10 5114; SSE2-NEXT: por %xmm10, %xmm0 5115; SSE2-NEXT: movdqa %xmm1, %xmm9 5116; SSE2-NEXT: pxor %xmm8, %xmm9 5117; SSE2-NEXT: movdqa %xmm5, %xmm4 5118; SSE2-NEXT: pxor %xmm8, %xmm4 5119; SSE2-NEXT: movdqa %xmm4, %xmm10 5120; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 5121; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 5122; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 5123; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 5124; SSE2-NEXT: pand %xmm11, %xmm9 5125; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 5126; SSE2-NEXT: por %xmm9, %xmm4 5127; SSE2-NEXT: pand %xmm4, %xmm1 5128; SSE2-NEXT: pandn %xmm5, %xmm4 5129; SSE2-NEXT: por %xmm4, %xmm1 5130; SSE2-NEXT: movdqa %xmm2, %xmm4 5131; SSE2-NEXT: pxor %xmm8, %xmm4 5132; SSE2-NEXT: movdqa %xmm6, %xmm5 5133; SSE2-NEXT: pxor %xmm8, %xmm5 5134; SSE2-NEXT: movdqa %xmm5, %xmm9 5135; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 5136; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 5137; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 5138; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 5139; SSE2-NEXT: pand %xmm10, %xmm4 5140; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 5141; SSE2-NEXT: por %xmm4, %xmm5 5142; SSE2-NEXT: pand %xmm5, %xmm2 5143; SSE2-NEXT: pandn %xmm6, %xmm5 5144; SSE2-NEXT: por %xmm5, %xmm2 5145; SSE2-NEXT: movdqa %xmm3, %xmm4 5146; SSE2-NEXT: pxor %xmm8, %xmm4 5147; SSE2-NEXT: pxor %xmm7, %xmm8 5148; SSE2-NEXT: movdqa %xmm8, %xmm5 5149; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 5150; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 5151; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 5152; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 5153; SSE2-NEXT: pand %xmm6, %xmm4 5154; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 5155; SSE2-NEXT: por %xmm4, %xmm5 5156; SSE2-NEXT: pand %xmm5, %xmm3 5157; SSE2-NEXT: pandn %xmm7, %xmm5 5158; SSE2-NEXT: por %xmm5, %xmm3 5159; SSE2-NEXT: retq 5160; 5161; SSE4-LABEL: test126: 5162; SSE4: # %bb.0: # %entry 5163; SSE4-NEXT: movdqa %xmm0, %xmm9 5164; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 5165; SSE4-NEXT: movdqa %xmm0, %xmm10 5166; SSE4-NEXT: pxor %xmm8, %xmm10 5167; SSE4-NEXT: movdqa %xmm4, %xmm0 5168; SSE4-NEXT: pxor %xmm8, %xmm0 5169; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 5170; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 5171; SSE4-NEXT: movdqa %xmm1, %xmm9 5172; SSE4-NEXT: pxor %xmm8, %xmm9 5173; SSE4-NEXT: movdqa %xmm5, %xmm0 5174; SSE4-NEXT: pxor %xmm8, %xmm0 5175; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 5176; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 5177; SSE4-NEXT: movdqa %xmm2, %xmm1 5178; SSE4-NEXT: pxor %xmm8, %xmm1 5179; SSE4-NEXT: movdqa %xmm6, %xmm0 5180; SSE4-NEXT: pxor %xmm8, %xmm0 5181; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 5182; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 5183; SSE4-NEXT: movdqa %xmm3, %xmm0 5184; SSE4-NEXT: pxor %xmm8, %xmm0 5185; SSE4-NEXT: pxor %xmm7, %xmm8 5186; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 5187; SSE4-NEXT: movdqa %xmm8, %xmm0 5188; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 5189; SSE4-NEXT: movapd %xmm4, %xmm0 5190; SSE4-NEXT: movapd %xmm5, %xmm1 5191; SSE4-NEXT: movapd %xmm6, %xmm2 5192; SSE4-NEXT: movapd %xmm7, %xmm3 5193; SSE4-NEXT: retq 5194; 5195; AVX1-LABEL: test126: 5196; AVX1: # %bb.0: # %entry 5197; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 5198; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5199; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5200; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 5201; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5202; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5203; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6 5204; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7 5205; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5206; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5207; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5208; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 5209; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 5210; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5211; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5212; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 5213; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4 5214; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5 5215; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5216; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 5217; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5218; AVX1-NEXT: retq 5219; 5220; AVX2-LABEL: test126: 5221; AVX2: # %bb.0: # %entry 5222; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 5223; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5 5224; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 5225; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5226; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5227; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2 5228; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4 5229; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 5230; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5231; AVX2-NEXT: retq 5232; 5233; AVX512F-LABEL: test126: 5234; AVX512F: # %bb.0: # %entry 5235; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 5236; AVX512F-NEXT: retq 5237entry: 5238 %cmp = icmp ule <8 x i64> %a, %b 5239 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5240 ret <8 x i64> %sel 5241} 5242 5243define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) { 5244; SSE2-LABEL: test127: 5245; SSE2: # %bb.0: # %entry 5246; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 5247; SSE2-NEXT: movdqa %xmm4, %xmm9 5248; SSE2-NEXT: pxor %xmm8, %xmm9 5249; SSE2-NEXT: movdqa %xmm0, %xmm10 5250; SSE2-NEXT: pxor %xmm8, %xmm10 5251; SSE2-NEXT: movdqa %xmm10, %xmm11 5252; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 5253; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5254; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 5255; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 5256; SSE2-NEXT: pand %xmm12, %xmm9 5257; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 5258; SSE2-NEXT: por %xmm9, %xmm10 5259; SSE2-NEXT: pand %xmm10, %xmm0 5260; SSE2-NEXT: pandn %xmm4, %xmm10 5261; SSE2-NEXT: por %xmm10, %xmm0 5262; SSE2-NEXT: movdqa %xmm5, %xmm9 5263; SSE2-NEXT: pxor %xmm8, %xmm9 5264; SSE2-NEXT: movdqa %xmm1, %xmm4 5265; SSE2-NEXT: pxor %xmm8, %xmm4 5266; SSE2-NEXT: movdqa %xmm4, %xmm10 5267; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 5268; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 5269; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 5270; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 5271; SSE2-NEXT: pand %xmm11, %xmm9 5272; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 5273; SSE2-NEXT: por %xmm9, %xmm4 5274; SSE2-NEXT: pand %xmm4, %xmm1 5275; SSE2-NEXT: pandn %xmm5, %xmm4 5276; SSE2-NEXT: por %xmm4, %xmm1 5277; SSE2-NEXT: movdqa %xmm6, %xmm4 5278; SSE2-NEXT: pxor %xmm8, %xmm4 5279; SSE2-NEXT: movdqa %xmm2, %xmm5 5280; SSE2-NEXT: pxor %xmm8, %xmm5 5281; SSE2-NEXT: movdqa %xmm5, %xmm9 5282; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 5283; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 5284; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 5285; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 5286; SSE2-NEXT: pand %xmm10, %xmm4 5287; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 5288; SSE2-NEXT: por %xmm4, %xmm5 5289; SSE2-NEXT: pand %xmm5, %xmm2 5290; SSE2-NEXT: pandn %xmm6, %xmm5 5291; SSE2-NEXT: por %xmm5, %xmm2 5292; SSE2-NEXT: movdqa %xmm7, %xmm4 5293; SSE2-NEXT: pxor %xmm8, %xmm4 5294; SSE2-NEXT: pxor %xmm3, %xmm8 5295; SSE2-NEXT: movdqa %xmm8, %xmm5 5296; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 5297; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 5298; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 5299; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 5300; SSE2-NEXT: pand %xmm6, %xmm4 5301; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 5302; SSE2-NEXT: por %xmm4, %xmm5 5303; SSE2-NEXT: pand %xmm5, %xmm3 5304; SSE2-NEXT: pandn %xmm7, %xmm5 5305; SSE2-NEXT: por %xmm5, %xmm3 5306; SSE2-NEXT: retq 5307; 5308; SSE4-LABEL: test127: 5309; SSE4: # %bb.0: # %entry 5310; SSE4-NEXT: movdqa %xmm0, %xmm9 5311; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 5312; SSE4-NEXT: movdqa %xmm4, %xmm10 5313; SSE4-NEXT: pxor %xmm8, %xmm10 5314; SSE4-NEXT: pxor %xmm8, %xmm0 5315; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 5316; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 5317; SSE4-NEXT: movdqa %xmm5, %xmm9 5318; SSE4-NEXT: pxor %xmm8, %xmm9 5319; SSE4-NEXT: movdqa %xmm1, %xmm0 5320; SSE4-NEXT: pxor %xmm8, %xmm0 5321; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 5322; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 5323; SSE4-NEXT: movdqa %xmm6, %xmm1 5324; SSE4-NEXT: pxor %xmm8, %xmm1 5325; SSE4-NEXT: movdqa %xmm2, %xmm0 5326; SSE4-NEXT: pxor %xmm8, %xmm0 5327; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 5328; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 5329; SSE4-NEXT: movdqa %xmm7, %xmm0 5330; SSE4-NEXT: pxor %xmm8, %xmm0 5331; SSE4-NEXT: pxor %xmm3, %xmm8 5332; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 5333; SSE4-NEXT: movdqa %xmm8, %xmm0 5334; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 5335; SSE4-NEXT: movapd %xmm4, %xmm0 5336; SSE4-NEXT: movapd %xmm5, %xmm1 5337; SSE4-NEXT: movapd %xmm6, %xmm2 5338; SSE4-NEXT: movapd %xmm7, %xmm3 5339; SSE4-NEXT: retq 5340; 5341; AVX1-LABEL: test127: 5342; AVX1: # %bb.0: # %entry 5343; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5344; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5345; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5346; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5347; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5348; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5349; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm6 5350; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7 5351; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5352; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5353; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5354; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5355; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 5356; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5357; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5358; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 5359; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm4 5360; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5 5361; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5362; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 5363; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5364; AVX1-NEXT: retq 5365; 5366; AVX2-LABEL: test127: 5367; AVX2: # %bb.0: # %entry 5368; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 5369; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm5 5370; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 5371; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5372; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5373; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm2 5374; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm4 5375; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 5376; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5377; AVX2-NEXT: retq 5378; 5379; AVX512F-LABEL: test127: 5380; AVX512F: # %bb.0: # %entry 5381; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 5382; AVX512F-NEXT: retq 5383entry: 5384 %cmp = icmp ugt <8 x i64> %a, %b 5385 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5386 ret <8 x i64> %sel 5387} 5388 5389define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) { 5390; SSE2-LABEL: test128: 5391; SSE2: # %bb.0: # %entry 5392; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 5393; SSE2-NEXT: movdqa %xmm4, %xmm9 5394; SSE2-NEXT: pxor %xmm8, %xmm9 5395; SSE2-NEXT: movdqa %xmm0, %xmm10 5396; SSE2-NEXT: pxor %xmm8, %xmm10 5397; SSE2-NEXT: movdqa %xmm10, %xmm11 5398; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 5399; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5400; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 5401; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 5402; SSE2-NEXT: pand %xmm12, %xmm9 5403; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 5404; SSE2-NEXT: por %xmm9, %xmm10 5405; SSE2-NEXT: pand %xmm10, %xmm0 5406; SSE2-NEXT: pandn %xmm4, %xmm10 5407; SSE2-NEXT: por %xmm10, %xmm0 5408; SSE2-NEXT: movdqa %xmm5, %xmm9 5409; SSE2-NEXT: pxor %xmm8, %xmm9 5410; SSE2-NEXT: movdqa %xmm1, %xmm4 5411; SSE2-NEXT: pxor %xmm8, %xmm4 5412; SSE2-NEXT: movdqa %xmm4, %xmm10 5413; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 5414; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 5415; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 5416; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 5417; SSE2-NEXT: pand %xmm11, %xmm9 5418; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 5419; SSE2-NEXT: por %xmm9, %xmm4 5420; SSE2-NEXT: pand %xmm4, %xmm1 5421; SSE2-NEXT: pandn %xmm5, %xmm4 5422; SSE2-NEXT: por %xmm4, %xmm1 5423; SSE2-NEXT: movdqa %xmm6, %xmm4 5424; SSE2-NEXT: pxor %xmm8, %xmm4 5425; SSE2-NEXT: movdqa %xmm2, %xmm5 5426; SSE2-NEXT: pxor %xmm8, %xmm5 5427; SSE2-NEXT: movdqa %xmm5, %xmm9 5428; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 5429; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 5430; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 5431; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 5432; SSE2-NEXT: pand %xmm10, %xmm4 5433; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 5434; SSE2-NEXT: por %xmm4, %xmm5 5435; SSE2-NEXT: pand %xmm5, %xmm2 5436; SSE2-NEXT: pandn %xmm6, %xmm5 5437; SSE2-NEXT: por %xmm5, %xmm2 5438; SSE2-NEXT: movdqa %xmm7, %xmm4 5439; SSE2-NEXT: pxor %xmm8, %xmm4 5440; SSE2-NEXT: pxor %xmm3, %xmm8 5441; SSE2-NEXT: movdqa %xmm8, %xmm5 5442; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 5443; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 5444; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 5445; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 5446; SSE2-NEXT: pand %xmm6, %xmm4 5447; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 5448; SSE2-NEXT: por %xmm4, %xmm5 5449; SSE2-NEXT: pand %xmm5, %xmm3 5450; SSE2-NEXT: pandn %xmm7, %xmm5 5451; SSE2-NEXT: por %xmm5, %xmm3 5452; SSE2-NEXT: retq 5453; 5454; SSE4-LABEL: test128: 5455; SSE4: # %bb.0: # %entry 5456; SSE4-NEXT: movdqa %xmm0, %xmm9 5457; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 5458; SSE4-NEXT: movdqa %xmm4, %xmm10 5459; SSE4-NEXT: pxor %xmm8, %xmm10 5460; SSE4-NEXT: pxor %xmm8, %xmm0 5461; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 5462; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 5463; SSE4-NEXT: movdqa %xmm5, %xmm9 5464; SSE4-NEXT: pxor %xmm8, %xmm9 5465; SSE4-NEXT: movdqa %xmm1, %xmm0 5466; SSE4-NEXT: pxor %xmm8, %xmm0 5467; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 5468; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 5469; SSE4-NEXT: movdqa %xmm6, %xmm1 5470; SSE4-NEXT: pxor %xmm8, %xmm1 5471; SSE4-NEXT: movdqa %xmm2, %xmm0 5472; SSE4-NEXT: pxor %xmm8, %xmm0 5473; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 5474; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 5475; SSE4-NEXT: movdqa %xmm7, %xmm0 5476; SSE4-NEXT: pxor %xmm8, %xmm0 5477; SSE4-NEXT: pxor %xmm3, %xmm8 5478; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 5479; SSE4-NEXT: movdqa %xmm8, %xmm0 5480; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 5481; SSE4-NEXT: movapd %xmm4, %xmm0 5482; SSE4-NEXT: movapd %xmm5, %xmm1 5483; SSE4-NEXT: movapd %xmm6, %xmm2 5484; SSE4-NEXT: movapd %xmm7, %xmm3 5485; SSE4-NEXT: retq 5486; 5487; AVX1-LABEL: test128: 5488; AVX1: # %bb.0: # %entry 5489; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5490; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5491; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5492; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5493; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5494; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5495; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm6 5496; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7 5497; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5498; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5499; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5500; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5501; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 5502; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5503; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5504; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 5505; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm4 5506; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5 5507; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5508; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 5509; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5510; AVX1-NEXT: retq 5511; 5512; AVX2-LABEL: test128: 5513; AVX2: # %bb.0: # %entry 5514; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 5515; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm5 5516; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 5517; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5518; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5519; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm2 5520; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm4 5521; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 5522; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 5523; AVX2-NEXT: retq 5524; 5525; AVX512F-LABEL: test128: 5526; AVX512F: # %bb.0: # %entry 5527; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 5528; AVX512F-NEXT: retq 5529entry: 5530 %cmp = icmp uge <8 x i64> %a, %b 5531 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5532 ret <8 x i64> %sel 5533} 5534 5535define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) { 5536; SSE2-LABEL: test129: 5537; SSE2: # %bb.0: # %entry 5538; SSE2-NEXT: movdqa %xmm0, %xmm8 5539; SSE2-NEXT: pcmpgtb %xmm4, %xmm8 5540; SSE2-NEXT: pand %xmm8, %xmm0 5541; SSE2-NEXT: pandn %xmm4, %xmm8 5542; SSE2-NEXT: por %xmm0, %xmm8 5543; SSE2-NEXT: movdqa %xmm1, %xmm4 5544; SSE2-NEXT: pcmpgtb %xmm5, %xmm4 5545; SSE2-NEXT: pand %xmm4, %xmm1 5546; SSE2-NEXT: pandn %xmm5, %xmm4 5547; SSE2-NEXT: por %xmm1, %xmm4 5548; SSE2-NEXT: movdqa %xmm2, %xmm5 5549; SSE2-NEXT: pcmpgtb %xmm6, %xmm5 5550; SSE2-NEXT: pand %xmm5, %xmm2 5551; SSE2-NEXT: pandn %xmm6, %xmm5 5552; SSE2-NEXT: por %xmm2, %xmm5 5553; SSE2-NEXT: movdqa %xmm3, %xmm6 5554; SSE2-NEXT: pcmpgtb %xmm7, %xmm6 5555; SSE2-NEXT: pand %xmm6, %xmm3 5556; SSE2-NEXT: pandn %xmm7, %xmm6 5557; SSE2-NEXT: por %xmm3, %xmm6 5558; SSE2-NEXT: movdqa %xmm8, %xmm0 5559; SSE2-NEXT: movdqa %xmm4, %xmm1 5560; SSE2-NEXT: movdqa %xmm5, %xmm2 5561; SSE2-NEXT: movdqa %xmm6, %xmm3 5562; SSE2-NEXT: retq 5563; 5564; SSE4-LABEL: test129: 5565; SSE4: # %bb.0: # %entry 5566; SSE4-NEXT: pmaxsb %xmm4, %xmm0 5567; SSE4-NEXT: pmaxsb %xmm5, %xmm1 5568; SSE4-NEXT: pmaxsb %xmm6, %xmm2 5569; SSE4-NEXT: pmaxsb %xmm7, %xmm3 5570; SSE4-NEXT: retq 5571; 5572; AVX1-LABEL: test129: 5573; AVX1: # %bb.0: # %entry 5574; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5575; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5576; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 5577; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 5578; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5579; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5580; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5581; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 5582; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 5583; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5584; AVX1-NEXT: retq 5585; 5586; AVX2-LABEL: test129: 5587; AVX2: # %bb.0: # %entry 5588; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 5589; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 5590; AVX2-NEXT: retq 5591; 5592; AVX512BW-LABEL: test129: 5593; AVX512BW: # %bb.0: # %entry 5594; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 5595; AVX512BW-NEXT: retq 5596entry: 5597 %cmp = icmp slt <64 x i8> %a, %b 5598 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5599 ret <64 x i8> %sel 5600} 5601 5602define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) { 5603; SSE2-LABEL: test130: 5604; SSE2: # %bb.0: # %entry 5605; SSE2-NEXT: movdqa %xmm0, %xmm8 5606; SSE2-NEXT: pcmpgtb %xmm4, %xmm8 5607; SSE2-NEXT: pand %xmm8, %xmm0 5608; SSE2-NEXT: pandn %xmm4, %xmm8 5609; SSE2-NEXT: por %xmm0, %xmm8 5610; SSE2-NEXT: movdqa %xmm1, %xmm4 5611; SSE2-NEXT: pcmpgtb %xmm5, %xmm4 5612; SSE2-NEXT: pand %xmm4, %xmm1 5613; SSE2-NEXT: pandn %xmm5, %xmm4 5614; SSE2-NEXT: por %xmm1, %xmm4 5615; SSE2-NEXT: movdqa %xmm2, %xmm5 5616; SSE2-NEXT: pcmpgtb %xmm6, %xmm5 5617; SSE2-NEXT: pand %xmm5, %xmm2 5618; SSE2-NEXT: pandn %xmm6, %xmm5 5619; SSE2-NEXT: por %xmm2, %xmm5 5620; SSE2-NEXT: movdqa %xmm3, %xmm6 5621; SSE2-NEXT: pcmpgtb %xmm7, %xmm6 5622; SSE2-NEXT: pand %xmm6, %xmm3 5623; SSE2-NEXT: pandn %xmm7, %xmm6 5624; SSE2-NEXT: por %xmm3, %xmm6 5625; SSE2-NEXT: movdqa %xmm8, %xmm0 5626; SSE2-NEXT: movdqa %xmm4, %xmm1 5627; SSE2-NEXT: movdqa %xmm5, %xmm2 5628; SSE2-NEXT: movdqa %xmm6, %xmm3 5629; SSE2-NEXT: retq 5630; 5631; SSE4-LABEL: test130: 5632; SSE4: # %bb.0: # %entry 5633; SSE4-NEXT: pmaxsb %xmm4, %xmm0 5634; SSE4-NEXT: pmaxsb %xmm5, %xmm1 5635; SSE4-NEXT: pmaxsb %xmm6, %xmm2 5636; SSE4-NEXT: pmaxsb %xmm7, %xmm3 5637; SSE4-NEXT: retq 5638; 5639; AVX1-LABEL: test130: 5640; AVX1: # %bb.0: # %entry 5641; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5642; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5643; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 5644; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 5645; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5646; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5647; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5648; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 5649; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 5650; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5651; AVX1-NEXT: retq 5652; 5653; AVX2-LABEL: test130: 5654; AVX2: # %bb.0: # %entry 5655; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 5656; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 5657; AVX2-NEXT: retq 5658; 5659; AVX512BW-LABEL: test130: 5660; AVX512BW: # %bb.0: # %entry 5661; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 5662; AVX512BW-NEXT: retq 5663entry: 5664 %cmp = icmp sle <64 x i8> %a, %b 5665 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5666 ret <64 x i8> %sel 5667} 5668 5669define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) { 5670; SSE2-LABEL: test131: 5671; SSE2: # %bb.0: # %entry 5672; SSE2-NEXT: movdqa %xmm4, %xmm8 5673; SSE2-NEXT: pcmpgtb %xmm0, %xmm8 5674; SSE2-NEXT: pand %xmm8, %xmm0 5675; SSE2-NEXT: pandn %xmm4, %xmm8 5676; SSE2-NEXT: por %xmm8, %xmm0 5677; SSE2-NEXT: movdqa %xmm5, %xmm4 5678; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 5679; SSE2-NEXT: pand %xmm4, %xmm1 5680; SSE2-NEXT: pandn %xmm5, %xmm4 5681; SSE2-NEXT: por %xmm4, %xmm1 5682; SSE2-NEXT: movdqa %xmm6, %xmm4 5683; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 5684; SSE2-NEXT: pand %xmm4, %xmm2 5685; SSE2-NEXT: pandn %xmm6, %xmm4 5686; SSE2-NEXT: por %xmm4, %xmm2 5687; SSE2-NEXT: movdqa %xmm7, %xmm4 5688; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 5689; SSE2-NEXT: pand %xmm4, %xmm3 5690; SSE2-NEXT: pandn %xmm7, %xmm4 5691; SSE2-NEXT: por %xmm4, %xmm3 5692; SSE2-NEXT: retq 5693; 5694; SSE4-LABEL: test131: 5695; SSE4: # %bb.0: # %entry 5696; SSE4-NEXT: pminsb %xmm4, %xmm0 5697; SSE4-NEXT: pminsb %xmm5, %xmm1 5698; SSE4-NEXT: pminsb %xmm6, %xmm2 5699; SSE4-NEXT: pminsb %xmm7, %xmm3 5700; SSE4-NEXT: retq 5701; 5702; AVX1-LABEL: test131: 5703; AVX1: # %bb.0: # %entry 5704; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5705; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5706; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 5707; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 5708; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5709; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5710; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5711; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 5712; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 5713; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5714; AVX1-NEXT: retq 5715; 5716; AVX2-LABEL: test131: 5717; AVX2: # %bb.0: # %entry 5718; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 5719; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 5720; AVX2-NEXT: retq 5721; 5722; AVX512BW-LABEL: test131: 5723; AVX512BW: # %bb.0: # %entry 5724; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 5725; AVX512BW-NEXT: retq 5726entry: 5727 %cmp = icmp sgt <64 x i8> %a, %b 5728 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5729 ret <64 x i8> %sel 5730} 5731 5732define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) { 5733; SSE2-LABEL: test132: 5734; SSE2: # %bb.0: # %entry 5735; SSE2-NEXT: movdqa %xmm4, %xmm8 5736; SSE2-NEXT: pcmpgtb %xmm0, %xmm8 5737; SSE2-NEXT: pand %xmm8, %xmm0 5738; SSE2-NEXT: pandn %xmm4, %xmm8 5739; SSE2-NEXT: por %xmm8, %xmm0 5740; SSE2-NEXT: movdqa %xmm5, %xmm4 5741; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 5742; SSE2-NEXT: pand %xmm4, %xmm1 5743; SSE2-NEXT: pandn %xmm5, %xmm4 5744; SSE2-NEXT: por %xmm4, %xmm1 5745; SSE2-NEXT: movdqa %xmm6, %xmm4 5746; SSE2-NEXT: pcmpgtb %xmm2, %xmm4 5747; SSE2-NEXT: pand %xmm4, %xmm2 5748; SSE2-NEXT: pandn %xmm6, %xmm4 5749; SSE2-NEXT: por %xmm4, %xmm2 5750; SSE2-NEXT: movdqa %xmm7, %xmm4 5751; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 5752; SSE2-NEXT: pand %xmm4, %xmm3 5753; SSE2-NEXT: pandn %xmm7, %xmm4 5754; SSE2-NEXT: por %xmm4, %xmm3 5755; SSE2-NEXT: retq 5756; 5757; SSE4-LABEL: test132: 5758; SSE4: # %bb.0: # %entry 5759; SSE4-NEXT: pminsb %xmm4, %xmm0 5760; SSE4-NEXT: pminsb %xmm5, %xmm1 5761; SSE4-NEXT: pminsb %xmm6, %xmm2 5762; SSE4-NEXT: pminsb %xmm7, %xmm3 5763; SSE4-NEXT: retq 5764; 5765; AVX1-LABEL: test132: 5766; AVX1: # %bb.0: # %entry 5767; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5768; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5769; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 5770; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 5771; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5772; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5773; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5774; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 5775; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 5776; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5777; AVX1-NEXT: retq 5778; 5779; AVX2-LABEL: test132: 5780; AVX2: # %bb.0: # %entry 5781; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 5782; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 5783; AVX2-NEXT: retq 5784; 5785; AVX512BW-LABEL: test132: 5786; AVX512BW: # %bb.0: # %entry 5787; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 5788; AVX512BW-NEXT: retq 5789entry: 5790 %cmp = icmp sge <64 x i8> %a, %b 5791 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5792 ret <64 x i8> %sel 5793} 5794 5795define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) { 5796; SSE-LABEL: test133: 5797; SSE: # %bb.0: # %entry 5798; SSE-NEXT: pmaxub %xmm4, %xmm0 5799; SSE-NEXT: pmaxub %xmm5, %xmm1 5800; SSE-NEXT: pmaxub %xmm6, %xmm2 5801; SSE-NEXT: pmaxub %xmm7, %xmm3 5802; SSE-NEXT: retq 5803; 5804; AVX1-LABEL: test133: 5805; AVX1: # %bb.0: # %entry 5806; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5807; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5808; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 5809; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 5810; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5811; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5812; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5813; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 5814; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 5815; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5816; AVX1-NEXT: retq 5817; 5818; AVX2-LABEL: test133: 5819; AVX2: # %bb.0: # %entry 5820; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 5821; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 5822; AVX2-NEXT: retq 5823; 5824; AVX512BW-LABEL: test133: 5825; AVX512BW: # %bb.0: # %entry 5826; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 5827; AVX512BW-NEXT: retq 5828entry: 5829 %cmp = icmp ult <64 x i8> %a, %b 5830 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5831 ret <64 x i8> %sel 5832} 5833 5834define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) { 5835; SSE-LABEL: test134: 5836; SSE: # %bb.0: # %entry 5837; SSE-NEXT: pmaxub %xmm4, %xmm0 5838; SSE-NEXT: pmaxub %xmm5, %xmm1 5839; SSE-NEXT: pmaxub %xmm6, %xmm2 5840; SSE-NEXT: pmaxub %xmm7, %xmm3 5841; SSE-NEXT: retq 5842; 5843; AVX1-LABEL: test134: 5844; AVX1: # %bb.0: # %entry 5845; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5846; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5847; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 5848; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 5849; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5850; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5851; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5852; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 5853; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 5854; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5855; AVX1-NEXT: retq 5856; 5857; AVX2-LABEL: test134: 5858; AVX2: # %bb.0: # %entry 5859; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 5860; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 5861; AVX2-NEXT: retq 5862; 5863; AVX512BW-LABEL: test134: 5864; AVX512BW: # %bb.0: # %entry 5865; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 5866; AVX512BW-NEXT: retq 5867entry: 5868 %cmp = icmp ule <64 x i8> %a, %b 5869 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5870 ret <64 x i8> %sel 5871} 5872 5873define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) { 5874; SSE-LABEL: test135: 5875; SSE: # %bb.0: # %entry 5876; SSE-NEXT: pminub %xmm4, %xmm0 5877; SSE-NEXT: pminub %xmm5, %xmm1 5878; SSE-NEXT: pminub %xmm6, %xmm2 5879; SSE-NEXT: pminub %xmm7, %xmm3 5880; SSE-NEXT: retq 5881; 5882; AVX1-LABEL: test135: 5883; AVX1: # %bb.0: # %entry 5884; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5885; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5886; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 5887; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 5888; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5889; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5890; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5891; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 5892; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 5893; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5894; AVX1-NEXT: retq 5895; 5896; AVX2-LABEL: test135: 5897; AVX2: # %bb.0: # %entry 5898; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 5899; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 5900; AVX2-NEXT: retq 5901; 5902; AVX512BW-LABEL: test135: 5903; AVX512BW: # %bb.0: # %entry 5904; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 5905; AVX512BW-NEXT: retq 5906entry: 5907 %cmp = icmp ugt <64 x i8> %a, %b 5908 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5909 ret <64 x i8> %sel 5910} 5911 5912define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) { 5913; SSE-LABEL: test136: 5914; SSE: # %bb.0: # %entry 5915; SSE-NEXT: pminub %xmm4, %xmm0 5916; SSE-NEXT: pminub %xmm5, %xmm1 5917; SSE-NEXT: pminub %xmm6, %xmm2 5918; SSE-NEXT: pminub %xmm7, %xmm3 5919; SSE-NEXT: retq 5920; 5921; AVX1-LABEL: test136: 5922; AVX1: # %bb.0: # %entry 5923; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5924; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5925; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 5926; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 5927; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5928; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5929; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5930; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 5931; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 5932; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5933; AVX1-NEXT: retq 5934; 5935; AVX2-LABEL: test136: 5936; AVX2: # %bb.0: # %entry 5937; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 5938; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 5939; AVX2-NEXT: retq 5940; 5941; AVX512BW-LABEL: test136: 5942; AVX512BW: # %bb.0: # %entry 5943; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 5944; AVX512BW-NEXT: retq 5945entry: 5946 %cmp = icmp uge <64 x i8> %a, %b 5947 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 5948 ret <64 x i8> %sel 5949} 5950 5951define <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) { 5952; SSE-LABEL: test137: 5953; SSE: # %bb.0: # %entry 5954; SSE-NEXT: pmaxsw %xmm4, %xmm0 5955; SSE-NEXT: pmaxsw %xmm5, %xmm1 5956; SSE-NEXT: pmaxsw %xmm6, %xmm2 5957; SSE-NEXT: pmaxsw %xmm7, %xmm3 5958; SSE-NEXT: retq 5959; 5960; AVX1-LABEL: test137: 5961; AVX1: # %bb.0: # %entry 5962; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5963; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 5964; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 5965; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 5966; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 5967; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 5968; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5969; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 5970; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 5971; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 5972; AVX1-NEXT: retq 5973; 5974; AVX2-LABEL: test137: 5975; AVX2: # %bb.0: # %entry 5976; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 5977; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 5978; AVX2-NEXT: retq 5979; 5980; AVX512BW-LABEL: test137: 5981; AVX512BW: # %bb.0: # %entry 5982; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 5983; AVX512BW-NEXT: retq 5984entry: 5985 %cmp = icmp slt <32 x i16> %a, %b 5986 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 5987 ret <32 x i16> %sel 5988} 5989 5990define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) { 5991; SSE-LABEL: test138: 5992; SSE: # %bb.0: # %entry 5993; SSE-NEXT: pmaxsw %xmm4, %xmm0 5994; SSE-NEXT: pmaxsw %xmm5, %xmm1 5995; SSE-NEXT: pmaxsw %xmm6, %xmm2 5996; SSE-NEXT: pmaxsw %xmm7, %xmm3 5997; SSE-NEXT: retq 5998; 5999; AVX1-LABEL: test138: 6000; AVX1: # %bb.0: # %entry 6001; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6002; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6003; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 6004; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 6005; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6006; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6007; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6008; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 6009; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 6010; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6011; AVX1-NEXT: retq 6012; 6013; AVX2-LABEL: test138: 6014; AVX2: # %bb.0: # %entry 6015; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 6016; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 6017; AVX2-NEXT: retq 6018; 6019; AVX512BW-LABEL: test138: 6020; AVX512BW: # %bb.0: # %entry 6021; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 6022; AVX512BW-NEXT: retq 6023entry: 6024 %cmp = icmp sle <32 x i16> %a, %b 6025 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6026 ret <32 x i16> %sel 6027} 6028 6029define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) { 6030; SSE-LABEL: test139: 6031; SSE: # %bb.0: # %entry 6032; SSE-NEXT: pminsw %xmm4, %xmm0 6033; SSE-NEXT: pminsw %xmm5, %xmm1 6034; SSE-NEXT: pminsw %xmm6, %xmm2 6035; SSE-NEXT: pminsw %xmm7, %xmm3 6036; SSE-NEXT: retq 6037; 6038; AVX1-LABEL: test139: 6039; AVX1: # %bb.0: # %entry 6040; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6041; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6042; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 6043; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 6044; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6045; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6046; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6047; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 6048; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 6049; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6050; AVX1-NEXT: retq 6051; 6052; AVX2-LABEL: test139: 6053; AVX2: # %bb.0: # %entry 6054; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 6055; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 6056; AVX2-NEXT: retq 6057; 6058; AVX512BW-LABEL: test139: 6059; AVX512BW: # %bb.0: # %entry 6060; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 6061; AVX512BW-NEXT: retq 6062entry: 6063 %cmp = icmp sgt <32 x i16> %a, %b 6064 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6065 ret <32 x i16> %sel 6066} 6067 6068define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) { 6069; SSE-LABEL: test140: 6070; SSE: # %bb.0: # %entry 6071; SSE-NEXT: pminsw %xmm4, %xmm0 6072; SSE-NEXT: pminsw %xmm5, %xmm1 6073; SSE-NEXT: pminsw %xmm6, %xmm2 6074; SSE-NEXT: pminsw %xmm7, %xmm3 6075; SSE-NEXT: retq 6076; 6077; AVX1-LABEL: test140: 6078; AVX1: # %bb.0: # %entry 6079; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6080; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6081; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 6082; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 6083; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6084; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6085; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6086; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 6087; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 6088; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6089; AVX1-NEXT: retq 6090; 6091; AVX2-LABEL: test140: 6092; AVX2: # %bb.0: # %entry 6093; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 6094; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 6095; AVX2-NEXT: retq 6096; 6097; AVX512BW-LABEL: test140: 6098; AVX512BW: # %bb.0: # %entry 6099; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 6100; AVX512BW-NEXT: retq 6101entry: 6102 %cmp = icmp sge <32 x i16> %a, %b 6103 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6104 ret <32 x i16> %sel 6105} 6106 6107define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) { 6108; SSE2-LABEL: test141: 6109; SSE2: # %bb.0: # %entry 6110; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768] 6111; SSE2-NEXT: pxor %xmm8, %xmm4 6112; SSE2-NEXT: pxor %xmm8, %xmm0 6113; SSE2-NEXT: pmaxsw %xmm4, %xmm0 6114; SSE2-NEXT: pxor %xmm8, %xmm0 6115; SSE2-NEXT: pxor %xmm8, %xmm5 6116; SSE2-NEXT: pxor %xmm8, %xmm1 6117; SSE2-NEXT: pmaxsw %xmm5, %xmm1 6118; SSE2-NEXT: pxor %xmm8, %xmm1 6119; SSE2-NEXT: pxor %xmm8, %xmm6 6120; SSE2-NEXT: pxor %xmm8, %xmm2 6121; SSE2-NEXT: pmaxsw %xmm6, %xmm2 6122; SSE2-NEXT: pxor %xmm8, %xmm2 6123; SSE2-NEXT: pxor %xmm8, %xmm7 6124; SSE2-NEXT: pxor %xmm8, %xmm3 6125; SSE2-NEXT: pmaxsw %xmm7, %xmm3 6126; SSE2-NEXT: pxor %xmm8, %xmm3 6127; SSE2-NEXT: retq 6128; 6129; SSE4-LABEL: test141: 6130; SSE4: # %bb.0: # %entry 6131; SSE4-NEXT: pmaxuw %xmm4, %xmm0 6132; SSE4-NEXT: pmaxuw %xmm5, %xmm1 6133; SSE4-NEXT: pmaxuw %xmm6, %xmm2 6134; SSE4-NEXT: pmaxuw %xmm7, %xmm3 6135; SSE4-NEXT: retq 6136; 6137; AVX1-LABEL: test141: 6138; AVX1: # %bb.0: # %entry 6139; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6140; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6141; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 6142; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 6143; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6144; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6145; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6146; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 6147; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 6148; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6149; AVX1-NEXT: retq 6150; 6151; AVX2-LABEL: test141: 6152; AVX2: # %bb.0: # %entry 6153; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 6154; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 6155; AVX2-NEXT: retq 6156; 6157; AVX512BW-LABEL: test141: 6158; AVX512BW: # %bb.0: # %entry 6159; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 6160; AVX512BW-NEXT: retq 6161entry: 6162 %cmp = icmp ult <32 x i16> %a, %b 6163 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6164 ret <32 x i16> %sel 6165} 6166 6167define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) { 6168; SSE2-LABEL: test142: 6169; SSE2: # %bb.0: # %entry 6170; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768] 6171; SSE2-NEXT: pxor %xmm8, %xmm4 6172; SSE2-NEXT: pxor %xmm8, %xmm0 6173; SSE2-NEXT: pmaxsw %xmm4, %xmm0 6174; SSE2-NEXT: pxor %xmm8, %xmm0 6175; SSE2-NEXT: pxor %xmm8, %xmm5 6176; SSE2-NEXT: pxor %xmm8, %xmm1 6177; SSE2-NEXT: pmaxsw %xmm5, %xmm1 6178; SSE2-NEXT: pxor %xmm8, %xmm1 6179; SSE2-NEXT: pxor %xmm8, %xmm6 6180; SSE2-NEXT: pxor %xmm8, %xmm2 6181; SSE2-NEXT: pmaxsw %xmm6, %xmm2 6182; SSE2-NEXT: pxor %xmm8, %xmm2 6183; SSE2-NEXT: pxor %xmm8, %xmm7 6184; SSE2-NEXT: pxor %xmm8, %xmm3 6185; SSE2-NEXT: pmaxsw %xmm7, %xmm3 6186; SSE2-NEXT: pxor %xmm8, %xmm3 6187; SSE2-NEXT: retq 6188; 6189; SSE4-LABEL: test142: 6190; SSE4: # %bb.0: # %entry 6191; SSE4-NEXT: pmaxuw %xmm4, %xmm0 6192; SSE4-NEXT: pmaxuw %xmm5, %xmm1 6193; SSE4-NEXT: pmaxuw %xmm6, %xmm2 6194; SSE4-NEXT: pmaxuw %xmm7, %xmm3 6195; SSE4-NEXT: retq 6196; 6197; AVX1-LABEL: test142: 6198; AVX1: # %bb.0: # %entry 6199; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6200; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6201; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 6202; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 6203; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6204; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6205; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6206; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 6207; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 6208; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6209; AVX1-NEXT: retq 6210; 6211; AVX2-LABEL: test142: 6212; AVX2: # %bb.0: # %entry 6213; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 6214; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 6215; AVX2-NEXT: retq 6216; 6217; AVX512BW-LABEL: test142: 6218; AVX512BW: # %bb.0: # %entry 6219; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 6220; AVX512BW-NEXT: retq 6221entry: 6222 %cmp = icmp ule <32 x i16> %a, %b 6223 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6224 ret <32 x i16> %sel 6225} 6226 6227define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) { 6228; SSE2-LABEL: test143: 6229; SSE2: # %bb.0: # %entry 6230; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768] 6231; SSE2-NEXT: pxor %xmm8, %xmm4 6232; SSE2-NEXT: pxor %xmm8, %xmm0 6233; SSE2-NEXT: pminsw %xmm4, %xmm0 6234; SSE2-NEXT: pxor %xmm8, %xmm0 6235; SSE2-NEXT: pxor %xmm8, %xmm5 6236; SSE2-NEXT: pxor %xmm8, %xmm1 6237; SSE2-NEXT: pminsw %xmm5, %xmm1 6238; SSE2-NEXT: pxor %xmm8, %xmm1 6239; SSE2-NEXT: pxor %xmm8, %xmm6 6240; SSE2-NEXT: pxor %xmm8, %xmm2 6241; SSE2-NEXT: pminsw %xmm6, %xmm2 6242; SSE2-NEXT: pxor %xmm8, %xmm2 6243; SSE2-NEXT: pxor %xmm8, %xmm7 6244; SSE2-NEXT: pxor %xmm8, %xmm3 6245; SSE2-NEXT: pminsw %xmm7, %xmm3 6246; SSE2-NEXT: pxor %xmm8, %xmm3 6247; SSE2-NEXT: retq 6248; 6249; SSE4-LABEL: test143: 6250; SSE4: # %bb.0: # %entry 6251; SSE4-NEXT: pminuw %xmm4, %xmm0 6252; SSE4-NEXT: pminuw %xmm5, %xmm1 6253; SSE4-NEXT: pminuw %xmm6, %xmm2 6254; SSE4-NEXT: pminuw %xmm7, %xmm3 6255; SSE4-NEXT: retq 6256; 6257; AVX1-LABEL: test143: 6258; AVX1: # %bb.0: # %entry 6259; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6260; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6261; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 6262; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 6263; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6264; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6265; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6266; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 6267; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 6268; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6269; AVX1-NEXT: retq 6270; 6271; AVX2-LABEL: test143: 6272; AVX2: # %bb.0: # %entry 6273; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 6274; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 6275; AVX2-NEXT: retq 6276; 6277; AVX512BW-LABEL: test143: 6278; AVX512BW: # %bb.0: # %entry 6279; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 6280; AVX512BW-NEXT: retq 6281entry: 6282 %cmp = icmp ugt <32 x i16> %a, %b 6283 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6284 ret <32 x i16> %sel 6285} 6286 6287define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) { 6288; SSE2-LABEL: test144: 6289; SSE2: # %bb.0: # %entry 6290; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768] 6291; SSE2-NEXT: pxor %xmm8, %xmm4 6292; SSE2-NEXT: pxor %xmm8, %xmm0 6293; SSE2-NEXT: pminsw %xmm4, %xmm0 6294; SSE2-NEXT: pxor %xmm8, %xmm0 6295; SSE2-NEXT: pxor %xmm8, %xmm5 6296; SSE2-NEXT: pxor %xmm8, %xmm1 6297; SSE2-NEXT: pminsw %xmm5, %xmm1 6298; SSE2-NEXT: pxor %xmm8, %xmm1 6299; SSE2-NEXT: pxor %xmm8, %xmm6 6300; SSE2-NEXT: pxor %xmm8, %xmm2 6301; SSE2-NEXT: pminsw %xmm6, %xmm2 6302; SSE2-NEXT: pxor %xmm8, %xmm2 6303; SSE2-NEXT: pxor %xmm8, %xmm7 6304; SSE2-NEXT: pxor %xmm8, %xmm3 6305; SSE2-NEXT: pminsw %xmm7, %xmm3 6306; SSE2-NEXT: pxor %xmm8, %xmm3 6307; SSE2-NEXT: retq 6308; 6309; SSE4-LABEL: test144: 6310; SSE4: # %bb.0: # %entry 6311; SSE4-NEXT: pminuw %xmm4, %xmm0 6312; SSE4-NEXT: pminuw %xmm5, %xmm1 6313; SSE4-NEXT: pminuw %xmm6, %xmm2 6314; SSE4-NEXT: pminuw %xmm7, %xmm3 6315; SSE4-NEXT: retq 6316; 6317; AVX1-LABEL: test144: 6318; AVX1: # %bb.0: # %entry 6319; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6320; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6321; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 6322; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 6323; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6324; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6325; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6326; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 6327; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 6328; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6329; AVX1-NEXT: retq 6330; 6331; AVX2-LABEL: test144: 6332; AVX2: # %bb.0: # %entry 6333; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 6334; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 6335; AVX2-NEXT: retq 6336; 6337; AVX512BW-LABEL: test144: 6338; AVX512BW: # %bb.0: # %entry 6339; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 6340; AVX512BW-NEXT: retq 6341entry: 6342 %cmp = icmp uge <32 x i16> %a, %b 6343 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6344 ret <32 x i16> %sel 6345} 6346 6347define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) { 6348; SSE2-LABEL: test145: 6349; SSE2: # %bb.0: # %entry 6350; SSE2-NEXT: movdqa %xmm0, %xmm8 6351; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6352; SSE2-NEXT: pand %xmm8, %xmm0 6353; SSE2-NEXT: pandn %xmm4, %xmm8 6354; SSE2-NEXT: por %xmm0, %xmm8 6355; SSE2-NEXT: movdqa %xmm1, %xmm4 6356; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 6357; SSE2-NEXT: pand %xmm4, %xmm1 6358; SSE2-NEXT: pandn %xmm5, %xmm4 6359; SSE2-NEXT: por %xmm1, %xmm4 6360; SSE2-NEXT: movdqa %xmm2, %xmm5 6361; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 6362; SSE2-NEXT: pand %xmm5, %xmm2 6363; SSE2-NEXT: pandn %xmm6, %xmm5 6364; SSE2-NEXT: por %xmm2, %xmm5 6365; SSE2-NEXT: movdqa %xmm3, %xmm6 6366; SSE2-NEXT: pcmpgtd %xmm7, %xmm6 6367; SSE2-NEXT: pand %xmm6, %xmm3 6368; SSE2-NEXT: pandn %xmm7, %xmm6 6369; SSE2-NEXT: por %xmm3, %xmm6 6370; SSE2-NEXT: movdqa %xmm8, %xmm0 6371; SSE2-NEXT: movdqa %xmm4, %xmm1 6372; SSE2-NEXT: movdqa %xmm5, %xmm2 6373; SSE2-NEXT: movdqa %xmm6, %xmm3 6374; SSE2-NEXT: retq 6375; 6376; SSE4-LABEL: test145: 6377; SSE4: # %bb.0: # %entry 6378; SSE4-NEXT: pmaxsd %xmm4, %xmm0 6379; SSE4-NEXT: pmaxsd %xmm5, %xmm1 6380; SSE4-NEXT: pmaxsd %xmm6, %xmm2 6381; SSE4-NEXT: pmaxsd %xmm7, %xmm3 6382; SSE4-NEXT: retq 6383; 6384; AVX1-LABEL: test145: 6385; AVX1: # %bb.0: # %entry 6386; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6387; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6388; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 6389; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 6390; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6391; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6392; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6393; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 6394; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 6395; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6396; AVX1-NEXT: retq 6397; 6398; AVX2-LABEL: test145: 6399; AVX2: # %bb.0: # %entry 6400; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 6401; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 6402; AVX2-NEXT: retq 6403; 6404; AVX512F-LABEL: test145: 6405; AVX512F: # %bb.0: # %entry 6406; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 6407; AVX512F-NEXT: retq 6408entry: 6409 %cmp = icmp slt <16 x i32> %a, %b 6410 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6411 ret <16 x i32> %sel 6412} 6413 6414define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) { 6415; SSE2-LABEL: test146: 6416; SSE2: # %bb.0: # %entry 6417; SSE2-NEXT: movdqa %xmm0, %xmm8 6418; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6419; SSE2-NEXT: pand %xmm8, %xmm0 6420; SSE2-NEXT: pandn %xmm4, %xmm8 6421; SSE2-NEXT: por %xmm0, %xmm8 6422; SSE2-NEXT: movdqa %xmm1, %xmm4 6423; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 6424; SSE2-NEXT: pand %xmm4, %xmm1 6425; SSE2-NEXT: pandn %xmm5, %xmm4 6426; SSE2-NEXT: por %xmm1, %xmm4 6427; SSE2-NEXT: movdqa %xmm2, %xmm5 6428; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 6429; SSE2-NEXT: pand %xmm5, %xmm2 6430; SSE2-NEXT: pandn %xmm6, %xmm5 6431; SSE2-NEXT: por %xmm2, %xmm5 6432; SSE2-NEXT: movdqa %xmm3, %xmm6 6433; SSE2-NEXT: pcmpgtd %xmm7, %xmm6 6434; SSE2-NEXT: pand %xmm6, %xmm3 6435; SSE2-NEXT: pandn %xmm7, %xmm6 6436; SSE2-NEXT: por %xmm3, %xmm6 6437; SSE2-NEXT: movdqa %xmm8, %xmm0 6438; SSE2-NEXT: movdqa %xmm4, %xmm1 6439; SSE2-NEXT: movdqa %xmm5, %xmm2 6440; SSE2-NEXT: movdqa %xmm6, %xmm3 6441; SSE2-NEXT: retq 6442; 6443; SSE4-LABEL: test146: 6444; SSE4: # %bb.0: # %entry 6445; SSE4-NEXT: pmaxsd %xmm4, %xmm0 6446; SSE4-NEXT: pmaxsd %xmm5, %xmm1 6447; SSE4-NEXT: pmaxsd %xmm6, %xmm2 6448; SSE4-NEXT: pmaxsd %xmm7, %xmm3 6449; SSE4-NEXT: retq 6450; 6451; AVX1-LABEL: test146: 6452; AVX1: # %bb.0: # %entry 6453; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6454; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6455; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 6456; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 6457; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6458; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6459; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6460; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 6461; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 6462; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6463; AVX1-NEXT: retq 6464; 6465; AVX2-LABEL: test146: 6466; AVX2: # %bb.0: # %entry 6467; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 6468; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 6469; AVX2-NEXT: retq 6470; 6471; AVX512F-LABEL: test146: 6472; AVX512F: # %bb.0: # %entry 6473; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 6474; AVX512F-NEXT: retq 6475entry: 6476 %cmp = icmp sle <16 x i32> %a, %b 6477 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6478 ret <16 x i32> %sel 6479} 6480 6481define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) { 6482; SSE2-LABEL: test147: 6483; SSE2: # %bb.0: # %entry 6484; SSE2-NEXT: movdqa %xmm4, %xmm8 6485; SSE2-NEXT: pcmpgtd %xmm0, %xmm8 6486; SSE2-NEXT: pand %xmm8, %xmm0 6487; SSE2-NEXT: pandn %xmm4, %xmm8 6488; SSE2-NEXT: por %xmm8, %xmm0 6489; SSE2-NEXT: movdqa %xmm5, %xmm4 6490; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 6491; SSE2-NEXT: pand %xmm4, %xmm1 6492; SSE2-NEXT: pandn %xmm5, %xmm4 6493; SSE2-NEXT: por %xmm4, %xmm1 6494; SSE2-NEXT: movdqa %xmm6, %xmm4 6495; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 6496; SSE2-NEXT: pand %xmm4, %xmm2 6497; SSE2-NEXT: pandn %xmm6, %xmm4 6498; SSE2-NEXT: por %xmm4, %xmm2 6499; SSE2-NEXT: movdqa %xmm7, %xmm4 6500; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 6501; SSE2-NEXT: pand %xmm4, %xmm3 6502; SSE2-NEXT: pandn %xmm7, %xmm4 6503; SSE2-NEXT: por %xmm4, %xmm3 6504; SSE2-NEXT: retq 6505; 6506; SSE4-LABEL: test147: 6507; SSE4: # %bb.0: # %entry 6508; SSE4-NEXT: pminsd %xmm4, %xmm0 6509; SSE4-NEXT: pminsd %xmm5, %xmm1 6510; SSE4-NEXT: pminsd %xmm6, %xmm2 6511; SSE4-NEXT: pminsd %xmm7, %xmm3 6512; SSE4-NEXT: retq 6513; 6514; AVX1-LABEL: test147: 6515; AVX1: # %bb.0: # %entry 6516; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6517; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6518; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 6519; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 6520; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6521; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6522; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6523; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 6524; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 6525; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6526; AVX1-NEXT: retq 6527; 6528; AVX2-LABEL: test147: 6529; AVX2: # %bb.0: # %entry 6530; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 6531; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 6532; AVX2-NEXT: retq 6533; 6534; AVX512F-LABEL: test147: 6535; AVX512F: # %bb.0: # %entry 6536; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0 6537; AVX512F-NEXT: retq 6538entry: 6539 %cmp = icmp sgt <16 x i32> %a, %b 6540 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6541 ret <16 x i32> %sel 6542} 6543 6544define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) { 6545; SSE2-LABEL: test148: 6546; SSE2: # %bb.0: # %entry 6547; SSE2-NEXT: movdqa %xmm4, %xmm8 6548; SSE2-NEXT: pcmpgtd %xmm0, %xmm8 6549; SSE2-NEXT: pand %xmm8, %xmm0 6550; SSE2-NEXT: pandn %xmm4, %xmm8 6551; SSE2-NEXT: por %xmm8, %xmm0 6552; SSE2-NEXT: movdqa %xmm5, %xmm4 6553; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 6554; SSE2-NEXT: pand %xmm4, %xmm1 6555; SSE2-NEXT: pandn %xmm5, %xmm4 6556; SSE2-NEXT: por %xmm4, %xmm1 6557; SSE2-NEXT: movdqa %xmm6, %xmm4 6558; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 6559; SSE2-NEXT: pand %xmm4, %xmm2 6560; SSE2-NEXT: pandn %xmm6, %xmm4 6561; SSE2-NEXT: por %xmm4, %xmm2 6562; SSE2-NEXT: movdqa %xmm7, %xmm4 6563; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 6564; SSE2-NEXT: pand %xmm4, %xmm3 6565; SSE2-NEXT: pandn %xmm7, %xmm4 6566; SSE2-NEXT: por %xmm4, %xmm3 6567; SSE2-NEXT: retq 6568; 6569; SSE4-LABEL: test148: 6570; SSE4: # %bb.0: # %entry 6571; SSE4-NEXT: pminsd %xmm4, %xmm0 6572; SSE4-NEXT: pminsd %xmm5, %xmm1 6573; SSE4-NEXT: pminsd %xmm6, %xmm2 6574; SSE4-NEXT: pminsd %xmm7, %xmm3 6575; SSE4-NEXT: retq 6576; 6577; AVX1-LABEL: test148: 6578; AVX1: # %bb.0: # %entry 6579; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6580; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6581; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 6582; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 6583; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6584; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6585; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6586; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 6587; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 6588; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6589; AVX1-NEXT: retq 6590; 6591; AVX2-LABEL: test148: 6592; AVX2: # %bb.0: # %entry 6593; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 6594; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 6595; AVX2-NEXT: retq 6596; 6597; AVX512F-LABEL: test148: 6598; AVX512F: # %bb.0: # %entry 6599; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0 6600; AVX512F-NEXT: retq 6601entry: 6602 %cmp = icmp sge <16 x i32> %a, %b 6603 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6604 ret <16 x i32> %sel 6605} 6606 6607define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) { 6608; SSE2-LABEL: test149: 6609; SSE2: # %bb.0: # %entry 6610; SSE2-NEXT: movdqa %xmm1, %xmm8 6611; SSE2-NEXT: movdqa %xmm0, %xmm10 6612; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648] 6613; SSE2-NEXT: movdqa %xmm4, %xmm1 6614; SSE2-NEXT: pxor %xmm9, %xmm1 6615; SSE2-NEXT: pxor %xmm9, %xmm0 6616; SSE2-NEXT: pcmpgtd %xmm1, %xmm0 6617; SSE2-NEXT: pand %xmm0, %xmm10 6618; SSE2-NEXT: pandn %xmm4, %xmm0 6619; SSE2-NEXT: por %xmm10, %xmm0 6620; SSE2-NEXT: movdqa %xmm5, %xmm4 6621; SSE2-NEXT: pxor %xmm9, %xmm4 6622; SSE2-NEXT: movdqa %xmm8, %xmm1 6623; SSE2-NEXT: pxor %xmm9, %xmm1 6624; SSE2-NEXT: pcmpgtd %xmm4, %xmm1 6625; SSE2-NEXT: pand %xmm1, %xmm8 6626; SSE2-NEXT: pandn %xmm5, %xmm1 6627; SSE2-NEXT: por %xmm8, %xmm1 6628; SSE2-NEXT: movdqa %xmm6, %xmm5 6629; SSE2-NEXT: pxor %xmm9, %xmm5 6630; SSE2-NEXT: movdqa %xmm2, %xmm4 6631; SSE2-NEXT: pxor %xmm9, %xmm4 6632; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 6633; SSE2-NEXT: pand %xmm4, %xmm2 6634; SSE2-NEXT: pandn %xmm6, %xmm4 6635; SSE2-NEXT: por %xmm2, %xmm4 6636; SSE2-NEXT: movdqa %xmm7, %xmm2 6637; SSE2-NEXT: pxor %xmm9, %xmm2 6638; SSE2-NEXT: pxor %xmm3, %xmm9 6639; SSE2-NEXT: pcmpgtd %xmm2, %xmm9 6640; SSE2-NEXT: pand %xmm9, %xmm3 6641; SSE2-NEXT: pandn %xmm7, %xmm9 6642; SSE2-NEXT: por %xmm9, %xmm3 6643; SSE2-NEXT: movdqa %xmm4, %xmm2 6644; SSE2-NEXT: retq 6645; 6646; SSE4-LABEL: test149: 6647; SSE4: # %bb.0: # %entry 6648; SSE4-NEXT: pmaxud %xmm4, %xmm0 6649; SSE4-NEXT: pmaxud %xmm5, %xmm1 6650; SSE4-NEXT: pmaxud %xmm6, %xmm2 6651; SSE4-NEXT: pmaxud %xmm7, %xmm3 6652; SSE4-NEXT: retq 6653; 6654; AVX1-LABEL: test149: 6655; AVX1: # %bb.0: # %entry 6656; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6657; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6658; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 6659; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 6660; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6661; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6662; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6663; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 6664; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 6665; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6666; AVX1-NEXT: retq 6667; 6668; AVX2-LABEL: test149: 6669; AVX2: # %bb.0: # %entry 6670; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 6671; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 6672; AVX2-NEXT: retq 6673; 6674; AVX512F-LABEL: test149: 6675; AVX512F: # %bb.0: # %entry 6676; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 6677; AVX512F-NEXT: retq 6678entry: 6679 %cmp = icmp ult <16 x i32> %a, %b 6680 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6681 ret <16 x i32> %sel 6682} 6683 6684define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) { 6685; SSE2-LABEL: test150: 6686; SSE2: # %bb.0: # %entry 6687; SSE2-NEXT: movdqa %xmm1, %xmm8 6688; SSE2-NEXT: movdqa %xmm0, %xmm10 6689; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648] 6690; SSE2-NEXT: movdqa %xmm4, %xmm1 6691; SSE2-NEXT: pxor %xmm9, %xmm1 6692; SSE2-NEXT: pxor %xmm9, %xmm0 6693; SSE2-NEXT: pcmpgtd %xmm1, %xmm0 6694; SSE2-NEXT: pand %xmm0, %xmm10 6695; SSE2-NEXT: pandn %xmm4, %xmm0 6696; SSE2-NEXT: por %xmm10, %xmm0 6697; SSE2-NEXT: movdqa %xmm5, %xmm4 6698; SSE2-NEXT: pxor %xmm9, %xmm4 6699; SSE2-NEXT: movdqa %xmm8, %xmm1 6700; SSE2-NEXT: pxor %xmm9, %xmm1 6701; SSE2-NEXT: pcmpgtd %xmm4, %xmm1 6702; SSE2-NEXT: pand %xmm1, %xmm8 6703; SSE2-NEXT: pandn %xmm5, %xmm1 6704; SSE2-NEXT: por %xmm8, %xmm1 6705; SSE2-NEXT: movdqa %xmm6, %xmm5 6706; SSE2-NEXT: pxor %xmm9, %xmm5 6707; SSE2-NEXT: movdqa %xmm2, %xmm4 6708; SSE2-NEXT: pxor %xmm9, %xmm4 6709; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 6710; SSE2-NEXT: pand %xmm4, %xmm2 6711; SSE2-NEXT: pandn %xmm6, %xmm4 6712; SSE2-NEXT: por %xmm2, %xmm4 6713; SSE2-NEXT: movdqa %xmm7, %xmm2 6714; SSE2-NEXT: pxor %xmm9, %xmm2 6715; SSE2-NEXT: pxor %xmm3, %xmm9 6716; SSE2-NEXT: pcmpgtd %xmm2, %xmm9 6717; SSE2-NEXT: pand %xmm9, %xmm3 6718; SSE2-NEXT: pandn %xmm7, %xmm9 6719; SSE2-NEXT: por %xmm9, %xmm3 6720; SSE2-NEXT: movdqa %xmm4, %xmm2 6721; SSE2-NEXT: retq 6722; 6723; SSE4-LABEL: test150: 6724; SSE4: # %bb.0: # %entry 6725; SSE4-NEXT: pmaxud %xmm4, %xmm0 6726; SSE4-NEXT: pmaxud %xmm5, %xmm1 6727; SSE4-NEXT: pmaxud %xmm6, %xmm2 6728; SSE4-NEXT: pmaxud %xmm7, %xmm3 6729; SSE4-NEXT: retq 6730; 6731; AVX1-LABEL: test150: 6732; AVX1: # %bb.0: # %entry 6733; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6734; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6735; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 6736; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 6737; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6738; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6739; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6740; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 6741; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 6742; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6743; AVX1-NEXT: retq 6744; 6745; AVX2-LABEL: test150: 6746; AVX2: # %bb.0: # %entry 6747; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 6748; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 6749; AVX2-NEXT: retq 6750; 6751; AVX512F-LABEL: test150: 6752; AVX512F: # %bb.0: # %entry 6753; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 6754; AVX512F-NEXT: retq 6755entry: 6756 %cmp = icmp ule <16 x i32> %a, %b 6757 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6758 ret <16 x i32> %sel 6759} 6760 6761define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) { 6762; SSE2-LABEL: test151: 6763; SSE2: # %bb.0: # %entry 6764; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 6765; SSE2-NEXT: movdqa %xmm0, %xmm9 6766; SSE2-NEXT: pxor %xmm8, %xmm9 6767; SSE2-NEXT: movdqa %xmm4, %xmm10 6768; SSE2-NEXT: pxor %xmm8, %xmm10 6769; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 6770; SSE2-NEXT: pand %xmm10, %xmm0 6771; SSE2-NEXT: pandn %xmm4, %xmm10 6772; SSE2-NEXT: por %xmm10, %xmm0 6773; SSE2-NEXT: movdqa %xmm1, %xmm9 6774; SSE2-NEXT: pxor %xmm8, %xmm9 6775; SSE2-NEXT: movdqa %xmm5, %xmm4 6776; SSE2-NEXT: pxor %xmm8, %xmm4 6777; SSE2-NEXT: pcmpgtd %xmm9, %xmm4 6778; SSE2-NEXT: pand %xmm4, %xmm1 6779; SSE2-NEXT: pandn %xmm5, %xmm4 6780; SSE2-NEXT: por %xmm4, %xmm1 6781; SSE2-NEXT: movdqa %xmm2, %xmm4 6782; SSE2-NEXT: pxor %xmm8, %xmm4 6783; SSE2-NEXT: movdqa %xmm6, %xmm5 6784; SSE2-NEXT: pxor %xmm8, %xmm5 6785; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 6786; SSE2-NEXT: pand %xmm5, %xmm2 6787; SSE2-NEXT: pandn %xmm6, %xmm5 6788; SSE2-NEXT: por %xmm5, %xmm2 6789; SSE2-NEXT: movdqa %xmm3, %xmm4 6790; SSE2-NEXT: pxor %xmm8, %xmm4 6791; SSE2-NEXT: pxor %xmm7, %xmm8 6792; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6793; SSE2-NEXT: pand %xmm8, %xmm3 6794; SSE2-NEXT: pandn %xmm7, %xmm8 6795; SSE2-NEXT: por %xmm8, %xmm3 6796; SSE2-NEXT: retq 6797; 6798; SSE4-LABEL: test151: 6799; SSE4: # %bb.0: # %entry 6800; SSE4-NEXT: pminud %xmm4, %xmm0 6801; SSE4-NEXT: pminud %xmm5, %xmm1 6802; SSE4-NEXT: pminud %xmm6, %xmm2 6803; SSE4-NEXT: pminud %xmm7, %xmm3 6804; SSE4-NEXT: retq 6805; 6806; AVX1-LABEL: test151: 6807; AVX1: # %bb.0: # %entry 6808; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6809; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6810; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 6811; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 6812; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6813; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6814; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6815; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 6816; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 6817; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6818; AVX1-NEXT: retq 6819; 6820; AVX2-LABEL: test151: 6821; AVX2: # %bb.0: # %entry 6822; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 6823; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 6824; AVX2-NEXT: retq 6825; 6826; AVX512F-LABEL: test151: 6827; AVX512F: # %bb.0: # %entry 6828; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0 6829; AVX512F-NEXT: retq 6830entry: 6831 %cmp = icmp ugt <16 x i32> %a, %b 6832 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6833 ret <16 x i32> %sel 6834} 6835 6836define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) { 6837; SSE2-LABEL: test152: 6838; SSE2: # %bb.0: # %entry 6839; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 6840; SSE2-NEXT: movdqa %xmm0, %xmm9 6841; SSE2-NEXT: pxor %xmm8, %xmm9 6842; SSE2-NEXT: movdqa %xmm4, %xmm10 6843; SSE2-NEXT: pxor %xmm8, %xmm10 6844; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 6845; SSE2-NEXT: pand %xmm10, %xmm0 6846; SSE2-NEXT: pandn %xmm4, %xmm10 6847; SSE2-NEXT: por %xmm10, %xmm0 6848; SSE2-NEXT: movdqa %xmm1, %xmm9 6849; SSE2-NEXT: pxor %xmm8, %xmm9 6850; SSE2-NEXT: movdqa %xmm5, %xmm4 6851; SSE2-NEXT: pxor %xmm8, %xmm4 6852; SSE2-NEXT: pcmpgtd %xmm9, %xmm4 6853; SSE2-NEXT: pand %xmm4, %xmm1 6854; SSE2-NEXT: pandn %xmm5, %xmm4 6855; SSE2-NEXT: por %xmm4, %xmm1 6856; SSE2-NEXT: movdqa %xmm2, %xmm4 6857; SSE2-NEXT: pxor %xmm8, %xmm4 6858; SSE2-NEXT: movdqa %xmm6, %xmm5 6859; SSE2-NEXT: pxor %xmm8, %xmm5 6860; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 6861; SSE2-NEXT: pand %xmm5, %xmm2 6862; SSE2-NEXT: pandn %xmm6, %xmm5 6863; SSE2-NEXT: por %xmm5, %xmm2 6864; SSE2-NEXT: movdqa %xmm3, %xmm4 6865; SSE2-NEXT: pxor %xmm8, %xmm4 6866; SSE2-NEXT: pxor %xmm7, %xmm8 6867; SSE2-NEXT: pcmpgtd %xmm4, %xmm8 6868; SSE2-NEXT: pand %xmm8, %xmm3 6869; SSE2-NEXT: pandn %xmm7, %xmm8 6870; SSE2-NEXT: por %xmm8, %xmm3 6871; SSE2-NEXT: retq 6872; 6873; SSE4-LABEL: test152: 6874; SSE4: # %bb.0: # %entry 6875; SSE4-NEXT: pminud %xmm4, %xmm0 6876; SSE4-NEXT: pminud %xmm5, %xmm1 6877; SSE4-NEXT: pminud %xmm6, %xmm2 6878; SSE4-NEXT: pminud %xmm7, %xmm3 6879; SSE4-NEXT: retq 6880; 6881; AVX1-LABEL: test152: 6882; AVX1: # %bb.0: # %entry 6883; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6884; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6885; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 6886; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 6887; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6888; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6889; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6890; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 6891; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 6892; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6893; AVX1-NEXT: retq 6894; 6895; AVX2-LABEL: test152: 6896; AVX2: # %bb.0: # %entry 6897; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 6898; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 6899; AVX2-NEXT: retq 6900; 6901; AVX512F-LABEL: test152: 6902; AVX512F: # %bb.0: # %entry 6903; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0 6904; AVX512F-NEXT: retq 6905entry: 6906 %cmp = icmp uge <16 x i32> %a, %b 6907 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6908 ret <16 x i32> %sel 6909} 6910 6911; ----------------------- 6912 6913define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) { 6914; SSE2-LABEL: test153: 6915; SSE2: # %bb.0: # %entry 6916; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0] 6917; SSE2-NEXT: movdqa %xmm4, %xmm9 6918; SSE2-NEXT: pxor %xmm8, %xmm9 6919; SSE2-NEXT: movdqa %xmm0, %xmm10 6920; SSE2-NEXT: pxor %xmm8, %xmm10 6921; SSE2-NEXT: movdqa %xmm10, %xmm11 6922; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 6923; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 6924; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 6925; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 6926; SSE2-NEXT: pand %xmm12, %xmm9 6927; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 6928; SSE2-NEXT: por %xmm9, %xmm10 6929; SSE2-NEXT: pand %xmm10, %xmm0 6930; SSE2-NEXT: pandn %xmm4, %xmm10 6931; SSE2-NEXT: por %xmm10, %xmm0 6932; SSE2-NEXT: movdqa %xmm5, %xmm9 6933; SSE2-NEXT: pxor %xmm8, %xmm9 6934; SSE2-NEXT: movdqa %xmm1, %xmm4 6935; SSE2-NEXT: pxor %xmm8, %xmm4 6936; SSE2-NEXT: movdqa %xmm4, %xmm10 6937; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 6938; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 6939; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 6940; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 6941; SSE2-NEXT: pand %xmm11, %xmm9 6942; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 6943; SSE2-NEXT: por %xmm9, %xmm4 6944; SSE2-NEXT: pand %xmm4, %xmm1 6945; SSE2-NEXT: pandn %xmm5, %xmm4 6946; SSE2-NEXT: por %xmm4, %xmm1 6947; SSE2-NEXT: movdqa %xmm6, %xmm4 6948; SSE2-NEXT: pxor %xmm8, %xmm4 6949; SSE2-NEXT: movdqa %xmm2, %xmm5 6950; SSE2-NEXT: pxor %xmm8, %xmm5 6951; SSE2-NEXT: movdqa %xmm5, %xmm9 6952; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 6953; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 6954; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 6955; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 6956; SSE2-NEXT: pand %xmm10, %xmm4 6957; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 6958; SSE2-NEXT: por %xmm4, %xmm5 6959; SSE2-NEXT: pand %xmm5, %xmm2 6960; SSE2-NEXT: pandn %xmm6, %xmm5 6961; SSE2-NEXT: por %xmm5, %xmm2 6962; SSE2-NEXT: movdqa %xmm7, %xmm4 6963; SSE2-NEXT: pxor %xmm8, %xmm4 6964; SSE2-NEXT: pxor %xmm3, %xmm8 6965; SSE2-NEXT: movdqa %xmm8, %xmm5 6966; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 6967; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 6968; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 6969; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 6970; SSE2-NEXT: pand %xmm6, %xmm4 6971; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 6972; SSE2-NEXT: por %xmm4, %xmm5 6973; SSE2-NEXT: pand %xmm5, %xmm3 6974; SSE2-NEXT: pandn %xmm7, %xmm5 6975; SSE2-NEXT: por %xmm5, %xmm3 6976; SSE2-NEXT: retq 6977; 6978; SSE4-LABEL: test153: 6979; SSE4: # %bb.0: # %entry 6980; SSE4-NEXT: movdqa %xmm0, %xmm8 6981; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 6982; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 6983; SSE4-NEXT: movdqa %xmm1, %xmm0 6984; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 6985; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 6986; SSE4-NEXT: movdqa %xmm2, %xmm0 6987; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 6988; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 6989; SSE4-NEXT: movdqa %xmm3, %xmm0 6990; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 6991; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 6992; SSE4-NEXT: movapd %xmm4, %xmm0 6993; SSE4-NEXT: movapd %xmm5, %xmm1 6994; SSE4-NEXT: movapd %xmm6, %xmm2 6995; SSE4-NEXT: movapd %xmm7, %xmm3 6996; SSE4-NEXT: retq 6997; 6998; AVX1-LABEL: test153: 6999; AVX1: # %bb.0: # %entry 7000; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7001; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7002; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7003; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5 7004; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7005; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7006; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7007; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7008; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7009; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4 7010; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7011; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7012; AVX1-NEXT: retq 7013; 7014; AVX2-LABEL: test153: 7015; AVX2: # %bb.0: # %entry 7016; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4 7017; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7018; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2 7019; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7020; AVX2-NEXT: retq 7021; 7022; AVX512F-LABEL: test153: 7023; AVX512F: # %bb.0: # %entry 7024; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 7025; AVX512F-NEXT: retq 7026entry: 7027 %cmp = icmp slt <8 x i64> %a, %b 7028 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7029 ret <8 x i64> %sel 7030} 7031 7032define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) { 7033; SSE2-LABEL: test154: 7034; SSE2: # %bb.0: # %entry 7035; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0] 7036; SSE2-NEXT: movdqa %xmm4, %xmm9 7037; SSE2-NEXT: pxor %xmm8, %xmm9 7038; SSE2-NEXT: movdqa %xmm0, %xmm10 7039; SSE2-NEXT: pxor %xmm8, %xmm10 7040; SSE2-NEXT: movdqa %xmm10, %xmm11 7041; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7042; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7043; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7044; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7045; SSE2-NEXT: pand %xmm12, %xmm9 7046; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7047; SSE2-NEXT: por %xmm9, %xmm10 7048; SSE2-NEXT: pand %xmm10, %xmm0 7049; SSE2-NEXT: pandn %xmm4, %xmm10 7050; SSE2-NEXT: por %xmm10, %xmm0 7051; SSE2-NEXT: movdqa %xmm5, %xmm9 7052; SSE2-NEXT: pxor %xmm8, %xmm9 7053; SSE2-NEXT: movdqa %xmm1, %xmm4 7054; SSE2-NEXT: pxor %xmm8, %xmm4 7055; SSE2-NEXT: movdqa %xmm4, %xmm10 7056; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7057; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7058; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7059; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7060; SSE2-NEXT: pand %xmm11, %xmm9 7061; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7062; SSE2-NEXT: por %xmm9, %xmm4 7063; SSE2-NEXT: pand %xmm4, %xmm1 7064; SSE2-NEXT: pandn %xmm5, %xmm4 7065; SSE2-NEXT: por %xmm4, %xmm1 7066; SSE2-NEXT: movdqa %xmm6, %xmm4 7067; SSE2-NEXT: pxor %xmm8, %xmm4 7068; SSE2-NEXT: movdqa %xmm2, %xmm5 7069; SSE2-NEXT: pxor %xmm8, %xmm5 7070; SSE2-NEXT: movdqa %xmm5, %xmm9 7071; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7072; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7073; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7074; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7075; SSE2-NEXT: pand %xmm10, %xmm4 7076; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7077; SSE2-NEXT: por %xmm4, %xmm5 7078; SSE2-NEXT: pand %xmm5, %xmm2 7079; SSE2-NEXT: pandn %xmm6, %xmm5 7080; SSE2-NEXT: por %xmm5, %xmm2 7081; SSE2-NEXT: movdqa %xmm7, %xmm4 7082; SSE2-NEXT: pxor %xmm8, %xmm4 7083; SSE2-NEXT: pxor %xmm3, %xmm8 7084; SSE2-NEXT: movdqa %xmm8, %xmm5 7085; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7086; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7087; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7088; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7089; SSE2-NEXT: pand %xmm6, %xmm4 7090; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7091; SSE2-NEXT: por %xmm4, %xmm5 7092; SSE2-NEXT: pand %xmm5, %xmm3 7093; SSE2-NEXT: pandn %xmm7, %xmm5 7094; SSE2-NEXT: por %xmm5, %xmm3 7095; SSE2-NEXT: retq 7096; 7097; SSE4-LABEL: test154: 7098; SSE4: # %bb.0: # %entry 7099; SSE4-NEXT: movdqa %xmm0, %xmm8 7100; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7101; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 7102; SSE4-NEXT: movdqa %xmm1, %xmm0 7103; SSE4-NEXT: pcmpgtq %xmm5, %xmm0 7104; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7105; SSE4-NEXT: movdqa %xmm2, %xmm0 7106; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 7107; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7108; SSE4-NEXT: movdqa %xmm3, %xmm0 7109; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 7110; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 7111; SSE4-NEXT: movapd %xmm4, %xmm0 7112; SSE4-NEXT: movapd %xmm5, %xmm1 7113; SSE4-NEXT: movapd %xmm6, %xmm2 7114; SSE4-NEXT: movapd %xmm7, %xmm3 7115; SSE4-NEXT: retq 7116; 7117; AVX1-LABEL: test154: 7118; AVX1: # %bb.0: # %entry 7119; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7120; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7121; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7122; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5 7123; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7124; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7125; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7126; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7127; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7128; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4 7129; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7130; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7131; AVX1-NEXT: retq 7132; 7133; AVX2-LABEL: test154: 7134; AVX2: # %bb.0: # %entry 7135; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4 7136; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7137; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2 7138; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7139; AVX2-NEXT: retq 7140; 7141; AVX512F-LABEL: test154: 7142; AVX512F: # %bb.0: # %entry 7143; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 7144; AVX512F-NEXT: retq 7145entry: 7146 %cmp = icmp sle <8 x i64> %a, %b 7147 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7148 ret <8 x i64> %sel 7149} 7150 7151define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) { 7152; SSE2-LABEL: test155: 7153; SSE2: # %bb.0: # %entry 7154; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0] 7155; SSE2-NEXT: movdqa %xmm0, %xmm9 7156; SSE2-NEXT: pxor %xmm8, %xmm9 7157; SSE2-NEXT: movdqa %xmm4, %xmm10 7158; SSE2-NEXT: pxor %xmm8, %xmm10 7159; SSE2-NEXT: movdqa %xmm10, %xmm11 7160; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7161; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7162; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7163; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7164; SSE2-NEXT: pand %xmm12, %xmm9 7165; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7166; SSE2-NEXT: por %xmm9, %xmm10 7167; SSE2-NEXT: pand %xmm10, %xmm0 7168; SSE2-NEXT: pandn %xmm4, %xmm10 7169; SSE2-NEXT: por %xmm10, %xmm0 7170; SSE2-NEXT: movdqa %xmm1, %xmm9 7171; SSE2-NEXT: pxor %xmm8, %xmm9 7172; SSE2-NEXT: movdqa %xmm5, %xmm4 7173; SSE2-NEXT: pxor %xmm8, %xmm4 7174; SSE2-NEXT: movdqa %xmm4, %xmm10 7175; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7176; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7177; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7178; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7179; SSE2-NEXT: pand %xmm11, %xmm9 7180; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7181; SSE2-NEXT: por %xmm9, %xmm4 7182; SSE2-NEXT: pand %xmm4, %xmm1 7183; SSE2-NEXT: pandn %xmm5, %xmm4 7184; SSE2-NEXT: por %xmm4, %xmm1 7185; SSE2-NEXT: movdqa %xmm2, %xmm4 7186; SSE2-NEXT: pxor %xmm8, %xmm4 7187; SSE2-NEXT: movdqa %xmm6, %xmm5 7188; SSE2-NEXT: pxor %xmm8, %xmm5 7189; SSE2-NEXT: movdqa %xmm5, %xmm9 7190; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7191; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7192; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7193; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7194; SSE2-NEXT: pand %xmm10, %xmm4 7195; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7196; SSE2-NEXT: por %xmm4, %xmm5 7197; SSE2-NEXT: pand %xmm5, %xmm2 7198; SSE2-NEXT: pandn %xmm6, %xmm5 7199; SSE2-NEXT: por %xmm5, %xmm2 7200; SSE2-NEXT: movdqa %xmm3, %xmm4 7201; SSE2-NEXT: pxor %xmm8, %xmm4 7202; SSE2-NEXT: pxor %xmm7, %xmm8 7203; SSE2-NEXT: movdqa %xmm8, %xmm5 7204; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7205; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7206; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7207; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7208; SSE2-NEXT: pand %xmm6, %xmm4 7209; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7210; SSE2-NEXT: por %xmm4, %xmm5 7211; SSE2-NEXT: pand %xmm5, %xmm3 7212; SSE2-NEXT: pandn %xmm7, %xmm5 7213; SSE2-NEXT: por %xmm5, %xmm3 7214; SSE2-NEXT: retq 7215; 7216; SSE4-LABEL: test155: 7217; SSE4: # %bb.0: # %entry 7218; SSE4-NEXT: movdqa %xmm0, %xmm8 7219; SSE4-NEXT: movdqa %xmm4, %xmm0 7220; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 7221; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4 7222; SSE4-NEXT: movdqa %xmm5, %xmm0 7223; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7224; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7225; SSE4-NEXT: movdqa %xmm6, %xmm0 7226; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 7227; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7228; SSE4-NEXT: movdqa %xmm7, %xmm0 7229; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 7230; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 7231; SSE4-NEXT: movapd %xmm4, %xmm0 7232; SSE4-NEXT: movapd %xmm5, %xmm1 7233; SSE4-NEXT: movapd %xmm6, %xmm2 7234; SSE4-NEXT: movapd %xmm7, %xmm3 7235; SSE4-NEXT: retq 7236; 7237; AVX1-LABEL: test155: 7238; AVX1: # %bb.0: # %entry 7239; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 7240; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 7241; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7242; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm5 7243; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7244; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7245; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 7246; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7247; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7248; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm4 7249; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7250; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7251; AVX1-NEXT: retq 7252; 7253; AVX2-LABEL: test155: 7254; AVX2: # %bb.0: # %entry 7255; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm4 7256; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7257; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm2 7258; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7259; AVX2-NEXT: retq 7260; 7261; AVX512F-LABEL: test155: 7262; AVX512F: # %bb.0: # %entry 7263; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 7264; AVX512F-NEXT: retq 7265entry: 7266 %cmp = icmp sgt <8 x i64> %a, %b 7267 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7268 ret <8 x i64> %sel 7269} 7270 7271define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) { 7272; SSE2-LABEL: test156: 7273; SSE2: # %bb.0: # %entry 7274; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 7275; SSE2-NEXT: movdqa %xmm4, %xmm9 7276; SSE2-NEXT: pxor %xmm8, %xmm9 7277; SSE2-NEXT: movdqa %xmm0, %xmm10 7278; SSE2-NEXT: pxor %xmm8, %xmm10 7279; SSE2-NEXT: movdqa %xmm10, %xmm11 7280; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7281; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7282; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7283; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7284; SSE2-NEXT: pand %xmm12, %xmm9 7285; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7286; SSE2-NEXT: por %xmm9, %xmm10 7287; SSE2-NEXT: pand %xmm10, %xmm0 7288; SSE2-NEXT: pandn %xmm4, %xmm10 7289; SSE2-NEXT: por %xmm10, %xmm0 7290; SSE2-NEXT: movdqa %xmm5, %xmm9 7291; SSE2-NEXT: pxor %xmm8, %xmm9 7292; SSE2-NEXT: movdqa %xmm1, %xmm4 7293; SSE2-NEXT: pxor %xmm8, %xmm4 7294; SSE2-NEXT: movdqa %xmm4, %xmm10 7295; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7296; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7297; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7298; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7299; SSE2-NEXT: pand %xmm11, %xmm9 7300; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7301; SSE2-NEXT: por %xmm9, %xmm4 7302; SSE2-NEXT: pand %xmm4, %xmm1 7303; SSE2-NEXT: pandn %xmm5, %xmm4 7304; SSE2-NEXT: por %xmm4, %xmm1 7305; SSE2-NEXT: movdqa %xmm6, %xmm4 7306; SSE2-NEXT: pxor %xmm8, %xmm4 7307; SSE2-NEXT: movdqa %xmm2, %xmm5 7308; SSE2-NEXT: pxor %xmm8, %xmm5 7309; SSE2-NEXT: movdqa %xmm5, %xmm9 7310; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7311; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7312; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7313; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7314; SSE2-NEXT: pand %xmm10, %xmm4 7315; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7316; SSE2-NEXT: por %xmm4, %xmm5 7317; SSE2-NEXT: pand %xmm5, %xmm2 7318; SSE2-NEXT: pandn %xmm6, %xmm5 7319; SSE2-NEXT: por %xmm5, %xmm2 7320; SSE2-NEXT: movdqa %xmm7, %xmm4 7321; SSE2-NEXT: pxor %xmm8, %xmm4 7322; SSE2-NEXT: pxor %xmm3, %xmm8 7323; SSE2-NEXT: movdqa %xmm8, %xmm5 7324; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7325; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7326; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7327; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7328; SSE2-NEXT: pand %xmm6, %xmm4 7329; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7330; SSE2-NEXT: por %xmm4, %xmm5 7331; SSE2-NEXT: pand %xmm5, %xmm3 7332; SSE2-NEXT: pandn %xmm7, %xmm5 7333; SSE2-NEXT: por %xmm5, %xmm3 7334; SSE2-NEXT: retq 7335; 7336; SSE4-LABEL: test156: 7337; SSE4: # %bb.0: # %entry 7338; SSE4-NEXT: movdqa %xmm0, %xmm9 7339; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 7340; SSE4-NEXT: movdqa %xmm4, %xmm10 7341; SSE4-NEXT: pxor %xmm8, %xmm10 7342; SSE4-NEXT: pxor %xmm8, %xmm0 7343; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 7344; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 7345; SSE4-NEXT: movdqa %xmm5, %xmm9 7346; SSE4-NEXT: pxor %xmm8, %xmm9 7347; SSE4-NEXT: movdqa %xmm1, %xmm0 7348; SSE4-NEXT: pxor %xmm8, %xmm0 7349; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 7350; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7351; SSE4-NEXT: movdqa %xmm6, %xmm1 7352; SSE4-NEXT: pxor %xmm8, %xmm1 7353; SSE4-NEXT: movdqa %xmm2, %xmm0 7354; SSE4-NEXT: pxor %xmm8, %xmm0 7355; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7356; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7357; SSE4-NEXT: movdqa %xmm7, %xmm0 7358; SSE4-NEXT: pxor %xmm8, %xmm0 7359; SSE4-NEXT: pxor %xmm3, %xmm8 7360; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 7361; SSE4-NEXT: movdqa %xmm8, %xmm0 7362; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 7363; SSE4-NEXT: movapd %xmm4, %xmm0 7364; SSE4-NEXT: movapd %xmm5, %xmm1 7365; SSE4-NEXT: movapd %xmm6, %xmm2 7366; SSE4-NEXT: movapd %xmm7, %xmm3 7367; SSE4-NEXT: retq 7368; 7369; AVX1-LABEL: test156: 7370; AVX1: # %bb.0: # %entry 7371; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7372; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 7373; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7374; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 7375; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7376; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 7377; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm6 7378; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7 7379; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 7380; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 7381; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7382; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7383; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 7384; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7385; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7386; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7387; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm4 7388; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5 7389; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7390; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7391; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7392; AVX1-NEXT: retq 7393; 7394; AVX2-LABEL: test156: 7395; AVX2: # %bb.0: # %entry 7396; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 7397; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm5 7398; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 7399; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 7400; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 7401; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm2 7402; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm4 7403; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 7404; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7405; AVX2-NEXT: retq 7406; 7407; AVX512F-LABEL: test156: 7408; AVX512F: # %bb.0: # %entry 7409; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 7410; AVX512F-NEXT: retq 7411entry: 7412 %cmp = icmp ule <8 x i64> %a, %b 7413 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7414 ret <8 x i64> %sel 7415} 7416 7417define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) { 7418; SSE2-LABEL: test159: 7419; SSE2: # %bb.0: # %entry 7420; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 7421; SSE2-NEXT: movdqa %xmm0, %xmm9 7422; SSE2-NEXT: pxor %xmm8, %xmm9 7423; SSE2-NEXT: movdqa %xmm4, %xmm10 7424; SSE2-NEXT: pxor %xmm8, %xmm10 7425; SSE2-NEXT: movdqa %xmm10, %xmm11 7426; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7427; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7428; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7429; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7430; SSE2-NEXT: pand %xmm12, %xmm9 7431; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7432; SSE2-NEXT: por %xmm9, %xmm10 7433; SSE2-NEXT: pand %xmm10, %xmm0 7434; SSE2-NEXT: pandn %xmm4, %xmm10 7435; SSE2-NEXT: por %xmm10, %xmm0 7436; SSE2-NEXT: movdqa %xmm1, %xmm9 7437; SSE2-NEXT: pxor %xmm8, %xmm9 7438; SSE2-NEXT: movdqa %xmm5, %xmm4 7439; SSE2-NEXT: pxor %xmm8, %xmm4 7440; SSE2-NEXT: movdqa %xmm4, %xmm10 7441; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7442; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7443; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7444; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7445; SSE2-NEXT: pand %xmm11, %xmm9 7446; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7447; SSE2-NEXT: por %xmm9, %xmm4 7448; SSE2-NEXT: pand %xmm4, %xmm1 7449; SSE2-NEXT: pandn %xmm5, %xmm4 7450; SSE2-NEXT: por %xmm4, %xmm1 7451; SSE2-NEXT: movdqa %xmm2, %xmm4 7452; SSE2-NEXT: pxor %xmm8, %xmm4 7453; SSE2-NEXT: movdqa %xmm6, %xmm5 7454; SSE2-NEXT: pxor %xmm8, %xmm5 7455; SSE2-NEXT: movdqa %xmm5, %xmm9 7456; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7457; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7458; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7459; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7460; SSE2-NEXT: pand %xmm10, %xmm4 7461; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7462; SSE2-NEXT: por %xmm4, %xmm5 7463; SSE2-NEXT: pand %xmm5, %xmm2 7464; SSE2-NEXT: pandn %xmm6, %xmm5 7465; SSE2-NEXT: por %xmm5, %xmm2 7466; SSE2-NEXT: movdqa %xmm3, %xmm4 7467; SSE2-NEXT: pxor %xmm8, %xmm4 7468; SSE2-NEXT: pxor %xmm7, %xmm8 7469; SSE2-NEXT: movdqa %xmm8, %xmm5 7470; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7471; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7472; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7473; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7474; SSE2-NEXT: pand %xmm6, %xmm4 7475; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7476; SSE2-NEXT: por %xmm4, %xmm5 7477; SSE2-NEXT: pand %xmm5, %xmm3 7478; SSE2-NEXT: pandn %xmm7, %xmm5 7479; SSE2-NEXT: por %xmm5, %xmm3 7480; SSE2-NEXT: retq 7481; 7482; SSE4-LABEL: test159: 7483; SSE4: # %bb.0: # %entry 7484; SSE4-NEXT: movdqa %xmm0, %xmm9 7485; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 7486; SSE4-NEXT: movdqa %xmm0, %xmm10 7487; SSE4-NEXT: pxor %xmm8, %xmm10 7488; SSE4-NEXT: movdqa %xmm4, %xmm0 7489; SSE4-NEXT: pxor %xmm8, %xmm0 7490; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 7491; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 7492; SSE4-NEXT: movdqa %xmm1, %xmm9 7493; SSE4-NEXT: pxor %xmm8, %xmm9 7494; SSE4-NEXT: movdqa %xmm5, %xmm0 7495; SSE4-NEXT: pxor %xmm8, %xmm0 7496; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 7497; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7498; SSE4-NEXT: movdqa %xmm2, %xmm1 7499; SSE4-NEXT: pxor %xmm8, %xmm1 7500; SSE4-NEXT: movdqa %xmm6, %xmm0 7501; SSE4-NEXT: pxor %xmm8, %xmm0 7502; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7503; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7504; SSE4-NEXT: movdqa %xmm3, %xmm0 7505; SSE4-NEXT: pxor %xmm8, %xmm0 7506; SSE4-NEXT: pxor %xmm7, %xmm8 7507; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 7508; SSE4-NEXT: movdqa %xmm8, %xmm0 7509; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 7510; SSE4-NEXT: movapd %xmm4, %xmm0 7511; SSE4-NEXT: movapd %xmm5, %xmm1 7512; SSE4-NEXT: movapd %xmm6, %xmm2 7513; SSE4-NEXT: movapd %xmm7, %xmm3 7514; SSE4-NEXT: retq 7515; 7516; AVX1-LABEL: test159: 7517; AVX1: # %bb.0: # %entry 7518; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 7519; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 7520; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7521; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 7522; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7523; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 7524; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6 7525; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7 7526; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 7527; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 7528; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7529; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 7530; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 7531; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7532; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7533; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7534; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4 7535; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5 7536; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7537; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7538; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7539; AVX1-NEXT: retq 7540; 7541; AVX2-LABEL: test159: 7542; AVX2: # %bb.0: # %entry 7543; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 7544; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5 7545; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 7546; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 7547; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 7548; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2 7549; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4 7550; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 7551; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7552; AVX2-NEXT: retq 7553; 7554; AVX512F-LABEL: test159: 7555; AVX512F: # %bb.0: # %entry 7556; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 7557; AVX512F-NEXT: retq 7558entry: 7559 %cmp = icmp ugt <8 x i64> %a, %b 7560 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7561 ret <8 x i64> %sel 7562} 7563 7564define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) { 7565; SSE2-LABEL: test160: 7566; SSE2: # %bb.0: # %entry 7567; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648] 7568; SSE2-NEXT: movdqa %xmm0, %xmm9 7569; SSE2-NEXT: pxor %xmm8, %xmm9 7570; SSE2-NEXT: movdqa %xmm4, %xmm10 7571; SSE2-NEXT: pxor %xmm8, %xmm10 7572; SSE2-NEXT: movdqa %xmm10, %xmm11 7573; SSE2-NEXT: pcmpgtd %xmm9, %xmm11 7574; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7575; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7576; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3] 7577; SSE2-NEXT: pand %xmm12, %xmm9 7578; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3] 7579; SSE2-NEXT: por %xmm9, %xmm10 7580; SSE2-NEXT: pand %xmm10, %xmm0 7581; SSE2-NEXT: pandn %xmm4, %xmm10 7582; SSE2-NEXT: por %xmm10, %xmm0 7583; SSE2-NEXT: movdqa %xmm1, %xmm9 7584; SSE2-NEXT: pxor %xmm8, %xmm9 7585; SSE2-NEXT: movdqa %xmm5, %xmm4 7586; SSE2-NEXT: pxor %xmm8, %xmm4 7587; SSE2-NEXT: movdqa %xmm4, %xmm10 7588; SSE2-NEXT: pcmpgtd %xmm9, %xmm10 7589; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2] 7590; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 7591; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3] 7592; SSE2-NEXT: pand %xmm11, %xmm9 7593; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3] 7594; SSE2-NEXT: por %xmm9, %xmm4 7595; SSE2-NEXT: pand %xmm4, %xmm1 7596; SSE2-NEXT: pandn %xmm5, %xmm4 7597; SSE2-NEXT: por %xmm4, %xmm1 7598; SSE2-NEXT: movdqa %xmm2, %xmm4 7599; SSE2-NEXT: pxor %xmm8, %xmm4 7600; SSE2-NEXT: movdqa %xmm6, %xmm5 7601; SSE2-NEXT: pxor %xmm8, %xmm5 7602; SSE2-NEXT: movdqa %xmm5, %xmm9 7603; SSE2-NEXT: pcmpgtd %xmm4, %xmm9 7604; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2] 7605; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 7606; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7607; SSE2-NEXT: pand %xmm10, %xmm4 7608; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3] 7609; SSE2-NEXT: por %xmm4, %xmm5 7610; SSE2-NEXT: pand %xmm5, %xmm2 7611; SSE2-NEXT: pandn %xmm6, %xmm5 7612; SSE2-NEXT: por %xmm5, %xmm2 7613; SSE2-NEXT: movdqa %xmm3, %xmm4 7614; SSE2-NEXT: pxor %xmm8, %xmm4 7615; SSE2-NEXT: pxor %xmm7, %xmm8 7616; SSE2-NEXT: movdqa %xmm8, %xmm5 7617; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 7618; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7619; SSE2-NEXT: pcmpeqd %xmm4, %xmm8 7620; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3] 7621; SSE2-NEXT: pand %xmm6, %xmm4 7622; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 7623; SSE2-NEXT: por %xmm4, %xmm5 7624; SSE2-NEXT: pand %xmm5, %xmm3 7625; SSE2-NEXT: pandn %xmm7, %xmm5 7626; SSE2-NEXT: por %xmm5, %xmm3 7627; SSE2-NEXT: retq 7628; 7629; SSE4-LABEL: test160: 7630; SSE4: # %bb.0: # %entry 7631; SSE4-NEXT: movdqa %xmm0, %xmm9 7632; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808] 7633; SSE4-NEXT: movdqa %xmm0, %xmm10 7634; SSE4-NEXT: pxor %xmm8, %xmm10 7635; SSE4-NEXT: movdqa %xmm4, %xmm0 7636; SSE4-NEXT: pxor %xmm8, %xmm0 7637; SSE4-NEXT: pcmpgtq %xmm10, %xmm0 7638; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4 7639; SSE4-NEXT: movdqa %xmm1, %xmm9 7640; SSE4-NEXT: pxor %xmm8, %xmm9 7641; SSE4-NEXT: movdqa %xmm5, %xmm0 7642; SSE4-NEXT: pxor %xmm8, %xmm0 7643; SSE4-NEXT: pcmpgtq %xmm9, %xmm0 7644; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5 7645; SSE4-NEXT: movdqa %xmm2, %xmm1 7646; SSE4-NEXT: pxor %xmm8, %xmm1 7647; SSE4-NEXT: movdqa %xmm6, %xmm0 7648; SSE4-NEXT: pxor %xmm8, %xmm0 7649; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7650; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6 7651; SSE4-NEXT: movdqa %xmm3, %xmm0 7652; SSE4-NEXT: pxor %xmm8, %xmm0 7653; SSE4-NEXT: pxor %xmm7, %xmm8 7654; SSE4-NEXT: pcmpgtq %xmm0, %xmm8 7655; SSE4-NEXT: movdqa %xmm8, %xmm0 7656; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7 7657; SSE4-NEXT: movapd %xmm4, %xmm0 7658; SSE4-NEXT: movapd %xmm5, %xmm1 7659; SSE4-NEXT: movapd %xmm6, %xmm2 7660; SSE4-NEXT: movapd %xmm7, %xmm3 7661; SSE4-NEXT: retq 7662; 7663; AVX1-LABEL: test160: 7664; AVX1: # %bb.0: # %entry 7665; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 7666; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 7667; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7668; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 7669; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7670; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 7671; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6 7672; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7 7673; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 7674; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 7675; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 7676; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 7677; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2 7678; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7679; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7680; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 7681; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4 7682; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5 7683; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7684; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2 7685; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7686; AVX1-NEXT: retq 7687; 7688; AVX2-LABEL: test160: 7689; AVX2: # %bb.0: # %entry 7690; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 7691; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5 7692; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 7693; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 7694; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 7695; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2 7696; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4 7697; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2 7698; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1 7699; AVX2-NEXT: retq 7700; 7701; AVX512F-LABEL: test160: 7702; AVX512F: # %bb.0: # %entry 7703; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 7704; AVX512F-NEXT: retq 7705entry: 7706 %cmp = icmp uge <8 x i64> %a, %b 7707 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7708 ret <8 x i64> %sel 7709} 7710 7711define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) { 7712; SSE2-LABEL: test161: 7713; SSE2: # %bb.0: # %entry 7714; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 7715; SSE2-NEXT: movdqa %xmm0, %xmm5 7716; SSE2-NEXT: pxor %xmm4, %xmm5 7717; SSE2-NEXT: movdqa %xmm2, %xmm6 7718; SSE2-NEXT: pxor %xmm4, %xmm6 7719; SSE2-NEXT: movdqa %xmm6, %xmm7 7720; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 7721; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 7722; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 7723; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 7724; SSE2-NEXT: pand %xmm8, %xmm5 7725; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 7726; SSE2-NEXT: por %xmm5, %xmm6 7727; SSE2-NEXT: pand %xmm6, %xmm0 7728; SSE2-NEXT: pandn %xmm2, %xmm6 7729; SSE2-NEXT: por %xmm6, %xmm0 7730; SSE2-NEXT: movdqa %xmm1, %xmm2 7731; SSE2-NEXT: pxor %xmm4, %xmm2 7732; SSE2-NEXT: pxor %xmm3, %xmm4 7733; SSE2-NEXT: movdqa %xmm4, %xmm5 7734; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 7735; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7736; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 7737; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 7738; SSE2-NEXT: pand %xmm6, %xmm2 7739; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7740; SSE2-NEXT: por %xmm2, %xmm4 7741; SSE2-NEXT: pand %xmm4, %xmm1 7742; SSE2-NEXT: pandn %xmm3, %xmm4 7743; SSE2-NEXT: por %xmm4, %xmm1 7744; SSE2-NEXT: retq 7745; 7746; SSE4-LABEL: test161: 7747; SSE4: # %bb.0: # %entry 7748; SSE4-NEXT: movdqa %xmm0, %xmm4 7749; SSE4-NEXT: movdqa %xmm2, %xmm0 7750; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7751; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 7752; SSE4-NEXT: movdqa %xmm3, %xmm0 7753; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7754; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 7755; SSE4-NEXT: movapd %xmm2, %xmm0 7756; SSE4-NEXT: movapd %xmm3, %xmm1 7757; SSE4-NEXT: retq 7758; 7759; AVX1-LABEL: test161: 7760; AVX1: # %bb.0: # %entry 7761; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 7762; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 7763; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 7764; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 7765; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 7766; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7767; AVX1-NEXT: retq 7768; 7769; AVX2-LABEL: test161: 7770; AVX2: # %bb.0: # %entry 7771; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 7772; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7773; AVX2-NEXT: retq 7774; 7775; AVX512BW-LABEL: test161: 7776; AVX512BW: # %bb.0: # %entry 7777; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 7778; AVX512BW-NEXT: retq 7779entry: 7780 %cmp = icmp slt <4 x i64> %a, %b 7781 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 7782 ret <4 x i64> %sel 7783} 7784 7785define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) { 7786; SSE2-LABEL: test162: 7787; SSE2: # %bb.0: # %entry 7788; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 7789; SSE2-NEXT: movdqa %xmm0, %xmm5 7790; SSE2-NEXT: pxor %xmm4, %xmm5 7791; SSE2-NEXT: movdqa %xmm2, %xmm6 7792; SSE2-NEXT: pxor %xmm4, %xmm6 7793; SSE2-NEXT: movdqa %xmm6, %xmm7 7794; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 7795; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 7796; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 7797; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 7798; SSE2-NEXT: pand %xmm8, %xmm5 7799; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 7800; SSE2-NEXT: por %xmm5, %xmm6 7801; SSE2-NEXT: pand %xmm6, %xmm0 7802; SSE2-NEXT: pandn %xmm2, %xmm6 7803; SSE2-NEXT: por %xmm6, %xmm0 7804; SSE2-NEXT: movdqa %xmm1, %xmm2 7805; SSE2-NEXT: pxor %xmm4, %xmm2 7806; SSE2-NEXT: pxor %xmm3, %xmm4 7807; SSE2-NEXT: movdqa %xmm4, %xmm5 7808; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 7809; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7810; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 7811; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 7812; SSE2-NEXT: pand %xmm6, %xmm2 7813; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7814; SSE2-NEXT: por %xmm2, %xmm4 7815; SSE2-NEXT: pand %xmm4, %xmm1 7816; SSE2-NEXT: pandn %xmm3, %xmm4 7817; SSE2-NEXT: por %xmm4, %xmm1 7818; SSE2-NEXT: retq 7819; 7820; SSE4-LABEL: test162: 7821; SSE4: # %bb.0: # %entry 7822; SSE4-NEXT: movdqa %xmm0, %xmm4 7823; SSE4-NEXT: movdqa %xmm2, %xmm0 7824; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7825; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 7826; SSE4-NEXT: movdqa %xmm3, %xmm0 7827; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 7828; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 7829; SSE4-NEXT: movapd %xmm2, %xmm0 7830; SSE4-NEXT: movapd %xmm3, %xmm1 7831; SSE4-NEXT: retq 7832; 7833; AVX1-LABEL: test162: 7834; AVX1: # %bb.0: # %entry 7835; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 7836; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 7837; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 7838; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 7839; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 7840; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7841; AVX1-NEXT: retq 7842; 7843; AVX2-LABEL: test162: 7844; AVX2: # %bb.0: # %entry 7845; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 7846; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7847; AVX2-NEXT: retq 7848; 7849; AVX512BW-LABEL: test162: 7850; AVX512BW: # %bb.0: # %entry 7851; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 7852; AVX512BW-NEXT: retq 7853entry: 7854 %cmp = icmp sle <4 x i64> %a, %b 7855 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 7856 ret <4 x i64> %sel 7857} 7858 7859define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) { 7860; SSE2-LABEL: test163: 7861; SSE2: # %bb.0: # %entry 7862; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 7863; SSE2-NEXT: movdqa %xmm2, %xmm5 7864; SSE2-NEXT: pxor %xmm4, %xmm5 7865; SSE2-NEXT: movdqa %xmm0, %xmm6 7866; SSE2-NEXT: pxor %xmm4, %xmm6 7867; SSE2-NEXT: movdqa %xmm6, %xmm7 7868; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 7869; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 7870; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 7871; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 7872; SSE2-NEXT: pand %xmm8, %xmm5 7873; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 7874; SSE2-NEXT: por %xmm5, %xmm6 7875; SSE2-NEXT: pand %xmm6, %xmm0 7876; SSE2-NEXT: pandn %xmm2, %xmm6 7877; SSE2-NEXT: por %xmm6, %xmm0 7878; SSE2-NEXT: movdqa %xmm3, %xmm2 7879; SSE2-NEXT: pxor %xmm4, %xmm2 7880; SSE2-NEXT: pxor %xmm1, %xmm4 7881; SSE2-NEXT: movdqa %xmm4, %xmm5 7882; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 7883; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7884; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 7885; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 7886; SSE2-NEXT: pand %xmm6, %xmm2 7887; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7888; SSE2-NEXT: por %xmm2, %xmm4 7889; SSE2-NEXT: pand %xmm4, %xmm1 7890; SSE2-NEXT: pandn %xmm3, %xmm4 7891; SSE2-NEXT: por %xmm4, %xmm1 7892; SSE2-NEXT: retq 7893; 7894; SSE4-LABEL: test163: 7895; SSE4: # %bb.0: # %entry 7896; SSE4-NEXT: movdqa %xmm0, %xmm4 7897; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 7898; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 7899; SSE4-NEXT: movdqa %xmm1, %xmm0 7900; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 7901; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 7902; SSE4-NEXT: movapd %xmm2, %xmm0 7903; SSE4-NEXT: movapd %xmm3, %xmm1 7904; SSE4-NEXT: retq 7905; 7906; AVX1-LABEL: test163: 7907; AVX1: # %bb.0: # %entry 7908; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 7909; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 7910; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 7911; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 7912; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 7913; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7914; AVX1-NEXT: retq 7915; 7916; AVX2-LABEL: test163: 7917; AVX2: # %bb.0: # %entry 7918; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 7919; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7920; AVX2-NEXT: retq 7921; 7922; AVX512BW-LABEL: test163: 7923; AVX512BW: # %bb.0: # %entry 7924; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 7925; AVX512BW-NEXT: retq 7926entry: 7927 %cmp = icmp sgt <4 x i64> %a, %b 7928 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 7929 ret <4 x i64> %sel 7930} 7931 7932define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) { 7933; SSE2-LABEL: test164: 7934; SSE2: # %bb.0: # %entry 7935; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 7936; SSE2-NEXT: movdqa %xmm2, %xmm5 7937; SSE2-NEXT: pxor %xmm4, %xmm5 7938; SSE2-NEXT: movdqa %xmm0, %xmm6 7939; SSE2-NEXT: pxor %xmm4, %xmm6 7940; SSE2-NEXT: movdqa %xmm6, %xmm7 7941; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 7942; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 7943; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 7944; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 7945; SSE2-NEXT: pand %xmm8, %xmm5 7946; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 7947; SSE2-NEXT: por %xmm5, %xmm6 7948; SSE2-NEXT: pand %xmm6, %xmm0 7949; SSE2-NEXT: pandn %xmm2, %xmm6 7950; SSE2-NEXT: por %xmm6, %xmm0 7951; SSE2-NEXT: movdqa %xmm3, %xmm2 7952; SSE2-NEXT: pxor %xmm4, %xmm2 7953; SSE2-NEXT: pxor %xmm1, %xmm4 7954; SSE2-NEXT: movdqa %xmm4, %xmm5 7955; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 7956; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 7957; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 7958; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 7959; SSE2-NEXT: pand %xmm6, %xmm2 7960; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 7961; SSE2-NEXT: por %xmm2, %xmm4 7962; SSE2-NEXT: pand %xmm4, %xmm1 7963; SSE2-NEXT: pandn %xmm3, %xmm4 7964; SSE2-NEXT: por %xmm4, %xmm1 7965; SSE2-NEXT: retq 7966; 7967; SSE4-LABEL: test164: 7968; SSE4: # %bb.0: # %entry 7969; SSE4-NEXT: movdqa %xmm0, %xmm4 7970; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 7971; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 7972; SSE4-NEXT: movdqa %xmm1, %xmm0 7973; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 7974; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 7975; SSE4-NEXT: movapd %xmm2, %xmm0 7976; SSE4-NEXT: movapd %xmm3, %xmm1 7977; SSE4-NEXT: retq 7978; 7979; AVX1-LABEL: test164: 7980; AVX1: # %bb.0: # %entry 7981; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 7982; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 7983; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 7984; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 7985; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 7986; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7987; AVX1-NEXT: retq 7988; 7989; AVX2-LABEL: test164: 7990; AVX2: # %bb.0: # %entry 7991; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 7992; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 7993; AVX2-NEXT: retq 7994; 7995; AVX512BW-LABEL: test164: 7996; AVX512BW: # %bb.0: # %entry 7997; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 7998; AVX512BW-NEXT: retq 7999entry: 8000 %cmp = icmp sge <4 x i64> %a, %b 8001 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8002 ret <4 x i64> %sel 8003} 8004 8005define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) { 8006; SSE2-LABEL: test165: 8007; SSE2: # %bb.0: # %entry 8008; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 8009; SSE2-NEXT: movdqa %xmm0, %xmm5 8010; SSE2-NEXT: pxor %xmm4, %xmm5 8011; SSE2-NEXT: movdqa %xmm2, %xmm6 8012; SSE2-NEXT: pxor %xmm4, %xmm6 8013; SSE2-NEXT: movdqa %xmm6, %xmm7 8014; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8015; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8016; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8017; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8018; SSE2-NEXT: pand %xmm8, %xmm5 8019; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8020; SSE2-NEXT: por %xmm5, %xmm6 8021; SSE2-NEXT: pand %xmm6, %xmm0 8022; SSE2-NEXT: pandn %xmm2, %xmm6 8023; SSE2-NEXT: por %xmm6, %xmm0 8024; SSE2-NEXT: movdqa %xmm1, %xmm2 8025; SSE2-NEXT: pxor %xmm4, %xmm2 8026; SSE2-NEXT: pxor %xmm3, %xmm4 8027; SSE2-NEXT: movdqa %xmm4, %xmm5 8028; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8029; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8030; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8031; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8032; SSE2-NEXT: pand %xmm6, %xmm2 8033; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8034; SSE2-NEXT: por %xmm2, %xmm4 8035; SSE2-NEXT: pand %xmm4, %xmm1 8036; SSE2-NEXT: pandn %xmm3, %xmm4 8037; SSE2-NEXT: por %xmm4, %xmm1 8038; SSE2-NEXT: retq 8039; 8040; SSE4-LABEL: test165: 8041; SSE4: # %bb.0: # %entry 8042; SSE4-NEXT: movdqa %xmm0, %xmm4 8043; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8044; SSE4-NEXT: movdqa %xmm0, %xmm6 8045; SSE4-NEXT: pxor %xmm5, %xmm6 8046; SSE4-NEXT: movdqa %xmm2, %xmm0 8047; SSE4-NEXT: pxor %xmm5, %xmm0 8048; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8049; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8050; SSE4-NEXT: movdqa %xmm1, %xmm0 8051; SSE4-NEXT: pxor %xmm5, %xmm0 8052; SSE4-NEXT: pxor %xmm3, %xmm5 8053; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8054; SSE4-NEXT: movdqa %xmm5, %xmm0 8055; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8056; SSE4-NEXT: movapd %xmm2, %xmm0 8057; SSE4-NEXT: movapd %xmm3, %xmm1 8058; SSE4-NEXT: retq 8059; 8060; AVX1-LABEL: test165: 8061; AVX1: # %bb.0: # %entry 8062; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8063; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8064; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8065; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 8066; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8067; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8068; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4 8069; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3 8070; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8071; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8072; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8073; AVX1-NEXT: retq 8074; 8075; AVX2-LABEL: test165: 8076; AVX2: # %bb.0: # %entry 8077; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8078; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 8079; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 8080; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8081; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8082; AVX2-NEXT: retq 8083; 8084; AVX512BW-LABEL: test165: 8085; AVX512BW: # %bb.0: # %entry 8086; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 8087; AVX512BW-NEXT: retq 8088entry: 8089 %cmp = icmp ult <4 x i64> %a, %b 8090 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8091 ret <4 x i64> %sel 8092} 8093 8094define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) { 8095; SSE2-LABEL: test166: 8096; SSE2: # %bb.0: # %entry 8097; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 8098; SSE2-NEXT: movdqa %xmm0, %xmm5 8099; SSE2-NEXT: pxor %xmm4, %xmm5 8100; SSE2-NEXT: movdqa %xmm2, %xmm6 8101; SSE2-NEXT: pxor %xmm4, %xmm6 8102; SSE2-NEXT: movdqa %xmm6, %xmm7 8103; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8104; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8105; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8106; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8107; SSE2-NEXT: pand %xmm8, %xmm5 8108; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8109; SSE2-NEXT: por %xmm5, %xmm6 8110; SSE2-NEXT: pand %xmm6, %xmm0 8111; SSE2-NEXT: pandn %xmm2, %xmm6 8112; SSE2-NEXT: por %xmm6, %xmm0 8113; SSE2-NEXT: movdqa %xmm1, %xmm2 8114; SSE2-NEXT: pxor %xmm4, %xmm2 8115; SSE2-NEXT: pxor %xmm3, %xmm4 8116; SSE2-NEXT: movdqa %xmm4, %xmm5 8117; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8118; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8119; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8120; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8121; SSE2-NEXT: pand %xmm6, %xmm2 8122; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8123; SSE2-NEXT: por %xmm2, %xmm4 8124; SSE2-NEXT: pand %xmm4, %xmm1 8125; SSE2-NEXT: pandn %xmm3, %xmm4 8126; SSE2-NEXT: por %xmm4, %xmm1 8127; SSE2-NEXT: retq 8128; 8129; SSE4-LABEL: test166: 8130; SSE4: # %bb.0: # %entry 8131; SSE4-NEXT: movdqa %xmm0, %xmm4 8132; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8133; SSE4-NEXT: movdqa %xmm0, %xmm6 8134; SSE4-NEXT: pxor %xmm5, %xmm6 8135; SSE4-NEXT: movdqa %xmm2, %xmm0 8136; SSE4-NEXT: pxor %xmm5, %xmm0 8137; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8138; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8139; SSE4-NEXT: movdqa %xmm1, %xmm0 8140; SSE4-NEXT: pxor %xmm5, %xmm0 8141; SSE4-NEXT: pxor %xmm3, %xmm5 8142; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8143; SSE4-NEXT: movdqa %xmm5, %xmm0 8144; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8145; SSE4-NEXT: movapd %xmm2, %xmm0 8146; SSE4-NEXT: movapd %xmm3, %xmm1 8147; SSE4-NEXT: retq 8148; 8149; AVX1-LABEL: test166: 8150; AVX1: # %bb.0: # %entry 8151; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8152; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8153; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8154; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 8155; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8156; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8157; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4 8158; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3 8159; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8160; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8161; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8162; AVX1-NEXT: retq 8163; 8164; AVX2-LABEL: test166: 8165; AVX2: # %bb.0: # %entry 8166; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8167; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 8168; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 8169; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8170; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8171; AVX2-NEXT: retq 8172; 8173; AVX512BW-LABEL: test166: 8174; AVX512BW: # %bb.0: # %entry 8175; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 8176; AVX512BW-NEXT: retq 8177entry: 8178 %cmp = icmp ule <4 x i64> %a, %b 8179 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8180 ret <4 x i64> %sel 8181} 8182 8183define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) { 8184; SSE2-LABEL: test167: 8185; SSE2: # %bb.0: # %entry 8186; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 8187; SSE2-NEXT: movdqa %xmm2, %xmm5 8188; SSE2-NEXT: pxor %xmm4, %xmm5 8189; SSE2-NEXT: movdqa %xmm0, %xmm6 8190; SSE2-NEXT: pxor %xmm4, %xmm6 8191; SSE2-NEXT: movdqa %xmm6, %xmm7 8192; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8193; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8194; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8195; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8196; SSE2-NEXT: pand %xmm8, %xmm5 8197; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8198; SSE2-NEXT: por %xmm5, %xmm6 8199; SSE2-NEXT: pand %xmm6, %xmm0 8200; SSE2-NEXT: pandn %xmm2, %xmm6 8201; SSE2-NEXT: por %xmm6, %xmm0 8202; SSE2-NEXT: movdqa %xmm3, %xmm2 8203; SSE2-NEXT: pxor %xmm4, %xmm2 8204; SSE2-NEXT: pxor %xmm1, %xmm4 8205; SSE2-NEXT: movdqa %xmm4, %xmm5 8206; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8207; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8208; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8209; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8210; SSE2-NEXT: pand %xmm6, %xmm2 8211; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8212; SSE2-NEXT: por %xmm2, %xmm4 8213; SSE2-NEXT: pand %xmm4, %xmm1 8214; SSE2-NEXT: pandn %xmm3, %xmm4 8215; SSE2-NEXT: por %xmm4, %xmm1 8216; SSE2-NEXT: retq 8217; 8218; SSE4-LABEL: test167: 8219; SSE4: # %bb.0: # %entry 8220; SSE4-NEXT: movdqa %xmm0, %xmm4 8221; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8222; SSE4-NEXT: movdqa %xmm2, %xmm6 8223; SSE4-NEXT: pxor %xmm5, %xmm6 8224; SSE4-NEXT: pxor %xmm5, %xmm0 8225; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8226; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8227; SSE4-NEXT: movdqa %xmm3, %xmm0 8228; SSE4-NEXT: pxor %xmm5, %xmm0 8229; SSE4-NEXT: pxor %xmm1, %xmm5 8230; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8231; SSE4-NEXT: movdqa %xmm5, %xmm0 8232; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8233; SSE4-NEXT: movapd %xmm2, %xmm0 8234; SSE4-NEXT: movapd %xmm3, %xmm1 8235; SSE4-NEXT: retq 8236; 8237; AVX1-LABEL: test167: 8238; AVX1: # %bb.0: # %entry 8239; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8240; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8241; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8242; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 8243; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8244; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8245; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4 8246; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3 8247; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8248; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8249; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8250; AVX1-NEXT: retq 8251; 8252; AVX2-LABEL: test167: 8253; AVX2: # %bb.0: # %entry 8254; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8255; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 8256; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 8257; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8258; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8259; AVX2-NEXT: retq 8260; 8261; AVX512BW-LABEL: test167: 8262; AVX512BW: # %bb.0: # %entry 8263; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 8264; AVX512BW-NEXT: retq 8265entry: 8266 %cmp = icmp ugt <4 x i64> %a, %b 8267 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8268 ret <4 x i64> %sel 8269} 8270 8271define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) { 8272; SSE2-LABEL: test168: 8273; SSE2: # %bb.0: # %entry 8274; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 8275; SSE2-NEXT: movdqa %xmm2, %xmm5 8276; SSE2-NEXT: pxor %xmm4, %xmm5 8277; SSE2-NEXT: movdqa %xmm0, %xmm6 8278; SSE2-NEXT: pxor %xmm4, %xmm6 8279; SSE2-NEXT: movdqa %xmm6, %xmm7 8280; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8281; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8282; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8283; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8284; SSE2-NEXT: pand %xmm8, %xmm5 8285; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8286; SSE2-NEXT: por %xmm5, %xmm6 8287; SSE2-NEXT: pand %xmm6, %xmm0 8288; SSE2-NEXT: pandn %xmm2, %xmm6 8289; SSE2-NEXT: por %xmm6, %xmm0 8290; SSE2-NEXT: movdqa %xmm3, %xmm2 8291; SSE2-NEXT: pxor %xmm4, %xmm2 8292; SSE2-NEXT: pxor %xmm1, %xmm4 8293; SSE2-NEXT: movdqa %xmm4, %xmm5 8294; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8295; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8296; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8297; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8298; SSE2-NEXT: pand %xmm6, %xmm2 8299; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8300; SSE2-NEXT: por %xmm2, %xmm4 8301; SSE2-NEXT: pand %xmm4, %xmm1 8302; SSE2-NEXT: pandn %xmm3, %xmm4 8303; SSE2-NEXT: por %xmm4, %xmm1 8304; SSE2-NEXT: retq 8305; 8306; SSE4-LABEL: test168: 8307; SSE4: # %bb.0: # %entry 8308; SSE4-NEXT: movdqa %xmm0, %xmm4 8309; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8310; SSE4-NEXT: movdqa %xmm2, %xmm6 8311; SSE4-NEXT: pxor %xmm5, %xmm6 8312; SSE4-NEXT: pxor %xmm5, %xmm0 8313; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8314; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8315; SSE4-NEXT: movdqa %xmm3, %xmm0 8316; SSE4-NEXT: pxor %xmm5, %xmm0 8317; SSE4-NEXT: pxor %xmm1, %xmm5 8318; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8319; SSE4-NEXT: movdqa %xmm5, %xmm0 8320; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8321; SSE4-NEXT: movapd %xmm2, %xmm0 8322; SSE4-NEXT: movapd %xmm3, %xmm1 8323; SSE4-NEXT: retq 8324; 8325; AVX1-LABEL: test168: 8326; AVX1: # %bb.0: # %entry 8327; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8328; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8329; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8330; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 8331; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8332; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8333; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4 8334; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3 8335; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8336; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8337; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8338; AVX1-NEXT: retq 8339; 8340; AVX2-LABEL: test168: 8341; AVX2: # %bb.0: # %entry 8342; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8343; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 8344; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 8345; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8346; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8347; AVX2-NEXT: retq 8348; 8349; AVX512BW-LABEL: test168: 8350; AVX512BW: # %bb.0: # %entry 8351; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 8352; AVX512BW-NEXT: retq 8353entry: 8354 %cmp = icmp uge <4 x i64> %a, %b 8355 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8356 ret <4 x i64> %sel 8357} 8358 8359define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) { 8360; SSE2-LABEL: test169: 8361; SSE2: # %bb.0: # %entry 8362; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 8363; SSE2-NEXT: movdqa %xmm2, %xmm5 8364; SSE2-NEXT: pxor %xmm4, %xmm5 8365; SSE2-NEXT: movdqa %xmm0, %xmm6 8366; SSE2-NEXT: pxor %xmm4, %xmm6 8367; SSE2-NEXT: movdqa %xmm6, %xmm7 8368; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8369; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8370; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8371; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8372; SSE2-NEXT: pand %xmm8, %xmm5 8373; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8374; SSE2-NEXT: por %xmm5, %xmm6 8375; SSE2-NEXT: pand %xmm6, %xmm0 8376; SSE2-NEXT: pandn %xmm2, %xmm6 8377; SSE2-NEXT: por %xmm6, %xmm0 8378; SSE2-NEXT: movdqa %xmm3, %xmm2 8379; SSE2-NEXT: pxor %xmm4, %xmm2 8380; SSE2-NEXT: pxor %xmm1, %xmm4 8381; SSE2-NEXT: movdqa %xmm4, %xmm5 8382; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8383; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8384; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8385; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8386; SSE2-NEXT: pand %xmm6, %xmm2 8387; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8388; SSE2-NEXT: por %xmm2, %xmm4 8389; SSE2-NEXT: pand %xmm4, %xmm1 8390; SSE2-NEXT: pandn %xmm3, %xmm4 8391; SSE2-NEXT: por %xmm4, %xmm1 8392; SSE2-NEXT: retq 8393; 8394; SSE4-LABEL: test169: 8395; SSE4: # %bb.0: # %entry 8396; SSE4-NEXT: movdqa %xmm0, %xmm4 8397; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8398; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8399; SSE4-NEXT: movdqa %xmm1, %xmm0 8400; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 8401; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8402; SSE4-NEXT: movapd %xmm2, %xmm0 8403; SSE4-NEXT: movapd %xmm3, %xmm1 8404; SSE4-NEXT: retq 8405; 8406; AVX1-LABEL: test169: 8407; AVX1: # %bb.0: # %entry 8408; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8409; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8410; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8411; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 8412; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8413; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8414; AVX1-NEXT: retq 8415; 8416; AVX2-LABEL: test169: 8417; AVX2: # %bb.0: # %entry 8418; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8419; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8420; AVX2-NEXT: retq 8421; 8422; AVX512BW-LABEL: test169: 8423; AVX512BW: # %bb.0: # %entry 8424; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 8425; AVX512BW-NEXT: retq 8426entry: 8427 %cmp = icmp slt <4 x i64> %a, %b 8428 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8429 ret <4 x i64> %sel 8430} 8431 8432define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) { 8433; SSE2-LABEL: test170: 8434; SSE2: # %bb.0: # %entry 8435; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 8436; SSE2-NEXT: movdqa %xmm2, %xmm5 8437; SSE2-NEXT: pxor %xmm4, %xmm5 8438; SSE2-NEXT: movdqa %xmm0, %xmm6 8439; SSE2-NEXT: pxor %xmm4, %xmm6 8440; SSE2-NEXT: movdqa %xmm6, %xmm7 8441; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8442; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8443; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8444; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8445; SSE2-NEXT: pand %xmm8, %xmm5 8446; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8447; SSE2-NEXT: por %xmm5, %xmm6 8448; SSE2-NEXT: pand %xmm6, %xmm0 8449; SSE2-NEXT: pandn %xmm2, %xmm6 8450; SSE2-NEXT: por %xmm6, %xmm0 8451; SSE2-NEXT: movdqa %xmm3, %xmm2 8452; SSE2-NEXT: pxor %xmm4, %xmm2 8453; SSE2-NEXT: pxor %xmm1, %xmm4 8454; SSE2-NEXT: movdqa %xmm4, %xmm5 8455; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8456; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8457; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8458; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8459; SSE2-NEXT: pand %xmm6, %xmm2 8460; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8461; SSE2-NEXT: por %xmm2, %xmm4 8462; SSE2-NEXT: pand %xmm4, %xmm1 8463; SSE2-NEXT: pandn %xmm3, %xmm4 8464; SSE2-NEXT: por %xmm4, %xmm1 8465; SSE2-NEXT: retq 8466; 8467; SSE4-LABEL: test170: 8468; SSE4: # %bb.0: # %entry 8469; SSE4-NEXT: movdqa %xmm0, %xmm4 8470; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8471; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8472; SSE4-NEXT: movdqa %xmm1, %xmm0 8473; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 8474; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8475; SSE4-NEXT: movapd %xmm2, %xmm0 8476; SSE4-NEXT: movapd %xmm3, %xmm1 8477; SSE4-NEXT: retq 8478; 8479; AVX1-LABEL: test170: 8480; AVX1: # %bb.0: # %entry 8481; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8482; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8483; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8484; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 8485; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8486; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8487; AVX1-NEXT: retq 8488; 8489; AVX2-LABEL: test170: 8490; AVX2: # %bb.0: # %entry 8491; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8492; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8493; AVX2-NEXT: retq 8494; 8495; AVX512BW-LABEL: test170: 8496; AVX512BW: # %bb.0: # %entry 8497; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 8498; AVX512BW-NEXT: retq 8499entry: 8500 %cmp = icmp sle <4 x i64> %a, %b 8501 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8502 ret <4 x i64> %sel 8503} 8504 8505define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) { 8506; SSE2-LABEL: test171: 8507; SSE2: # %bb.0: # %entry 8508; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 8509; SSE2-NEXT: movdqa %xmm0, %xmm5 8510; SSE2-NEXT: pxor %xmm4, %xmm5 8511; SSE2-NEXT: movdqa %xmm2, %xmm6 8512; SSE2-NEXT: pxor %xmm4, %xmm6 8513; SSE2-NEXT: movdqa %xmm6, %xmm7 8514; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8515; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8516; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8517; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8518; SSE2-NEXT: pand %xmm8, %xmm5 8519; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8520; SSE2-NEXT: por %xmm5, %xmm6 8521; SSE2-NEXT: pand %xmm6, %xmm0 8522; SSE2-NEXT: pandn %xmm2, %xmm6 8523; SSE2-NEXT: por %xmm6, %xmm0 8524; SSE2-NEXT: movdqa %xmm1, %xmm2 8525; SSE2-NEXT: pxor %xmm4, %xmm2 8526; SSE2-NEXT: pxor %xmm3, %xmm4 8527; SSE2-NEXT: movdqa %xmm4, %xmm5 8528; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8529; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8530; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8531; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8532; SSE2-NEXT: pand %xmm6, %xmm2 8533; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8534; SSE2-NEXT: por %xmm2, %xmm4 8535; SSE2-NEXT: pand %xmm4, %xmm1 8536; SSE2-NEXT: pandn %xmm3, %xmm4 8537; SSE2-NEXT: por %xmm4, %xmm1 8538; SSE2-NEXT: retq 8539; 8540; SSE4-LABEL: test171: 8541; SSE4: # %bb.0: # %entry 8542; SSE4-NEXT: movdqa %xmm0, %xmm4 8543; SSE4-NEXT: movdqa %xmm2, %xmm0 8544; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 8545; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8546; SSE4-NEXT: movdqa %xmm3, %xmm0 8547; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 8548; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8549; SSE4-NEXT: movapd %xmm2, %xmm0 8550; SSE4-NEXT: movapd %xmm3, %xmm1 8551; SSE4-NEXT: retq 8552; 8553; AVX1-LABEL: test171: 8554; AVX1: # %bb.0: # %entry 8555; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8556; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 8557; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8558; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 8559; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8560; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8561; AVX1-NEXT: retq 8562; 8563; AVX2-LABEL: test171: 8564; AVX2: # %bb.0: # %entry 8565; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 8566; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8567; AVX2-NEXT: retq 8568; 8569; AVX512BW-LABEL: test171: 8570; AVX512BW: # %bb.0: # %entry 8571; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 8572; AVX512BW-NEXT: retq 8573entry: 8574 %cmp = icmp sgt <4 x i64> %a, %b 8575 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8576 ret <4 x i64> %sel 8577} 8578 8579define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) { 8580; SSE2-LABEL: test172: 8581; SSE2: # %bb.0: # %entry 8582; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 8583; SSE2-NEXT: movdqa %xmm0, %xmm5 8584; SSE2-NEXT: pxor %xmm4, %xmm5 8585; SSE2-NEXT: movdqa %xmm2, %xmm6 8586; SSE2-NEXT: pxor %xmm4, %xmm6 8587; SSE2-NEXT: movdqa %xmm6, %xmm7 8588; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8589; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8590; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8591; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8592; SSE2-NEXT: pand %xmm8, %xmm5 8593; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8594; SSE2-NEXT: por %xmm5, %xmm6 8595; SSE2-NEXT: pand %xmm6, %xmm0 8596; SSE2-NEXT: pandn %xmm2, %xmm6 8597; SSE2-NEXT: por %xmm6, %xmm0 8598; SSE2-NEXT: movdqa %xmm1, %xmm2 8599; SSE2-NEXT: pxor %xmm4, %xmm2 8600; SSE2-NEXT: pxor %xmm3, %xmm4 8601; SSE2-NEXT: movdqa %xmm4, %xmm5 8602; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8603; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8604; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8605; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8606; SSE2-NEXT: pand %xmm6, %xmm2 8607; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8608; SSE2-NEXT: por %xmm2, %xmm4 8609; SSE2-NEXT: pand %xmm4, %xmm1 8610; SSE2-NEXT: pandn %xmm3, %xmm4 8611; SSE2-NEXT: por %xmm4, %xmm1 8612; SSE2-NEXT: retq 8613; 8614; SSE4-LABEL: test172: 8615; SSE4: # %bb.0: # %entry 8616; SSE4-NEXT: movdqa %xmm0, %xmm4 8617; SSE4-NEXT: movdqa %xmm2, %xmm0 8618; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 8619; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8620; SSE4-NEXT: movdqa %xmm3, %xmm0 8621; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 8622; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8623; SSE4-NEXT: movapd %xmm2, %xmm0 8624; SSE4-NEXT: movapd %xmm3, %xmm1 8625; SSE4-NEXT: retq 8626; 8627; AVX1-LABEL: test172: 8628; AVX1: # %bb.0: # %entry 8629; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8630; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 8631; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8632; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 8633; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8634; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8635; AVX1-NEXT: retq 8636; 8637; AVX2-LABEL: test172: 8638; AVX2: # %bb.0: # %entry 8639; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 8640; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8641; AVX2-NEXT: retq 8642; 8643; AVX512BW-LABEL: test172: 8644; AVX512BW: # %bb.0: # %entry 8645; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 8646; AVX512BW-NEXT: retq 8647entry: 8648 %cmp = icmp sge <4 x i64> %a, %b 8649 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8650 ret <4 x i64> %sel 8651} 8652 8653define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) { 8654; SSE2-LABEL: test173: 8655; SSE2: # %bb.0: # %entry 8656; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 8657; SSE2-NEXT: movdqa %xmm2, %xmm5 8658; SSE2-NEXT: pxor %xmm4, %xmm5 8659; SSE2-NEXT: movdqa %xmm0, %xmm6 8660; SSE2-NEXT: pxor %xmm4, %xmm6 8661; SSE2-NEXT: movdqa %xmm6, %xmm7 8662; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8663; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8664; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8665; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8666; SSE2-NEXT: pand %xmm8, %xmm5 8667; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8668; SSE2-NEXT: por %xmm5, %xmm6 8669; SSE2-NEXT: pand %xmm6, %xmm0 8670; SSE2-NEXT: pandn %xmm2, %xmm6 8671; SSE2-NEXT: por %xmm6, %xmm0 8672; SSE2-NEXT: movdqa %xmm3, %xmm2 8673; SSE2-NEXT: pxor %xmm4, %xmm2 8674; SSE2-NEXT: pxor %xmm1, %xmm4 8675; SSE2-NEXT: movdqa %xmm4, %xmm5 8676; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8677; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8678; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8679; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8680; SSE2-NEXT: pand %xmm6, %xmm2 8681; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8682; SSE2-NEXT: por %xmm2, %xmm4 8683; SSE2-NEXT: pand %xmm4, %xmm1 8684; SSE2-NEXT: pandn %xmm3, %xmm4 8685; SSE2-NEXT: por %xmm4, %xmm1 8686; SSE2-NEXT: retq 8687; 8688; SSE4-LABEL: test173: 8689; SSE4: # %bb.0: # %entry 8690; SSE4-NEXT: movdqa %xmm0, %xmm4 8691; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8692; SSE4-NEXT: movdqa %xmm2, %xmm6 8693; SSE4-NEXT: pxor %xmm5, %xmm6 8694; SSE4-NEXT: pxor %xmm5, %xmm0 8695; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8696; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8697; SSE4-NEXT: movdqa %xmm3, %xmm0 8698; SSE4-NEXT: pxor %xmm5, %xmm0 8699; SSE4-NEXT: pxor %xmm1, %xmm5 8700; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8701; SSE4-NEXT: movdqa %xmm5, %xmm0 8702; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8703; SSE4-NEXT: movapd %xmm2, %xmm0 8704; SSE4-NEXT: movapd %xmm3, %xmm1 8705; SSE4-NEXT: retq 8706; 8707; AVX1-LABEL: test173: 8708; AVX1: # %bb.0: # %entry 8709; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8710; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8711; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8712; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 8713; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8714; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8715; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4 8716; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3 8717; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8718; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8719; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8720; AVX1-NEXT: retq 8721; 8722; AVX2-LABEL: test173: 8723; AVX2: # %bb.0: # %entry 8724; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8725; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 8726; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 8727; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8728; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8729; AVX2-NEXT: retq 8730; 8731; AVX512BW-LABEL: test173: 8732; AVX512BW: # %bb.0: # %entry 8733; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 8734; AVX512BW-NEXT: retq 8735entry: 8736 %cmp = icmp ult <4 x i64> %a, %b 8737 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8738 ret <4 x i64> %sel 8739} 8740 8741define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) { 8742; SSE2-LABEL: test174: 8743; SSE2: # %bb.0: # %entry 8744; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 8745; SSE2-NEXT: movdqa %xmm2, %xmm5 8746; SSE2-NEXT: pxor %xmm4, %xmm5 8747; SSE2-NEXT: movdqa %xmm0, %xmm6 8748; SSE2-NEXT: pxor %xmm4, %xmm6 8749; SSE2-NEXT: movdqa %xmm6, %xmm7 8750; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8751; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8752; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8753; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8754; SSE2-NEXT: pand %xmm8, %xmm5 8755; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8756; SSE2-NEXT: por %xmm5, %xmm6 8757; SSE2-NEXT: pand %xmm6, %xmm0 8758; SSE2-NEXT: pandn %xmm2, %xmm6 8759; SSE2-NEXT: por %xmm6, %xmm0 8760; SSE2-NEXT: movdqa %xmm3, %xmm2 8761; SSE2-NEXT: pxor %xmm4, %xmm2 8762; SSE2-NEXT: pxor %xmm1, %xmm4 8763; SSE2-NEXT: movdqa %xmm4, %xmm5 8764; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8765; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8766; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8767; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8768; SSE2-NEXT: pand %xmm6, %xmm2 8769; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8770; SSE2-NEXT: por %xmm2, %xmm4 8771; SSE2-NEXT: pand %xmm4, %xmm1 8772; SSE2-NEXT: pandn %xmm3, %xmm4 8773; SSE2-NEXT: por %xmm4, %xmm1 8774; SSE2-NEXT: retq 8775; 8776; SSE4-LABEL: test174: 8777; SSE4: # %bb.0: # %entry 8778; SSE4-NEXT: movdqa %xmm0, %xmm4 8779; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8780; SSE4-NEXT: movdqa %xmm2, %xmm6 8781; SSE4-NEXT: pxor %xmm5, %xmm6 8782; SSE4-NEXT: pxor %xmm5, %xmm0 8783; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8784; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8785; SSE4-NEXT: movdqa %xmm3, %xmm0 8786; SSE4-NEXT: pxor %xmm5, %xmm0 8787; SSE4-NEXT: pxor %xmm1, %xmm5 8788; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8789; SSE4-NEXT: movdqa %xmm5, %xmm0 8790; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8791; SSE4-NEXT: movapd %xmm2, %xmm0 8792; SSE4-NEXT: movapd %xmm3, %xmm1 8793; SSE4-NEXT: retq 8794; 8795; AVX1-LABEL: test174: 8796; AVX1: # %bb.0: # %entry 8797; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8798; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8799; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8800; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 8801; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8802; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8803; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4 8804; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3 8805; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8806; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8807; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8808; AVX1-NEXT: retq 8809; 8810; AVX2-LABEL: test174: 8811; AVX2: # %bb.0: # %entry 8812; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8813; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 8814; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 8815; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8816; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8817; AVX2-NEXT: retq 8818; 8819; AVX512BW-LABEL: test174: 8820; AVX512BW: # %bb.0: # %entry 8821; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 8822; AVX512BW-NEXT: retq 8823entry: 8824 %cmp = icmp ule <4 x i64> %a, %b 8825 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8826 ret <4 x i64> %sel 8827} 8828 8829define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) { 8830; SSE2-LABEL: test175: 8831; SSE2: # %bb.0: # %entry 8832; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 8833; SSE2-NEXT: movdqa %xmm0, %xmm5 8834; SSE2-NEXT: pxor %xmm4, %xmm5 8835; SSE2-NEXT: movdqa %xmm2, %xmm6 8836; SSE2-NEXT: pxor %xmm4, %xmm6 8837; SSE2-NEXT: movdqa %xmm6, %xmm7 8838; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8839; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8840; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8841; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8842; SSE2-NEXT: pand %xmm8, %xmm5 8843; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8844; SSE2-NEXT: por %xmm5, %xmm6 8845; SSE2-NEXT: pand %xmm6, %xmm0 8846; SSE2-NEXT: pandn %xmm2, %xmm6 8847; SSE2-NEXT: por %xmm6, %xmm0 8848; SSE2-NEXT: movdqa %xmm1, %xmm2 8849; SSE2-NEXT: pxor %xmm4, %xmm2 8850; SSE2-NEXT: pxor %xmm3, %xmm4 8851; SSE2-NEXT: movdqa %xmm4, %xmm5 8852; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8853; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8854; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8855; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8856; SSE2-NEXT: pand %xmm6, %xmm2 8857; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8858; SSE2-NEXT: por %xmm2, %xmm4 8859; SSE2-NEXT: pand %xmm4, %xmm1 8860; SSE2-NEXT: pandn %xmm3, %xmm4 8861; SSE2-NEXT: por %xmm4, %xmm1 8862; SSE2-NEXT: retq 8863; 8864; SSE4-LABEL: test175: 8865; SSE4: # %bb.0: # %entry 8866; SSE4-NEXT: movdqa %xmm0, %xmm4 8867; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8868; SSE4-NEXT: movdqa %xmm0, %xmm6 8869; SSE4-NEXT: pxor %xmm5, %xmm6 8870; SSE4-NEXT: movdqa %xmm2, %xmm0 8871; SSE4-NEXT: pxor %xmm5, %xmm0 8872; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8873; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8874; SSE4-NEXT: movdqa %xmm1, %xmm0 8875; SSE4-NEXT: pxor %xmm5, %xmm0 8876; SSE4-NEXT: pxor %xmm3, %xmm5 8877; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8878; SSE4-NEXT: movdqa %xmm5, %xmm0 8879; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8880; SSE4-NEXT: movapd %xmm2, %xmm0 8881; SSE4-NEXT: movapd %xmm3, %xmm1 8882; SSE4-NEXT: retq 8883; 8884; AVX1-LABEL: test175: 8885; AVX1: # %bb.0: # %entry 8886; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8887; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8888; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8889; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 8890; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8891; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8892; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4 8893; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3 8894; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8895; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8896; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8897; AVX1-NEXT: retq 8898; 8899; AVX2-LABEL: test175: 8900; AVX2: # %bb.0: # %entry 8901; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8902; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 8903; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 8904; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8905; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8906; AVX2-NEXT: retq 8907; 8908; AVX512BW-LABEL: test175: 8909; AVX512BW: # %bb.0: # %entry 8910; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 8911; AVX512BW-NEXT: retq 8912entry: 8913 %cmp = icmp ugt <4 x i64> %a, %b 8914 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 8915 ret <4 x i64> %sel 8916} 8917 8918define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) { 8919; SSE2-LABEL: test176: 8920; SSE2: # %bb.0: # %entry 8921; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 8922; SSE2-NEXT: movdqa %xmm0, %xmm5 8923; SSE2-NEXT: pxor %xmm4, %xmm5 8924; SSE2-NEXT: movdqa %xmm2, %xmm6 8925; SSE2-NEXT: pxor %xmm4, %xmm6 8926; SSE2-NEXT: movdqa %xmm6, %xmm7 8927; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8928; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8929; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8930; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8931; SSE2-NEXT: pand %xmm8, %xmm5 8932; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8933; SSE2-NEXT: por %xmm5, %xmm6 8934; SSE2-NEXT: pand %xmm6, %xmm0 8935; SSE2-NEXT: pandn %xmm2, %xmm6 8936; SSE2-NEXT: por %xmm6, %xmm0 8937; SSE2-NEXT: movdqa %xmm1, %xmm2 8938; SSE2-NEXT: pxor %xmm4, %xmm2 8939; SSE2-NEXT: pxor %xmm3, %xmm4 8940; SSE2-NEXT: movdqa %xmm4, %xmm5 8941; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 8942; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 8943; SSE2-NEXT: pcmpeqd %xmm2, %xmm4 8944; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 8945; SSE2-NEXT: pand %xmm6, %xmm2 8946; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8947; SSE2-NEXT: por %xmm2, %xmm4 8948; SSE2-NEXT: pand %xmm4, %xmm1 8949; SSE2-NEXT: pandn %xmm3, %xmm4 8950; SSE2-NEXT: por %xmm4, %xmm1 8951; SSE2-NEXT: retq 8952; 8953; SSE4-LABEL: test176: 8954; SSE4: # %bb.0: # %entry 8955; SSE4-NEXT: movdqa %xmm0, %xmm4 8956; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8957; SSE4-NEXT: movdqa %xmm0, %xmm6 8958; SSE4-NEXT: pxor %xmm5, %xmm6 8959; SSE4-NEXT: movdqa %xmm2, %xmm0 8960; SSE4-NEXT: pxor %xmm5, %xmm0 8961; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 8962; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2 8963; SSE4-NEXT: movdqa %xmm1, %xmm0 8964; SSE4-NEXT: pxor %xmm5, %xmm0 8965; SSE4-NEXT: pxor %xmm3, %xmm5 8966; SSE4-NEXT: pcmpgtq %xmm0, %xmm5 8967; SSE4-NEXT: movdqa %xmm5, %xmm0 8968; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3 8969; SSE4-NEXT: movapd %xmm2, %xmm0 8970; SSE4-NEXT: movapd %xmm3, %xmm1 8971; SSE4-NEXT: retq 8972; 8973; AVX1-LABEL: test176: 8974; AVX1: # %bb.0: # %entry 8975; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8976; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 8977; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8978; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 8979; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4 8980; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 8981; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4 8982; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3 8983; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 8984; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8985; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8986; AVX1-NEXT: retq 8987; 8988; AVX2-LABEL: test176: 8989; AVX2: # %bb.0: # %entry 8990; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808] 8991; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 8992; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 8993; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 8994; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8995; AVX2-NEXT: retq 8996; 8997; AVX512BW-LABEL: test176: 8998; AVX512BW: # %bb.0: # %entry 8999; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 9000; AVX512BW-NEXT: retq 9001entry: 9002 %cmp = icmp uge <4 x i64> %a, %b 9003 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9004 ret <4 x i64> %sel 9005} 9006 9007define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) { 9008; SSE2-LABEL: test177: 9009; SSE2: # %bb.0: # %entry 9010; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 9011; SSE2-NEXT: movdqa %xmm0, %xmm3 9012; SSE2-NEXT: pxor %xmm2, %xmm3 9013; SSE2-NEXT: pxor %xmm1, %xmm2 9014; SSE2-NEXT: movdqa %xmm2, %xmm4 9015; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9016; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9017; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9018; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9019; SSE2-NEXT: pand %xmm5, %xmm2 9020; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9021; SSE2-NEXT: por %xmm2, %xmm3 9022; SSE2-NEXT: pand %xmm3, %xmm0 9023; SSE2-NEXT: pandn %xmm1, %xmm3 9024; SSE2-NEXT: por %xmm3, %xmm0 9025; SSE2-NEXT: retq 9026; 9027; SSE4-LABEL: test177: 9028; SSE4: # %bb.0: # %entry 9029; SSE4-NEXT: movdqa %xmm0, %xmm2 9030; SSE4-NEXT: movdqa %xmm1, %xmm0 9031; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9032; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9033; SSE4-NEXT: movapd %xmm1, %xmm0 9034; SSE4-NEXT: retq 9035; 9036; AVX1-LABEL: test177: 9037; AVX1: # %bb.0: # %entry 9038; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9039; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9040; AVX1-NEXT: retq 9041; 9042; AVX2-LABEL: test177: 9043; AVX2: # %bb.0: # %entry 9044; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9045; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9046; AVX2-NEXT: retq 9047; 9048; AVX512BW-LABEL: test177: 9049; AVX512BW: # %bb.0: # %entry 9050; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 9051; AVX512BW-NEXT: retq 9052entry: 9053 %cmp = icmp slt <2 x i64> %a, %b 9054 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9055 ret <2 x i64> %sel 9056} 9057 9058define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) { 9059; SSE2-LABEL: test178: 9060; SSE2: # %bb.0: # %entry 9061; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 9062; SSE2-NEXT: movdqa %xmm0, %xmm3 9063; SSE2-NEXT: pxor %xmm2, %xmm3 9064; SSE2-NEXT: pxor %xmm1, %xmm2 9065; SSE2-NEXT: movdqa %xmm2, %xmm4 9066; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9067; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9068; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9069; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9070; SSE2-NEXT: pand %xmm5, %xmm2 9071; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9072; SSE2-NEXT: por %xmm2, %xmm3 9073; SSE2-NEXT: pand %xmm3, %xmm0 9074; SSE2-NEXT: pandn %xmm1, %xmm3 9075; SSE2-NEXT: por %xmm3, %xmm0 9076; SSE2-NEXT: retq 9077; 9078; SSE4-LABEL: test178: 9079; SSE4: # %bb.0: # %entry 9080; SSE4-NEXT: movdqa %xmm0, %xmm2 9081; SSE4-NEXT: movdqa %xmm1, %xmm0 9082; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9083; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9084; SSE4-NEXT: movapd %xmm1, %xmm0 9085; SSE4-NEXT: retq 9086; 9087; AVX1-LABEL: test178: 9088; AVX1: # %bb.0: # %entry 9089; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9090; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9091; AVX1-NEXT: retq 9092; 9093; AVX2-LABEL: test178: 9094; AVX2: # %bb.0: # %entry 9095; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9096; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9097; AVX2-NEXT: retq 9098; 9099; AVX512BW-LABEL: test178: 9100; AVX512BW: # %bb.0: # %entry 9101; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 9102; AVX512BW-NEXT: retq 9103entry: 9104 %cmp = icmp sle <2 x i64> %a, %b 9105 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9106 ret <2 x i64> %sel 9107} 9108 9109define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) { 9110; SSE2-LABEL: test179: 9111; SSE2: # %bb.0: # %entry 9112; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 9113; SSE2-NEXT: movdqa %xmm1, %xmm3 9114; SSE2-NEXT: pxor %xmm2, %xmm3 9115; SSE2-NEXT: pxor %xmm0, %xmm2 9116; SSE2-NEXT: movdqa %xmm2, %xmm4 9117; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9118; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9119; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9120; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9121; SSE2-NEXT: pand %xmm5, %xmm2 9122; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9123; SSE2-NEXT: por %xmm2, %xmm3 9124; SSE2-NEXT: pand %xmm3, %xmm0 9125; SSE2-NEXT: pandn %xmm1, %xmm3 9126; SSE2-NEXT: por %xmm3, %xmm0 9127; SSE2-NEXT: retq 9128; 9129; SSE4-LABEL: test179: 9130; SSE4: # %bb.0: # %entry 9131; SSE4-NEXT: movdqa %xmm0, %xmm2 9132; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 9133; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9134; SSE4-NEXT: movapd %xmm1, %xmm0 9135; SSE4-NEXT: retq 9136; 9137; AVX1-LABEL: test179: 9138; AVX1: # %bb.0: # %entry 9139; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9140; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9141; AVX1-NEXT: retq 9142; 9143; AVX2-LABEL: test179: 9144; AVX2: # %bb.0: # %entry 9145; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9146; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9147; AVX2-NEXT: retq 9148; 9149; AVX512BW-LABEL: test179: 9150; AVX512BW: # %bb.0: # %entry 9151; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 9152; AVX512BW-NEXT: retq 9153entry: 9154 %cmp = icmp sgt <2 x i64> %a, %b 9155 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9156 ret <2 x i64> %sel 9157} 9158 9159define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) { 9160; SSE2-LABEL: test180: 9161; SSE2: # %bb.0: # %entry 9162; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 9163; SSE2-NEXT: movdqa %xmm1, %xmm3 9164; SSE2-NEXT: pxor %xmm2, %xmm3 9165; SSE2-NEXT: pxor %xmm0, %xmm2 9166; SSE2-NEXT: movdqa %xmm2, %xmm4 9167; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9168; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9169; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9170; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9171; SSE2-NEXT: pand %xmm5, %xmm2 9172; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9173; SSE2-NEXT: por %xmm2, %xmm3 9174; SSE2-NEXT: pand %xmm3, %xmm0 9175; SSE2-NEXT: pandn %xmm1, %xmm3 9176; SSE2-NEXT: por %xmm3, %xmm0 9177; SSE2-NEXT: retq 9178; 9179; SSE4-LABEL: test180: 9180; SSE4: # %bb.0: # %entry 9181; SSE4-NEXT: movdqa %xmm0, %xmm2 9182; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 9183; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9184; SSE4-NEXT: movapd %xmm1, %xmm0 9185; SSE4-NEXT: retq 9186; 9187; AVX1-LABEL: test180: 9188; AVX1: # %bb.0: # %entry 9189; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9190; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9191; AVX1-NEXT: retq 9192; 9193; AVX2-LABEL: test180: 9194; AVX2: # %bb.0: # %entry 9195; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9196; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9197; AVX2-NEXT: retq 9198; 9199; AVX512BW-LABEL: test180: 9200; AVX512BW: # %bb.0: # %entry 9201; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 9202; AVX512BW-NEXT: retq 9203entry: 9204 %cmp = icmp sge <2 x i64> %a, %b 9205 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9206 ret <2 x i64> %sel 9207} 9208 9209define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) { 9210; SSE2-LABEL: test181: 9211; SSE2: # %bb.0: # %entry 9212; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 9213; SSE2-NEXT: movdqa %xmm0, %xmm3 9214; SSE2-NEXT: pxor %xmm2, %xmm3 9215; SSE2-NEXT: pxor %xmm1, %xmm2 9216; SSE2-NEXT: movdqa %xmm2, %xmm4 9217; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9218; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9219; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9220; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9221; SSE2-NEXT: pand %xmm5, %xmm2 9222; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9223; SSE2-NEXT: por %xmm2, %xmm3 9224; SSE2-NEXT: pand %xmm3, %xmm0 9225; SSE2-NEXT: pandn %xmm1, %xmm3 9226; SSE2-NEXT: por %xmm3, %xmm0 9227; SSE2-NEXT: retq 9228; 9229; SSE4-LABEL: test181: 9230; SSE4: # %bb.0: # %entry 9231; SSE4-NEXT: movdqa %xmm0, %xmm2 9232; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9233; SSE4-NEXT: movdqa %xmm2, %xmm3 9234; SSE4-NEXT: pxor %xmm0, %xmm3 9235; SSE4-NEXT: pxor %xmm1, %xmm0 9236; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9237; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9238; SSE4-NEXT: movapd %xmm1, %xmm0 9239; SSE4-NEXT: retq 9240; 9241; AVX1-LABEL: test181: 9242; AVX1: # %bb.0: # %entry 9243; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9244; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 9245; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 9246; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9247; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9248; AVX1-NEXT: retq 9249; 9250; AVX2-LABEL: test181: 9251; AVX2: # %bb.0: # %entry 9252; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9253; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 9254; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 9255; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9256; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9257; AVX2-NEXT: retq 9258; 9259; AVX512BW-LABEL: test181: 9260; AVX512BW: # %bb.0: # %entry 9261; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 9262; AVX512BW-NEXT: retq 9263entry: 9264 %cmp = icmp ult <2 x i64> %a, %b 9265 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9266 ret <2 x i64> %sel 9267} 9268 9269define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) { 9270; SSE2-LABEL: test182: 9271; SSE2: # %bb.0: # %entry 9272; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 9273; SSE2-NEXT: movdqa %xmm0, %xmm3 9274; SSE2-NEXT: pxor %xmm2, %xmm3 9275; SSE2-NEXT: pxor %xmm1, %xmm2 9276; SSE2-NEXT: movdqa %xmm2, %xmm4 9277; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9278; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9279; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9280; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9281; SSE2-NEXT: pand %xmm5, %xmm2 9282; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9283; SSE2-NEXT: por %xmm2, %xmm3 9284; SSE2-NEXT: pand %xmm3, %xmm0 9285; SSE2-NEXT: pandn %xmm1, %xmm3 9286; SSE2-NEXT: por %xmm3, %xmm0 9287; SSE2-NEXT: retq 9288; 9289; SSE4-LABEL: test182: 9290; SSE4: # %bb.0: # %entry 9291; SSE4-NEXT: movdqa %xmm0, %xmm2 9292; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9293; SSE4-NEXT: movdqa %xmm2, %xmm3 9294; SSE4-NEXT: pxor %xmm0, %xmm3 9295; SSE4-NEXT: pxor %xmm1, %xmm0 9296; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9297; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9298; SSE4-NEXT: movapd %xmm1, %xmm0 9299; SSE4-NEXT: retq 9300; 9301; AVX1-LABEL: test182: 9302; AVX1: # %bb.0: # %entry 9303; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9304; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 9305; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 9306; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9307; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9308; AVX1-NEXT: retq 9309; 9310; AVX2-LABEL: test182: 9311; AVX2: # %bb.0: # %entry 9312; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9313; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 9314; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 9315; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9316; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9317; AVX2-NEXT: retq 9318; 9319; AVX512BW-LABEL: test182: 9320; AVX512BW: # %bb.0: # %entry 9321; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 9322; AVX512BW-NEXT: retq 9323entry: 9324 %cmp = icmp ule <2 x i64> %a, %b 9325 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9326 ret <2 x i64> %sel 9327} 9328 9329define <2 x i64> @test183(<2 x i64> %a, <2 x i64> %b) { 9330; SSE2-LABEL: test183: 9331; SSE2: # %bb.0: # %entry 9332; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 9333; SSE2-NEXT: movdqa %xmm1, %xmm3 9334; SSE2-NEXT: pxor %xmm2, %xmm3 9335; SSE2-NEXT: pxor %xmm0, %xmm2 9336; SSE2-NEXT: movdqa %xmm2, %xmm4 9337; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9338; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9339; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9340; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9341; SSE2-NEXT: pand %xmm5, %xmm2 9342; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9343; SSE2-NEXT: por %xmm2, %xmm3 9344; SSE2-NEXT: pand %xmm3, %xmm0 9345; SSE2-NEXT: pandn %xmm1, %xmm3 9346; SSE2-NEXT: por %xmm3, %xmm0 9347; SSE2-NEXT: retq 9348; 9349; SSE4-LABEL: test183: 9350; SSE4: # %bb.0: # %entry 9351; SSE4-NEXT: movdqa %xmm0, %xmm2 9352; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9353; SSE4-NEXT: movdqa %xmm1, %xmm3 9354; SSE4-NEXT: pxor %xmm0, %xmm3 9355; SSE4-NEXT: pxor %xmm2, %xmm0 9356; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9357; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9358; SSE4-NEXT: movapd %xmm1, %xmm0 9359; SSE4-NEXT: retq 9360; 9361; AVX1-LABEL: test183: 9362; AVX1: # %bb.0: # %entry 9363; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9364; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 9365; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 9366; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9367; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9368; AVX1-NEXT: retq 9369; 9370; AVX2-LABEL: test183: 9371; AVX2: # %bb.0: # %entry 9372; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9373; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 9374; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 9375; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9376; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9377; AVX2-NEXT: retq 9378; 9379; AVX512BW-LABEL: test183: 9380; AVX512BW: # %bb.0: # %entry 9381; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 9382; AVX512BW-NEXT: retq 9383entry: 9384 %cmp = icmp ugt <2 x i64> %a, %b 9385 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9386 ret <2 x i64> %sel 9387} 9388 9389define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) { 9390; SSE2-LABEL: test184: 9391; SSE2: # %bb.0: # %entry 9392; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 9393; SSE2-NEXT: movdqa %xmm1, %xmm3 9394; SSE2-NEXT: pxor %xmm2, %xmm3 9395; SSE2-NEXT: pxor %xmm0, %xmm2 9396; SSE2-NEXT: movdqa %xmm2, %xmm4 9397; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9398; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9399; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9400; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9401; SSE2-NEXT: pand %xmm5, %xmm2 9402; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9403; SSE2-NEXT: por %xmm2, %xmm3 9404; SSE2-NEXT: pand %xmm3, %xmm0 9405; SSE2-NEXT: pandn %xmm1, %xmm3 9406; SSE2-NEXT: por %xmm3, %xmm0 9407; SSE2-NEXT: retq 9408; 9409; SSE4-LABEL: test184: 9410; SSE4: # %bb.0: # %entry 9411; SSE4-NEXT: movdqa %xmm0, %xmm2 9412; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9413; SSE4-NEXT: movdqa %xmm1, %xmm3 9414; SSE4-NEXT: pxor %xmm0, %xmm3 9415; SSE4-NEXT: pxor %xmm2, %xmm0 9416; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9417; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9418; SSE4-NEXT: movapd %xmm1, %xmm0 9419; SSE4-NEXT: retq 9420; 9421; AVX1-LABEL: test184: 9422; AVX1: # %bb.0: # %entry 9423; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9424; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 9425; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 9426; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9427; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9428; AVX1-NEXT: retq 9429; 9430; AVX2-LABEL: test184: 9431; AVX2: # %bb.0: # %entry 9432; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9433; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 9434; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 9435; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9436; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9437; AVX2-NEXT: retq 9438; 9439; AVX512BW-LABEL: test184: 9440; AVX512BW: # %bb.0: # %entry 9441; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 9442; AVX512BW-NEXT: retq 9443entry: 9444 %cmp = icmp uge <2 x i64> %a, %b 9445 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 9446 ret <2 x i64> %sel 9447} 9448 9449define <2 x i64> @test185(<2 x i64> %a, <2 x i64> %b) { 9450; SSE2-LABEL: test185: 9451; SSE2: # %bb.0: # %entry 9452; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 9453; SSE2-NEXT: movdqa %xmm1, %xmm3 9454; SSE2-NEXT: pxor %xmm2, %xmm3 9455; SSE2-NEXT: pxor %xmm0, %xmm2 9456; SSE2-NEXT: movdqa %xmm2, %xmm4 9457; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9458; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9459; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9460; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9461; SSE2-NEXT: pand %xmm5, %xmm2 9462; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9463; SSE2-NEXT: por %xmm2, %xmm3 9464; SSE2-NEXT: pand %xmm3, %xmm0 9465; SSE2-NEXT: pandn %xmm1, %xmm3 9466; SSE2-NEXT: por %xmm3, %xmm0 9467; SSE2-NEXT: retq 9468; 9469; SSE4-LABEL: test185: 9470; SSE4: # %bb.0: # %entry 9471; SSE4-NEXT: movdqa %xmm0, %xmm2 9472; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 9473; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9474; SSE4-NEXT: movapd %xmm1, %xmm0 9475; SSE4-NEXT: retq 9476; 9477; AVX1-LABEL: test185: 9478; AVX1: # %bb.0: # %entry 9479; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9480; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9481; AVX1-NEXT: retq 9482; 9483; AVX2-LABEL: test185: 9484; AVX2: # %bb.0: # %entry 9485; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9486; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9487; AVX2-NEXT: retq 9488; 9489; AVX512BW-LABEL: test185: 9490; AVX512BW: # %bb.0: # %entry 9491; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 9492; AVX512BW-NEXT: retq 9493entry: 9494 %cmp = icmp slt <2 x i64> %a, %b 9495 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9496 ret <2 x i64> %sel 9497} 9498 9499define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) { 9500; SSE2-LABEL: test186: 9501; SSE2: # %bb.0: # %entry 9502; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 9503; SSE2-NEXT: movdqa %xmm1, %xmm3 9504; SSE2-NEXT: pxor %xmm2, %xmm3 9505; SSE2-NEXT: pxor %xmm0, %xmm2 9506; SSE2-NEXT: movdqa %xmm2, %xmm4 9507; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9508; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9509; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9510; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9511; SSE2-NEXT: pand %xmm5, %xmm2 9512; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9513; SSE2-NEXT: por %xmm2, %xmm3 9514; SSE2-NEXT: pand %xmm3, %xmm0 9515; SSE2-NEXT: pandn %xmm1, %xmm3 9516; SSE2-NEXT: por %xmm3, %xmm0 9517; SSE2-NEXT: retq 9518; 9519; SSE4-LABEL: test186: 9520; SSE4: # %bb.0: # %entry 9521; SSE4-NEXT: movdqa %xmm0, %xmm2 9522; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 9523; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9524; SSE4-NEXT: movapd %xmm1, %xmm0 9525; SSE4-NEXT: retq 9526; 9527; AVX1-LABEL: test186: 9528; AVX1: # %bb.0: # %entry 9529; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9530; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9531; AVX1-NEXT: retq 9532; 9533; AVX2-LABEL: test186: 9534; AVX2: # %bb.0: # %entry 9535; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 9536; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9537; AVX2-NEXT: retq 9538; 9539; AVX512BW-LABEL: test186: 9540; AVX512BW: # %bb.0: # %entry 9541; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 9542; AVX512BW-NEXT: retq 9543entry: 9544 %cmp = icmp sle <2 x i64> %a, %b 9545 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9546 ret <2 x i64> %sel 9547} 9548 9549define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) { 9550; SSE2-LABEL: test187: 9551; SSE2: # %bb.0: # %entry 9552; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 9553; SSE2-NEXT: movdqa %xmm0, %xmm3 9554; SSE2-NEXT: pxor %xmm2, %xmm3 9555; SSE2-NEXT: pxor %xmm1, %xmm2 9556; SSE2-NEXT: movdqa %xmm2, %xmm4 9557; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9558; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9559; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9560; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9561; SSE2-NEXT: pand %xmm5, %xmm2 9562; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9563; SSE2-NEXT: por %xmm2, %xmm3 9564; SSE2-NEXT: pand %xmm3, %xmm0 9565; SSE2-NEXT: pandn %xmm1, %xmm3 9566; SSE2-NEXT: por %xmm3, %xmm0 9567; SSE2-NEXT: retq 9568; 9569; SSE4-LABEL: test187: 9570; SSE4: # %bb.0: # %entry 9571; SSE4-NEXT: movdqa %xmm0, %xmm2 9572; SSE4-NEXT: movdqa %xmm1, %xmm0 9573; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9574; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9575; SSE4-NEXT: movapd %xmm1, %xmm0 9576; SSE4-NEXT: retq 9577; 9578; AVX1-LABEL: test187: 9579; AVX1: # %bb.0: # %entry 9580; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9581; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9582; AVX1-NEXT: retq 9583; 9584; AVX2-LABEL: test187: 9585; AVX2: # %bb.0: # %entry 9586; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9587; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9588; AVX2-NEXT: retq 9589; 9590; AVX512BW-LABEL: test187: 9591; AVX512BW: # %bb.0: # %entry 9592; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 9593; AVX512BW-NEXT: retq 9594entry: 9595 %cmp = icmp sgt <2 x i64> %a, %b 9596 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9597 ret <2 x i64> %sel 9598} 9599 9600define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) { 9601; SSE2-LABEL: test188: 9602; SSE2: # %bb.0: # %entry 9603; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 9604; SSE2-NEXT: movdqa %xmm0, %xmm3 9605; SSE2-NEXT: pxor %xmm2, %xmm3 9606; SSE2-NEXT: pxor %xmm1, %xmm2 9607; SSE2-NEXT: movdqa %xmm2, %xmm4 9608; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9609; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9610; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9611; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9612; SSE2-NEXT: pand %xmm5, %xmm2 9613; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9614; SSE2-NEXT: por %xmm2, %xmm3 9615; SSE2-NEXT: pand %xmm3, %xmm0 9616; SSE2-NEXT: pandn %xmm1, %xmm3 9617; SSE2-NEXT: por %xmm3, %xmm0 9618; SSE2-NEXT: retq 9619; 9620; SSE4-LABEL: test188: 9621; SSE4: # %bb.0: # %entry 9622; SSE4-NEXT: movdqa %xmm0, %xmm2 9623; SSE4-NEXT: movdqa %xmm1, %xmm0 9624; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9625; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9626; SSE4-NEXT: movapd %xmm1, %xmm0 9627; SSE4-NEXT: retq 9628; 9629; AVX1-LABEL: test188: 9630; AVX1: # %bb.0: # %entry 9631; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9632; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9633; AVX1-NEXT: retq 9634; 9635; AVX2-LABEL: test188: 9636; AVX2: # %bb.0: # %entry 9637; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 9638; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9639; AVX2-NEXT: retq 9640; 9641; AVX512BW-LABEL: test188: 9642; AVX512BW: # %bb.0: # %entry 9643; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 9644; AVX512BW-NEXT: retq 9645entry: 9646 %cmp = icmp sge <2 x i64> %a, %b 9647 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9648 ret <2 x i64> %sel 9649} 9650 9651define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) { 9652; SSE2-LABEL: test189: 9653; SSE2: # %bb.0: # %entry 9654; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 9655; SSE2-NEXT: movdqa %xmm1, %xmm3 9656; SSE2-NEXT: pxor %xmm2, %xmm3 9657; SSE2-NEXT: pxor %xmm0, %xmm2 9658; SSE2-NEXT: movdqa %xmm2, %xmm4 9659; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9660; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9661; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9662; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9663; SSE2-NEXT: pand %xmm5, %xmm2 9664; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9665; SSE2-NEXT: por %xmm2, %xmm3 9666; SSE2-NEXT: pand %xmm3, %xmm0 9667; SSE2-NEXT: pandn %xmm1, %xmm3 9668; SSE2-NEXT: por %xmm3, %xmm0 9669; SSE2-NEXT: retq 9670; 9671; SSE4-LABEL: test189: 9672; SSE4: # %bb.0: # %entry 9673; SSE4-NEXT: movdqa %xmm0, %xmm2 9674; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9675; SSE4-NEXT: movdqa %xmm1, %xmm3 9676; SSE4-NEXT: pxor %xmm0, %xmm3 9677; SSE4-NEXT: pxor %xmm2, %xmm0 9678; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9679; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9680; SSE4-NEXT: movapd %xmm1, %xmm0 9681; SSE4-NEXT: retq 9682; 9683; AVX1-LABEL: test189: 9684; AVX1: # %bb.0: # %entry 9685; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9686; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 9687; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 9688; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9689; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9690; AVX1-NEXT: retq 9691; 9692; AVX2-LABEL: test189: 9693; AVX2: # %bb.0: # %entry 9694; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9695; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 9696; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 9697; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9698; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9699; AVX2-NEXT: retq 9700; 9701; AVX512BW-LABEL: test189: 9702; AVX512BW: # %bb.0: # %entry 9703; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 9704; AVX512BW-NEXT: retq 9705entry: 9706 %cmp = icmp ult <2 x i64> %a, %b 9707 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9708 ret <2 x i64> %sel 9709} 9710 9711define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) { 9712; SSE2-LABEL: test190: 9713; SSE2: # %bb.0: # %entry 9714; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 9715; SSE2-NEXT: movdqa %xmm1, %xmm3 9716; SSE2-NEXT: pxor %xmm2, %xmm3 9717; SSE2-NEXT: pxor %xmm0, %xmm2 9718; SSE2-NEXT: movdqa %xmm2, %xmm4 9719; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9720; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9721; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9722; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9723; SSE2-NEXT: pand %xmm5, %xmm2 9724; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9725; SSE2-NEXT: por %xmm2, %xmm3 9726; SSE2-NEXT: pand %xmm3, %xmm0 9727; SSE2-NEXT: pandn %xmm1, %xmm3 9728; SSE2-NEXT: por %xmm3, %xmm0 9729; SSE2-NEXT: retq 9730; 9731; SSE4-LABEL: test190: 9732; SSE4: # %bb.0: # %entry 9733; SSE4-NEXT: movdqa %xmm0, %xmm2 9734; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9735; SSE4-NEXT: movdqa %xmm1, %xmm3 9736; SSE4-NEXT: pxor %xmm0, %xmm3 9737; SSE4-NEXT: pxor %xmm2, %xmm0 9738; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9739; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9740; SSE4-NEXT: movapd %xmm1, %xmm0 9741; SSE4-NEXT: retq 9742; 9743; AVX1-LABEL: test190: 9744; AVX1: # %bb.0: # %entry 9745; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9746; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 9747; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 9748; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9749; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9750; AVX1-NEXT: retq 9751; 9752; AVX2-LABEL: test190: 9753; AVX2: # %bb.0: # %entry 9754; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9755; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 9756; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 9757; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9758; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9759; AVX2-NEXT: retq 9760; 9761; AVX512BW-LABEL: test190: 9762; AVX512BW: # %bb.0: # %entry 9763; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 9764; AVX512BW-NEXT: retq 9765entry: 9766 %cmp = icmp ule <2 x i64> %a, %b 9767 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9768 ret <2 x i64> %sel 9769} 9770 9771define <2 x i64> @test191(<2 x i64> %a, <2 x i64> %b) { 9772; SSE2-LABEL: test191: 9773; SSE2: # %bb.0: # %entry 9774; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 9775; SSE2-NEXT: movdqa %xmm0, %xmm3 9776; SSE2-NEXT: pxor %xmm2, %xmm3 9777; SSE2-NEXT: pxor %xmm1, %xmm2 9778; SSE2-NEXT: movdqa %xmm2, %xmm4 9779; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9780; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9781; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9782; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9783; SSE2-NEXT: pand %xmm5, %xmm2 9784; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9785; SSE2-NEXT: por %xmm2, %xmm3 9786; SSE2-NEXT: pand %xmm3, %xmm0 9787; SSE2-NEXT: pandn %xmm1, %xmm3 9788; SSE2-NEXT: por %xmm3, %xmm0 9789; SSE2-NEXT: retq 9790; 9791; SSE4-LABEL: test191: 9792; SSE4: # %bb.0: # %entry 9793; SSE4-NEXT: movdqa %xmm0, %xmm2 9794; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9795; SSE4-NEXT: movdqa %xmm2, %xmm3 9796; SSE4-NEXT: pxor %xmm0, %xmm3 9797; SSE4-NEXT: pxor %xmm1, %xmm0 9798; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9799; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9800; SSE4-NEXT: movapd %xmm1, %xmm0 9801; SSE4-NEXT: retq 9802; 9803; AVX1-LABEL: test191: 9804; AVX1: # %bb.0: # %entry 9805; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9806; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 9807; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 9808; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9809; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9810; AVX1-NEXT: retq 9811; 9812; AVX2-LABEL: test191: 9813; AVX2: # %bb.0: # %entry 9814; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9815; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 9816; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 9817; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9818; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9819; AVX2-NEXT: retq 9820; 9821; AVX512BW-LABEL: test191: 9822; AVX512BW: # %bb.0: # %entry 9823; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 9824; AVX512BW-NEXT: retq 9825entry: 9826 %cmp = icmp ugt <2 x i64> %a, %b 9827 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9828 ret <2 x i64> %sel 9829} 9830 9831define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) { 9832; SSE2-LABEL: test192: 9833; SSE2: # %bb.0: # %entry 9834; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 9835; SSE2-NEXT: movdqa %xmm0, %xmm3 9836; SSE2-NEXT: pxor %xmm2, %xmm3 9837; SSE2-NEXT: pxor %xmm1, %xmm2 9838; SSE2-NEXT: movdqa %xmm2, %xmm4 9839; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 9840; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 9841; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 9842; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 9843; SSE2-NEXT: pand %xmm5, %xmm2 9844; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 9845; SSE2-NEXT: por %xmm2, %xmm3 9846; SSE2-NEXT: pand %xmm3, %xmm0 9847; SSE2-NEXT: pandn %xmm1, %xmm3 9848; SSE2-NEXT: por %xmm3, %xmm0 9849; SSE2-NEXT: retq 9850; 9851; SSE4-LABEL: test192: 9852; SSE4: # %bb.0: # %entry 9853; SSE4-NEXT: movdqa %xmm0, %xmm2 9854; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9855; SSE4-NEXT: movdqa %xmm2, %xmm3 9856; SSE4-NEXT: pxor %xmm0, %xmm3 9857; SSE4-NEXT: pxor %xmm1, %xmm0 9858; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 9859; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1 9860; SSE4-NEXT: movapd %xmm1, %xmm0 9861; SSE4-NEXT: retq 9862; 9863; AVX1-LABEL: test192: 9864; AVX1: # %bb.0: # %entry 9865; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9866; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 9867; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 9868; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9869; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9870; AVX1-NEXT: retq 9871; 9872; AVX2-LABEL: test192: 9873; AVX2: # %bb.0: # %entry 9874; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 9875; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 9876; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 9877; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 9878; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 9879; AVX2-NEXT: retq 9880; 9881; AVX512BW-LABEL: test192: 9882; AVX512BW: # %bb.0: # %entry 9883; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 9884; AVX512BW-NEXT: retq 9885entry: 9886 %cmp = icmp uge <2 x i64> %a, %b 9887 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 9888 ret <2 x i64> %sel 9889} 9890