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 %xmm0, %xmm2 38; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 39; SSE2-NEXT: pcmpeqd %xmm3, %xmm3 40; SSE2-NEXT: pxor %xmm2, %xmm3 41; SSE2-NEXT: pandn %xmm0, %xmm2 42; SSE2-NEXT: pandn %xmm1, %xmm3 43; SSE2-NEXT: por %xmm3, %xmm2 44; SSE2-NEXT: movdqa %xmm2, %xmm0 45; SSE2-NEXT: retq 46; 47; SSE4-LABEL: test2: 48; SSE4: # BB#0: # %entry 49; SSE4-NEXT: pminsb %xmm1, %xmm0 50; SSE4-NEXT: retq 51; 52; AVX-LABEL: test2: 53; AVX: # BB#0: # %entry 54; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0 55; AVX-NEXT: retq 56entry: 57 %cmp = icmp sle <16 x i8> %a, %b 58 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 59 ret <16 x i8> %sel 60} 61 62define <16 x i8> @test3(<16 x i8> %a, <16 x i8> %b) { 63; SSE2-LABEL: test3: 64; SSE2: # BB#0: # %entry 65; SSE2-NEXT: movdqa %xmm0, %xmm2 66; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 67; SSE2-NEXT: pand %xmm2, %xmm0 68; SSE2-NEXT: pandn %xmm1, %xmm2 69; SSE2-NEXT: por %xmm0, %xmm2 70; SSE2-NEXT: movdqa %xmm2, %xmm0 71; SSE2-NEXT: retq 72; 73; SSE4-LABEL: test3: 74; SSE4: # BB#0: # %entry 75; SSE4-NEXT: pmaxsb %xmm1, %xmm0 76; SSE4-NEXT: retq 77; 78; AVX-LABEL: test3: 79; AVX: # BB#0: # %entry 80; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 81; AVX-NEXT: retq 82entry: 83 %cmp = icmp sgt <16 x i8> %a, %b 84 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 85 ret <16 x i8> %sel 86} 87 88define <16 x i8> @test4(<16 x i8> %a, <16 x i8> %b) { 89; SSE2-LABEL: test4: 90; SSE2: # BB#0: # %entry 91; SSE2-NEXT: movdqa %xmm1, %xmm3 92; SSE2-NEXT: pcmpgtb %xmm0, %xmm3 93; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 94; SSE2-NEXT: pxor %xmm3, %xmm2 95; SSE2-NEXT: pandn %xmm0, %xmm3 96; SSE2-NEXT: pandn %xmm1, %xmm2 97; SSE2-NEXT: por %xmm3, %xmm2 98; SSE2-NEXT: movdqa %xmm2, %xmm0 99; SSE2-NEXT: retq 100; 101; SSE4-LABEL: test4: 102; SSE4: # BB#0: # %entry 103; SSE4-NEXT: pmaxsb %xmm1, %xmm0 104; SSE4-NEXT: retq 105; 106; AVX-LABEL: test4: 107; AVX: # BB#0: # %entry 108; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 109; AVX-NEXT: retq 110entry: 111 %cmp = icmp sge <16 x i8> %a, %b 112 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 113 ret <16 x i8> %sel 114} 115 116define <16 x i8> @test5(<16 x i8> %a, <16 x i8> %b) { 117; SSE-LABEL: test5: 118; SSE: # BB#0: # %entry 119; SSE-NEXT: pminub %xmm1, %xmm0 120; SSE-NEXT: retq 121; 122; AVX-LABEL: test5: 123; AVX: # BB#0: # %entry 124; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 125; AVX-NEXT: retq 126entry: 127 %cmp = icmp ult <16 x i8> %a, %b 128 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 129 ret <16 x i8> %sel 130} 131 132define <16 x i8> @test6(<16 x i8> %a, <16 x i8> %b) { 133; SSE-LABEL: test6: 134; SSE: # BB#0: # %entry 135; SSE-NEXT: pminub %xmm1, %xmm0 136; SSE-NEXT: retq 137; 138; AVX-LABEL: test6: 139; AVX: # BB#0: # %entry 140; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 141; AVX-NEXT: retq 142entry: 143 %cmp = icmp ule <16 x i8> %a, %b 144 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 145 ret <16 x i8> %sel 146} 147 148define <16 x i8> @test7(<16 x i8> %a, <16 x i8> %b) { 149; SSE-LABEL: test7: 150; SSE: # BB#0: # %entry 151; SSE-NEXT: pmaxub %xmm1, %xmm0 152; SSE-NEXT: retq 153; 154; AVX-LABEL: test7: 155; AVX: # BB#0: # %entry 156; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 157; AVX-NEXT: retq 158entry: 159 %cmp = icmp ugt <16 x i8> %a, %b 160 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 161 ret <16 x i8> %sel 162} 163 164define <16 x i8> @test8(<16 x i8> %a, <16 x i8> %b) { 165; SSE-LABEL: test8: 166; SSE: # BB#0: # %entry 167; SSE-NEXT: pmaxub %xmm1, %xmm0 168; SSE-NEXT: retq 169; 170; AVX-LABEL: test8: 171; AVX: # BB#0: # %entry 172; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 173; AVX-NEXT: retq 174entry: 175 %cmp = icmp uge <16 x i8> %a, %b 176 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b 177 ret <16 x i8> %sel 178} 179 180define <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) { 181; SSE-LABEL: test9: 182; SSE: # BB#0: # %entry 183; SSE-NEXT: pminsw %xmm1, %xmm0 184; SSE-NEXT: retq 185; 186; AVX-LABEL: test9: 187; AVX: # BB#0: # %entry 188; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 189; AVX-NEXT: retq 190entry: 191 %cmp = icmp slt <8 x i16> %a, %b 192 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 193 ret <8 x i16> %sel 194} 195 196define <8 x i16> @test10(<8 x i16> %a, <8 x i16> %b) { 197; SSE-LABEL: test10: 198; SSE: # BB#0: # %entry 199; SSE-NEXT: pminsw %xmm1, %xmm0 200; SSE-NEXT: retq 201; 202; AVX-LABEL: test10: 203; AVX: # BB#0: # %entry 204; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 205; AVX-NEXT: retq 206entry: 207 %cmp = icmp sle <8 x i16> %a, %b 208 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 209 ret <8 x i16> %sel 210} 211 212define <8 x i16> @test11(<8 x i16> %a, <8 x i16> %b) { 213; SSE-LABEL: test11: 214; SSE: # BB#0: # %entry 215; SSE-NEXT: pmaxsw %xmm1, %xmm0 216; SSE-NEXT: retq 217; 218; AVX-LABEL: test11: 219; AVX: # BB#0: # %entry 220; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 221; AVX-NEXT: retq 222entry: 223 %cmp = icmp sgt <8 x i16> %a, %b 224 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 225 ret <8 x i16> %sel 226} 227 228define <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) { 229; SSE-LABEL: test12: 230; SSE: # BB#0: # %entry 231; SSE-NEXT: pmaxsw %xmm1, %xmm0 232; SSE-NEXT: retq 233; 234; AVX-LABEL: test12: 235; AVX: # BB#0: # %entry 236; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 237; AVX-NEXT: retq 238entry: 239 %cmp = icmp sge <8 x i16> %a, %b 240 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 241 ret <8 x i16> %sel 242} 243 244define <8 x i16> @test13(<8 x i16> %a, <8 x i16> %b) { 245; SSE2-LABEL: test13: 246; SSE2: # BB#0: # %entry 247; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 248; SSE2-NEXT: movdqa %xmm0, %xmm3 249; SSE2-NEXT: pxor %xmm2, %xmm3 250; SSE2-NEXT: pxor %xmm1, %xmm2 251; SSE2-NEXT: pcmpgtw %xmm3, %xmm2 252; SSE2-NEXT: pand %xmm2, %xmm0 253; SSE2-NEXT: pandn %xmm1, %xmm2 254; SSE2-NEXT: por %xmm2, %xmm0 255; SSE2-NEXT: retq 256; 257; SSE4-LABEL: test13: 258; SSE4: # BB#0: # %entry 259; SSE4-NEXT: pminuw %xmm1, %xmm0 260; SSE4-NEXT: retq 261; 262; AVX-LABEL: test13: 263; AVX: # BB#0: # %entry 264; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 265; AVX-NEXT: retq 266entry: 267 %cmp = icmp ult <8 x i16> %a, %b 268 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 269 ret <8 x i16> %sel 270} 271 272define <8 x i16> @test14(<8 x i16> %a, <8 x i16> %b) { 273; SSE2-LABEL: test14: 274; SSE2: # BB#0: # %entry 275; SSE2-NEXT: movdqa %xmm0, %xmm2 276; SSE2-NEXT: psubusw %xmm1, %xmm2 277; SSE2-NEXT: pxor %xmm3, %xmm3 278; SSE2-NEXT: pcmpeqw %xmm2, %xmm3 279; SSE2-NEXT: pand %xmm3, %xmm0 280; SSE2-NEXT: pandn %xmm1, %xmm3 281; SSE2-NEXT: por %xmm3, %xmm0 282; SSE2-NEXT: retq 283; 284; SSE4-LABEL: test14: 285; SSE4: # BB#0: # %entry 286; SSE4-NEXT: pminuw %xmm1, %xmm0 287; SSE4-NEXT: retq 288; 289; AVX-LABEL: test14: 290; AVX: # BB#0: # %entry 291; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 292; AVX-NEXT: retq 293entry: 294 %cmp = icmp ule <8 x i16> %a, %b 295 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 296 ret <8 x i16> %sel 297} 298 299define <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) { 300; SSE2-LABEL: test15: 301; SSE2: # BB#0: # %entry 302; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 303; SSE2-NEXT: movdqa %xmm1, %xmm3 304; SSE2-NEXT: pxor %xmm2, %xmm3 305; SSE2-NEXT: pxor %xmm0, %xmm2 306; SSE2-NEXT: pcmpgtw %xmm3, %xmm2 307; SSE2-NEXT: pand %xmm2, %xmm0 308; SSE2-NEXT: pandn %xmm1, %xmm2 309; SSE2-NEXT: por %xmm2, %xmm0 310; SSE2-NEXT: retq 311; 312; SSE4-LABEL: test15: 313; SSE4: # BB#0: # %entry 314; SSE4-NEXT: pmaxuw %xmm1, %xmm0 315; SSE4-NEXT: retq 316; 317; AVX-LABEL: test15: 318; AVX: # BB#0: # %entry 319; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 320; AVX-NEXT: retq 321entry: 322 %cmp = icmp ugt <8 x i16> %a, %b 323 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 324 ret <8 x i16> %sel 325} 326 327define <8 x i16> @test16(<8 x i16> %a, <8 x i16> %b) { 328; SSE2-LABEL: test16: 329; SSE2: # BB#0: # %entry 330; SSE2-NEXT: movdqa %xmm1, %xmm2 331; SSE2-NEXT: psubusw %xmm0, %xmm2 332; SSE2-NEXT: pxor %xmm3, %xmm3 333; SSE2-NEXT: pcmpeqw %xmm2, %xmm3 334; SSE2-NEXT: pand %xmm3, %xmm0 335; SSE2-NEXT: pandn %xmm1, %xmm3 336; SSE2-NEXT: por %xmm3, %xmm0 337; SSE2-NEXT: retq 338; 339; SSE4-LABEL: test16: 340; SSE4: # BB#0: # %entry 341; SSE4-NEXT: pmaxuw %xmm1, %xmm0 342; SSE4-NEXT: retq 343; 344; AVX-LABEL: test16: 345; AVX: # BB#0: # %entry 346; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 347; AVX-NEXT: retq 348entry: 349 %cmp = icmp uge <8 x i16> %a, %b 350 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b 351 ret <8 x i16> %sel 352} 353 354define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) { 355; SSE2-LABEL: test17: 356; SSE2: # BB#0: # %entry 357; SSE2-NEXT: movdqa %xmm1, %xmm2 358; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 359; SSE2-NEXT: pand %xmm2, %xmm0 360; SSE2-NEXT: pandn %xmm1, %xmm2 361; SSE2-NEXT: por %xmm2, %xmm0 362; SSE2-NEXT: retq 363; 364; SSE4-LABEL: test17: 365; SSE4: # BB#0: # %entry 366; SSE4-NEXT: pminsd %xmm1, %xmm0 367; SSE4-NEXT: retq 368; 369; AVX-LABEL: test17: 370; AVX: # BB#0: # %entry 371; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 372; AVX-NEXT: retq 373entry: 374 %cmp = icmp slt <4 x i32> %a, %b 375 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 376 ret <4 x i32> %sel 377} 378 379define <4 x i32> @test18(<4 x i32> %a, <4 x i32> %b) { 380; SSE2-LABEL: test18: 381; SSE2: # BB#0: # %entry 382; SSE2-NEXT: movdqa %xmm0, %xmm2 383; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 384; SSE2-NEXT: pcmpeqd %xmm3, %xmm3 385; SSE2-NEXT: pxor %xmm2, %xmm3 386; SSE2-NEXT: pandn %xmm0, %xmm2 387; SSE2-NEXT: pandn %xmm1, %xmm3 388; SSE2-NEXT: por %xmm3, %xmm2 389; SSE2-NEXT: movdqa %xmm2, %xmm0 390; SSE2-NEXT: retq 391; 392; SSE4-LABEL: test18: 393; SSE4: # BB#0: # %entry 394; SSE4-NEXT: pminsd %xmm1, %xmm0 395; SSE4-NEXT: retq 396; 397; AVX-LABEL: test18: 398; AVX: # BB#0: # %entry 399; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 400; AVX-NEXT: retq 401entry: 402 %cmp = icmp sle <4 x i32> %a, %b 403 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 404 ret <4 x i32> %sel 405} 406 407define <4 x i32> @test19(<4 x i32> %a, <4 x i32> %b) { 408; SSE2-LABEL: test19: 409; SSE2: # BB#0: # %entry 410; SSE2-NEXT: movdqa %xmm0, %xmm2 411; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 412; SSE2-NEXT: pand %xmm2, %xmm0 413; SSE2-NEXT: pandn %xmm1, %xmm2 414; SSE2-NEXT: por %xmm0, %xmm2 415; SSE2-NEXT: movdqa %xmm2, %xmm0 416; SSE2-NEXT: retq 417; 418; SSE4-LABEL: test19: 419; SSE4: # BB#0: # %entry 420; SSE4-NEXT: pmaxsd %xmm1, %xmm0 421; SSE4-NEXT: retq 422; 423; AVX-LABEL: test19: 424; AVX: # BB#0: # %entry 425; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 426; AVX-NEXT: retq 427entry: 428 %cmp = icmp sgt <4 x i32> %a, %b 429 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 430 ret <4 x i32> %sel 431} 432 433define <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b) { 434; SSE2-LABEL: test20: 435; SSE2: # BB#0: # %entry 436; SSE2-NEXT: movdqa %xmm1, %xmm3 437; SSE2-NEXT: pcmpgtd %xmm0, %xmm3 438; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 439; SSE2-NEXT: pxor %xmm3, %xmm2 440; SSE2-NEXT: pandn %xmm0, %xmm3 441; SSE2-NEXT: pandn %xmm1, %xmm2 442; SSE2-NEXT: por %xmm3, %xmm2 443; SSE2-NEXT: movdqa %xmm2, %xmm0 444; SSE2-NEXT: retq 445; 446; SSE4-LABEL: test20: 447; SSE4: # BB#0: # %entry 448; SSE4-NEXT: pmaxsd %xmm1, %xmm0 449; SSE4-NEXT: retq 450; 451; AVX-LABEL: test20: 452; AVX: # BB#0: # %entry 453; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 454; AVX-NEXT: retq 455entry: 456 %cmp = icmp sge <4 x i32> %a, %b 457 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 458 ret <4 x i32> %sel 459} 460 461define <4 x i32> @test21(<4 x i32> %a, <4 x i32> %b) { 462; SSE2-LABEL: test21: 463; SSE2: # BB#0: # %entry 464; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 465; SSE2-NEXT: movdqa %xmm0, %xmm3 466; SSE2-NEXT: pxor %xmm2, %xmm3 467; SSE2-NEXT: pxor %xmm1, %xmm2 468; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 469; SSE2-NEXT: pand %xmm2, %xmm0 470; SSE2-NEXT: pandn %xmm1, %xmm2 471; SSE2-NEXT: por %xmm2, %xmm0 472; SSE2-NEXT: retq 473; 474; SSE4-LABEL: test21: 475; SSE4: # BB#0: # %entry 476; SSE4-NEXT: pminud %xmm1, %xmm0 477; SSE4-NEXT: retq 478; 479; AVX-LABEL: test21: 480; AVX: # BB#0: # %entry 481; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 482; AVX-NEXT: retq 483entry: 484 %cmp = icmp ult <4 x i32> %a, %b 485 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 486 ret <4 x i32> %sel 487} 488 489define <4 x i32> @test22(<4 x i32> %a, <4 x i32> %b) { 490; SSE2-LABEL: test22: 491; SSE2: # BB#0: # %entry 492; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648] 493; SSE2-NEXT: movdqa %xmm1, %xmm2 494; SSE2-NEXT: pxor %xmm3, %xmm2 495; SSE2-NEXT: pxor %xmm0, %xmm3 496; SSE2-NEXT: pcmpgtd %xmm2, %xmm3 497; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 498; SSE2-NEXT: pxor %xmm3, %xmm2 499; SSE2-NEXT: pandn %xmm0, %xmm3 500; SSE2-NEXT: pandn %xmm1, %xmm2 501; SSE2-NEXT: por %xmm3, %xmm2 502; SSE2-NEXT: movdqa %xmm2, %xmm0 503; SSE2-NEXT: retq 504; 505; SSE4-LABEL: test22: 506; SSE4: # BB#0: # %entry 507; SSE4-NEXT: pminud %xmm1, %xmm0 508; SSE4-NEXT: retq 509; 510; AVX-LABEL: test22: 511; AVX: # BB#0: # %entry 512; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 513; AVX-NEXT: retq 514entry: 515 %cmp = icmp ule <4 x i32> %a, %b 516 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 517 ret <4 x i32> %sel 518} 519 520define <4 x i32> @test23(<4 x i32> %a, <4 x i32> %b) { 521; SSE2-LABEL: test23: 522; SSE2: # BB#0: # %entry 523; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 524; SSE2-NEXT: movdqa %xmm1, %xmm3 525; SSE2-NEXT: pxor %xmm2, %xmm3 526; SSE2-NEXT: pxor %xmm0, %xmm2 527; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 528; SSE2-NEXT: pand %xmm2, %xmm0 529; SSE2-NEXT: pandn %xmm1, %xmm2 530; SSE2-NEXT: por %xmm2, %xmm0 531; SSE2-NEXT: retq 532; 533; SSE4-LABEL: test23: 534; SSE4: # BB#0: # %entry 535; SSE4-NEXT: pmaxud %xmm1, %xmm0 536; SSE4-NEXT: retq 537; 538; AVX-LABEL: test23: 539; AVX: # BB#0: # %entry 540; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 541; AVX-NEXT: retq 542entry: 543 %cmp = icmp ugt <4 x i32> %a, %b 544 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 545 ret <4 x i32> %sel 546} 547 548define <4 x i32> @test24(<4 x i32> %a, <4 x i32> %b) { 549; SSE2-LABEL: test24: 550; SSE2: # BB#0: # %entry 551; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648] 552; SSE2-NEXT: movdqa %xmm0, %xmm2 553; SSE2-NEXT: pxor %xmm3, %xmm2 554; SSE2-NEXT: pxor %xmm1, %xmm3 555; SSE2-NEXT: pcmpgtd %xmm2, %xmm3 556; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 557; SSE2-NEXT: pxor %xmm3, %xmm2 558; SSE2-NEXT: pandn %xmm0, %xmm3 559; SSE2-NEXT: pandn %xmm1, %xmm2 560; SSE2-NEXT: por %xmm3, %xmm2 561; SSE2-NEXT: movdqa %xmm2, %xmm0 562; SSE2-NEXT: retq 563; 564; SSE4-LABEL: test24: 565; SSE4: # BB#0: # %entry 566; SSE4-NEXT: pmaxud %xmm1, %xmm0 567; SSE4-NEXT: retq 568; 569; AVX-LABEL: test24: 570; AVX: # BB#0: # %entry 571; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 572; AVX-NEXT: retq 573entry: 574 %cmp = icmp uge <4 x i32> %a, %b 575 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 576 ret <4 x i32> %sel 577} 578 579define <32 x i8> @test25(<32 x i8> %a, <32 x i8> %b) { 580; SSE2-LABEL: test25: 581; SSE2: # BB#0: # %entry 582; SSE2-NEXT: movdqa %xmm3, %xmm4 583; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 584; SSE2-NEXT: movdqa %xmm2, %xmm5 585; SSE2-NEXT: pcmpgtb %xmm0, %xmm5 586; SSE2-NEXT: pand %xmm5, %xmm0 587; SSE2-NEXT: pandn %xmm2, %xmm5 588; SSE2-NEXT: por %xmm5, %xmm0 589; SSE2-NEXT: pand %xmm4, %xmm1 590; SSE2-NEXT: pandn %xmm3, %xmm4 591; SSE2-NEXT: por %xmm4, %xmm1 592; SSE2-NEXT: retq 593; 594; SSE4-LABEL: test25: 595; SSE4: # BB#0: # %entry 596; SSE4-NEXT: pminsb %xmm2, %xmm0 597; SSE4-NEXT: pminsb %xmm3, %xmm1 598; SSE4-NEXT: retq 599; 600; AVX1-LABEL: test25: 601; AVX1: # BB#0: # %entry 602; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 603; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 604; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 605; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 606; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 607; AVX1-NEXT: retq 608; 609; AVX2-LABEL: test25: 610; AVX2: # BB#0: # %entry 611; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 612; AVX2-NEXT: retq 613; 614; AVX512F-LABEL: test25: 615; AVX512F: # BB#0: # %entry 616; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 617; AVX512F-NEXT: retq 618entry: 619 %cmp = icmp slt <32 x i8> %a, %b 620 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 621 ret <32 x i8> %sel 622} 623 624define <32 x i8> @test26(<32 x i8> %a, <32 x i8> %b) { 625; SSE2-LABEL: test26: 626; SSE2: # BB#0: # %entry 627; SSE2-NEXT: movdqa %xmm1, %xmm6 628; SSE2-NEXT: pcmpgtb %xmm3, %xmm6 629; SSE2-NEXT: pcmpeqd %xmm7, %xmm7 630; SSE2-NEXT: movdqa %xmm6, %xmm4 631; SSE2-NEXT: pxor %xmm7, %xmm4 632; SSE2-NEXT: movdqa %xmm0, %xmm5 633; SSE2-NEXT: pcmpgtb %xmm2, %xmm5 634; SSE2-NEXT: pxor %xmm5, %xmm7 635; SSE2-NEXT: pandn %xmm0, %xmm5 636; SSE2-NEXT: pandn %xmm2, %xmm7 637; SSE2-NEXT: por %xmm7, %xmm5 638; SSE2-NEXT: pandn %xmm1, %xmm6 639; SSE2-NEXT: pandn %xmm3, %xmm4 640; SSE2-NEXT: por %xmm6, %xmm4 641; SSE2-NEXT: movdqa %xmm5, %xmm0 642; SSE2-NEXT: movdqa %xmm4, %xmm1 643; SSE2-NEXT: retq 644; 645; SSE4-LABEL: test26: 646; SSE4: # BB#0: # %entry 647; SSE4-NEXT: pminsb %xmm2, %xmm0 648; SSE4-NEXT: pminsb %xmm3, %xmm1 649; SSE4-NEXT: retq 650; 651; AVX1-LABEL: test26: 652; AVX1: # BB#0: # %entry 653; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 654; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 655; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 656; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 657; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 658; AVX1-NEXT: retq 659; 660; AVX2-LABEL: test26: 661; AVX2: # BB#0: # %entry 662; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 663; AVX2-NEXT: retq 664; 665; AVX512F-LABEL: test26: 666; AVX512F: # BB#0: # %entry 667; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 668; AVX512F-NEXT: retq 669entry: 670 %cmp = icmp sle <32 x i8> %a, %b 671 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 672 ret <32 x i8> %sel 673} 674 675define <32 x i8> @test27(<32 x i8> %a, <32 x i8> %b) { 676; SSE2-LABEL: test27: 677; SSE2: # BB#0: # %entry 678; SSE2-NEXT: movdqa %xmm1, %xmm4 679; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 680; SSE2-NEXT: movdqa %xmm0, %xmm5 681; SSE2-NEXT: pcmpgtb %xmm2, %xmm5 682; SSE2-NEXT: pand %xmm5, %xmm0 683; SSE2-NEXT: pandn %xmm2, %xmm5 684; SSE2-NEXT: por %xmm0, %xmm5 685; SSE2-NEXT: pand %xmm4, %xmm1 686; SSE2-NEXT: pandn %xmm3, %xmm4 687; SSE2-NEXT: por %xmm1, %xmm4 688; SSE2-NEXT: movdqa %xmm5, %xmm0 689; SSE2-NEXT: movdqa %xmm4, %xmm1 690; SSE2-NEXT: retq 691; 692; SSE4-LABEL: test27: 693; SSE4: # BB#0: # %entry 694; SSE4-NEXT: pmaxsb %xmm2, %xmm0 695; SSE4-NEXT: pmaxsb %xmm3, %xmm1 696; SSE4-NEXT: retq 697; 698; AVX1-LABEL: test27: 699; AVX1: # BB#0: # %entry 700; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 701; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 702; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 703; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 704; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 705; AVX1-NEXT: retq 706; 707; AVX2-LABEL: test27: 708; AVX2: # BB#0: # %entry 709; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 710; AVX2-NEXT: retq 711; 712; AVX512F-LABEL: test27: 713; AVX512F: # BB#0: # %entry 714; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 715; AVX512F-NEXT: retq 716entry: 717 %cmp = icmp sgt <32 x i8> %a, %b 718 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 719 ret <32 x i8> %sel 720} 721 722define <32 x i8> @test28(<32 x i8> %a, <32 x i8> %b) { 723; SSE2-LABEL: test28: 724; SSE2: # BB#0: # %entry 725; SSE2-NEXT: movdqa %xmm3, %xmm6 726; SSE2-NEXT: pcmpgtb %xmm1, %xmm6 727; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 728; SSE2-NEXT: movdqa %xmm6, %xmm5 729; SSE2-NEXT: pxor %xmm4, %xmm5 730; SSE2-NEXT: movdqa %xmm2, %xmm7 731; SSE2-NEXT: pcmpgtb %xmm0, %xmm7 732; SSE2-NEXT: pxor %xmm7, %xmm4 733; SSE2-NEXT: pandn %xmm0, %xmm7 734; SSE2-NEXT: pandn %xmm2, %xmm4 735; SSE2-NEXT: por %xmm7, %xmm4 736; SSE2-NEXT: pandn %xmm1, %xmm6 737; SSE2-NEXT: pandn %xmm3, %xmm5 738; SSE2-NEXT: por %xmm6, %xmm5 739; SSE2-NEXT: movdqa %xmm4, %xmm0 740; SSE2-NEXT: movdqa %xmm5, %xmm1 741; SSE2-NEXT: retq 742; 743; SSE4-LABEL: test28: 744; SSE4: # BB#0: # %entry 745; SSE4-NEXT: pmaxsb %xmm2, %xmm0 746; SSE4-NEXT: pmaxsb %xmm3, %xmm1 747; SSE4-NEXT: retq 748; 749; AVX1-LABEL: test28: 750; AVX1: # BB#0: # %entry 751; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 752; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 753; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 754; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 755; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 756; AVX1-NEXT: retq 757; 758; AVX2-LABEL: test28: 759; AVX2: # BB#0: # %entry 760; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 761; AVX2-NEXT: retq 762; 763; AVX512F-LABEL: test28: 764; AVX512F: # BB#0: # %entry 765; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 766; AVX512F-NEXT: retq 767entry: 768 %cmp = icmp sge <32 x i8> %a, %b 769 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 770 ret <32 x i8> %sel 771} 772 773define <32 x i8> @test29(<32 x i8> %a, <32 x i8> %b) { 774; SSE-LABEL: test29: 775; SSE: # BB#0: # %entry 776; SSE-NEXT: pminub %xmm2, %xmm0 777; SSE-NEXT: pminub %xmm3, %xmm1 778; SSE-NEXT: retq 779; 780; AVX1-LABEL: test29: 781; AVX1: # BB#0: # %entry 782; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 783; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 784; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 785; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 786; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 787; AVX1-NEXT: retq 788; 789; AVX2-LABEL: test29: 790; AVX2: # BB#0: # %entry 791; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 792; AVX2-NEXT: retq 793; 794; AVX512F-LABEL: test29: 795; AVX512F: # BB#0: # %entry 796; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 797; AVX512F-NEXT: retq 798entry: 799 %cmp = icmp ult <32 x i8> %a, %b 800 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 801 ret <32 x i8> %sel 802} 803 804define <32 x i8> @test30(<32 x i8> %a, <32 x i8> %b) { 805; SSE-LABEL: test30: 806; SSE: # BB#0: # %entry 807; SSE-NEXT: pminub %xmm2, %xmm0 808; SSE-NEXT: pminub %xmm3, %xmm1 809; SSE-NEXT: retq 810; 811; AVX1-LABEL: test30: 812; AVX1: # BB#0: # %entry 813; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 814; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 815; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 816; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 817; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 818; AVX1-NEXT: retq 819; 820; AVX2-LABEL: test30: 821; AVX2: # BB#0: # %entry 822; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 823; AVX2-NEXT: retq 824; 825; AVX512F-LABEL: test30: 826; AVX512F: # BB#0: # %entry 827; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 828; AVX512F-NEXT: retq 829entry: 830 %cmp = icmp ule <32 x i8> %a, %b 831 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 832 ret <32 x i8> %sel 833} 834 835define <32 x i8> @test31(<32 x i8> %a, <32 x i8> %b) { 836; SSE-LABEL: test31: 837; SSE: # BB#0: # %entry 838; SSE-NEXT: pmaxub %xmm2, %xmm0 839; SSE-NEXT: pmaxub %xmm3, %xmm1 840; SSE-NEXT: retq 841; 842; AVX1-LABEL: test31: 843; AVX1: # BB#0: # %entry 844; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 845; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 846; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 847; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 848; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 849; AVX1-NEXT: retq 850; 851; AVX2-LABEL: test31: 852; AVX2: # BB#0: # %entry 853; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 854; AVX2-NEXT: retq 855; 856; AVX512F-LABEL: test31: 857; AVX512F: # BB#0: # %entry 858; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 859; AVX512F-NEXT: retq 860entry: 861 %cmp = icmp ugt <32 x i8> %a, %b 862 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 863 ret <32 x i8> %sel 864} 865 866define <32 x i8> @test32(<32 x i8> %a, <32 x i8> %b) { 867; SSE-LABEL: test32: 868; SSE: # BB#0: # %entry 869; SSE-NEXT: pmaxub %xmm2, %xmm0 870; SSE-NEXT: pmaxub %xmm3, %xmm1 871; SSE-NEXT: retq 872; 873; AVX1-LABEL: test32: 874; AVX1: # BB#0: # %entry 875; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 876; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 877; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 878; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 879; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 880; AVX1-NEXT: retq 881; 882; AVX2-LABEL: test32: 883; AVX2: # BB#0: # %entry 884; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 885; AVX2-NEXT: retq 886; 887; AVX512F-LABEL: test32: 888; AVX512F: # BB#0: # %entry 889; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 890; AVX512F-NEXT: retq 891entry: 892 %cmp = icmp uge <32 x i8> %a, %b 893 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b 894 ret <32 x i8> %sel 895} 896 897define <16 x i16> @test33(<16 x i16> %a, <16 x i16> %b) { 898; SSE-LABEL: test33: 899; SSE: # BB#0: # %entry 900; SSE-NEXT: pminsw %xmm2, %xmm0 901; SSE-NEXT: pminsw %xmm3, %xmm1 902; SSE-NEXT: retq 903; 904; AVX1-LABEL: test33: 905; AVX1: # BB#0: # %entry 906; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 907; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 908; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 909; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 910; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 911; AVX1-NEXT: retq 912; 913; AVX2-LABEL: test33: 914; AVX2: # BB#0: # %entry 915; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 916; AVX2-NEXT: retq 917; 918; AVX512F-LABEL: test33: 919; AVX512F: # BB#0: # %entry 920; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 921; AVX512F-NEXT: retq 922entry: 923 %cmp = icmp slt <16 x i16> %a, %b 924 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 925 ret <16 x i16> %sel 926} 927 928define <16 x i16> @test34(<16 x i16> %a, <16 x i16> %b) { 929; SSE-LABEL: test34: 930; SSE: # BB#0: # %entry 931; SSE-NEXT: pminsw %xmm2, %xmm0 932; SSE-NEXT: pminsw %xmm3, %xmm1 933; SSE-NEXT: retq 934; 935; AVX1-LABEL: test34: 936; AVX1: # BB#0: # %entry 937; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 938; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 939; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 940; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 941; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 942; AVX1-NEXT: retq 943; 944; AVX2-LABEL: test34: 945; AVX2: # BB#0: # %entry 946; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 947; AVX2-NEXT: retq 948; 949; AVX512F-LABEL: test34: 950; AVX512F: # BB#0: # %entry 951; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 952; AVX512F-NEXT: retq 953entry: 954 %cmp = icmp sle <16 x i16> %a, %b 955 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 956 ret <16 x i16> %sel 957} 958 959define <16 x i16> @test35(<16 x i16> %a, <16 x i16> %b) { 960; SSE-LABEL: test35: 961; SSE: # BB#0: # %entry 962; SSE-NEXT: pmaxsw %xmm2, %xmm0 963; SSE-NEXT: pmaxsw %xmm3, %xmm1 964; SSE-NEXT: retq 965; 966; AVX1-LABEL: test35: 967; AVX1: # BB#0: # %entry 968; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 969; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 970; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 971; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 972; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 973; AVX1-NEXT: retq 974; 975; AVX2-LABEL: test35: 976; AVX2: # BB#0: # %entry 977; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 978; AVX2-NEXT: retq 979; 980; AVX512F-LABEL: test35: 981; AVX512F: # BB#0: # %entry 982; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 983; AVX512F-NEXT: retq 984entry: 985 %cmp = icmp sgt <16 x i16> %a, %b 986 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 987 ret <16 x i16> %sel 988} 989 990define <16 x i16> @test36(<16 x i16> %a, <16 x i16> %b) { 991; SSE-LABEL: test36: 992; SSE: # BB#0: # %entry 993; SSE-NEXT: pmaxsw %xmm2, %xmm0 994; SSE-NEXT: pmaxsw %xmm3, %xmm1 995; SSE-NEXT: retq 996; 997; AVX1-LABEL: test36: 998; AVX1: # BB#0: # %entry 999; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1000; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1001; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 1002; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 1003; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1004; AVX1-NEXT: retq 1005; 1006; AVX2-LABEL: test36: 1007; AVX2: # BB#0: # %entry 1008; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 1009; AVX2-NEXT: retq 1010; 1011; AVX512F-LABEL: test36: 1012; AVX512F: # BB#0: # %entry 1013; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 1014; AVX512F-NEXT: retq 1015entry: 1016 %cmp = icmp sge <16 x i16> %a, %b 1017 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1018 ret <16 x i16> %sel 1019} 1020 1021define <16 x i16> @test37(<16 x i16> %a, <16 x i16> %b) { 1022; SSE2-LABEL: test37: 1023; SSE2: # BB#0: # %entry 1024; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 1025; SSE2-NEXT: movdqa %xmm1, %xmm5 1026; SSE2-NEXT: pxor %xmm4, %xmm5 1027; SSE2-NEXT: movdqa %xmm3, %xmm6 1028; SSE2-NEXT: pxor %xmm4, %xmm6 1029; SSE2-NEXT: pcmpgtw %xmm5, %xmm6 1030; SSE2-NEXT: movdqa %xmm0, %xmm5 1031; SSE2-NEXT: pxor %xmm4, %xmm5 1032; SSE2-NEXT: pxor %xmm2, %xmm4 1033; SSE2-NEXT: pcmpgtw %xmm5, %xmm4 1034; SSE2-NEXT: pand %xmm4, %xmm0 1035; SSE2-NEXT: pandn %xmm2, %xmm4 1036; SSE2-NEXT: por %xmm4, %xmm0 1037; SSE2-NEXT: pand %xmm6, %xmm1 1038; SSE2-NEXT: pandn %xmm3, %xmm6 1039; SSE2-NEXT: por %xmm6, %xmm1 1040; SSE2-NEXT: retq 1041; 1042; SSE4-LABEL: test37: 1043; SSE4: # BB#0: # %entry 1044; SSE4-NEXT: pminuw %xmm2, %xmm0 1045; SSE4-NEXT: pminuw %xmm3, %xmm1 1046; SSE4-NEXT: retq 1047; 1048; AVX1-LABEL: test37: 1049; AVX1: # BB#0: # %entry 1050; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1051; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1052; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 1053; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1054; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1055; AVX1-NEXT: retq 1056; 1057; AVX2-LABEL: test37: 1058; AVX2: # BB#0: # %entry 1059; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1060; AVX2-NEXT: retq 1061; 1062; AVX512F-LABEL: test37: 1063; AVX512F: # BB#0: # %entry 1064; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1065; AVX512F-NEXT: retq 1066entry: 1067 %cmp = icmp ult <16 x i16> %a, %b 1068 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1069 ret <16 x i16> %sel 1070} 1071 1072define <16 x i16> @test38(<16 x i16> %a, <16 x i16> %b) { 1073; SSE2-LABEL: test38: 1074; SSE2: # BB#0: # %entry 1075; SSE2-NEXT: movdqa %xmm1, %xmm4 1076; SSE2-NEXT: psubusw %xmm3, %xmm4 1077; SSE2-NEXT: pxor %xmm6, %xmm6 1078; SSE2-NEXT: pcmpeqw %xmm6, %xmm4 1079; SSE2-NEXT: movdqa %xmm0, %xmm5 1080; SSE2-NEXT: psubusw %xmm2, %xmm5 1081; SSE2-NEXT: pcmpeqw %xmm6, %xmm5 1082; SSE2-NEXT: pand %xmm5, %xmm0 1083; SSE2-NEXT: pandn %xmm2, %xmm5 1084; SSE2-NEXT: por %xmm0, %xmm5 1085; SSE2-NEXT: pand %xmm4, %xmm1 1086; SSE2-NEXT: pandn %xmm3, %xmm4 1087; SSE2-NEXT: por %xmm1, %xmm4 1088; SSE2-NEXT: movdqa %xmm5, %xmm0 1089; SSE2-NEXT: movdqa %xmm4, %xmm1 1090; SSE2-NEXT: retq 1091; 1092; SSE4-LABEL: test38: 1093; SSE4: # BB#0: # %entry 1094; SSE4-NEXT: pminuw %xmm2, %xmm0 1095; SSE4-NEXT: pminuw %xmm3, %xmm1 1096; SSE4-NEXT: retq 1097; 1098; AVX1-LABEL: test38: 1099; AVX1: # BB#0: # %entry 1100; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1101; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1102; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 1103; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1104; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1105; AVX1-NEXT: retq 1106; 1107; AVX2-LABEL: test38: 1108; AVX2: # BB#0: # %entry 1109; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1110; AVX2-NEXT: retq 1111; 1112; AVX512F-LABEL: test38: 1113; AVX512F: # BB#0: # %entry 1114; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1115; AVX512F-NEXT: retq 1116entry: 1117 %cmp = icmp ule <16 x i16> %a, %b 1118 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1119 ret <16 x i16> %sel 1120} 1121 1122define <16 x i16> @test39(<16 x i16> %a, <16 x i16> %b) { 1123; SSE2-LABEL: test39: 1124; SSE2: # BB#0: # %entry 1125; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768] 1126; SSE2-NEXT: movdqa %xmm3, %xmm6 1127; SSE2-NEXT: pxor %xmm5, %xmm6 1128; SSE2-NEXT: movdqa %xmm1, %xmm4 1129; SSE2-NEXT: pxor %xmm5, %xmm4 1130; SSE2-NEXT: pcmpgtw %xmm6, %xmm4 1131; SSE2-NEXT: movdqa %xmm2, %xmm6 1132; SSE2-NEXT: pxor %xmm5, %xmm6 1133; SSE2-NEXT: pxor %xmm0, %xmm5 1134; SSE2-NEXT: pcmpgtw %xmm6, %xmm5 1135; SSE2-NEXT: pand %xmm5, %xmm0 1136; SSE2-NEXT: pandn %xmm2, %xmm5 1137; SSE2-NEXT: por %xmm5, %xmm0 1138; SSE2-NEXT: pand %xmm4, %xmm1 1139; SSE2-NEXT: pandn %xmm3, %xmm4 1140; SSE2-NEXT: por %xmm1, %xmm4 1141; SSE2-NEXT: movdqa %xmm4, %xmm1 1142; SSE2-NEXT: retq 1143; 1144; SSE4-LABEL: test39: 1145; SSE4: # BB#0: # %entry 1146; SSE4-NEXT: pmaxuw %xmm2, %xmm0 1147; SSE4-NEXT: pmaxuw %xmm3, %xmm1 1148; SSE4-NEXT: retq 1149; 1150; AVX1-LABEL: test39: 1151; AVX1: # BB#0: # %entry 1152; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1153; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1154; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 1155; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1156; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1157; AVX1-NEXT: retq 1158; 1159; AVX2-LABEL: test39: 1160; AVX2: # BB#0: # %entry 1161; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1162; AVX2-NEXT: retq 1163; 1164; AVX512F-LABEL: test39: 1165; AVX512F: # BB#0: # %entry 1166; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1167; AVX512F-NEXT: retq 1168entry: 1169 %cmp = icmp ugt <16 x i16> %a, %b 1170 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1171 ret <16 x i16> %sel 1172} 1173 1174define <16 x i16> @test40(<16 x i16> %a, <16 x i16> %b) { 1175; SSE2-LABEL: test40: 1176; SSE2: # BB#0: # %entry 1177; SSE2-NEXT: movdqa %xmm3, %xmm4 1178; SSE2-NEXT: psubusw %xmm1, %xmm4 1179; SSE2-NEXT: pxor %xmm5, %xmm5 1180; SSE2-NEXT: pcmpeqw %xmm5, %xmm4 1181; SSE2-NEXT: movdqa %xmm2, %xmm6 1182; SSE2-NEXT: psubusw %xmm0, %xmm6 1183; SSE2-NEXT: pcmpeqw %xmm5, %xmm6 1184; SSE2-NEXT: pand %xmm6, %xmm0 1185; SSE2-NEXT: pandn %xmm2, %xmm6 1186; SSE2-NEXT: por %xmm6, %xmm0 1187; SSE2-NEXT: pand %xmm4, %xmm1 1188; SSE2-NEXT: pandn %xmm3, %xmm4 1189; SSE2-NEXT: por %xmm4, %xmm1 1190; SSE2-NEXT: retq 1191; 1192; SSE4-LABEL: test40: 1193; SSE4: # BB#0: # %entry 1194; SSE4-NEXT: pmaxuw %xmm2, %xmm0 1195; SSE4-NEXT: pmaxuw %xmm3, %xmm1 1196; SSE4-NEXT: retq 1197; 1198; AVX1-LABEL: test40: 1199; AVX1: # BB#0: # %entry 1200; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1201; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1202; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 1203; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1204; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1205; AVX1-NEXT: retq 1206; 1207; AVX2-LABEL: test40: 1208; AVX2: # BB#0: # %entry 1209; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1210; AVX2-NEXT: retq 1211; 1212; AVX512F-LABEL: test40: 1213; AVX512F: # BB#0: # %entry 1214; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 1215; AVX512F-NEXT: retq 1216entry: 1217 %cmp = icmp uge <16 x i16> %a, %b 1218 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b 1219 ret <16 x i16> %sel 1220} 1221 1222define <8 x i32> @test41(<8 x i32> %a, <8 x i32> %b) { 1223; SSE2-LABEL: test41: 1224; SSE2: # BB#0: # %entry 1225; SSE2-NEXT: movdqa %xmm3, %xmm4 1226; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 1227; SSE2-NEXT: movdqa %xmm2, %xmm5 1228; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 1229; SSE2-NEXT: pand %xmm5, %xmm0 1230; SSE2-NEXT: pandn %xmm2, %xmm5 1231; SSE2-NEXT: por %xmm5, %xmm0 1232; SSE2-NEXT: pand %xmm4, %xmm1 1233; SSE2-NEXT: pandn %xmm3, %xmm4 1234; SSE2-NEXT: por %xmm4, %xmm1 1235; SSE2-NEXT: retq 1236; 1237; SSE4-LABEL: test41: 1238; SSE4: # BB#0: # %entry 1239; SSE4-NEXT: pminsd %xmm2, %xmm0 1240; SSE4-NEXT: pminsd %xmm3, %xmm1 1241; SSE4-NEXT: retq 1242; 1243; AVX1-LABEL: test41: 1244; AVX1: # BB#0: # %entry 1245; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1246; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1247; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 1248; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1249; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1250; AVX1-NEXT: retq 1251; 1252; AVX2-LABEL: test41: 1253; AVX2: # BB#0: # %entry 1254; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1255; AVX2-NEXT: retq 1256; 1257; AVX512F-LABEL: test41: 1258; AVX512F: # BB#0: # %entry 1259; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1260; AVX512F-NEXT: retq 1261entry: 1262 %cmp = icmp slt <8 x i32> %a, %b 1263 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1264 ret <8 x i32> %sel 1265} 1266 1267define <8 x i32> @test42(<8 x i32> %a, <8 x i32> %b) { 1268; SSE2-LABEL: test42: 1269; SSE2: # BB#0: # %entry 1270; SSE2-NEXT: movdqa %xmm1, %xmm6 1271; SSE2-NEXT: pcmpgtd %xmm3, %xmm6 1272; SSE2-NEXT: pcmpeqd %xmm7, %xmm7 1273; SSE2-NEXT: movdqa %xmm6, %xmm4 1274; SSE2-NEXT: pxor %xmm7, %xmm4 1275; SSE2-NEXT: movdqa %xmm0, %xmm5 1276; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 1277; SSE2-NEXT: pxor %xmm5, %xmm7 1278; SSE2-NEXT: pandn %xmm0, %xmm5 1279; SSE2-NEXT: pandn %xmm2, %xmm7 1280; SSE2-NEXT: por %xmm7, %xmm5 1281; SSE2-NEXT: pandn %xmm1, %xmm6 1282; SSE2-NEXT: pandn %xmm3, %xmm4 1283; SSE2-NEXT: por %xmm6, %xmm4 1284; SSE2-NEXT: movdqa %xmm5, %xmm0 1285; SSE2-NEXT: movdqa %xmm4, %xmm1 1286; SSE2-NEXT: retq 1287; 1288; SSE4-LABEL: test42: 1289; SSE4: # BB#0: # %entry 1290; SSE4-NEXT: pminsd %xmm2, %xmm0 1291; SSE4-NEXT: pminsd %xmm3, %xmm1 1292; SSE4-NEXT: retq 1293; 1294; AVX1-LABEL: test42: 1295; AVX1: # BB#0: # %entry 1296; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1297; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1298; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 1299; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 1300; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1301; AVX1-NEXT: retq 1302; 1303; AVX2-LABEL: test42: 1304; AVX2: # BB#0: # %entry 1305; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1306; AVX2-NEXT: retq 1307; 1308; AVX512F-LABEL: test42: 1309; AVX512F: # BB#0: # %entry 1310; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1311; AVX512F-NEXT: retq 1312entry: 1313 %cmp = icmp sle <8 x i32> %a, %b 1314 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1315 ret <8 x i32> %sel 1316} 1317 1318define <8 x i32> @test43(<8 x i32> %a, <8 x i32> %b) { 1319; SSE2-LABEL: test43: 1320; SSE2: # BB#0: # %entry 1321; SSE2-NEXT: movdqa %xmm1, %xmm4 1322; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 1323; SSE2-NEXT: movdqa %xmm0, %xmm5 1324; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 1325; SSE2-NEXT: pand %xmm5, %xmm0 1326; SSE2-NEXT: pandn %xmm2, %xmm5 1327; SSE2-NEXT: por %xmm0, %xmm5 1328; SSE2-NEXT: pand %xmm4, %xmm1 1329; SSE2-NEXT: pandn %xmm3, %xmm4 1330; SSE2-NEXT: por %xmm1, %xmm4 1331; SSE2-NEXT: movdqa %xmm5, %xmm0 1332; SSE2-NEXT: movdqa %xmm4, %xmm1 1333; SSE2-NEXT: retq 1334; 1335; SSE4-LABEL: test43: 1336; SSE4: # BB#0: # %entry 1337; SSE4-NEXT: pmaxsd %xmm2, %xmm0 1338; SSE4-NEXT: pmaxsd %xmm3, %xmm1 1339; SSE4-NEXT: retq 1340; 1341; AVX1-LABEL: test43: 1342; AVX1: # BB#0: # %entry 1343; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1344; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1345; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 1346; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1347; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1348; AVX1-NEXT: retq 1349; 1350; AVX2-LABEL: test43: 1351; AVX2: # BB#0: # %entry 1352; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1353; AVX2-NEXT: retq 1354; 1355; AVX512F-LABEL: test43: 1356; AVX512F: # BB#0: # %entry 1357; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1358; AVX512F-NEXT: retq 1359entry: 1360 %cmp = icmp sgt <8 x i32> %a, %b 1361 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1362 ret <8 x i32> %sel 1363} 1364 1365define <8 x i32> @test44(<8 x i32> %a, <8 x i32> %b) { 1366; SSE2-LABEL: test44: 1367; SSE2: # BB#0: # %entry 1368; SSE2-NEXT: movdqa %xmm3, %xmm6 1369; SSE2-NEXT: pcmpgtd %xmm1, %xmm6 1370; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 1371; SSE2-NEXT: movdqa %xmm6, %xmm5 1372; SSE2-NEXT: pxor %xmm4, %xmm5 1373; SSE2-NEXT: movdqa %xmm2, %xmm7 1374; SSE2-NEXT: pcmpgtd %xmm0, %xmm7 1375; SSE2-NEXT: pxor %xmm7, %xmm4 1376; SSE2-NEXT: pandn %xmm0, %xmm7 1377; SSE2-NEXT: pandn %xmm2, %xmm4 1378; SSE2-NEXT: por %xmm7, %xmm4 1379; SSE2-NEXT: pandn %xmm1, %xmm6 1380; SSE2-NEXT: pandn %xmm3, %xmm5 1381; SSE2-NEXT: por %xmm6, %xmm5 1382; SSE2-NEXT: movdqa %xmm4, %xmm0 1383; SSE2-NEXT: movdqa %xmm5, %xmm1 1384; SSE2-NEXT: retq 1385; 1386; SSE4-LABEL: test44: 1387; SSE4: # BB#0: # %entry 1388; SSE4-NEXT: pmaxsd %xmm2, %xmm0 1389; SSE4-NEXT: pmaxsd %xmm3, %xmm1 1390; SSE4-NEXT: retq 1391; 1392; AVX1-LABEL: test44: 1393; AVX1: # BB#0: # %entry 1394; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1395; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1396; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 1397; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 1398; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1399; AVX1-NEXT: retq 1400; 1401; AVX2-LABEL: test44: 1402; AVX2: # BB#0: # %entry 1403; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1404; AVX2-NEXT: retq 1405; 1406; AVX512F-LABEL: test44: 1407; AVX512F: # BB#0: # %entry 1408; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1409; AVX512F-NEXT: retq 1410entry: 1411 %cmp = icmp sge <8 x i32> %a, %b 1412 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1413 ret <8 x i32> %sel 1414} 1415 1416define <8 x i32> @test45(<8 x i32> %a, <8 x i32> %b) { 1417; SSE2-LABEL: test45: 1418; SSE2: # BB#0: # %entry 1419; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 1420; SSE2-NEXT: movdqa %xmm1, %xmm5 1421; SSE2-NEXT: pxor %xmm4, %xmm5 1422; SSE2-NEXT: movdqa %xmm3, %xmm6 1423; SSE2-NEXT: pxor %xmm4, %xmm6 1424; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 1425; SSE2-NEXT: movdqa %xmm0, %xmm5 1426; SSE2-NEXT: pxor %xmm4, %xmm5 1427; SSE2-NEXT: pxor %xmm2, %xmm4 1428; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 1429; SSE2-NEXT: pand %xmm4, %xmm0 1430; SSE2-NEXT: pandn %xmm2, %xmm4 1431; SSE2-NEXT: por %xmm4, %xmm0 1432; SSE2-NEXT: pand %xmm6, %xmm1 1433; SSE2-NEXT: pandn %xmm3, %xmm6 1434; SSE2-NEXT: por %xmm6, %xmm1 1435; SSE2-NEXT: retq 1436; 1437; SSE4-LABEL: test45: 1438; SSE4: # BB#0: # %entry 1439; SSE4-NEXT: pminud %xmm2, %xmm0 1440; SSE4-NEXT: pminud %xmm3, %xmm1 1441; SSE4-NEXT: retq 1442; 1443; AVX1-LABEL: test45: 1444; AVX1: # BB#0: # %entry 1445; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1446; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1447; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 1448; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 1449; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1450; AVX1-NEXT: retq 1451; 1452; AVX2-LABEL: test45: 1453; AVX2: # BB#0: # %entry 1454; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 1455; AVX2-NEXT: retq 1456; 1457; AVX512F-LABEL: test45: 1458; AVX512F: # BB#0: # %entry 1459; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0 1460; AVX512F-NEXT: retq 1461entry: 1462 %cmp = icmp ult <8 x i32> %a, %b 1463 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1464 ret <8 x i32> %sel 1465} 1466 1467define <8 x i32> @test46(<8 x i32> %a, <8 x i32> %b) { 1468; SSE2-LABEL: test46: 1469; SSE2: # BB#0: # %entry 1470; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648] 1471; SSE2-NEXT: movdqa %xmm3, %xmm4 1472; SSE2-NEXT: pxor %xmm6, %xmm4 1473; SSE2-NEXT: movdqa %xmm1, %xmm7 1474; SSE2-NEXT: pxor %xmm6, %xmm7 1475; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 1476; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 1477; SSE2-NEXT: movdqa %xmm7, %xmm5 1478; SSE2-NEXT: pxor %xmm4, %xmm5 1479; SSE2-NEXT: movdqa %xmm2, %xmm8 1480; SSE2-NEXT: pxor %xmm6, %xmm8 1481; SSE2-NEXT: pxor %xmm0, %xmm6 1482; SSE2-NEXT: pcmpgtd %xmm8, %xmm6 1483; SSE2-NEXT: pxor %xmm6, %xmm4 1484; SSE2-NEXT: pandn %xmm0, %xmm6 1485; SSE2-NEXT: pandn %xmm2, %xmm4 1486; SSE2-NEXT: por %xmm6, %xmm4 1487; SSE2-NEXT: pandn %xmm1, %xmm7 1488; SSE2-NEXT: pandn %xmm3, %xmm5 1489; SSE2-NEXT: por %xmm7, %xmm5 1490; SSE2-NEXT: movdqa %xmm4, %xmm0 1491; SSE2-NEXT: movdqa %xmm5, %xmm1 1492; SSE2-NEXT: retq 1493; 1494; SSE4-LABEL: test46: 1495; SSE4: # BB#0: # %entry 1496; SSE4-NEXT: pminud %xmm2, %xmm0 1497; SSE4-NEXT: pminud %xmm3, %xmm1 1498; SSE4-NEXT: retq 1499; 1500; AVX1-LABEL: test46: 1501; AVX1: # BB#0: # %entry 1502; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1503; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1504; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 1505; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 1506; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1507; AVX1-NEXT: retq 1508; 1509; AVX2-LABEL: test46: 1510; AVX2: # BB#0: # %entry 1511; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 1512; AVX2-NEXT: retq 1513; 1514; AVX512F-LABEL: test46: 1515; AVX512F: # BB#0: # %entry 1516; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0 1517; AVX512F-NEXT: retq 1518entry: 1519 %cmp = icmp ule <8 x i32> %a, %b 1520 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1521 ret <8 x i32> %sel 1522} 1523 1524define <8 x i32> @test47(<8 x i32> %a, <8 x i32> %b) { 1525; SSE2-LABEL: test47: 1526; SSE2: # BB#0: # %entry 1527; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 1528; SSE2-NEXT: movdqa %xmm3, %xmm6 1529; SSE2-NEXT: pxor %xmm5, %xmm6 1530; SSE2-NEXT: movdqa %xmm1, %xmm4 1531; SSE2-NEXT: pxor %xmm5, %xmm4 1532; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 1533; SSE2-NEXT: movdqa %xmm2, %xmm6 1534; SSE2-NEXT: pxor %xmm5, %xmm6 1535; SSE2-NEXT: pxor %xmm0, %xmm5 1536; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 1537; SSE2-NEXT: pand %xmm5, %xmm0 1538; SSE2-NEXT: pandn %xmm2, %xmm5 1539; SSE2-NEXT: por %xmm5, %xmm0 1540; SSE2-NEXT: pand %xmm4, %xmm1 1541; SSE2-NEXT: pandn %xmm3, %xmm4 1542; SSE2-NEXT: por %xmm1, %xmm4 1543; SSE2-NEXT: movdqa %xmm4, %xmm1 1544; SSE2-NEXT: retq 1545; 1546; SSE4-LABEL: test47: 1547; SSE4: # BB#0: # %entry 1548; SSE4-NEXT: pmaxud %xmm2, %xmm0 1549; SSE4-NEXT: pmaxud %xmm3, %xmm1 1550; SSE4-NEXT: retq 1551; 1552; AVX1-LABEL: test47: 1553; AVX1: # BB#0: # %entry 1554; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1555; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1556; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 1557; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 1558; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1559; AVX1-NEXT: retq 1560; 1561; AVX2-LABEL: test47: 1562; AVX2: # BB#0: # %entry 1563; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1564; AVX2-NEXT: retq 1565; 1566; AVX512F-LABEL: test47: 1567; AVX512F: # BB#0: # %entry 1568; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1569; AVX512F-NEXT: retq 1570entry: 1571 %cmp = icmp ugt <8 x i32> %a, %b 1572 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1573 ret <8 x i32> %sel 1574} 1575 1576define <8 x i32> @test48(<8 x i32> %a, <8 x i32> %b) { 1577; SSE2-LABEL: test48: 1578; SSE2: # BB#0: # %entry 1579; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648] 1580; SSE2-NEXT: movdqa %xmm1, %xmm4 1581; SSE2-NEXT: pxor %xmm6, %xmm4 1582; SSE2-NEXT: movdqa %xmm3, %xmm7 1583; SSE2-NEXT: pxor %xmm6, %xmm7 1584; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 1585; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 1586; SSE2-NEXT: movdqa %xmm7, %xmm5 1587; SSE2-NEXT: pxor %xmm4, %xmm5 1588; SSE2-NEXT: movdqa %xmm0, %xmm8 1589; SSE2-NEXT: pxor %xmm6, %xmm8 1590; SSE2-NEXT: pxor %xmm2, %xmm6 1591; SSE2-NEXT: pcmpgtd %xmm8, %xmm6 1592; SSE2-NEXT: pxor %xmm6, %xmm4 1593; SSE2-NEXT: pandn %xmm0, %xmm6 1594; SSE2-NEXT: pandn %xmm2, %xmm4 1595; SSE2-NEXT: por %xmm6, %xmm4 1596; SSE2-NEXT: pandn %xmm1, %xmm7 1597; SSE2-NEXT: pandn %xmm3, %xmm5 1598; SSE2-NEXT: por %xmm7, %xmm5 1599; SSE2-NEXT: movdqa %xmm4, %xmm0 1600; SSE2-NEXT: movdqa %xmm5, %xmm1 1601; SSE2-NEXT: retq 1602; 1603; SSE4-LABEL: test48: 1604; SSE4: # BB#0: # %entry 1605; SSE4-NEXT: pmaxud %xmm2, %xmm0 1606; SSE4-NEXT: pmaxud %xmm3, %xmm1 1607; SSE4-NEXT: retq 1608; 1609; AVX1-LABEL: test48: 1610; AVX1: # BB#0: # %entry 1611; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1612; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1613; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 1614; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 1615; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1616; AVX1-NEXT: retq 1617; 1618; AVX2-LABEL: test48: 1619; AVX2: # BB#0: # %entry 1620; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1621; AVX2-NEXT: retq 1622; 1623; AVX512F-LABEL: test48: 1624; AVX512F: # BB#0: # %entry 1625; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 1626; AVX512F-NEXT: retq 1627entry: 1628 %cmp = icmp uge <8 x i32> %a, %b 1629 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b 1630 ret <8 x i32> %sel 1631} 1632 1633define <16 x i8> @test49(<16 x i8> %a, <16 x i8> %b) { 1634; SSE2-LABEL: test49: 1635; SSE2: # BB#0: # %entry 1636; SSE2-NEXT: movdqa %xmm1, %xmm2 1637; SSE2-NEXT: pcmpgtb %xmm0, %xmm2 1638; SSE2-NEXT: pand %xmm2, %xmm1 1639; SSE2-NEXT: pandn %xmm0, %xmm2 1640; SSE2-NEXT: por %xmm1, %xmm2 1641; SSE2-NEXT: movdqa %xmm2, %xmm0 1642; SSE2-NEXT: retq 1643; 1644; SSE4-LABEL: test49: 1645; SSE4: # BB#0: # %entry 1646; SSE4-NEXT: pmaxsb %xmm1, %xmm0 1647; SSE4-NEXT: retq 1648; 1649; AVX-LABEL: test49: 1650; AVX: # BB#0: # %entry 1651; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 1652; AVX-NEXT: retq 1653entry: 1654 %cmp = icmp slt <16 x i8> %a, %b 1655 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1656 ret <16 x i8> %sel 1657} 1658 1659define <16 x i8> @test50(<16 x i8> %a, <16 x i8> %b) { 1660; SSE2-LABEL: test50: 1661; SSE2: # BB#0: # %entry 1662; SSE2-NEXT: movdqa %xmm0, %xmm2 1663; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 1664; SSE2-NEXT: pcmpeqd %xmm3, %xmm3 1665; SSE2-NEXT: pxor %xmm2, %xmm3 1666; SSE2-NEXT: pandn %xmm1, %xmm2 1667; SSE2-NEXT: pandn %xmm0, %xmm3 1668; SSE2-NEXT: por %xmm3, %xmm2 1669; SSE2-NEXT: movdqa %xmm2, %xmm0 1670; SSE2-NEXT: retq 1671; 1672; SSE4-LABEL: test50: 1673; SSE4: # BB#0: # %entry 1674; SSE4-NEXT: pmaxsb %xmm1, %xmm0 1675; SSE4-NEXT: retq 1676; 1677; AVX-LABEL: test50: 1678; AVX: # BB#0: # %entry 1679; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 1680; AVX-NEXT: retq 1681entry: 1682 %cmp = icmp sle <16 x i8> %a, %b 1683 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1684 ret <16 x i8> %sel 1685} 1686 1687define <16 x i8> @test51(<16 x i8> %a, <16 x i8> %b) { 1688; SSE2-LABEL: test51: 1689; SSE2: # BB#0: # %entry 1690; SSE2-NEXT: movdqa %xmm0, %xmm2 1691; SSE2-NEXT: pcmpgtb %xmm1, %xmm2 1692; SSE2-NEXT: pand %xmm2, %xmm1 1693; SSE2-NEXT: pandn %xmm0, %xmm2 1694; SSE2-NEXT: por %xmm1, %xmm2 1695; SSE2-NEXT: movdqa %xmm2, %xmm0 1696; SSE2-NEXT: retq 1697; 1698; SSE4-LABEL: test51: 1699; SSE4: # BB#0: # %entry 1700; SSE4-NEXT: pminsb %xmm1, %xmm0 1701; SSE4-NEXT: retq 1702; 1703; AVX-LABEL: test51: 1704; AVX: # BB#0: # %entry 1705; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0 1706; AVX-NEXT: retq 1707entry: 1708 %cmp = icmp sgt <16 x i8> %a, %b 1709 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1710 ret <16 x i8> %sel 1711} 1712 1713define <16 x i8> @test52(<16 x i8> %a, <16 x i8> %b) { 1714; SSE2-LABEL: test52: 1715; SSE2: # BB#0: # %entry 1716; SSE2-NEXT: movdqa %xmm1, %xmm3 1717; SSE2-NEXT: pcmpgtb %xmm0, %xmm3 1718; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 1719; SSE2-NEXT: pxor %xmm3, %xmm2 1720; SSE2-NEXT: pandn %xmm1, %xmm3 1721; SSE2-NEXT: pandn %xmm0, %xmm2 1722; SSE2-NEXT: por %xmm3, %xmm2 1723; SSE2-NEXT: movdqa %xmm2, %xmm0 1724; SSE2-NEXT: retq 1725; 1726; SSE4-LABEL: test52: 1727; SSE4: # BB#0: # %entry 1728; SSE4-NEXT: pminsb %xmm1, %xmm0 1729; SSE4-NEXT: retq 1730; 1731; AVX-LABEL: test52: 1732; AVX: # BB#0: # %entry 1733; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0 1734; AVX-NEXT: retq 1735entry: 1736 %cmp = icmp sge <16 x i8> %a, %b 1737 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1738 ret <16 x i8> %sel 1739} 1740 1741define <16 x i8> @test53(<16 x i8> %a, <16 x i8> %b) { 1742; SSE-LABEL: test53: 1743; SSE: # BB#0: # %entry 1744; SSE-NEXT: pmaxub %xmm1, %xmm0 1745; SSE-NEXT: retq 1746; 1747; AVX-LABEL: test53: 1748; AVX: # BB#0: # %entry 1749; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 1750; AVX-NEXT: retq 1751entry: 1752 %cmp = icmp ult <16 x i8> %a, %b 1753 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1754 ret <16 x i8> %sel 1755} 1756 1757define <16 x i8> @test54(<16 x i8> %a, <16 x i8> %b) { 1758; SSE-LABEL: test54: 1759; SSE: # BB#0: # %entry 1760; SSE-NEXT: pmaxub %xmm1, %xmm0 1761; SSE-NEXT: retq 1762; 1763; AVX-LABEL: test54: 1764; AVX: # BB#0: # %entry 1765; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 1766; AVX-NEXT: retq 1767entry: 1768 %cmp = icmp ule <16 x i8> %a, %b 1769 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1770 ret <16 x i8> %sel 1771} 1772 1773define <16 x i8> @test55(<16 x i8> %a, <16 x i8> %b) { 1774; SSE-LABEL: test55: 1775; SSE: # BB#0: # %entry 1776; SSE-NEXT: pminub %xmm1, %xmm0 1777; SSE-NEXT: retq 1778; 1779; AVX-LABEL: test55: 1780; AVX: # BB#0: # %entry 1781; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 1782; AVX-NEXT: retq 1783entry: 1784 %cmp = icmp ugt <16 x i8> %a, %b 1785 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1786 ret <16 x i8> %sel 1787} 1788 1789define <16 x i8> @test56(<16 x i8> %a, <16 x i8> %b) { 1790; SSE-LABEL: test56: 1791; SSE: # BB#0: # %entry 1792; SSE-NEXT: pminub %xmm1, %xmm0 1793; SSE-NEXT: retq 1794; 1795; AVX-LABEL: test56: 1796; AVX: # BB#0: # %entry 1797; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 1798; AVX-NEXT: retq 1799entry: 1800 %cmp = icmp uge <16 x i8> %a, %b 1801 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a 1802 ret <16 x i8> %sel 1803} 1804 1805define <8 x i16> @test57(<8 x i16> %a, <8 x i16> %b) { 1806; SSE-LABEL: test57: 1807; SSE: # BB#0: # %entry 1808; SSE-NEXT: pmaxsw %xmm1, %xmm0 1809; SSE-NEXT: retq 1810; 1811; AVX-LABEL: test57: 1812; AVX: # BB#0: # %entry 1813; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 1814; AVX-NEXT: retq 1815entry: 1816 %cmp = icmp slt <8 x i16> %a, %b 1817 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1818 ret <8 x i16> %sel 1819} 1820 1821define <8 x i16> @test58(<8 x i16> %a, <8 x i16> %b) { 1822; SSE-LABEL: test58: 1823; SSE: # BB#0: # %entry 1824; SSE-NEXT: pmaxsw %xmm1, %xmm0 1825; SSE-NEXT: retq 1826; 1827; AVX-LABEL: test58: 1828; AVX: # BB#0: # %entry 1829; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 1830; AVX-NEXT: retq 1831entry: 1832 %cmp = icmp sle <8 x i16> %a, %b 1833 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1834 ret <8 x i16> %sel 1835} 1836 1837define <8 x i16> @test59(<8 x i16> %a, <8 x i16> %b) { 1838; SSE-LABEL: test59: 1839; SSE: # BB#0: # %entry 1840; SSE-NEXT: pminsw %xmm1, %xmm0 1841; SSE-NEXT: retq 1842; 1843; AVX-LABEL: test59: 1844; AVX: # BB#0: # %entry 1845; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 1846; AVX-NEXT: retq 1847entry: 1848 %cmp = icmp sgt <8 x i16> %a, %b 1849 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1850 ret <8 x i16> %sel 1851} 1852 1853define <8 x i16> @test60(<8 x i16> %a, <8 x i16> %b) { 1854; SSE-LABEL: test60: 1855; SSE: # BB#0: # %entry 1856; SSE-NEXT: pminsw %xmm1, %xmm0 1857; SSE-NEXT: retq 1858; 1859; AVX-LABEL: test60: 1860; AVX: # BB#0: # %entry 1861; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0 1862; AVX-NEXT: retq 1863entry: 1864 %cmp = icmp sge <8 x i16> %a, %b 1865 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1866 ret <8 x i16> %sel 1867} 1868 1869define <8 x i16> @test61(<8 x i16> %a, <8 x i16> %b) { 1870; SSE2-LABEL: test61: 1871; SSE2: # BB#0: # %entry 1872; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 1873; SSE2-NEXT: movdqa %xmm0, %xmm3 1874; SSE2-NEXT: pxor %xmm2, %xmm3 1875; SSE2-NEXT: pxor %xmm1, %xmm2 1876; SSE2-NEXT: pcmpgtw %xmm3, %xmm2 1877; SSE2-NEXT: pand %xmm2, %xmm1 1878; SSE2-NEXT: pandn %xmm0, %xmm2 1879; SSE2-NEXT: por %xmm1, %xmm2 1880; SSE2-NEXT: movdqa %xmm2, %xmm0 1881; SSE2-NEXT: retq 1882; 1883; SSE4-LABEL: test61: 1884; SSE4: # BB#0: # %entry 1885; SSE4-NEXT: pmaxuw %xmm1, %xmm0 1886; SSE4-NEXT: retq 1887; 1888; AVX-LABEL: test61: 1889; AVX: # BB#0: # %entry 1890; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1891; AVX-NEXT: retq 1892entry: 1893 %cmp = icmp ult <8 x i16> %a, %b 1894 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1895 ret <8 x i16> %sel 1896} 1897 1898define <8 x i16> @test62(<8 x i16> %a, <8 x i16> %b) { 1899; SSE2-LABEL: test62: 1900; SSE2: # BB#0: # %entry 1901; SSE2-NEXT: movdqa %xmm0, %xmm3 1902; SSE2-NEXT: psubusw %xmm1, %xmm3 1903; SSE2-NEXT: pxor %xmm2, %xmm2 1904; SSE2-NEXT: pcmpeqw %xmm3, %xmm2 1905; SSE2-NEXT: pand %xmm2, %xmm1 1906; SSE2-NEXT: pandn %xmm0, %xmm2 1907; SSE2-NEXT: por %xmm1, %xmm2 1908; SSE2-NEXT: movdqa %xmm2, %xmm0 1909; SSE2-NEXT: retq 1910; 1911; SSE4-LABEL: test62: 1912; SSE4: # BB#0: # %entry 1913; SSE4-NEXT: pmaxuw %xmm1, %xmm0 1914; SSE4-NEXT: retq 1915; 1916; AVX-LABEL: test62: 1917; AVX: # BB#0: # %entry 1918; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 1919; AVX-NEXT: retq 1920entry: 1921 %cmp = icmp ule <8 x i16> %a, %b 1922 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1923 ret <8 x i16> %sel 1924} 1925 1926define <8 x i16> @test63(<8 x i16> %a, <8 x i16> %b) { 1927; SSE2-LABEL: test63: 1928; SSE2: # BB#0: # %entry 1929; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 1930; SSE2-NEXT: movdqa %xmm1, %xmm3 1931; SSE2-NEXT: pxor %xmm2, %xmm3 1932; SSE2-NEXT: pxor %xmm0, %xmm2 1933; SSE2-NEXT: pcmpgtw %xmm3, %xmm2 1934; SSE2-NEXT: pand %xmm2, %xmm1 1935; SSE2-NEXT: pandn %xmm0, %xmm2 1936; SSE2-NEXT: por %xmm1, %xmm2 1937; SSE2-NEXT: movdqa %xmm2, %xmm0 1938; SSE2-NEXT: retq 1939; 1940; SSE4-LABEL: test63: 1941; SSE4: # BB#0: # %entry 1942; SSE4-NEXT: pminuw %xmm1, %xmm0 1943; SSE4-NEXT: retq 1944; 1945; AVX-LABEL: test63: 1946; AVX: # BB#0: # %entry 1947; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1948; AVX-NEXT: retq 1949entry: 1950 %cmp = icmp ugt <8 x i16> %a, %b 1951 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1952 ret <8 x i16> %sel 1953} 1954 1955define <8 x i16> @test64(<8 x i16> %a, <8 x i16> %b) { 1956; SSE2-LABEL: test64: 1957; SSE2: # BB#0: # %entry 1958; SSE2-NEXT: movdqa %xmm1, %xmm3 1959; SSE2-NEXT: psubusw %xmm0, %xmm3 1960; SSE2-NEXT: pxor %xmm2, %xmm2 1961; SSE2-NEXT: pcmpeqw %xmm3, %xmm2 1962; SSE2-NEXT: pand %xmm2, %xmm1 1963; SSE2-NEXT: pandn %xmm0, %xmm2 1964; SSE2-NEXT: por %xmm1, %xmm2 1965; SSE2-NEXT: movdqa %xmm2, %xmm0 1966; SSE2-NEXT: retq 1967; 1968; SSE4-LABEL: test64: 1969; SSE4: # BB#0: # %entry 1970; SSE4-NEXT: pminuw %xmm1, %xmm0 1971; SSE4-NEXT: retq 1972; 1973; AVX-LABEL: test64: 1974; AVX: # BB#0: # %entry 1975; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1976; AVX-NEXT: retq 1977entry: 1978 %cmp = icmp uge <8 x i16> %a, %b 1979 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a 1980 ret <8 x i16> %sel 1981} 1982 1983define <4 x i32> @test65(<4 x i32> %a, <4 x i32> %b) { 1984; SSE2-LABEL: test65: 1985; SSE2: # BB#0: # %entry 1986; SSE2-NEXT: movdqa %xmm1, %xmm2 1987; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 1988; SSE2-NEXT: pand %xmm2, %xmm1 1989; SSE2-NEXT: pandn %xmm0, %xmm2 1990; SSE2-NEXT: por %xmm1, %xmm2 1991; SSE2-NEXT: movdqa %xmm2, %xmm0 1992; SSE2-NEXT: retq 1993; 1994; SSE4-LABEL: test65: 1995; SSE4: # BB#0: # %entry 1996; SSE4-NEXT: pmaxsd %xmm1, %xmm0 1997; SSE4-NEXT: retq 1998; 1999; AVX-LABEL: test65: 2000; AVX: # BB#0: # %entry 2001; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2002; AVX-NEXT: retq 2003entry: 2004 %cmp = icmp slt <4 x i32> %a, %b 2005 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2006 ret <4 x i32> %sel 2007} 2008 2009define <4 x i32> @test66(<4 x i32> %a, <4 x i32> %b) { 2010; SSE2-LABEL: test66: 2011; SSE2: # BB#0: # %entry 2012; SSE2-NEXT: movdqa %xmm0, %xmm2 2013; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 2014; SSE2-NEXT: pcmpeqd %xmm3, %xmm3 2015; SSE2-NEXT: pxor %xmm2, %xmm3 2016; SSE2-NEXT: pandn %xmm1, %xmm2 2017; SSE2-NEXT: pandn %xmm0, %xmm3 2018; SSE2-NEXT: por %xmm3, %xmm2 2019; SSE2-NEXT: movdqa %xmm2, %xmm0 2020; SSE2-NEXT: retq 2021; 2022; SSE4-LABEL: test66: 2023; SSE4: # BB#0: # %entry 2024; SSE4-NEXT: pmaxsd %xmm1, %xmm0 2025; SSE4-NEXT: retq 2026; 2027; AVX-LABEL: test66: 2028; AVX: # BB#0: # %entry 2029; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2030; AVX-NEXT: retq 2031entry: 2032 %cmp = icmp sle <4 x i32> %a, %b 2033 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2034 ret <4 x i32> %sel 2035} 2036 2037define <4 x i32> @test67(<4 x i32> %a, <4 x i32> %b) { 2038; SSE2-LABEL: test67: 2039; SSE2: # BB#0: # %entry 2040; SSE2-NEXT: movdqa %xmm0, %xmm2 2041; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 2042; SSE2-NEXT: pand %xmm2, %xmm1 2043; SSE2-NEXT: pandn %xmm0, %xmm2 2044; SSE2-NEXT: por %xmm1, %xmm2 2045; SSE2-NEXT: movdqa %xmm2, %xmm0 2046; SSE2-NEXT: retq 2047; 2048; SSE4-LABEL: test67: 2049; SSE4: # BB#0: # %entry 2050; SSE4-NEXT: pminsd %xmm1, %xmm0 2051; SSE4-NEXT: retq 2052; 2053; AVX-LABEL: test67: 2054; AVX: # BB#0: # %entry 2055; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 2056; AVX-NEXT: retq 2057entry: 2058 %cmp = icmp sgt <4 x i32> %a, %b 2059 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2060 ret <4 x i32> %sel 2061} 2062 2063define <4 x i32> @test68(<4 x i32> %a, <4 x i32> %b) { 2064; SSE2-LABEL: test68: 2065; SSE2: # BB#0: # %entry 2066; SSE2-NEXT: movdqa %xmm1, %xmm3 2067; SSE2-NEXT: pcmpgtd %xmm0, %xmm3 2068; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 2069; SSE2-NEXT: pxor %xmm3, %xmm2 2070; SSE2-NEXT: pandn %xmm1, %xmm3 2071; SSE2-NEXT: pandn %xmm0, %xmm2 2072; SSE2-NEXT: por %xmm3, %xmm2 2073; SSE2-NEXT: movdqa %xmm2, %xmm0 2074; SSE2-NEXT: retq 2075; 2076; SSE4-LABEL: test68: 2077; SSE4: # BB#0: # %entry 2078; SSE4-NEXT: pminsd %xmm1, %xmm0 2079; SSE4-NEXT: retq 2080; 2081; AVX-LABEL: test68: 2082; AVX: # BB#0: # %entry 2083; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0 2084; AVX-NEXT: retq 2085entry: 2086 %cmp = icmp sge <4 x i32> %a, %b 2087 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2088 ret <4 x i32> %sel 2089} 2090 2091define <4 x i32> @test69(<4 x i32> %a, <4 x i32> %b) { 2092; SSE2-LABEL: test69: 2093; SSE2: # BB#0: # %entry 2094; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 2095; SSE2-NEXT: movdqa %xmm0, %xmm3 2096; SSE2-NEXT: pxor %xmm2, %xmm3 2097; SSE2-NEXT: pxor %xmm1, %xmm2 2098; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2099; SSE2-NEXT: pand %xmm2, %xmm1 2100; SSE2-NEXT: pandn %xmm0, %xmm2 2101; SSE2-NEXT: por %xmm1, %xmm2 2102; SSE2-NEXT: movdqa %xmm2, %xmm0 2103; SSE2-NEXT: retq 2104; 2105; SSE4-LABEL: test69: 2106; SSE4: # BB#0: # %entry 2107; SSE4-NEXT: pmaxud %xmm1, %xmm0 2108; SSE4-NEXT: retq 2109; 2110; AVX-LABEL: test69: 2111; AVX: # BB#0: # %entry 2112; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 2113; AVX-NEXT: retq 2114entry: 2115 %cmp = icmp ult <4 x i32> %a, %b 2116 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2117 ret <4 x i32> %sel 2118} 2119 2120define <4 x i32> @test70(<4 x i32> %a, <4 x i32> %b) { 2121; SSE2-LABEL: test70: 2122; SSE2: # BB#0: # %entry 2123; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648] 2124; SSE2-NEXT: movdqa %xmm1, %xmm2 2125; SSE2-NEXT: pxor %xmm3, %xmm2 2126; SSE2-NEXT: pxor %xmm0, %xmm3 2127; SSE2-NEXT: pcmpgtd %xmm2, %xmm3 2128; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 2129; SSE2-NEXT: pxor %xmm3, %xmm2 2130; SSE2-NEXT: pandn %xmm1, %xmm3 2131; SSE2-NEXT: pandn %xmm0, %xmm2 2132; SSE2-NEXT: por %xmm3, %xmm2 2133; SSE2-NEXT: movdqa %xmm2, %xmm0 2134; SSE2-NEXT: retq 2135; 2136; SSE4-LABEL: test70: 2137; SSE4: # BB#0: # %entry 2138; SSE4-NEXT: pmaxud %xmm1, %xmm0 2139; SSE4-NEXT: retq 2140; 2141; AVX-LABEL: test70: 2142; AVX: # BB#0: # %entry 2143; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 2144; AVX-NEXT: retq 2145entry: 2146 %cmp = icmp ule <4 x i32> %a, %b 2147 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2148 ret <4 x i32> %sel 2149} 2150 2151define <4 x i32> @test71(<4 x i32> %a, <4 x i32> %b) { 2152; SSE2-LABEL: test71: 2153; SSE2: # BB#0: # %entry 2154; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 2155; SSE2-NEXT: movdqa %xmm1, %xmm3 2156; SSE2-NEXT: pxor %xmm2, %xmm3 2157; SSE2-NEXT: pxor %xmm0, %xmm2 2158; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 2159; SSE2-NEXT: pand %xmm2, %xmm1 2160; SSE2-NEXT: pandn %xmm0, %xmm2 2161; SSE2-NEXT: por %xmm1, %xmm2 2162; SSE2-NEXT: movdqa %xmm2, %xmm0 2163; SSE2-NEXT: retq 2164; 2165; SSE4-LABEL: test71: 2166; SSE4: # BB#0: # %entry 2167; SSE4-NEXT: pminud %xmm1, %xmm0 2168; SSE4-NEXT: retq 2169; 2170; AVX-LABEL: test71: 2171; AVX: # BB#0: # %entry 2172; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 2173; AVX-NEXT: retq 2174entry: 2175 %cmp = icmp ugt <4 x i32> %a, %b 2176 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2177 ret <4 x i32> %sel 2178} 2179 2180define <4 x i32> @test72(<4 x i32> %a, <4 x i32> %b) { 2181; SSE2-LABEL: test72: 2182; SSE2: # BB#0: # %entry 2183; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648] 2184; SSE2-NEXT: movdqa %xmm0, %xmm2 2185; SSE2-NEXT: pxor %xmm3, %xmm2 2186; SSE2-NEXT: pxor %xmm1, %xmm3 2187; SSE2-NEXT: pcmpgtd %xmm2, %xmm3 2188; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 2189; SSE2-NEXT: pxor %xmm3, %xmm2 2190; SSE2-NEXT: pandn %xmm1, %xmm3 2191; SSE2-NEXT: pandn %xmm0, %xmm2 2192; SSE2-NEXT: por %xmm3, %xmm2 2193; SSE2-NEXT: movdqa %xmm2, %xmm0 2194; SSE2-NEXT: retq 2195; 2196; SSE4-LABEL: test72: 2197; SSE4: # BB#0: # %entry 2198; SSE4-NEXT: pminud %xmm1, %xmm0 2199; SSE4-NEXT: retq 2200; 2201; AVX-LABEL: test72: 2202; AVX: # BB#0: # %entry 2203; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 2204; AVX-NEXT: retq 2205entry: 2206 %cmp = icmp uge <4 x i32> %a, %b 2207 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a 2208 ret <4 x i32> %sel 2209} 2210 2211define <32 x i8> @test73(<32 x i8> %a, <32 x i8> %b) { 2212; SSE2-LABEL: test73: 2213; SSE2: # BB#0: # %entry 2214; SSE2-NEXT: movdqa %xmm3, %xmm4 2215; SSE2-NEXT: pcmpgtb %xmm1, %xmm4 2216; SSE2-NEXT: movdqa %xmm2, %xmm5 2217; SSE2-NEXT: pcmpgtb %xmm0, %xmm5 2218; SSE2-NEXT: pand %xmm5, %xmm2 2219; SSE2-NEXT: pandn %xmm0, %xmm5 2220; SSE2-NEXT: por %xmm2, %xmm5 2221; SSE2-NEXT: pand %xmm4, %xmm3 2222; SSE2-NEXT: pandn %xmm1, %xmm4 2223; SSE2-NEXT: por %xmm3, %xmm4 2224; SSE2-NEXT: movdqa %xmm5, %xmm0 2225; SSE2-NEXT: movdqa %xmm4, %xmm1 2226; SSE2-NEXT: retq 2227; 2228; SSE4-LABEL: test73: 2229; SSE4: # BB#0: # %entry 2230; SSE4-NEXT: pmaxsb %xmm2, %xmm0 2231; SSE4-NEXT: pmaxsb %xmm3, %xmm1 2232; SSE4-NEXT: retq 2233; 2234; AVX1-LABEL: test73: 2235; AVX1: # BB#0: # %entry 2236; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2237; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2238; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 2239; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 2240; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2241; AVX1-NEXT: retq 2242; 2243; AVX2-LABEL: test73: 2244; AVX2: # BB#0: # %entry 2245; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2246; AVX2-NEXT: retq 2247; 2248; AVX512F-LABEL: test73: 2249; AVX512F: # BB#0: # %entry 2250; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2251; AVX512F-NEXT: retq 2252entry: 2253 %cmp = icmp slt <32 x i8> %a, %b 2254 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2255 ret <32 x i8> %sel 2256} 2257 2258define <32 x i8> @test74(<32 x i8> %a, <32 x i8> %b) { 2259; SSE2-LABEL: test74: 2260; SSE2: # BB#0: # %entry 2261; SSE2-NEXT: movdqa %xmm1, %xmm6 2262; SSE2-NEXT: pcmpgtb %xmm3, %xmm6 2263; SSE2-NEXT: pcmpeqd %xmm7, %xmm7 2264; SSE2-NEXT: movdqa %xmm6, %xmm4 2265; SSE2-NEXT: pxor %xmm7, %xmm4 2266; SSE2-NEXT: movdqa %xmm0, %xmm5 2267; SSE2-NEXT: pcmpgtb %xmm2, %xmm5 2268; SSE2-NEXT: pxor %xmm5, %xmm7 2269; SSE2-NEXT: pandn %xmm2, %xmm5 2270; SSE2-NEXT: pandn %xmm0, %xmm7 2271; SSE2-NEXT: por %xmm7, %xmm5 2272; SSE2-NEXT: pandn %xmm3, %xmm6 2273; SSE2-NEXT: pandn %xmm1, %xmm4 2274; SSE2-NEXT: por %xmm6, %xmm4 2275; SSE2-NEXT: movdqa %xmm5, %xmm0 2276; SSE2-NEXT: movdqa %xmm4, %xmm1 2277; SSE2-NEXT: retq 2278; 2279; SSE4-LABEL: test74: 2280; SSE4: # BB#0: # %entry 2281; SSE4-NEXT: pmaxsb %xmm2, %xmm0 2282; SSE4-NEXT: pmaxsb %xmm3, %xmm1 2283; SSE4-NEXT: retq 2284; 2285; AVX1-LABEL: test74: 2286; AVX1: # BB#0: # %entry 2287; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2288; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2289; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 2290; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 2291; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2292; AVX1-NEXT: retq 2293; 2294; AVX2-LABEL: test74: 2295; AVX2: # BB#0: # %entry 2296; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2297; AVX2-NEXT: retq 2298; 2299; AVX512F-LABEL: test74: 2300; AVX512F: # BB#0: # %entry 2301; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 2302; AVX512F-NEXT: retq 2303entry: 2304 %cmp = icmp sle <32 x i8> %a, %b 2305 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2306 ret <32 x i8> %sel 2307} 2308 2309define <32 x i8> @test75(<32 x i8> %a, <32 x i8> %b) { 2310; SSE2-LABEL: test75: 2311; SSE2: # BB#0: # %entry 2312; SSE2-NEXT: movdqa %xmm1, %xmm4 2313; SSE2-NEXT: pcmpgtb %xmm3, %xmm4 2314; SSE2-NEXT: movdqa %xmm0, %xmm5 2315; SSE2-NEXT: pcmpgtb %xmm2, %xmm5 2316; SSE2-NEXT: pand %xmm5, %xmm2 2317; SSE2-NEXT: pandn %xmm0, %xmm5 2318; SSE2-NEXT: por %xmm2, %xmm5 2319; SSE2-NEXT: pand %xmm4, %xmm3 2320; SSE2-NEXT: pandn %xmm1, %xmm4 2321; SSE2-NEXT: por %xmm3, %xmm4 2322; SSE2-NEXT: movdqa %xmm5, %xmm0 2323; SSE2-NEXT: movdqa %xmm4, %xmm1 2324; SSE2-NEXT: retq 2325; 2326; SSE4-LABEL: test75: 2327; SSE4: # BB#0: # %entry 2328; SSE4-NEXT: pminsb %xmm2, %xmm0 2329; SSE4-NEXT: pminsb %xmm3, %xmm1 2330; SSE4-NEXT: retq 2331; 2332; AVX1-LABEL: test75: 2333; AVX1: # BB#0: # %entry 2334; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2335; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2336; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 2337; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 2338; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2339; AVX1-NEXT: retq 2340; 2341; AVX2-LABEL: test75: 2342; AVX2: # BB#0: # %entry 2343; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2344; AVX2-NEXT: retq 2345; 2346; AVX512F-LABEL: test75: 2347; AVX512F: # BB#0: # %entry 2348; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2349; AVX512F-NEXT: retq 2350entry: 2351 %cmp = icmp sgt <32 x i8> %a, %b 2352 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2353 ret <32 x i8> %sel 2354} 2355 2356define <32 x i8> @test76(<32 x i8> %a, <32 x i8> %b) { 2357; SSE2-LABEL: test76: 2358; SSE2: # BB#0: # %entry 2359; SSE2-NEXT: movdqa %xmm3, %xmm6 2360; SSE2-NEXT: pcmpgtb %xmm1, %xmm6 2361; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 2362; SSE2-NEXT: movdqa %xmm6, %xmm5 2363; SSE2-NEXT: pxor %xmm4, %xmm5 2364; SSE2-NEXT: movdqa %xmm2, %xmm7 2365; SSE2-NEXT: pcmpgtb %xmm0, %xmm7 2366; SSE2-NEXT: pxor %xmm7, %xmm4 2367; SSE2-NEXT: pandn %xmm2, %xmm7 2368; SSE2-NEXT: pandn %xmm0, %xmm4 2369; SSE2-NEXT: por %xmm7, %xmm4 2370; SSE2-NEXT: pandn %xmm3, %xmm6 2371; SSE2-NEXT: pandn %xmm1, %xmm5 2372; SSE2-NEXT: por %xmm6, %xmm5 2373; SSE2-NEXT: movdqa %xmm4, %xmm0 2374; SSE2-NEXT: movdqa %xmm5, %xmm1 2375; SSE2-NEXT: retq 2376; 2377; SSE4-LABEL: test76: 2378; SSE4: # BB#0: # %entry 2379; SSE4-NEXT: pminsb %xmm2, %xmm0 2380; SSE4-NEXT: pminsb %xmm3, %xmm1 2381; SSE4-NEXT: retq 2382; 2383; AVX1-LABEL: test76: 2384; AVX1: # BB#0: # %entry 2385; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2386; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2387; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2 2388; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0 2389; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2390; AVX1-NEXT: retq 2391; 2392; AVX2-LABEL: test76: 2393; AVX2: # BB#0: # %entry 2394; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2395; AVX2-NEXT: retq 2396; 2397; AVX512F-LABEL: test76: 2398; AVX512F: # BB#0: # %entry 2399; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0 2400; AVX512F-NEXT: retq 2401entry: 2402 %cmp = icmp sge <32 x i8> %a, %b 2403 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2404 ret <32 x i8> %sel 2405} 2406 2407define <32 x i8> @test77(<32 x i8> %a, <32 x i8> %b) { 2408; SSE-LABEL: test77: 2409; SSE: # BB#0: # %entry 2410; SSE-NEXT: pmaxub %xmm2, %xmm0 2411; SSE-NEXT: pmaxub %xmm3, %xmm1 2412; SSE-NEXT: retq 2413; 2414; AVX1-LABEL: test77: 2415; AVX1: # BB#0: # %entry 2416; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2417; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2418; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 2419; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 2420; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2421; AVX1-NEXT: retq 2422; 2423; AVX2-LABEL: test77: 2424; AVX2: # BB#0: # %entry 2425; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2426; AVX2-NEXT: retq 2427; 2428; AVX512F-LABEL: test77: 2429; AVX512F: # BB#0: # %entry 2430; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2431; AVX512F-NEXT: retq 2432entry: 2433 %cmp = icmp ult <32 x i8> %a, %b 2434 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2435 ret <32 x i8> %sel 2436} 2437 2438define <32 x i8> @test78(<32 x i8> %a, <32 x i8> %b) { 2439; SSE-LABEL: test78: 2440; SSE: # BB#0: # %entry 2441; SSE-NEXT: pmaxub %xmm2, %xmm0 2442; SSE-NEXT: pmaxub %xmm3, %xmm1 2443; SSE-NEXT: retq 2444; 2445; AVX1-LABEL: test78: 2446; AVX1: # BB#0: # %entry 2447; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2448; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2449; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 2450; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 2451; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2452; AVX1-NEXT: retq 2453; 2454; AVX2-LABEL: test78: 2455; AVX2: # BB#0: # %entry 2456; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2457; AVX2-NEXT: retq 2458; 2459; AVX512F-LABEL: test78: 2460; AVX512F: # BB#0: # %entry 2461; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 2462; AVX512F-NEXT: retq 2463entry: 2464 %cmp = icmp ule <32 x i8> %a, %b 2465 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2466 ret <32 x i8> %sel 2467} 2468 2469define <32 x i8> @test79(<32 x i8> %a, <32 x i8> %b) { 2470; SSE-LABEL: test79: 2471; SSE: # BB#0: # %entry 2472; SSE-NEXT: pminub %xmm2, %xmm0 2473; SSE-NEXT: pminub %xmm3, %xmm1 2474; SSE-NEXT: retq 2475; 2476; AVX1-LABEL: test79: 2477; AVX1: # BB#0: # %entry 2478; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2479; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2480; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 2481; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 2482; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2483; AVX1-NEXT: retq 2484; 2485; AVX2-LABEL: test79: 2486; AVX2: # BB#0: # %entry 2487; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 2488; AVX2-NEXT: retq 2489; 2490; AVX512F-LABEL: test79: 2491; AVX512F: # BB#0: # %entry 2492; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 2493; AVX512F-NEXT: retq 2494entry: 2495 %cmp = icmp ugt <32 x i8> %a, %b 2496 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2497 ret <32 x i8> %sel 2498} 2499 2500define <32 x i8> @test80(<32 x i8> %a, <32 x i8> %b) { 2501; SSE-LABEL: test80: 2502; SSE: # BB#0: # %entry 2503; SSE-NEXT: pminub %xmm2, %xmm0 2504; SSE-NEXT: pminub %xmm3, %xmm1 2505; SSE-NEXT: retq 2506; 2507; AVX1-LABEL: test80: 2508; AVX1: # BB#0: # %entry 2509; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2510; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2511; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 2512; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 2513; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2514; AVX1-NEXT: retq 2515; 2516; AVX2-LABEL: test80: 2517; AVX2: # BB#0: # %entry 2518; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 2519; AVX2-NEXT: retq 2520; 2521; AVX512F-LABEL: test80: 2522; AVX512F: # BB#0: # %entry 2523; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0 2524; AVX512F-NEXT: retq 2525entry: 2526 %cmp = icmp uge <32 x i8> %a, %b 2527 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a 2528 ret <32 x i8> %sel 2529} 2530 2531define <16 x i16> @test81(<16 x i16> %a, <16 x i16> %b) { 2532; SSE-LABEL: test81: 2533; SSE: # BB#0: # %entry 2534; SSE-NEXT: pmaxsw %xmm2, %xmm0 2535; SSE-NEXT: pmaxsw %xmm3, %xmm1 2536; SSE-NEXT: retq 2537; 2538; AVX1-LABEL: test81: 2539; AVX1: # BB#0: # %entry 2540; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2541; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2542; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 2543; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 2544; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2545; AVX1-NEXT: retq 2546; 2547; AVX2-LABEL: test81: 2548; AVX2: # BB#0: # %entry 2549; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2550; AVX2-NEXT: retq 2551; 2552; AVX512F-LABEL: test81: 2553; AVX512F: # BB#0: # %entry 2554; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2555; AVX512F-NEXT: retq 2556entry: 2557 %cmp = icmp slt <16 x i16> %a, %b 2558 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2559 ret <16 x i16> %sel 2560} 2561 2562define <16 x i16> @test82(<16 x i16> %a, <16 x i16> %b) { 2563; SSE-LABEL: test82: 2564; SSE: # BB#0: # %entry 2565; SSE-NEXT: pmaxsw %xmm2, %xmm0 2566; SSE-NEXT: pmaxsw %xmm3, %xmm1 2567; SSE-NEXT: retq 2568; 2569; AVX1-LABEL: test82: 2570; AVX1: # BB#0: # %entry 2571; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2572; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2573; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 2574; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 2575; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2576; AVX1-NEXT: retq 2577; 2578; AVX2-LABEL: test82: 2579; AVX2: # BB#0: # %entry 2580; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2581; AVX2-NEXT: retq 2582; 2583; AVX512F-LABEL: test82: 2584; AVX512F: # BB#0: # %entry 2585; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 2586; AVX512F-NEXT: retq 2587entry: 2588 %cmp = icmp sle <16 x i16> %a, %b 2589 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2590 ret <16 x i16> %sel 2591} 2592 2593define <16 x i16> @test83(<16 x i16> %a, <16 x i16> %b) { 2594; SSE-LABEL: test83: 2595; SSE: # BB#0: # %entry 2596; SSE-NEXT: pminsw %xmm2, %xmm0 2597; SSE-NEXT: pminsw %xmm3, %xmm1 2598; SSE-NEXT: retq 2599; 2600; AVX1-LABEL: test83: 2601; AVX1: # BB#0: # %entry 2602; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2603; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2604; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 2605; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 2606; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2607; AVX1-NEXT: retq 2608; 2609; AVX2-LABEL: test83: 2610; AVX2: # BB#0: # %entry 2611; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2612; AVX2-NEXT: retq 2613; 2614; AVX512F-LABEL: test83: 2615; AVX512F: # BB#0: # %entry 2616; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2617; AVX512F-NEXT: retq 2618entry: 2619 %cmp = icmp sgt <16 x i16> %a, %b 2620 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2621 ret <16 x i16> %sel 2622} 2623 2624define <16 x i16> @test84(<16 x i16> %a, <16 x i16> %b) { 2625; SSE-LABEL: test84: 2626; SSE: # BB#0: # %entry 2627; SSE-NEXT: pminsw %xmm2, %xmm0 2628; SSE-NEXT: pminsw %xmm3, %xmm1 2629; SSE-NEXT: retq 2630; 2631; AVX1-LABEL: test84: 2632; AVX1: # BB#0: # %entry 2633; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2634; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2635; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2 2636; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0 2637; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2638; AVX1-NEXT: retq 2639; 2640; AVX2-LABEL: test84: 2641; AVX2: # BB#0: # %entry 2642; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2643; AVX2-NEXT: retq 2644; 2645; AVX512F-LABEL: test84: 2646; AVX512F: # BB#0: # %entry 2647; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0 2648; AVX512F-NEXT: retq 2649entry: 2650 %cmp = icmp sge <16 x i16> %a, %b 2651 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2652 ret <16 x i16> %sel 2653} 2654 2655define <16 x i16> @test85(<16 x i16> %a, <16 x i16> %b) { 2656; SSE2-LABEL: test85: 2657; SSE2: # BB#0: # %entry 2658; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 2659; SSE2-NEXT: movdqa %xmm1, %xmm6 2660; SSE2-NEXT: pxor %xmm4, %xmm6 2661; SSE2-NEXT: movdqa %xmm3, %xmm5 2662; SSE2-NEXT: pxor %xmm4, %xmm5 2663; SSE2-NEXT: pcmpgtw %xmm6, %xmm5 2664; SSE2-NEXT: movdqa %xmm0, %xmm6 2665; SSE2-NEXT: pxor %xmm4, %xmm6 2666; SSE2-NEXT: pxor %xmm2, %xmm4 2667; SSE2-NEXT: pcmpgtw %xmm6, %xmm4 2668; SSE2-NEXT: pand %xmm4, %xmm2 2669; SSE2-NEXT: pandn %xmm0, %xmm4 2670; SSE2-NEXT: por %xmm2, %xmm4 2671; SSE2-NEXT: pand %xmm5, %xmm3 2672; SSE2-NEXT: pandn %xmm1, %xmm5 2673; SSE2-NEXT: por %xmm3, %xmm5 2674; SSE2-NEXT: movdqa %xmm4, %xmm0 2675; SSE2-NEXT: movdqa %xmm5, %xmm1 2676; SSE2-NEXT: retq 2677; 2678; SSE4-LABEL: test85: 2679; SSE4: # BB#0: # %entry 2680; SSE4-NEXT: pmaxuw %xmm2, %xmm0 2681; SSE4-NEXT: pmaxuw %xmm3, %xmm1 2682; SSE4-NEXT: retq 2683; 2684; AVX1-LABEL: test85: 2685; AVX1: # BB#0: # %entry 2686; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2687; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2688; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 2689; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 2690; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2691; AVX1-NEXT: retq 2692; 2693; AVX2-LABEL: test85: 2694; AVX2: # BB#0: # %entry 2695; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2696; AVX2-NEXT: retq 2697; 2698; AVX512F-LABEL: test85: 2699; AVX512F: # BB#0: # %entry 2700; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2701; AVX512F-NEXT: retq 2702entry: 2703 %cmp = icmp ult <16 x i16> %a, %b 2704 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2705 ret <16 x i16> %sel 2706} 2707 2708define <16 x i16> @test86(<16 x i16> %a, <16 x i16> %b) { 2709; SSE2-LABEL: test86: 2710; SSE2: # BB#0: # %entry 2711; SSE2-NEXT: movdqa %xmm1, %xmm4 2712; SSE2-NEXT: psubusw %xmm3, %xmm4 2713; SSE2-NEXT: pxor %xmm6, %xmm6 2714; SSE2-NEXT: pcmpeqw %xmm6, %xmm4 2715; SSE2-NEXT: movdqa %xmm0, %xmm5 2716; SSE2-NEXT: psubusw %xmm2, %xmm5 2717; SSE2-NEXT: pcmpeqw %xmm6, %xmm5 2718; SSE2-NEXT: pand %xmm5, %xmm2 2719; SSE2-NEXT: pandn %xmm0, %xmm5 2720; SSE2-NEXT: por %xmm2, %xmm5 2721; SSE2-NEXT: pand %xmm4, %xmm3 2722; SSE2-NEXT: pandn %xmm1, %xmm4 2723; SSE2-NEXT: por %xmm3, %xmm4 2724; SSE2-NEXT: movdqa %xmm5, %xmm0 2725; SSE2-NEXT: movdqa %xmm4, %xmm1 2726; SSE2-NEXT: retq 2727; 2728; SSE4-LABEL: test86: 2729; SSE4: # BB#0: # %entry 2730; SSE4-NEXT: pmaxuw %xmm2, %xmm0 2731; SSE4-NEXT: pmaxuw %xmm3, %xmm1 2732; SSE4-NEXT: retq 2733; 2734; AVX1-LABEL: test86: 2735; AVX1: # BB#0: # %entry 2736; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2737; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2738; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 2739; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 2740; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2741; AVX1-NEXT: retq 2742; 2743; AVX2-LABEL: test86: 2744; AVX2: # BB#0: # %entry 2745; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2746; AVX2-NEXT: retq 2747; 2748; AVX512F-LABEL: test86: 2749; AVX512F: # BB#0: # %entry 2750; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 2751; AVX512F-NEXT: retq 2752entry: 2753 %cmp = icmp ule <16 x i16> %a, %b 2754 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2755 ret <16 x i16> %sel 2756} 2757 2758define <16 x i16> @test87(<16 x i16> %a, <16 x i16> %b) { 2759; SSE2-LABEL: test87: 2760; SSE2: # BB#0: # %entry 2761; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 2762; SSE2-NEXT: movdqa %xmm3, %xmm6 2763; SSE2-NEXT: pxor %xmm4, %xmm6 2764; SSE2-NEXT: movdqa %xmm1, %xmm5 2765; SSE2-NEXT: pxor %xmm4, %xmm5 2766; SSE2-NEXT: pcmpgtw %xmm6, %xmm5 2767; SSE2-NEXT: movdqa %xmm2, %xmm6 2768; SSE2-NEXT: pxor %xmm4, %xmm6 2769; SSE2-NEXT: pxor %xmm0, %xmm4 2770; SSE2-NEXT: pcmpgtw %xmm6, %xmm4 2771; SSE2-NEXT: pand %xmm4, %xmm2 2772; SSE2-NEXT: pandn %xmm0, %xmm4 2773; SSE2-NEXT: por %xmm2, %xmm4 2774; SSE2-NEXT: pand %xmm5, %xmm3 2775; SSE2-NEXT: pandn %xmm1, %xmm5 2776; SSE2-NEXT: por %xmm3, %xmm5 2777; SSE2-NEXT: movdqa %xmm4, %xmm0 2778; SSE2-NEXT: movdqa %xmm5, %xmm1 2779; SSE2-NEXT: retq 2780; 2781; SSE4-LABEL: test87: 2782; SSE4: # BB#0: # %entry 2783; SSE4-NEXT: pminuw %xmm2, %xmm0 2784; SSE4-NEXT: pminuw %xmm3, %xmm1 2785; SSE4-NEXT: retq 2786; 2787; AVX1-LABEL: test87: 2788; AVX1: # BB#0: # %entry 2789; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2790; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2791; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 2792; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 2793; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2794; AVX1-NEXT: retq 2795; 2796; AVX2-LABEL: test87: 2797; AVX2: # BB#0: # %entry 2798; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2799; AVX2-NEXT: retq 2800; 2801; AVX512F-LABEL: test87: 2802; AVX512F: # BB#0: # %entry 2803; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2804; AVX512F-NEXT: retq 2805entry: 2806 %cmp = icmp ugt <16 x i16> %a, %b 2807 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2808 ret <16 x i16> %sel 2809} 2810 2811define <16 x i16> @test88(<16 x i16> %a, <16 x i16> %b) { 2812; SSE2-LABEL: test88: 2813; SSE2: # BB#0: # %entry 2814; SSE2-NEXT: movdqa %xmm3, %xmm4 2815; SSE2-NEXT: psubusw %xmm1, %xmm4 2816; SSE2-NEXT: pxor %xmm6, %xmm6 2817; SSE2-NEXT: pcmpeqw %xmm6, %xmm4 2818; SSE2-NEXT: movdqa %xmm2, %xmm5 2819; SSE2-NEXT: psubusw %xmm0, %xmm5 2820; SSE2-NEXT: pcmpeqw %xmm6, %xmm5 2821; SSE2-NEXT: pand %xmm5, %xmm2 2822; SSE2-NEXT: pandn %xmm0, %xmm5 2823; SSE2-NEXT: por %xmm2, %xmm5 2824; SSE2-NEXT: pand %xmm4, %xmm3 2825; SSE2-NEXT: pandn %xmm1, %xmm4 2826; SSE2-NEXT: por %xmm3, %xmm4 2827; SSE2-NEXT: movdqa %xmm5, %xmm0 2828; SSE2-NEXT: movdqa %xmm4, %xmm1 2829; SSE2-NEXT: retq 2830; 2831; SSE4-LABEL: test88: 2832; SSE4: # BB#0: # %entry 2833; SSE4-NEXT: pminuw %xmm2, %xmm0 2834; SSE4-NEXT: pminuw %xmm3, %xmm1 2835; SSE4-NEXT: retq 2836; 2837; AVX1-LABEL: test88: 2838; AVX1: # BB#0: # %entry 2839; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2840; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2841; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 2842; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 2843; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2844; AVX1-NEXT: retq 2845; 2846; AVX2-LABEL: test88: 2847; AVX2: # BB#0: # %entry 2848; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2849; AVX2-NEXT: retq 2850; 2851; AVX512F-LABEL: test88: 2852; AVX512F: # BB#0: # %entry 2853; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0 2854; AVX512F-NEXT: retq 2855entry: 2856 %cmp = icmp uge <16 x i16> %a, %b 2857 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a 2858 ret <16 x i16> %sel 2859} 2860 2861define <8 x i32> @test89(<8 x i32> %a, <8 x i32> %b) { 2862; SSE2-LABEL: test89: 2863; SSE2: # BB#0: # %entry 2864; SSE2-NEXT: movdqa %xmm3, %xmm4 2865; SSE2-NEXT: pcmpgtd %xmm1, %xmm4 2866; SSE2-NEXT: movdqa %xmm2, %xmm5 2867; SSE2-NEXT: pcmpgtd %xmm0, %xmm5 2868; SSE2-NEXT: pand %xmm5, %xmm2 2869; SSE2-NEXT: pandn %xmm0, %xmm5 2870; SSE2-NEXT: por %xmm2, %xmm5 2871; SSE2-NEXT: pand %xmm4, %xmm3 2872; SSE2-NEXT: pandn %xmm1, %xmm4 2873; SSE2-NEXT: por %xmm3, %xmm4 2874; SSE2-NEXT: movdqa %xmm5, %xmm0 2875; SSE2-NEXT: movdqa %xmm4, %xmm1 2876; SSE2-NEXT: retq 2877; 2878; SSE4-LABEL: test89: 2879; SSE4: # BB#0: # %entry 2880; SSE4-NEXT: pmaxsd %xmm2, %xmm0 2881; SSE4-NEXT: pmaxsd %xmm3, %xmm1 2882; SSE4-NEXT: retq 2883; 2884; AVX1-LABEL: test89: 2885; AVX1: # BB#0: # %entry 2886; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2887; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2888; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 2889; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2890; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2891; AVX1-NEXT: retq 2892; 2893; AVX2-LABEL: test89: 2894; AVX2: # BB#0: # %entry 2895; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2896; AVX2-NEXT: retq 2897; 2898; AVX512F-LABEL: test89: 2899; AVX512F: # BB#0: # %entry 2900; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2901; AVX512F-NEXT: retq 2902entry: 2903 %cmp = icmp slt <8 x i32> %a, %b 2904 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2905 ret <8 x i32> %sel 2906} 2907 2908define <8 x i32> @test90(<8 x i32> %a, <8 x i32> %b) { 2909; SSE2-LABEL: test90: 2910; SSE2: # BB#0: # %entry 2911; SSE2-NEXT: movdqa %xmm1, %xmm6 2912; SSE2-NEXT: pcmpgtd %xmm3, %xmm6 2913; SSE2-NEXT: pcmpeqd %xmm7, %xmm7 2914; SSE2-NEXT: movdqa %xmm6, %xmm4 2915; SSE2-NEXT: pxor %xmm7, %xmm4 2916; SSE2-NEXT: movdqa %xmm0, %xmm5 2917; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 2918; SSE2-NEXT: pxor %xmm5, %xmm7 2919; SSE2-NEXT: pandn %xmm2, %xmm5 2920; SSE2-NEXT: pandn %xmm0, %xmm7 2921; SSE2-NEXT: por %xmm7, %xmm5 2922; SSE2-NEXT: pandn %xmm3, %xmm6 2923; SSE2-NEXT: pandn %xmm1, %xmm4 2924; SSE2-NEXT: por %xmm6, %xmm4 2925; SSE2-NEXT: movdqa %xmm5, %xmm0 2926; SSE2-NEXT: movdqa %xmm4, %xmm1 2927; SSE2-NEXT: retq 2928; 2929; SSE4-LABEL: test90: 2930; SSE4: # BB#0: # %entry 2931; SSE4-NEXT: pmaxsd %xmm2, %xmm0 2932; SSE4-NEXT: pmaxsd %xmm3, %xmm1 2933; SSE4-NEXT: retq 2934; 2935; AVX1-LABEL: test90: 2936; AVX1: # BB#0: # %entry 2937; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2938; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2939; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 2940; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2941; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2942; AVX1-NEXT: retq 2943; 2944; AVX2-LABEL: test90: 2945; AVX2: # BB#0: # %entry 2946; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2947; AVX2-NEXT: retq 2948; 2949; AVX512F-LABEL: test90: 2950; AVX512F: # BB#0: # %entry 2951; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2952; AVX512F-NEXT: retq 2953entry: 2954 %cmp = icmp sle <8 x i32> %a, %b 2955 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 2956 ret <8 x i32> %sel 2957} 2958 2959define <8 x i32> @test91(<8 x i32> %a, <8 x i32> %b) { 2960; SSE2-LABEL: test91: 2961; SSE2: # BB#0: # %entry 2962; SSE2-NEXT: movdqa %xmm1, %xmm4 2963; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 2964; SSE2-NEXT: movdqa %xmm0, %xmm5 2965; SSE2-NEXT: pcmpgtd %xmm2, %xmm5 2966; SSE2-NEXT: pand %xmm5, %xmm2 2967; SSE2-NEXT: pandn %xmm0, %xmm5 2968; SSE2-NEXT: por %xmm2, %xmm5 2969; SSE2-NEXT: pand %xmm4, %xmm3 2970; SSE2-NEXT: pandn %xmm1, %xmm4 2971; SSE2-NEXT: por %xmm3, %xmm4 2972; SSE2-NEXT: movdqa %xmm5, %xmm0 2973; SSE2-NEXT: movdqa %xmm4, %xmm1 2974; SSE2-NEXT: retq 2975; 2976; SSE4-LABEL: test91: 2977; SSE4: # BB#0: # %entry 2978; SSE4-NEXT: pminsd %xmm2, %xmm0 2979; SSE4-NEXT: pminsd %xmm3, %xmm1 2980; SSE4-NEXT: retq 2981; 2982; AVX1-LABEL: test91: 2983; AVX1: # BB#0: # %entry 2984; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2985; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2986; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 2987; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 2988; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 2989; AVX1-NEXT: retq 2990; 2991; AVX2-LABEL: test91: 2992; AVX2: # BB#0: # %entry 2993; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2994; AVX2-NEXT: retq 2995; 2996; AVX512F-LABEL: test91: 2997; AVX512F: # BB#0: # %entry 2998; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2999; AVX512F-NEXT: retq 3000entry: 3001 %cmp = icmp sgt <8 x i32> %a, %b 3002 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3003 ret <8 x i32> %sel 3004} 3005 3006define <8 x i32> @test92(<8 x i32> %a, <8 x i32> %b) { 3007; SSE2-LABEL: test92: 3008; SSE2: # BB#0: # %entry 3009; SSE2-NEXT: movdqa %xmm3, %xmm6 3010; SSE2-NEXT: pcmpgtd %xmm1, %xmm6 3011; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 3012; SSE2-NEXT: movdqa %xmm6, %xmm5 3013; SSE2-NEXT: pxor %xmm4, %xmm5 3014; SSE2-NEXT: movdqa %xmm2, %xmm7 3015; SSE2-NEXT: pcmpgtd %xmm0, %xmm7 3016; SSE2-NEXT: pxor %xmm7, %xmm4 3017; SSE2-NEXT: pandn %xmm2, %xmm7 3018; SSE2-NEXT: pandn %xmm0, %xmm4 3019; SSE2-NEXT: por %xmm7, %xmm4 3020; SSE2-NEXT: pandn %xmm3, %xmm6 3021; SSE2-NEXT: pandn %xmm1, %xmm5 3022; SSE2-NEXT: por %xmm6, %xmm5 3023; SSE2-NEXT: movdqa %xmm4, %xmm0 3024; SSE2-NEXT: movdqa %xmm5, %xmm1 3025; SSE2-NEXT: retq 3026; 3027; SSE4-LABEL: test92: 3028; SSE4: # BB#0: # %entry 3029; SSE4-NEXT: pminsd %xmm2, %xmm0 3030; SSE4-NEXT: pminsd %xmm3, %xmm1 3031; SSE4-NEXT: retq 3032; 3033; AVX1-LABEL: test92: 3034; AVX1: # BB#0: # %entry 3035; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3036; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3037; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2 3038; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 3039; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3040; AVX1-NEXT: retq 3041; 3042; AVX2-LABEL: test92: 3043; AVX2: # BB#0: # %entry 3044; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 3045; AVX2-NEXT: retq 3046; 3047; AVX512F-LABEL: test92: 3048; AVX512F: # BB#0: # %entry 3049; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 3050; AVX512F-NEXT: retq 3051entry: 3052 %cmp = icmp sge <8 x i32> %a, %b 3053 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3054 ret <8 x i32> %sel 3055} 3056 3057define <8 x i32> @test93(<8 x i32> %a, <8 x i32> %b) { 3058; SSE2-LABEL: test93: 3059; SSE2: # BB#0: # %entry 3060; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 3061; SSE2-NEXT: movdqa %xmm1, %xmm6 3062; SSE2-NEXT: pxor %xmm4, %xmm6 3063; SSE2-NEXT: movdqa %xmm3, %xmm5 3064; SSE2-NEXT: pxor %xmm4, %xmm5 3065; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 3066; SSE2-NEXT: movdqa %xmm0, %xmm6 3067; SSE2-NEXT: pxor %xmm4, %xmm6 3068; SSE2-NEXT: pxor %xmm2, %xmm4 3069; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 3070; SSE2-NEXT: pand %xmm4, %xmm2 3071; SSE2-NEXT: pandn %xmm0, %xmm4 3072; SSE2-NEXT: por %xmm2, %xmm4 3073; SSE2-NEXT: pand %xmm5, %xmm3 3074; SSE2-NEXT: pandn %xmm1, %xmm5 3075; SSE2-NEXT: por %xmm3, %xmm5 3076; SSE2-NEXT: movdqa %xmm4, %xmm0 3077; SSE2-NEXT: movdqa %xmm5, %xmm1 3078; SSE2-NEXT: retq 3079; 3080; SSE4-LABEL: test93: 3081; SSE4: # BB#0: # %entry 3082; SSE4-NEXT: pmaxud %xmm2, %xmm0 3083; SSE4-NEXT: pmaxud %xmm3, %xmm1 3084; SSE4-NEXT: retq 3085; 3086; AVX1-LABEL: test93: 3087; AVX1: # BB#0: # %entry 3088; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3089; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3090; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 3091; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 3092; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3093; AVX1-NEXT: retq 3094; 3095; AVX2-LABEL: test93: 3096; AVX2: # BB#0: # %entry 3097; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 3098; AVX2-NEXT: retq 3099; 3100; AVX512F-LABEL: test93: 3101; AVX512F: # BB#0: # %entry 3102; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 3103; AVX512F-NEXT: retq 3104entry: 3105 %cmp = icmp ult <8 x i32> %a, %b 3106 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3107 ret <8 x i32> %sel 3108} 3109 3110define <8 x i32> @test94(<8 x i32> %a, <8 x i32> %b) { 3111; SSE2-LABEL: test94: 3112; SSE2: # BB#0: # %entry 3113; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648] 3114; SSE2-NEXT: movdqa %xmm3, %xmm4 3115; SSE2-NEXT: pxor %xmm6, %xmm4 3116; SSE2-NEXT: movdqa %xmm1, %xmm7 3117; SSE2-NEXT: pxor %xmm6, %xmm7 3118; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 3119; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 3120; SSE2-NEXT: movdqa %xmm7, %xmm5 3121; SSE2-NEXT: pxor %xmm4, %xmm5 3122; SSE2-NEXT: movdqa %xmm2, %xmm8 3123; SSE2-NEXT: pxor %xmm6, %xmm8 3124; SSE2-NEXT: pxor %xmm0, %xmm6 3125; SSE2-NEXT: pcmpgtd %xmm8, %xmm6 3126; SSE2-NEXT: pxor %xmm6, %xmm4 3127; SSE2-NEXT: pandn %xmm2, %xmm6 3128; SSE2-NEXT: pandn %xmm0, %xmm4 3129; SSE2-NEXT: por %xmm6, %xmm4 3130; SSE2-NEXT: pandn %xmm3, %xmm7 3131; SSE2-NEXT: pandn %xmm1, %xmm5 3132; SSE2-NEXT: por %xmm7, %xmm5 3133; SSE2-NEXT: movdqa %xmm4, %xmm0 3134; SSE2-NEXT: movdqa %xmm5, %xmm1 3135; SSE2-NEXT: retq 3136; 3137; SSE4-LABEL: test94: 3138; SSE4: # BB#0: # %entry 3139; SSE4-NEXT: pmaxud %xmm2, %xmm0 3140; SSE4-NEXT: pmaxud %xmm3, %xmm1 3141; SSE4-NEXT: retq 3142; 3143; AVX1-LABEL: test94: 3144; AVX1: # BB#0: # %entry 3145; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3146; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3147; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 3148; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 3149; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3150; AVX1-NEXT: retq 3151; 3152; AVX2-LABEL: test94: 3153; AVX2: # BB#0: # %entry 3154; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 3155; AVX2-NEXT: retq 3156; 3157; AVX512F-LABEL: test94: 3158; AVX512F: # BB#0: # %entry 3159; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 3160; AVX512F-NEXT: retq 3161entry: 3162 %cmp = icmp ule <8 x i32> %a, %b 3163 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3164 ret <8 x i32> %sel 3165} 3166 3167define <8 x i32> @test95(<8 x i32> %a, <8 x i32> %b) { 3168; SSE2-LABEL: test95: 3169; SSE2: # BB#0: # %entry 3170; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 3171; SSE2-NEXT: movdqa %xmm3, %xmm6 3172; SSE2-NEXT: pxor %xmm4, %xmm6 3173; SSE2-NEXT: movdqa %xmm1, %xmm5 3174; SSE2-NEXT: pxor %xmm4, %xmm5 3175; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 3176; SSE2-NEXT: movdqa %xmm2, %xmm6 3177; SSE2-NEXT: pxor %xmm4, %xmm6 3178; SSE2-NEXT: pxor %xmm0, %xmm4 3179; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 3180; SSE2-NEXT: pand %xmm4, %xmm2 3181; SSE2-NEXT: pandn %xmm0, %xmm4 3182; SSE2-NEXT: por %xmm2, %xmm4 3183; SSE2-NEXT: pand %xmm5, %xmm3 3184; SSE2-NEXT: pandn %xmm1, %xmm5 3185; SSE2-NEXT: por %xmm3, %xmm5 3186; SSE2-NEXT: movdqa %xmm4, %xmm0 3187; SSE2-NEXT: movdqa %xmm5, %xmm1 3188; SSE2-NEXT: retq 3189; 3190; SSE4-LABEL: test95: 3191; SSE4: # BB#0: # %entry 3192; SSE4-NEXT: pminud %xmm2, %xmm0 3193; SSE4-NEXT: pminud %xmm3, %xmm1 3194; SSE4-NEXT: retq 3195; 3196; AVX1-LABEL: test95: 3197; AVX1: # BB#0: # %entry 3198; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3199; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3200; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 3201; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 3202; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3203; AVX1-NEXT: retq 3204; 3205; AVX2-LABEL: test95: 3206; AVX2: # BB#0: # %entry 3207; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 3208; AVX2-NEXT: retq 3209; 3210; AVX512F-LABEL: test95: 3211; AVX512F: # BB#0: # %entry 3212; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0 3213; AVX512F-NEXT: retq 3214entry: 3215 %cmp = icmp ugt <8 x i32> %a, %b 3216 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3217 ret <8 x i32> %sel 3218} 3219 3220define <8 x i32> @test96(<8 x i32> %a, <8 x i32> %b) { 3221; SSE2-LABEL: test96: 3222; SSE2: # BB#0: # %entry 3223; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648] 3224; SSE2-NEXT: movdqa %xmm1, %xmm4 3225; SSE2-NEXT: pxor %xmm6, %xmm4 3226; SSE2-NEXT: movdqa %xmm3, %xmm7 3227; SSE2-NEXT: pxor %xmm6, %xmm7 3228; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 3229; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 3230; SSE2-NEXT: movdqa %xmm7, %xmm5 3231; SSE2-NEXT: pxor %xmm4, %xmm5 3232; SSE2-NEXT: movdqa %xmm0, %xmm8 3233; SSE2-NEXT: pxor %xmm6, %xmm8 3234; SSE2-NEXT: pxor %xmm2, %xmm6 3235; SSE2-NEXT: pcmpgtd %xmm8, %xmm6 3236; SSE2-NEXT: pxor %xmm6, %xmm4 3237; SSE2-NEXT: pandn %xmm2, %xmm6 3238; SSE2-NEXT: pandn %xmm0, %xmm4 3239; SSE2-NEXT: por %xmm6, %xmm4 3240; SSE2-NEXT: pandn %xmm3, %xmm7 3241; SSE2-NEXT: pandn %xmm1, %xmm5 3242; SSE2-NEXT: por %xmm7, %xmm5 3243; SSE2-NEXT: movdqa %xmm4, %xmm0 3244; SSE2-NEXT: movdqa %xmm5, %xmm1 3245; SSE2-NEXT: retq 3246; 3247; SSE4-LABEL: test96: 3248; SSE4: # BB#0: # %entry 3249; SSE4-NEXT: pminud %xmm2, %xmm0 3250; SSE4-NEXT: pminud %xmm3, %xmm1 3251; SSE4-NEXT: retq 3252; 3253; AVX1-LABEL: test96: 3254; AVX1: # BB#0: # %entry 3255; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3256; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3257; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 3258; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 3259; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 3260; AVX1-NEXT: retq 3261; 3262; AVX2-LABEL: test96: 3263; AVX2: # BB#0: # %entry 3264; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 3265; AVX2-NEXT: retq 3266; 3267; AVX512F-LABEL: test96: 3268; AVX512F: # BB#0: # %entry 3269; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0 3270; AVX512F-NEXT: retq 3271entry: 3272 %cmp = icmp uge <8 x i32> %a, %b 3273 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a 3274 ret <8 x i32> %sel 3275} 3276 3277; ---------------------------- 3278 3279define <64 x i8> @test97(<64 x i8> %a, <64 x i8> %b) { 3280; SSE2-LABEL: test97: 3281; SSE2: # BB#0: # %entry 3282; SSE2-NEXT: movdqa %xmm7, %xmm8 3283; SSE2-NEXT: pcmpgtb %xmm3, %xmm8 3284; SSE2-NEXT: movdqa %xmm6, %xmm9 3285; SSE2-NEXT: pcmpgtb %xmm2, %xmm9 3286; SSE2-NEXT: movdqa %xmm5, %xmm10 3287; SSE2-NEXT: pcmpgtb %xmm1, %xmm10 3288; SSE2-NEXT: movdqa %xmm4, %xmm11 3289; SSE2-NEXT: pcmpgtb %xmm0, %xmm11 3290; SSE2-NEXT: pand %xmm11, %xmm0 3291; SSE2-NEXT: pandn %xmm4, %xmm11 3292; SSE2-NEXT: por %xmm11, %xmm0 3293; SSE2-NEXT: pand %xmm10, %xmm1 3294; SSE2-NEXT: pandn %xmm5, %xmm10 3295; SSE2-NEXT: por %xmm10, %xmm1 3296; SSE2-NEXT: pand %xmm9, %xmm2 3297; SSE2-NEXT: pandn %xmm6, %xmm9 3298; SSE2-NEXT: por %xmm9, %xmm2 3299; SSE2-NEXT: pand %xmm8, %xmm3 3300; SSE2-NEXT: pandn %xmm7, %xmm8 3301; SSE2-NEXT: por %xmm8, %xmm3 3302; SSE2-NEXT: retq 3303; 3304; SSE4-LABEL: test97: 3305; SSE4: # BB#0: # %entry 3306; SSE4-NEXT: pminsb %xmm4, %xmm0 3307; SSE4-NEXT: pminsb %xmm5, %xmm1 3308; SSE4-NEXT: pminsb %xmm6, %xmm2 3309; SSE4-NEXT: pminsb %xmm7, %xmm3 3310; SSE4-NEXT: retq 3311; 3312; AVX1-LABEL: test97: 3313; AVX1: # BB#0: # %entry 3314; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3315; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3316; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 3317; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 3318; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3319; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3320; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3321; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 3322; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 3323; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3324; AVX1-NEXT: retq 3325; 3326; AVX2-LABEL: test97: 3327; AVX2: # BB#0: # %entry 3328; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 3329; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 3330; AVX2-NEXT: retq 3331; 3332; AVX512BW-LABEL: test97: 3333; AVX512BW: # BB#0: # %entry 3334; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 3335; AVX512BW-NEXT: retq 3336entry: 3337 %cmp = icmp slt <64 x i8> %a, %b 3338 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3339 ret <64 x i8> %sel 3340} 3341 3342define <64 x i8> @test98(<64 x i8> %a, <64 x i8> %b) { 3343; SSE2-LABEL: test98: 3344; SSE2: # BB#0: # %entry 3345; SSE2-NEXT: movdqa %xmm3, %xmm8 3346; SSE2-NEXT: movdqa %xmm2, %xmm9 3347; SSE2-NEXT: movdqa %xmm8, %xmm12 3348; SSE2-NEXT: pcmpgtb %xmm7, %xmm12 3349; SSE2-NEXT: pcmpeqd %xmm13, %xmm13 3350; SSE2-NEXT: movdqa %xmm12, %xmm3 3351; SSE2-NEXT: pxor %xmm13, %xmm3 3352; SSE2-NEXT: movdqa %xmm9, %xmm14 3353; SSE2-NEXT: pcmpgtb %xmm6, %xmm14 3354; SSE2-NEXT: movdqa %xmm14, %xmm2 3355; SSE2-NEXT: pxor %xmm13, %xmm2 3356; SSE2-NEXT: movdqa %xmm1, %xmm15 3357; SSE2-NEXT: pcmpgtb %xmm5, %xmm15 3358; SSE2-NEXT: movdqa %xmm15, %xmm10 3359; SSE2-NEXT: pxor %xmm13, %xmm10 3360; SSE2-NEXT: movdqa %xmm0, %xmm11 3361; SSE2-NEXT: pcmpgtb %xmm4, %xmm11 3362; SSE2-NEXT: pxor %xmm11, %xmm13 3363; SSE2-NEXT: pandn %xmm0, %xmm11 3364; SSE2-NEXT: pandn %xmm4, %xmm13 3365; SSE2-NEXT: por %xmm13, %xmm11 3366; SSE2-NEXT: pandn %xmm1, %xmm15 3367; SSE2-NEXT: pandn %xmm5, %xmm10 3368; SSE2-NEXT: por %xmm15, %xmm10 3369; SSE2-NEXT: pandn %xmm9, %xmm14 3370; SSE2-NEXT: pandn %xmm6, %xmm2 3371; SSE2-NEXT: por %xmm14, %xmm2 3372; SSE2-NEXT: pandn %xmm8, %xmm12 3373; SSE2-NEXT: pandn %xmm7, %xmm3 3374; SSE2-NEXT: por %xmm12, %xmm3 3375; SSE2-NEXT: movdqa %xmm11, %xmm0 3376; SSE2-NEXT: movdqa %xmm10, %xmm1 3377; SSE2-NEXT: retq 3378; 3379; SSE4-LABEL: test98: 3380; SSE4: # BB#0: # %entry 3381; SSE4-NEXT: pminsb %xmm4, %xmm0 3382; SSE4-NEXT: pminsb %xmm5, %xmm1 3383; SSE4-NEXT: pminsb %xmm6, %xmm2 3384; SSE4-NEXT: pminsb %xmm7, %xmm3 3385; SSE4-NEXT: retq 3386; 3387; AVX1-LABEL: test98: 3388; AVX1: # BB#0: # %entry 3389; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3390; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3391; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 3392; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 3393; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3394; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3395; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3396; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 3397; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 3398; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3399; AVX1-NEXT: retq 3400; 3401; AVX2-LABEL: test98: 3402; AVX2: # BB#0: # %entry 3403; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 3404; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 3405; AVX2-NEXT: retq 3406; 3407; AVX512BW-LABEL: test98: 3408; AVX512BW: # BB#0: # %entry 3409; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 3410; AVX512BW-NEXT: retq 3411entry: 3412 %cmp = icmp sle <64 x i8> %a, %b 3413 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3414 ret <64 x i8> %sel 3415} 3416 3417define <64 x i8> @test99(<64 x i8> %a, <64 x i8> %b) { 3418; SSE2-LABEL: test99: 3419; SSE2: # BB#0: # %entry 3420; SSE2-NEXT: movdqa %xmm3, %xmm8 3421; SSE2-NEXT: pcmpgtb %xmm7, %xmm3 3422; SSE2-NEXT: movdqa %xmm2, %xmm9 3423; SSE2-NEXT: pcmpgtb %xmm6, %xmm9 3424; SSE2-NEXT: movdqa %xmm1, %xmm10 3425; SSE2-NEXT: pcmpgtb %xmm5, %xmm10 3426; SSE2-NEXT: movdqa %xmm0, %xmm11 3427; SSE2-NEXT: pcmpgtb %xmm4, %xmm11 3428; SSE2-NEXT: pand %xmm11, %xmm0 3429; SSE2-NEXT: pandn %xmm4, %xmm11 3430; SSE2-NEXT: por %xmm0, %xmm11 3431; SSE2-NEXT: pand %xmm10, %xmm1 3432; SSE2-NEXT: pandn %xmm5, %xmm10 3433; SSE2-NEXT: por %xmm1, %xmm10 3434; SSE2-NEXT: pand %xmm9, %xmm2 3435; SSE2-NEXT: pandn %xmm6, %xmm9 3436; SSE2-NEXT: por %xmm2, %xmm9 3437; SSE2-NEXT: pand %xmm3, %xmm8 3438; SSE2-NEXT: pandn %xmm7, %xmm3 3439; SSE2-NEXT: por %xmm8, %xmm3 3440; SSE2-NEXT: movdqa %xmm11, %xmm0 3441; SSE2-NEXT: movdqa %xmm10, %xmm1 3442; SSE2-NEXT: movdqa %xmm9, %xmm2 3443; SSE2-NEXT: retq 3444; 3445; SSE4-LABEL: test99: 3446; SSE4: # BB#0: # %entry 3447; SSE4-NEXT: pmaxsb %xmm4, %xmm0 3448; SSE4-NEXT: pmaxsb %xmm5, %xmm1 3449; SSE4-NEXT: pmaxsb %xmm6, %xmm2 3450; SSE4-NEXT: pmaxsb %xmm7, %xmm3 3451; SSE4-NEXT: retq 3452; 3453; AVX1-LABEL: test99: 3454; AVX1: # BB#0: # %entry 3455; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3456; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3457; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 3458; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 3459; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3460; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3461; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3462; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 3463; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 3464; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3465; AVX1-NEXT: retq 3466; 3467; AVX2-LABEL: test99: 3468; AVX2: # BB#0: # %entry 3469; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 3470; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 3471; AVX2-NEXT: retq 3472; 3473; AVX512BW-LABEL: test99: 3474; AVX512BW: # BB#0: # %entry 3475; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 3476; AVX512BW-NEXT: retq 3477entry: 3478 %cmp = icmp sgt <64 x i8> %a, %b 3479 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3480 ret <64 x i8> %sel 3481} 3482 3483define <64 x i8> @test100(<64 x i8> %a, <64 x i8> %b) { 3484; SSE2-LABEL: test100: 3485; SSE2: # BB#0: # %entry 3486; SSE2-NEXT: movdqa %xmm3, %xmm8 3487; SSE2-NEXT: movdqa %xmm2, %xmm9 3488; SSE2-NEXT: movdqa %xmm0, %xmm10 3489; SSE2-NEXT: movdqa %xmm7, %xmm12 3490; SSE2-NEXT: pcmpgtb %xmm8, %xmm12 3491; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 3492; SSE2-NEXT: movdqa %xmm12, %xmm3 3493; SSE2-NEXT: pxor %xmm0, %xmm3 3494; SSE2-NEXT: movdqa %xmm6, %xmm13 3495; SSE2-NEXT: pcmpgtb %xmm9, %xmm13 3496; SSE2-NEXT: movdqa %xmm13, %xmm2 3497; SSE2-NEXT: pxor %xmm0, %xmm2 3498; SSE2-NEXT: movdqa %xmm5, %xmm14 3499; SSE2-NEXT: pcmpgtb %xmm1, %xmm14 3500; SSE2-NEXT: movdqa %xmm14, %xmm11 3501; SSE2-NEXT: pxor %xmm0, %xmm11 3502; SSE2-NEXT: movdqa %xmm4, %xmm15 3503; SSE2-NEXT: pcmpgtb %xmm10, %xmm15 3504; SSE2-NEXT: pxor %xmm15, %xmm0 3505; SSE2-NEXT: pandn %xmm10, %xmm15 3506; SSE2-NEXT: pandn %xmm4, %xmm0 3507; SSE2-NEXT: por %xmm15, %xmm0 3508; SSE2-NEXT: pandn %xmm1, %xmm14 3509; SSE2-NEXT: pandn %xmm5, %xmm11 3510; SSE2-NEXT: por %xmm14, %xmm11 3511; SSE2-NEXT: pandn %xmm9, %xmm13 3512; SSE2-NEXT: pandn %xmm6, %xmm2 3513; SSE2-NEXT: por %xmm13, %xmm2 3514; SSE2-NEXT: pandn %xmm8, %xmm12 3515; SSE2-NEXT: pandn %xmm7, %xmm3 3516; SSE2-NEXT: por %xmm12, %xmm3 3517; SSE2-NEXT: movdqa %xmm11, %xmm1 3518; SSE2-NEXT: retq 3519; 3520; SSE4-LABEL: test100: 3521; SSE4: # BB#0: # %entry 3522; SSE4-NEXT: pmaxsb %xmm4, %xmm0 3523; SSE4-NEXT: pmaxsb %xmm5, %xmm1 3524; SSE4-NEXT: pmaxsb %xmm6, %xmm2 3525; SSE4-NEXT: pmaxsb %xmm7, %xmm3 3526; SSE4-NEXT: retq 3527; 3528; AVX1-LABEL: test100: 3529; AVX1: # BB#0: # %entry 3530; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3531; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3532; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 3533; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 3534; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3535; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3536; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3537; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 3538; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 3539; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3540; AVX1-NEXT: retq 3541; 3542; AVX2-LABEL: test100: 3543; AVX2: # BB#0: # %entry 3544; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 3545; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 3546; AVX2-NEXT: retq 3547; 3548; AVX512BW-LABEL: test100: 3549; AVX512BW: # BB#0: # %entry 3550; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 3551; AVX512BW-NEXT: retq 3552entry: 3553 %cmp = icmp sge <64 x i8> %a, %b 3554 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3555 ret <64 x i8> %sel 3556} 3557 3558define <64 x i8> @test101(<64 x i8> %a, <64 x i8> %b) { 3559; SSE-LABEL: test101: 3560; SSE: # BB#0: # %entry 3561; SSE-NEXT: pminub %xmm4, %xmm0 3562; SSE-NEXT: pminub %xmm5, %xmm1 3563; SSE-NEXT: pminub %xmm6, %xmm2 3564; SSE-NEXT: pminub %xmm7, %xmm3 3565; SSE-NEXT: retq 3566; 3567; AVX1-LABEL: test101: 3568; AVX1: # BB#0: # %entry 3569; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3570; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3571; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 3572; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 3573; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3574; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3575; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3576; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 3577; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 3578; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3579; AVX1-NEXT: retq 3580; 3581; AVX2-LABEL: test101: 3582; AVX2: # BB#0: # %entry 3583; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 3584; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 3585; AVX2-NEXT: retq 3586; 3587; AVX512BW-LABEL: test101: 3588; AVX512BW: # BB#0: # %entry 3589; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 3590; AVX512BW-NEXT: retq 3591entry: 3592 %cmp = icmp ult <64 x i8> %a, %b 3593 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3594 ret <64 x i8> %sel 3595} 3596 3597define <64 x i8> @test102(<64 x i8> %a, <64 x i8> %b) { 3598; SSE-LABEL: test102: 3599; SSE: # BB#0: # %entry 3600; SSE-NEXT: pminub %xmm4, %xmm0 3601; SSE-NEXT: pminub %xmm5, %xmm1 3602; SSE-NEXT: pminub %xmm6, %xmm2 3603; SSE-NEXT: pminub %xmm7, %xmm3 3604; SSE-NEXT: retq 3605; 3606; AVX1-LABEL: test102: 3607; AVX1: # BB#0: # %entry 3608; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3609; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3610; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 3611; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 3612; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3613; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3614; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3615; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 3616; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 3617; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3618; AVX1-NEXT: retq 3619; 3620; AVX2-LABEL: test102: 3621; AVX2: # BB#0: # %entry 3622; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 3623; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 3624; AVX2-NEXT: retq 3625; 3626; AVX512BW-LABEL: test102: 3627; AVX512BW: # BB#0: # %entry 3628; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 3629; AVX512BW-NEXT: retq 3630entry: 3631 %cmp = icmp ule <64 x i8> %a, %b 3632 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3633 ret <64 x i8> %sel 3634} 3635 3636define <64 x i8> @test103(<64 x i8> %a, <64 x i8> %b) { 3637; SSE-LABEL: test103: 3638; SSE: # BB#0: # %entry 3639; SSE-NEXT: pmaxub %xmm4, %xmm0 3640; SSE-NEXT: pmaxub %xmm5, %xmm1 3641; SSE-NEXT: pmaxub %xmm6, %xmm2 3642; SSE-NEXT: pmaxub %xmm7, %xmm3 3643; SSE-NEXT: retq 3644; 3645; AVX1-LABEL: test103: 3646; AVX1: # BB#0: # %entry 3647; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3648; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3649; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 3650; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 3651; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3652; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3653; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3654; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 3655; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 3656; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3657; AVX1-NEXT: retq 3658; 3659; AVX2-LABEL: test103: 3660; AVX2: # BB#0: # %entry 3661; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 3662; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 3663; AVX2-NEXT: retq 3664; 3665; AVX512BW-LABEL: test103: 3666; AVX512BW: # BB#0: # %entry 3667; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 3668; AVX512BW-NEXT: retq 3669entry: 3670 %cmp = icmp ugt <64 x i8> %a, %b 3671 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3672 ret <64 x i8> %sel 3673} 3674 3675define <64 x i8> @test104(<64 x i8> %a, <64 x i8> %b) { 3676; SSE-LABEL: test104: 3677; SSE: # BB#0: # %entry 3678; SSE-NEXT: pmaxub %xmm4, %xmm0 3679; SSE-NEXT: pmaxub %xmm5, %xmm1 3680; SSE-NEXT: pmaxub %xmm6, %xmm2 3681; SSE-NEXT: pmaxub %xmm7, %xmm3 3682; SSE-NEXT: retq 3683; 3684; AVX1-LABEL: test104: 3685; AVX1: # BB#0: # %entry 3686; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3687; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3688; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 3689; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 3690; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3691; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3692; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3693; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 3694; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 3695; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3696; AVX1-NEXT: retq 3697; 3698; AVX2-LABEL: test104: 3699; AVX2: # BB#0: # %entry 3700; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 3701; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 3702; AVX2-NEXT: retq 3703; 3704; AVX512BW-LABEL: test104: 3705; AVX512BW: # BB#0: # %entry 3706; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 3707; AVX512BW-NEXT: retq 3708entry: 3709 %cmp = icmp uge <64 x i8> %a, %b 3710 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b 3711 ret <64 x i8> %sel 3712} 3713 3714define <32 x i16> @test105(<32 x i16> %a, <32 x i16> %b) { 3715; SSE-LABEL: test105: 3716; SSE: # BB#0: # %entry 3717; SSE-NEXT: pminsw %xmm4, %xmm0 3718; SSE-NEXT: pminsw %xmm5, %xmm1 3719; SSE-NEXT: pminsw %xmm6, %xmm2 3720; SSE-NEXT: pminsw %xmm7, %xmm3 3721; SSE-NEXT: retq 3722; 3723; AVX1-LABEL: test105: 3724; AVX1: # BB#0: # %entry 3725; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3726; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3727; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 3728; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 3729; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3730; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3731; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3732; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 3733; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 3734; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3735; AVX1-NEXT: retq 3736; 3737; AVX2-LABEL: test105: 3738; AVX2: # BB#0: # %entry 3739; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 3740; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 3741; AVX2-NEXT: retq 3742; 3743; AVX512BW-LABEL: test105: 3744; AVX512BW: # BB#0: # %entry 3745; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 3746; AVX512BW-NEXT: retq 3747entry: 3748 %cmp = icmp slt <32 x i16> %a, %b 3749 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3750 ret <32 x i16> %sel 3751} 3752 3753define <32 x i16> @test106(<32 x i16> %a, <32 x i16> %b) { 3754; SSE-LABEL: test106: 3755; SSE: # BB#0: # %entry 3756; SSE-NEXT: pminsw %xmm4, %xmm0 3757; SSE-NEXT: pminsw %xmm5, %xmm1 3758; SSE-NEXT: pminsw %xmm6, %xmm2 3759; SSE-NEXT: pminsw %xmm7, %xmm3 3760; SSE-NEXT: retq 3761; 3762; AVX1-LABEL: test106: 3763; AVX1: # BB#0: # %entry 3764; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3765; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3766; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 3767; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 3768; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3769; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3770; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3771; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 3772; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 3773; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3774; AVX1-NEXT: retq 3775; 3776; AVX2-LABEL: test106: 3777; AVX2: # BB#0: # %entry 3778; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 3779; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 3780; AVX2-NEXT: retq 3781; 3782; AVX512BW-LABEL: test106: 3783; AVX512BW: # BB#0: # %entry 3784; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 3785; AVX512BW-NEXT: retq 3786entry: 3787 %cmp = icmp sle <32 x i16> %a, %b 3788 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3789 ret <32 x i16> %sel 3790} 3791 3792define <32 x i16> @test107(<32 x i16> %a, <32 x i16> %b) { 3793; SSE-LABEL: test107: 3794; SSE: # BB#0: # %entry 3795; SSE-NEXT: pmaxsw %xmm4, %xmm0 3796; SSE-NEXT: pmaxsw %xmm5, %xmm1 3797; SSE-NEXT: pmaxsw %xmm6, %xmm2 3798; SSE-NEXT: pmaxsw %xmm7, %xmm3 3799; SSE-NEXT: retq 3800; 3801; AVX1-LABEL: test107: 3802; AVX1: # BB#0: # %entry 3803; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3804; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3805; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 3806; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 3807; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3808; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3809; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3810; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 3811; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 3812; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3813; AVX1-NEXT: retq 3814; 3815; AVX2-LABEL: test107: 3816; AVX2: # BB#0: # %entry 3817; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 3818; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 3819; AVX2-NEXT: retq 3820; 3821; AVX512BW-LABEL: test107: 3822; AVX512BW: # BB#0: # %entry 3823; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 3824; AVX512BW-NEXT: retq 3825entry: 3826 %cmp = icmp sgt <32 x i16> %a, %b 3827 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3828 ret <32 x i16> %sel 3829} 3830 3831define <32 x i16> @test108(<32 x i16> %a, <32 x i16> %b) { 3832; SSE-LABEL: test108: 3833; SSE: # BB#0: # %entry 3834; SSE-NEXT: pmaxsw %xmm4, %xmm0 3835; SSE-NEXT: pmaxsw %xmm5, %xmm1 3836; SSE-NEXT: pmaxsw %xmm6, %xmm2 3837; SSE-NEXT: pmaxsw %xmm7, %xmm3 3838; SSE-NEXT: retq 3839; 3840; AVX1-LABEL: test108: 3841; AVX1: # BB#0: # %entry 3842; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3843; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3844; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 3845; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 3846; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3847; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3848; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3849; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 3850; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 3851; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3852; AVX1-NEXT: retq 3853; 3854; AVX2-LABEL: test108: 3855; AVX2: # BB#0: # %entry 3856; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 3857; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 3858; AVX2-NEXT: retq 3859; 3860; AVX512BW-LABEL: test108: 3861; AVX512BW: # BB#0: # %entry 3862; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 3863; AVX512BW-NEXT: retq 3864entry: 3865 %cmp = icmp sge <32 x i16> %a, %b 3866 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3867 ret <32 x i16> %sel 3868} 3869 3870define <32 x i16> @test109(<32 x i16> %a, <32 x i16> %b) { 3871; SSE2-LABEL: test109: 3872; SSE2: # BB#0: # %entry 3873; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [32768,32768,32768,32768,32768,32768,32768,32768] 3874; SSE2-NEXT: movdqa %xmm3, %xmm9 3875; SSE2-NEXT: pxor %xmm10, %xmm9 3876; SSE2-NEXT: movdqa %xmm7, %xmm8 3877; SSE2-NEXT: pxor %xmm10, %xmm8 3878; SSE2-NEXT: pcmpgtw %xmm9, %xmm8 3879; SSE2-NEXT: movdqa %xmm2, %xmm11 3880; SSE2-NEXT: pxor %xmm10, %xmm11 3881; SSE2-NEXT: movdqa %xmm6, %xmm9 3882; SSE2-NEXT: pxor %xmm10, %xmm9 3883; SSE2-NEXT: pcmpgtw %xmm11, %xmm9 3884; SSE2-NEXT: movdqa %xmm1, %xmm11 3885; SSE2-NEXT: pxor %xmm10, %xmm11 3886; SSE2-NEXT: movdqa %xmm5, %xmm12 3887; SSE2-NEXT: pxor %xmm10, %xmm12 3888; SSE2-NEXT: pcmpgtw %xmm11, %xmm12 3889; SSE2-NEXT: movdqa %xmm0, %xmm11 3890; SSE2-NEXT: pxor %xmm10, %xmm11 3891; SSE2-NEXT: pxor %xmm4, %xmm10 3892; SSE2-NEXT: pcmpgtw %xmm11, %xmm10 3893; SSE2-NEXT: pand %xmm10, %xmm0 3894; SSE2-NEXT: pandn %xmm4, %xmm10 3895; SSE2-NEXT: por %xmm10, %xmm0 3896; SSE2-NEXT: pand %xmm12, %xmm1 3897; SSE2-NEXT: pandn %xmm5, %xmm12 3898; SSE2-NEXT: por %xmm12, %xmm1 3899; SSE2-NEXT: pand %xmm9, %xmm2 3900; SSE2-NEXT: pandn %xmm6, %xmm9 3901; SSE2-NEXT: por %xmm9, %xmm2 3902; SSE2-NEXT: pand %xmm8, %xmm3 3903; SSE2-NEXT: pandn %xmm7, %xmm8 3904; SSE2-NEXT: por %xmm8, %xmm3 3905; SSE2-NEXT: retq 3906; 3907; SSE4-LABEL: test109: 3908; SSE4: # BB#0: # %entry 3909; SSE4-NEXT: pminuw %xmm4, %xmm0 3910; SSE4-NEXT: pminuw %xmm5, %xmm1 3911; SSE4-NEXT: pminuw %xmm6, %xmm2 3912; SSE4-NEXT: pminuw %xmm7, %xmm3 3913; SSE4-NEXT: retq 3914; 3915; AVX1-LABEL: test109: 3916; AVX1: # BB#0: # %entry 3917; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3918; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3919; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 3920; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 3921; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3922; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3923; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3924; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 3925; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 3926; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3927; AVX1-NEXT: retq 3928; 3929; AVX2-LABEL: test109: 3930; AVX2: # BB#0: # %entry 3931; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 3932; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 3933; AVX2-NEXT: retq 3934; 3935; AVX512BW-LABEL: test109: 3936; AVX512BW: # BB#0: # %entry 3937; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 3938; AVX512BW-NEXT: retq 3939entry: 3940 %cmp = icmp ult <32 x i16> %a, %b 3941 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 3942 ret <32 x i16> %sel 3943} 3944 3945define <32 x i16> @test110(<32 x i16> %a, <32 x i16> %b) { 3946; SSE2-LABEL: test110: 3947; SSE2: # BB#0: # %entry 3948; SSE2-NEXT: movdqa %xmm3, %xmm8 3949; SSE2-NEXT: movdqa %xmm2, %xmm9 3950; SSE2-NEXT: movdqa %xmm1, %xmm10 3951; SSE2-NEXT: psubusw %xmm7, %xmm3 3952; SSE2-NEXT: pxor %xmm12, %xmm12 3953; SSE2-NEXT: pcmpeqw %xmm12, %xmm3 3954; SSE2-NEXT: psubusw %xmm6, %xmm2 3955; SSE2-NEXT: pcmpeqw %xmm12, %xmm2 3956; SSE2-NEXT: psubusw %xmm5, %xmm1 3957; SSE2-NEXT: pcmpeqw %xmm12, %xmm1 3958; SSE2-NEXT: movdqa %xmm0, %xmm11 3959; SSE2-NEXT: psubusw %xmm4, %xmm11 3960; SSE2-NEXT: pcmpeqw %xmm12, %xmm11 3961; SSE2-NEXT: pand %xmm11, %xmm0 3962; SSE2-NEXT: pandn %xmm4, %xmm11 3963; SSE2-NEXT: por %xmm0, %xmm11 3964; SSE2-NEXT: pand %xmm1, %xmm10 3965; SSE2-NEXT: pandn %xmm5, %xmm1 3966; SSE2-NEXT: por %xmm10, %xmm1 3967; SSE2-NEXT: pand %xmm2, %xmm9 3968; SSE2-NEXT: pandn %xmm6, %xmm2 3969; SSE2-NEXT: por %xmm9, %xmm2 3970; SSE2-NEXT: pand %xmm3, %xmm8 3971; SSE2-NEXT: pandn %xmm7, %xmm3 3972; SSE2-NEXT: por %xmm8, %xmm3 3973; SSE2-NEXT: movdqa %xmm11, %xmm0 3974; SSE2-NEXT: retq 3975; 3976; SSE4-LABEL: test110: 3977; SSE4: # BB#0: # %entry 3978; SSE4-NEXT: pminuw %xmm4, %xmm0 3979; SSE4-NEXT: pminuw %xmm5, %xmm1 3980; SSE4-NEXT: pminuw %xmm6, %xmm2 3981; SSE4-NEXT: pminuw %xmm7, %xmm3 3982; SSE4-NEXT: retq 3983; 3984; AVX1-LABEL: test110: 3985; AVX1: # BB#0: # %entry 3986; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3987; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 3988; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 3989; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 3990; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 3991; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 3992; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 3993; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 3994; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 3995; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 3996; AVX1-NEXT: retq 3997; 3998; AVX2-LABEL: test110: 3999; AVX2: # BB#0: # %entry 4000; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 4001; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 4002; AVX2-NEXT: retq 4003; 4004; AVX512BW-LABEL: test110: 4005; AVX512BW: # BB#0: # %entry 4006; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 4007; AVX512BW-NEXT: retq 4008entry: 4009 %cmp = icmp ule <32 x i16> %a, %b 4010 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 4011 ret <32 x i16> %sel 4012} 4013 4014define <32 x i16> @test111(<32 x i16> %a, <32 x i16> %b) { 4015; SSE2-LABEL: test111: 4016; SSE2: # BB#0: # %entry 4017; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [32768,32768,32768,32768,32768,32768,32768,32768] 4018; SSE2-NEXT: movdqa %xmm7, %xmm9 4019; SSE2-NEXT: pxor %xmm11, %xmm9 4020; SSE2-NEXT: movdqa %xmm3, %xmm8 4021; SSE2-NEXT: pxor %xmm11, %xmm8 4022; SSE2-NEXT: pcmpgtw %xmm9, %xmm8 4023; SSE2-NEXT: movdqa %xmm6, %xmm10 4024; SSE2-NEXT: pxor %xmm11, %xmm10 4025; SSE2-NEXT: movdqa %xmm2, %xmm9 4026; SSE2-NEXT: pxor %xmm11, %xmm9 4027; SSE2-NEXT: pcmpgtw %xmm10, %xmm9 4028; SSE2-NEXT: movdqa %xmm5, %xmm12 4029; SSE2-NEXT: pxor %xmm11, %xmm12 4030; SSE2-NEXT: movdqa %xmm1, %xmm10 4031; SSE2-NEXT: pxor %xmm11, %xmm10 4032; SSE2-NEXT: pcmpgtw %xmm12, %xmm10 4033; SSE2-NEXT: movdqa %xmm4, %xmm12 4034; SSE2-NEXT: pxor %xmm11, %xmm12 4035; SSE2-NEXT: pxor %xmm0, %xmm11 4036; SSE2-NEXT: pcmpgtw %xmm12, %xmm11 4037; SSE2-NEXT: pand %xmm11, %xmm0 4038; SSE2-NEXT: pandn %xmm4, %xmm11 4039; SSE2-NEXT: por %xmm11, %xmm0 4040; SSE2-NEXT: pand %xmm10, %xmm1 4041; SSE2-NEXT: pandn %xmm5, %xmm10 4042; SSE2-NEXT: por %xmm1, %xmm10 4043; SSE2-NEXT: pand %xmm9, %xmm2 4044; SSE2-NEXT: pandn %xmm6, %xmm9 4045; SSE2-NEXT: por %xmm2, %xmm9 4046; SSE2-NEXT: pand %xmm8, %xmm3 4047; SSE2-NEXT: pandn %xmm7, %xmm8 4048; SSE2-NEXT: por %xmm3, %xmm8 4049; SSE2-NEXT: movdqa %xmm10, %xmm1 4050; SSE2-NEXT: movdqa %xmm9, %xmm2 4051; SSE2-NEXT: movdqa %xmm8, %xmm3 4052; SSE2-NEXT: retq 4053; 4054; SSE4-LABEL: test111: 4055; SSE4: # BB#0: # %entry 4056; SSE4-NEXT: pmaxuw %xmm4, %xmm0 4057; SSE4-NEXT: pmaxuw %xmm5, %xmm1 4058; SSE4-NEXT: pmaxuw %xmm6, %xmm2 4059; SSE4-NEXT: pmaxuw %xmm7, %xmm3 4060; SSE4-NEXT: retq 4061; 4062; AVX1-LABEL: test111: 4063; AVX1: # BB#0: # %entry 4064; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4065; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4066; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 4067; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 4068; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4069; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4070; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4071; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 4072; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 4073; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4074; AVX1-NEXT: retq 4075; 4076; AVX2-LABEL: test111: 4077; AVX2: # BB#0: # %entry 4078; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 4079; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 4080; AVX2-NEXT: retq 4081; 4082; AVX512BW-LABEL: test111: 4083; AVX512BW: # BB#0: # %entry 4084; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 4085; AVX512BW-NEXT: retq 4086entry: 4087 %cmp = icmp ugt <32 x i16> %a, %b 4088 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 4089 ret <32 x i16> %sel 4090} 4091 4092define <32 x i16> @test112(<32 x i16> %a, <32 x i16> %b) { 4093; SSE2-LABEL: test112: 4094; SSE2: # BB#0: # %entry 4095; SSE2-NEXT: movdqa %xmm7, %xmm8 4096; SSE2-NEXT: psubusw %xmm3, %xmm8 4097; SSE2-NEXT: pxor %xmm9, %xmm9 4098; SSE2-NEXT: pcmpeqw %xmm9, %xmm8 4099; SSE2-NEXT: movdqa %xmm6, %xmm10 4100; SSE2-NEXT: psubusw %xmm2, %xmm10 4101; SSE2-NEXT: pcmpeqw %xmm9, %xmm10 4102; SSE2-NEXT: movdqa %xmm5, %xmm11 4103; SSE2-NEXT: psubusw %xmm1, %xmm11 4104; SSE2-NEXT: pcmpeqw %xmm9, %xmm11 4105; SSE2-NEXT: movdqa %xmm4, %xmm12 4106; SSE2-NEXT: psubusw %xmm0, %xmm12 4107; SSE2-NEXT: pcmpeqw %xmm9, %xmm12 4108; SSE2-NEXT: pand %xmm12, %xmm0 4109; SSE2-NEXT: pandn %xmm4, %xmm12 4110; SSE2-NEXT: por %xmm12, %xmm0 4111; SSE2-NEXT: pand %xmm11, %xmm1 4112; SSE2-NEXT: pandn %xmm5, %xmm11 4113; SSE2-NEXT: por %xmm11, %xmm1 4114; SSE2-NEXT: pand %xmm10, %xmm2 4115; SSE2-NEXT: pandn %xmm6, %xmm10 4116; SSE2-NEXT: por %xmm10, %xmm2 4117; SSE2-NEXT: pand %xmm8, %xmm3 4118; SSE2-NEXT: pandn %xmm7, %xmm8 4119; SSE2-NEXT: por %xmm8, %xmm3 4120; SSE2-NEXT: retq 4121; 4122; SSE4-LABEL: test112: 4123; SSE4: # BB#0: # %entry 4124; SSE4-NEXT: pmaxuw %xmm4, %xmm0 4125; SSE4-NEXT: pmaxuw %xmm5, %xmm1 4126; SSE4-NEXT: pmaxuw %xmm6, %xmm2 4127; SSE4-NEXT: pmaxuw %xmm7, %xmm3 4128; SSE4-NEXT: retq 4129; 4130; AVX1-LABEL: test112: 4131; AVX1: # BB#0: # %entry 4132; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4133; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4134; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 4135; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 4136; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4137; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4138; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4139; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 4140; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 4141; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4142; AVX1-NEXT: retq 4143; 4144; AVX2-LABEL: test112: 4145; AVX2: # BB#0: # %entry 4146; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 4147; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 4148; AVX2-NEXT: retq 4149; 4150; AVX512BW-LABEL: test112: 4151; AVX512BW: # BB#0: # %entry 4152; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 4153; AVX512BW-NEXT: retq 4154entry: 4155 %cmp = icmp uge <32 x i16> %a, %b 4156 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b 4157 ret <32 x i16> %sel 4158} 4159 4160define <16 x i32> @test113(<16 x i32> %a, <16 x i32> %b) { 4161; SSE2-LABEL: test113: 4162; SSE2: # BB#0: # %entry 4163; SSE2-NEXT: movdqa %xmm7, %xmm8 4164; SSE2-NEXT: pcmpgtd %xmm3, %xmm8 4165; SSE2-NEXT: movdqa %xmm6, %xmm9 4166; SSE2-NEXT: pcmpgtd %xmm2, %xmm9 4167; SSE2-NEXT: movdqa %xmm5, %xmm10 4168; SSE2-NEXT: pcmpgtd %xmm1, %xmm10 4169; SSE2-NEXT: movdqa %xmm4, %xmm11 4170; SSE2-NEXT: pcmpgtd %xmm0, %xmm11 4171; SSE2-NEXT: pand %xmm11, %xmm0 4172; SSE2-NEXT: pandn %xmm4, %xmm11 4173; SSE2-NEXT: por %xmm11, %xmm0 4174; SSE2-NEXT: pand %xmm10, %xmm1 4175; SSE2-NEXT: pandn %xmm5, %xmm10 4176; SSE2-NEXT: por %xmm10, %xmm1 4177; SSE2-NEXT: pand %xmm9, %xmm2 4178; SSE2-NEXT: pandn %xmm6, %xmm9 4179; SSE2-NEXT: por %xmm9, %xmm2 4180; SSE2-NEXT: pand %xmm8, %xmm3 4181; SSE2-NEXT: pandn %xmm7, %xmm8 4182; SSE2-NEXT: por %xmm8, %xmm3 4183; SSE2-NEXT: retq 4184; 4185; SSE4-LABEL: test113: 4186; SSE4: # BB#0: # %entry 4187; SSE4-NEXT: pminsd %xmm4, %xmm0 4188; SSE4-NEXT: pminsd %xmm5, %xmm1 4189; SSE4-NEXT: pminsd %xmm6, %xmm2 4190; SSE4-NEXT: pminsd %xmm7, %xmm3 4191; SSE4-NEXT: retq 4192; 4193; AVX1-LABEL: test113: 4194; AVX1: # BB#0: # %entry 4195; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4196; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4197; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 4198; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 4199; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4200; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4201; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4202; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 4203; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 4204; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4205; AVX1-NEXT: retq 4206; 4207; AVX2-LABEL: test113: 4208; AVX2: # BB#0: # %entry 4209; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 4210; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 4211; AVX2-NEXT: retq 4212; 4213; AVX512F-LABEL: test113: 4214; AVX512F: # BB#0: # %entry 4215; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0 4216; AVX512F-NEXT: retq 4217entry: 4218 %cmp = icmp slt <16 x i32> %a, %b 4219 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4220 ret <16 x i32> %sel 4221} 4222 4223define <16 x i32> @test114(<16 x i32> %a, <16 x i32> %b) { 4224; SSE2-LABEL: test114: 4225; SSE2: # BB#0: # %entry 4226; SSE2-NEXT: movdqa %xmm3, %xmm8 4227; SSE2-NEXT: movdqa %xmm2, %xmm9 4228; SSE2-NEXT: movdqa %xmm8, %xmm12 4229; SSE2-NEXT: pcmpgtd %xmm7, %xmm12 4230; SSE2-NEXT: pcmpeqd %xmm13, %xmm13 4231; SSE2-NEXT: movdqa %xmm12, %xmm3 4232; SSE2-NEXT: pxor %xmm13, %xmm3 4233; SSE2-NEXT: movdqa %xmm9, %xmm14 4234; SSE2-NEXT: pcmpgtd %xmm6, %xmm14 4235; SSE2-NEXT: movdqa %xmm14, %xmm2 4236; SSE2-NEXT: pxor %xmm13, %xmm2 4237; SSE2-NEXT: movdqa %xmm1, %xmm15 4238; SSE2-NEXT: pcmpgtd %xmm5, %xmm15 4239; SSE2-NEXT: movdqa %xmm15, %xmm10 4240; SSE2-NEXT: pxor %xmm13, %xmm10 4241; SSE2-NEXT: movdqa %xmm0, %xmm11 4242; SSE2-NEXT: pcmpgtd %xmm4, %xmm11 4243; SSE2-NEXT: pxor %xmm11, %xmm13 4244; SSE2-NEXT: pandn %xmm0, %xmm11 4245; SSE2-NEXT: pandn %xmm4, %xmm13 4246; SSE2-NEXT: por %xmm13, %xmm11 4247; SSE2-NEXT: pandn %xmm1, %xmm15 4248; SSE2-NEXT: pandn %xmm5, %xmm10 4249; SSE2-NEXT: por %xmm15, %xmm10 4250; SSE2-NEXT: pandn %xmm9, %xmm14 4251; SSE2-NEXT: pandn %xmm6, %xmm2 4252; SSE2-NEXT: por %xmm14, %xmm2 4253; SSE2-NEXT: pandn %xmm8, %xmm12 4254; SSE2-NEXT: pandn %xmm7, %xmm3 4255; SSE2-NEXT: por %xmm12, %xmm3 4256; SSE2-NEXT: movdqa %xmm11, %xmm0 4257; SSE2-NEXT: movdqa %xmm10, %xmm1 4258; SSE2-NEXT: retq 4259; 4260; SSE4-LABEL: test114: 4261; SSE4: # BB#0: # %entry 4262; SSE4-NEXT: pminsd %xmm4, %xmm0 4263; SSE4-NEXT: pminsd %xmm5, %xmm1 4264; SSE4-NEXT: pminsd %xmm6, %xmm2 4265; SSE4-NEXT: pminsd %xmm7, %xmm3 4266; SSE4-NEXT: retq 4267; 4268; AVX1-LABEL: test114: 4269; AVX1: # BB#0: # %entry 4270; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4271; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4272; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 4273; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 4274; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4275; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4276; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4277; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 4278; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 4279; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4280; AVX1-NEXT: retq 4281; 4282; AVX2-LABEL: test114: 4283; AVX2: # BB#0: # %entry 4284; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 4285; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 4286; AVX2-NEXT: retq 4287; 4288; AVX512F-LABEL: test114: 4289; AVX512F: # BB#0: # %entry 4290; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0 4291; AVX512F-NEXT: retq 4292entry: 4293 %cmp = icmp sle <16 x i32> %a, %b 4294 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4295 ret <16 x i32> %sel 4296} 4297 4298define <16 x i32> @test115(<16 x i32> %a, <16 x i32> %b) { 4299; SSE2-LABEL: test115: 4300; SSE2: # BB#0: # %entry 4301; SSE2-NEXT: movdqa %xmm3, %xmm8 4302; SSE2-NEXT: pcmpgtd %xmm7, %xmm3 4303; SSE2-NEXT: movdqa %xmm2, %xmm9 4304; SSE2-NEXT: pcmpgtd %xmm6, %xmm9 4305; SSE2-NEXT: movdqa %xmm1, %xmm10 4306; SSE2-NEXT: pcmpgtd %xmm5, %xmm10 4307; SSE2-NEXT: movdqa %xmm0, %xmm11 4308; SSE2-NEXT: pcmpgtd %xmm4, %xmm11 4309; SSE2-NEXT: pand %xmm11, %xmm0 4310; SSE2-NEXT: pandn %xmm4, %xmm11 4311; SSE2-NEXT: por %xmm0, %xmm11 4312; SSE2-NEXT: pand %xmm10, %xmm1 4313; SSE2-NEXT: pandn %xmm5, %xmm10 4314; SSE2-NEXT: por %xmm1, %xmm10 4315; SSE2-NEXT: pand %xmm9, %xmm2 4316; SSE2-NEXT: pandn %xmm6, %xmm9 4317; SSE2-NEXT: por %xmm2, %xmm9 4318; SSE2-NEXT: pand %xmm3, %xmm8 4319; SSE2-NEXT: pandn %xmm7, %xmm3 4320; SSE2-NEXT: por %xmm8, %xmm3 4321; SSE2-NEXT: movdqa %xmm11, %xmm0 4322; SSE2-NEXT: movdqa %xmm10, %xmm1 4323; SSE2-NEXT: movdqa %xmm9, %xmm2 4324; SSE2-NEXT: retq 4325; 4326; SSE4-LABEL: test115: 4327; SSE4: # BB#0: # %entry 4328; SSE4-NEXT: pmaxsd %xmm4, %xmm0 4329; SSE4-NEXT: pmaxsd %xmm5, %xmm1 4330; SSE4-NEXT: pmaxsd %xmm6, %xmm2 4331; SSE4-NEXT: pmaxsd %xmm7, %xmm3 4332; SSE4-NEXT: retq 4333; 4334; AVX1-LABEL: test115: 4335; AVX1: # BB#0: # %entry 4336; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4337; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4338; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 4339; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 4340; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4341; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4342; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4343; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 4344; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 4345; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4346; AVX1-NEXT: retq 4347; 4348; AVX2-LABEL: test115: 4349; AVX2: # BB#0: # %entry 4350; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 4351; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 4352; AVX2-NEXT: retq 4353; 4354; AVX512F-LABEL: test115: 4355; AVX512F: # BB#0: # %entry 4356; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 4357; AVX512F-NEXT: retq 4358entry: 4359 %cmp = icmp sgt <16 x i32> %a, %b 4360 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4361 ret <16 x i32> %sel 4362} 4363 4364define <16 x i32> @test116(<16 x i32> %a, <16 x i32> %b) { 4365; SSE2-LABEL: test116: 4366; SSE2: # BB#0: # %entry 4367; SSE2-NEXT: movdqa %xmm3, %xmm8 4368; SSE2-NEXT: movdqa %xmm2, %xmm9 4369; SSE2-NEXT: movdqa %xmm0, %xmm10 4370; SSE2-NEXT: movdqa %xmm7, %xmm12 4371; SSE2-NEXT: pcmpgtd %xmm8, %xmm12 4372; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 4373; SSE2-NEXT: movdqa %xmm12, %xmm3 4374; SSE2-NEXT: pxor %xmm0, %xmm3 4375; SSE2-NEXT: movdqa %xmm6, %xmm13 4376; SSE2-NEXT: pcmpgtd %xmm9, %xmm13 4377; SSE2-NEXT: movdqa %xmm13, %xmm2 4378; SSE2-NEXT: pxor %xmm0, %xmm2 4379; SSE2-NEXT: movdqa %xmm5, %xmm14 4380; SSE2-NEXT: pcmpgtd %xmm1, %xmm14 4381; SSE2-NEXT: movdqa %xmm14, %xmm11 4382; SSE2-NEXT: pxor %xmm0, %xmm11 4383; SSE2-NEXT: movdqa %xmm4, %xmm15 4384; SSE2-NEXT: pcmpgtd %xmm10, %xmm15 4385; SSE2-NEXT: pxor %xmm15, %xmm0 4386; SSE2-NEXT: pandn %xmm10, %xmm15 4387; SSE2-NEXT: pandn %xmm4, %xmm0 4388; SSE2-NEXT: por %xmm15, %xmm0 4389; SSE2-NEXT: pandn %xmm1, %xmm14 4390; SSE2-NEXT: pandn %xmm5, %xmm11 4391; SSE2-NEXT: por %xmm14, %xmm11 4392; SSE2-NEXT: pandn %xmm9, %xmm13 4393; SSE2-NEXT: pandn %xmm6, %xmm2 4394; SSE2-NEXT: por %xmm13, %xmm2 4395; SSE2-NEXT: pandn %xmm8, %xmm12 4396; SSE2-NEXT: pandn %xmm7, %xmm3 4397; SSE2-NEXT: por %xmm12, %xmm3 4398; SSE2-NEXT: movdqa %xmm11, %xmm1 4399; SSE2-NEXT: retq 4400; 4401; SSE4-LABEL: test116: 4402; SSE4: # BB#0: # %entry 4403; SSE4-NEXT: pmaxsd %xmm4, %xmm0 4404; SSE4-NEXT: pmaxsd %xmm5, %xmm1 4405; SSE4-NEXT: pmaxsd %xmm6, %xmm2 4406; SSE4-NEXT: pmaxsd %xmm7, %xmm3 4407; SSE4-NEXT: retq 4408; 4409; AVX1-LABEL: test116: 4410; AVX1: # BB#0: # %entry 4411; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4412; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4413; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 4414; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 4415; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4416; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4417; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4418; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 4419; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 4420; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4421; AVX1-NEXT: retq 4422; 4423; AVX2-LABEL: test116: 4424; AVX2: # BB#0: # %entry 4425; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 4426; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 4427; AVX2-NEXT: retq 4428; 4429; AVX512F-LABEL: test116: 4430; AVX512F: # BB#0: # %entry 4431; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 4432; AVX512F-NEXT: retq 4433entry: 4434 %cmp = icmp sge <16 x i32> %a, %b 4435 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4436 ret <16 x i32> %sel 4437} 4438 4439define <16 x i32> @test117(<16 x i32> %a, <16 x i32> %b) { 4440; SSE2-LABEL: test117: 4441; SSE2: # BB#0: # %entry 4442; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648] 4443; SSE2-NEXT: movdqa %xmm3, %xmm9 4444; SSE2-NEXT: pxor %xmm10, %xmm9 4445; SSE2-NEXT: movdqa %xmm7, %xmm8 4446; SSE2-NEXT: pxor %xmm10, %xmm8 4447; SSE2-NEXT: pcmpgtd %xmm9, %xmm8 4448; SSE2-NEXT: movdqa %xmm2, %xmm11 4449; SSE2-NEXT: pxor %xmm10, %xmm11 4450; SSE2-NEXT: movdqa %xmm6, %xmm9 4451; SSE2-NEXT: pxor %xmm10, %xmm9 4452; SSE2-NEXT: pcmpgtd %xmm11, %xmm9 4453; SSE2-NEXT: movdqa %xmm1, %xmm11 4454; SSE2-NEXT: pxor %xmm10, %xmm11 4455; SSE2-NEXT: movdqa %xmm5, %xmm12 4456; SSE2-NEXT: pxor %xmm10, %xmm12 4457; SSE2-NEXT: pcmpgtd %xmm11, %xmm12 4458; SSE2-NEXT: movdqa %xmm0, %xmm11 4459; SSE2-NEXT: pxor %xmm10, %xmm11 4460; SSE2-NEXT: pxor %xmm4, %xmm10 4461; SSE2-NEXT: pcmpgtd %xmm11, %xmm10 4462; SSE2-NEXT: pand %xmm10, %xmm0 4463; SSE2-NEXT: pandn %xmm4, %xmm10 4464; SSE2-NEXT: por %xmm10, %xmm0 4465; SSE2-NEXT: pand %xmm12, %xmm1 4466; SSE2-NEXT: pandn %xmm5, %xmm12 4467; SSE2-NEXT: por %xmm12, %xmm1 4468; SSE2-NEXT: pand %xmm9, %xmm2 4469; SSE2-NEXT: pandn %xmm6, %xmm9 4470; SSE2-NEXT: por %xmm9, %xmm2 4471; SSE2-NEXT: pand %xmm8, %xmm3 4472; SSE2-NEXT: pandn %xmm7, %xmm8 4473; SSE2-NEXT: por %xmm8, %xmm3 4474; SSE2-NEXT: retq 4475; 4476; SSE4-LABEL: test117: 4477; SSE4: # BB#0: # %entry 4478; SSE4-NEXT: pminud %xmm4, %xmm0 4479; SSE4-NEXT: pminud %xmm5, %xmm1 4480; SSE4-NEXT: pminud %xmm6, %xmm2 4481; SSE4-NEXT: pminud %xmm7, %xmm3 4482; SSE4-NEXT: retq 4483; 4484; AVX1-LABEL: test117: 4485; AVX1: # BB#0: # %entry 4486; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4487; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4488; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 4489; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 4490; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4491; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4492; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4493; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 4494; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 4495; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4496; AVX1-NEXT: retq 4497; 4498; AVX2-LABEL: test117: 4499; AVX2: # BB#0: # %entry 4500; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 4501; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 4502; AVX2-NEXT: retq 4503; 4504; AVX512F-LABEL: test117: 4505; AVX512F: # BB#0: # %entry 4506; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0 4507; AVX512F-NEXT: retq 4508entry: 4509 %cmp = icmp ult <16 x i32> %a, %b 4510 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4511 ret <16 x i32> %sel 4512} 4513 4514define <16 x i32> @test118(<16 x i32> %a, <16 x i32> %b) { 4515; SSE2-LABEL: test118: 4516; SSE2: # BB#0: # %entry 4517; SSE2-NEXT: movdqa %xmm0, %xmm10 4518; SSE2-NEXT: movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648] 4519; SSE2-NEXT: movdqa %xmm7, %xmm0 4520; SSE2-NEXT: pxor %xmm14, %xmm0 4521; SSE2-NEXT: movdqa %xmm3, %xmm12 4522; SSE2-NEXT: pxor %xmm14, %xmm12 4523; SSE2-NEXT: pcmpgtd %xmm0, %xmm12 4524; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 4525; SSE2-NEXT: movdqa %xmm12, %xmm8 4526; SSE2-NEXT: pxor %xmm0, %xmm8 4527; SSE2-NEXT: movdqa %xmm6, %xmm9 4528; SSE2-NEXT: pxor %xmm14, %xmm9 4529; SSE2-NEXT: movdqa %xmm2, %xmm13 4530; SSE2-NEXT: pxor %xmm14, %xmm13 4531; SSE2-NEXT: pcmpgtd %xmm9, %xmm13 4532; SSE2-NEXT: movdqa %xmm13, %xmm9 4533; SSE2-NEXT: pxor %xmm0, %xmm9 4534; SSE2-NEXT: movdqa %xmm5, %xmm11 4535; SSE2-NEXT: pxor %xmm14, %xmm11 4536; SSE2-NEXT: movdqa %xmm1, %xmm15 4537; SSE2-NEXT: pxor %xmm14, %xmm15 4538; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 4539; SSE2-NEXT: movdqa %xmm4, %xmm11 4540; SSE2-NEXT: pxor %xmm14, %xmm11 4541; SSE2-NEXT: pxor %xmm10, %xmm14 4542; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 4543; SSE2-NEXT: movdqa %xmm15, %xmm11 4544; SSE2-NEXT: pxor %xmm0, %xmm11 4545; SSE2-NEXT: pxor %xmm14, %xmm0 4546; SSE2-NEXT: pandn %xmm10, %xmm14 4547; SSE2-NEXT: pandn %xmm4, %xmm0 4548; SSE2-NEXT: por %xmm14, %xmm0 4549; SSE2-NEXT: pandn %xmm1, %xmm15 4550; SSE2-NEXT: pandn %xmm5, %xmm11 4551; SSE2-NEXT: por %xmm15, %xmm11 4552; SSE2-NEXT: pandn %xmm2, %xmm13 4553; SSE2-NEXT: pandn %xmm6, %xmm9 4554; SSE2-NEXT: por %xmm13, %xmm9 4555; SSE2-NEXT: pandn %xmm3, %xmm12 4556; SSE2-NEXT: pandn %xmm7, %xmm8 4557; SSE2-NEXT: por %xmm12, %xmm8 4558; SSE2-NEXT: movdqa %xmm11, %xmm1 4559; SSE2-NEXT: movdqa %xmm9, %xmm2 4560; SSE2-NEXT: movdqa %xmm8, %xmm3 4561; SSE2-NEXT: retq 4562; 4563; SSE4-LABEL: test118: 4564; SSE4: # BB#0: # %entry 4565; SSE4-NEXT: pminud %xmm4, %xmm0 4566; SSE4-NEXT: pminud %xmm5, %xmm1 4567; SSE4-NEXT: pminud %xmm6, %xmm2 4568; SSE4-NEXT: pminud %xmm7, %xmm3 4569; SSE4-NEXT: retq 4570; 4571; AVX1-LABEL: test118: 4572; AVX1: # BB#0: # %entry 4573; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4574; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4575; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 4576; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 4577; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4578; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4579; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4580; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 4581; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 4582; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4583; AVX1-NEXT: retq 4584; 4585; AVX2-LABEL: test118: 4586; AVX2: # BB#0: # %entry 4587; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 4588; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 4589; AVX2-NEXT: retq 4590; 4591; AVX512F-LABEL: test118: 4592; AVX512F: # BB#0: # %entry 4593; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0 4594; AVX512F-NEXT: retq 4595entry: 4596 %cmp = icmp ule <16 x i32> %a, %b 4597 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4598 ret <16 x i32> %sel 4599} 4600 4601define <16 x i32> @test119(<16 x i32> %a, <16 x i32> %b) { 4602; SSE2-LABEL: test119: 4603; SSE2: # BB#0: # %entry 4604; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648] 4605; SSE2-NEXT: movdqa %xmm7, %xmm9 4606; SSE2-NEXT: pxor %xmm11, %xmm9 4607; SSE2-NEXT: movdqa %xmm3, %xmm8 4608; SSE2-NEXT: pxor %xmm11, %xmm8 4609; SSE2-NEXT: pcmpgtd %xmm9, %xmm8 4610; SSE2-NEXT: movdqa %xmm6, %xmm10 4611; SSE2-NEXT: pxor %xmm11, %xmm10 4612; SSE2-NEXT: movdqa %xmm2, %xmm9 4613; SSE2-NEXT: pxor %xmm11, %xmm9 4614; SSE2-NEXT: pcmpgtd %xmm10, %xmm9 4615; SSE2-NEXT: movdqa %xmm5, %xmm12 4616; SSE2-NEXT: pxor %xmm11, %xmm12 4617; SSE2-NEXT: movdqa %xmm1, %xmm10 4618; SSE2-NEXT: pxor %xmm11, %xmm10 4619; SSE2-NEXT: pcmpgtd %xmm12, %xmm10 4620; SSE2-NEXT: movdqa %xmm4, %xmm12 4621; SSE2-NEXT: pxor %xmm11, %xmm12 4622; SSE2-NEXT: pxor %xmm0, %xmm11 4623; SSE2-NEXT: pcmpgtd %xmm12, %xmm11 4624; SSE2-NEXT: pand %xmm11, %xmm0 4625; SSE2-NEXT: pandn %xmm4, %xmm11 4626; SSE2-NEXT: por %xmm11, %xmm0 4627; SSE2-NEXT: pand %xmm10, %xmm1 4628; SSE2-NEXT: pandn %xmm5, %xmm10 4629; SSE2-NEXT: por %xmm1, %xmm10 4630; SSE2-NEXT: pand %xmm9, %xmm2 4631; SSE2-NEXT: pandn %xmm6, %xmm9 4632; SSE2-NEXT: por %xmm2, %xmm9 4633; SSE2-NEXT: pand %xmm8, %xmm3 4634; SSE2-NEXT: pandn %xmm7, %xmm8 4635; SSE2-NEXT: por %xmm3, %xmm8 4636; SSE2-NEXT: movdqa %xmm10, %xmm1 4637; SSE2-NEXT: movdqa %xmm9, %xmm2 4638; SSE2-NEXT: movdqa %xmm8, %xmm3 4639; SSE2-NEXT: retq 4640; 4641; SSE4-LABEL: test119: 4642; SSE4: # BB#0: # %entry 4643; SSE4-NEXT: pmaxud %xmm4, %xmm0 4644; SSE4-NEXT: pmaxud %xmm5, %xmm1 4645; SSE4-NEXT: pmaxud %xmm6, %xmm2 4646; SSE4-NEXT: pmaxud %xmm7, %xmm3 4647; SSE4-NEXT: retq 4648; 4649; AVX1-LABEL: test119: 4650; AVX1: # BB#0: # %entry 4651; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4652; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4653; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 4654; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 4655; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4656; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4657; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4658; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 4659; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 4660; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4661; AVX1-NEXT: retq 4662; 4663; AVX2-LABEL: test119: 4664; AVX2: # BB#0: # %entry 4665; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 4666; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 4667; AVX2-NEXT: retq 4668; 4669; AVX512F-LABEL: test119: 4670; AVX512F: # BB#0: # %entry 4671; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 4672; AVX512F-NEXT: retq 4673entry: 4674 %cmp = icmp ugt <16 x i32> %a, %b 4675 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4676 ret <16 x i32> %sel 4677} 4678 4679define <16 x i32> @test120(<16 x i32> %a, <16 x i32> %b) { 4680; SSE2-LABEL: test120: 4681; SSE2: # BB#0: # %entry 4682; SSE2-NEXT: movdqa %xmm0, %xmm10 4683; SSE2-NEXT: movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648] 4684; SSE2-NEXT: movdqa %xmm3, %xmm0 4685; SSE2-NEXT: pxor %xmm14, %xmm0 4686; SSE2-NEXT: movdqa %xmm7, %xmm12 4687; SSE2-NEXT: pxor %xmm14, %xmm12 4688; SSE2-NEXT: pcmpgtd %xmm0, %xmm12 4689; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 4690; SSE2-NEXT: movdqa %xmm12, %xmm8 4691; SSE2-NEXT: pxor %xmm0, %xmm8 4692; SSE2-NEXT: movdqa %xmm2, %xmm9 4693; SSE2-NEXT: pxor %xmm14, %xmm9 4694; SSE2-NEXT: movdqa %xmm6, %xmm13 4695; SSE2-NEXT: pxor %xmm14, %xmm13 4696; SSE2-NEXT: pcmpgtd %xmm9, %xmm13 4697; SSE2-NEXT: movdqa %xmm13, %xmm9 4698; SSE2-NEXT: pxor %xmm0, %xmm9 4699; SSE2-NEXT: movdqa %xmm1, %xmm11 4700; SSE2-NEXT: pxor %xmm14, %xmm11 4701; SSE2-NEXT: movdqa %xmm5, %xmm15 4702; SSE2-NEXT: pxor %xmm14, %xmm15 4703; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 4704; SSE2-NEXT: movdqa %xmm10, %xmm11 4705; SSE2-NEXT: pxor %xmm14, %xmm11 4706; SSE2-NEXT: pxor %xmm4, %xmm14 4707; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 4708; SSE2-NEXT: movdqa %xmm15, %xmm11 4709; SSE2-NEXT: pxor %xmm0, %xmm11 4710; SSE2-NEXT: pxor %xmm14, %xmm0 4711; SSE2-NEXT: pandn %xmm10, %xmm14 4712; SSE2-NEXT: pandn %xmm4, %xmm0 4713; SSE2-NEXT: por %xmm14, %xmm0 4714; SSE2-NEXT: pandn %xmm1, %xmm15 4715; SSE2-NEXT: pandn %xmm5, %xmm11 4716; SSE2-NEXT: por %xmm15, %xmm11 4717; SSE2-NEXT: pandn %xmm2, %xmm13 4718; SSE2-NEXT: pandn %xmm6, %xmm9 4719; SSE2-NEXT: por %xmm13, %xmm9 4720; SSE2-NEXT: pandn %xmm3, %xmm12 4721; SSE2-NEXT: pandn %xmm7, %xmm8 4722; SSE2-NEXT: por %xmm12, %xmm8 4723; SSE2-NEXT: movdqa %xmm11, %xmm1 4724; SSE2-NEXT: movdqa %xmm9, %xmm2 4725; SSE2-NEXT: movdqa %xmm8, %xmm3 4726; SSE2-NEXT: retq 4727; 4728; SSE4-LABEL: test120: 4729; SSE4: # BB#0: # %entry 4730; SSE4-NEXT: pmaxud %xmm4, %xmm0 4731; SSE4-NEXT: pmaxud %xmm5, %xmm1 4732; SSE4-NEXT: pmaxud %xmm6, %xmm2 4733; SSE4-NEXT: pmaxud %xmm7, %xmm3 4734; SSE4-NEXT: retq 4735; 4736; AVX1-LABEL: test120: 4737; AVX1: # BB#0: # %entry 4738; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4739; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4740; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 4741; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 4742; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 4743; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 4744; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4745; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 4746; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 4747; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 4748; AVX1-NEXT: retq 4749; 4750; AVX2-LABEL: test120: 4751; AVX2: # BB#0: # %entry 4752; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 4753; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 4754; AVX2-NEXT: retq 4755; 4756; AVX512F-LABEL: test120: 4757; AVX512F: # BB#0: # %entry 4758; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 4759; AVX512F-NEXT: retq 4760entry: 4761 %cmp = icmp uge <16 x i32> %a, %b 4762 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b 4763 ret <16 x i32> %sel 4764} 4765 4766define <8 x i64> @test121(<8 x i64> %a, <8 x i64> %b) { 4767; SSE2-LABEL: test121: 4768; SSE2: # BB#0: # %entry 4769; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,0,2147483648,0] 4770; SSE2-NEXT: movdqa %xmm3, %xmm8 4771; SSE2-NEXT: pxor %xmm9, %xmm8 4772; SSE2-NEXT: movdqa %xmm7, %xmm10 4773; SSE2-NEXT: pxor %xmm9, %xmm10 4774; SSE2-NEXT: movdqa %xmm10, %xmm11 4775; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 4776; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4777; SSE2-NEXT: pcmpeqd %xmm8, %xmm10 4778; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 4779; SSE2-NEXT: pand %xmm12, %xmm10 4780; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3] 4781; SSE2-NEXT: por %xmm10, %xmm8 4782; SSE2-NEXT: movdqa %xmm2, %xmm10 4783; SSE2-NEXT: pxor %xmm9, %xmm10 4784; SSE2-NEXT: movdqa %xmm6, %xmm11 4785; SSE2-NEXT: pxor %xmm9, %xmm11 4786; SSE2-NEXT: movdqa %xmm11, %xmm12 4787; SSE2-NEXT: pcmpgtd %xmm10, %xmm12 4788; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 4789; SSE2-NEXT: pcmpeqd %xmm10, %xmm11 4790; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3] 4791; SSE2-NEXT: pand %xmm13, %xmm11 4792; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3] 4793; SSE2-NEXT: por %xmm11, %xmm10 4794; SSE2-NEXT: movdqa %xmm1, %xmm11 4795; SSE2-NEXT: pxor %xmm9, %xmm11 4796; SSE2-NEXT: movdqa %xmm5, %xmm12 4797; SSE2-NEXT: pxor %xmm9, %xmm12 4798; SSE2-NEXT: movdqa %xmm12, %xmm13 4799; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 4800; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 4801; SSE2-NEXT: pcmpeqd %xmm11, %xmm12 4802; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3] 4803; SSE2-NEXT: pand %xmm14, %xmm11 4804; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3] 4805; SSE2-NEXT: por %xmm11, %xmm12 4806; SSE2-NEXT: movdqa %xmm0, %xmm11 4807; SSE2-NEXT: pxor %xmm9, %xmm11 4808; SSE2-NEXT: pxor %xmm4, %xmm9 4809; SSE2-NEXT: movdqa %xmm9, %xmm13 4810; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 4811; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 4812; SSE2-NEXT: pcmpeqd %xmm11, %xmm9 4813; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 4814; SSE2-NEXT: pand %xmm14, %xmm9 4815; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 4816; SSE2-NEXT: por %xmm9, %xmm11 4817; SSE2-NEXT: pand %xmm11, %xmm0 4818; SSE2-NEXT: pandn %xmm4, %xmm11 4819; SSE2-NEXT: por %xmm11, %xmm0 4820; SSE2-NEXT: pand %xmm12, %xmm1 4821; SSE2-NEXT: pandn %xmm5, %xmm12 4822; SSE2-NEXT: por %xmm12, %xmm1 4823; SSE2-NEXT: pand %xmm10, %xmm2 4824; SSE2-NEXT: pandn %xmm6, %xmm10 4825; SSE2-NEXT: por %xmm10, %xmm2 4826; SSE2-NEXT: pand %xmm8, %xmm3 4827; SSE2-NEXT: pandn %xmm7, %xmm8 4828; SSE2-NEXT: por %xmm8, %xmm3 4829; SSE2-NEXT: retq 4830; 4831; SSE4-LABEL: test121: 4832; SSE4: # BB#0: # %entry 4833; SSE4-NEXT: movdqa %xmm0, %xmm8 4834; SSE4-NEXT: movdqa %xmm7, %xmm9 4835; SSE4-NEXT: pcmpgtq %xmm3, %xmm9 4836; SSE4-NEXT: movdqa %xmm6, %xmm10 4837; SSE4-NEXT: pcmpgtq %xmm2, %xmm10 4838; SSE4-NEXT: movdqa %xmm5, %xmm11 4839; SSE4-NEXT: pcmpgtq %xmm1, %xmm11 4840; SSE4-NEXT: movdqa %xmm4, %xmm0 4841; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 4842; SSE4-NEXT: blendvpd %xmm8, %xmm4 4843; SSE4-NEXT: movdqa %xmm11, %xmm0 4844; SSE4-NEXT: blendvpd %xmm1, %xmm5 4845; SSE4-NEXT: movdqa %xmm10, %xmm0 4846; SSE4-NEXT: blendvpd %xmm2, %xmm6 4847; SSE4-NEXT: movdqa %xmm9, %xmm0 4848; SSE4-NEXT: blendvpd %xmm3, %xmm7 4849; SSE4-NEXT: movapd %xmm4, %xmm0 4850; SSE4-NEXT: movapd %xmm5, %xmm1 4851; SSE4-NEXT: movapd %xmm6, %xmm2 4852; SSE4-NEXT: movapd %xmm7, %xmm3 4853; SSE4-NEXT: retq 4854; 4855; AVX1-LABEL: test121: 4856; AVX1: # BB#0: # %entry 4857; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 4858; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5 4859; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 4860; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm5 4861; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 4862; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 4863; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 4864; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 4865; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm6 4866; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5 4867; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 4868; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 4869; AVX1-NEXT: retq 4870; 4871; AVX2-LABEL: test121: 4872; AVX2: # BB#0: # %entry 4873; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm4 4874; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm5 4875; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 4876; AVX2-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 4877; AVX2-NEXT: retq 4878; 4879; AVX512F-LABEL: test121: 4880; AVX512F: # BB#0: # %entry 4881; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 4882; AVX512F-NEXT: retq 4883entry: 4884 %cmp = icmp slt <8 x i64> %a, %b 4885 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 4886 ret <8 x i64> %sel 4887} 4888 4889define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) { 4890; SSE2-LABEL: test122: 4891; SSE2: # BB#0: # %entry 4892; SSE2-NEXT: movdqa %xmm7, %xmm8 4893; SSE2-NEXT: movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill 4894; SSE2-NEXT: movdqa %xmm3, %xmm7 4895; SSE2-NEXT: movdqa %xmm2, %xmm3 4896; SSE2-NEXT: movdqa %xmm1, %xmm2 4897; SSE2-NEXT: movdqa %xmm0, %xmm9 4898; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0] 4899; SSE2-NEXT: pxor %xmm10, %xmm8 4900; SSE2-NEXT: movdqa %xmm7, %xmm0 4901; SSE2-NEXT: pxor %xmm10, %xmm0 4902; SSE2-NEXT: movdqa %xmm0, %xmm11 4903; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 4904; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 4905; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 4906; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 4907; SSE2-NEXT: pand %xmm12, %xmm0 4908; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 4909; SSE2-NEXT: por %xmm0, %xmm12 4910; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 4911; SSE2-NEXT: movdqa %xmm12, %xmm8 4912; SSE2-NEXT: pxor %xmm1, %xmm8 4913; SSE2-NEXT: movdqa %xmm6, %xmm11 4914; SSE2-NEXT: pxor %xmm10, %xmm11 4915; SSE2-NEXT: movdqa %xmm3, %xmm13 4916; SSE2-NEXT: pxor %xmm10, %xmm13 4917; SSE2-NEXT: movdqa %xmm13, %xmm14 4918; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 4919; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 4920; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 4921; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 4922; SSE2-NEXT: pand %xmm15, %xmm11 4923; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 4924; SSE2-NEXT: por %xmm11, %xmm13 4925; SSE2-NEXT: movdqa %xmm5, %xmm11 4926; SSE2-NEXT: pxor %xmm10, %xmm11 4927; SSE2-NEXT: movdqa %xmm2, %xmm14 4928; SSE2-NEXT: pxor %xmm10, %xmm14 4929; SSE2-NEXT: movdqa %xmm14, %xmm15 4930; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 4931; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 4932; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 4933; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 4934; SSE2-NEXT: pand %xmm11, %xmm14 4935; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 4936; SSE2-NEXT: por %xmm14, %xmm15 4937; SSE2-NEXT: movdqa %xmm4, %xmm11 4938; SSE2-NEXT: pxor %xmm10, %xmm11 4939; SSE2-NEXT: pxor %xmm9, %xmm10 4940; SSE2-NEXT: movdqa %xmm10, %xmm14 4941; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 4942; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 4943; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 4944; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 4945; SSE2-NEXT: pand %xmm11, %xmm0 4946; SSE2-NEXT: movdqa %xmm13, %xmm10 4947; SSE2-NEXT: pxor %xmm1, %xmm10 4948; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 4949; SSE2-NEXT: por %xmm0, %xmm14 4950; SSE2-NEXT: movdqa %xmm15, %xmm11 4951; SSE2-NEXT: pxor %xmm1, %xmm11 4952; SSE2-NEXT: pxor %xmm14, %xmm1 4953; SSE2-NEXT: pandn %xmm9, %xmm14 4954; SSE2-NEXT: pandn %xmm4, %xmm1 4955; SSE2-NEXT: por %xmm14, %xmm1 4956; SSE2-NEXT: pandn %xmm2, %xmm15 4957; SSE2-NEXT: pandn %xmm5, %xmm11 4958; SSE2-NEXT: por %xmm15, %xmm11 4959; SSE2-NEXT: pandn %xmm3, %xmm13 4960; SSE2-NEXT: pandn %xmm6, %xmm10 4961; SSE2-NEXT: por %xmm13, %xmm10 4962; SSE2-NEXT: pandn %xmm7, %xmm12 4963; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload 4964; SSE2-NEXT: por %xmm12, %xmm8 4965; SSE2-NEXT: movdqa %xmm1, %xmm0 4966; SSE2-NEXT: movdqa %xmm11, %xmm1 4967; SSE2-NEXT: movdqa %xmm10, %xmm2 4968; SSE2-NEXT: movdqa %xmm8, %xmm3 4969; SSE2-NEXT: retq 4970; 4971; SSE4-LABEL: test122: 4972; SSE4: # BB#0: # %entry 4973; SSE4-NEXT: movdqa %xmm0, %xmm8 4974; SSE4-NEXT: movdqa %xmm3, %xmm9 4975; SSE4-NEXT: pcmpgtq %xmm7, %xmm9 4976; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 4977; SSE4-NEXT: pxor %xmm12, %xmm9 4978; SSE4-NEXT: movdqa %xmm2, %xmm10 4979; SSE4-NEXT: pcmpgtq %xmm6, %xmm10 4980; SSE4-NEXT: pxor %xmm12, %xmm10 4981; SSE4-NEXT: movdqa %xmm1, %xmm11 4982; SSE4-NEXT: pcmpgtq %xmm5, %xmm11 4983; SSE4-NEXT: pxor %xmm12, %xmm11 4984; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 4985; SSE4-NEXT: pxor %xmm12, %xmm0 4986; SSE4-NEXT: blendvpd %xmm8, %xmm4 4987; SSE4-NEXT: movdqa %xmm11, %xmm0 4988; SSE4-NEXT: blendvpd %xmm1, %xmm5 4989; SSE4-NEXT: movdqa %xmm10, %xmm0 4990; SSE4-NEXT: blendvpd %xmm2, %xmm6 4991; SSE4-NEXT: movdqa %xmm9, %xmm0 4992; SSE4-NEXT: blendvpd %xmm3, %xmm7 4993; SSE4-NEXT: movapd %xmm4, %xmm0 4994; SSE4-NEXT: movapd %xmm5, %xmm1 4995; SSE4-NEXT: movapd %xmm6, %xmm2 4996; SSE4-NEXT: movapd %xmm7, %xmm3 4997; SSE4-NEXT: retq 4998; 4999; AVX1-LABEL: test122: 5000; AVX1: # BB#0: # %entry 5001; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5002; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 5003; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5004; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5 5005; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5006; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm6 5007; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5008; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5009; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 5010; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7 5011; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5012; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5013; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm7 5014; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm5 5015; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 5016; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5017; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5018; AVX1-NEXT: retq 5019; 5020; AVX2-LABEL: test122: 5021; AVX2: # BB#0: # %entry 5022; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm4 5023; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5 5024; AVX2-NEXT: vpxor %ymm5, %ymm4, %ymm4 5025; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm6 5026; AVX2-NEXT: vpxor %ymm5, %ymm6, %ymm5 5027; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5028; AVX2-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5029; AVX2-NEXT: retq 5030; 5031; AVX512F-LABEL: test122: 5032; AVX512F: # BB#0: # %entry 5033; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 5034; AVX512F-NEXT: retq 5035entry: 5036 %cmp = icmp sle <8 x i64> %a, %b 5037 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5038 ret <8 x i64> %sel 5039} 5040 5041define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) { 5042; SSE2-LABEL: test123: 5043; SSE2: # BB#0: # %entry 5044; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,0,2147483648,0] 5045; SSE2-NEXT: movdqa %xmm7, %xmm8 5046; SSE2-NEXT: pxor %xmm9, %xmm8 5047; SSE2-NEXT: movdqa %xmm3, %xmm10 5048; SSE2-NEXT: pxor %xmm9, %xmm10 5049; SSE2-NEXT: movdqa %xmm10, %xmm11 5050; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 5051; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5052; SSE2-NEXT: pcmpeqd %xmm8, %xmm10 5053; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 5054; SSE2-NEXT: pand %xmm12, %xmm10 5055; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3] 5056; SSE2-NEXT: por %xmm10, %xmm8 5057; SSE2-NEXT: movdqa %xmm6, %xmm10 5058; SSE2-NEXT: pxor %xmm9, %xmm10 5059; SSE2-NEXT: movdqa %xmm2, %xmm11 5060; SSE2-NEXT: pxor %xmm9, %xmm11 5061; SSE2-NEXT: movdqa %xmm11, %xmm12 5062; SSE2-NEXT: pcmpgtd %xmm10, %xmm12 5063; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 5064; SSE2-NEXT: pcmpeqd %xmm10, %xmm11 5065; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3] 5066; SSE2-NEXT: pand %xmm13, %xmm11 5067; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3] 5068; SSE2-NEXT: por %xmm11, %xmm10 5069; SSE2-NEXT: movdqa %xmm5, %xmm11 5070; SSE2-NEXT: pxor %xmm9, %xmm11 5071; SSE2-NEXT: movdqa %xmm1, %xmm12 5072; SSE2-NEXT: pxor %xmm9, %xmm12 5073; SSE2-NEXT: movdqa %xmm12, %xmm13 5074; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 5075; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 5076; SSE2-NEXT: pcmpeqd %xmm11, %xmm12 5077; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3] 5078; SSE2-NEXT: pand %xmm14, %xmm11 5079; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3] 5080; SSE2-NEXT: por %xmm11, %xmm12 5081; SSE2-NEXT: movdqa %xmm4, %xmm11 5082; SSE2-NEXT: pxor %xmm9, %xmm11 5083; SSE2-NEXT: pxor %xmm0, %xmm9 5084; SSE2-NEXT: movdqa %xmm9, %xmm13 5085; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 5086; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 5087; SSE2-NEXT: pcmpeqd %xmm11, %xmm9 5088; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 5089; SSE2-NEXT: pand %xmm14, %xmm9 5090; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 5091; SSE2-NEXT: por %xmm9, %xmm11 5092; SSE2-NEXT: pand %xmm11, %xmm0 5093; SSE2-NEXT: pandn %xmm4, %xmm11 5094; SSE2-NEXT: por %xmm11, %xmm0 5095; SSE2-NEXT: pand %xmm12, %xmm1 5096; SSE2-NEXT: pandn %xmm5, %xmm12 5097; SSE2-NEXT: por %xmm12, %xmm1 5098; SSE2-NEXT: pand %xmm10, %xmm2 5099; SSE2-NEXT: pandn %xmm6, %xmm10 5100; SSE2-NEXT: por %xmm10, %xmm2 5101; SSE2-NEXT: pand %xmm8, %xmm3 5102; SSE2-NEXT: pandn %xmm7, %xmm8 5103; SSE2-NEXT: por %xmm8, %xmm3 5104; SSE2-NEXT: retq 5105; 5106; SSE4-LABEL: test123: 5107; SSE4: # BB#0: # %entry 5108; SSE4-NEXT: movdqa %xmm0, %xmm8 5109; SSE4-NEXT: movdqa %xmm3, %xmm9 5110; SSE4-NEXT: pcmpgtq %xmm7, %xmm9 5111; SSE4-NEXT: movdqa %xmm2, %xmm10 5112; SSE4-NEXT: pcmpgtq %xmm6, %xmm10 5113; SSE4-NEXT: movdqa %xmm1, %xmm11 5114; SSE4-NEXT: pcmpgtq %xmm5, %xmm11 5115; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 5116; SSE4-NEXT: blendvpd %xmm8, %xmm4 5117; SSE4-NEXT: movdqa %xmm11, %xmm0 5118; SSE4-NEXT: blendvpd %xmm1, %xmm5 5119; SSE4-NEXT: movdqa %xmm10, %xmm0 5120; SSE4-NEXT: blendvpd %xmm2, %xmm6 5121; SSE4-NEXT: movdqa %xmm9, %xmm0 5122; SSE4-NEXT: blendvpd %xmm3, %xmm7 5123; SSE4-NEXT: movapd %xmm4, %xmm0 5124; SSE4-NEXT: movapd %xmm5, %xmm1 5125; SSE4-NEXT: movapd %xmm6, %xmm2 5126; SSE4-NEXT: movapd %xmm7, %xmm3 5127; SSE4-NEXT: retq 5128; 5129; AVX1-LABEL: test123: 5130; AVX1: # BB#0: # %entry 5131; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5132; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 5133; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5134; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm5 5135; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 5136; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 5137; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5138; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 5139; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm6 5140; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5 5141; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5142; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5143; AVX1-NEXT: retq 5144; 5145; AVX2-LABEL: test123: 5146; AVX2: # BB#0: # %entry 5147; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm4 5148; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm5 5149; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5150; AVX2-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5151; AVX2-NEXT: retq 5152; 5153; AVX512F-LABEL: test123: 5154; AVX512F: # BB#0: # %entry 5155; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 5156; AVX512F-NEXT: retq 5157entry: 5158 %cmp = icmp sgt <8 x i64> %a, %b 5159 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5160 ret <8 x i64> %sel 5161} 5162 5163define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) { 5164; SSE2-LABEL: test124: 5165; SSE2: # BB#0: # %entry 5166; SSE2-NEXT: movdqa %xmm7, %xmm11 5167; SSE2-NEXT: movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill 5168; SSE2-NEXT: movdqa %xmm3, %xmm7 5169; SSE2-NEXT: movdqa %xmm2, %xmm3 5170; SSE2-NEXT: movdqa %xmm1, %xmm2 5171; SSE2-NEXT: movdqa %xmm0, %xmm9 5172; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0] 5173; SSE2-NEXT: movdqa %xmm7, %xmm8 5174; SSE2-NEXT: pxor %xmm10, %xmm8 5175; SSE2-NEXT: movdqa %xmm11, %xmm0 5176; SSE2-NEXT: pxor %xmm10, %xmm0 5177; SSE2-NEXT: movdqa %xmm0, %xmm11 5178; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 5179; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5180; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 5181; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 5182; SSE2-NEXT: pand %xmm12, %xmm0 5183; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 5184; SSE2-NEXT: por %xmm0, %xmm12 5185; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 5186; SSE2-NEXT: movdqa %xmm12, %xmm8 5187; SSE2-NEXT: pxor %xmm1, %xmm8 5188; SSE2-NEXT: movdqa %xmm3, %xmm11 5189; SSE2-NEXT: pxor %xmm10, %xmm11 5190; SSE2-NEXT: movdqa %xmm6, %xmm13 5191; SSE2-NEXT: pxor %xmm10, %xmm13 5192; SSE2-NEXT: movdqa %xmm13, %xmm14 5193; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 5194; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 5195; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 5196; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 5197; SSE2-NEXT: pand %xmm15, %xmm11 5198; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 5199; SSE2-NEXT: por %xmm11, %xmm13 5200; SSE2-NEXT: movdqa %xmm2, %xmm11 5201; SSE2-NEXT: pxor %xmm10, %xmm11 5202; SSE2-NEXT: movdqa %xmm5, %xmm14 5203; SSE2-NEXT: pxor %xmm10, %xmm14 5204; SSE2-NEXT: movdqa %xmm14, %xmm15 5205; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 5206; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 5207; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 5208; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 5209; SSE2-NEXT: pand %xmm11, %xmm14 5210; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 5211; SSE2-NEXT: por %xmm14, %xmm15 5212; SSE2-NEXT: movdqa %xmm9, %xmm11 5213; SSE2-NEXT: pxor %xmm10, %xmm11 5214; SSE2-NEXT: pxor %xmm4, %xmm10 5215; SSE2-NEXT: movdqa %xmm10, %xmm14 5216; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 5217; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 5218; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 5219; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 5220; SSE2-NEXT: pand %xmm11, %xmm0 5221; SSE2-NEXT: movdqa %xmm13, %xmm10 5222; SSE2-NEXT: pxor %xmm1, %xmm10 5223; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 5224; SSE2-NEXT: por %xmm0, %xmm14 5225; SSE2-NEXT: movdqa %xmm15, %xmm11 5226; SSE2-NEXT: pxor %xmm1, %xmm11 5227; SSE2-NEXT: pxor %xmm14, %xmm1 5228; SSE2-NEXT: pandn %xmm9, %xmm14 5229; SSE2-NEXT: pandn %xmm4, %xmm1 5230; SSE2-NEXT: por %xmm14, %xmm1 5231; SSE2-NEXT: pandn %xmm2, %xmm15 5232; SSE2-NEXT: pandn %xmm5, %xmm11 5233; SSE2-NEXT: por %xmm15, %xmm11 5234; SSE2-NEXT: pandn %xmm3, %xmm13 5235; SSE2-NEXT: pandn %xmm6, %xmm10 5236; SSE2-NEXT: por %xmm13, %xmm10 5237; SSE2-NEXT: pandn %xmm7, %xmm12 5238; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload 5239; SSE2-NEXT: por %xmm12, %xmm8 5240; SSE2-NEXT: movdqa %xmm1, %xmm0 5241; SSE2-NEXT: movdqa %xmm11, %xmm1 5242; SSE2-NEXT: movdqa %xmm10, %xmm2 5243; SSE2-NEXT: movdqa %xmm8, %xmm3 5244; SSE2-NEXT: retq 5245; 5246; SSE4-LABEL: test124: 5247; SSE4: # BB#0: # %entry 5248; SSE4-NEXT: movdqa %xmm0, %xmm8 5249; SSE4-NEXT: movdqa %xmm7, %xmm9 5250; SSE4-NEXT: pcmpgtq %xmm3, %xmm9 5251; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 5252; SSE4-NEXT: pxor %xmm0, %xmm9 5253; SSE4-NEXT: movdqa %xmm6, %xmm10 5254; SSE4-NEXT: pcmpgtq %xmm2, %xmm10 5255; SSE4-NEXT: pxor %xmm0, %xmm10 5256; SSE4-NEXT: movdqa %xmm5, %xmm11 5257; SSE4-NEXT: pcmpgtq %xmm1, %xmm11 5258; SSE4-NEXT: pxor %xmm0, %xmm11 5259; SSE4-NEXT: movdqa %xmm4, %xmm12 5260; SSE4-NEXT: pcmpgtq %xmm8, %xmm12 5261; SSE4-NEXT: pxor %xmm12, %xmm0 5262; SSE4-NEXT: blendvpd %xmm8, %xmm4 5263; SSE4-NEXT: movdqa %xmm11, %xmm0 5264; SSE4-NEXT: blendvpd %xmm1, %xmm5 5265; SSE4-NEXT: movdqa %xmm10, %xmm0 5266; SSE4-NEXT: blendvpd %xmm2, %xmm6 5267; SSE4-NEXT: movdqa %xmm9, %xmm0 5268; SSE4-NEXT: blendvpd %xmm3, %xmm7 5269; SSE4-NEXT: movapd %xmm4, %xmm0 5270; SSE4-NEXT: movapd %xmm5, %xmm1 5271; SSE4-NEXT: movapd %xmm6, %xmm2 5272; SSE4-NEXT: movapd %xmm7, %xmm3 5273; SSE4-NEXT: retq 5274; 5275; AVX1-LABEL: test124: 5276; AVX1: # BB#0: # %entry 5277; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5278; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5 5279; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 5280; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5 5281; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 5282; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm6 5283; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5284; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5285; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5286; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 5287; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5288; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 5289; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm7 5290; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm5 5291; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 5292; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5293; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5294; AVX1-NEXT: retq 5295; 5296; AVX2-LABEL: test124: 5297; AVX2: # BB#0: # %entry 5298; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm4 5299; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5 5300; AVX2-NEXT: vpxor %ymm5, %ymm4, %ymm4 5301; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm6 5302; AVX2-NEXT: vpxor %ymm5, %ymm6, %ymm5 5303; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5304; AVX2-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5305; AVX2-NEXT: retq 5306; 5307; AVX512F-LABEL: test124: 5308; AVX512F: # BB#0: # %entry 5309; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 5310; AVX512F-NEXT: retq 5311entry: 5312 %cmp = icmp sge <8 x i64> %a, %b 5313 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5314 ret <8 x i64> %sel 5315} 5316 5317define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) { 5318; SSE2-LABEL: test125: 5319; SSE2: # BB#0: # %entry 5320; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648] 5321; SSE2-NEXT: movdqa %xmm3, %xmm8 5322; SSE2-NEXT: pxor %xmm9, %xmm8 5323; SSE2-NEXT: movdqa %xmm7, %xmm10 5324; SSE2-NEXT: pxor %xmm9, %xmm10 5325; SSE2-NEXT: movdqa %xmm10, %xmm11 5326; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 5327; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5328; SSE2-NEXT: pcmpeqd %xmm8, %xmm10 5329; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 5330; SSE2-NEXT: pand %xmm12, %xmm10 5331; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3] 5332; SSE2-NEXT: por %xmm10, %xmm8 5333; SSE2-NEXT: movdqa %xmm2, %xmm10 5334; SSE2-NEXT: pxor %xmm9, %xmm10 5335; SSE2-NEXT: movdqa %xmm6, %xmm11 5336; SSE2-NEXT: pxor %xmm9, %xmm11 5337; SSE2-NEXT: movdqa %xmm11, %xmm12 5338; SSE2-NEXT: pcmpgtd %xmm10, %xmm12 5339; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 5340; SSE2-NEXT: pcmpeqd %xmm10, %xmm11 5341; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3] 5342; SSE2-NEXT: pand %xmm13, %xmm11 5343; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3] 5344; SSE2-NEXT: por %xmm11, %xmm10 5345; SSE2-NEXT: movdqa %xmm1, %xmm11 5346; SSE2-NEXT: pxor %xmm9, %xmm11 5347; SSE2-NEXT: movdqa %xmm5, %xmm12 5348; SSE2-NEXT: pxor %xmm9, %xmm12 5349; SSE2-NEXT: movdqa %xmm12, %xmm13 5350; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 5351; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 5352; SSE2-NEXT: pcmpeqd %xmm11, %xmm12 5353; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3] 5354; SSE2-NEXT: pand %xmm14, %xmm11 5355; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3] 5356; SSE2-NEXT: por %xmm11, %xmm12 5357; SSE2-NEXT: movdqa %xmm0, %xmm11 5358; SSE2-NEXT: pxor %xmm9, %xmm11 5359; SSE2-NEXT: pxor %xmm4, %xmm9 5360; SSE2-NEXT: movdqa %xmm9, %xmm13 5361; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 5362; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 5363; SSE2-NEXT: pcmpeqd %xmm11, %xmm9 5364; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 5365; SSE2-NEXT: pand %xmm14, %xmm9 5366; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 5367; SSE2-NEXT: por %xmm9, %xmm11 5368; SSE2-NEXT: pand %xmm11, %xmm0 5369; SSE2-NEXT: pandn %xmm4, %xmm11 5370; SSE2-NEXT: por %xmm11, %xmm0 5371; SSE2-NEXT: pand %xmm12, %xmm1 5372; SSE2-NEXT: pandn %xmm5, %xmm12 5373; SSE2-NEXT: por %xmm12, %xmm1 5374; SSE2-NEXT: pand %xmm10, %xmm2 5375; SSE2-NEXT: pandn %xmm6, %xmm10 5376; SSE2-NEXT: por %xmm10, %xmm2 5377; SSE2-NEXT: pand %xmm8, %xmm3 5378; SSE2-NEXT: pandn %xmm7, %xmm8 5379; SSE2-NEXT: por %xmm8, %xmm3 5380; SSE2-NEXT: retq 5381; 5382; SSE4-LABEL: test125: 5383; SSE4: # BB#0: # %entry 5384; SSE4-NEXT: movdqa %xmm0, %xmm8 5385; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 5386; SSE4-NEXT: movdqa %xmm3, %xmm10 5387; SSE4-NEXT: pxor %xmm0, %xmm10 5388; SSE4-NEXT: movdqa %xmm7, %xmm9 5389; SSE4-NEXT: pxor %xmm0, %xmm9 5390; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 5391; SSE4-NEXT: movdqa %xmm2, %xmm11 5392; SSE4-NEXT: pxor %xmm0, %xmm11 5393; SSE4-NEXT: movdqa %xmm6, %xmm10 5394; SSE4-NEXT: pxor %xmm0, %xmm10 5395; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 5396; SSE4-NEXT: movdqa %xmm1, %xmm12 5397; SSE4-NEXT: pxor %xmm0, %xmm12 5398; SSE4-NEXT: movdqa %xmm5, %xmm11 5399; SSE4-NEXT: pxor %xmm0, %xmm11 5400; SSE4-NEXT: pcmpgtq %xmm12, %xmm11 5401; SSE4-NEXT: movdqa %xmm8, %xmm12 5402; SSE4-NEXT: pxor %xmm0, %xmm12 5403; SSE4-NEXT: pxor %xmm4, %xmm0 5404; SSE4-NEXT: pcmpgtq %xmm12, %xmm0 5405; SSE4-NEXT: blendvpd %xmm8, %xmm4 5406; SSE4-NEXT: movdqa %xmm11, %xmm0 5407; SSE4-NEXT: blendvpd %xmm1, %xmm5 5408; SSE4-NEXT: movdqa %xmm10, %xmm0 5409; SSE4-NEXT: blendvpd %xmm2, %xmm6 5410; SSE4-NEXT: movdqa %xmm9, %xmm0 5411; SSE4-NEXT: blendvpd %xmm3, %xmm7 5412; SSE4-NEXT: movapd %xmm4, %xmm0 5413; SSE4-NEXT: movapd %xmm5, %xmm1 5414; SSE4-NEXT: movapd %xmm6, %xmm2 5415; SSE4-NEXT: movapd %xmm7, %xmm3 5416; SSE4-NEXT: retq 5417; 5418; AVX1-LABEL: test125: 5419; AVX1: # BB#0: # %entry 5420; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5421; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5422; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 5423; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6 5424; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5425; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5426; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm6 5427; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm7 5428; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5429; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5430; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5431; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5432; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 5433; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 5434; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5435; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm7 5436; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm5 5437; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 5438; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 5439; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5440; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5441; AVX1-NEXT: retq 5442; 5443; AVX2-LABEL: test125: 5444; AVX2: # BB#0: # %entry 5445; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 5446; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm5 5447; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm6 5448; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5449; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 5450; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm4 5451; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm4 5452; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5453; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1 5454; AVX2-NEXT: retq 5455; 5456; AVX512F-LABEL: test125: 5457; AVX512F: # BB#0: # %entry 5458; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 5459; AVX512F-NEXT: retq 5460entry: 5461 %cmp = icmp ult <8 x i64> %a, %b 5462 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5463 ret <8 x i64> %sel 5464} 5465 5466define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) { 5467; SSE2-LABEL: test126: 5468; SSE2: # BB#0: # %entry 5469; SSE2-NEXT: movdqa %xmm7, %xmm8 5470; SSE2-NEXT: movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill 5471; SSE2-NEXT: movdqa %xmm3, %xmm7 5472; SSE2-NEXT: movdqa %xmm2, %xmm3 5473; SSE2-NEXT: movdqa %xmm1, %xmm2 5474; SSE2-NEXT: movdqa %xmm0, %xmm9 5475; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648] 5476; SSE2-NEXT: pxor %xmm10, %xmm8 5477; SSE2-NEXT: movdqa %xmm7, %xmm0 5478; SSE2-NEXT: pxor %xmm10, %xmm0 5479; SSE2-NEXT: movdqa %xmm0, %xmm11 5480; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 5481; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5482; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 5483; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 5484; SSE2-NEXT: pand %xmm12, %xmm0 5485; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 5486; SSE2-NEXT: por %xmm0, %xmm12 5487; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 5488; SSE2-NEXT: movdqa %xmm12, %xmm8 5489; SSE2-NEXT: pxor %xmm1, %xmm8 5490; SSE2-NEXT: movdqa %xmm6, %xmm11 5491; SSE2-NEXT: pxor %xmm10, %xmm11 5492; SSE2-NEXT: movdqa %xmm3, %xmm13 5493; SSE2-NEXT: pxor %xmm10, %xmm13 5494; SSE2-NEXT: movdqa %xmm13, %xmm14 5495; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 5496; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 5497; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 5498; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 5499; SSE2-NEXT: pand %xmm15, %xmm11 5500; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 5501; SSE2-NEXT: por %xmm11, %xmm13 5502; SSE2-NEXT: movdqa %xmm5, %xmm11 5503; SSE2-NEXT: pxor %xmm10, %xmm11 5504; SSE2-NEXT: movdqa %xmm2, %xmm14 5505; SSE2-NEXT: pxor %xmm10, %xmm14 5506; SSE2-NEXT: movdqa %xmm14, %xmm15 5507; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 5508; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 5509; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 5510; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 5511; SSE2-NEXT: pand %xmm11, %xmm14 5512; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 5513; SSE2-NEXT: por %xmm14, %xmm15 5514; SSE2-NEXT: movdqa %xmm4, %xmm11 5515; SSE2-NEXT: pxor %xmm10, %xmm11 5516; SSE2-NEXT: pxor %xmm9, %xmm10 5517; SSE2-NEXT: movdqa %xmm10, %xmm14 5518; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 5519; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 5520; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 5521; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 5522; SSE2-NEXT: pand %xmm11, %xmm0 5523; SSE2-NEXT: movdqa %xmm13, %xmm10 5524; SSE2-NEXT: pxor %xmm1, %xmm10 5525; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 5526; SSE2-NEXT: por %xmm0, %xmm14 5527; SSE2-NEXT: movdqa %xmm15, %xmm11 5528; SSE2-NEXT: pxor %xmm1, %xmm11 5529; SSE2-NEXT: pxor %xmm14, %xmm1 5530; SSE2-NEXT: pandn %xmm9, %xmm14 5531; SSE2-NEXT: pandn %xmm4, %xmm1 5532; SSE2-NEXT: por %xmm14, %xmm1 5533; SSE2-NEXT: pandn %xmm2, %xmm15 5534; SSE2-NEXT: pandn %xmm5, %xmm11 5535; SSE2-NEXT: por %xmm15, %xmm11 5536; SSE2-NEXT: pandn %xmm3, %xmm13 5537; SSE2-NEXT: pandn %xmm6, %xmm10 5538; SSE2-NEXT: por %xmm13, %xmm10 5539; SSE2-NEXT: pandn %xmm7, %xmm12 5540; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload 5541; SSE2-NEXT: por %xmm12, %xmm8 5542; SSE2-NEXT: movdqa %xmm1, %xmm0 5543; SSE2-NEXT: movdqa %xmm11, %xmm1 5544; SSE2-NEXT: movdqa %xmm10, %xmm2 5545; SSE2-NEXT: movdqa %xmm8, %xmm3 5546; SSE2-NEXT: retq 5547; 5548; SSE4-LABEL: test126: 5549; SSE4: # BB#0: # %entry 5550; SSE4-NEXT: movdqa %xmm0, %xmm9 5551; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 5552; SSE4-NEXT: movdqa %xmm7, %xmm10 5553; SSE4-NEXT: pxor %xmm0, %xmm10 5554; SSE4-NEXT: movdqa %xmm3, %xmm8 5555; SSE4-NEXT: pxor %xmm0, %xmm8 5556; SSE4-NEXT: pcmpgtq %xmm10, %xmm8 5557; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 5558; SSE4-NEXT: pxor %xmm12, %xmm8 5559; SSE4-NEXT: movdqa %xmm6, %xmm11 5560; SSE4-NEXT: pxor %xmm0, %xmm11 5561; SSE4-NEXT: movdqa %xmm2, %xmm10 5562; SSE4-NEXT: pxor %xmm0, %xmm10 5563; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 5564; SSE4-NEXT: pxor %xmm12, %xmm10 5565; SSE4-NEXT: movdqa %xmm5, %xmm13 5566; SSE4-NEXT: pxor %xmm0, %xmm13 5567; SSE4-NEXT: movdqa %xmm1, %xmm11 5568; SSE4-NEXT: pxor %xmm0, %xmm11 5569; SSE4-NEXT: pcmpgtq %xmm13, %xmm11 5570; SSE4-NEXT: pxor %xmm12, %xmm11 5571; SSE4-NEXT: movdqa %xmm4, %xmm13 5572; SSE4-NEXT: pxor %xmm0, %xmm13 5573; SSE4-NEXT: pxor %xmm9, %xmm0 5574; SSE4-NEXT: pcmpgtq %xmm13, %xmm0 5575; SSE4-NEXT: pxor %xmm12, %xmm0 5576; SSE4-NEXT: blendvpd %xmm9, %xmm4 5577; SSE4-NEXT: movdqa %xmm11, %xmm0 5578; SSE4-NEXT: blendvpd %xmm1, %xmm5 5579; SSE4-NEXT: movdqa %xmm10, %xmm0 5580; SSE4-NEXT: blendvpd %xmm2, %xmm6 5581; SSE4-NEXT: movdqa %xmm8, %xmm0 5582; SSE4-NEXT: blendvpd %xmm3, %xmm7 5583; SSE4-NEXT: movapd %xmm4, %xmm0 5584; SSE4-NEXT: movapd %xmm5, %xmm1 5585; SSE4-NEXT: movapd %xmm6, %xmm2 5586; SSE4-NEXT: movapd %xmm7, %xmm3 5587; SSE4-NEXT: retq 5588; 5589; AVX1-LABEL: test126: 5590; AVX1: # BB#0: # %entry 5591; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5592; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5593; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 5594; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6 5595; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5596; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5597; AVX1-NEXT: vpcmpeqd %xmm8, %xmm8, %xmm8 5598; AVX1-NEXT: vpxor %xmm8, %xmm4, %xmm4 5599; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm7 5600; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm6 5601; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6 5602; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 5603; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5604; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 5605; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5606; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7 5607; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 5608; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5609; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 5610; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm7 5611; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm5 5612; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 5613; AVX1-NEXT: vpxor %xmm8, %xmm5, %xmm5 5614; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 5615; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5616; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5617; AVX1-NEXT: retq 5618; 5619; AVX2-LABEL: test126: 5620; AVX2: # BB#0: # %entry 5621; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 5622; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm5 5623; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm6 5624; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5625; AVX2-NEXT: vpcmpeqd %ymm6, %ymm6, %ymm6 5626; AVX2-NEXT: vpxor %ymm6, %ymm5, %ymm5 5627; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm7 5628; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm4 5629; AVX2-NEXT: vpcmpgtq %ymm7, %ymm4, %ymm4 5630; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm4 5631; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5632; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1 5633; AVX2-NEXT: retq 5634; 5635; AVX512F-LABEL: test126: 5636; AVX512F: # BB#0: # %entry 5637; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 5638; AVX512F-NEXT: retq 5639entry: 5640 %cmp = icmp ule <8 x i64> %a, %b 5641 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5642 ret <8 x i64> %sel 5643} 5644 5645define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) { 5646; SSE2-LABEL: test127: 5647; SSE2: # BB#0: # %entry 5648; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648] 5649; SSE2-NEXT: movdqa %xmm7, %xmm8 5650; SSE2-NEXT: pxor %xmm9, %xmm8 5651; SSE2-NEXT: movdqa %xmm3, %xmm10 5652; SSE2-NEXT: pxor %xmm9, %xmm10 5653; SSE2-NEXT: movdqa %xmm10, %xmm11 5654; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 5655; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5656; SSE2-NEXT: pcmpeqd %xmm8, %xmm10 5657; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 5658; SSE2-NEXT: pand %xmm12, %xmm10 5659; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3] 5660; SSE2-NEXT: por %xmm10, %xmm8 5661; SSE2-NEXT: movdqa %xmm6, %xmm10 5662; SSE2-NEXT: pxor %xmm9, %xmm10 5663; SSE2-NEXT: movdqa %xmm2, %xmm11 5664; SSE2-NEXT: pxor %xmm9, %xmm11 5665; SSE2-NEXT: movdqa %xmm11, %xmm12 5666; SSE2-NEXT: pcmpgtd %xmm10, %xmm12 5667; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 5668; SSE2-NEXT: pcmpeqd %xmm10, %xmm11 5669; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3] 5670; SSE2-NEXT: pand %xmm13, %xmm11 5671; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3] 5672; SSE2-NEXT: por %xmm11, %xmm10 5673; SSE2-NEXT: movdqa %xmm5, %xmm11 5674; SSE2-NEXT: pxor %xmm9, %xmm11 5675; SSE2-NEXT: movdqa %xmm1, %xmm12 5676; SSE2-NEXT: pxor %xmm9, %xmm12 5677; SSE2-NEXT: movdqa %xmm12, %xmm13 5678; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 5679; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 5680; SSE2-NEXT: pcmpeqd %xmm11, %xmm12 5681; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3] 5682; SSE2-NEXT: pand %xmm14, %xmm11 5683; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3] 5684; SSE2-NEXT: por %xmm11, %xmm12 5685; SSE2-NEXT: movdqa %xmm4, %xmm11 5686; SSE2-NEXT: pxor %xmm9, %xmm11 5687; SSE2-NEXT: pxor %xmm0, %xmm9 5688; SSE2-NEXT: movdqa %xmm9, %xmm13 5689; SSE2-NEXT: pcmpgtd %xmm11, %xmm13 5690; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 5691; SSE2-NEXT: pcmpeqd %xmm11, %xmm9 5692; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 5693; SSE2-NEXT: pand %xmm14, %xmm9 5694; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 5695; SSE2-NEXT: por %xmm9, %xmm11 5696; SSE2-NEXT: pand %xmm11, %xmm0 5697; SSE2-NEXT: pandn %xmm4, %xmm11 5698; SSE2-NEXT: por %xmm11, %xmm0 5699; SSE2-NEXT: pand %xmm12, %xmm1 5700; SSE2-NEXT: pandn %xmm5, %xmm12 5701; SSE2-NEXT: por %xmm12, %xmm1 5702; SSE2-NEXT: pand %xmm10, %xmm2 5703; SSE2-NEXT: pandn %xmm6, %xmm10 5704; SSE2-NEXT: por %xmm10, %xmm2 5705; SSE2-NEXT: pand %xmm8, %xmm3 5706; SSE2-NEXT: pandn %xmm7, %xmm8 5707; SSE2-NEXT: por %xmm8, %xmm3 5708; SSE2-NEXT: retq 5709; 5710; SSE4-LABEL: test127: 5711; SSE4: # BB#0: # %entry 5712; SSE4-NEXT: movdqa %xmm0, %xmm8 5713; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 5714; SSE4-NEXT: movdqa %xmm7, %xmm10 5715; SSE4-NEXT: pxor %xmm0, %xmm10 5716; SSE4-NEXT: movdqa %xmm3, %xmm9 5717; SSE4-NEXT: pxor %xmm0, %xmm9 5718; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 5719; SSE4-NEXT: movdqa %xmm6, %xmm11 5720; SSE4-NEXT: pxor %xmm0, %xmm11 5721; SSE4-NEXT: movdqa %xmm2, %xmm10 5722; SSE4-NEXT: pxor %xmm0, %xmm10 5723; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 5724; SSE4-NEXT: movdqa %xmm5, %xmm12 5725; SSE4-NEXT: pxor %xmm0, %xmm12 5726; SSE4-NEXT: movdqa %xmm1, %xmm11 5727; SSE4-NEXT: pxor %xmm0, %xmm11 5728; SSE4-NEXT: pcmpgtq %xmm12, %xmm11 5729; SSE4-NEXT: movdqa %xmm4, %xmm12 5730; SSE4-NEXT: pxor %xmm0, %xmm12 5731; SSE4-NEXT: pxor %xmm8, %xmm0 5732; SSE4-NEXT: pcmpgtq %xmm12, %xmm0 5733; SSE4-NEXT: blendvpd %xmm8, %xmm4 5734; SSE4-NEXT: movdqa %xmm11, %xmm0 5735; SSE4-NEXT: blendvpd %xmm1, %xmm5 5736; SSE4-NEXT: movdqa %xmm10, %xmm0 5737; SSE4-NEXT: blendvpd %xmm2, %xmm6 5738; SSE4-NEXT: movdqa %xmm9, %xmm0 5739; SSE4-NEXT: blendvpd %xmm3, %xmm7 5740; SSE4-NEXT: movapd %xmm4, %xmm0 5741; SSE4-NEXT: movapd %xmm5, %xmm1 5742; SSE4-NEXT: movapd %xmm6, %xmm2 5743; SSE4-NEXT: movapd %xmm7, %xmm3 5744; SSE4-NEXT: retq 5745; 5746; AVX1-LABEL: test127: 5747; AVX1: # BB#0: # %entry 5748; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5749; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5750; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 5751; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6 5752; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5753; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5754; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm6 5755; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm7 5756; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5757; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5758; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 5759; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5760; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7 5761; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 5762; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5763; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm7 5764; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm5 5765; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 5766; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 5767; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5768; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5769; AVX1-NEXT: retq 5770; 5771; AVX2-LABEL: test127: 5772; AVX2: # BB#0: # %entry 5773; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 5774; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm5 5775; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm6 5776; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5777; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 5778; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm4 5779; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm4 5780; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5781; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1 5782; AVX2-NEXT: retq 5783; 5784; AVX512F-LABEL: test127: 5785; AVX512F: # BB#0: # %entry 5786; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 5787; AVX512F-NEXT: retq 5788entry: 5789 %cmp = icmp ugt <8 x i64> %a, %b 5790 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5791 ret <8 x i64> %sel 5792} 5793 5794define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) { 5795; SSE2-LABEL: test128: 5796; SSE2: # BB#0: # %entry 5797; SSE2-NEXT: movdqa %xmm7, %xmm11 5798; SSE2-NEXT: movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill 5799; SSE2-NEXT: movdqa %xmm3, %xmm7 5800; SSE2-NEXT: movdqa %xmm2, %xmm3 5801; SSE2-NEXT: movdqa %xmm1, %xmm2 5802; SSE2-NEXT: movdqa %xmm0, %xmm9 5803; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648] 5804; SSE2-NEXT: movdqa %xmm7, %xmm8 5805; SSE2-NEXT: pxor %xmm10, %xmm8 5806; SSE2-NEXT: movdqa %xmm11, %xmm0 5807; SSE2-NEXT: pxor %xmm10, %xmm0 5808; SSE2-NEXT: movdqa %xmm0, %xmm11 5809; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 5810; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 5811; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 5812; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 5813; SSE2-NEXT: pand %xmm12, %xmm0 5814; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 5815; SSE2-NEXT: por %xmm0, %xmm12 5816; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 5817; SSE2-NEXT: movdqa %xmm12, %xmm8 5818; SSE2-NEXT: pxor %xmm1, %xmm8 5819; SSE2-NEXT: movdqa %xmm3, %xmm11 5820; SSE2-NEXT: pxor %xmm10, %xmm11 5821; SSE2-NEXT: movdqa %xmm6, %xmm13 5822; SSE2-NEXT: pxor %xmm10, %xmm13 5823; SSE2-NEXT: movdqa %xmm13, %xmm14 5824; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 5825; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 5826; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 5827; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 5828; SSE2-NEXT: pand %xmm15, %xmm11 5829; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 5830; SSE2-NEXT: por %xmm11, %xmm13 5831; SSE2-NEXT: movdqa %xmm2, %xmm11 5832; SSE2-NEXT: pxor %xmm10, %xmm11 5833; SSE2-NEXT: movdqa %xmm5, %xmm14 5834; SSE2-NEXT: pxor %xmm10, %xmm14 5835; SSE2-NEXT: movdqa %xmm14, %xmm15 5836; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 5837; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 5838; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 5839; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 5840; SSE2-NEXT: pand %xmm11, %xmm14 5841; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 5842; SSE2-NEXT: por %xmm14, %xmm15 5843; SSE2-NEXT: movdqa %xmm9, %xmm11 5844; SSE2-NEXT: pxor %xmm10, %xmm11 5845; SSE2-NEXT: pxor %xmm4, %xmm10 5846; SSE2-NEXT: movdqa %xmm10, %xmm14 5847; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 5848; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 5849; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 5850; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 5851; SSE2-NEXT: pand %xmm11, %xmm0 5852; SSE2-NEXT: movdqa %xmm13, %xmm10 5853; SSE2-NEXT: pxor %xmm1, %xmm10 5854; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 5855; SSE2-NEXT: por %xmm0, %xmm14 5856; SSE2-NEXT: movdqa %xmm15, %xmm11 5857; SSE2-NEXT: pxor %xmm1, %xmm11 5858; SSE2-NEXT: pxor %xmm14, %xmm1 5859; SSE2-NEXT: pandn %xmm9, %xmm14 5860; SSE2-NEXT: pandn %xmm4, %xmm1 5861; SSE2-NEXT: por %xmm14, %xmm1 5862; SSE2-NEXT: pandn %xmm2, %xmm15 5863; SSE2-NEXT: pandn %xmm5, %xmm11 5864; SSE2-NEXT: por %xmm15, %xmm11 5865; SSE2-NEXT: pandn %xmm3, %xmm13 5866; SSE2-NEXT: pandn %xmm6, %xmm10 5867; SSE2-NEXT: por %xmm13, %xmm10 5868; SSE2-NEXT: pandn %xmm7, %xmm12 5869; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload 5870; SSE2-NEXT: por %xmm12, %xmm8 5871; SSE2-NEXT: movdqa %xmm1, %xmm0 5872; SSE2-NEXT: movdqa %xmm11, %xmm1 5873; SSE2-NEXT: movdqa %xmm10, %xmm2 5874; SSE2-NEXT: movdqa %xmm8, %xmm3 5875; SSE2-NEXT: retq 5876; 5877; SSE4-LABEL: test128: 5878; SSE4: # BB#0: # %entry 5879; SSE4-NEXT: movdqa %xmm0, %xmm9 5880; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 5881; SSE4-NEXT: movdqa %xmm3, %xmm10 5882; SSE4-NEXT: pxor %xmm0, %xmm10 5883; SSE4-NEXT: movdqa %xmm7, %xmm8 5884; SSE4-NEXT: pxor %xmm0, %xmm8 5885; SSE4-NEXT: pcmpgtq %xmm10, %xmm8 5886; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 5887; SSE4-NEXT: pxor %xmm12, %xmm8 5888; SSE4-NEXT: movdqa %xmm2, %xmm11 5889; SSE4-NEXT: pxor %xmm0, %xmm11 5890; SSE4-NEXT: movdqa %xmm6, %xmm10 5891; SSE4-NEXT: pxor %xmm0, %xmm10 5892; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 5893; SSE4-NEXT: pxor %xmm12, %xmm10 5894; SSE4-NEXT: movdqa %xmm1, %xmm13 5895; SSE4-NEXT: pxor %xmm0, %xmm13 5896; SSE4-NEXT: movdqa %xmm5, %xmm11 5897; SSE4-NEXT: pxor %xmm0, %xmm11 5898; SSE4-NEXT: pcmpgtq %xmm13, %xmm11 5899; SSE4-NEXT: pxor %xmm12, %xmm11 5900; SSE4-NEXT: movdqa %xmm9, %xmm13 5901; SSE4-NEXT: pxor %xmm0, %xmm13 5902; SSE4-NEXT: pxor %xmm4, %xmm0 5903; SSE4-NEXT: pcmpgtq %xmm13, %xmm0 5904; SSE4-NEXT: pxor %xmm12, %xmm0 5905; SSE4-NEXT: blendvpd %xmm9, %xmm4 5906; SSE4-NEXT: movdqa %xmm11, %xmm0 5907; SSE4-NEXT: blendvpd %xmm1, %xmm5 5908; SSE4-NEXT: movdqa %xmm10, %xmm0 5909; SSE4-NEXT: blendvpd %xmm2, %xmm6 5910; SSE4-NEXT: movdqa %xmm8, %xmm0 5911; SSE4-NEXT: blendvpd %xmm3, %xmm7 5912; SSE4-NEXT: movapd %xmm4, %xmm0 5913; SSE4-NEXT: movapd %xmm5, %xmm1 5914; SSE4-NEXT: movapd %xmm6, %xmm2 5915; SSE4-NEXT: movapd %xmm7, %xmm3 5916; SSE4-NEXT: retq 5917; 5918; AVX1-LABEL: test128: 5919; AVX1: # BB#0: # %entry 5920; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 5921; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 5922; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 5923; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6 5924; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5925; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 5926; AVX1-NEXT: vpcmpeqd %xmm8, %xmm8, %xmm8 5927; AVX1-NEXT: vpxor %xmm8, %xmm4, %xmm4 5928; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm7 5929; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm6 5930; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6 5931; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 5932; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 5933; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 5934; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 5935; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 5936; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 5937; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 5938; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 5939; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm7 5940; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm5 5941; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 5942; AVX1-NEXT: vpxor %xmm8, %xmm5, %xmm5 5943; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 5944; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0 5945; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1 5946; AVX1-NEXT: retq 5947; 5948; AVX2-LABEL: test128: 5949; AVX2: # BB#0: # %entry 5950; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 5951; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm5 5952; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm6 5953; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 5954; AVX2-NEXT: vpcmpeqd %ymm6, %ymm6, %ymm6 5955; AVX2-NEXT: vpxor %ymm6, %ymm5, %ymm5 5956; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm7 5957; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm4 5958; AVX2-NEXT: vpcmpgtq %ymm7, %ymm4, %ymm4 5959; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm4 5960; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0 5961; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1 5962; AVX2-NEXT: retq 5963; 5964; AVX512F-LABEL: test128: 5965; AVX512F: # BB#0: # %entry 5966; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 5967; AVX512F-NEXT: retq 5968entry: 5969 %cmp = icmp uge <8 x i64> %a, %b 5970 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b 5971 ret <8 x i64> %sel 5972} 5973 5974define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) { 5975; SSE2-LABEL: test129: 5976; SSE2: # BB#0: # %entry 5977; SSE2-NEXT: movdqa %xmm3, %xmm8 5978; SSE2-NEXT: movdqa %xmm7, %xmm3 5979; SSE2-NEXT: pcmpgtb %xmm8, %xmm3 5980; SSE2-NEXT: movdqa %xmm6, %xmm9 5981; SSE2-NEXT: pcmpgtb %xmm2, %xmm9 5982; SSE2-NEXT: movdqa %xmm5, %xmm10 5983; SSE2-NEXT: pcmpgtb %xmm1, %xmm10 5984; SSE2-NEXT: movdqa %xmm4, %xmm11 5985; SSE2-NEXT: pcmpgtb %xmm0, %xmm11 5986; SSE2-NEXT: pand %xmm11, %xmm4 5987; SSE2-NEXT: pandn %xmm0, %xmm11 5988; SSE2-NEXT: por %xmm4, %xmm11 5989; SSE2-NEXT: pand %xmm10, %xmm5 5990; SSE2-NEXT: pandn %xmm1, %xmm10 5991; SSE2-NEXT: por %xmm5, %xmm10 5992; SSE2-NEXT: pand %xmm9, %xmm6 5993; SSE2-NEXT: pandn %xmm2, %xmm9 5994; SSE2-NEXT: por %xmm6, %xmm9 5995; SSE2-NEXT: pand %xmm3, %xmm7 5996; SSE2-NEXT: pandn %xmm8, %xmm3 5997; SSE2-NEXT: por %xmm7, %xmm3 5998; SSE2-NEXT: movdqa %xmm11, %xmm0 5999; SSE2-NEXT: movdqa %xmm10, %xmm1 6000; SSE2-NEXT: movdqa %xmm9, %xmm2 6001; SSE2-NEXT: retq 6002; 6003; SSE4-LABEL: test129: 6004; SSE4: # BB#0: # %entry 6005; SSE4-NEXT: pmaxsb %xmm4, %xmm0 6006; SSE4-NEXT: pmaxsb %xmm5, %xmm1 6007; SSE4-NEXT: pmaxsb %xmm6, %xmm2 6008; SSE4-NEXT: pmaxsb %xmm7, %xmm3 6009; SSE4-NEXT: retq 6010; 6011; AVX1-LABEL: test129: 6012; AVX1: # BB#0: # %entry 6013; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6014; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6015; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 6016; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 6017; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6018; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6019; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6020; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 6021; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 6022; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6023; AVX1-NEXT: retq 6024; 6025; AVX2-LABEL: test129: 6026; AVX2: # BB#0: # %entry 6027; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 6028; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 6029; AVX2-NEXT: retq 6030; 6031; AVX512BW-LABEL: test129: 6032; AVX512BW: # BB#0: # %entry 6033; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 6034; AVX512BW-NEXT: retq 6035entry: 6036 %cmp = icmp slt <64 x i8> %a, %b 6037 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6038 ret <64 x i8> %sel 6039} 6040 6041define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) { 6042; SSE2-LABEL: test130: 6043; SSE2: # BB#0: # %entry 6044; SSE2-NEXT: movdqa %xmm2, %xmm8 6045; SSE2-NEXT: movdqa %xmm3, %xmm12 6046; SSE2-NEXT: pcmpgtb %xmm7, %xmm12 6047; SSE2-NEXT: pcmpeqd %xmm13, %xmm13 6048; SSE2-NEXT: movdqa %xmm12, %xmm9 6049; SSE2-NEXT: pxor %xmm13, %xmm9 6050; SSE2-NEXT: movdqa %xmm8, %xmm14 6051; SSE2-NEXT: pcmpgtb %xmm6, %xmm14 6052; SSE2-NEXT: movdqa %xmm14, %xmm2 6053; SSE2-NEXT: pxor %xmm13, %xmm2 6054; SSE2-NEXT: movdqa %xmm1, %xmm15 6055; SSE2-NEXT: pcmpgtb %xmm5, %xmm15 6056; SSE2-NEXT: movdqa %xmm15, %xmm10 6057; SSE2-NEXT: pxor %xmm13, %xmm10 6058; SSE2-NEXT: movdqa %xmm0, %xmm11 6059; SSE2-NEXT: pcmpgtb %xmm4, %xmm11 6060; SSE2-NEXT: pxor %xmm11, %xmm13 6061; SSE2-NEXT: pandn %xmm4, %xmm11 6062; SSE2-NEXT: pandn %xmm0, %xmm13 6063; SSE2-NEXT: por %xmm13, %xmm11 6064; SSE2-NEXT: pandn %xmm5, %xmm15 6065; SSE2-NEXT: pandn %xmm1, %xmm10 6066; SSE2-NEXT: por %xmm15, %xmm10 6067; SSE2-NEXT: pandn %xmm6, %xmm14 6068; SSE2-NEXT: pandn %xmm8, %xmm2 6069; SSE2-NEXT: por %xmm14, %xmm2 6070; SSE2-NEXT: pandn %xmm7, %xmm12 6071; SSE2-NEXT: pandn %xmm3, %xmm9 6072; SSE2-NEXT: por %xmm12, %xmm9 6073; SSE2-NEXT: movdqa %xmm11, %xmm0 6074; SSE2-NEXT: movdqa %xmm10, %xmm1 6075; SSE2-NEXT: movdqa %xmm9, %xmm3 6076; SSE2-NEXT: retq 6077; 6078; SSE4-LABEL: test130: 6079; SSE4: # BB#0: # %entry 6080; SSE4-NEXT: pmaxsb %xmm4, %xmm0 6081; SSE4-NEXT: pmaxsb %xmm5, %xmm1 6082; SSE4-NEXT: pmaxsb %xmm6, %xmm2 6083; SSE4-NEXT: pmaxsb %xmm7, %xmm3 6084; SSE4-NEXT: retq 6085; 6086; AVX1-LABEL: test130: 6087; AVX1: # BB#0: # %entry 6088; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6089; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6090; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 6091; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 6092; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6093; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6094; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6095; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2 6096; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 6097; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6098; AVX1-NEXT: retq 6099; 6100; AVX2-LABEL: test130: 6101; AVX2: # BB#0: # %entry 6102; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 6103; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 6104; AVX2-NEXT: retq 6105; 6106; AVX512BW-LABEL: test130: 6107; AVX512BW: # BB#0: # %entry 6108; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0 6109; AVX512BW-NEXT: retq 6110entry: 6111 %cmp = icmp sle <64 x i8> %a, %b 6112 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6113 ret <64 x i8> %sel 6114} 6115 6116define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) { 6117; SSE2-LABEL: test131: 6118; SSE2: # BB#0: # %entry 6119; SSE2-NEXT: movdqa %xmm3, %xmm8 6120; SSE2-NEXT: pcmpgtb %xmm7, %xmm3 6121; SSE2-NEXT: movdqa %xmm2, %xmm9 6122; SSE2-NEXT: pcmpgtb %xmm6, %xmm9 6123; SSE2-NEXT: movdqa %xmm1, %xmm10 6124; SSE2-NEXT: pcmpgtb %xmm5, %xmm10 6125; SSE2-NEXT: movdqa %xmm0, %xmm11 6126; SSE2-NEXT: pcmpgtb %xmm4, %xmm11 6127; SSE2-NEXT: pand %xmm11, %xmm4 6128; SSE2-NEXT: pandn %xmm0, %xmm11 6129; SSE2-NEXT: por %xmm4, %xmm11 6130; SSE2-NEXT: pand %xmm10, %xmm5 6131; SSE2-NEXT: pandn %xmm1, %xmm10 6132; SSE2-NEXT: por %xmm5, %xmm10 6133; SSE2-NEXT: pand %xmm9, %xmm6 6134; SSE2-NEXT: pandn %xmm2, %xmm9 6135; SSE2-NEXT: por %xmm6, %xmm9 6136; SSE2-NEXT: pand %xmm3, %xmm7 6137; SSE2-NEXT: pandn %xmm8, %xmm3 6138; SSE2-NEXT: por %xmm7, %xmm3 6139; SSE2-NEXT: movdqa %xmm11, %xmm0 6140; SSE2-NEXT: movdqa %xmm10, %xmm1 6141; SSE2-NEXT: movdqa %xmm9, %xmm2 6142; SSE2-NEXT: retq 6143; 6144; SSE4-LABEL: test131: 6145; SSE4: # BB#0: # %entry 6146; SSE4-NEXT: pminsb %xmm4, %xmm0 6147; SSE4-NEXT: pminsb %xmm5, %xmm1 6148; SSE4-NEXT: pminsb %xmm6, %xmm2 6149; SSE4-NEXT: pminsb %xmm7, %xmm3 6150; SSE4-NEXT: retq 6151; 6152; AVX1-LABEL: test131: 6153; AVX1: # BB#0: # %entry 6154; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6155; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6156; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 6157; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 6158; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6159; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6160; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6161; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 6162; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 6163; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6164; AVX1-NEXT: retq 6165; 6166; AVX2-LABEL: test131: 6167; AVX2: # BB#0: # %entry 6168; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 6169; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 6170; AVX2-NEXT: retq 6171; 6172; AVX512BW-LABEL: test131: 6173; AVX512BW: # BB#0: # %entry 6174; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 6175; AVX512BW-NEXT: retq 6176entry: 6177 %cmp = icmp sgt <64 x i8> %a, %b 6178 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6179 ret <64 x i8> %sel 6180} 6181 6182define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) { 6183; SSE2-LABEL: test132: 6184; SSE2: # BB#0: # %entry 6185; SSE2-NEXT: movdqa %xmm2, %xmm8 6186; SSE2-NEXT: movdqa %xmm0, %xmm10 6187; SSE2-NEXT: movdqa %xmm7, %xmm12 6188; SSE2-NEXT: pcmpgtb %xmm3, %xmm12 6189; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 6190; SSE2-NEXT: movdqa %xmm12, %xmm9 6191; SSE2-NEXT: pxor %xmm0, %xmm9 6192; SSE2-NEXT: movdqa %xmm6, %xmm13 6193; SSE2-NEXT: pcmpgtb %xmm8, %xmm13 6194; SSE2-NEXT: movdqa %xmm13, %xmm2 6195; SSE2-NEXT: pxor %xmm0, %xmm2 6196; SSE2-NEXT: movdqa %xmm5, %xmm14 6197; SSE2-NEXT: pcmpgtb %xmm1, %xmm14 6198; SSE2-NEXT: movdqa %xmm14, %xmm11 6199; SSE2-NEXT: pxor %xmm0, %xmm11 6200; SSE2-NEXT: movdqa %xmm4, %xmm15 6201; SSE2-NEXT: pcmpgtb %xmm10, %xmm15 6202; SSE2-NEXT: pxor %xmm15, %xmm0 6203; SSE2-NEXT: pandn %xmm4, %xmm15 6204; SSE2-NEXT: pandn %xmm10, %xmm0 6205; SSE2-NEXT: por %xmm15, %xmm0 6206; SSE2-NEXT: pandn %xmm5, %xmm14 6207; SSE2-NEXT: pandn %xmm1, %xmm11 6208; SSE2-NEXT: por %xmm14, %xmm11 6209; SSE2-NEXT: pandn %xmm6, %xmm13 6210; SSE2-NEXT: pandn %xmm8, %xmm2 6211; SSE2-NEXT: por %xmm13, %xmm2 6212; SSE2-NEXT: pandn %xmm7, %xmm12 6213; SSE2-NEXT: pandn %xmm3, %xmm9 6214; SSE2-NEXT: por %xmm12, %xmm9 6215; SSE2-NEXT: movdqa %xmm11, %xmm1 6216; SSE2-NEXT: movdqa %xmm9, %xmm3 6217; SSE2-NEXT: retq 6218; 6219; SSE4-LABEL: test132: 6220; SSE4: # BB#0: # %entry 6221; SSE4-NEXT: pminsb %xmm4, %xmm0 6222; SSE4-NEXT: pminsb %xmm5, %xmm1 6223; SSE4-NEXT: pminsb %xmm6, %xmm2 6224; SSE4-NEXT: pminsb %xmm7, %xmm3 6225; SSE4-NEXT: retq 6226; 6227; AVX1-LABEL: test132: 6228; AVX1: # BB#0: # %entry 6229; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6230; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6231; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4 6232; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0 6233; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6234; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6235; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6236; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2 6237; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1 6238; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6239; AVX1-NEXT: retq 6240; 6241; AVX2-LABEL: test132: 6242; AVX2: # BB#0: # %entry 6243; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0 6244; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1 6245; AVX2-NEXT: retq 6246; 6247; AVX512BW-LABEL: test132: 6248; AVX512BW: # BB#0: # %entry 6249; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0 6250; AVX512BW-NEXT: retq 6251entry: 6252 %cmp = icmp sge <64 x i8> %a, %b 6253 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6254 ret <64 x i8> %sel 6255} 6256 6257define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) { 6258; SSE-LABEL: test133: 6259; SSE: # BB#0: # %entry 6260; SSE-NEXT: pmaxub %xmm4, %xmm0 6261; SSE-NEXT: pmaxub %xmm5, %xmm1 6262; SSE-NEXT: pmaxub %xmm6, %xmm2 6263; SSE-NEXT: pmaxub %xmm7, %xmm3 6264; SSE-NEXT: retq 6265; 6266; AVX1-LABEL: test133: 6267; AVX1: # BB#0: # %entry 6268; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6269; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6270; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 6271; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 6272; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6273; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6274; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6275; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 6276; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 6277; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6278; AVX1-NEXT: retq 6279; 6280; AVX2-LABEL: test133: 6281; AVX2: # BB#0: # %entry 6282; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 6283; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 6284; AVX2-NEXT: retq 6285; 6286; AVX512BW-LABEL: test133: 6287; AVX512BW: # BB#0: # %entry 6288; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 6289; AVX512BW-NEXT: retq 6290entry: 6291 %cmp = icmp ult <64 x i8> %a, %b 6292 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6293 ret <64 x i8> %sel 6294} 6295 6296define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) { 6297; SSE-LABEL: test134: 6298; SSE: # BB#0: # %entry 6299; SSE-NEXT: pmaxub %xmm4, %xmm0 6300; SSE-NEXT: pmaxub %xmm5, %xmm1 6301; SSE-NEXT: pmaxub %xmm6, %xmm2 6302; SSE-NEXT: pmaxub %xmm7, %xmm3 6303; SSE-NEXT: retq 6304; 6305; AVX1-LABEL: test134: 6306; AVX1: # BB#0: # %entry 6307; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6308; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6309; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4 6310; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0 6311; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6312; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6313; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6314; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2 6315; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1 6316; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6317; AVX1-NEXT: retq 6318; 6319; AVX2-LABEL: test134: 6320; AVX2: # BB#0: # %entry 6321; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0 6322; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1 6323; AVX2-NEXT: retq 6324; 6325; AVX512BW-LABEL: test134: 6326; AVX512BW: # BB#0: # %entry 6327; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0 6328; AVX512BW-NEXT: retq 6329entry: 6330 %cmp = icmp ule <64 x i8> %a, %b 6331 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6332 ret <64 x i8> %sel 6333} 6334 6335define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) { 6336; SSE-LABEL: test135: 6337; SSE: # BB#0: # %entry 6338; SSE-NEXT: pminub %xmm4, %xmm0 6339; SSE-NEXT: pminub %xmm5, %xmm1 6340; SSE-NEXT: pminub %xmm6, %xmm2 6341; SSE-NEXT: pminub %xmm7, %xmm3 6342; SSE-NEXT: retq 6343; 6344; AVX1-LABEL: test135: 6345; AVX1: # BB#0: # %entry 6346; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6347; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6348; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 6349; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 6350; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6351; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6352; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6353; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 6354; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 6355; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6356; AVX1-NEXT: retq 6357; 6358; AVX2-LABEL: test135: 6359; AVX2: # BB#0: # %entry 6360; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 6361; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 6362; AVX2-NEXT: retq 6363; 6364; AVX512BW-LABEL: test135: 6365; AVX512BW: # BB#0: # %entry 6366; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 6367; AVX512BW-NEXT: retq 6368entry: 6369 %cmp = icmp ugt <64 x i8> %a, %b 6370 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6371 ret <64 x i8> %sel 6372} 6373 6374define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) { 6375; SSE-LABEL: test136: 6376; SSE: # BB#0: # %entry 6377; SSE-NEXT: pminub %xmm4, %xmm0 6378; SSE-NEXT: pminub %xmm5, %xmm1 6379; SSE-NEXT: pminub %xmm6, %xmm2 6380; SSE-NEXT: pminub %xmm7, %xmm3 6381; SSE-NEXT: retq 6382; 6383; AVX1-LABEL: test136: 6384; AVX1: # BB#0: # %entry 6385; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6386; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6387; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4 6388; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0 6389; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6390; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6391; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6392; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2 6393; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1 6394; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6395; AVX1-NEXT: retq 6396; 6397; AVX2-LABEL: test136: 6398; AVX2: # BB#0: # %entry 6399; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0 6400; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1 6401; AVX2-NEXT: retq 6402; 6403; AVX512BW-LABEL: test136: 6404; AVX512BW: # BB#0: # %entry 6405; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0 6406; AVX512BW-NEXT: retq 6407entry: 6408 %cmp = icmp uge <64 x i8> %a, %b 6409 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a 6410 ret <64 x i8> %sel 6411} 6412 6413define <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) { 6414; SSE-LABEL: test137: 6415; SSE: # BB#0: # %entry 6416; SSE-NEXT: pmaxsw %xmm4, %xmm0 6417; SSE-NEXT: pmaxsw %xmm5, %xmm1 6418; SSE-NEXT: pmaxsw %xmm6, %xmm2 6419; SSE-NEXT: pmaxsw %xmm7, %xmm3 6420; SSE-NEXT: retq 6421; 6422; AVX1-LABEL: test137: 6423; AVX1: # BB#0: # %entry 6424; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6425; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6426; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 6427; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 6428; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6429; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6430; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6431; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 6432; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 6433; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6434; AVX1-NEXT: retq 6435; 6436; AVX2-LABEL: test137: 6437; AVX2: # BB#0: # %entry 6438; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 6439; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 6440; AVX2-NEXT: retq 6441; 6442; AVX512BW-LABEL: test137: 6443; AVX512BW: # BB#0: # %entry 6444; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 6445; AVX512BW-NEXT: retq 6446entry: 6447 %cmp = icmp slt <32 x i16> %a, %b 6448 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6449 ret <32 x i16> %sel 6450} 6451 6452define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) { 6453; SSE-LABEL: test138: 6454; SSE: # BB#0: # %entry 6455; SSE-NEXT: pmaxsw %xmm4, %xmm0 6456; SSE-NEXT: pmaxsw %xmm5, %xmm1 6457; SSE-NEXT: pmaxsw %xmm6, %xmm2 6458; SSE-NEXT: pmaxsw %xmm7, %xmm3 6459; SSE-NEXT: retq 6460; 6461; AVX1-LABEL: test138: 6462; AVX1: # BB#0: # %entry 6463; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6464; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6465; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 6466; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 6467; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6468; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6469; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6470; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2 6471; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 6472; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6473; AVX1-NEXT: retq 6474; 6475; AVX2-LABEL: test138: 6476; AVX2: # BB#0: # %entry 6477; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 6478; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 6479; AVX2-NEXT: retq 6480; 6481; AVX512BW-LABEL: test138: 6482; AVX512BW: # BB#0: # %entry 6483; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0 6484; AVX512BW-NEXT: retq 6485entry: 6486 %cmp = icmp sle <32 x i16> %a, %b 6487 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6488 ret <32 x i16> %sel 6489} 6490 6491define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) { 6492; SSE-LABEL: test139: 6493; SSE: # BB#0: # %entry 6494; SSE-NEXT: pminsw %xmm4, %xmm0 6495; SSE-NEXT: pminsw %xmm5, %xmm1 6496; SSE-NEXT: pminsw %xmm6, %xmm2 6497; SSE-NEXT: pminsw %xmm7, %xmm3 6498; SSE-NEXT: retq 6499; 6500; AVX1-LABEL: test139: 6501; AVX1: # BB#0: # %entry 6502; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6503; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6504; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 6505; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 6506; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6507; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6508; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6509; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 6510; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 6511; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6512; AVX1-NEXT: retq 6513; 6514; AVX2-LABEL: test139: 6515; AVX2: # BB#0: # %entry 6516; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 6517; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 6518; AVX2-NEXT: retq 6519; 6520; AVX512BW-LABEL: test139: 6521; AVX512BW: # BB#0: # %entry 6522; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 6523; AVX512BW-NEXT: retq 6524entry: 6525 %cmp = icmp sgt <32 x i16> %a, %b 6526 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6527 ret <32 x i16> %sel 6528} 6529 6530define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) { 6531; SSE-LABEL: test140: 6532; SSE: # BB#0: # %entry 6533; SSE-NEXT: pminsw %xmm4, %xmm0 6534; SSE-NEXT: pminsw %xmm5, %xmm1 6535; SSE-NEXT: pminsw %xmm6, %xmm2 6536; SSE-NEXT: pminsw %xmm7, %xmm3 6537; SSE-NEXT: retq 6538; 6539; AVX1-LABEL: test140: 6540; AVX1: # BB#0: # %entry 6541; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6542; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6543; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4 6544; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0 6545; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6546; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6547; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6548; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2 6549; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1 6550; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6551; AVX1-NEXT: retq 6552; 6553; AVX2-LABEL: test140: 6554; AVX2: # BB#0: # %entry 6555; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0 6556; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1 6557; AVX2-NEXT: retq 6558; 6559; AVX512BW-LABEL: test140: 6560; AVX512BW: # BB#0: # %entry 6561; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0 6562; AVX512BW-NEXT: retq 6563entry: 6564 %cmp = icmp sge <32 x i16> %a, %b 6565 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6566 ret <32 x i16> %sel 6567} 6568 6569define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) { 6570; SSE2-LABEL: test141: 6571; SSE2: # BB#0: # %entry 6572; SSE2-NEXT: movdqa %xmm0, %xmm11 6573; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [32768,32768,32768,32768,32768,32768,32768,32768] 6574; SSE2-NEXT: movdqa %xmm3, %xmm9 6575; SSE2-NEXT: pxor %xmm0, %xmm9 6576; SSE2-NEXT: movdqa %xmm7, %xmm8 6577; SSE2-NEXT: pxor %xmm0, %xmm8 6578; SSE2-NEXT: pcmpgtw %xmm9, %xmm8 6579; SSE2-NEXT: movdqa %xmm2, %xmm10 6580; SSE2-NEXT: pxor %xmm0, %xmm10 6581; SSE2-NEXT: movdqa %xmm6, %xmm9 6582; SSE2-NEXT: pxor %xmm0, %xmm9 6583; SSE2-NEXT: pcmpgtw %xmm10, %xmm9 6584; SSE2-NEXT: movdqa %xmm1, %xmm12 6585; SSE2-NEXT: pxor %xmm0, %xmm12 6586; SSE2-NEXT: movdqa %xmm5, %xmm10 6587; SSE2-NEXT: pxor %xmm0, %xmm10 6588; SSE2-NEXT: pcmpgtw %xmm12, %xmm10 6589; SSE2-NEXT: movdqa %xmm11, %xmm12 6590; SSE2-NEXT: pxor %xmm0, %xmm12 6591; SSE2-NEXT: pxor %xmm4, %xmm0 6592; SSE2-NEXT: pcmpgtw %xmm12, %xmm0 6593; SSE2-NEXT: pand %xmm0, %xmm4 6594; SSE2-NEXT: pandn %xmm11, %xmm0 6595; SSE2-NEXT: por %xmm4, %xmm0 6596; SSE2-NEXT: pand %xmm10, %xmm5 6597; SSE2-NEXT: pandn %xmm1, %xmm10 6598; SSE2-NEXT: por %xmm5, %xmm10 6599; SSE2-NEXT: pand %xmm9, %xmm6 6600; SSE2-NEXT: pandn %xmm2, %xmm9 6601; SSE2-NEXT: por %xmm6, %xmm9 6602; SSE2-NEXT: pand %xmm8, %xmm7 6603; SSE2-NEXT: pandn %xmm3, %xmm8 6604; SSE2-NEXT: por %xmm7, %xmm8 6605; SSE2-NEXT: movdqa %xmm10, %xmm1 6606; SSE2-NEXT: movdqa %xmm9, %xmm2 6607; SSE2-NEXT: movdqa %xmm8, %xmm3 6608; SSE2-NEXT: retq 6609; 6610; SSE4-LABEL: test141: 6611; SSE4: # BB#0: # %entry 6612; SSE4-NEXT: pmaxuw %xmm4, %xmm0 6613; SSE4-NEXT: pmaxuw %xmm5, %xmm1 6614; SSE4-NEXT: pmaxuw %xmm6, %xmm2 6615; SSE4-NEXT: pmaxuw %xmm7, %xmm3 6616; SSE4-NEXT: retq 6617; 6618; AVX1-LABEL: test141: 6619; AVX1: # BB#0: # %entry 6620; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6621; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6622; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 6623; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 6624; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6625; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6626; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6627; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 6628; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 6629; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6630; AVX1-NEXT: retq 6631; 6632; AVX2-LABEL: test141: 6633; AVX2: # BB#0: # %entry 6634; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 6635; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 6636; AVX2-NEXT: retq 6637; 6638; AVX512BW-LABEL: test141: 6639; AVX512BW: # BB#0: # %entry 6640; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 6641; AVX512BW-NEXT: retq 6642entry: 6643 %cmp = icmp ult <32 x i16> %a, %b 6644 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6645 ret <32 x i16> %sel 6646} 6647 6648define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) { 6649; SSE2-LABEL: test142: 6650; SSE2: # BB#0: # %entry 6651; SSE2-NEXT: movdqa %xmm3, %xmm8 6652; SSE2-NEXT: movdqa %xmm2, %xmm9 6653; SSE2-NEXT: movdqa %xmm1, %xmm10 6654; SSE2-NEXT: psubusw %xmm7, %xmm3 6655; SSE2-NEXT: pxor %xmm12, %xmm12 6656; SSE2-NEXT: pcmpeqw %xmm12, %xmm3 6657; SSE2-NEXT: psubusw %xmm6, %xmm2 6658; SSE2-NEXT: pcmpeqw %xmm12, %xmm2 6659; SSE2-NEXT: psubusw %xmm5, %xmm1 6660; SSE2-NEXT: pcmpeqw %xmm12, %xmm1 6661; SSE2-NEXT: movdqa %xmm0, %xmm11 6662; SSE2-NEXT: psubusw %xmm4, %xmm11 6663; SSE2-NEXT: pcmpeqw %xmm12, %xmm11 6664; SSE2-NEXT: pand %xmm11, %xmm4 6665; SSE2-NEXT: pandn %xmm0, %xmm11 6666; SSE2-NEXT: por %xmm4, %xmm11 6667; SSE2-NEXT: pand %xmm1, %xmm5 6668; SSE2-NEXT: pandn %xmm10, %xmm1 6669; SSE2-NEXT: por %xmm5, %xmm1 6670; SSE2-NEXT: pand %xmm2, %xmm6 6671; SSE2-NEXT: pandn %xmm9, %xmm2 6672; SSE2-NEXT: por %xmm6, %xmm2 6673; SSE2-NEXT: pand %xmm3, %xmm7 6674; SSE2-NEXT: pandn %xmm8, %xmm3 6675; SSE2-NEXT: por %xmm7, %xmm3 6676; SSE2-NEXT: movdqa %xmm11, %xmm0 6677; SSE2-NEXT: retq 6678; 6679; SSE4-LABEL: test142: 6680; SSE4: # BB#0: # %entry 6681; SSE4-NEXT: pmaxuw %xmm4, %xmm0 6682; SSE4-NEXT: pmaxuw %xmm5, %xmm1 6683; SSE4-NEXT: pmaxuw %xmm6, %xmm2 6684; SSE4-NEXT: pmaxuw %xmm7, %xmm3 6685; SSE4-NEXT: retq 6686; 6687; AVX1-LABEL: test142: 6688; AVX1: # BB#0: # %entry 6689; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6690; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6691; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4 6692; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0 6693; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6694; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6695; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6696; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2 6697; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1 6698; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6699; AVX1-NEXT: retq 6700; 6701; AVX2-LABEL: test142: 6702; AVX2: # BB#0: # %entry 6703; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0 6704; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1 6705; AVX2-NEXT: retq 6706; 6707; AVX512BW-LABEL: test142: 6708; AVX512BW: # BB#0: # %entry 6709; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0 6710; AVX512BW-NEXT: retq 6711entry: 6712 %cmp = icmp ule <32 x i16> %a, %b 6713 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6714 ret <32 x i16> %sel 6715} 6716 6717define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) { 6718; SSE2-LABEL: test143: 6719; SSE2: # BB#0: # %entry 6720; SSE2-NEXT: movdqa %xmm0, %xmm11 6721; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [32768,32768,32768,32768,32768,32768,32768,32768] 6722; SSE2-NEXT: movdqa %xmm7, %xmm9 6723; SSE2-NEXT: pxor %xmm0, %xmm9 6724; SSE2-NEXT: movdqa %xmm3, %xmm8 6725; SSE2-NEXT: pxor %xmm0, %xmm8 6726; SSE2-NEXT: pcmpgtw %xmm9, %xmm8 6727; SSE2-NEXT: movdqa %xmm6, %xmm10 6728; SSE2-NEXT: pxor %xmm0, %xmm10 6729; SSE2-NEXT: movdqa %xmm2, %xmm9 6730; SSE2-NEXT: pxor %xmm0, %xmm9 6731; SSE2-NEXT: pcmpgtw %xmm10, %xmm9 6732; SSE2-NEXT: movdqa %xmm5, %xmm12 6733; SSE2-NEXT: pxor %xmm0, %xmm12 6734; SSE2-NEXT: movdqa %xmm1, %xmm10 6735; SSE2-NEXT: pxor %xmm0, %xmm10 6736; SSE2-NEXT: pcmpgtw %xmm12, %xmm10 6737; SSE2-NEXT: movdqa %xmm4, %xmm12 6738; SSE2-NEXT: pxor %xmm0, %xmm12 6739; SSE2-NEXT: pxor %xmm11, %xmm0 6740; SSE2-NEXT: pcmpgtw %xmm12, %xmm0 6741; SSE2-NEXT: pand %xmm0, %xmm4 6742; SSE2-NEXT: pandn %xmm11, %xmm0 6743; SSE2-NEXT: por %xmm4, %xmm0 6744; SSE2-NEXT: pand %xmm10, %xmm5 6745; SSE2-NEXT: pandn %xmm1, %xmm10 6746; SSE2-NEXT: por %xmm5, %xmm10 6747; SSE2-NEXT: pand %xmm9, %xmm6 6748; SSE2-NEXT: pandn %xmm2, %xmm9 6749; SSE2-NEXT: por %xmm6, %xmm9 6750; SSE2-NEXT: pand %xmm8, %xmm7 6751; SSE2-NEXT: pandn %xmm3, %xmm8 6752; SSE2-NEXT: por %xmm7, %xmm8 6753; SSE2-NEXT: movdqa %xmm10, %xmm1 6754; SSE2-NEXT: movdqa %xmm9, %xmm2 6755; SSE2-NEXT: movdqa %xmm8, %xmm3 6756; SSE2-NEXT: retq 6757; 6758; SSE4-LABEL: test143: 6759; SSE4: # BB#0: # %entry 6760; SSE4-NEXT: pminuw %xmm4, %xmm0 6761; SSE4-NEXT: pminuw %xmm5, %xmm1 6762; SSE4-NEXT: pminuw %xmm6, %xmm2 6763; SSE4-NEXT: pminuw %xmm7, %xmm3 6764; SSE4-NEXT: retq 6765; 6766; AVX1-LABEL: test143: 6767; AVX1: # BB#0: # %entry 6768; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6769; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6770; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 6771; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 6772; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6773; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6774; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6775; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 6776; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 6777; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6778; AVX1-NEXT: retq 6779; 6780; AVX2-LABEL: test143: 6781; AVX2: # BB#0: # %entry 6782; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 6783; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 6784; AVX2-NEXT: retq 6785; 6786; AVX512BW-LABEL: test143: 6787; AVX512BW: # BB#0: # %entry 6788; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 6789; AVX512BW-NEXT: retq 6790entry: 6791 %cmp = icmp ugt <32 x i16> %a, %b 6792 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6793 ret <32 x i16> %sel 6794} 6795 6796define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) { 6797; SSE2-LABEL: test144: 6798; SSE2: # BB#0: # %entry 6799; SSE2-NEXT: movdqa %xmm3, %xmm8 6800; SSE2-NEXT: movdqa %xmm2, %xmm9 6801; SSE2-NEXT: movdqa %xmm1, %xmm10 6802; SSE2-NEXT: movdqa %xmm7, %xmm3 6803; SSE2-NEXT: psubusw %xmm8, %xmm3 6804; SSE2-NEXT: pxor %xmm12, %xmm12 6805; SSE2-NEXT: pcmpeqw %xmm12, %xmm3 6806; SSE2-NEXT: movdqa %xmm6, %xmm2 6807; SSE2-NEXT: psubusw %xmm9, %xmm2 6808; SSE2-NEXT: pcmpeqw %xmm12, %xmm2 6809; SSE2-NEXT: movdqa %xmm5, %xmm1 6810; SSE2-NEXT: psubusw %xmm10, %xmm1 6811; SSE2-NEXT: pcmpeqw %xmm12, %xmm1 6812; SSE2-NEXT: movdqa %xmm4, %xmm11 6813; SSE2-NEXT: psubusw %xmm0, %xmm11 6814; SSE2-NEXT: pcmpeqw %xmm12, %xmm11 6815; SSE2-NEXT: pand %xmm11, %xmm4 6816; SSE2-NEXT: pandn %xmm0, %xmm11 6817; SSE2-NEXT: por %xmm4, %xmm11 6818; SSE2-NEXT: pand %xmm1, %xmm5 6819; SSE2-NEXT: pandn %xmm10, %xmm1 6820; SSE2-NEXT: por %xmm5, %xmm1 6821; SSE2-NEXT: pand %xmm2, %xmm6 6822; SSE2-NEXT: pandn %xmm9, %xmm2 6823; SSE2-NEXT: por %xmm6, %xmm2 6824; SSE2-NEXT: pand %xmm3, %xmm7 6825; SSE2-NEXT: pandn %xmm8, %xmm3 6826; SSE2-NEXT: por %xmm7, %xmm3 6827; SSE2-NEXT: movdqa %xmm11, %xmm0 6828; SSE2-NEXT: retq 6829; 6830; SSE4-LABEL: test144: 6831; SSE4: # BB#0: # %entry 6832; SSE4-NEXT: pminuw %xmm4, %xmm0 6833; SSE4-NEXT: pminuw %xmm5, %xmm1 6834; SSE4-NEXT: pminuw %xmm6, %xmm2 6835; SSE4-NEXT: pminuw %xmm7, %xmm3 6836; SSE4-NEXT: retq 6837; 6838; AVX1-LABEL: test144: 6839; AVX1: # BB#0: # %entry 6840; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6841; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6842; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4 6843; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0 6844; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6845; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6846; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6847; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2 6848; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1 6849; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6850; AVX1-NEXT: retq 6851; 6852; AVX2-LABEL: test144: 6853; AVX2: # BB#0: # %entry 6854; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0 6855; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1 6856; AVX2-NEXT: retq 6857; 6858; AVX512BW-LABEL: test144: 6859; AVX512BW: # BB#0: # %entry 6860; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0 6861; AVX512BW-NEXT: retq 6862entry: 6863 %cmp = icmp uge <32 x i16> %a, %b 6864 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a 6865 ret <32 x i16> %sel 6866} 6867 6868define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) { 6869; SSE2-LABEL: test145: 6870; SSE2: # BB#0: # %entry 6871; SSE2-NEXT: movdqa %xmm3, %xmm8 6872; SSE2-NEXT: movdqa %xmm7, %xmm3 6873; SSE2-NEXT: pcmpgtd %xmm8, %xmm3 6874; SSE2-NEXT: movdqa %xmm6, %xmm9 6875; SSE2-NEXT: pcmpgtd %xmm2, %xmm9 6876; SSE2-NEXT: movdqa %xmm5, %xmm10 6877; SSE2-NEXT: pcmpgtd %xmm1, %xmm10 6878; SSE2-NEXT: movdqa %xmm4, %xmm11 6879; SSE2-NEXT: pcmpgtd %xmm0, %xmm11 6880; SSE2-NEXT: pand %xmm11, %xmm4 6881; SSE2-NEXT: pandn %xmm0, %xmm11 6882; SSE2-NEXT: por %xmm4, %xmm11 6883; SSE2-NEXT: pand %xmm10, %xmm5 6884; SSE2-NEXT: pandn %xmm1, %xmm10 6885; SSE2-NEXT: por %xmm5, %xmm10 6886; SSE2-NEXT: pand %xmm9, %xmm6 6887; SSE2-NEXT: pandn %xmm2, %xmm9 6888; SSE2-NEXT: por %xmm6, %xmm9 6889; SSE2-NEXT: pand %xmm3, %xmm7 6890; SSE2-NEXT: pandn %xmm8, %xmm3 6891; SSE2-NEXT: por %xmm7, %xmm3 6892; SSE2-NEXT: movdqa %xmm11, %xmm0 6893; SSE2-NEXT: movdqa %xmm10, %xmm1 6894; SSE2-NEXT: movdqa %xmm9, %xmm2 6895; SSE2-NEXT: retq 6896; 6897; SSE4-LABEL: test145: 6898; SSE4: # BB#0: # %entry 6899; SSE4-NEXT: pmaxsd %xmm4, %xmm0 6900; SSE4-NEXT: pmaxsd %xmm5, %xmm1 6901; SSE4-NEXT: pmaxsd %xmm6, %xmm2 6902; SSE4-NEXT: pmaxsd %xmm7, %xmm3 6903; SSE4-NEXT: retq 6904; 6905; AVX1-LABEL: test145: 6906; AVX1: # BB#0: # %entry 6907; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6908; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6909; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 6910; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 6911; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6912; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6913; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6914; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 6915; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 6916; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6917; AVX1-NEXT: retq 6918; 6919; AVX2-LABEL: test145: 6920; AVX2: # BB#0: # %entry 6921; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 6922; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 6923; AVX2-NEXT: retq 6924; 6925; AVX512F-LABEL: test145: 6926; AVX512F: # BB#0: # %entry 6927; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 6928; AVX512F-NEXT: retq 6929entry: 6930 %cmp = icmp slt <16 x i32> %a, %b 6931 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 6932 ret <16 x i32> %sel 6933} 6934 6935define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) { 6936; SSE2-LABEL: test146: 6937; SSE2: # BB#0: # %entry 6938; SSE2-NEXT: movdqa %xmm2, %xmm8 6939; SSE2-NEXT: movdqa %xmm3, %xmm12 6940; SSE2-NEXT: pcmpgtd %xmm7, %xmm12 6941; SSE2-NEXT: pcmpeqd %xmm13, %xmm13 6942; SSE2-NEXT: movdqa %xmm12, %xmm9 6943; SSE2-NEXT: pxor %xmm13, %xmm9 6944; SSE2-NEXT: movdqa %xmm8, %xmm14 6945; SSE2-NEXT: pcmpgtd %xmm6, %xmm14 6946; SSE2-NEXT: movdqa %xmm14, %xmm2 6947; SSE2-NEXT: pxor %xmm13, %xmm2 6948; SSE2-NEXT: movdqa %xmm1, %xmm15 6949; SSE2-NEXT: pcmpgtd %xmm5, %xmm15 6950; SSE2-NEXT: movdqa %xmm15, %xmm10 6951; SSE2-NEXT: pxor %xmm13, %xmm10 6952; SSE2-NEXT: movdqa %xmm0, %xmm11 6953; SSE2-NEXT: pcmpgtd %xmm4, %xmm11 6954; SSE2-NEXT: pxor %xmm11, %xmm13 6955; SSE2-NEXT: pandn %xmm4, %xmm11 6956; SSE2-NEXT: pandn %xmm0, %xmm13 6957; SSE2-NEXT: por %xmm13, %xmm11 6958; SSE2-NEXT: pandn %xmm5, %xmm15 6959; SSE2-NEXT: pandn %xmm1, %xmm10 6960; SSE2-NEXT: por %xmm15, %xmm10 6961; SSE2-NEXT: pandn %xmm6, %xmm14 6962; SSE2-NEXT: pandn %xmm8, %xmm2 6963; SSE2-NEXT: por %xmm14, %xmm2 6964; SSE2-NEXT: pandn %xmm7, %xmm12 6965; SSE2-NEXT: pandn %xmm3, %xmm9 6966; SSE2-NEXT: por %xmm12, %xmm9 6967; SSE2-NEXT: movdqa %xmm11, %xmm0 6968; SSE2-NEXT: movdqa %xmm10, %xmm1 6969; SSE2-NEXT: movdqa %xmm9, %xmm3 6970; SSE2-NEXT: retq 6971; 6972; SSE4-LABEL: test146: 6973; SSE4: # BB#0: # %entry 6974; SSE4-NEXT: pmaxsd %xmm4, %xmm0 6975; SSE4-NEXT: pmaxsd %xmm5, %xmm1 6976; SSE4-NEXT: pmaxsd %xmm6, %xmm2 6977; SSE4-NEXT: pmaxsd %xmm7, %xmm3 6978; SSE4-NEXT: retq 6979; 6980; AVX1-LABEL: test146: 6981; AVX1: # BB#0: # %entry 6982; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 6983; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 6984; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 6985; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 6986; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 6987; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 6988; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 6989; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2 6990; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 6991; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 6992; AVX1-NEXT: retq 6993; 6994; AVX2-LABEL: test146: 6995; AVX2: # BB#0: # %entry 6996; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 6997; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 6998; AVX2-NEXT: retq 6999; 7000; AVX512F-LABEL: test146: 7001; AVX512F: # BB#0: # %entry 7002; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0 7003; AVX512F-NEXT: retq 7004entry: 7005 %cmp = icmp sle <16 x i32> %a, %b 7006 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7007 ret <16 x i32> %sel 7008} 7009 7010define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) { 7011; SSE2-LABEL: test147: 7012; SSE2: # BB#0: # %entry 7013; SSE2-NEXT: movdqa %xmm3, %xmm8 7014; SSE2-NEXT: pcmpgtd %xmm7, %xmm3 7015; SSE2-NEXT: movdqa %xmm2, %xmm9 7016; SSE2-NEXT: pcmpgtd %xmm6, %xmm9 7017; SSE2-NEXT: movdqa %xmm1, %xmm10 7018; SSE2-NEXT: pcmpgtd %xmm5, %xmm10 7019; SSE2-NEXT: movdqa %xmm0, %xmm11 7020; SSE2-NEXT: pcmpgtd %xmm4, %xmm11 7021; SSE2-NEXT: pand %xmm11, %xmm4 7022; SSE2-NEXT: pandn %xmm0, %xmm11 7023; SSE2-NEXT: por %xmm4, %xmm11 7024; SSE2-NEXT: pand %xmm10, %xmm5 7025; SSE2-NEXT: pandn %xmm1, %xmm10 7026; SSE2-NEXT: por %xmm5, %xmm10 7027; SSE2-NEXT: pand %xmm9, %xmm6 7028; SSE2-NEXT: pandn %xmm2, %xmm9 7029; SSE2-NEXT: por %xmm6, %xmm9 7030; SSE2-NEXT: pand %xmm3, %xmm7 7031; SSE2-NEXT: pandn %xmm8, %xmm3 7032; SSE2-NEXT: por %xmm7, %xmm3 7033; SSE2-NEXT: movdqa %xmm11, %xmm0 7034; SSE2-NEXT: movdqa %xmm10, %xmm1 7035; SSE2-NEXT: movdqa %xmm9, %xmm2 7036; SSE2-NEXT: retq 7037; 7038; SSE4-LABEL: test147: 7039; SSE4: # BB#0: # %entry 7040; SSE4-NEXT: pminsd %xmm4, %xmm0 7041; SSE4-NEXT: pminsd %xmm5, %xmm1 7042; SSE4-NEXT: pminsd %xmm6, %xmm2 7043; SSE4-NEXT: pminsd %xmm7, %xmm3 7044; SSE4-NEXT: retq 7045; 7046; AVX1-LABEL: test147: 7047; AVX1: # BB#0: # %entry 7048; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7049; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7050; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 7051; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 7052; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7053; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7054; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7055; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 7056; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 7057; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7058; AVX1-NEXT: retq 7059; 7060; AVX2-LABEL: test147: 7061; AVX2: # BB#0: # %entry 7062; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 7063; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 7064; AVX2-NEXT: retq 7065; 7066; AVX512F-LABEL: test147: 7067; AVX512F: # BB#0: # %entry 7068; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0 7069; AVX512F-NEXT: retq 7070entry: 7071 %cmp = icmp sgt <16 x i32> %a, %b 7072 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7073 ret <16 x i32> %sel 7074} 7075 7076define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) { 7077; SSE2-LABEL: test148: 7078; SSE2: # BB#0: # %entry 7079; SSE2-NEXT: movdqa %xmm2, %xmm8 7080; SSE2-NEXT: movdqa %xmm0, %xmm10 7081; SSE2-NEXT: movdqa %xmm7, %xmm12 7082; SSE2-NEXT: pcmpgtd %xmm3, %xmm12 7083; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 7084; SSE2-NEXT: movdqa %xmm12, %xmm9 7085; SSE2-NEXT: pxor %xmm0, %xmm9 7086; SSE2-NEXT: movdqa %xmm6, %xmm13 7087; SSE2-NEXT: pcmpgtd %xmm8, %xmm13 7088; SSE2-NEXT: movdqa %xmm13, %xmm2 7089; SSE2-NEXT: pxor %xmm0, %xmm2 7090; SSE2-NEXT: movdqa %xmm5, %xmm14 7091; SSE2-NEXT: pcmpgtd %xmm1, %xmm14 7092; SSE2-NEXT: movdqa %xmm14, %xmm11 7093; SSE2-NEXT: pxor %xmm0, %xmm11 7094; SSE2-NEXT: movdqa %xmm4, %xmm15 7095; SSE2-NEXT: pcmpgtd %xmm10, %xmm15 7096; SSE2-NEXT: pxor %xmm15, %xmm0 7097; SSE2-NEXT: pandn %xmm4, %xmm15 7098; SSE2-NEXT: pandn %xmm10, %xmm0 7099; SSE2-NEXT: por %xmm15, %xmm0 7100; SSE2-NEXT: pandn %xmm5, %xmm14 7101; SSE2-NEXT: pandn %xmm1, %xmm11 7102; SSE2-NEXT: por %xmm14, %xmm11 7103; SSE2-NEXT: pandn %xmm6, %xmm13 7104; SSE2-NEXT: pandn %xmm8, %xmm2 7105; SSE2-NEXT: por %xmm13, %xmm2 7106; SSE2-NEXT: pandn %xmm7, %xmm12 7107; SSE2-NEXT: pandn %xmm3, %xmm9 7108; SSE2-NEXT: por %xmm12, %xmm9 7109; SSE2-NEXT: movdqa %xmm11, %xmm1 7110; SSE2-NEXT: movdqa %xmm9, %xmm3 7111; SSE2-NEXT: retq 7112; 7113; SSE4-LABEL: test148: 7114; SSE4: # BB#0: # %entry 7115; SSE4-NEXT: pminsd %xmm4, %xmm0 7116; SSE4-NEXT: pminsd %xmm5, %xmm1 7117; SSE4-NEXT: pminsd %xmm6, %xmm2 7118; SSE4-NEXT: pminsd %xmm7, %xmm3 7119; SSE4-NEXT: retq 7120; 7121; AVX1-LABEL: test148: 7122; AVX1: # BB#0: # %entry 7123; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7124; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7125; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4 7126; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0 7127; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7128; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7129; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7130; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2 7131; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1 7132; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7133; AVX1-NEXT: retq 7134; 7135; AVX2-LABEL: test148: 7136; AVX2: # BB#0: # %entry 7137; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0 7138; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1 7139; AVX2-NEXT: retq 7140; 7141; AVX512F-LABEL: test148: 7142; AVX512F: # BB#0: # %entry 7143; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0 7144; AVX512F-NEXT: retq 7145entry: 7146 %cmp = icmp sge <16 x i32> %a, %b 7147 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7148 ret <16 x i32> %sel 7149} 7150 7151define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) { 7152; SSE2-LABEL: test149: 7153; SSE2: # BB#0: # %entry 7154; SSE2-NEXT: movdqa %xmm0, %xmm11 7155; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648] 7156; SSE2-NEXT: movdqa %xmm3, %xmm9 7157; SSE2-NEXT: pxor %xmm0, %xmm9 7158; SSE2-NEXT: movdqa %xmm7, %xmm8 7159; SSE2-NEXT: pxor %xmm0, %xmm8 7160; SSE2-NEXT: pcmpgtd %xmm9, %xmm8 7161; SSE2-NEXT: movdqa %xmm2, %xmm10 7162; SSE2-NEXT: pxor %xmm0, %xmm10 7163; SSE2-NEXT: movdqa %xmm6, %xmm9 7164; SSE2-NEXT: pxor %xmm0, %xmm9 7165; SSE2-NEXT: pcmpgtd %xmm10, %xmm9 7166; SSE2-NEXT: movdqa %xmm1, %xmm12 7167; SSE2-NEXT: pxor %xmm0, %xmm12 7168; SSE2-NEXT: movdqa %xmm5, %xmm10 7169; SSE2-NEXT: pxor %xmm0, %xmm10 7170; SSE2-NEXT: pcmpgtd %xmm12, %xmm10 7171; SSE2-NEXT: movdqa %xmm11, %xmm12 7172; SSE2-NEXT: pxor %xmm0, %xmm12 7173; SSE2-NEXT: pxor %xmm4, %xmm0 7174; SSE2-NEXT: pcmpgtd %xmm12, %xmm0 7175; SSE2-NEXT: pand %xmm0, %xmm4 7176; SSE2-NEXT: pandn %xmm11, %xmm0 7177; SSE2-NEXT: por %xmm4, %xmm0 7178; SSE2-NEXT: pand %xmm10, %xmm5 7179; SSE2-NEXT: pandn %xmm1, %xmm10 7180; SSE2-NEXT: por %xmm5, %xmm10 7181; SSE2-NEXT: pand %xmm9, %xmm6 7182; SSE2-NEXT: pandn %xmm2, %xmm9 7183; SSE2-NEXT: por %xmm6, %xmm9 7184; SSE2-NEXT: pand %xmm8, %xmm7 7185; SSE2-NEXT: pandn %xmm3, %xmm8 7186; SSE2-NEXT: por %xmm7, %xmm8 7187; SSE2-NEXT: movdqa %xmm10, %xmm1 7188; SSE2-NEXT: movdqa %xmm9, %xmm2 7189; SSE2-NEXT: movdqa %xmm8, %xmm3 7190; SSE2-NEXT: retq 7191; 7192; SSE4-LABEL: test149: 7193; SSE4: # BB#0: # %entry 7194; SSE4-NEXT: pmaxud %xmm4, %xmm0 7195; SSE4-NEXT: pmaxud %xmm5, %xmm1 7196; SSE4-NEXT: pmaxud %xmm6, %xmm2 7197; SSE4-NEXT: pmaxud %xmm7, %xmm3 7198; SSE4-NEXT: retq 7199; 7200; AVX1-LABEL: test149: 7201; AVX1: # BB#0: # %entry 7202; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7203; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7204; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 7205; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 7206; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7207; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7208; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7209; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 7210; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 7211; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7212; AVX1-NEXT: retq 7213; 7214; AVX2-LABEL: test149: 7215; AVX2: # BB#0: # %entry 7216; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 7217; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 7218; AVX2-NEXT: retq 7219; 7220; AVX512F-LABEL: test149: 7221; AVX512F: # BB#0: # %entry 7222; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 7223; AVX512F-NEXT: retq 7224entry: 7225 %cmp = icmp ult <16 x i32> %a, %b 7226 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7227 ret <16 x i32> %sel 7228} 7229 7230define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) { 7231; SSE2-LABEL: test150: 7232; SSE2: # BB#0: # %entry 7233; SSE2-NEXT: movdqa %xmm0, %xmm10 7234; SSE2-NEXT: movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648] 7235; SSE2-NEXT: movdqa %xmm7, %xmm0 7236; SSE2-NEXT: pxor %xmm14, %xmm0 7237; SSE2-NEXT: movdqa %xmm3, %xmm12 7238; SSE2-NEXT: pxor %xmm14, %xmm12 7239; SSE2-NEXT: pcmpgtd %xmm0, %xmm12 7240; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 7241; SSE2-NEXT: movdqa %xmm12, %xmm8 7242; SSE2-NEXT: pxor %xmm0, %xmm8 7243; SSE2-NEXT: movdqa %xmm6, %xmm9 7244; SSE2-NEXT: pxor %xmm14, %xmm9 7245; SSE2-NEXT: movdqa %xmm2, %xmm13 7246; SSE2-NEXT: pxor %xmm14, %xmm13 7247; SSE2-NEXT: pcmpgtd %xmm9, %xmm13 7248; SSE2-NEXT: movdqa %xmm13, %xmm9 7249; SSE2-NEXT: pxor %xmm0, %xmm9 7250; SSE2-NEXT: movdqa %xmm5, %xmm11 7251; SSE2-NEXT: pxor %xmm14, %xmm11 7252; SSE2-NEXT: movdqa %xmm1, %xmm15 7253; SSE2-NEXT: pxor %xmm14, %xmm15 7254; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 7255; SSE2-NEXT: movdqa %xmm4, %xmm11 7256; SSE2-NEXT: pxor %xmm14, %xmm11 7257; SSE2-NEXT: pxor %xmm10, %xmm14 7258; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 7259; SSE2-NEXT: movdqa %xmm15, %xmm11 7260; SSE2-NEXT: pxor %xmm0, %xmm11 7261; SSE2-NEXT: pxor %xmm14, %xmm0 7262; SSE2-NEXT: pandn %xmm4, %xmm14 7263; SSE2-NEXT: pandn %xmm10, %xmm0 7264; SSE2-NEXT: por %xmm14, %xmm0 7265; SSE2-NEXT: pandn %xmm5, %xmm15 7266; SSE2-NEXT: pandn %xmm1, %xmm11 7267; SSE2-NEXT: por %xmm15, %xmm11 7268; SSE2-NEXT: pandn %xmm6, %xmm13 7269; SSE2-NEXT: pandn %xmm2, %xmm9 7270; SSE2-NEXT: por %xmm13, %xmm9 7271; SSE2-NEXT: pandn %xmm7, %xmm12 7272; SSE2-NEXT: pandn %xmm3, %xmm8 7273; SSE2-NEXT: por %xmm12, %xmm8 7274; SSE2-NEXT: movdqa %xmm11, %xmm1 7275; SSE2-NEXT: movdqa %xmm9, %xmm2 7276; SSE2-NEXT: movdqa %xmm8, %xmm3 7277; SSE2-NEXT: retq 7278; 7279; SSE4-LABEL: test150: 7280; SSE4: # BB#0: # %entry 7281; SSE4-NEXT: pmaxud %xmm4, %xmm0 7282; SSE4-NEXT: pmaxud %xmm5, %xmm1 7283; SSE4-NEXT: pmaxud %xmm6, %xmm2 7284; SSE4-NEXT: pmaxud %xmm7, %xmm3 7285; SSE4-NEXT: retq 7286; 7287; AVX1-LABEL: test150: 7288; AVX1: # BB#0: # %entry 7289; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7290; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7291; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4 7292; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0 7293; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7294; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7295; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7296; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2 7297; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1 7298; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7299; AVX1-NEXT: retq 7300; 7301; AVX2-LABEL: test150: 7302; AVX2: # BB#0: # %entry 7303; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0 7304; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1 7305; AVX2-NEXT: retq 7306; 7307; AVX512F-LABEL: test150: 7308; AVX512F: # BB#0: # %entry 7309; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0 7310; AVX512F-NEXT: retq 7311entry: 7312 %cmp = icmp ule <16 x i32> %a, %b 7313 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7314 ret <16 x i32> %sel 7315} 7316 7317define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) { 7318; SSE2-LABEL: test151: 7319; SSE2: # BB#0: # %entry 7320; SSE2-NEXT: movdqa %xmm0, %xmm11 7321; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648] 7322; SSE2-NEXT: movdqa %xmm7, %xmm9 7323; SSE2-NEXT: pxor %xmm0, %xmm9 7324; SSE2-NEXT: movdqa %xmm3, %xmm8 7325; SSE2-NEXT: pxor %xmm0, %xmm8 7326; SSE2-NEXT: pcmpgtd %xmm9, %xmm8 7327; SSE2-NEXT: movdqa %xmm6, %xmm10 7328; SSE2-NEXT: pxor %xmm0, %xmm10 7329; SSE2-NEXT: movdqa %xmm2, %xmm9 7330; SSE2-NEXT: pxor %xmm0, %xmm9 7331; SSE2-NEXT: pcmpgtd %xmm10, %xmm9 7332; SSE2-NEXT: movdqa %xmm5, %xmm12 7333; SSE2-NEXT: pxor %xmm0, %xmm12 7334; SSE2-NEXT: movdqa %xmm1, %xmm10 7335; SSE2-NEXT: pxor %xmm0, %xmm10 7336; SSE2-NEXT: pcmpgtd %xmm12, %xmm10 7337; SSE2-NEXT: movdqa %xmm4, %xmm12 7338; SSE2-NEXT: pxor %xmm0, %xmm12 7339; SSE2-NEXT: pxor %xmm11, %xmm0 7340; SSE2-NEXT: pcmpgtd %xmm12, %xmm0 7341; SSE2-NEXT: pand %xmm0, %xmm4 7342; SSE2-NEXT: pandn %xmm11, %xmm0 7343; SSE2-NEXT: por %xmm4, %xmm0 7344; SSE2-NEXT: pand %xmm10, %xmm5 7345; SSE2-NEXT: pandn %xmm1, %xmm10 7346; SSE2-NEXT: por %xmm5, %xmm10 7347; SSE2-NEXT: pand %xmm9, %xmm6 7348; SSE2-NEXT: pandn %xmm2, %xmm9 7349; SSE2-NEXT: por %xmm6, %xmm9 7350; SSE2-NEXT: pand %xmm8, %xmm7 7351; SSE2-NEXT: pandn %xmm3, %xmm8 7352; SSE2-NEXT: por %xmm7, %xmm8 7353; SSE2-NEXT: movdqa %xmm10, %xmm1 7354; SSE2-NEXT: movdqa %xmm9, %xmm2 7355; SSE2-NEXT: movdqa %xmm8, %xmm3 7356; SSE2-NEXT: retq 7357; 7358; SSE4-LABEL: test151: 7359; SSE4: # BB#0: # %entry 7360; SSE4-NEXT: pminud %xmm4, %xmm0 7361; SSE4-NEXT: pminud %xmm5, %xmm1 7362; SSE4-NEXT: pminud %xmm6, %xmm2 7363; SSE4-NEXT: pminud %xmm7, %xmm3 7364; SSE4-NEXT: retq 7365; 7366; AVX1-LABEL: test151: 7367; AVX1: # BB#0: # %entry 7368; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7369; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7370; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 7371; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 7372; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7373; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7374; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7375; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 7376; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 7377; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7378; AVX1-NEXT: retq 7379; 7380; AVX2-LABEL: test151: 7381; AVX2: # BB#0: # %entry 7382; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 7383; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 7384; AVX2-NEXT: retq 7385; 7386; AVX512F-LABEL: test151: 7387; AVX512F: # BB#0: # %entry 7388; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0 7389; AVX512F-NEXT: retq 7390entry: 7391 %cmp = icmp ugt <16 x i32> %a, %b 7392 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7393 ret <16 x i32> %sel 7394} 7395 7396define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) { 7397; SSE2-LABEL: test152: 7398; SSE2: # BB#0: # %entry 7399; SSE2-NEXT: movdqa %xmm0, %xmm10 7400; SSE2-NEXT: movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648] 7401; SSE2-NEXT: movdqa %xmm3, %xmm0 7402; SSE2-NEXT: pxor %xmm14, %xmm0 7403; SSE2-NEXT: movdqa %xmm7, %xmm12 7404; SSE2-NEXT: pxor %xmm14, %xmm12 7405; SSE2-NEXT: pcmpgtd %xmm0, %xmm12 7406; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 7407; SSE2-NEXT: movdqa %xmm12, %xmm8 7408; SSE2-NEXT: pxor %xmm0, %xmm8 7409; SSE2-NEXT: movdqa %xmm2, %xmm9 7410; SSE2-NEXT: pxor %xmm14, %xmm9 7411; SSE2-NEXT: movdqa %xmm6, %xmm13 7412; SSE2-NEXT: pxor %xmm14, %xmm13 7413; SSE2-NEXT: pcmpgtd %xmm9, %xmm13 7414; SSE2-NEXT: movdqa %xmm13, %xmm9 7415; SSE2-NEXT: pxor %xmm0, %xmm9 7416; SSE2-NEXT: movdqa %xmm1, %xmm11 7417; SSE2-NEXT: pxor %xmm14, %xmm11 7418; SSE2-NEXT: movdqa %xmm5, %xmm15 7419; SSE2-NEXT: pxor %xmm14, %xmm15 7420; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 7421; SSE2-NEXT: movdqa %xmm10, %xmm11 7422; SSE2-NEXT: pxor %xmm14, %xmm11 7423; SSE2-NEXT: pxor %xmm4, %xmm14 7424; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 7425; SSE2-NEXT: movdqa %xmm15, %xmm11 7426; SSE2-NEXT: pxor %xmm0, %xmm11 7427; SSE2-NEXT: pxor %xmm14, %xmm0 7428; SSE2-NEXT: pandn %xmm4, %xmm14 7429; SSE2-NEXT: pandn %xmm10, %xmm0 7430; SSE2-NEXT: por %xmm14, %xmm0 7431; SSE2-NEXT: pandn %xmm5, %xmm15 7432; SSE2-NEXT: pandn %xmm1, %xmm11 7433; SSE2-NEXT: por %xmm15, %xmm11 7434; SSE2-NEXT: pandn %xmm6, %xmm13 7435; SSE2-NEXT: pandn %xmm2, %xmm9 7436; SSE2-NEXT: por %xmm13, %xmm9 7437; SSE2-NEXT: pandn %xmm7, %xmm12 7438; SSE2-NEXT: pandn %xmm3, %xmm8 7439; SSE2-NEXT: por %xmm12, %xmm8 7440; SSE2-NEXT: movdqa %xmm11, %xmm1 7441; SSE2-NEXT: movdqa %xmm9, %xmm2 7442; SSE2-NEXT: movdqa %xmm8, %xmm3 7443; SSE2-NEXT: retq 7444; 7445; SSE4-LABEL: test152: 7446; SSE4: # BB#0: # %entry 7447; SSE4-NEXT: pminud %xmm4, %xmm0 7448; SSE4-NEXT: pminud %xmm5, %xmm1 7449; SSE4-NEXT: pminud %xmm6, %xmm2 7450; SSE4-NEXT: pminud %xmm7, %xmm3 7451; SSE4-NEXT: retq 7452; 7453; AVX1-LABEL: test152: 7454; AVX1: # BB#0: # %entry 7455; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 7456; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7457; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4 7458; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0 7459; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 7460; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 7461; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7462; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2 7463; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1 7464; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 7465; AVX1-NEXT: retq 7466; 7467; AVX2-LABEL: test152: 7468; AVX2: # BB#0: # %entry 7469; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0 7470; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1 7471; AVX2-NEXT: retq 7472; 7473; AVX512F-LABEL: test152: 7474; AVX512F: # BB#0: # %entry 7475; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0 7476; AVX512F-NEXT: retq 7477entry: 7478 %cmp = icmp uge <16 x i32> %a, %b 7479 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a 7480 ret <16 x i32> %sel 7481} 7482 7483; ----------------------- 7484 7485define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) { 7486; SSE2-LABEL: test153: 7487; SSE2: # BB#0: # %entry 7488; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,0,2147483648,0] 7489; SSE2-NEXT: movdqa %xmm3, %xmm8 7490; SSE2-NEXT: pxor %xmm11, %xmm8 7491; SSE2-NEXT: movdqa %xmm7, %xmm9 7492; SSE2-NEXT: pxor %xmm11, %xmm9 7493; SSE2-NEXT: movdqa %xmm9, %xmm10 7494; SSE2-NEXT: pcmpgtd %xmm8, %xmm10 7495; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2] 7496; SSE2-NEXT: pcmpeqd %xmm8, %xmm9 7497; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 7498; SSE2-NEXT: pand %xmm12, %xmm9 7499; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3] 7500; SSE2-NEXT: por %xmm9, %xmm8 7501; SSE2-NEXT: movdqa %xmm2, %xmm9 7502; SSE2-NEXT: pxor %xmm11, %xmm9 7503; SSE2-NEXT: movdqa %xmm6, %xmm10 7504; SSE2-NEXT: pxor %xmm11, %xmm10 7505; SSE2-NEXT: movdqa %xmm10, %xmm12 7506; SSE2-NEXT: pcmpgtd %xmm9, %xmm12 7507; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 7508; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7509; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 7510; SSE2-NEXT: pand %xmm13, %xmm10 7511; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3] 7512; SSE2-NEXT: por %xmm10, %xmm9 7513; SSE2-NEXT: movdqa %xmm1, %xmm10 7514; SSE2-NEXT: pxor %xmm11, %xmm10 7515; SSE2-NEXT: movdqa %xmm5, %xmm12 7516; SSE2-NEXT: pxor %xmm11, %xmm12 7517; SSE2-NEXT: movdqa %xmm12, %xmm13 7518; SSE2-NEXT: pcmpgtd %xmm10, %xmm13 7519; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 7520; SSE2-NEXT: pcmpeqd %xmm10, %xmm12 7521; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3] 7522; SSE2-NEXT: pand %xmm14, %xmm12 7523; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3] 7524; SSE2-NEXT: por %xmm12, %xmm10 7525; SSE2-NEXT: movdqa %xmm0, %xmm12 7526; SSE2-NEXT: pxor %xmm11, %xmm12 7527; SSE2-NEXT: pxor %xmm4, %xmm11 7528; SSE2-NEXT: movdqa %xmm11, %xmm13 7529; SSE2-NEXT: pcmpgtd %xmm12, %xmm13 7530; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 7531; SSE2-NEXT: pcmpeqd %xmm12, %xmm11 7532; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 7533; SSE2-NEXT: pand %xmm14, %xmm12 7534; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 7535; SSE2-NEXT: por %xmm12, %xmm11 7536; SSE2-NEXT: pand %xmm11, %xmm4 7537; SSE2-NEXT: pandn %xmm0, %xmm11 7538; SSE2-NEXT: por %xmm4, %xmm11 7539; SSE2-NEXT: pand %xmm10, %xmm5 7540; SSE2-NEXT: pandn %xmm1, %xmm10 7541; SSE2-NEXT: por %xmm5, %xmm10 7542; SSE2-NEXT: pand %xmm9, %xmm6 7543; SSE2-NEXT: pandn %xmm2, %xmm9 7544; SSE2-NEXT: por %xmm6, %xmm9 7545; SSE2-NEXT: pand %xmm8, %xmm7 7546; SSE2-NEXT: pandn %xmm3, %xmm8 7547; SSE2-NEXT: por %xmm7, %xmm8 7548; SSE2-NEXT: movdqa %xmm11, %xmm0 7549; SSE2-NEXT: movdqa %xmm10, %xmm1 7550; SSE2-NEXT: movdqa %xmm9, %xmm2 7551; SSE2-NEXT: movdqa %xmm8, %xmm3 7552; SSE2-NEXT: retq 7553; 7554; SSE4-LABEL: test153: 7555; SSE4: # BB#0: # %entry 7556; SSE4-NEXT: movdqa %xmm0, %xmm8 7557; SSE4-NEXT: movdqa %xmm7, %xmm9 7558; SSE4-NEXT: pcmpgtq %xmm3, %xmm9 7559; SSE4-NEXT: movdqa %xmm6, %xmm10 7560; SSE4-NEXT: pcmpgtq %xmm2, %xmm10 7561; SSE4-NEXT: movdqa %xmm5, %xmm11 7562; SSE4-NEXT: pcmpgtq %xmm1, %xmm11 7563; SSE4-NEXT: movdqa %xmm4, %xmm0 7564; SSE4-NEXT: pcmpgtq %xmm8, %xmm0 7565; SSE4-NEXT: blendvpd %xmm4, %xmm8 7566; SSE4-NEXT: movdqa %xmm11, %xmm0 7567; SSE4-NEXT: blendvpd %xmm5, %xmm1 7568; SSE4-NEXT: movdqa %xmm10, %xmm0 7569; SSE4-NEXT: blendvpd %xmm6, %xmm2 7570; SSE4-NEXT: movdqa %xmm9, %xmm0 7571; SSE4-NEXT: blendvpd %xmm7, %xmm3 7572; SSE4-NEXT: movapd %xmm8, %xmm0 7573; SSE4-NEXT: retq 7574; 7575; AVX1-LABEL: test153: 7576; AVX1: # BB#0: # %entry 7577; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7578; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5 7579; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7580; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm5 7581; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7582; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 7583; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 7584; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 7585; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm6 7586; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5 7587; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 7588; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 7589; AVX1-NEXT: retq 7590; 7591; AVX2-LABEL: test153: 7592; AVX2: # BB#0: # %entry 7593; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm4 7594; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm5 7595; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 7596; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 7597; AVX2-NEXT: retq 7598; 7599; AVX512F-LABEL: test153: 7600; AVX512F: # BB#0: # %entry 7601; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 7602; AVX512F-NEXT: retq 7603entry: 7604 %cmp = icmp slt <8 x i64> %a, %b 7605 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7606 ret <8 x i64> %sel 7607} 7608 7609define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) { 7610; SSE2-LABEL: test154: 7611; SSE2: # BB#0: # %entry 7612; SSE2-NEXT: movdqa %xmm7, %xmm8 7613; SSE2-NEXT: movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill 7614; SSE2-NEXT: movdqa %xmm3, %xmm7 7615; SSE2-NEXT: movdqa %xmm2, %xmm3 7616; SSE2-NEXT: movdqa %xmm1, %xmm2 7617; SSE2-NEXT: movdqa %xmm0, %xmm9 7618; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0] 7619; SSE2-NEXT: pxor %xmm10, %xmm8 7620; SSE2-NEXT: movdqa %xmm7, %xmm0 7621; SSE2-NEXT: pxor %xmm10, %xmm0 7622; SSE2-NEXT: movdqa %xmm0, %xmm11 7623; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 7624; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7625; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 7626; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 7627; SSE2-NEXT: pand %xmm12, %xmm0 7628; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 7629; SSE2-NEXT: por %xmm0, %xmm12 7630; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 7631; SSE2-NEXT: movdqa %xmm12, %xmm8 7632; SSE2-NEXT: pxor %xmm1, %xmm8 7633; SSE2-NEXT: movdqa %xmm6, %xmm11 7634; SSE2-NEXT: pxor %xmm10, %xmm11 7635; SSE2-NEXT: movdqa %xmm3, %xmm13 7636; SSE2-NEXT: pxor %xmm10, %xmm13 7637; SSE2-NEXT: movdqa %xmm13, %xmm14 7638; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 7639; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 7640; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 7641; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 7642; SSE2-NEXT: pand %xmm15, %xmm11 7643; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 7644; SSE2-NEXT: por %xmm11, %xmm13 7645; SSE2-NEXT: movdqa %xmm5, %xmm11 7646; SSE2-NEXT: pxor %xmm10, %xmm11 7647; SSE2-NEXT: movdqa %xmm2, %xmm14 7648; SSE2-NEXT: pxor %xmm10, %xmm14 7649; SSE2-NEXT: movdqa %xmm14, %xmm15 7650; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 7651; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 7652; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 7653; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 7654; SSE2-NEXT: pand %xmm11, %xmm14 7655; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 7656; SSE2-NEXT: por %xmm14, %xmm15 7657; SSE2-NEXT: movdqa %xmm4, %xmm11 7658; SSE2-NEXT: pxor %xmm10, %xmm11 7659; SSE2-NEXT: pxor %xmm9, %xmm10 7660; SSE2-NEXT: movdqa %xmm10, %xmm14 7661; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 7662; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 7663; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 7664; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 7665; SSE2-NEXT: pand %xmm11, %xmm0 7666; SSE2-NEXT: movdqa %xmm13, %xmm10 7667; SSE2-NEXT: pxor %xmm1, %xmm10 7668; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 7669; SSE2-NEXT: por %xmm0, %xmm14 7670; SSE2-NEXT: movdqa %xmm15, %xmm11 7671; SSE2-NEXT: pxor %xmm1, %xmm11 7672; SSE2-NEXT: pxor %xmm14, %xmm1 7673; SSE2-NEXT: pandn %xmm4, %xmm14 7674; SSE2-NEXT: pandn %xmm9, %xmm1 7675; SSE2-NEXT: por %xmm14, %xmm1 7676; SSE2-NEXT: pandn %xmm5, %xmm15 7677; SSE2-NEXT: pandn %xmm2, %xmm11 7678; SSE2-NEXT: por %xmm15, %xmm11 7679; SSE2-NEXT: pandn %xmm6, %xmm13 7680; SSE2-NEXT: pandn %xmm3, %xmm10 7681; SSE2-NEXT: por %xmm13, %xmm10 7682; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload 7683; SSE2-NEXT: pandn %xmm7, %xmm8 7684; SSE2-NEXT: por %xmm12, %xmm8 7685; SSE2-NEXT: movdqa %xmm1, %xmm0 7686; SSE2-NEXT: movdqa %xmm11, %xmm1 7687; SSE2-NEXT: movdqa %xmm10, %xmm2 7688; SSE2-NEXT: movdqa %xmm8, %xmm3 7689; SSE2-NEXT: retq 7690; 7691; SSE4-LABEL: test154: 7692; SSE4: # BB#0: # %entry 7693; SSE4-NEXT: movdqa %xmm0, %xmm8 7694; SSE4-NEXT: movdqa %xmm3, %xmm9 7695; SSE4-NEXT: pcmpgtq %xmm7, %xmm9 7696; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 7697; SSE4-NEXT: pxor %xmm12, %xmm9 7698; SSE4-NEXT: movdqa %xmm2, %xmm10 7699; SSE4-NEXT: pcmpgtq %xmm6, %xmm10 7700; SSE4-NEXT: pxor %xmm12, %xmm10 7701; SSE4-NEXT: movdqa %xmm1, %xmm11 7702; SSE4-NEXT: pcmpgtq %xmm5, %xmm11 7703; SSE4-NEXT: pxor %xmm12, %xmm11 7704; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7705; SSE4-NEXT: pxor %xmm12, %xmm0 7706; SSE4-NEXT: blendvpd %xmm4, %xmm8 7707; SSE4-NEXT: movdqa %xmm11, %xmm0 7708; SSE4-NEXT: blendvpd %xmm5, %xmm1 7709; SSE4-NEXT: movdqa %xmm10, %xmm0 7710; SSE4-NEXT: blendvpd %xmm6, %xmm2 7711; SSE4-NEXT: movdqa %xmm9, %xmm0 7712; SSE4-NEXT: blendvpd %xmm7, %xmm3 7713; SSE4-NEXT: movapd %xmm8, %xmm0 7714; SSE4-NEXT: retq 7715; 7716; AVX1-LABEL: test154: 7717; AVX1: # BB#0: # %entry 7718; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7719; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 7720; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7721; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5 7722; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7723; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm6 7724; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7725; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 7726; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 7727; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7 7728; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 7729; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7730; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm7 7731; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm5 7732; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 7733; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 7734; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 7735; AVX1-NEXT: retq 7736; 7737; AVX2-LABEL: test154: 7738; AVX2: # BB#0: # %entry 7739; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm4 7740; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5 7741; AVX2-NEXT: vpxor %ymm5, %ymm4, %ymm4 7742; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm6 7743; AVX2-NEXT: vpxor %ymm5, %ymm6, %ymm5 7744; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 7745; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 7746; AVX2-NEXT: retq 7747; 7748; AVX512F-LABEL: test154: 7749; AVX512F: # BB#0: # %entry 7750; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 7751; AVX512F-NEXT: retq 7752entry: 7753 %cmp = icmp sle <8 x i64> %a, %b 7754 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7755 ret <8 x i64> %sel 7756} 7757 7758define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) { 7759; SSE2-LABEL: test155: 7760; SSE2: # BB#0: # %entry 7761; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,0,2147483648,0] 7762; SSE2-NEXT: movdqa %xmm7, %xmm8 7763; SSE2-NEXT: pxor %xmm11, %xmm8 7764; SSE2-NEXT: movdqa %xmm3, %xmm9 7765; SSE2-NEXT: pxor %xmm11, %xmm9 7766; SSE2-NEXT: movdqa %xmm9, %xmm10 7767; SSE2-NEXT: pcmpgtd %xmm8, %xmm10 7768; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2] 7769; SSE2-NEXT: pcmpeqd %xmm8, %xmm9 7770; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 7771; SSE2-NEXT: pand %xmm12, %xmm9 7772; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3] 7773; SSE2-NEXT: por %xmm9, %xmm8 7774; SSE2-NEXT: movdqa %xmm6, %xmm9 7775; SSE2-NEXT: pxor %xmm11, %xmm9 7776; SSE2-NEXT: movdqa %xmm2, %xmm10 7777; SSE2-NEXT: pxor %xmm11, %xmm10 7778; SSE2-NEXT: movdqa %xmm10, %xmm12 7779; SSE2-NEXT: pcmpgtd %xmm9, %xmm12 7780; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 7781; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 7782; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 7783; SSE2-NEXT: pand %xmm13, %xmm10 7784; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3] 7785; SSE2-NEXT: por %xmm10, %xmm9 7786; SSE2-NEXT: movdqa %xmm5, %xmm10 7787; SSE2-NEXT: pxor %xmm11, %xmm10 7788; SSE2-NEXT: movdqa %xmm1, %xmm12 7789; SSE2-NEXT: pxor %xmm11, %xmm12 7790; SSE2-NEXT: movdqa %xmm12, %xmm13 7791; SSE2-NEXT: pcmpgtd %xmm10, %xmm13 7792; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 7793; SSE2-NEXT: pcmpeqd %xmm10, %xmm12 7794; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3] 7795; SSE2-NEXT: pand %xmm14, %xmm12 7796; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3] 7797; SSE2-NEXT: por %xmm12, %xmm10 7798; SSE2-NEXT: movdqa %xmm4, %xmm12 7799; SSE2-NEXT: pxor %xmm11, %xmm12 7800; SSE2-NEXT: pxor %xmm0, %xmm11 7801; SSE2-NEXT: movdqa %xmm11, %xmm13 7802; SSE2-NEXT: pcmpgtd %xmm12, %xmm13 7803; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 7804; SSE2-NEXT: pcmpeqd %xmm12, %xmm11 7805; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 7806; SSE2-NEXT: pand %xmm14, %xmm12 7807; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 7808; SSE2-NEXT: por %xmm12, %xmm11 7809; SSE2-NEXT: pand %xmm11, %xmm4 7810; SSE2-NEXT: pandn %xmm0, %xmm11 7811; SSE2-NEXT: por %xmm4, %xmm11 7812; SSE2-NEXT: pand %xmm10, %xmm5 7813; SSE2-NEXT: pandn %xmm1, %xmm10 7814; SSE2-NEXT: por %xmm5, %xmm10 7815; SSE2-NEXT: pand %xmm9, %xmm6 7816; SSE2-NEXT: pandn %xmm2, %xmm9 7817; SSE2-NEXT: por %xmm6, %xmm9 7818; SSE2-NEXT: pand %xmm8, %xmm7 7819; SSE2-NEXT: pandn %xmm3, %xmm8 7820; SSE2-NEXT: por %xmm7, %xmm8 7821; SSE2-NEXT: movdqa %xmm11, %xmm0 7822; SSE2-NEXT: movdqa %xmm10, %xmm1 7823; SSE2-NEXT: movdqa %xmm9, %xmm2 7824; SSE2-NEXT: movdqa %xmm8, %xmm3 7825; SSE2-NEXT: retq 7826; 7827; SSE4-LABEL: test155: 7828; SSE4: # BB#0: # %entry 7829; SSE4-NEXT: movdqa %xmm0, %xmm8 7830; SSE4-NEXT: movdqa %xmm3, %xmm9 7831; SSE4-NEXT: pcmpgtq %xmm7, %xmm9 7832; SSE4-NEXT: movdqa %xmm2, %xmm10 7833; SSE4-NEXT: pcmpgtq %xmm6, %xmm10 7834; SSE4-NEXT: movdqa %xmm1, %xmm11 7835; SSE4-NEXT: pcmpgtq %xmm5, %xmm11 7836; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 7837; SSE4-NEXT: blendvpd %xmm4, %xmm8 7838; SSE4-NEXT: movdqa %xmm11, %xmm0 7839; SSE4-NEXT: blendvpd %xmm5, %xmm1 7840; SSE4-NEXT: movdqa %xmm10, %xmm0 7841; SSE4-NEXT: blendvpd %xmm6, %xmm2 7842; SSE4-NEXT: movdqa %xmm9, %xmm0 7843; SSE4-NEXT: blendvpd %xmm7, %xmm3 7844; SSE4-NEXT: movapd %xmm8, %xmm0 7845; SSE4-NEXT: retq 7846; 7847; AVX1-LABEL: test155: 7848; AVX1: # BB#0: # %entry 7849; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 7850; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 7851; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7852; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm5 7853; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 7854; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 7855; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 7856; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 7857; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm6 7858; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5 7859; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 7860; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 7861; AVX1-NEXT: retq 7862; 7863; AVX2-LABEL: test155: 7864; AVX2: # BB#0: # %entry 7865; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm4 7866; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm5 7867; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 7868; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 7869; AVX2-NEXT: retq 7870; 7871; AVX512F-LABEL: test155: 7872; AVX512F: # BB#0: # %entry 7873; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 7874; AVX512F-NEXT: retq 7875entry: 7876 %cmp = icmp sgt <8 x i64> %a, %b 7877 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 7878 ret <8 x i64> %sel 7879} 7880 7881define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) { 7882; SSE2-LABEL: test156: 7883; SSE2: # BB#0: # %entry 7884; SSE2-NEXT: movdqa %xmm7, %xmm11 7885; SSE2-NEXT: movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill 7886; SSE2-NEXT: movdqa %xmm3, %xmm7 7887; SSE2-NEXT: movdqa %xmm2, %xmm3 7888; SSE2-NEXT: movdqa %xmm1, %xmm2 7889; SSE2-NEXT: movdqa %xmm0, %xmm9 7890; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0] 7891; SSE2-NEXT: movdqa %xmm7, %xmm8 7892; SSE2-NEXT: pxor %xmm10, %xmm8 7893; SSE2-NEXT: movdqa %xmm11, %xmm0 7894; SSE2-NEXT: pxor %xmm10, %xmm0 7895; SSE2-NEXT: movdqa %xmm0, %xmm11 7896; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 7897; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 7898; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 7899; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 7900; SSE2-NEXT: pand %xmm12, %xmm0 7901; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 7902; SSE2-NEXT: por %xmm0, %xmm12 7903; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 7904; SSE2-NEXT: movdqa %xmm12, %xmm8 7905; SSE2-NEXT: pxor %xmm1, %xmm8 7906; SSE2-NEXT: movdqa %xmm3, %xmm11 7907; SSE2-NEXT: pxor %xmm10, %xmm11 7908; SSE2-NEXT: movdqa %xmm6, %xmm13 7909; SSE2-NEXT: pxor %xmm10, %xmm13 7910; SSE2-NEXT: movdqa %xmm13, %xmm14 7911; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 7912; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 7913; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 7914; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 7915; SSE2-NEXT: pand %xmm15, %xmm11 7916; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 7917; SSE2-NEXT: por %xmm11, %xmm13 7918; SSE2-NEXT: movdqa %xmm2, %xmm11 7919; SSE2-NEXT: pxor %xmm10, %xmm11 7920; SSE2-NEXT: movdqa %xmm5, %xmm14 7921; SSE2-NEXT: pxor %xmm10, %xmm14 7922; SSE2-NEXT: movdqa %xmm14, %xmm15 7923; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 7924; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 7925; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 7926; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 7927; SSE2-NEXT: pand %xmm11, %xmm14 7928; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 7929; SSE2-NEXT: por %xmm14, %xmm15 7930; SSE2-NEXT: movdqa %xmm9, %xmm11 7931; SSE2-NEXT: pxor %xmm10, %xmm11 7932; SSE2-NEXT: pxor %xmm4, %xmm10 7933; SSE2-NEXT: movdqa %xmm10, %xmm14 7934; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 7935; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 7936; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 7937; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 7938; SSE2-NEXT: pand %xmm11, %xmm0 7939; SSE2-NEXT: movdqa %xmm13, %xmm10 7940; SSE2-NEXT: pxor %xmm1, %xmm10 7941; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 7942; SSE2-NEXT: por %xmm0, %xmm14 7943; SSE2-NEXT: movdqa %xmm15, %xmm11 7944; SSE2-NEXT: pxor %xmm1, %xmm11 7945; SSE2-NEXT: pxor %xmm14, %xmm1 7946; SSE2-NEXT: pandn %xmm4, %xmm14 7947; SSE2-NEXT: pandn %xmm9, %xmm1 7948; SSE2-NEXT: por %xmm14, %xmm1 7949; SSE2-NEXT: pandn %xmm5, %xmm15 7950; SSE2-NEXT: pandn %xmm2, %xmm11 7951; SSE2-NEXT: por %xmm15, %xmm11 7952; SSE2-NEXT: pandn %xmm6, %xmm13 7953; SSE2-NEXT: pandn %xmm3, %xmm10 7954; SSE2-NEXT: por %xmm13, %xmm10 7955; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload 7956; SSE2-NEXT: pandn %xmm7, %xmm8 7957; SSE2-NEXT: por %xmm12, %xmm8 7958; SSE2-NEXT: movdqa %xmm1, %xmm0 7959; SSE2-NEXT: movdqa %xmm11, %xmm1 7960; SSE2-NEXT: movdqa %xmm10, %xmm2 7961; SSE2-NEXT: movdqa %xmm8, %xmm3 7962; SSE2-NEXT: retq 7963; 7964; SSE4-LABEL: test156: 7965; SSE4: # BB#0: # %entry 7966; SSE4-NEXT: movdqa %xmm0, %xmm8 7967; SSE4-NEXT: movdqa %xmm7, %xmm9 7968; SSE4-NEXT: pcmpgtq %xmm3, %xmm9 7969; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 7970; SSE4-NEXT: pxor %xmm0, %xmm9 7971; SSE4-NEXT: movdqa %xmm6, %xmm10 7972; SSE4-NEXT: pcmpgtq %xmm2, %xmm10 7973; SSE4-NEXT: pxor %xmm0, %xmm10 7974; SSE4-NEXT: movdqa %xmm5, %xmm11 7975; SSE4-NEXT: pcmpgtq %xmm1, %xmm11 7976; SSE4-NEXT: pxor %xmm0, %xmm11 7977; SSE4-NEXT: movdqa %xmm4, %xmm12 7978; SSE4-NEXT: pcmpgtq %xmm8, %xmm12 7979; SSE4-NEXT: pxor %xmm12, %xmm0 7980; SSE4-NEXT: blendvpd %xmm4, %xmm8 7981; SSE4-NEXT: movdqa %xmm11, %xmm0 7982; SSE4-NEXT: blendvpd %xmm5, %xmm1 7983; SSE4-NEXT: movdqa %xmm10, %xmm0 7984; SSE4-NEXT: blendvpd %xmm6, %xmm2 7985; SSE4-NEXT: movdqa %xmm9, %xmm0 7986; SSE4-NEXT: blendvpd %xmm7, %xmm3 7987; SSE4-NEXT: movapd %xmm8, %xmm0 7988; SSE4-NEXT: retq 7989; 7990; AVX1-LABEL: test156: 7991; AVX1: # BB#0: # %entry 7992; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 7993; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5 7994; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4 7995; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5 7996; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 7997; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm6 7998; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 7999; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 8000; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 8001; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 8002; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8003; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6 8004; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm7 8005; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm5 8006; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 8007; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 8008; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 8009; AVX1-NEXT: retq 8010; 8011; AVX2-LABEL: test156: 8012; AVX2: # BB#0: # %entry 8013; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm4 8014; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5 8015; AVX2-NEXT: vpxor %ymm5, %ymm4, %ymm4 8016; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm6 8017; AVX2-NEXT: vpxor %ymm5, %ymm6, %ymm5 8018; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 8019; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 8020; AVX2-NEXT: retq 8021; 8022; AVX512F-LABEL: test156: 8023; AVX512F: # BB#0: # %entry 8024; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 8025; AVX512F-NEXT: retq 8026entry: 8027 %cmp = icmp sge <8 x i64> %a, %b 8028 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 8029 ret <8 x i64> %sel 8030} 8031 8032define <8 x i64> @test157(<8 x i64> %a, <8 x i64> %b) { 8033; SSE2-LABEL: test157: 8034; SSE2: # BB#0: # %entry 8035; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648] 8036; SSE2-NEXT: movdqa %xmm3, %xmm8 8037; SSE2-NEXT: pxor %xmm11, %xmm8 8038; SSE2-NEXT: movdqa %xmm7, %xmm9 8039; SSE2-NEXT: pxor %xmm11, %xmm9 8040; SSE2-NEXT: movdqa %xmm9, %xmm10 8041; SSE2-NEXT: pcmpgtd %xmm8, %xmm10 8042; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2] 8043; SSE2-NEXT: pcmpeqd %xmm8, %xmm9 8044; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 8045; SSE2-NEXT: pand %xmm12, %xmm9 8046; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3] 8047; SSE2-NEXT: por %xmm9, %xmm8 8048; SSE2-NEXT: movdqa %xmm2, %xmm9 8049; SSE2-NEXT: pxor %xmm11, %xmm9 8050; SSE2-NEXT: movdqa %xmm6, %xmm10 8051; SSE2-NEXT: pxor %xmm11, %xmm10 8052; SSE2-NEXT: movdqa %xmm10, %xmm12 8053; SSE2-NEXT: pcmpgtd %xmm9, %xmm12 8054; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 8055; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 8056; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 8057; SSE2-NEXT: pand %xmm13, %xmm10 8058; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3] 8059; SSE2-NEXT: por %xmm10, %xmm9 8060; SSE2-NEXT: movdqa %xmm1, %xmm10 8061; SSE2-NEXT: pxor %xmm11, %xmm10 8062; SSE2-NEXT: movdqa %xmm5, %xmm12 8063; SSE2-NEXT: pxor %xmm11, %xmm12 8064; SSE2-NEXT: movdqa %xmm12, %xmm13 8065; SSE2-NEXT: pcmpgtd %xmm10, %xmm13 8066; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 8067; SSE2-NEXT: pcmpeqd %xmm10, %xmm12 8068; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3] 8069; SSE2-NEXT: pand %xmm14, %xmm12 8070; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3] 8071; SSE2-NEXT: por %xmm12, %xmm10 8072; SSE2-NEXT: movdqa %xmm0, %xmm12 8073; SSE2-NEXT: pxor %xmm11, %xmm12 8074; SSE2-NEXT: pxor %xmm4, %xmm11 8075; SSE2-NEXT: movdqa %xmm11, %xmm13 8076; SSE2-NEXT: pcmpgtd %xmm12, %xmm13 8077; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 8078; SSE2-NEXT: pcmpeqd %xmm12, %xmm11 8079; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 8080; SSE2-NEXT: pand %xmm14, %xmm12 8081; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 8082; SSE2-NEXT: por %xmm12, %xmm11 8083; SSE2-NEXT: pand %xmm11, %xmm4 8084; SSE2-NEXT: pandn %xmm0, %xmm11 8085; SSE2-NEXT: por %xmm4, %xmm11 8086; SSE2-NEXT: pand %xmm10, %xmm5 8087; SSE2-NEXT: pandn %xmm1, %xmm10 8088; SSE2-NEXT: por %xmm5, %xmm10 8089; SSE2-NEXT: pand %xmm9, %xmm6 8090; SSE2-NEXT: pandn %xmm2, %xmm9 8091; SSE2-NEXT: por %xmm6, %xmm9 8092; SSE2-NEXT: pand %xmm8, %xmm7 8093; SSE2-NEXT: pandn %xmm3, %xmm8 8094; SSE2-NEXT: por %xmm7, %xmm8 8095; SSE2-NEXT: movdqa %xmm11, %xmm0 8096; SSE2-NEXT: movdqa %xmm10, %xmm1 8097; SSE2-NEXT: movdqa %xmm9, %xmm2 8098; SSE2-NEXT: movdqa %xmm8, %xmm3 8099; SSE2-NEXT: retq 8100; 8101; SSE4-LABEL: test157: 8102; SSE4: # BB#0: # %entry 8103; SSE4-NEXT: movdqa %xmm0, %xmm8 8104; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 8105; SSE4-NEXT: movdqa %xmm3, %xmm10 8106; SSE4-NEXT: pxor %xmm0, %xmm10 8107; SSE4-NEXT: movdqa %xmm7, %xmm9 8108; SSE4-NEXT: pxor %xmm0, %xmm9 8109; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 8110; SSE4-NEXT: movdqa %xmm2, %xmm11 8111; SSE4-NEXT: pxor %xmm0, %xmm11 8112; SSE4-NEXT: movdqa %xmm6, %xmm10 8113; SSE4-NEXT: pxor %xmm0, %xmm10 8114; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 8115; SSE4-NEXT: movdqa %xmm1, %xmm12 8116; SSE4-NEXT: pxor %xmm0, %xmm12 8117; SSE4-NEXT: movdqa %xmm5, %xmm11 8118; SSE4-NEXT: pxor %xmm0, %xmm11 8119; SSE4-NEXT: pcmpgtq %xmm12, %xmm11 8120; SSE4-NEXT: movdqa %xmm8, %xmm12 8121; SSE4-NEXT: pxor %xmm0, %xmm12 8122; SSE4-NEXT: pxor %xmm4, %xmm0 8123; SSE4-NEXT: pcmpgtq %xmm12, %xmm0 8124; SSE4-NEXT: blendvpd %xmm4, %xmm8 8125; SSE4-NEXT: movdqa %xmm11, %xmm0 8126; SSE4-NEXT: blendvpd %xmm5, %xmm1 8127; SSE4-NEXT: movdqa %xmm10, %xmm0 8128; SSE4-NEXT: blendvpd %xmm6, %xmm2 8129; SSE4-NEXT: movdqa %xmm9, %xmm0 8130; SSE4-NEXT: blendvpd %xmm7, %xmm3 8131; SSE4-NEXT: movapd %xmm8, %xmm0 8132; SSE4-NEXT: retq 8133; 8134; AVX1-LABEL: test157: 8135; AVX1: # BB#0: # %entry 8136; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 8137; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8138; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 8139; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6 8140; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8141; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 8142; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm6 8143; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm7 8144; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8145; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 8146; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 8147; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8148; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 8149; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 8150; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8151; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm7 8152; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm5 8153; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 8154; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 8155; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 8156; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 8157; AVX1-NEXT: retq 8158; 8159; AVX2-LABEL: test157: 8160; AVX2: # BB#0: # %entry 8161; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 8162; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm5 8163; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm6 8164; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 8165; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 8166; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm4 8167; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm4 8168; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0 8169; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm1, %ymm1 8170; AVX2-NEXT: retq 8171; 8172; AVX512F-LABEL: test157: 8173; AVX512F: # BB#0: # %entry 8174; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 8175; AVX512F-NEXT: retq 8176entry: 8177 %cmp = icmp ult <8 x i64> %a, %b 8178 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 8179 ret <8 x i64> %sel 8180} 8181 8182define <8 x i64> @test158(<8 x i64> %a, <8 x i64> %b) { 8183; SSE2-LABEL: test158: 8184; SSE2: # BB#0: # %entry 8185; SSE2-NEXT: movdqa %xmm7, %xmm8 8186; SSE2-NEXT: movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill 8187; SSE2-NEXT: movdqa %xmm3, %xmm7 8188; SSE2-NEXT: movdqa %xmm2, %xmm3 8189; SSE2-NEXT: movdqa %xmm1, %xmm2 8190; SSE2-NEXT: movdqa %xmm0, %xmm9 8191; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648] 8192; SSE2-NEXT: pxor %xmm10, %xmm8 8193; SSE2-NEXT: movdqa %xmm7, %xmm0 8194; SSE2-NEXT: pxor %xmm10, %xmm0 8195; SSE2-NEXT: movdqa %xmm0, %xmm11 8196; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 8197; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 8198; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 8199; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 8200; SSE2-NEXT: pand %xmm12, %xmm0 8201; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 8202; SSE2-NEXT: por %xmm0, %xmm12 8203; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 8204; SSE2-NEXT: movdqa %xmm12, %xmm8 8205; SSE2-NEXT: pxor %xmm1, %xmm8 8206; SSE2-NEXT: movdqa %xmm6, %xmm11 8207; SSE2-NEXT: pxor %xmm10, %xmm11 8208; SSE2-NEXT: movdqa %xmm3, %xmm13 8209; SSE2-NEXT: pxor %xmm10, %xmm13 8210; SSE2-NEXT: movdqa %xmm13, %xmm14 8211; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 8212; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 8213; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 8214; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 8215; SSE2-NEXT: pand %xmm15, %xmm11 8216; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 8217; SSE2-NEXT: por %xmm11, %xmm13 8218; SSE2-NEXT: movdqa %xmm5, %xmm11 8219; SSE2-NEXT: pxor %xmm10, %xmm11 8220; SSE2-NEXT: movdqa %xmm2, %xmm14 8221; SSE2-NEXT: pxor %xmm10, %xmm14 8222; SSE2-NEXT: movdqa %xmm14, %xmm15 8223; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 8224; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 8225; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 8226; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 8227; SSE2-NEXT: pand %xmm11, %xmm14 8228; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 8229; SSE2-NEXT: por %xmm14, %xmm15 8230; SSE2-NEXT: movdqa %xmm4, %xmm11 8231; SSE2-NEXT: pxor %xmm10, %xmm11 8232; SSE2-NEXT: pxor %xmm9, %xmm10 8233; SSE2-NEXT: movdqa %xmm10, %xmm14 8234; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 8235; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 8236; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 8237; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 8238; SSE2-NEXT: pand %xmm11, %xmm0 8239; SSE2-NEXT: movdqa %xmm13, %xmm10 8240; SSE2-NEXT: pxor %xmm1, %xmm10 8241; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 8242; SSE2-NEXT: por %xmm0, %xmm14 8243; SSE2-NEXT: movdqa %xmm15, %xmm11 8244; SSE2-NEXT: pxor %xmm1, %xmm11 8245; SSE2-NEXT: pxor %xmm14, %xmm1 8246; SSE2-NEXT: pandn %xmm4, %xmm14 8247; SSE2-NEXT: pandn %xmm9, %xmm1 8248; SSE2-NEXT: por %xmm14, %xmm1 8249; SSE2-NEXT: pandn %xmm5, %xmm15 8250; SSE2-NEXT: pandn %xmm2, %xmm11 8251; SSE2-NEXT: por %xmm15, %xmm11 8252; SSE2-NEXT: pandn %xmm6, %xmm13 8253; SSE2-NEXT: pandn %xmm3, %xmm10 8254; SSE2-NEXT: por %xmm13, %xmm10 8255; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload 8256; SSE2-NEXT: pandn %xmm7, %xmm8 8257; SSE2-NEXT: por %xmm12, %xmm8 8258; SSE2-NEXT: movdqa %xmm1, %xmm0 8259; SSE2-NEXT: movdqa %xmm11, %xmm1 8260; SSE2-NEXT: movdqa %xmm10, %xmm2 8261; SSE2-NEXT: movdqa %xmm8, %xmm3 8262; SSE2-NEXT: retq 8263; 8264; SSE4-LABEL: test158: 8265; SSE4: # BB#0: # %entry 8266; SSE4-NEXT: movdqa %xmm0, %xmm8 8267; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 8268; SSE4-NEXT: movdqa %xmm7, %xmm10 8269; SSE4-NEXT: pxor %xmm0, %xmm10 8270; SSE4-NEXT: movdqa %xmm3, %xmm9 8271; SSE4-NEXT: pxor %xmm0, %xmm9 8272; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 8273; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 8274; SSE4-NEXT: pxor %xmm12, %xmm9 8275; SSE4-NEXT: movdqa %xmm6, %xmm11 8276; SSE4-NEXT: pxor %xmm0, %xmm11 8277; SSE4-NEXT: movdqa %xmm2, %xmm10 8278; SSE4-NEXT: pxor %xmm0, %xmm10 8279; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 8280; SSE4-NEXT: pxor %xmm12, %xmm10 8281; SSE4-NEXT: movdqa %xmm5, %xmm13 8282; SSE4-NEXT: pxor %xmm0, %xmm13 8283; SSE4-NEXT: movdqa %xmm1, %xmm11 8284; SSE4-NEXT: pxor %xmm0, %xmm11 8285; SSE4-NEXT: pcmpgtq %xmm13, %xmm11 8286; SSE4-NEXT: pxor %xmm12, %xmm11 8287; SSE4-NEXT: movdqa %xmm4, %xmm13 8288; SSE4-NEXT: pxor %xmm0, %xmm13 8289; SSE4-NEXT: pxor %xmm8, %xmm0 8290; SSE4-NEXT: pcmpgtq %xmm13, %xmm0 8291; SSE4-NEXT: pxor %xmm12, %xmm0 8292; SSE4-NEXT: blendvpd %xmm4, %xmm8 8293; SSE4-NEXT: movdqa %xmm11, %xmm0 8294; SSE4-NEXT: blendvpd %xmm5, %xmm1 8295; SSE4-NEXT: movdqa %xmm10, %xmm0 8296; SSE4-NEXT: blendvpd %xmm6, %xmm2 8297; SSE4-NEXT: movdqa %xmm9, %xmm0 8298; SSE4-NEXT: blendvpd %xmm7, %xmm3 8299; SSE4-NEXT: movapd %xmm8, %xmm0 8300; SSE4-NEXT: retq 8301; 8302; AVX1-LABEL: test158: 8303; AVX1: # BB#0: # %entry 8304; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 8305; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8306; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 8307; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6 8308; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8309; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 8310; AVX1-NEXT: vpcmpeqd %xmm8, %xmm8, %xmm8 8311; AVX1-NEXT: vpxor %xmm8, %xmm4, %xmm4 8312; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm7 8313; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm6 8314; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6 8315; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 8316; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 8317; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 8318; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8319; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7 8320; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 8321; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8322; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 8323; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm7 8324; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm5 8325; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 8326; AVX1-NEXT: vpxor %xmm8, %xmm5, %xmm5 8327; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 8328; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 8329; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 8330; AVX1-NEXT: retq 8331; 8332; AVX2-LABEL: test158: 8333; AVX2: # BB#0: # %entry 8334; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 8335; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm5 8336; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm6 8337; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 8338; AVX2-NEXT: vpcmpeqd %ymm6, %ymm6, %ymm6 8339; AVX2-NEXT: vpxor %ymm6, %ymm5, %ymm5 8340; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm7 8341; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm4 8342; AVX2-NEXT: vpcmpgtq %ymm7, %ymm4, %ymm4 8343; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm4 8344; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0 8345; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm1, %ymm1 8346; AVX2-NEXT: retq 8347; 8348; AVX512F-LABEL: test158: 8349; AVX512F: # BB#0: # %entry 8350; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0 8351; AVX512F-NEXT: retq 8352entry: 8353 %cmp = icmp ule <8 x i64> %a, %b 8354 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 8355 ret <8 x i64> %sel 8356} 8357 8358define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) { 8359; SSE2-LABEL: test159: 8360; SSE2: # BB#0: # %entry 8361; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648] 8362; SSE2-NEXT: movdqa %xmm7, %xmm8 8363; SSE2-NEXT: pxor %xmm11, %xmm8 8364; SSE2-NEXT: movdqa %xmm3, %xmm9 8365; SSE2-NEXT: pxor %xmm11, %xmm9 8366; SSE2-NEXT: movdqa %xmm9, %xmm10 8367; SSE2-NEXT: pcmpgtd %xmm8, %xmm10 8368; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2] 8369; SSE2-NEXT: pcmpeqd %xmm8, %xmm9 8370; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3] 8371; SSE2-NEXT: pand %xmm12, %xmm9 8372; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3] 8373; SSE2-NEXT: por %xmm9, %xmm8 8374; SSE2-NEXT: movdqa %xmm6, %xmm9 8375; SSE2-NEXT: pxor %xmm11, %xmm9 8376; SSE2-NEXT: movdqa %xmm2, %xmm10 8377; SSE2-NEXT: pxor %xmm11, %xmm10 8378; SSE2-NEXT: movdqa %xmm10, %xmm12 8379; SSE2-NEXT: pcmpgtd %xmm9, %xmm12 8380; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 8381; SSE2-NEXT: pcmpeqd %xmm9, %xmm10 8382; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3] 8383; SSE2-NEXT: pand %xmm13, %xmm10 8384; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3] 8385; SSE2-NEXT: por %xmm10, %xmm9 8386; SSE2-NEXT: movdqa %xmm5, %xmm10 8387; SSE2-NEXT: pxor %xmm11, %xmm10 8388; SSE2-NEXT: movdqa %xmm1, %xmm12 8389; SSE2-NEXT: pxor %xmm11, %xmm12 8390; SSE2-NEXT: movdqa %xmm12, %xmm13 8391; SSE2-NEXT: pcmpgtd %xmm10, %xmm13 8392; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 8393; SSE2-NEXT: pcmpeqd %xmm10, %xmm12 8394; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3] 8395; SSE2-NEXT: pand %xmm14, %xmm12 8396; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3] 8397; SSE2-NEXT: por %xmm12, %xmm10 8398; SSE2-NEXT: movdqa %xmm4, %xmm12 8399; SSE2-NEXT: pxor %xmm11, %xmm12 8400; SSE2-NEXT: pxor %xmm0, %xmm11 8401; SSE2-NEXT: movdqa %xmm11, %xmm13 8402; SSE2-NEXT: pcmpgtd %xmm12, %xmm13 8403; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2] 8404; SSE2-NEXT: pcmpeqd %xmm12, %xmm11 8405; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 8406; SSE2-NEXT: pand %xmm14, %xmm12 8407; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 8408; SSE2-NEXT: por %xmm12, %xmm11 8409; SSE2-NEXT: pand %xmm11, %xmm4 8410; SSE2-NEXT: pandn %xmm0, %xmm11 8411; SSE2-NEXT: por %xmm4, %xmm11 8412; SSE2-NEXT: pand %xmm10, %xmm5 8413; SSE2-NEXT: pandn %xmm1, %xmm10 8414; SSE2-NEXT: por %xmm5, %xmm10 8415; SSE2-NEXT: pand %xmm9, %xmm6 8416; SSE2-NEXT: pandn %xmm2, %xmm9 8417; SSE2-NEXT: por %xmm6, %xmm9 8418; SSE2-NEXT: pand %xmm8, %xmm7 8419; SSE2-NEXT: pandn %xmm3, %xmm8 8420; SSE2-NEXT: por %xmm7, %xmm8 8421; SSE2-NEXT: movdqa %xmm11, %xmm0 8422; SSE2-NEXT: movdqa %xmm10, %xmm1 8423; SSE2-NEXT: movdqa %xmm9, %xmm2 8424; SSE2-NEXT: movdqa %xmm8, %xmm3 8425; SSE2-NEXT: retq 8426; 8427; SSE4-LABEL: test159: 8428; SSE4: # BB#0: # %entry 8429; SSE4-NEXT: movdqa %xmm0, %xmm8 8430; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 8431; SSE4-NEXT: movdqa %xmm7, %xmm10 8432; SSE4-NEXT: pxor %xmm0, %xmm10 8433; SSE4-NEXT: movdqa %xmm3, %xmm9 8434; SSE4-NEXT: pxor %xmm0, %xmm9 8435; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 8436; SSE4-NEXT: movdqa %xmm6, %xmm11 8437; SSE4-NEXT: pxor %xmm0, %xmm11 8438; SSE4-NEXT: movdqa %xmm2, %xmm10 8439; SSE4-NEXT: pxor %xmm0, %xmm10 8440; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 8441; SSE4-NEXT: movdqa %xmm5, %xmm12 8442; SSE4-NEXT: pxor %xmm0, %xmm12 8443; SSE4-NEXT: movdqa %xmm1, %xmm11 8444; SSE4-NEXT: pxor %xmm0, %xmm11 8445; SSE4-NEXT: pcmpgtq %xmm12, %xmm11 8446; SSE4-NEXT: movdqa %xmm4, %xmm12 8447; SSE4-NEXT: pxor %xmm0, %xmm12 8448; SSE4-NEXT: pxor %xmm8, %xmm0 8449; SSE4-NEXT: pcmpgtq %xmm12, %xmm0 8450; SSE4-NEXT: blendvpd %xmm4, %xmm8 8451; SSE4-NEXT: movdqa %xmm11, %xmm0 8452; SSE4-NEXT: blendvpd %xmm5, %xmm1 8453; SSE4-NEXT: movdqa %xmm10, %xmm0 8454; SSE4-NEXT: blendvpd %xmm6, %xmm2 8455; SSE4-NEXT: movdqa %xmm9, %xmm0 8456; SSE4-NEXT: blendvpd %xmm7, %xmm3 8457; SSE4-NEXT: movapd %xmm8, %xmm0 8458; SSE4-NEXT: retq 8459; 8460; AVX1-LABEL: test159: 8461; AVX1: # BB#0: # %entry 8462; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 8463; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8464; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 8465; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6 8466; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8467; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 8468; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm6 8469; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm7 8470; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8471; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 8472; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 8473; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8474; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7 8475; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 8476; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8477; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm7 8478; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm5 8479; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 8480; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 8481; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 8482; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 8483; AVX1-NEXT: retq 8484; 8485; AVX2-LABEL: test159: 8486; AVX2: # BB#0: # %entry 8487; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 8488; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm5 8489; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm6 8490; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 8491; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6 8492; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm4 8493; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm4 8494; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0 8495; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm1, %ymm1 8496; AVX2-NEXT: retq 8497; 8498; AVX512F-LABEL: test159: 8499; AVX512F: # BB#0: # %entry 8500; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 8501; AVX512F-NEXT: retq 8502entry: 8503 %cmp = icmp ugt <8 x i64> %a, %b 8504 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 8505 ret <8 x i64> %sel 8506} 8507 8508define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) { 8509; SSE2-LABEL: test160: 8510; SSE2: # BB#0: # %entry 8511; SSE2-NEXT: movdqa %xmm7, %xmm11 8512; SSE2-NEXT: movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill 8513; SSE2-NEXT: movdqa %xmm3, %xmm7 8514; SSE2-NEXT: movdqa %xmm2, %xmm3 8515; SSE2-NEXT: movdqa %xmm1, %xmm2 8516; SSE2-NEXT: movdqa %xmm0, %xmm9 8517; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648] 8518; SSE2-NEXT: movdqa %xmm7, %xmm8 8519; SSE2-NEXT: pxor %xmm10, %xmm8 8520; SSE2-NEXT: movdqa %xmm11, %xmm0 8521; SSE2-NEXT: pxor %xmm10, %xmm0 8522; SSE2-NEXT: movdqa %xmm0, %xmm11 8523; SSE2-NEXT: pcmpgtd %xmm8, %xmm11 8524; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2] 8525; SSE2-NEXT: pcmpeqd %xmm8, %xmm0 8526; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 8527; SSE2-NEXT: pand %xmm12, %xmm0 8528; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3] 8529; SSE2-NEXT: por %xmm0, %xmm12 8530; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 8531; SSE2-NEXT: movdqa %xmm12, %xmm8 8532; SSE2-NEXT: pxor %xmm1, %xmm8 8533; SSE2-NEXT: movdqa %xmm3, %xmm11 8534; SSE2-NEXT: pxor %xmm10, %xmm11 8535; SSE2-NEXT: movdqa %xmm6, %xmm13 8536; SSE2-NEXT: pxor %xmm10, %xmm13 8537; SSE2-NEXT: movdqa %xmm13, %xmm14 8538; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 8539; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2] 8540; SSE2-NEXT: pcmpeqd %xmm11, %xmm13 8541; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3] 8542; SSE2-NEXT: pand %xmm15, %xmm11 8543; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3] 8544; SSE2-NEXT: por %xmm11, %xmm13 8545; SSE2-NEXT: movdqa %xmm2, %xmm11 8546; SSE2-NEXT: pxor %xmm10, %xmm11 8547; SSE2-NEXT: movdqa %xmm5, %xmm14 8548; SSE2-NEXT: pxor %xmm10, %xmm14 8549; SSE2-NEXT: movdqa %xmm14, %xmm15 8550; SSE2-NEXT: pcmpgtd %xmm11, %xmm15 8551; SSE2-NEXT: pcmpeqd %xmm11, %xmm14 8552; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2] 8553; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 8554; SSE2-NEXT: pand %xmm11, %xmm14 8555; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3] 8556; SSE2-NEXT: por %xmm14, %xmm15 8557; SSE2-NEXT: movdqa %xmm9, %xmm11 8558; SSE2-NEXT: pxor %xmm10, %xmm11 8559; SSE2-NEXT: pxor %xmm4, %xmm10 8560; SSE2-NEXT: movdqa %xmm10, %xmm14 8561; SSE2-NEXT: pcmpgtd %xmm11, %xmm14 8562; SSE2-NEXT: pcmpeqd %xmm11, %xmm10 8563; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2] 8564; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 8565; SSE2-NEXT: pand %xmm11, %xmm0 8566; SSE2-NEXT: movdqa %xmm13, %xmm10 8567; SSE2-NEXT: pxor %xmm1, %xmm10 8568; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3] 8569; SSE2-NEXT: por %xmm0, %xmm14 8570; SSE2-NEXT: movdqa %xmm15, %xmm11 8571; SSE2-NEXT: pxor %xmm1, %xmm11 8572; SSE2-NEXT: pxor %xmm14, %xmm1 8573; SSE2-NEXT: pandn %xmm4, %xmm14 8574; SSE2-NEXT: pandn %xmm9, %xmm1 8575; SSE2-NEXT: por %xmm14, %xmm1 8576; SSE2-NEXT: pandn %xmm5, %xmm15 8577; SSE2-NEXT: pandn %xmm2, %xmm11 8578; SSE2-NEXT: por %xmm15, %xmm11 8579; SSE2-NEXT: pandn %xmm6, %xmm13 8580; SSE2-NEXT: pandn %xmm3, %xmm10 8581; SSE2-NEXT: por %xmm13, %xmm10 8582; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload 8583; SSE2-NEXT: pandn %xmm7, %xmm8 8584; SSE2-NEXT: por %xmm12, %xmm8 8585; SSE2-NEXT: movdqa %xmm1, %xmm0 8586; SSE2-NEXT: movdqa %xmm11, %xmm1 8587; SSE2-NEXT: movdqa %xmm10, %xmm2 8588; SSE2-NEXT: movdqa %xmm8, %xmm3 8589; SSE2-NEXT: retq 8590; 8591; SSE4-LABEL: test160: 8592; SSE4: # BB#0: # %entry 8593; SSE4-NEXT: movdqa %xmm0, %xmm8 8594; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 8595; SSE4-NEXT: movdqa %xmm3, %xmm10 8596; SSE4-NEXT: pxor %xmm0, %xmm10 8597; SSE4-NEXT: movdqa %xmm7, %xmm9 8598; SSE4-NEXT: pxor %xmm0, %xmm9 8599; SSE4-NEXT: pcmpgtq %xmm10, %xmm9 8600; SSE4-NEXT: pcmpeqd %xmm12, %xmm12 8601; SSE4-NEXT: pxor %xmm12, %xmm9 8602; SSE4-NEXT: movdqa %xmm2, %xmm11 8603; SSE4-NEXT: pxor %xmm0, %xmm11 8604; SSE4-NEXT: movdqa %xmm6, %xmm10 8605; SSE4-NEXT: pxor %xmm0, %xmm10 8606; SSE4-NEXT: pcmpgtq %xmm11, %xmm10 8607; SSE4-NEXT: pxor %xmm12, %xmm10 8608; SSE4-NEXT: movdqa %xmm1, %xmm13 8609; SSE4-NEXT: pxor %xmm0, %xmm13 8610; SSE4-NEXT: movdqa %xmm5, %xmm11 8611; SSE4-NEXT: pxor %xmm0, %xmm11 8612; SSE4-NEXT: pcmpgtq %xmm13, %xmm11 8613; SSE4-NEXT: pxor %xmm12, %xmm11 8614; SSE4-NEXT: movdqa %xmm8, %xmm13 8615; SSE4-NEXT: pxor %xmm0, %xmm13 8616; SSE4-NEXT: pxor %xmm4, %xmm0 8617; SSE4-NEXT: pcmpgtq %xmm13, %xmm0 8618; SSE4-NEXT: pxor %xmm12, %xmm0 8619; SSE4-NEXT: blendvpd %xmm4, %xmm8 8620; SSE4-NEXT: movdqa %xmm11, %xmm0 8621; SSE4-NEXT: blendvpd %xmm5, %xmm1 8622; SSE4-NEXT: movdqa %xmm10, %xmm0 8623; SSE4-NEXT: blendvpd %xmm6, %xmm2 8624; SSE4-NEXT: movdqa %xmm9, %xmm0 8625; SSE4-NEXT: blendvpd %xmm7, %xmm3 8626; SSE4-NEXT: movapd %xmm8, %xmm0 8627; SSE4-NEXT: retq 8628; 8629; AVX1-LABEL: test160: 8630; AVX1: # BB#0: # %entry 8631; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 8632; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808] 8633; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4 8634; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6 8635; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8636; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4 8637; AVX1-NEXT: vpcmpeqd %xmm8, %xmm8, %xmm8 8638; AVX1-NEXT: vpxor %xmm8, %xmm4, %xmm4 8639; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm7 8640; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm6 8641; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6 8642; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 8643; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4 8644; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 8645; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6 8646; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 8647; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7 8648; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6 8649; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6 8650; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm7 8651; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm5 8652; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5 8653; AVX1-NEXT: vpxor %xmm8, %xmm5, %xmm5 8654; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5 8655; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0 8656; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1 8657; AVX1-NEXT: retq 8658; 8659; AVX2-LABEL: test160: 8660; AVX2: # BB#0: # %entry 8661; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4 8662; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm5 8663; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm6 8664; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5 8665; AVX2-NEXT: vpcmpeqd %ymm6, %ymm6, %ymm6 8666; AVX2-NEXT: vpxor %ymm6, %ymm5, %ymm5 8667; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm7 8668; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm4 8669; AVX2-NEXT: vpcmpgtq %ymm7, %ymm4, %ymm4 8670; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm4 8671; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0 8672; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm1, %ymm1 8673; AVX2-NEXT: retq 8674; 8675; AVX512F-LABEL: test160: 8676; AVX512F: # BB#0: # %entry 8677; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0 8678; AVX512F-NEXT: retq 8679entry: 8680 %cmp = icmp uge <8 x i64> %a, %b 8681 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a 8682 ret <8 x i64> %sel 8683} 8684 8685define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) { 8686; SSE2-LABEL: test161: 8687; SSE2: # BB#0: # %entry 8688; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 8689; SSE2-NEXT: movdqa %xmm1, %xmm5 8690; SSE2-NEXT: pxor %xmm4, %xmm5 8691; SSE2-NEXT: movdqa %xmm3, %xmm6 8692; SSE2-NEXT: pxor %xmm4, %xmm6 8693; SSE2-NEXT: movdqa %xmm6, %xmm7 8694; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8695; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8696; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8697; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8698; SSE2-NEXT: pand %xmm8, %xmm5 8699; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8700; SSE2-NEXT: por %xmm5, %xmm6 8701; SSE2-NEXT: movdqa %xmm0, %xmm5 8702; SSE2-NEXT: pxor %xmm4, %xmm5 8703; SSE2-NEXT: pxor %xmm2, %xmm4 8704; SSE2-NEXT: movdqa %xmm4, %xmm7 8705; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8706; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8707; SSE2-NEXT: pcmpeqd %xmm5, %xmm4 8708; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 8709; SSE2-NEXT: pand %xmm8, %xmm4 8710; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 8711; SSE2-NEXT: por %xmm4, %xmm5 8712; SSE2-NEXT: pand %xmm5, %xmm0 8713; SSE2-NEXT: pandn %xmm2, %xmm5 8714; SSE2-NEXT: por %xmm5, %xmm0 8715; SSE2-NEXT: pand %xmm6, %xmm1 8716; SSE2-NEXT: pandn %xmm3, %xmm6 8717; SSE2-NEXT: por %xmm6, %xmm1 8718; SSE2-NEXT: retq 8719; 8720; SSE4-LABEL: test161: 8721; SSE4: # BB#0: # %entry 8722; SSE4-NEXT: movdqa %xmm0, %xmm4 8723; SSE4-NEXT: movdqa %xmm3, %xmm5 8724; SSE4-NEXT: pcmpgtq %xmm1, %xmm5 8725; SSE4-NEXT: movdqa %xmm2, %xmm0 8726; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 8727; SSE4-NEXT: blendvpd %xmm4, %xmm2 8728; SSE4-NEXT: movdqa %xmm5, %xmm0 8729; SSE4-NEXT: blendvpd %xmm1, %xmm3 8730; SSE4-NEXT: movapd %xmm2, %xmm0 8731; SSE4-NEXT: movapd %xmm3, %xmm1 8732; SSE4-NEXT: retq 8733; 8734; AVX1-LABEL: test161: 8735; AVX1: # BB#0: # %entry 8736; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8737; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 8738; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8739; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 8740; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8741; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8742; AVX1-NEXT: retq 8743; 8744; AVX2-LABEL: test161: 8745; AVX2: # BB#0: # %entry 8746; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 8747; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8748; AVX2-NEXT: retq 8749; 8750; AVX512BW-LABEL: test161: 8751; AVX512BW: # BB#0: # %entry 8752; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 8753; AVX512BW-NEXT: retq 8754entry: 8755 %cmp = icmp slt <4 x i64> %a, %b 8756 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8757 ret <4 x i64> %sel 8758} 8759 8760define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) { 8761; SSE2-LABEL: test162: 8762; SSE2: # BB#0: # %entry 8763; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0] 8764; SSE2-NEXT: movdqa %xmm3, %xmm4 8765; SSE2-NEXT: pxor %xmm7, %xmm4 8766; SSE2-NEXT: movdqa %xmm1, %xmm5 8767; SSE2-NEXT: pxor %xmm7, %xmm5 8768; SSE2-NEXT: movdqa %xmm5, %xmm6 8769; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 8770; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 8771; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 8772; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8773; SSE2-NEXT: pand %xmm8, %xmm4 8774; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 8775; SSE2-NEXT: por %xmm4, %xmm8 8776; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 8777; SSE2-NEXT: movdqa %xmm8, %xmm9 8778; SSE2-NEXT: pxor %xmm4, %xmm9 8779; SSE2-NEXT: movdqa %xmm2, %xmm6 8780; SSE2-NEXT: pxor %xmm7, %xmm6 8781; SSE2-NEXT: pxor %xmm0, %xmm7 8782; SSE2-NEXT: movdqa %xmm7, %xmm5 8783; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 8784; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 8785; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 8786; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8787; SSE2-NEXT: pand %xmm10, %xmm6 8788; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 8789; SSE2-NEXT: por %xmm6, %xmm5 8790; SSE2-NEXT: pxor %xmm5, %xmm4 8791; SSE2-NEXT: pandn %xmm0, %xmm5 8792; SSE2-NEXT: pandn %xmm2, %xmm4 8793; SSE2-NEXT: por %xmm5, %xmm4 8794; SSE2-NEXT: pandn %xmm1, %xmm8 8795; SSE2-NEXT: pandn %xmm3, %xmm9 8796; SSE2-NEXT: por %xmm8, %xmm9 8797; SSE2-NEXT: movdqa %xmm4, %xmm0 8798; SSE2-NEXT: movdqa %xmm9, %xmm1 8799; SSE2-NEXT: retq 8800; 8801; SSE4-LABEL: test162: 8802; SSE4: # BB#0: # %entry 8803; SSE4-NEXT: movdqa %xmm0, %xmm4 8804; SSE4-NEXT: movdqa %xmm1, %xmm5 8805; SSE4-NEXT: pcmpgtq %xmm3, %xmm5 8806; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 8807; SSE4-NEXT: pxor %xmm6, %xmm5 8808; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8809; SSE4-NEXT: pxor %xmm6, %xmm0 8810; SSE4-NEXT: blendvpd %xmm4, %xmm2 8811; SSE4-NEXT: movdqa %xmm5, %xmm0 8812; SSE4-NEXT: blendvpd %xmm1, %xmm3 8813; SSE4-NEXT: movapd %xmm2, %xmm0 8814; SSE4-NEXT: movapd %xmm3, %xmm1 8815; SSE4-NEXT: retq 8816; 8817; AVX1-LABEL: test162: 8818; AVX1: # BB#0: # %entry 8819; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8820; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8821; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8822; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 8823; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8824; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm4 8825; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm3 8826; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8827; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8828; AVX1-NEXT: retq 8829; 8830; AVX2-LABEL: test162: 8831; AVX2: # BB#0: # %entry 8832; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8833; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 8834; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 8835; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8836; AVX2-NEXT: retq 8837; 8838; AVX512BW-LABEL: test162: 8839; AVX512BW: # BB#0: # %entry 8840; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 8841; AVX512BW-NEXT: retq 8842entry: 8843 %cmp = icmp sle <4 x i64> %a, %b 8844 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8845 ret <4 x i64> %sel 8846} 8847 8848define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) { 8849; SSE2-LABEL: test163: 8850; SSE2: # BB#0: # %entry 8851; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 8852; SSE2-NEXT: movdqa %xmm3, %xmm5 8853; SSE2-NEXT: pxor %xmm4, %xmm5 8854; SSE2-NEXT: movdqa %xmm1, %xmm6 8855; SSE2-NEXT: pxor %xmm4, %xmm6 8856; SSE2-NEXT: movdqa %xmm6, %xmm7 8857; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8858; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8859; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 8860; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 8861; SSE2-NEXT: pand %xmm8, %xmm5 8862; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8863; SSE2-NEXT: por %xmm5, %xmm6 8864; SSE2-NEXT: movdqa %xmm2, %xmm5 8865; SSE2-NEXT: pxor %xmm4, %xmm5 8866; SSE2-NEXT: pxor %xmm0, %xmm4 8867; SSE2-NEXT: movdqa %xmm4, %xmm7 8868; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 8869; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 8870; SSE2-NEXT: pcmpeqd %xmm5, %xmm4 8871; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 8872; SSE2-NEXT: pand %xmm8, %xmm4 8873; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 8874; SSE2-NEXT: por %xmm4, %xmm5 8875; SSE2-NEXT: pand %xmm5, %xmm0 8876; SSE2-NEXT: pandn %xmm2, %xmm5 8877; SSE2-NEXT: por %xmm5, %xmm0 8878; SSE2-NEXT: pand %xmm6, %xmm1 8879; SSE2-NEXT: pandn %xmm3, %xmm6 8880; SSE2-NEXT: por %xmm6, %xmm1 8881; SSE2-NEXT: retq 8882; 8883; SSE4-LABEL: test163: 8884; SSE4: # BB#0: # %entry 8885; SSE4-NEXT: movdqa %xmm0, %xmm4 8886; SSE4-NEXT: movdqa %xmm1, %xmm5 8887; SSE4-NEXT: pcmpgtq %xmm3, %xmm5 8888; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 8889; SSE4-NEXT: blendvpd %xmm4, %xmm2 8890; SSE4-NEXT: movdqa %xmm5, %xmm0 8891; SSE4-NEXT: blendvpd %xmm1, %xmm3 8892; SSE4-NEXT: movapd %xmm2, %xmm0 8893; SSE4-NEXT: movapd %xmm3, %xmm1 8894; SSE4-NEXT: retq 8895; 8896; AVX1-LABEL: test163: 8897; AVX1: # BB#0: # %entry 8898; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 8899; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 8900; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8901; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 8902; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8903; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8904; AVX1-NEXT: retq 8905; 8906; AVX2-LABEL: test163: 8907; AVX2: # BB#0: # %entry 8908; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 8909; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8910; AVX2-NEXT: retq 8911; 8912; AVX512BW-LABEL: test163: 8913; AVX512BW: # BB#0: # %entry 8914; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 8915; AVX512BW-NEXT: retq 8916entry: 8917 %cmp = icmp sgt <4 x i64> %a, %b 8918 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 8919 ret <4 x i64> %sel 8920} 8921 8922define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) { 8923; SSE2-LABEL: test164: 8924; SSE2: # BB#0: # %entry 8925; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0] 8926; SSE2-NEXT: movdqa %xmm1, %xmm4 8927; SSE2-NEXT: pxor %xmm7, %xmm4 8928; SSE2-NEXT: movdqa %xmm3, %xmm5 8929; SSE2-NEXT: pxor %xmm7, %xmm5 8930; SSE2-NEXT: movdqa %xmm5, %xmm6 8931; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 8932; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 8933; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 8934; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 8935; SSE2-NEXT: pand %xmm8, %xmm4 8936; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 8937; SSE2-NEXT: por %xmm4, %xmm8 8938; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 8939; SSE2-NEXT: movdqa %xmm8, %xmm9 8940; SSE2-NEXT: pxor %xmm4, %xmm9 8941; SSE2-NEXT: movdqa %xmm0, %xmm6 8942; SSE2-NEXT: pxor %xmm7, %xmm6 8943; SSE2-NEXT: pxor %xmm2, %xmm7 8944; SSE2-NEXT: movdqa %xmm7, %xmm5 8945; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 8946; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 8947; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 8948; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 8949; SSE2-NEXT: pand %xmm10, %xmm6 8950; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 8951; SSE2-NEXT: por %xmm6, %xmm5 8952; SSE2-NEXT: pxor %xmm5, %xmm4 8953; SSE2-NEXT: pandn %xmm0, %xmm5 8954; SSE2-NEXT: pandn %xmm2, %xmm4 8955; SSE2-NEXT: por %xmm5, %xmm4 8956; SSE2-NEXT: pandn %xmm1, %xmm8 8957; SSE2-NEXT: pandn %xmm3, %xmm9 8958; SSE2-NEXT: por %xmm8, %xmm9 8959; SSE2-NEXT: movdqa %xmm4, %xmm0 8960; SSE2-NEXT: movdqa %xmm9, %xmm1 8961; SSE2-NEXT: retq 8962; 8963; SSE4-LABEL: test164: 8964; SSE4: # BB#0: # %entry 8965; SSE4-NEXT: movdqa %xmm0, %xmm4 8966; SSE4-NEXT: movdqa %xmm3, %xmm5 8967; SSE4-NEXT: pcmpgtq %xmm1, %xmm5 8968; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 8969; SSE4-NEXT: pxor %xmm0, %xmm5 8970; SSE4-NEXT: movdqa %xmm2, %xmm6 8971; SSE4-NEXT: pcmpgtq %xmm4, %xmm6 8972; SSE4-NEXT: pxor %xmm6, %xmm0 8973; SSE4-NEXT: blendvpd %xmm4, %xmm2 8974; SSE4-NEXT: movdqa %xmm5, %xmm0 8975; SSE4-NEXT: blendvpd %xmm1, %xmm3 8976; SSE4-NEXT: movapd %xmm2, %xmm0 8977; SSE4-NEXT: movapd %xmm3, %xmm1 8978; SSE4-NEXT: retq 8979; 8980; AVX1-LABEL: test164: 8981; AVX1: # BB#0: # %entry 8982; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 8983; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 8984; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 8985; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 8986; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 8987; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm4 8988; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm3 8989; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 8990; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8991; AVX1-NEXT: retq 8992; 8993; AVX2-LABEL: test164: 8994; AVX2: # BB#0: # %entry 8995; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 8996; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 8997; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 8998; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 8999; AVX2-NEXT: retq 9000; 9001; AVX512BW-LABEL: test164: 9002; AVX512BW: # BB#0: # %entry 9003; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 9004; AVX512BW-NEXT: retq 9005entry: 9006 %cmp = icmp sge <4 x i64> %a, %b 9007 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 9008 ret <4 x i64> %sel 9009} 9010 9011define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) { 9012; SSE2-LABEL: test165: 9013; SSE2: # BB#0: # %entry 9014; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 9015; SSE2-NEXT: movdqa %xmm1, %xmm5 9016; SSE2-NEXT: pxor %xmm4, %xmm5 9017; SSE2-NEXT: movdqa %xmm3, %xmm6 9018; SSE2-NEXT: pxor %xmm4, %xmm6 9019; SSE2-NEXT: movdqa %xmm6, %xmm7 9020; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 9021; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9022; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 9023; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 9024; SSE2-NEXT: pand %xmm8, %xmm5 9025; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9026; SSE2-NEXT: por %xmm5, %xmm6 9027; SSE2-NEXT: movdqa %xmm0, %xmm5 9028; SSE2-NEXT: pxor %xmm4, %xmm5 9029; SSE2-NEXT: pxor %xmm2, %xmm4 9030; SSE2-NEXT: movdqa %xmm4, %xmm7 9031; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 9032; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9033; SSE2-NEXT: pcmpeqd %xmm5, %xmm4 9034; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 9035; SSE2-NEXT: pand %xmm8, %xmm4 9036; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 9037; SSE2-NEXT: por %xmm4, %xmm5 9038; SSE2-NEXT: pand %xmm5, %xmm0 9039; SSE2-NEXT: pandn %xmm2, %xmm5 9040; SSE2-NEXT: por %xmm5, %xmm0 9041; SSE2-NEXT: pand %xmm6, %xmm1 9042; SSE2-NEXT: pandn %xmm3, %xmm6 9043; SSE2-NEXT: por %xmm6, %xmm1 9044; SSE2-NEXT: retq 9045; 9046; SSE4-LABEL: test165: 9047; SSE4: # BB#0: # %entry 9048; SSE4-NEXT: movdqa %xmm0, %xmm4 9049; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9050; SSE4-NEXT: movdqa %xmm1, %xmm6 9051; SSE4-NEXT: pxor %xmm0, %xmm6 9052; SSE4-NEXT: movdqa %xmm3, %xmm5 9053; SSE4-NEXT: pxor %xmm0, %xmm5 9054; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9055; SSE4-NEXT: movdqa %xmm4, %xmm6 9056; SSE4-NEXT: pxor %xmm0, %xmm6 9057; SSE4-NEXT: pxor %xmm2, %xmm0 9058; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9059; SSE4-NEXT: blendvpd %xmm4, %xmm2 9060; SSE4-NEXT: movdqa %xmm5, %xmm0 9061; SSE4-NEXT: blendvpd %xmm1, %xmm3 9062; SSE4-NEXT: movapd %xmm2, %xmm0 9063; SSE4-NEXT: movapd %xmm3, %xmm1 9064; SSE4-NEXT: retq 9065; 9066; AVX1-LABEL: test165: 9067; AVX1: # BB#0: # %entry 9068; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9069; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9070; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9071; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 9072; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9073; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9074; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm4 9075; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3 9076; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9077; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9078; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9079; AVX1-NEXT: retq 9080; 9081; AVX2-LABEL: test165: 9082; AVX2: # BB#0: # %entry 9083; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9084; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 9085; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 9086; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9087; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9088; AVX2-NEXT: retq 9089; 9090; AVX512BW-LABEL: test165: 9091; AVX512BW: # BB#0: # %entry 9092; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 9093; AVX512BW-NEXT: retq 9094entry: 9095 %cmp = icmp ult <4 x i64> %a, %b 9096 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 9097 ret <4 x i64> %sel 9098} 9099 9100define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) { 9101; SSE2-LABEL: test166: 9102; SSE2: # BB#0: # %entry 9103; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648] 9104; SSE2-NEXT: movdqa %xmm3, %xmm4 9105; SSE2-NEXT: pxor %xmm7, %xmm4 9106; SSE2-NEXT: movdqa %xmm1, %xmm5 9107; SSE2-NEXT: pxor %xmm7, %xmm5 9108; SSE2-NEXT: movdqa %xmm5, %xmm6 9109; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 9110; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 9111; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 9112; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9113; SSE2-NEXT: pand %xmm8, %xmm4 9114; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 9115; SSE2-NEXT: por %xmm4, %xmm8 9116; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 9117; SSE2-NEXT: movdqa %xmm8, %xmm9 9118; SSE2-NEXT: pxor %xmm4, %xmm9 9119; SSE2-NEXT: movdqa %xmm2, %xmm6 9120; SSE2-NEXT: pxor %xmm7, %xmm6 9121; SSE2-NEXT: pxor %xmm0, %xmm7 9122; SSE2-NEXT: movdqa %xmm7, %xmm5 9123; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 9124; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 9125; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 9126; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9127; SSE2-NEXT: pand %xmm10, %xmm6 9128; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 9129; SSE2-NEXT: por %xmm6, %xmm5 9130; SSE2-NEXT: pxor %xmm5, %xmm4 9131; SSE2-NEXT: pandn %xmm0, %xmm5 9132; SSE2-NEXT: pandn %xmm2, %xmm4 9133; SSE2-NEXT: por %xmm5, %xmm4 9134; SSE2-NEXT: pandn %xmm1, %xmm8 9135; SSE2-NEXT: pandn %xmm3, %xmm9 9136; SSE2-NEXT: por %xmm8, %xmm9 9137; SSE2-NEXT: movdqa %xmm4, %xmm0 9138; SSE2-NEXT: movdqa %xmm9, %xmm1 9139; SSE2-NEXT: retq 9140; 9141; SSE4-LABEL: test166: 9142; SSE4: # BB#0: # %entry 9143; SSE4-NEXT: movdqa %xmm0, %xmm4 9144; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9145; SSE4-NEXT: movdqa %xmm3, %xmm6 9146; SSE4-NEXT: pxor %xmm0, %xmm6 9147; SSE4-NEXT: movdqa %xmm1, %xmm5 9148; SSE4-NEXT: pxor %xmm0, %xmm5 9149; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9150; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 9151; SSE4-NEXT: pxor %xmm6, %xmm5 9152; SSE4-NEXT: movdqa %xmm2, %xmm7 9153; SSE4-NEXT: pxor %xmm0, %xmm7 9154; SSE4-NEXT: pxor %xmm4, %xmm0 9155; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 9156; SSE4-NEXT: pxor %xmm6, %xmm0 9157; SSE4-NEXT: blendvpd %xmm4, %xmm2 9158; SSE4-NEXT: movdqa %xmm5, %xmm0 9159; SSE4-NEXT: blendvpd %xmm1, %xmm3 9160; SSE4-NEXT: movapd %xmm2, %xmm0 9161; SSE4-NEXT: movapd %xmm3, %xmm1 9162; SSE4-NEXT: retq 9163; 9164; AVX1-LABEL: test166: 9165; AVX1: # BB#0: # %entry 9166; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9167; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9168; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9169; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 9170; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9171; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9172; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4 9173; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2 9174; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm5 9175; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3 9176; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3 9177; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3 9178; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9179; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9180; AVX1-NEXT: retq 9181; 9182; AVX2-LABEL: test166: 9183; AVX2: # BB#0: # %entry 9184; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9185; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 9186; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 9187; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9188; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 9189; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 9190; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9191; AVX2-NEXT: retq 9192; 9193; AVX512BW-LABEL: test166: 9194; AVX512BW: # BB#0: # %entry 9195; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 9196; AVX512BW-NEXT: retq 9197entry: 9198 %cmp = icmp ule <4 x i64> %a, %b 9199 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 9200 ret <4 x i64> %sel 9201} 9202 9203define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) { 9204; SSE2-LABEL: test167: 9205; SSE2: # BB#0: # %entry 9206; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 9207; SSE2-NEXT: movdqa %xmm3, %xmm5 9208; SSE2-NEXT: pxor %xmm4, %xmm5 9209; SSE2-NEXT: movdqa %xmm1, %xmm6 9210; SSE2-NEXT: pxor %xmm4, %xmm6 9211; SSE2-NEXT: movdqa %xmm6, %xmm7 9212; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 9213; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9214; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 9215; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 9216; SSE2-NEXT: pand %xmm8, %xmm5 9217; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9218; SSE2-NEXT: por %xmm5, %xmm6 9219; SSE2-NEXT: movdqa %xmm2, %xmm5 9220; SSE2-NEXT: pxor %xmm4, %xmm5 9221; SSE2-NEXT: pxor %xmm0, %xmm4 9222; SSE2-NEXT: movdqa %xmm4, %xmm7 9223; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 9224; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9225; SSE2-NEXT: pcmpeqd %xmm5, %xmm4 9226; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 9227; SSE2-NEXT: pand %xmm8, %xmm4 9228; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 9229; SSE2-NEXT: por %xmm4, %xmm5 9230; SSE2-NEXT: pand %xmm5, %xmm0 9231; SSE2-NEXT: pandn %xmm2, %xmm5 9232; SSE2-NEXT: por %xmm5, %xmm0 9233; SSE2-NEXT: pand %xmm6, %xmm1 9234; SSE2-NEXT: pandn %xmm3, %xmm6 9235; SSE2-NEXT: por %xmm6, %xmm1 9236; SSE2-NEXT: retq 9237; 9238; SSE4-LABEL: test167: 9239; SSE4: # BB#0: # %entry 9240; SSE4-NEXT: movdqa %xmm0, %xmm4 9241; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9242; SSE4-NEXT: movdqa %xmm3, %xmm6 9243; SSE4-NEXT: pxor %xmm0, %xmm6 9244; SSE4-NEXT: movdqa %xmm1, %xmm5 9245; SSE4-NEXT: pxor %xmm0, %xmm5 9246; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9247; SSE4-NEXT: movdqa %xmm2, %xmm6 9248; SSE4-NEXT: pxor %xmm0, %xmm6 9249; SSE4-NEXT: pxor %xmm4, %xmm0 9250; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9251; SSE4-NEXT: blendvpd %xmm4, %xmm2 9252; SSE4-NEXT: movdqa %xmm5, %xmm0 9253; SSE4-NEXT: blendvpd %xmm1, %xmm3 9254; SSE4-NEXT: movapd %xmm2, %xmm0 9255; SSE4-NEXT: movapd %xmm3, %xmm1 9256; SSE4-NEXT: retq 9257; 9258; AVX1-LABEL: test167: 9259; AVX1: # BB#0: # %entry 9260; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9261; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9262; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9263; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 9264; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9265; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9266; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm4 9267; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3 9268; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9269; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9270; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9271; AVX1-NEXT: retq 9272; 9273; AVX2-LABEL: test167: 9274; AVX2: # BB#0: # %entry 9275; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9276; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 9277; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 9278; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9279; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9280; AVX2-NEXT: retq 9281; 9282; AVX512BW-LABEL: test167: 9283; AVX512BW: # BB#0: # %entry 9284; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 9285; AVX512BW-NEXT: retq 9286entry: 9287 %cmp = icmp ugt <4 x i64> %a, %b 9288 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 9289 ret <4 x i64> %sel 9290} 9291 9292define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) { 9293; SSE2-LABEL: test168: 9294; SSE2: # BB#0: # %entry 9295; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648] 9296; SSE2-NEXT: movdqa %xmm1, %xmm4 9297; SSE2-NEXT: pxor %xmm7, %xmm4 9298; SSE2-NEXT: movdqa %xmm3, %xmm5 9299; SSE2-NEXT: pxor %xmm7, %xmm5 9300; SSE2-NEXT: movdqa %xmm5, %xmm6 9301; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 9302; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 9303; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 9304; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9305; SSE2-NEXT: pand %xmm8, %xmm4 9306; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 9307; SSE2-NEXT: por %xmm4, %xmm8 9308; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 9309; SSE2-NEXT: movdqa %xmm8, %xmm9 9310; SSE2-NEXT: pxor %xmm4, %xmm9 9311; SSE2-NEXT: movdqa %xmm0, %xmm6 9312; SSE2-NEXT: pxor %xmm7, %xmm6 9313; SSE2-NEXT: pxor %xmm2, %xmm7 9314; SSE2-NEXT: movdqa %xmm7, %xmm5 9315; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 9316; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 9317; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 9318; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9319; SSE2-NEXT: pand %xmm10, %xmm6 9320; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 9321; SSE2-NEXT: por %xmm6, %xmm5 9322; SSE2-NEXT: pxor %xmm5, %xmm4 9323; SSE2-NEXT: pandn %xmm0, %xmm5 9324; SSE2-NEXT: pandn %xmm2, %xmm4 9325; SSE2-NEXT: por %xmm5, %xmm4 9326; SSE2-NEXT: pandn %xmm1, %xmm8 9327; SSE2-NEXT: pandn %xmm3, %xmm9 9328; SSE2-NEXT: por %xmm8, %xmm9 9329; SSE2-NEXT: movdqa %xmm4, %xmm0 9330; SSE2-NEXT: movdqa %xmm9, %xmm1 9331; SSE2-NEXT: retq 9332; 9333; SSE4-LABEL: test168: 9334; SSE4: # BB#0: # %entry 9335; SSE4-NEXT: movdqa %xmm0, %xmm4 9336; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9337; SSE4-NEXT: movdqa %xmm1, %xmm6 9338; SSE4-NEXT: pxor %xmm0, %xmm6 9339; SSE4-NEXT: movdqa %xmm3, %xmm5 9340; SSE4-NEXT: pxor %xmm0, %xmm5 9341; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9342; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 9343; SSE4-NEXT: pxor %xmm6, %xmm5 9344; SSE4-NEXT: movdqa %xmm4, %xmm7 9345; SSE4-NEXT: pxor %xmm0, %xmm7 9346; SSE4-NEXT: pxor %xmm2, %xmm0 9347; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 9348; SSE4-NEXT: pxor %xmm6, %xmm0 9349; SSE4-NEXT: blendvpd %xmm4, %xmm2 9350; SSE4-NEXT: movdqa %xmm5, %xmm0 9351; SSE4-NEXT: blendvpd %xmm1, %xmm3 9352; SSE4-NEXT: movapd %xmm2, %xmm0 9353; SSE4-NEXT: movapd %xmm3, %xmm1 9354; SSE4-NEXT: retq 9355; 9356; AVX1-LABEL: test168: 9357; AVX1: # BB#0: # %entry 9358; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9359; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9360; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9361; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 9362; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9363; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9364; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4 9365; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2 9366; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm5 9367; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3 9368; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3 9369; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3 9370; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9371; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9372; AVX1-NEXT: retq 9373; 9374; AVX2-LABEL: test168: 9375; AVX2: # BB#0: # %entry 9376; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9377; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 9378; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 9379; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9380; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 9381; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 9382; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 9383; AVX2-NEXT: retq 9384; 9385; AVX512BW-LABEL: test168: 9386; AVX512BW: # BB#0: # %entry 9387; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 9388; AVX512BW-NEXT: retq 9389entry: 9390 %cmp = icmp uge <4 x i64> %a, %b 9391 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b 9392 ret <4 x i64> %sel 9393} 9394 9395define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) { 9396; SSE2-LABEL: test169: 9397; SSE2: # BB#0: # %entry 9398; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,0,2147483648,0] 9399; SSE2-NEXT: movdqa %xmm1, %xmm4 9400; SSE2-NEXT: pxor %xmm5, %xmm4 9401; SSE2-NEXT: movdqa %xmm3, %xmm6 9402; SSE2-NEXT: pxor %xmm5, %xmm6 9403; SSE2-NEXT: movdqa %xmm6, %xmm7 9404; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 9405; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9406; SSE2-NEXT: pcmpeqd %xmm4, %xmm6 9407; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 9408; SSE2-NEXT: pand %xmm8, %xmm6 9409; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3] 9410; SSE2-NEXT: por %xmm6, %xmm4 9411; SSE2-NEXT: movdqa %xmm0, %xmm6 9412; SSE2-NEXT: pxor %xmm5, %xmm6 9413; SSE2-NEXT: pxor %xmm2, %xmm5 9414; SSE2-NEXT: movdqa %xmm5, %xmm7 9415; SSE2-NEXT: pcmpgtd %xmm6, %xmm7 9416; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9417; SSE2-NEXT: pcmpeqd %xmm6, %xmm5 9418; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3] 9419; SSE2-NEXT: pand %xmm8, %xmm6 9420; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 9421; SSE2-NEXT: por %xmm6, %xmm5 9422; SSE2-NEXT: pand %xmm5, %xmm2 9423; SSE2-NEXT: pandn %xmm0, %xmm5 9424; SSE2-NEXT: por %xmm2, %xmm5 9425; SSE2-NEXT: pand %xmm4, %xmm3 9426; SSE2-NEXT: pandn %xmm1, %xmm4 9427; SSE2-NEXT: por %xmm3, %xmm4 9428; SSE2-NEXT: movdqa %xmm5, %xmm0 9429; SSE2-NEXT: movdqa %xmm4, %xmm1 9430; SSE2-NEXT: retq 9431; 9432; SSE4-LABEL: test169: 9433; SSE4: # BB#0: # %entry 9434; SSE4-NEXT: movdqa %xmm0, %xmm4 9435; SSE4-NEXT: movdqa %xmm3, %xmm5 9436; SSE4-NEXT: pcmpgtq %xmm1, %xmm5 9437; SSE4-NEXT: movdqa %xmm2, %xmm0 9438; SSE4-NEXT: pcmpgtq %xmm4, %xmm0 9439; SSE4-NEXT: blendvpd %xmm2, %xmm4 9440; SSE4-NEXT: movdqa %xmm5, %xmm0 9441; SSE4-NEXT: blendvpd %xmm3, %xmm1 9442; SSE4-NEXT: movapd %xmm4, %xmm0 9443; SSE4-NEXT: retq 9444; 9445; AVX1-LABEL: test169: 9446; AVX1: # BB#0: # %entry 9447; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9448; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 9449; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 9450; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3 9451; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9452; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9453; AVX1-NEXT: retq 9454; 9455; AVX2-LABEL: test169: 9456; AVX2: # BB#0: # %entry 9457; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 9458; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9459; AVX2-NEXT: retq 9460; 9461; AVX512BW-LABEL: test169: 9462; AVX512BW: # BB#0: # %entry 9463; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 9464; AVX512BW-NEXT: retq 9465entry: 9466 %cmp = icmp slt <4 x i64> %a, %b 9467 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9468 ret <4 x i64> %sel 9469} 9470 9471define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) { 9472; SSE2-LABEL: test170: 9473; SSE2: # BB#0: # %entry 9474; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0] 9475; SSE2-NEXT: movdqa %xmm3, %xmm4 9476; SSE2-NEXT: pxor %xmm7, %xmm4 9477; SSE2-NEXT: movdqa %xmm1, %xmm5 9478; SSE2-NEXT: pxor %xmm7, %xmm5 9479; SSE2-NEXT: movdqa %xmm5, %xmm6 9480; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 9481; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 9482; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 9483; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9484; SSE2-NEXT: pand %xmm8, %xmm4 9485; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 9486; SSE2-NEXT: por %xmm4, %xmm8 9487; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 9488; SSE2-NEXT: movdqa %xmm8, %xmm9 9489; SSE2-NEXT: pxor %xmm4, %xmm9 9490; SSE2-NEXT: movdqa %xmm2, %xmm6 9491; SSE2-NEXT: pxor %xmm7, %xmm6 9492; SSE2-NEXT: pxor %xmm0, %xmm7 9493; SSE2-NEXT: movdqa %xmm7, %xmm5 9494; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 9495; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 9496; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 9497; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9498; SSE2-NEXT: pand %xmm10, %xmm6 9499; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 9500; SSE2-NEXT: por %xmm6, %xmm5 9501; SSE2-NEXT: pxor %xmm5, %xmm4 9502; SSE2-NEXT: pandn %xmm2, %xmm5 9503; SSE2-NEXT: pandn %xmm0, %xmm4 9504; SSE2-NEXT: por %xmm5, %xmm4 9505; SSE2-NEXT: pandn %xmm3, %xmm8 9506; SSE2-NEXT: pandn %xmm1, %xmm9 9507; SSE2-NEXT: por %xmm8, %xmm9 9508; SSE2-NEXT: movdqa %xmm4, %xmm0 9509; SSE2-NEXT: movdqa %xmm9, %xmm1 9510; SSE2-NEXT: retq 9511; 9512; SSE4-LABEL: test170: 9513; SSE4: # BB#0: # %entry 9514; SSE4-NEXT: movdqa %xmm0, %xmm4 9515; SSE4-NEXT: movdqa %xmm1, %xmm5 9516; SSE4-NEXT: pcmpgtq %xmm3, %xmm5 9517; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 9518; SSE4-NEXT: pxor %xmm6, %xmm5 9519; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9520; SSE4-NEXT: pxor %xmm6, %xmm0 9521; SSE4-NEXT: blendvpd %xmm2, %xmm4 9522; SSE4-NEXT: movdqa %xmm5, %xmm0 9523; SSE4-NEXT: blendvpd %xmm3, %xmm1 9524; SSE4-NEXT: movapd %xmm4, %xmm0 9525; SSE4-NEXT: retq 9526; 9527; AVX1-LABEL: test170: 9528; AVX1: # BB#0: # %entry 9529; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9530; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 9531; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 9532; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 9533; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 9534; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm4 9535; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm3 9536; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9537; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9538; AVX1-NEXT: retq 9539; 9540; AVX2-LABEL: test170: 9541; AVX2: # BB#0: # %entry 9542; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 9543; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 9544; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 9545; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9546; AVX2-NEXT: retq 9547; 9548; AVX512BW-LABEL: test170: 9549; AVX512BW: # BB#0: # %entry 9550; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0 9551; AVX512BW-NEXT: retq 9552entry: 9553 %cmp = icmp sle <4 x i64> %a, %b 9554 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9555 ret <4 x i64> %sel 9556} 9557 9558define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) { 9559; SSE2-LABEL: test171: 9560; SSE2: # BB#0: # %entry 9561; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,0,2147483648,0] 9562; SSE2-NEXT: movdqa %xmm3, %xmm4 9563; SSE2-NEXT: pxor %xmm5, %xmm4 9564; SSE2-NEXT: movdqa %xmm1, %xmm6 9565; SSE2-NEXT: pxor %xmm5, %xmm6 9566; SSE2-NEXT: movdqa %xmm6, %xmm7 9567; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 9568; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9569; SSE2-NEXT: pcmpeqd %xmm4, %xmm6 9570; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 9571; SSE2-NEXT: pand %xmm8, %xmm6 9572; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3] 9573; SSE2-NEXT: por %xmm6, %xmm4 9574; SSE2-NEXT: movdqa %xmm2, %xmm6 9575; SSE2-NEXT: pxor %xmm5, %xmm6 9576; SSE2-NEXT: pxor %xmm0, %xmm5 9577; SSE2-NEXT: movdqa %xmm5, %xmm7 9578; SSE2-NEXT: pcmpgtd %xmm6, %xmm7 9579; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9580; SSE2-NEXT: pcmpeqd %xmm6, %xmm5 9581; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3] 9582; SSE2-NEXT: pand %xmm8, %xmm6 9583; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 9584; SSE2-NEXT: por %xmm6, %xmm5 9585; SSE2-NEXT: pand %xmm5, %xmm2 9586; SSE2-NEXT: pandn %xmm0, %xmm5 9587; SSE2-NEXT: por %xmm2, %xmm5 9588; SSE2-NEXT: pand %xmm4, %xmm3 9589; SSE2-NEXT: pandn %xmm1, %xmm4 9590; SSE2-NEXT: por %xmm3, %xmm4 9591; SSE2-NEXT: movdqa %xmm5, %xmm0 9592; SSE2-NEXT: movdqa %xmm4, %xmm1 9593; SSE2-NEXT: retq 9594; 9595; SSE4-LABEL: test171: 9596; SSE4: # BB#0: # %entry 9597; SSE4-NEXT: movdqa %xmm0, %xmm4 9598; SSE4-NEXT: movdqa %xmm1, %xmm5 9599; SSE4-NEXT: pcmpgtq %xmm3, %xmm5 9600; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 9601; SSE4-NEXT: blendvpd %xmm2, %xmm4 9602; SSE4-NEXT: movdqa %xmm5, %xmm0 9603; SSE4-NEXT: blendvpd %xmm3, %xmm1 9604; SSE4-NEXT: movapd %xmm4, %xmm0 9605; SSE4-NEXT: retq 9606; 9607; AVX1-LABEL: test171: 9608; AVX1: # BB#0: # %entry 9609; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9610; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 9611; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 9612; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3 9613; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9614; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9615; AVX1-NEXT: retq 9616; 9617; AVX2-LABEL: test171: 9618; AVX2: # BB#0: # %entry 9619; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 9620; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9621; AVX2-NEXT: retq 9622; 9623; AVX512BW-LABEL: test171: 9624; AVX512BW: # BB#0: # %entry 9625; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 9626; AVX512BW-NEXT: retq 9627entry: 9628 %cmp = icmp sgt <4 x i64> %a, %b 9629 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9630 ret <4 x i64> %sel 9631} 9632 9633define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) { 9634; SSE2-LABEL: test172: 9635; SSE2: # BB#0: # %entry 9636; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0] 9637; SSE2-NEXT: movdqa %xmm1, %xmm4 9638; SSE2-NEXT: pxor %xmm7, %xmm4 9639; SSE2-NEXT: movdqa %xmm3, %xmm5 9640; SSE2-NEXT: pxor %xmm7, %xmm5 9641; SSE2-NEXT: movdqa %xmm5, %xmm6 9642; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 9643; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 9644; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 9645; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9646; SSE2-NEXT: pand %xmm8, %xmm4 9647; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 9648; SSE2-NEXT: por %xmm4, %xmm8 9649; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 9650; SSE2-NEXT: movdqa %xmm8, %xmm9 9651; SSE2-NEXT: pxor %xmm4, %xmm9 9652; SSE2-NEXT: movdqa %xmm0, %xmm6 9653; SSE2-NEXT: pxor %xmm7, %xmm6 9654; SSE2-NEXT: pxor %xmm2, %xmm7 9655; SSE2-NEXT: movdqa %xmm7, %xmm5 9656; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 9657; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 9658; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 9659; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9660; SSE2-NEXT: pand %xmm10, %xmm6 9661; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 9662; SSE2-NEXT: por %xmm6, %xmm5 9663; SSE2-NEXT: pxor %xmm5, %xmm4 9664; SSE2-NEXT: pandn %xmm2, %xmm5 9665; SSE2-NEXT: pandn %xmm0, %xmm4 9666; SSE2-NEXT: por %xmm5, %xmm4 9667; SSE2-NEXT: pandn %xmm3, %xmm8 9668; SSE2-NEXT: pandn %xmm1, %xmm9 9669; SSE2-NEXT: por %xmm8, %xmm9 9670; SSE2-NEXT: movdqa %xmm4, %xmm0 9671; SSE2-NEXT: movdqa %xmm9, %xmm1 9672; SSE2-NEXT: retq 9673; 9674; SSE4-LABEL: test172: 9675; SSE4: # BB#0: # %entry 9676; SSE4-NEXT: movdqa %xmm0, %xmm4 9677; SSE4-NEXT: movdqa %xmm3, %xmm5 9678; SSE4-NEXT: pcmpgtq %xmm1, %xmm5 9679; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 9680; SSE4-NEXT: pxor %xmm0, %xmm5 9681; SSE4-NEXT: movdqa %xmm2, %xmm6 9682; SSE4-NEXT: pcmpgtq %xmm4, %xmm6 9683; SSE4-NEXT: pxor %xmm6, %xmm0 9684; SSE4-NEXT: blendvpd %xmm2, %xmm4 9685; SSE4-NEXT: movdqa %xmm5, %xmm0 9686; SSE4-NEXT: blendvpd %xmm3, %xmm1 9687; SSE4-NEXT: movapd %xmm4, %xmm0 9688; SSE4-NEXT: retq 9689; 9690; AVX1-LABEL: test172: 9691; AVX1: # BB#0: # %entry 9692; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9693; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 9694; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 9695; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 9696; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 9697; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm4 9698; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm3 9699; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9700; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9701; AVX1-NEXT: retq 9702; 9703; AVX2-LABEL: test172: 9704; AVX2: # BB#0: # %entry 9705; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 9706; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 9707; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 9708; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9709; AVX2-NEXT: retq 9710; 9711; AVX512BW-LABEL: test172: 9712; AVX512BW: # BB#0: # %entry 9713; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0 9714; AVX512BW-NEXT: retq 9715entry: 9716 %cmp = icmp sge <4 x i64> %a, %b 9717 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9718 ret <4 x i64> %sel 9719} 9720 9721define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) { 9722; SSE2-LABEL: test173: 9723; SSE2: # BB#0: # %entry 9724; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 9725; SSE2-NEXT: movdqa %xmm1, %xmm4 9726; SSE2-NEXT: pxor %xmm5, %xmm4 9727; SSE2-NEXT: movdqa %xmm3, %xmm6 9728; SSE2-NEXT: pxor %xmm5, %xmm6 9729; SSE2-NEXT: movdqa %xmm6, %xmm7 9730; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 9731; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9732; SSE2-NEXT: pcmpeqd %xmm4, %xmm6 9733; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 9734; SSE2-NEXT: pand %xmm8, %xmm6 9735; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3] 9736; SSE2-NEXT: por %xmm6, %xmm4 9737; SSE2-NEXT: movdqa %xmm0, %xmm6 9738; SSE2-NEXT: pxor %xmm5, %xmm6 9739; SSE2-NEXT: pxor %xmm2, %xmm5 9740; SSE2-NEXT: movdqa %xmm5, %xmm7 9741; SSE2-NEXT: pcmpgtd %xmm6, %xmm7 9742; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9743; SSE2-NEXT: pcmpeqd %xmm6, %xmm5 9744; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3] 9745; SSE2-NEXT: pand %xmm8, %xmm6 9746; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 9747; SSE2-NEXT: por %xmm6, %xmm5 9748; SSE2-NEXT: pand %xmm5, %xmm2 9749; SSE2-NEXT: pandn %xmm0, %xmm5 9750; SSE2-NEXT: por %xmm2, %xmm5 9751; SSE2-NEXT: pand %xmm4, %xmm3 9752; SSE2-NEXT: pandn %xmm1, %xmm4 9753; SSE2-NEXT: por %xmm3, %xmm4 9754; SSE2-NEXT: movdqa %xmm5, %xmm0 9755; SSE2-NEXT: movdqa %xmm4, %xmm1 9756; SSE2-NEXT: retq 9757; 9758; SSE4-LABEL: test173: 9759; SSE4: # BB#0: # %entry 9760; SSE4-NEXT: movdqa %xmm0, %xmm4 9761; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9762; SSE4-NEXT: movdqa %xmm1, %xmm6 9763; SSE4-NEXT: pxor %xmm0, %xmm6 9764; SSE4-NEXT: movdqa %xmm3, %xmm5 9765; SSE4-NEXT: pxor %xmm0, %xmm5 9766; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9767; SSE4-NEXT: movdqa %xmm4, %xmm6 9768; SSE4-NEXT: pxor %xmm0, %xmm6 9769; SSE4-NEXT: pxor %xmm2, %xmm0 9770; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9771; SSE4-NEXT: blendvpd %xmm2, %xmm4 9772; SSE4-NEXT: movdqa %xmm5, %xmm0 9773; SSE4-NEXT: blendvpd %xmm3, %xmm1 9774; SSE4-NEXT: movapd %xmm4, %xmm0 9775; SSE4-NEXT: retq 9776; 9777; AVX1-LABEL: test173: 9778; AVX1: # BB#0: # %entry 9779; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 9780; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9781; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9782; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 9783; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9784; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9785; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm4 9786; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3 9787; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9788; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9789; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9790; AVX1-NEXT: retq 9791; 9792; AVX2-LABEL: test173: 9793; AVX2: # BB#0: # %entry 9794; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9795; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 9796; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 9797; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9798; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9799; AVX2-NEXT: retq 9800; 9801; AVX512BW-LABEL: test173: 9802; AVX512BW: # BB#0: # %entry 9803; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 9804; AVX512BW-NEXT: retq 9805entry: 9806 %cmp = icmp ult <4 x i64> %a, %b 9807 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9808 ret <4 x i64> %sel 9809} 9810 9811define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) { 9812; SSE2-LABEL: test174: 9813; SSE2: # BB#0: # %entry 9814; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648] 9815; SSE2-NEXT: movdqa %xmm3, %xmm4 9816; SSE2-NEXT: pxor %xmm7, %xmm4 9817; SSE2-NEXT: movdqa %xmm1, %xmm5 9818; SSE2-NEXT: pxor %xmm7, %xmm5 9819; SSE2-NEXT: movdqa %xmm5, %xmm6 9820; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 9821; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 9822; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 9823; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 9824; SSE2-NEXT: pand %xmm8, %xmm4 9825; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 9826; SSE2-NEXT: por %xmm4, %xmm8 9827; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 9828; SSE2-NEXT: movdqa %xmm8, %xmm9 9829; SSE2-NEXT: pxor %xmm4, %xmm9 9830; SSE2-NEXT: movdqa %xmm2, %xmm6 9831; SSE2-NEXT: pxor %xmm7, %xmm6 9832; SSE2-NEXT: pxor %xmm0, %xmm7 9833; SSE2-NEXT: movdqa %xmm7, %xmm5 9834; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 9835; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 9836; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 9837; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 9838; SSE2-NEXT: pand %xmm10, %xmm6 9839; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 9840; SSE2-NEXT: por %xmm6, %xmm5 9841; SSE2-NEXT: pxor %xmm5, %xmm4 9842; SSE2-NEXT: pandn %xmm2, %xmm5 9843; SSE2-NEXT: pandn %xmm0, %xmm4 9844; SSE2-NEXT: por %xmm5, %xmm4 9845; SSE2-NEXT: pandn %xmm3, %xmm8 9846; SSE2-NEXT: pandn %xmm1, %xmm9 9847; SSE2-NEXT: por %xmm8, %xmm9 9848; SSE2-NEXT: movdqa %xmm4, %xmm0 9849; SSE2-NEXT: movdqa %xmm9, %xmm1 9850; SSE2-NEXT: retq 9851; 9852; SSE4-LABEL: test174: 9853; SSE4: # BB#0: # %entry 9854; SSE4-NEXT: movdqa %xmm0, %xmm4 9855; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9856; SSE4-NEXT: movdqa %xmm3, %xmm6 9857; SSE4-NEXT: pxor %xmm0, %xmm6 9858; SSE4-NEXT: movdqa %xmm1, %xmm5 9859; SSE4-NEXT: pxor %xmm0, %xmm5 9860; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9861; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 9862; SSE4-NEXT: pxor %xmm6, %xmm5 9863; SSE4-NEXT: movdqa %xmm2, %xmm7 9864; SSE4-NEXT: pxor %xmm0, %xmm7 9865; SSE4-NEXT: pxor %xmm4, %xmm0 9866; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 9867; SSE4-NEXT: pxor %xmm6, %xmm0 9868; SSE4-NEXT: blendvpd %xmm2, %xmm4 9869; SSE4-NEXT: movdqa %xmm5, %xmm0 9870; SSE4-NEXT: blendvpd %xmm3, %xmm1 9871; SSE4-NEXT: movapd %xmm4, %xmm0 9872; SSE4-NEXT: retq 9873; 9874; AVX1-LABEL: test174: 9875; AVX1: # BB#0: # %entry 9876; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9877; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9878; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9879; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 9880; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9881; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9882; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4 9883; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2 9884; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm5 9885; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3 9886; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3 9887; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3 9888; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9889; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9890; AVX1-NEXT: retq 9891; 9892; AVX2-LABEL: test174: 9893; AVX2: # BB#0: # %entry 9894; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9895; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 9896; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 9897; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9898; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 9899; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 9900; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9901; AVX2-NEXT: retq 9902; 9903; AVX512BW-LABEL: test174: 9904; AVX512BW: # BB#0: # %entry 9905; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0 9906; AVX512BW-NEXT: retq 9907entry: 9908 %cmp = icmp ule <4 x i64> %a, %b 9909 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 9910 ret <4 x i64> %sel 9911} 9912 9913define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) { 9914; SSE2-LABEL: test175: 9915; SSE2: # BB#0: # %entry 9916; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 9917; SSE2-NEXT: movdqa %xmm3, %xmm4 9918; SSE2-NEXT: pxor %xmm5, %xmm4 9919; SSE2-NEXT: movdqa %xmm1, %xmm6 9920; SSE2-NEXT: pxor %xmm5, %xmm6 9921; SSE2-NEXT: movdqa %xmm6, %xmm7 9922; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 9923; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9924; SSE2-NEXT: pcmpeqd %xmm4, %xmm6 9925; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 9926; SSE2-NEXT: pand %xmm8, %xmm6 9927; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3] 9928; SSE2-NEXT: por %xmm6, %xmm4 9929; SSE2-NEXT: movdqa %xmm2, %xmm6 9930; SSE2-NEXT: pxor %xmm5, %xmm6 9931; SSE2-NEXT: pxor %xmm0, %xmm5 9932; SSE2-NEXT: movdqa %xmm5, %xmm7 9933; SSE2-NEXT: pcmpgtd %xmm6, %xmm7 9934; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 9935; SSE2-NEXT: pcmpeqd %xmm6, %xmm5 9936; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3] 9937; SSE2-NEXT: pand %xmm8, %xmm6 9938; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 9939; SSE2-NEXT: por %xmm6, %xmm5 9940; SSE2-NEXT: pand %xmm5, %xmm2 9941; SSE2-NEXT: pandn %xmm0, %xmm5 9942; SSE2-NEXT: por %xmm2, %xmm5 9943; SSE2-NEXT: pand %xmm4, %xmm3 9944; SSE2-NEXT: pandn %xmm1, %xmm4 9945; SSE2-NEXT: por %xmm3, %xmm4 9946; SSE2-NEXT: movdqa %xmm5, %xmm0 9947; SSE2-NEXT: movdqa %xmm4, %xmm1 9948; SSE2-NEXT: retq 9949; 9950; SSE4-LABEL: test175: 9951; SSE4: # BB#0: # %entry 9952; SSE4-NEXT: movdqa %xmm0, %xmm4 9953; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 9954; SSE4-NEXT: movdqa %xmm3, %xmm6 9955; SSE4-NEXT: pxor %xmm0, %xmm6 9956; SSE4-NEXT: movdqa %xmm1, %xmm5 9957; SSE4-NEXT: pxor %xmm0, %xmm5 9958; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 9959; SSE4-NEXT: movdqa %xmm2, %xmm6 9960; SSE4-NEXT: pxor %xmm0, %xmm6 9961; SSE4-NEXT: pxor %xmm4, %xmm0 9962; SSE4-NEXT: pcmpgtq %xmm6, %xmm0 9963; SSE4-NEXT: blendvpd %xmm2, %xmm4 9964; SSE4-NEXT: movdqa %xmm5, %xmm0 9965; SSE4-NEXT: blendvpd %xmm3, %xmm1 9966; SSE4-NEXT: movapd %xmm4, %xmm0 9967; SSE4-NEXT: retq 9968; 9969; AVX1-LABEL: test175: 9970; AVX1: # BB#0: # %entry 9971; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 9972; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 9973; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 9974; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 9975; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 9976; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 9977; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm4 9978; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3 9979; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 9980; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 9981; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9982; AVX1-NEXT: retq 9983; 9984; AVX2-LABEL: test175: 9985; AVX2: # BB#0: # %entry 9986; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 9987; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 9988; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 9989; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 9990; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 9991; AVX2-NEXT: retq 9992; 9993; AVX512BW-LABEL: test175: 9994; AVX512BW: # BB#0: # %entry 9995; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 9996; AVX512BW-NEXT: retq 9997entry: 9998 %cmp = icmp ugt <4 x i64> %a, %b 9999 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 10000 ret <4 x i64> %sel 10001} 10002 10003define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) { 10004; SSE2-LABEL: test176: 10005; SSE2: # BB#0: # %entry 10006; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648] 10007; SSE2-NEXT: movdqa %xmm1, %xmm4 10008; SSE2-NEXT: pxor %xmm7, %xmm4 10009; SSE2-NEXT: movdqa %xmm3, %xmm5 10010; SSE2-NEXT: pxor %xmm7, %xmm5 10011; SSE2-NEXT: movdqa %xmm5, %xmm6 10012; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 10013; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 10014; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 10015; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 10016; SSE2-NEXT: pand %xmm8, %xmm4 10017; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 10018; SSE2-NEXT: por %xmm4, %xmm8 10019; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 10020; SSE2-NEXT: movdqa %xmm8, %xmm9 10021; SSE2-NEXT: pxor %xmm4, %xmm9 10022; SSE2-NEXT: movdqa %xmm0, %xmm6 10023; SSE2-NEXT: pxor %xmm7, %xmm6 10024; SSE2-NEXT: pxor %xmm2, %xmm7 10025; SSE2-NEXT: movdqa %xmm7, %xmm5 10026; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 10027; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 10028; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 10029; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 10030; SSE2-NEXT: pand %xmm10, %xmm6 10031; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 10032; SSE2-NEXT: por %xmm6, %xmm5 10033; SSE2-NEXT: pxor %xmm5, %xmm4 10034; SSE2-NEXT: pandn %xmm2, %xmm5 10035; SSE2-NEXT: pandn %xmm0, %xmm4 10036; SSE2-NEXT: por %xmm5, %xmm4 10037; SSE2-NEXT: pandn %xmm3, %xmm8 10038; SSE2-NEXT: pandn %xmm1, %xmm9 10039; SSE2-NEXT: por %xmm8, %xmm9 10040; SSE2-NEXT: movdqa %xmm4, %xmm0 10041; SSE2-NEXT: movdqa %xmm9, %xmm1 10042; SSE2-NEXT: retq 10043; 10044; SSE4-LABEL: test176: 10045; SSE4: # BB#0: # %entry 10046; SSE4-NEXT: movdqa %xmm0, %xmm4 10047; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10048; SSE4-NEXT: movdqa %xmm1, %xmm6 10049; SSE4-NEXT: pxor %xmm0, %xmm6 10050; SSE4-NEXT: movdqa %xmm3, %xmm5 10051; SSE4-NEXT: pxor %xmm0, %xmm5 10052; SSE4-NEXT: pcmpgtq %xmm6, %xmm5 10053; SSE4-NEXT: pcmpeqd %xmm6, %xmm6 10054; SSE4-NEXT: pxor %xmm6, %xmm5 10055; SSE4-NEXT: movdqa %xmm4, %xmm7 10056; SSE4-NEXT: pxor %xmm0, %xmm7 10057; SSE4-NEXT: pxor %xmm2, %xmm0 10058; SSE4-NEXT: pcmpgtq %xmm7, %xmm0 10059; SSE4-NEXT: pxor %xmm6, %xmm0 10060; SSE4-NEXT: blendvpd %xmm2, %xmm4 10061; SSE4-NEXT: movdqa %xmm5, %xmm0 10062; SSE4-NEXT: blendvpd %xmm3, %xmm1 10063; SSE4-NEXT: movapd %xmm4, %xmm0 10064; SSE4-NEXT: retq 10065; 10066; AVX1-LABEL: test176: 10067; AVX1: # BB#0: # %entry 10068; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 10069; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 10070; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 10071; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 10072; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 10073; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 10074; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4 10075; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2 10076; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm5 10077; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3 10078; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3 10079; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3 10080; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 10081; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 10082; AVX1-NEXT: retq 10083; 10084; AVX2-LABEL: test176: 10085; AVX2: # BB#0: # %entry 10086; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 10087; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 10088; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 10089; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 10090; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 10091; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 10092; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 10093; AVX2-NEXT: retq 10094; 10095; AVX512BW-LABEL: test176: 10096; AVX512BW: # BB#0: # %entry 10097; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0 10098; AVX512BW-NEXT: retq 10099entry: 10100 %cmp = icmp uge <4 x i64> %a, %b 10101 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a 10102 ret <4 x i64> %sel 10103} 10104 10105define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) { 10106; SSE2-LABEL: test177: 10107; SSE2: # BB#0: # %entry 10108; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10109; SSE2-NEXT: movdqa %xmm0, %xmm3 10110; SSE2-NEXT: pxor %xmm2, %xmm3 10111; SSE2-NEXT: pxor %xmm1, %xmm2 10112; SSE2-NEXT: movdqa %xmm2, %xmm4 10113; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10114; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10115; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10116; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10117; SSE2-NEXT: pand %xmm5, %xmm2 10118; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10119; SSE2-NEXT: por %xmm2, %xmm3 10120; SSE2-NEXT: pand %xmm3, %xmm0 10121; SSE2-NEXT: pandn %xmm1, %xmm3 10122; SSE2-NEXT: por %xmm3, %xmm0 10123; SSE2-NEXT: retq 10124; 10125; SSE4-LABEL: test177: 10126; SSE4: # BB#0: # %entry 10127; SSE4-NEXT: movdqa %xmm0, %xmm2 10128; SSE4-NEXT: movdqa %xmm1, %xmm0 10129; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 10130; SSE4-NEXT: blendvpd %xmm2, %xmm1 10131; SSE4-NEXT: movapd %xmm1, %xmm0 10132; SSE4-NEXT: retq 10133; 10134; AVX1-LABEL: test177: 10135; AVX1: # BB#0: # %entry 10136; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10137; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10138; AVX1-NEXT: retq 10139; 10140; AVX2-LABEL: test177: 10141; AVX2: # BB#0: # %entry 10142; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10143; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10144; AVX2-NEXT: retq 10145; 10146; AVX512BW-LABEL: test177: 10147; AVX512BW: # BB#0: # %entry 10148; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 10149; AVX512BW-NEXT: retq 10150entry: 10151 %cmp = icmp slt <2 x i64> %a, %b 10152 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10153 ret <2 x i64> %sel 10154} 10155 10156define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) { 10157; SSE2-LABEL: test178: 10158; SSE2: # BB#0: # %entry 10159; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10160; SSE2-NEXT: movdqa %xmm1, %xmm3 10161; SSE2-NEXT: pxor %xmm2, %xmm3 10162; SSE2-NEXT: pxor %xmm0, %xmm2 10163; SSE2-NEXT: movdqa %xmm2, %xmm4 10164; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10165; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10166; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10167; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10168; SSE2-NEXT: pand %xmm5, %xmm2 10169; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10170; SSE2-NEXT: por %xmm2, %xmm3 10171; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10172; SSE2-NEXT: pxor %xmm3, %xmm2 10173; SSE2-NEXT: pandn %xmm0, %xmm3 10174; SSE2-NEXT: pandn %xmm1, %xmm2 10175; SSE2-NEXT: por %xmm3, %xmm2 10176; SSE2-NEXT: movdqa %xmm2, %xmm0 10177; SSE2-NEXT: retq 10178; 10179; SSE4-LABEL: test178: 10180; SSE4: # BB#0: # %entry 10181; SSE4-NEXT: movdqa %xmm0, %xmm2 10182; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 10183; SSE4-NEXT: pcmpeqd %xmm3, %xmm3 10184; SSE4-NEXT: pxor %xmm3, %xmm0 10185; SSE4-NEXT: blendvpd %xmm2, %xmm1 10186; SSE4-NEXT: movapd %xmm1, %xmm0 10187; SSE4-NEXT: retq 10188; 10189; AVX1-LABEL: test178: 10190; AVX1: # BB#0: # %entry 10191; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10192; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10193; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10194; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10195; AVX1-NEXT: retq 10196; 10197; AVX2-LABEL: test178: 10198; AVX2: # BB#0: # %entry 10199; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10200; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10201; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10202; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10203; AVX2-NEXT: retq 10204; 10205; AVX512BW-LABEL: test178: 10206; AVX512BW: # BB#0: # %entry 10207; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 10208; AVX512BW-NEXT: retq 10209entry: 10210 %cmp = icmp sle <2 x i64> %a, %b 10211 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10212 ret <2 x i64> %sel 10213} 10214 10215define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) { 10216; SSE2-LABEL: test179: 10217; SSE2: # BB#0: # %entry 10218; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10219; SSE2-NEXT: movdqa %xmm1, %xmm3 10220; SSE2-NEXT: pxor %xmm2, %xmm3 10221; SSE2-NEXT: pxor %xmm0, %xmm2 10222; SSE2-NEXT: movdqa %xmm2, %xmm4 10223; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10224; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10225; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10226; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10227; SSE2-NEXT: pand %xmm5, %xmm2 10228; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10229; SSE2-NEXT: por %xmm2, %xmm3 10230; SSE2-NEXT: pand %xmm3, %xmm0 10231; SSE2-NEXT: pandn %xmm1, %xmm3 10232; SSE2-NEXT: por %xmm3, %xmm0 10233; SSE2-NEXT: retq 10234; 10235; SSE4-LABEL: test179: 10236; SSE4: # BB#0: # %entry 10237; SSE4-NEXT: movdqa %xmm0, %xmm2 10238; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 10239; SSE4-NEXT: blendvpd %xmm2, %xmm1 10240; SSE4-NEXT: movapd %xmm1, %xmm0 10241; SSE4-NEXT: retq 10242; 10243; AVX1-LABEL: test179: 10244; AVX1: # BB#0: # %entry 10245; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10246; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10247; AVX1-NEXT: retq 10248; 10249; AVX2-LABEL: test179: 10250; AVX2: # BB#0: # %entry 10251; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10252; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10253; AVX2-NEXT: retq 10254; 10255; AVX512BW-LABEL: test179: 10256; AVX512BW: # BB#0: # %entry 10257; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 10258; AVX512BW-NEXT: retq 10259entry: 10260 %cmp = icmp sgt <2 x i64> %a, %b 10261 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10262 ret <2 x i64> %sel 10263} 10264 10265define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) { 10266; SSE2-LABEL: test180: 10267; SSE2: # BB#0: # %entry 10268; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10269; SSE2-NEXT: movdqa %xmm0, %xmm3 10270; SSE2-NEXT: pxor %xmm2, %xmm3 10271; SSE2-NEXT: pxor %xmm1, %xmm2 10272; SSE2-NEXT: movdqa %xmm2, %xmm4 10273; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10274; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10275; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10276; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10277; SSE2-NEXT: pand %xmm5, %xmm2 10278; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10279; SSE2-NEXT: por %xmm2, %xmm3 10280; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10281; SSE2-NEXT: pxor %xmm3, %xmm2 10282; SSE2-NEXT: pandn %xmm0, %xmm3 10283; SSE2-NEXT: pandn %xmm1, %xmm2 10284; SSE2-NEXT: por %xmm3, %xmm2 10285; SSE2-NEXT: movdqa %xmm2, %xmm0 10286; SSE2-NEXT: retq 10287; 10288; SSE4-LABEL: test180: 10289; SSE4: # BB#0: # %entry 10290; SSE4-NEXT: movdqa %xmm0, %xmm2 10291; SSE4-NEXT: movdqa %xmm1, %xmm3 10292; SSE4-NEXT: pcmpgtq %xmm2, %xmm3 10293; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 10294; SSE4-NEXT: pxor %xmm3, %xmm0 10295; SSE4-NEXT: blendvpd %xmm2, %xmm1 10296; SSE4-NEXT: movapd %xmm1, %xmm0 10297; SSE4-NEXT: retq 10298; 10299; AVX1-LABEL: test180: 10300; AVX1: # BB#0: # %entry 10301; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10302; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10303; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10304; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10305; AVX1-NEXT: retq 10306; 10307; AVX2-LABEL: test180: 10308; AVX2: # BB#0: # %entry 10309; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10310; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10311; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10312; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10313; AVX2-NEXT: retq 10314; 10315; AVX512BW-LABEL: test180: 10316; AVX512BW: # BB#0: # %entry 10317; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 10318; AVX512BW-NEXT: retq 10319entry: 10320 %cmp = icmp sge <2 x i64> %a, %b 10321 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10322 ret <2 x i64> %sel 10323} 10324 10325define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) { 10326; SSE2-LABEL: test181: 10327; SSE2: # BB#0: # %entry 10328; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10329; SSE2-NEXT: movdqa %xmm0, %xmm3 10330; SSE2-NEXT: pxor %xmm2, %xmm3 10331; SSE2-NEXT: pxor %xmm1, %xmm2 10332; SSE2-NEXT: movdqa %xmm2, %xmm4 10333; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10334; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10335; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10336; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10337; SSE2-NEXT: pand %xmm5, %xmm2 10338; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10339; SSE2-NEXT: por %xmm2, %xmm3 10340; SSE2-NEXT: pand %xmm3, %xmm0 10341; SSE2-NEXT: pandn %xmm1, %xmm3 10342; SSE2-NEXT: por %xmm3, %xmm0 10343; SSE2-NEXT: retq 10344; 10345; SSE4-LABEL: test181: 10346; SSE4: # BB#0: # %entry 10347; SSE4-NEXT: movdqa %xmm0, %xmm2 10348; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10349; SSE4-NEXT: movdqa %xmm2, %xmm3 10350; SSE4-NEXT: pxor %xmm0, %xmm3 10351; SSE4-NEXT: pxor %xmm1, %xmm0 10352; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10353; SSE4-NEXT: blendvpd %xmm2, %xmm1 10354; SSE4-NEXT: movapd %xmm1, %xmm0 10355; SSE4-NEXT: retq 10356; 10357; AVX1-LABEL: test181: 10358; AVX1: # BB#0: # %entry 10359; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10360; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 10361; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 10362; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10363; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10364; AVX1-NEXT: retq 10365; 10366; AVX2-LABEL: test181: 10367; AVX2: # BB#0: # %entry 10368; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10369; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 10370; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 10371; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10372; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10373; AVX2-NEXT: retq 10374; 10375; AVX512BW-LABEL: test181: 10376; AVX512BW: # BB#0: # %entry 10377; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 10378; AVX512BW-NEXT: retq 10379entry: 10380 %cmp = icmp ult <2 x i64> %a, %b 10381 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10382 ret <2 x i64> %sel 10383} 10384 10385define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) { 10386; SSE2-LABEL: test182: 10387; SSE2: # BB#0: # %entry 10388; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10389; SSE2-NEXT: movdqa %xmm1, %xmm3 10390; SSE2-NEXT: pxor %xmm2, %xmm3 10391; SSE2-NEXT: pxor %xmm0, %xmm2 10392; SSE2-NEXT: movdqa %xmm2, %xmm4 10393; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10394; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10395; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10396; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10397; SSE2-NEXT: pand %xmm5, %xmm2 10398; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10399; SSE2-NEXT: por %xmm2, %xmm3 10400; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10401; SSE2-NEXT: pxor %xmm3, %xmm2 10402; SSE2-NEXT: pandn %xmm0, %xmm3 10403; SSE2-NEXT: pandn %xmm1, %xmm2 10404; SSE2-NEXT: por %xmm3, %xmm2 10405; SSE2-NEXT: movdqa %xmm2, %xmm0 10406; SSE2-NEXT: retq 10407; 10408; SSE4-LABEL: test182: 10409; SSE4: # BB#0: # %entry 10410; SSE4-NEXT: movdqa %xmm0, %xmm2 10411; SSE4-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 10412; SSE4-NEXT: movdqa %xmm1, %xmm0 10413; SSE4-NEXT: pxor %xmm3, %xmm0 10414; SSE4-NEXT: pxor %xmm2, %xmm3 10415; SSE4-NEXT: pcmpgtq %xmm0, %xmm3 10416; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 10417; SSE4-NEXT: pxor %xmm3, %xmm0 10418; SSE4-NEXT: blendvpd %xmm2, %xmm1 10419; SSE4-NEXT: movapd %xmm1, %xmm0 10420; SSE4-NEXT: retq 10421; 10422; AVX1-LABEL: test182: 10423; AVX1: # BB#0: # %entry 10424; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10425; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 10426; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 10427; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10428; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10429; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10430; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10431; AVX1-NEXT: retq 10432; 10433; AVX2-LABEL: test182: 10434; AVX2: # BB#0: # %entry 10435; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10436; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 10437; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 10438; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10439; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10440; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10441; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10442; AVX2-NEXT: retq 10443; 10444; AVX512BW-LABEL: test182: 10445; AVX512BW: # BB#0: # %entry 10446; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 10447; AVX512BW-NEXT: retq 10448entry: 10449 %cmp = icmp ule <2 x i64> %a, %b 10450 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10451 ret <2 x i64> %sel 10452} 10453 10454define <2 x i64> @test183(<2 x i64> %a, <2 x i64> %b) { 10455; SSE2-LABEL: test183: 10456; SSE2: # BB#0: # %entry 10457; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10458; SSE2-NEXT: movdqa %xmm1, %xmm3 10459; SSE2-NEXT: pxor %xmm2, %xmm3 10460; SSE2-NEXT: pxor %xmm0, %xmm2 10461; SSE2-NEXT: movdqa %xmm2, %xmm4 10462; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10463; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10464; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10465; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10466; SSE2-NEXT: pand %xmm5, %xmm2 10467; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10468; SSE2-NEXT: por %xmm2, %xmm3 10469; SSE2-NEXT: pand %xmm3, %xmm0 10470; SSE2-NEXT: pandn %xmm1, %xmm3 10471; SSE2-NEXT: por %xmm3, %xmm0 10472; SSE2-NEXT: retq 10473; 10474; SSE4-LABEL: test183: 10475; SSE4: # BB#0: # %entry 10476; SSE4-NEXT: movdqa %xmm0, %xmm2 10477; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10478; SSE4-NEXT: movdqa %xmm1, %xmm3 10479; SSE4-NEXT: pxor %xmm0, %xmm3 10480; SSE4-NEXT: pxor %xmm2, %xmm0 10481; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10482; SSE4-NEXT: blendvpd %xmm2, %xmm1 10483; SSE4-NEXT: movapd %xmm1, %xmm0 10484; SSE4-NEXT: retq 10485; 10486; AVX1-LABEL: test183: 10487; AVX1: # BB#0: # %entry 10488; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10489; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 10490; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 10491; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10492; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10493; AVX1-NEXT: retq 10494; 10495; AVX2-LABEL: test183: 10496; AVX2: # BB#0: # %entry 10497; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10498; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 10499; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 10500; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10501; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10502; AVX2-NEXT: retq 10503; 10504; AVX512BW-LABEL: test183: 10505; AVX512BW: # BB#0: # %entry 10506; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 10507; AVX512BW-NEXT: retq 10508entry: 10509 %cmp = icmp ugt <2 x i64> %a, %b 10510 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10511 ret <2 x i64> %sel 10512} 10513 10514define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) { 10515; SSE2-LABEL: test184: 10516; SSE2: # BB#0: # %entry 10517; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10518; SSE2-NEXT: movdqa %xmm0, %xmm3 10519; SSE2-NEXT: pxor %xmm2, %xmm3 10520; SSE2-NEXT: pxor %xmm1, %xmm2 10521; SSE2-NEXT: movdqa %xmm2, %xmm4 10522; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10523; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10524; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10525; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10526; SSE2-NEXT: pand %xmm5, %xmm2 10527; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10528; SSE2-NEXT: por %xmm2, %xmm3 10529; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10530; SSE2-NEXT: pxor %xmm3, %xmm2 10531; SSE2-NEXT: pandn %xmm0, %xmm3 10532; SSE2-NEXT: pandn %xmm1, %xmm2 10533; SSE2-NEXT: por %xmm3, %xmm2 10534; SSE2-NEXT: movdqa %xmm2, %xmm0 10535; SSE2-NEXT: retq 10536; 10537; SSE4-LABEL: test184: 10538; SSE4: # BB#0: # %entry 10539; SSE4-NEXT: movdqa %xmm0, %xmm2 10540; SSE4-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 10541; SSE4-NEXT: pxor %xmm3, %xmm0 10542; SSE4-NEXT: pxor %xmm1, %xmm3 10543; SSE4-NEXT: pcmpgtq %xmm0, %xmm3 10544; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 10545; SSE4-NEXT: pxor %xmm3, %xmm0 10546; SSE4-NEXT: blendvpd %xmm2, %xmm1 10547; SSE4-NEXT: movapd %xmm1, %xmm0 10548; SSE4-NEXT: retq 10549; 10550; AVX1-LABEL: test184: 10551; AVX1: # BB#0: # %entry 10552; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10553; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 10554; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 10555; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10556; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10557; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10558; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10559; AVX1-NEXT: retq 10560; 10561; AVX2-LABEL: test184: 10562; AVX2: # BB#0: # %entry 10563; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10564; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 10565; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 10566; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10567; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10568; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10569; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 10570; AVX2-NEXT: retq 10571; 10572; AVX512BW-LABEL: test184: 10573; AVX512BW: # BB#0: # %entry 10574; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 10575; AVX512BW-NEXT: retq 10576entry: 10577 %cmp = icmp uge <2 x i64> %a, %b 10578 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b 10579 ret <2 x i64> %sel 10580} 10581 10582define <2 x i64> @test185(<2 x i64> %a, <2 x i64> %b) { 10583; SSE2-LABEL: test185: 10584; SSE2: # BB#0: # %entry 10585; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10586; SSE2-NEXT: movdqa %xmm0, %xmm3 10587; SSE2-NEXT: pxor %xmm2, %xmm3 10588; SSE2-NEXT: pxor %xmm1, %xmm2 10589; SSE2-NEXT: movdqa %xmm2, %xmm4 10590; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10591; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10592; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10593; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3] 10594; SSE2-NEXT: pand %xmm5, %xmm3 10595; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 10596; SSE2-NEXT: por %xmm3, %xmm2 10597; SSE2-NEXT: pand %xmm2, %xmm1 10598; SSE2-NEXT: pandn %xmm0, %xmm2 10599; SSE2-NEXT: por %xmm1, %xmm2 10600; SSE2-NEXT: movdqa %xmm2, %xmm0 10601; SSE2-NEXT: retq 10602; 10603; SSE4-LABEL: test185: 10604; SSE4: # BB#0: # %entry 10605; SSE4-NEXT: movdqa %xmm0, %xmm2 10606; SSE4-NEXT: movdqa %xmm1, %xmm0 10607; SSE4-NEXT: pcmpgtq %xmm2, %xmm0 10608; SSE4-NEXT: blendvpd %xmm1, %xmm2 10609; SSE4-NEXT: movapd %xmm2, %xmm0 10610; SSE4-NEXT: retq 10611; 10612; AVX1-LABEL: test185: 10613; AVX1: # BB#0: # %entry 10614; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10615; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10616; AVX1-NEXT: retq 10617; 10618; AVX2-LABEL: test185: 10619; AVX2: # BB#0: # %entry 10620; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10621; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10622; AVX2-NEXT: retq 10623; 10624; AVX512BW-LABEL: test185: 10625; AVX512BW: # BB#0: # %entry 10626; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 10627; AVX512BW-NEXT: retq 10628entry: 10629 %cmp = icmp slt <2 x i64> %a, %b 10630 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10631 ret <2 x i64> %sel 10632} 10633 10634define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) { 10635; SSE2-LABEL: test186: 10636; SSE2: # BB#0: # %entry 10637; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10638; SSE2-NEXT: movdqa %xmm1, %xmm3 10639; SSE2-NEXT: pxor %xmm2, %xmm3 10640; SSE2-NEXT: pxor %xmm0, %xmm2 10641; SSE2-NEXT: movdqa %xmm2, %xmm4 10642; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10643; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10644; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10645; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10646; SSE2-NEXT: pand %xmm5, %xmm2 10647; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10648; SSE2-NEXT: por %xmm2, %xmm3 10649; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10650; SSE2-NEXT: pxor %xmm3, %xmm2 10651; SSE2-NEXT: pandn %xmm1, %xmm3 10652; SSE2-NEXT: pandn %xmm0, %xmm2 10653; SSE2-NEXT: por %xmm3, %xmm2 10654; SSE2-NEXT: movdqa %xmm2, %xmm0 10655; SSE2-NEXT: retq 10656; 10657; SSE4-LABEL: test186: 10658; SSE4: # BB#0: # %entry 10659; SSE4-NEXT: movdqa %xmm0, %xmm2 10660; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 10661; SSE4-NEXT: pcmpeqd %xmm3, %xmm3 10662; SSE4-NEXT: pxor %xmm3, %xmm0 10663; SSE4-NEXT: blendvpd %xmm1, %xmm2 10664; SSE4-NEXT: movapd %xmm2, %xmm0 10665; SSE4-NEXT: retq 10666; 10667; AVX1-LABEL: test186: 10668; AVX1: # BB#0: # %entry 10669; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10670; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10671; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10672; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10673; AVX1-NEXT: retq 10674; 10675; AVX2-LABEL: test186: 10676; AVX2: # BB#0: # %entry 10677; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10678; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10679; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10680; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10681; AVX2-NEXT: retq 10682; 10683; AVX512BW-LABEL: test186: 10684; AVX512BW: # BB#0: # %entry 10685; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0 10686; AVX512BW-NEXT: retq 10687entry: 10688 %cmp = icmp sle <2 x i64> %a, %b 10689 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10690 ret <2 x i64> %sel 10691} 10692 10693define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) { 10694; SSE2-LABEL: test187: 10695; SSE2: # BB#0: # %entry 10696; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10697; SSE2-NEXT: movdqa %xmm1, %xmm3 10698; SSE2-NEXT: pxor %xmm2, %xmm3 10699; SSE2-NEXT: pxor %xmm0, %xmm2 10700; SSE2-NEXT: movdqa %xmm2, %xmm4 10701; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10702; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10703; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10704; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3] 10705; SSE2-NEXT: pand %xmm5, %xmm3 10706; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 10707; SSE2-NEXT: por %xmm3, %xmm2 10708; SSE2-NEXT: pand %xmm2, %xmm1 10709; SSE2-NEXT: pandn %xmm0, %xmm2 10710; SSE2-NEXT: por %xmm1, %xmm2 10711; SSE2-NEXT: movdqa %xmm2, %xmm0 10712; SSE2-NEXT: retq 10713; 10714; SSE4-LABEL: test187: 10715; SSE4: # BB#0: # %entry 10716; SSE4-NEXT: movdqa %xmm0, %xmm2 10717; SSE4-NEXT: pcmpgtq %xmm1, %xmm0 10718; SSE4-NEXT: blendvpd %xmm1, %xmm2 10719; SSE4-NEXT: movapd %xmm2, %xmm0 10720; SSE4-NEXT: retq 10721; 10722; AVX1-LABEL: test187: 10723; AVX1: # BB#0: # %entry 10724; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10725; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10726; AVX1-NEXT: retq 10727; 10728; AVX2-LABEL: test187: 10729; AVX2: # BB#0: # %entry 10730; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2 10731; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10732; AVX2-NEXT: retq 10733; 10734; AVX512BW-LABEL: test187: 10735; AVX512BW: # BB#0: # %entry 10736; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 10737; AVX512BW-NEXT: retq 10738entry: 10739 %cmp = icmp sgt <2 x i64> %a, %b 10740 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10741 ret <2 x i64> %sel 10742} 10743 10744define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) { 10745; SSE2-LABEL: test188: 10746; SSE2: # BB#0: # %entry 10747; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 10748; SSE2-NEXT: movdqa %xmm0, %xmm3 10749; SSE2-NEXT: pxor %xmm2, %xmm3 10750; SSE2-NEXT: pxor %xmm1, %xmm2 10751; SSE2-NEXT: movdqa %xmm2, %xmm4 10752; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10753; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10754; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10755; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10756; SSE2-NEXT: pand %xmm5, %xmm2 10757; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10758; SSE2-NEXT: por %xmm2, %xmm3 10759; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10760; SSE2-NEXT: pxor %xmm3, %xmm2 10761; SSE2-NEXT: pandn %xmm1, %xmm3 10762; SSE2-NEXT: pandn %xmm0, %xmm2 10763; SSE2-NEXT: por %xmm3, %xmm2 10764; SSE2-NEXT: movdqa %xmm2, %xmm0 10765; SSE2-NEXT: retq 10766; 10767; SSE4-LABEL: test188: 10768; SSE4: # BB#0: # %entry 10769; SSE4-NEXT: movdqa %xmm0, %xmm2 10770; SSE4-NEXT: movdqa %xmm1, %xmm3 10771; SSE4-NEXT: pcmpgtq %xmm2, %xmm3 10772; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 10773; SSE4-NEXT: pxor %xmm3, %xmm0 10774; SSE4-NEXT: blendvpd %xmm1, %xmm2 10775; SSE4-NEXT: movapd %xmm2, %xmm0 10776; SSE4-NEXT: retq 10777; 10778; AVX1-LABEL: test188: 10779; AVX1: # BB#0: # %entry 10780; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10781; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10782; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10783; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10784; AVX1-NEXT: retq 10785; 10786; AVX2-LABEL: test188: 10787; AVX2: # BB#0: # %entry 10788; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2 10789; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10790; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10791; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10792; AVX2-NEXT: retq 10793; 10794; AVX512BW-LABEL: test188: 10795; AVX512BW: # BB#0: # %entry 10796; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0 10797; AVX512BW-NEXT: retq 10798entry: 10799 %cmp = icmp sge <2 x i64> %a, %b 10800 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10801 ret <2 x i64> %sel 10802} 10803 10804define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) { 10805; SSE2-LABEL: test189: 10806; SSE2: # BB#0: # %entry 10807; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10808; SSE2-NEXT: movdqa %xmm0, %xmm3 10809; SSE2-NEXT: pxor %xmm2, %xmm3 10810; SSE2-NEXT: pxor %xmm1, %xmm2 10811; SSE2-NEXT: movdqa %xmm2, %xmm4 10812; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10813; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10814; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10815; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3] 10816; SSE2-NEXT: pand %xmm5, %xmm3 10817; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 10818; SSE2-NEXT: por %xmm3, %xmm2 10819; SSE2-NEXT: pand %xmm2, %xmm1 10820; SSE2-NEXT: pandn %xmm0, %xmm2 10821; SSE2-NEXT: por %xmm1, %xmm2 10822; SSE2-NEXT: movdqa %xmm2, %xmm0 10823; SSE2-NEXT: retq 10824; 10825; SSE4-LABEL: test189: 10826; SSE4: # BB#0: # %entry 10827; SSE4-NEXT: movdqa %xmm0, %xmm2 10828; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10829; SSE4-NEXT: movdqa %xmm2, %xmm3 10830; SSE4-NEXT: pxor %xmm0, %xmm3 10831; SSE4-NEXT: pxor %xmm1, %xmm0 10832; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10833; SSE4-NEXT: blendvpd %xmm1, %xmm2 10834; SSE4-NEXT: movapd %xmm2, %xmm0 10835; SSE4-NEXT: retq 10836; 10837; AVX1-LABEL: test189: 10838; AVX1: # BB#0: # %entry 10839; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10840; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 10841; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 10842; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10843; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10844; AVX1-NEXT: retq 10845; 10846; AVX2-LABEL: test189: 10847; AVX2: # BB#0: # %entry 10848; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10849; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 10850; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 10851; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10852; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10853; AVX2-NEXT: retq 10854; 10855; AVX512BW-LABEL: test189: 10856; AVX512BW: # BB#0: # %entry 10857; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 10858; AVX512BW-NEXT: retq 10859entry: 10860 %cmp = icmp ult <2 x i64> %a, %b 10861 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10862 ret <2 x i64> %sel 10863} 10864 10865define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) { 10866; SSE2-LABEL: test190: 10867; SSE2: # BB#0: # %entry 10868; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10869; SSE2-NEXT: movdqa %xmm1, %xmm3 10870; SSE2-NEXT: pxor %xmm2, %xmm3 10871; SSE2-NEXT: pxor %xmm0, %xmm2 10872; SSE2-NEXT: movdqa %xmm2, %xmm4 10873; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10874; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10875; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10876; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 10877; SSE2-NEXT: pand %xmm5, %xmm2 10878; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 10879; SSE2-NEXT: por %xmm2, %xmm3 10880; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 10881; SSE2-NEXT: pxor %xmm3, %xmm2 10882; SSE2-NEXT: pandn %xmm1, %xmm3 10883; SSE2-NEXT: pandn %xmm0, %xmm2 10884; SSE2-NEXT: por %xmm3, %xmm2 10885; SSE2-NEXT: movdqa %xmm2, %xmm0 10886; SSE2-NEXT: retq 10887; 10888; SSE4-LABEL: test190: 10889; SSE4: # BB#0: # %entry 10890; SSE4-NEXT: movdqa %xmm0, %xmm2 10891; SSE4-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 10892; SSE4-NEXT: movdqa %xmm1, %xmm0 10893; SSE4-NEXT: pxor %xmm3, %xmm0 10894; SSE4-NEXT: pxor %xmm2, %xmm3 10895; SSE4-NEXT: pcmpgtq %xmm0, %xmm3 10896; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 10897; SSE4-NEXT: pxor %xmm3, %xmm0 10898; SSE4-NEXT: blendvpd %xmm1, %xmm2 10899; SSE4-NEXT: movapd %xmm2, %xmm0 10900; SSE4-NEXT: retq 10901; 10902; AVX1-LABEL: test190: 10903; AVX1: # BB#0: # %entry 10904; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10905; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 10906; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 10907; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10908; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10909; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 10910; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10911; AVX1-NEXT: retq 10912; 10913; AVX2-LABEL: test190: 10914; AVX2: # BB#0: # %entry 10915; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10916; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 10917; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 10918; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10919; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 10920; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 10921; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10922; AVX2-NEXT: retq 10923; 10924; AVX512BW-LABEL: test190: 10925; AVX512BW: # BB#0: # %entry 10926; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0 10927; AVX512BW-NEXT: retq 10928entry: 10929 %cmp = icmp ule <2 x i64> %a, %b 10930 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10931 ret <2 x i64> %sel 10932} 10933 10934define <2 x i64> @test191(<2 x i64> %a, <2 x i64> %b) { 10935; SSE2-LABEL: test191: 10936; SSE2: # BB#0: # %entry 10937; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10938; SSE2-NEXT: movdqa %xmm1, %xmm3 10939; SSE2-NEXT: pxor %xmm2, %xmm3 10940; SSE2-NEXT: pxor %xmm0, %xmm2 10941; SSE2-NEXT: movdqa %xmm2, %xmm4 10942; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 10943; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 10944; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 10945; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3] 10946; SSE2-NEXT: pand %xmm5, %xmm3 10947; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3] 10948; SSE2-NEXT: por %xmm3, %xmm2 10949; SSE2-NEXT: pand %xmm2, %xmm1 10950; SSE2-NEXT: pandn %xmm0, %xmm2 10951; SSE2-NEXT: por %xmm1, %xmm2 10952; SSE2-NEXT: movdqa %xmm2, %xmm0 10953; SSE2-NEXT: retq 10954; 10955; SSE4-LABEL: test191: 10956; SSE4: # BB#0: # %entry 10957; SSE4-NEXT: movdqa %xmm0, %xmm2 10958; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 10959; SSE4-NEXT: movdqa %xmm1, %xmm3 10960; SSE4-NEXT: pxor %xmm0, %xmm3 10961; SSE4-NEXT: pxor %xmm2, %xmm0 10962; SSE4-NEXT: pcmpgtq %xmm3, %xmm0 10963; SSE4-NEXT: blendvpd %xmm1, %xmm2 10964; SSE4-NEXT: movapd %xmm2, %xmm0 10965; SSE4-NEXT: retq 10966; 10967; AVX1-LABEL: test191: 10968; AVX1: # BB#0: # %entry 10969; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10970; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3 10971; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2 10972; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10973; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10974; AVX1-NEXT: retq 10975; 10976; AVX2-LABEL: test191: 10977; AVX2: # BB#0: # %entry 10978; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 10979; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3 10980; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2 10981; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 10982; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 10983; AVX2-NEXT: retq 10984; 10985; AVX512BW-LABEL: test191: 10986; AVX512BW: # BB#0: # %entry 10987; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 10988; AVX512BW-NEXT: retq 10989entry: 10990 %cmp = icmp ugt <2 x i64> %a, %b 10991 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 10992 ret <2 x i64> %sel 10993} 10994 10995define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) { 10996; SSE2-LABEL: test192: 10997; SSE2: # BB#0: # %entry 10998; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 10999; SSE2-NEXT: movdqa %xmm0, %xmm3 11000; SSE2-NEXT: pxor %xmm2, %xmm3 11001; SSE2-NEXT: pxor %xmm1, %xmm2 11002; SSE2-NEXT: movdqa %xmm2, %xmm4 11003; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 11004; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 11005; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 11006; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 11007; SSE2-NEXT: pand %xmm5, %xmm2 11008; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 11009; SSE2-NEXT: por %xmm2, %xmm3 11010; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 11011; SSE2-NEXT: pxor %xmm3, %xmm2 11012; SSE2-NEXT: pandn %xmm1, %xmm3 11013; SSE2-NEXT: pandn %xmm0, %xmm2 11014; SSE2-NEXT: por %xmm3, %xmm2 11015; SSE2-NEXT: movdqa %xmm2, %xmm0 11016; SSE2-NEXT: retq 11017; 11018; SSE4-LABEL: test192: 11019; SSE4: # BB#0: # %entry 11020; SSE4-NEXT: movdqa %xmm0, %xmm2 11021; SSE4-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 11022; SSE4-NEXT: pxor %xmm3, %xmm0 11023; SSE4-NEXT: pxor %xmm1, %xmm3 11024; SSE4-NEXT: pcmpgtq %xmm0, %xmm3 11025; SSE4-NEXT: pcmpeqd %xmm0, %xmm0 11026; SSE4-NEXT: pxor %xmm3, %xmm0 11027; SSE4-NEXT: blendvpd %xmm1, %xmm2 11028; SSE4-NEXT: movapd %xmm2, %xmm0 11029; SSE4-NEXT: retq 11030; 11031; AVX1-LABEL: test192: 11032; AVX1: # BB#0: # %entry 11033; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 11034; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3 11035; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2 11036; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 11037; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 11038; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 11039; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 11040; AVX1-NEXT: retq 11041; 11042; AVX2-LABEL: test192: 11043; AVX2: # BB#0: # %entry 11044; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 11045; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3 11046; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2 11047; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 11048; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 11049; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2 11050; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 11051; AVX2-NEXT: retq 11052; 11053; AVX512BW-LABEL: test192: 11054; AVX512BW: # BB#0: # %entry 11055; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0 11056; AVX512BW-NEXT: retq 11057entry: 11058 %cmp = icmp uge <2 x i64> %a, %b 11059 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a 11060 ret <2 x i64> %sel 11061} 11062