1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl | FileCheck %s --check-prefix=CHECK --check-prefix=KNL 3; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck %s --check-prefix=CHECK --check-prefix=SKX 4 5define <16 x float> @test1(<16 x float> %x, <16 x float> %y) nounwind { 6; CHECK-LABEL: test1: 7; CHECK: ## BB#0: 8; CHECK-NEXT: vcmpleps %zmm1, %zmm0, %k1 9; CHECK-NEXT: vblendmps %zmm0, %zmm1, %zmm0 {%k1} 10; CHECK-NEXT: retq 11 %mask = fcmp ole <16 x float> %x, %y 12 %max = select <16 x i1> %mask, <16 x float> %x, <16 x float> %y 13 ret <16 x float> %max 14} 15 16define <8 x double> @test2(<8 x double> %x, <8 x double> %y) nounwind { 17; CHECK-LABEL: test2: 18; CHECK: ## BB#0: 19; CHECK-NEXT: vcmplepd %zmm1, %zmm0, %k1 20; CHECK-NEXT: vblendmpd %zmm0, %zmm1, %zmm0 {%k1} 21; CHECK-NEXT: retq 22 %mask = fcmp ole <8 x double> %x, %y 23 %max = select <8 x i1> %mask, <8 x double> %x, <8 x double> %y 24 ret <8 x double> %max 25} 26 27define <16 x i32> @test3(<16 x i32> %x, <16 x i32> %x1, <16 x i32>* %yp) nounwind { 28; CHECK-LABEL: test3: 29; CHECK: ## BB#0: 30; CHECK-NEXT: vpcmpeqd (%rdi), %zmm0, %k1 31; CHECK-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 32; CHECK-NEXT: retq 33 %y = load <16 x i32>, <16 x i32>* %yp, align 4 34 %mask = icmp eq <16 x i32> %x, %y 35 %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1 36 ret <16 x i32> %max 37} 38 39define <16 x i32> @test4_unsigned(<16 x i32> %x, <16 x i32> %y, <16 x i32> %x1) nounwind { 40; CHECK-LABEL: test4_unsigned: 41; CHECK: ## BB#0: 42; CHECK-NEXT: vpcmpnltud %zmm1, %zmm0, %k1 43; CHECK-NEXT: vpblendmd %zmm2, %zmm1, %zmm0 {%k1} 44; CHECK-NEXT: retq 45 %mask = icmp uge <16 x i32> %x, %y 46 %max = select <16 x i1> %mask, <16 x i32> %x1, <16 x i32> %y 47 ret <16 x i32> %max 48} 49 50define <8 x i64> @test5(<8 x i64> %x, <8 x i64> %y) nounwind { 51; CHECK-LABEL: test5: 52; CHECK: ## BB#0: 53; CHECK-NEXT: vpcmpeqq %zmm1, %zmm0, %k1 54; CHECK-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 55; CHECK-NEXT: retq 56 %mask = icmp eq <8 x i64> %x, %y 57 %max = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> %y 58 ret <8 x i64> %max 59} 60 61define <8 x i64> @test6_unsigned(<8 x i64> %x, <8 x i64> %y, <8 x i64> %x1) nounwind { 62; CHECK-LABEL: test6_unsigned: 63; CHECK: ## BB#0: 64; CHECK-NEXT: vpcmpnleuq %zmm1, %zmm0, %k1 65; CHECK-NEXT: vpblendmq %zmm2, %zmm1, %zmm0 {%k1} 66; CHECK-NEXT: retq 67 %mask = icmp ugt <8 x i64> %x, %y 68 %max = select <8 x i1> %mask, <8 x i64> %x1, <8 x i64> %y 69 ret <8 x i64> %max 70} 71 72define <4 x float> @test7(<4 x float> %a, <4 x float> %b) { 73; KNL-LABEL: test7: 74; KNL: ## BB#0: 75; KNL-NEXT: vxorps %xmm2, %xmm2, %xmm2 76; KNL-NEXT: vcmpltps %xmm2, %xmm0, %xmm2 77; KNL-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0 78; KNL-NEXT: retq 79; 80; SKX-LABEL: test7: 81; SKX: ## BB#0: 82; SKX-NEXT: vxorps %xmm2, %xmm2, %xmm2 83; SKX-NEXT: vcmpltps %xmm2, %xmm0, %k1 84; SKX-NEXT: vblendmps %xmm0, %xmm1, %xmm0 {%k1} 85; SKX-NEXT: retq 86 87 %mask = fcmp olt <4 x float> %a, zeroinitializer 88 %c = select <4 x i1>%mask, <4 x float>%a, <4 x float>%b 89 ret <4 x float>%c 90} 91 92define <2 x double> @test8(<2 x double> %a, <2 x double> %b) { 93; KNL-LABEL: test8: 94; KNL: ## BB#0: 95; KNL-NEXT: vxorpd %xmm2, %xmm2, %xmm2 96; KNL-NEXT: vcmpltpd %xmm2, %xmm0, %xmm2 97; KNL-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 98; KNL-NEXT: retq 99; 100; SKX-LABEL: test8: 101; SKX: ## BB#0: 102; SKX-NEXT: vxorpd %xmm2, %xmm2, %xmm2 103; SKX-NEXT: vcmpltpd %xmm2, %xmm0, %k1 104; SKX-NEXT: vblendmpd %xmm0, %xmm1, %xmm0 {%k1} 105; SKX-NEXT: retq 106 %mask = fcmp olt <2 x double> %a, zeroinitializer 107 %c = select <2 x i1>%mask, <2 x double>%a, <2 x double>%b 108 ret <2 x double>%c 109} 110 111define <8 x i32> @test9(<8 x i32> %x, <8 x i32> %y) nounwind { 112; KNL-LABEL: test9: 113; KNL: ## BB#0: 114; KNL-NEXT: ## kill: %YMM1<def> %YMM1<kill> %ZMM1<def> 115; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 116; KNL-NEXT: vpcmpeqd %zmm1, %zmm0, %k1 117; KNL-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 118; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<kill> 119; KNL-NEXT: retq 120; 121; SKX-LABEL: test9: 122; SKX: ## BB#0: 123; SKX-NEXT: vpcmpeqd %ymm1, %ymm0, %k1 124; SKX-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 125; SKX-NEXT: retq 126 %mask = icmp eq <8 x i32> %x, %y 127 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %y 128 ret <8 x i32> %max 129} 130 131define <8 x float> @test10(<8 x float> %x, <8 x float> %y) nounwind { 132; KNL-LABEL: test10: 133; KNL: ## BB#0: 134; KNL-NEXT: ## kill: %YMM1<def> %YMM1<kill> %ZMM1<def> 135; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 136; KNL-NEXT: vcmpeqps %zmm1, %zmm0, %k1 137; KNL-NEXT: vblendmps %zmm0, %zmm1, %zmm0 {%k1} 138; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<kill> 139; KNL-NEXT: retq 140; 141; SKX-LABEL: test10: 142; SKX: ## BB#0: 143; SKX-NEXT: vcmpeqps %ymm1, %ymm0, %k1 144; SKX-NEXT: vblendmps %ymm0, %ymm1, %ymm0 {%k1} 145; SKX-NEXT: retq 146 147 %mask = fcmp oeq <8 x float> %x, %y 148 %max = select <8 x i1> %mask, <8 x float> %x, <8 x float> %y 149 ret <8 x float> %max 150} 151 152define <8 x i32> @test11_unsigned(<8 x i32> %x, <8 x i32> %y) nounwind { 153; CHECK-LABEL: test11_unsigned: 154; CHECK: ## BB#0: 155; CHECK-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 156; CHECK-NEXT: retq 157 %mask = icmp ugt <8 x i32> %x, %y 158 %max = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> %y 159 ret <8 x i32> %max 160} 161 162define i16 @test12(<16 x i64> %a, <16 x i64> %b) nounwind { 163; CHECK-LABEL: test12: 164; CHECK: ## BB#0: 165; CHECK-NEXT: vpcmpeqq %zmm2, %zmm0, %k0 166; CHECK-NEXT: vpcmpeqq %zmm3, %zmm1, %k1 167; CHECK-NEXT: kunpckbw %k0, %k1, %k0 168; CHECK-NEXT: kmovw %k0, %eax 169; CHECK-NEXT: retq 170 %res = icmp eq <16 x i64> %a, %b 171 %res1 = bitcast <16 x i1> %res to i16 172 ret i16 %res1 173} 174 175define i32 @test12_v32i32(<32 x i32> %a, <32 x i32> %b) nounwind { 176; KNL-LABEL: test12_v32i32: 177; KNL: ## BB#0: 178; KNL-NEXT: pushq %rbp 179; KNL-NEXT: movq %rsp, %rbp 180; KNL-NEXT: andq $-32, %rsp 181; KNL-NEXT: subq $32, %rsp 182; KNL-NEXT: vpcmpeqd %zmm3, %zmm1, %k0 183; KNL-NEXT: kshiftlw $14, %k0, %k1 184; KNL-NEXT: kshiftrw $15, %k1, %k1 185; KNL-NEXT: kmovw %k1, %eax 186; KNL-NEXT: kshiftlw $15, %k0, %k1 187; KNL-NEXT: kshiftrw $15, %k1, %k1 188; KNL-NEXT: kmovw %k1, %ecx 189; KNL-NEXT: vmovd %ecx, %xmm1 190; KNL-NEXT: vpinsrb $1, %eax, %xmm1, %xmm1 191; KNL-NEXT: kshiftlw $13, %k0, %k1 192; KNL-NEXT: kshiftrw $15, %k1, %k1 193; KNL-NEXT: kmovw %k1, %eax 194; KNL-NEXT: vpinsrb $2, %eax, %xmm1, %xmm1 195; KNL-NEXT: kshiftlw $12, %k0, %k1 196; KNL-NEXT: kshiftrw $15, %k1, %k1 197; KNL-NEXT: kmovw %k1, %eax 198; KNL-NEXT: vpinsrb $3, %eax, %xmm1, %xmm1 199; KNL-NEXT: kshiftlw $11, %k0, %k1 200; KNL-NEXT: kshiftrw $15, %k1, %k1 201; KNL-NEXT: kmovw %k1, %eax 202; KNL-NEXT: vpinsrb $4, %eax, %xmm1, %xmm1 203; KNL-NEXT: kshiftlw $10, %k0, %k1 204; KNL-NEXT: kshiftrw $15, %k1, %k1 205; KNL-NEXT: kmovw %k1, %eax 206; KNL-NEXT: vpinsrb $5, %eax, %xmm1, %xmm1 207; KNL-NEXT: kshiftlw $9, %k0, %k1 208; KNL-NEXT: kshiftrw $15, %k1, %k1 209; KNL-NEXT: kmovw %k1, %eax 210; KNL-NEXT: vpinsrb $6, %eax, %xmm1, %xmm1 211; KNL-NEXT: kshiftlw $8, %k0, %k1 212; KNL-NEXT: kshiftrw $15, %k1, %k1 213; KNL-NEXT: kmovw %k1, %eax 214; KNL-NEXT: vpinsrb $7, %eax, %xmm1, %xmm1 215; KNL-NEXT: kshiftlw $7, %k0, %k1 216; KNL-NEXT: kshiftrw $15, %k1, %k1 217; KNL-NEXT: kmovw %k1, %eax 218; KNL-NEXT: vpinsrb $8, %eax, %xmm1, %xmm1 219; KNL-NEXT: kshiftlw $6, %k0, %k1 220; KNL-NEXT: kshiftrw $15, %k1, %k1 221; KNL-NEXT: kmovw %k1, %eax 222; KNL-NEXT: vpinsrb $9, %eax, %xmm1, %xmm1 223; KNL-NEXT: kshiftlw $5, %k0, %k1 224; KNL-NEXT: kshiftrw $15, %k1, %k1 225; KNL-NEXT: kmovw %k1, %eax 226; KNL-NEXT: vpinsrb $10, %eax, %xmm1, %xmm1 227; KNL-NEXT: kshiftlw $4, %k0, %k1 228; KNL-NEXT: kshiftrw $15, %k1, %k1 229; KNL-NEXT: kmovw %k1, %eax 230; KNL-NEXT: vpinsrb $11, %eax, %xmm1, %xmm1 231; KNL-NEXT: kshiftlw $3, %k0, %k1 232; KNL-NEXT: kshiftrw $15, %k1, %k1 233; KNL-NEXT: kmovw %k1, %eax 234; KNL-NEXT: vpinsrb $12, %eax, %xmm1, %xmm1 235; KNL-NEXT: kshiftlw $2, %k0, %k1 236; KNL-NEXT: kshiftrw $15, %k1, %k1 237; KNL-NEXT: kmovw %k1, %eax 238; KNL-NEXT: vpinsrb $13, %eax, %xmm1, %xmm1 239; KNL-NEXT: kshiftlw $1, %k0, %k1 240; KNL-NEXT: kshiftrw $15, %k1, %k1 241; KNL-NEXT: kmovw %k1, %eax 242; KNL-NEXT: vpinsrb $14, %eax, %xmm1, %xmm1 243; KNL-NEXT: kshiftrw $15, %k0, %k0 244; KNL-NEXT: kmovw %k0, %eax 245; KNL-NEXT: vpinsrb $15, %eax, %xmm1, %xmm1 246; KNL-NEXT: vpmovsxbd %xmm1, %zmm1 247; KNL-NEXT: vpslld $31, %zmm1, %zmm1 248; KNL-NEXT: vptestmd %zmm1, %zmm1, %k0 249; KNL-NEXT: kmovw %k0, {{[0-9]+}}(%rsp) 250; KNL-NEXT: vpcmpeqd %zmm2, %zmm0, %k0 251; KNL-NEXT: kshiftlw $14, %k0, %k1 252; KNL-NEXT: kshiftrw $15, %k1, %k1 253; KNL-NEXT: kmovw %k1, %eax 254; KNL-NEXT: kshiftlw $15, %k0, %k1 255; KNL-NEXT: kshiftrw $15, %k1, %k1 256; KNL-NEXT: kmovw %k1, %ecx 257; KNL-NEXT: vmovd %ecx, %xmm0 258; KNL-NEXT: vpinsrb $1, %eax, %xmm0, %xmm0 259; KNL-NEXT: kshiftlw $13, %k0, %k1 260; KNL-NEXT: kshiftrw $15, %k1, %k1 261; KNL-NEXT: kmovw %k1, %eax 262; KNL-NEXT: vpinsrb $2, %eax, %xmm0, %xmm0 263; KNL-NEXT: kshiftlw $12, %k0, %k1 264; KNL-NEXT: kshiftrw $15, %k1, %k1 265; KNL-NEXT: kmovw %k1, %eax 266; KNL-NEXT: vpinsrb $3, %eax, %xmm0, %xmm0 267; KNL-NEXT: kshiftlw $11, %k0, %k1 268; KNL-NEXT: kshiftrw $15, %k1, %k1 269; KNL-NEXT: kmovw %k1, %eax 270; KNL-NEXT: vpinsrb $4, %eax, %xmm0, %xmm0 271; KNL-NEXT: kshiftlw $10, %k0, %k1 272; KNL-NEXT: kshiftrw $15, %k1, %k1 273; KNL-NEXT: kmovw %k1, %eax 274; KNL-NEXT: vpinsrb $5, %eax, %xmm0, %xmm0 275; KNL-NEXT: kshiftlw $9, %k0, %k1 276; KNL-NEXT: kshiftrw $15, %k1, %k1 277; KNL-NEXT: kmovw %k1, %eax 278; KNL-NEXT: vpinsrb $6, %eax, %xmm0, %xmm0 279; KNL-NEXT: kshiftlw $8, %k0, %k1 280; KNL-NEXT: kshiftrw $15, %k1, %k1 281; KNL-NEXT: kmovw %k1, %eax 282; KNL-NEXT: vpinsrb $7, %eax, %xmm0, %xmm0 283; KNL-NEXT: kshiftlw $7, %k0, %k1 284; KNL-NEXT: kshiftrw $15, %k1, %k1 285; KNL-NEXT: kmovw %k1, %eax 286; KNL-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0 287; KNL-NEXT: kshiftlw $6, %k0, %k1 288; KNL-NEXT: kshiftrw $15, %k1, %k1 289; KNL-NEXT: kmovw %k1, %eax 290; KNL-NEXT: vpinsrb $9, %eax, %xmm0, %xmm0 291; KNL-NEXT: kshiftlw $5, %k0, %k1 292; KNL-NEXT: kshiftrw $15, %k1, %k1 293; KNL-NEXT: kmovw %k1, %eax 294; KNL-NEXT: vpinsrb $10, %eax, %xmm0, %xmm0 295; KNL-NEXT: kshiftlw $4, %k0, %k1 296; KNL-NEXT: kshiftrw $15, %k1, %k1 297; KNL-NEXT: kmovw %k1, %eax 298; KNL-NEXT: vpinsrb $11, %eax, %xmm0, %xmm0 299; KNL-NEXT: kshiftlw $3, %k0, %k1 300; KNL-NEXT: kshiftrw $15, %k1, %k1 301; KNL-NEXT: kmovw %k1, %eax 302; KNL-NEXT: vpinsrb $12, %eax, %xmm0, %xmm0 303; KNL-NEXT: kshiftlw $2, %k0, %k1 304; KNL-NEXT: kshiftrw $15, %k1, %k1 305; KNL-NEXT: kmovw %k1, %eax 306; KNL-NEXT: vpinsrb $13, %eax, %xmm0, %xmm0 307; KNL-NEXT: kshiftlw $1, %k0, %k1 308; KNL-NEXT: kshiftrw $15, %k1, %k1 309; KNL-NEXT: kmovw %k1, %eax 310; KNL-NEXT: vpinsrb $14, %eax, %xmm0, %xmm0 311; KNL-NEXT: kshiftrw $15, %k0, %k0 312; KNL-NEXT: kmovw %k0, %eax 313; KNL-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0 314; KNL-NEXT: vpmovsxbd %xmm0, %zmm0 315; KNL-NEXT: vpslld $31, %zmm0, %zmm0 316; KNL-NEXT: vptestmd %zmm0, %zmm0, %k0 317; KNL-NEXT: kmovw %k0, (%rsp) 318; KNL-NEXT: movl (%rsp), %eax 319; KNL-NEXT: movq %rbp, %rsp 320; KNL-NEXT: popq %rbp 321; KNL-NEXT: retq 322; 323; SKX-LABEL: test12_v32i32: 324; SKX: ## BB#0: 325; SKX-NEXT: vpcmpeqd %zmm2, %zmm0, %k0 326; SKX-NEXT: vpcmpeqd %zmm3, %zmm1, %k1 327; SKX-NEXT: kunpckwd %k0, %k1, %k0 328; SKX-NEXT: kmovd %k0, %eax 329; SKX-NEXT: retq 330 %res = icmp eq <32 x i32> %a, %b 331 %res1 = bitcast <32 x i1> %res to i32 332 ret i32 %res1 333} 334 335define i64 @test12_v64i16(<64 x i16> %a, <64 x i16> %b) nounwind { 336; KNL-LABEL: test12_v64i16: 337; KNL: ## BB#0: 338; KNL-NEXT: pushq %rbp 339; KNL-NEXT: movq %rsp, %rbp 340; KNL-NEXT: andq $-32, %rsp 341; KNL-NEXT: subq $64, %rsp 342; KNL-NEXT: vpcmpeqw %ymm5, %ymm1, %ymm1 343; KNL-NEXT: vpmovsxwd %ymm1, %zmm1 344; KNL-NEXT: vpslld $31, %zmm1, %zmm1 345; KNL-NEXT: vptestmd %zmm1, %zmm1, %k0 346; KNL-NEXT: kshiftlw $14, %k0, %k1 347; KNL-NEXT: kshiftrw $15, %k1, %k1 348; KNL-NEXT: kmovw %k1, %eax 349; KNL-NEXT: kshiftlw $15, %k0, %k1 350; KNL-NEXT: kshiftrw $15, %k1, %k1 351; KNL-NEXT: kmovw %k1, %ecx 352; KNL-NEXT: vmovd %ecx, %xmm1 353; KNL-NEXT: vpinsrb $1, %eax, %xmm1, %xmm1 354; KNL-NEXT: kshiftlw $13, %k0, %k1 355; KNL-NEXT: kshiftrw $15, %k1, %k1 356; KNL-NEXT: kmovw %k1, %eax 357; KNL-NEXT: vpinsrb $2, %eax, %xmm1, %xmm1 358; KNL-NEXT: kshiftlw $12, %k0, %k1 359; KNL-NEXT: kshiftrw $15, %k1, %k1 360; KNL-NEXT: kmovw %k1, %eax 361; KNL-NEXT: vpinsrb $3, %eax, %xmm1, %xmm1 362; KNL-NEXT: kshiftlw $11, %k0, %k1 363; KNL-NEXT: kshiftrw $15, %k1, %k1 364; KNL-NEXT: kmovw %k1, %eax 365; KNL-NEXT: vpinsrb $4, %eax, %xmm1, %xmm1 366; KNL-NEXT: kshiftlw $10, %k0, %k1 367; KNL-NEXT: kshiftrw $15, %k1, %k1 368; KNL-NEXT: kmovw %k1, %eax 369; KNL-NEXT: vpinsrb $5, %eax, %xmm1, %xmm1 370; KNL-NEXT: kshiftlw $9, %k0, %k1 371; KNL-NEXT: kshiftrw $15, %k1, %k1 372; KNL-NEXT: kmovw %k1, %eax 373; KNL-NEXT: vpinsrb $6, %eax, %xmm1, %xmm1 374; KNL-NEXT: kshiftlw $8, %k0, %k1 375; KNL-NEXT: kshiftrw $15, %k1, %k1 376; KNL-NEXT: kmovw %k1, %eax 377; KNL-NEXT: vpinsrb $7, %eax, %xmm1, %xmm1 378; KNL-NEXT: kshiftlw $7, %k0, %k1 379; KNL-NEXT: kshiftrw $15, %k1, %k1 380; KNL-NEXT: kmovw %k1, %eax 381; KNL-NEXT: vpinsrb $8, %eax, %xmm1, %xmm1 382; KNL-NEXT: kshiftlw $6, %k0, %k1 383; KNL-NEXT: kshiftrw $15, %k1, %k1 384; KNL-NEXT: kmovw %k1, %eax 385; KNL-NEXT: vpinsrb $9, %eax, %xmm1, %xmm1 386; KNL-NEXT: kshiftlw $5, %k0, %k1 387; KNL-NEXT: kshiftrw $15, %k1, %k1 388; KNL-NEXT: kmovw %k1, %eax 389; KNL-NEXT: vpinsrb $10, %eax, %xmm1, %xmm1 390; KNL-NEXT: kshiftlw $4, %k0, %k1 391; KNL-NEXT: kshiftrw $15, %k1, %k1 392; KNL-NEXT: kmovw %k1, %eax 393; KNL-NEXT: vpinsrb $11, %eax, %xmm1, %xmm1 394; KNL-NEXT: kshiftlw $3, %k0, %k1 395; KNL-NEXT: kshiftrw $15, %k1, %k1 396; KNL-NEXT: kmovw %k1, %eax 397; KNL-NEXT: vpinsrb $12, %eax, %xmm1, %xmm1 398; KNL-NEXT: kshiftlw $2, %k0, %k1 399; KNL-NEXT: kshiftrw $15, %k1, %k1 400; KNL-NEXT: kmovw %k1, %eax 401; KNL-NEXT: vpinsrb $13, %eax, %xmm1, %xmm1 402; KNL-NEXT: kshiftlw $1, %k0, %k1 403; KNL-NEXT: kshiftrw $15, %k1, %k1 404; KNL-NEXT: kmovw %k1, %eax 405; KNL-NEXT: vpinsrb $14, %eax, %xmm1, %xmm1 406; KNL-NEXT: kshiftrw $15, %k0, %k0 407; KNL-NEXT: kmovw %k0, %eax 408; KNL-NEXT: vpinsrb $15, %eax, %xmm1, %xmm1 409; KNL-NEXT: vpmovsxbd %xmm1, %zmm1 410; KNL-NEXT: vpslld $31, %zmm1, %zmm1 411; KNL-NEXT: vptestmd %zmm1, %zmm1, %k0 412; KNL-NEXT: kmovw %k0, {{[0-9]+}}(%rsp) 413; KNL-NEXT: vpcmpeqw %ymm4, %ymm0, %ymm0 414; KNL-NEXT: vpmovsxwd %ymm0, %zmm0 415; KNL-NEXT: vpslld $31, %zmm0, %zmm0 416; KNL-NEXT: vptestmd %zmm0, %zmm0, %k0 417; KNL-NEXT: kshiftlw $14, %k0, %k1 418; KNL-NEXT: kshiftrw $15, %k1, %k1 419; KNL-NEXT: kmovw %k1, %eax 420; KNL-NEXT: kshiftlw $15, %k0, %k1 421; KNL-NEXT: kshiftrw $15, %k1, %k1 422; KNL-NEXT: kmovw %k1, %ecx 423; KNL-NEXT: vmovd %ecx, %xmm0 424; KNL-NEXT: vpinsrb $1, %eax, %xmm0, %xmm0 425; KNL-NEXT: kshiftlw $13, %k0, %k1 426; KNL-NEXT: kshiftrw $15, %k1, %k1 427; KNL-NEXT: kmovw %k1, %eax 428; KNL-NEXT: vpinsrb $2, %eax, %xmm0, %xmm0 429; KNL-NEXT: kshiftlw $12, %k0, %k1 430; KNL-NEXT: kshiftrw $15, %k1, %k1 431; KNL-NEXT: kmovw %k1, %eax 432; KNL-NEXT: vpinsrb $3, %eax, %xmm0, %xmm0 433; KNL-NEXT: kshiftlw $11, %k0, %k1 434; KNL-NEXT: kshiftrw $15, %k1, %k1 435; KNL-NEXT: kmovw %k1, %eax 436; KNL-NEXT: vpinsrb $4, %eax, %xmm0, %xmm0 437; KNL-NEXT: kshiftlw $10, %k0, %k1 438; KNL-NEXT: kshiftrw $15, %k1, %k1 439; KNL-NEXT: kmovw %k1, %eax 440; KNL-NEXT: vpinsrb $5, %eax, %xmm0, %xmm0 441; KNL-NEXT: kshiftlw $9, %k0, %k1 442; KNL-NEXT: kshiftrw $15, %k1, %k1 443; KNL-NEXT: kmovw %k1, %eax 444; KNL-NEXT: vpinsrb $6, %eax, %xmm0, %xmm0 445; KNL-NEXT: kshiftlw $8, %k0, %k1 446; KNL-NEXT: kshiftrw $15, %k1, %k1 447; KNL-NEXT: kmovw %k1, %eax 448; KNL-NEXT: vpinsrb $7, %eax, %xmm0, %xmm0 449; KNL-NEXT: kshiftlw $7, %k0, %k1 450; KNL-NEXT: kshiftrw $15, %k1, %k1 451; KNL-NEXT: kmovw %k1, %eax 452; KNL-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0 453; KNL-NEXT: kshiftlw $6, %k0, %k1 454; KNL-NEXT: kshiftrw $15, %k1, %k1 455; KNL-NEXT: kmovw %k1, %eax 456; KNL-NEXT: vpinsrb $9, %eax, %xmm0, %xmm0 457; KNL-NEXT: kshiftlw $5, %k0, %k1 458; KNL-NEXT: kshiftrw $15, %k1, %k1 459; KNL-NEXT: kmovw %k1, %eax 460; KNL-NEXT: vpinsrb $10, %eax, %xmm0, %xmm0 461; KNL-NEXT: kshiftlw $4, %k0, %k1 462; KNL-NEXT: kshiftrw $15, %k1, %k1 463; KNL-NEXT: kmovw %k1, %eax 464; KNL-NEXT: vpinsrb $11, %eax, %xmm0, %xmm0 465; KNL-NEXT: kshiftlw $3, %k0, %k1 466; KNL-NEXT: kshiftrw $15, %k1, %k1 467; KNL-NEXT: kmovw %k1, %eax 468; KNL-NEXT: vpinsrb $12, %eax, %xmm0, %xmm0 469; KNL-NEXT: kshiftlw $2, %k0, %k1 470; KNL-NEXT: kshiftrw $15, %k1, %k1 471; KNL-NEXT: kmovw %k1, %eax 472; KNL-NEXT: vpinsrb $13, %eax, %xmm0, %xmm0 473; KNL-NEXT: kshiftlw $1, %k0, %k1 474; KNL-NEXT: kshiftrw $15, %k1, %k1 475; KNL-NEXT: kmovw %k1, %eax 476; KNL-NEXT: vpinsrb $14, %eax, %xmm0, %xmm0 477; KNL-NEXT: kshiftrw $15, %k0, %k0 478; KNL-NEXT: kmovw %k0, %eax 479; KNL-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0 480; KNL-NEXT: vpmovsxbd %xmm0, %zmm0 481; KNL-NEXT: vpslld $31, %zmm0, %zmm0 482; KNL-NEXT: vptestmd %zmm0, %zmm0, %k0 483; KNL-NEXT: kmovw %k0, (%rsp) 484; KNL-NEXT: vpcmpeqw %ymm7, %ymm3, %ymm0 485; KNL-NEXT: vpmovsxwd %ymm0, %zmm0 486; KNL-NEXT: vpslld $31, %zmm0, %zmm0 487; KNL-NEXT: vptestmd %zmm0, %zmm0, %k0 488; KNL-NEXT: kshiftlw $14, %k0, %k1 489; KNL-NEXT: kshiftrw $15, %k1, %k1 490; KNL-NEXT: kmovw %k1, %eax 491; KNL-NEXT: kshiftlw $15, %k0, %k1 492; KNL-NEXT: kshiftrw $15, %k1, %k1 493; KNL-NEXT: kmovw %k1, %ecx 494; KNL-NEXT: vmovd %ecx, %xmm0 495; KNL-NEXT: vpinsrb $1, %eax, %xmm0, %xmm0 496; KNL-NEXT: kshiftlw $13, %k0, %k1 497; KNL-NEXT: kshiftrw $15, %k1, %k1 498; KNL-NEXT: kmovw %k1, %eax 499; KNL-NEXT: vpinsrb $2, %eax, %xmm0, %xmm0 500; KNL-NEXT: kshiftlw $12, %k0, %k1 501; KNL-NEXT: kshiftrw $15, %k1, %k1 502; KNL-NEXT: kmovw %k1, %eax 503; KNL-NEXT: vpinsrb $3, %eax, %xmm0, %xmm0 504; KNL-NEXT: kshiftlw $11, %k0, %k1 505; KNL-NEXT: kshiftrw $15, %k1, %k1 506; KNL-NEXT: kmovw %k1, %eax 507; KNL-NEXT: vpinsrb $4, %eax, %xmm0, %xmm0 508; KNL-NEXT: kshiftlw $10, %k0, %k1 509; KNL-NEXT: kshiftrw $15, %k1, %k1 510; KNL-NEXT: kmovw %k1, %eax 511; KNL-NEXT: vpinsrb $5, %eax, %xmm0, %xmm0 512; KNL-NEXT: kshiftlw $9, %k0, %k1 513; KNL-NEXT: kshiftrw $15, %k1, %k1 514; KNL-NEXT: kmovw %k1, %eax 515; KNL-NEXT: vpinsrb $6, %eax, %xmm0, %xmm0 516; KNL-NEXT: kshiftlw $8, %k0, %k1 517; KNL-NEXT: kshiftrw $15, %k1, %k1 518; KNL-NEXT: kmovw %k1, %eax 519; KNL-NEXT: vpinsrb $7, %eax, %xmm0, %xmm0 520; KNL-NEXT: kshiftlw $7, %k0, %k1 521; KNL-NEXT: kshiftrw $15, %k1, %k1 522; KNL-NEXT: kmovw %k1, %eax 523; KNL-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0 524; KNL-NEXT: kshiftlw $6, %k0, %k1 525; KNL-NEXT: kshiftrw $15, %k1, %k1 526; KNL-NEXT: kmovw %k1, %eax 527; KNL-NEXT: vpinsrb $9, %eax, %xmm0, %xmm0 528; KNL-NEXT: kshiftlw $5, %k0, %k1 529; KNL-NEXT: kshiftrw $15, %k1, %k1 530; KNL-NEXT: kmovw %k1, %eax 531; KNL-NEXT: vpinsrb $10, %eax, %xmm0, %xmm0 532; KNL-NEXT: kshiftlw $4, %k0, %k1 533; KNL-NEXT: kshiftrw $15, %k1, %k1 534; KNL-NEXT: kmovw %k1, %eax 535; KNL-NEXT: vpinsrb $11, %eax, %xmm0, %xmm0 536; KNL-NEXT: kshiftlw $3, %k0, %k1 537; KNL-NEXT: kshiftrw $15, %k1, %k1 538; KNL-NEXT: kmovw %k1, %eax 539; KNL-NEXT: vpinsrb $12, %eax, %xmm0, %xmm0 540; KNL-NEXT: kshiftlw $2, %k0, %k1 541; KNL-NEXT: kshiftrw $15, %k1, %k1 542; KNL-NEXT: kmovw %k1, %eax 543; KNL-NEXT: vpinsrb $13, %eax, %xmm0, %xmm0 544; KNL-NEXT: kshiftlw $1, %k0, %k1 545; KNL-NEXT: kshiftrw $15, %k1, %k1 546; KNL-NEXT: kmovw %k1, %eax 547; KNL-NEXT: vpinsrb $14, %eax, %xmm0, %xmm0 548; KNL-NEXT: kshiftrw $15, %k0, %k0 549; KNL-NEXT: kmovw %k0, %eax 550; KNL-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0 551; KNL-NEXT: vpmovsxbd %xmm0, %zmm0 552; KNL-NEXT: vpslld $31, %zmm0, %zmm0 553; KNL-NEXT: vptestmd %zmm0, %zmm0, %k0 554; KNL-NEXT: kmovw %k0, {{[0-9]+}}(%rsp) 555; KNL-NEXT: vpcmpeqw %ymm6, %ymm2, %ymm0 556; KNL-NEXT: vpmovsxwd %ymm0, %zmm0 557; KNL-NEXT: vpslld $31, %zmm0, %zmm0 558; KNL-NEXT: vptestmd %zmm0, %zmm0, %k0 559; KNL-NEXT: kshiftlw $14, %k0, %k1 560; KNL-NEXT: kshiftrw $15, %k1, %k1 561; KNL-NEXT: kmovw %k1, %eax 562; KNL-NEXT: kshiftlw $15, %k0, %k1 563; KNL-NEXT: kshiftrw $15, %k1, %k1 564; KNL-NEXT: kmovw %k1, %ecx 565; KNL-NEXT: vmovd %ecx, %xmm0 566; KNL-NEXT: vpinsrb $1, %eax, %xmm0, %xmm0 567; KNL-NEXT: kshiftlw $13, %k0, %k1 568; KNL-NEXT: kshiftrw $15, %k1, %k1 569; KNL-NEXT: kmovw %k1, %eax 570; KNL-NEXT: vpinsrb $2, %eax, %xmm0, %xmm0 571; KNL-NEXT: kshiftlw $12, %k0, %k1 572; KNL-NEXT: kshiftrw $15, %k1, %k1 573; KNL-NEXT: kmovw %k1, %eax 574; KNL-NEXT: vpinsrb $3, %eax, %xmm0, %xmm0 575; KNL-NEXT: kshiftlw $11, %k0, %k1 576; KNL-NEXT: kshiftrw $15, %k1, %k1 577; KNL-NEXT: kmovw %k1, %eax 578; KNL-NEXT: vpinsrb $4, %eax, %xmm0, %xmm0 579; KNL-NEXT: kshiftlw $10, %k0, %k1 580; KNL-NEXT: kshiftrw $15, %k1, %k1 581; KNL-NEXT: kmovw %k1, %eax 582; KNL-NEXT: vpinsrb $5, %eax, %xmm0, %xmm0 583; KNL-NEXT: kshiftlw $9, %k0, %k1 584; KNL-NEXT: kshiftrw $15, %k1, %k1 585; KNL-NEXT: kmovw %k1, %eax 586; KNL-NEXT: vpinsrb $6, %eax, %xmm0, %xmm0 587; KNL-NEXT: kshiftlw $8, %k0, %k1 588; KNL-NEXT: kshiftrw $15, %k1, %k1 589; KNL-NEXT: kmovw %k1, %eax 590; KNL-NEXT: vpinsrb $7, %eax, %xmm0, %xmm0 591; KNL-NEXT: kshiftlw $7, %k0, %k1 592; KNL-NEXT: kshiftrw $15, %k1, %k1 593; KNL-NEXT: kmovw %k1, %eax 594; KNL-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0 595; KNL-NEXT: kshiftlw $6, %k0, %k1 596; KNL-NEXT: kshiftrw $15, %k1, %k1 597; KNL-NEXT: kmovw %k1, %eax 598; KNL-NEXT: vpinsrb $9, %eax, %xmm0, %xmm0 599; KNL-NEXT: kshiftlw $5, %k0, %k1 600; KNL-NEXT: kshiftrw $15, %k1, %k1 601; KNL-NEXT: kmovw %k1, %eax 602; KNL-NEXT: vpinsrb $10, %eax, %xmm0, %xmm0 603; KNL-NEXT: kshiftlw $4, %k0, %k1 604; KNL-NEXT: kshiftrw $15, %k1, %k1 605; KNL-NEXT: kmovw %k1, %eax 606; KNL-NEXT: vpinsrb $11, %eax, %xmm0, %xmm0 607; KNL-NEXT: kshiftlw $3, %k0, %k1 608; KNL-NEXT: kshiftrw $15, %k1, %k1 609; KNL-NEXT: kmovw %k1, %eax 610; KNL-NEXT: vpinsrb $12, %eax, %xmm0, %xmm0 611; KNL-NEXT: kshiftlw $2, %k0, %k1 612; KNL-NEXT: kshiftrw $15, %k1, %k1 613; KNL-NEXT: kmovw %k1, %eax 614; KNL-NEXT: vpinsrb $13, %eax, %xmm0, %xmm0 615; KNL-NEXT: kshiftlw $1, %k0, %k1 616; KNL-NEXT: kshiftrw $15, %k1, %k1 617; KNL-NEXT: kmovw %k1, %eax 618; KNL-NEXT: vpinsrb $14, %eax, %xmm0, %xmm0 619; KNL-NEXT: kshiftrw $15, %k0, %k0 620; KNL-NEXT: kmovw %k0, %eax 621; KNL-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0 622; KNL-NEXT: vpmovsxbd %xmm0, %zmm0 623; KNL-NEXT: vpslld $31, %zmm0, %zmm0 624; KNL-NEXT: vptestmd %zmm0, %zmm0, %k0 625; KNL-NEXT: kmovw %k0, {{[0-9]+}}(%rsp) 626; KNL-NEXT: movl (%rsp), %ecx 627; KNL-NEXT: movl {{[0-9]+}}(%rsp), %eax 628; KNL-NEXT: shlq $32, %rax 629; KNL-NEXT: orq %rcx, %rax 630; KNL-NEXT: movq %rbp, %rsp 631; KNL-NEXT: popq %rbp 632; KNL-NEXT: retq 633; 634; SKX-LABEL: test12_v64i16: 635; SKX: ## BB#0: 636; SKX-NEXT: vpcmpeqw %zmm2, %zmm0, %k0 637; SKX-NEXT: vpcmpeqw %zmm3, %zmm1, %k1 638; SKX-NEXT: kunpckdq %k0, %k1, %k0 639; SKX-NEXT: kmovq %k0, %rax 640; SKX-NEXT: retq 641 %res = icmp eq <64 x i16> %a, %b 642 %res1 = bitcast <64 x i1> %res to i64 643 ret i64 %res1 644} 645 646define <16 x i32> @test13(<16 x float>%a, <16 x float>%b) 647; CHECK-LABEL: test13: 648; CHECK: ## BB#0: 649; CHECK-NEXT: vcmpeqps %zmm1, %zmm0, %k1 650; CHECK-NEXT: vpbroadcastd {{.*}}(%rip), %zmm0 {%k1} {z} 651; CHECK-NEXT: retq 652{ 653 %cmpvector_i = fcmp oeq <16 x float> %a, %b 654 %conv = zext <16 x i1> %cmpvector_i to <16 x i32> 655 ret <16 x i32> %conv 656} 657 658define <16 x i32> @test14(<16 x i32>%a, <16 x i32>%b) { 659; CHECK-LABEL: test14: 660; CHECK: ## BB#0: 661; CHECK-NEXT: vpsubd %zmm1, %zmm0, %zmm1 662; CHECK-NEXT: vpcmpled %zmm0, %zmm1, %k0 663; CHECK-NEXT: knotw %k0, %k1 664; CHECK-NEXT: vmovdqa32 %zmm1, %zmm0 {%k1} {z} 665; CHECK-NEXT: retq 666 %sub_r = sub <16 x i32> %a, %b 667 %cmp.i2.i = icmp sgt <16 x i32> %sub_r, %a 668 %sext.i3.i = sext <16 x i1> %cmp.i2.i to <16 x i32> 669 %mask = icmp eq <16 x i32> %sext.i3.i, zeroinitializer 670 %res = select <16 x i1> %mask, <16 x i32> zeroinitializer, <16 x i32> %sub_r 671 ret <16 x i32>%res 672} 673 674define <8 x i64> @test15(<8 x i64>%a, <8 x i64>%b) { 675; CHECK-LABEL: test15: 676; CHECK: ## BB#0: 677; CHECK-NEXT: vpsubq %zmm1, %zmm0, %zmm1 678; CHECK-NEXT: vpcmpleq %zmm0, %zmm1, %k0 679; CHECK-NEXT: knotw %k0, %k1 680; CHECK-NEXT: vmovdqa64 %zmm1, %zmm0 {%k1} {z} 681; CHECK-NEXT: retq 682 %sub_r = sub <8 x i64> %a, %b 683 %cmp.i2.i = icmp sgt <8 x i64> %sub_r, %a 684 %sext.i3.i = sext <8 x i1> %cmp.i2.i to <8 x i64> 685 %mask = icmp eq <8 x i64> %sext.i3.i, zeroinitializer 686 %res = select <8 x i1> %mask, <8 x i64> zeroinitializer, <8 x i64> %sub_r 687 ret <8 x i64>%res 688} 689 690define <16 x i32> @test16(<16 x i32> %x, <16 x i32> %y, <16 x i32> %x1) nounwind { 691; CHECK-LABEL: test16: 692; CHECK: ## BB#0: 693; CHECK-NEXT: vpcmpled %zmm0, %zmm1, %k1 694; CHECK-NEXT: vpblendmd %zmm2, %zmm1, %zmm0 {%k1} 695; CHECK-NEXT: retq 696 %mask = icmp sge <16 x i32> %x, %y 697 %max = select <16 x i1> %mask, <16 x i32> %x1, <16 x i32> %y 698 ret <16 x i32> %max 699} 700 701define <16 x i32> @test17(<16 x i32> %x, <16 x i32> %x1, <16 x i32>* %y.ptr) nounwind { 702; CHECK-LABEL: test17: 703; CHECK: ## BB#0: 704; CHECK-NEXT: vpcmpgtd (%rdi), %zmm0, %k1 705; CHECK-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 706; CHECK-NEXT: retq 707 %y = load <16 x i32>, <16 x i32>* %y.ptr, align 4 708 %mask = icmp sgt <16 x i32> %x, %y 709 %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1 710 ret <16 x i32> %max 711} 712 713define <16 x i32> @test18(<16 x i32> %x, <16 x i32> %x1, <16 x i32>* %y.ptr) nounwind { 714; CHECK-LABEL: test18: 715; CHECK: ## BB#0: 716; CHECK-NEXT: vpcmpled (%rdi), %zmm0, %k1 717; CHECK-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 718; CHECK-NEXT: retq 719 %y = load <16 x i32>, <16 x i32>* %y.ptr, align 4 720 %mask = icmp sle <16 x i32> %x, %y 721 %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1 722 ret <16 x i32> %max 723} 724 725define <16 x i32> @test19(<16 x i32> %x, <16 x i32> %x1, <16 x i32>* %y.ptr) nounwind { 726; CHECK-LABEL: test19: 727; CHECK: ## BB#0: 728; CHECK-NEXT: vpcmpleud (%rdi), %zmm0, %k1 729; CHECK-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 730; CHECK-NEXT: retq 731 %y = load <16 x i32>, <16 x i32>* %y.ptr, align 4 732 %mask = icmp ule <16 x i32> %x, %y 733 %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1 734 ret <16 x i32> %max 735} 736 737define <16 x i32> @test20(<16 x i32> %x, <16 x i32> %y, <16 x i32> %x1, <16 x i32> %y1) nounwind { 738; CHECK-LABEL: test20: 739; CHECK: ## BB#0: 740; CHECK-NEXT: vpcmpeqd %zmm1, %zmm0, %k1 741; CHECK-NEXT: vpcmpeqd %zmm3, %zmm2, %k1 {%k1} 742; CHECK-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 743; CHECK-NEXT: retq 744 %mask1 = icmp eq <16 x i32> %x1, %y1 745 %mask0 = icmp eq <16 x i32> %x, %y 746 %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer 747 %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %y 748 ret <16 x i32> %max 749} 750 751define <8 x i64> @test21(<8 x i64> %x, <8 x i64> %y, <8 x i64> %x1, <8 x i64> %y1) nounwind { 752; CHECK-LABEL: test21: 753; CHECK: ## BB#0: 754; CHECK-NEXT: vpcmpleq %zmm1, %zmm0, %k1 755; CHECK-NEXT: vpcmpleq %zmm2, %zmm3, %k1 {%k1} 756; CHECK-NEXT: vpblendmq %zmm0, %zmm2, %zmm0 {%k1} 757; CHECK-NEXT: retq 758 %mask1 = icmp sge <8 x i64> %x1, %y1 759 %mask0 = icmp sle <8 x i64> %x, %y 760 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer 761 %max = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> %x1 762 ret <8 x i64> %max 763} 764 765define <8 x i64> @test22(<8 x i64> %x, <8 x i64>* %y.ptr, <8 x i64> %x1, <8 x i64> %y1) nounwind { 766; CHECK-LABEL: test22: 767; CHECK: ## BB#0: 768; CHECK-NEXT: vpcmpgtq %zmm2, %zmm1, %k1 769; CHECK-NEXT: vpcmpgtq (%rdi), %zmm0, %k1 {%k1} 770; CHECK-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 771; CHECK-NEXT: retq 772 %mask1 = icmp sgt <8 x i64> %x1, %y1 773 %y = load <8 x i64>, <8 x i64>* %y.ptr, align 4 774 %mask0 = icmp sgt <8 x i64> %x, %y 775 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer 776 %max = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> %x1 777 ret <8 x i64> %max 778} 779 780define <16 x i32> @test23(<16 x i32> %x, <16 x i32>* %y.ptr, <16 x i32> %x1, <16 x i32> %y1) nounwind { 781; CHECK-LABEL: test23: 782; CHECK: ## BB#0: 783; CHECK-NEXT: vpcmpled %zmm1, %zmm2, %k1 784; CHECK-NEXT: vpcmpleud (%rdi), %zmm0, %k1 {%k1} 785; CHECK-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 786; CHECK-NEXT: retq 787 %mask1 = icmp sge <16 x i32> %x1, %y1 788 %y = load <16 x i32>, <16 x i32>* %y.ptr, align 4 789 %mask0 = icmp ule <16 x i32> %x, %y 790 %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer 791 %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1 792 ret <16 x i32> %max 793} 794 795define <8 x i64> @test24(<8 x i64> %x, <8 x i64> %x1, i64* %yb.ptr) nounwind { 796; CHECK-LABEL: test24: 797; CHECK: ## BB#0: 798; CHECK-NEXT: vpcmpeqq (%rdi){1to8}, %zmm0, %k1 799; CHECK-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 800; CHECK-NEXT: retq 801 %yb = load i64, i64* %yb.ptr, align 4 802 %y.0 = insertelement <8 x i64> undef, i64 %yb, i32 0 803 %y = shufflevector <8 x i64> %y.0, <8 x i64> undef, <8 x i32> zeroinitializer 804 %mask = icmp eq <8 x i64> %x, %y 805 %max = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> %x1 806 ret <8 x i64> %max 807} 808 809define <16 x i32> @test25(<16 x i32> %x, i32* %yb.ptr, <16 x i32> %x1) nounwind { 810; CHECK-LABEL: test25: 811; CHECK: ## BB#0: 812; CHECK-NEXT: vpcmpled (%rdi){1to16}, %zmm0, %k1 813; CHECK-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 814; CHECK-NEXT: retq 815 %yb = load i32, i32* %yb.ptr, align 4 816 %y.0 = insertelement <16 x i32> undef, i32 %yb, i32 0 817 %y = shufflevector <16 x i32> %y.0, <16 x i32> undef, <16 x i32> zeroinitializer 818 %mask = icmp sle <16 x i32> %x, %y 819 %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1 820 ret <16 x i32> %max 821} 822 823define <16 x i32> @test26(<16 x i32> %x, i32* %yb.ptr, <16 x i32> %x1, <16 x i32> %y1) nounwind { 824; CHECK-LABEL: test26: 825; CHECK: ## BB#0: 826; CHECK-NEXT: vpcmpled %zmm1, %zmm2, %k1 827; CHECK-NEXT: vpcmpgtd (%rdi){1to16}, %zmm0, %k1 {%k1} 828; CHECK-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 829; CHECK-NEXT: retq 830 %mask1 = icmp sge <16 x i32> %x1, %y1 831 %yb = load i32, i32* %yb.ptr, align 4 832 %y.0 = insertelement <16 x i32> undef, i32 %yb, i32 0 833 %y = shufflevector <16 x i32> %y.0, <16 x i32> undef, <16 x i32> zeroinitializer 834 %mask0 = icmp sgt <16 x i32> %x, %y 835 %mask = select <16 x i1> %mask0, <16 x i1> %mask1, <16 x i1> zeroinitializer 836 %max = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> %x1 837 ret <16 x i32> %max 838} 839 840define <8 x i64> @test27(<8 x i64> %x, i64* %yb.ptr, <8 x i64> %x1, <8 x i64> %y1) nounwind { 841; CHECK-LABEL: test27: 842; CHECK: ## BB#0: 843; CHECK-NEXT: vpcmpleq %zmm1, %zmm2, %k1 844; CHECK-NEXT: vpcmpleq (%rdi){1to8}, %zmm0, %k1 {%k1} 845; CHECK-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 846; CHECK-NEXT: retq 847 %mask1 = icmp sge <8 x i64> %x1, %y1 848 %yb = load i64, i64* %yb.ptr, align 4 849 %y.0 = insertelement <8 x i64> undef, i64 %yb, i32 0 850 %y = shufflevector <8 x i64> %y.0, <8 x i64> undef, <8 x i32> zeroinitializer 851 %mask0 = icmp sle <8 x i64> %x, %y 852 %mask = select <8 x i1> %mask0, <8 x i1> %mask1, <8 x i1> zeroinitializer 853 %max = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> %x1 854 ret <8 x i64> %max 855} 856 857define <8 x i32>@test28(<8 x i64> %x, <8 x i64> %y, <8 x i64> %x1, <8 x i64> %y1) { 858; KNL-LABEL: test28: 859; KNL: ## BB#0: 860; KNL-NEXT: vpcmpgtq %zmm1, %zmm0, %k0 861; KNL-NEXT: vpcmpgtq %zmm3, %zmm2, %k1 862; KNL-NEXT: kxnorw %k1, %k0, %k1 863; KNL-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 864; KNL-NEXT: vmovdqa64 %zmm0, %zmm0 {%k1} {z} 865; KNL-NEXT: vpmovqd %zmm0, %ymm0 866; KNL-NEXT: retq 867; 868; SKX-LABEL: test28: 869; SKX: ## BB#0: 870; SKX-NEXT: vpcmpgtq %zmm1, %zmm0, %k0 871; SKX-NEXT: vpcmpgtq %zmm3, %zmm2, %k1 872; SKX-NEXT: kxnorb %k1, %k0, %k0 873; SKX-NEXT: vpmovm2d %k0, %ymm0 874; SKX-NEXT: retq 875 %x_gt_y = icmp sgt <8 x i64> %x, %y 876 %x1_gt_y1 = icmp sgt <8 x i64> %x1, %y1 877 %res = icmp eq <8 x i1>%x_gt_y, %x1_gt_y1 878 %resse = sext <8 x i1>%res to <8 x i32> 879 ret <8 x i32> %resse 880} 881 882define <16 x i8>@test29(<16 x i32> %x, <16 x i32> %y, <16 x i32> %x1, <16 x i32> %y1) { 883; KNL-LABEL: test29: 884; KNL: ## BB#0: 885; KNL-NEXT: vpcmpgtd %zmm1, %zmm0, %k0 886; KNL-NEXT: vpcmpgtd %zmm3, %zmm2, %k1 887; KNL-NEXT: kxorw %k1, %k0, %k1 888; KNL-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 889; KNL-NEXT: vmovdqa32 %zmm0, %zmm0 {%k1} {z} 890; KNL-NEXT: vpmovdb %zmm0, %xmm0 891; KNL-NEXT: retq 892; 893; SKX-LABEL: test29: 894; SKX: ## BB#0: 895; SKX-NEXT: vpcmpgtd %zmm1, %zmm0, %k0 896; SKX-NEXT: vpcmpgtd %zmm3, %zmm2, %k1 897; SKX-NEXT: kxorw %k1, %k0, %k0 898; SKX-NEXT: vpmovm2b %k0, %xmm0 899; SKX-NEXT: retq 900 %x_gt_y = icmp sgt <16 x i32> %x, %y 901 %x1_gt_y1 = icmp sgt <16 x i32> %x1, %y1 902 %res = icmp ne <16 x i1>%x_gt_y, %x1_gt_y1 903 %resse = sext <16 x i1>%res to <16 x i8> 904 ret <16 x i8> %resse 905} 906 907define <4 x double> @test30(<4 x double> %x, <4 x double> %y) nounwind { 908; KNL-LABEL: test30: 909; KNL: ## BB#0: 910; KNL-NEXT: vcmpeqpd %ymm1, %ymm0, %ymm2 911; KNL-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 912; KNL-NEXT: retq 913; 914; SKX-LABEL: test30: 915; SKX: ## BB#0: 916; SKX-NEXT: vcmpeqpd %ymm1, %ymm0, %k1 917; SKX-NEXT: vblendmpd %ymm0, %ymm1, %ymm0 {%k1} 918; SKX-NEXT: retq 919 920 %mask = fcmp oeq <4 x double> %x, %y 921 %max = select <4 x i1> %mask, <4 x double> %x, <4 x double> %y 922 ret <4 x double> %max 923} 924 925define <2 x double> @test31(<2 x double> %x, <2 x double> %x1, <2 x double>* %yp) nounwind { 926; KNL-LABEL: test31: 927; KNL: ## BB#0: 928; KNL-NEXT: vcmpltpd (%rdi), %xmm0, %xmm2 929; KNL-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 930; KNL-NEXT: retq 931; 932; SKX-LABEL: test31: 933; SKX: ## BB#0: 934; SKX-NEXT: vcmpltpd (%rdi), %xmm0, %k1 935; SKX-NEXT: vblendmpd %xmm0, %xmm1, %xmm0 {%k1} 936; SKX-NEXT: retq 937 938 %y = load <2 x double>, <2 x double>* %yp, align 4 939 %mask = fcmp olt <2 x double> %x, %y 940 %max = select <2 x i1> %mask, <2 x double> %x, <2 x double> %x1 941 ret <2 x double> %max 942} 943 944define <4 x double> @test32(<4 x double> %x, <4 x double> %x1, <4 x double>* %yp) nounwind { 945; KNL-LABEL: test32: 946; KNL: ## BB#0: 947; KNL-NEXT: vcmpltpd (%rdi), %ymm0, %ymm2 948; KNL-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 949; KNL-NEXT: retq 950; 951; SKX-LABEL: test32: 952; SKX: ## BB#0: 953; SKX-NEXT: vcmpltpd (%rdi), %ymm0, %k1 954; SKX-NEXT: vblendmpd %ymm0, %ymm1, %ymm0 {%k1} 955; SKX-NEXT: retq 956 957 %y = load <4 x double>, <4 x double>* %yp, align 4 958 %mask = fcmp ogt <4 x double> %y, %x 959 %max = select <4 x i1> %mask, <4 x double> %x, <4 x double> %x1 960 ret <4 x double> %max 961} 962 963define <8 x double> @test33(<8 x double> %x, <8 x double> %x1, <8 x double>* %yp) nounwind { 964; CHECK-LABEL: test33: 965; CHECK: ## BB#0: 966; CHECK-NEXT: vcmpltpd (%rdi), %zmm0, %k1 967; CHECK-NEXT: vblendmpd %zmm0, %zmm1, %zmm0 {%k1} 968; CHECK-NEXT: retq 969 %y = load <8 x double>, <8 x double>* %yp, align 4 970 %mask = fcmp olt <8 x double> %x, %y 971 %max = select <8 x i1> %mask, <8 x double> %x, <8 x double> %x1 972 ret <8 x double> %max 973} 974 975define <4 x float> @test34(<4 x float> %x, <4 x float> %x1, <4 x float>* %yp) nounwind { 976; KNL-LABEL: test34: 977; KNL: ## BB#0: 978; KNL-NEXT: vcmpltps (%rdi), %xmm0, %xmm2 979; KNL-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0 980; KNL-NEXT: retq 981; 982; SKX-LABEL: test34: 983; SKX: ## BB#0: 984; SKX-NEXT: vcmpltps (%rdi), %xmm0, %k1 985; SKX-NEXT: vblendmps %xmm0, %xmm1, %xmm0 {%k1} 986; SKX-NEXT: retq 987 %y = load <4 x float>, <4 x float>* %yp, align 4 988 %mask = fcmp olt <4 x float> %x, %y 989 %max = select <4 x i1> %mask, <4 x float> %x, <4 x float> %x1 990 ret <4 x float> %max 991} 992 993define <8 x float> @test35(<8 x float> %x, <8 x float> %x1, <8 x float>* %yp) nounwind { 994; KNL-LABEL: test35: 995; KNL: ## BB#0: 996; KNL-NEXT: ## kill: %YMM1<def> %YMM1<kill> %ZMM1<def> 997; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 998; KNL-NEXT: vmovups (%rdi), %ymm2 999; KNL-NEXT: vcmpltps %zmm2, %zmm0, %k1 1000; KNL-NEXT: vblendmps %zmm0, %zmm1, %zmm0 {%k1} 1001; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<kill> 1002; KNL-NEXT: retq 1003; 1004; SKX-LABEL: test35: 1005; SKX: ## BB#0: 1006; SKX-NEXT: vcmpltps (%rdi), %ymm0, %k1 1007; SKX-NEXT: vblendmps %ymm0, %ymm1, %ymm0 {%k1} 1008; SKX-NEXT: retq 1009 1010 %y = load <8 x float>, <8 x float>* %yp, align 4 1011 %mask = fcmp ogt <8 x float> %y, %x 1012 %max = select <8 x i1> %mask, <8 x float> %x, <8 x float> %x1 1013 ret <8 x float> %max 1014} 1015 1016define <16 x float> @test36(<16 x float> %x, <16 x float> %x1, <16 x float>* %yp) nounwind { 1017; CHECK-LABEL: test36: 1018; CHECK: ## BB#0: 1019; CHECK-NEXT: vcmpltps (%rdi), %zmm0, %k1 1020; CHECK-NEXT: vblendmps %zmm0, %zmm1, %zmm0 {%k1} 1021; CHECK-NEXT: retq 1022 %y = load <16 x float>, <16 x float>* %yp, align 4 1023 %mask = fcmp olt <16 x float> %x, %y 1024 %max = select <16 x i1> %mask, <16 x float> %x, <16 x float> %x1 1025 ret <16 x float> %max 1026} 1027 1028define <8 x double> @test37(<8 x double> %x, <8 x double> %x1, double* %ptr) nounwind { 1029; CHECK-LABEL: test37: 1030; CHECK: ## BB#0: 1031; CHECK-NEXT: vcmpltpd (%rdi){1to8}, %zmm0, %k1 1032; CHECK-NEXT: vblendmpd %zmm0, %zmm1, %zmm0 {%k1} 1033; CHECK-NEXT: retq 1034 1035 %a = load double, double* %ptr 1036 %v = insertelement <8 x double> undef, double %a, i32 0 1037 %shuffle = shufflevector <8 x double> %v, <8 x double> undef, <8 x i32> zeroinitializer 1038 1039 %mask = fcmp ogt <8 x double> %shuffle, %x 1040 %max = select <8 x i1> %mask, <8 x double> %x, <8 x double> %x1 1041 ret <8 x double> %max 1042} 1043 1044define <4 x double> @test38(<4 x double> %x, <4 x double> %x1, double* %ptr) nounwind { 1045; KNL-LABEL: test38: 1046; KNL: ## BB#0: 1047; KNL-NEXT: vbroadcastsd (%rdi), %ymm2 1048; KNL-NEXT: vcmpltpd %ymm2, %ymm0, %ymm2 1049; KNL-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1050; KNL-NEXT: retq 1051; 1052; SKX-LABEL: test38: 1053; SKX: ## BB#0: 1054; SKX-NEXT: vcmpltpd (%rdi){1to4}, %ymm0, %k1 1055; SKX-NEXT: vblendmpd %ymm0, %ymm1, %ymm0 {%k1} 1056; SKX-NEXT: retq 1057 1058 %a = load double, double* %ptr 1059 %v = insertelement <4 x double> undef, double %a, i32 0 1060 %shuffle = shufflevector <4 x double> %v, <4 x double> undef, <4 x i32> zeroinitializer 1061 1062 %mask = fcmp ogt <4 x double> %shuffle, %x 1063 %max = select <4 x i1> %mask, <4 x double> %x, <4 x double> %x1 1064 ret <4 x double> %max 1065} 1066 1067define <2 x double> @test39(<2 x double> %x, <2 x double> %x1, double* %ptr) nounwind { 1068; KNL-LABEL: test39: 1069; KNL: ## BB#0: 1070; KNL-NEXT: vmovddup {{.*#+}} xmm2 = mem[0,0] 1071; KNL-NEXT: vcmpltpd %xmm2, %xmm0, %xmm2 1072; KNL-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 1073; KNL-NEXT: retq 1074; 1075; SKX-LABEL: test39: 1076; SKX: ## BB#0: 1077; SKX-NEXT: vcmpltpd (%rdi){1to2}, %xmm0, %k1 1078; SKX-NEXT: vblendmpd %xmm0, %xmm1, %xmm0 {%k1} 1079; SKX-NEXT: retq 1080 1081 %a = load double, double* %ptr 1082 %v = insertelement <2 x double> undef, double %a, i32 0 1083 %shuffle = shufflevector <2 x double> %v, <2 x double> undef, <2 x i32> <i32 0, i32 0> 1084 1085 %mask = fcmp ogt <2 x double> %shuffle, %x 1086 %max = select <2 x i1> %mask, <2 x double> %x, <2 x double> %x1 1087 ret <2 x double> %max 1088} 1089 1090 1091define <16 x float> @test40(<16 x float> %x, <16 x float> %x1, float* %ptr) nounwind { 1092; CHECK-LABEL: test40: 1093; CHECK: ## BB#0: 1094; CHECK-NEXT: vcmpltps (%rdi){1to16}, %zmm0, %k1 1095; CHECK-NEXT: vblendmps %zmm0, %zmm1, %zmm0 {%k1} 1096; CHECK-NEXT: retq 1097 1098 %a = load float, float* %ptr 1099 %v = insertelement <16 x float> undef, float %a, i32 0 1100 %shuffle = shufflevector <16 x float> %v, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0> 1101 1102 %mask = fcmp ogt <16 x float> %shuffle, %x 1103 %max = select <16 x i1> %mask, <16 x float> %x, <16 x float> %x1 1104 ret <16 x float> %max 1105} 1106 1107define <8 x float> @test41(<8 x float> %x, <8 x float> %x1, float* %ptr) nounwind { 1108; KNL-LABEL: test41: 1109; KNL: ## BB#0: 1110; KNL-NEXT: ## kill: %YMM1<def> %YMM1<kill> %ZMM1<def> 1111; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 1112; KNL-NEXT: vbroadcastss (%rdi), %ymm2 1113; KNL-NEXT: vcmpltps %zmm2, %zmm0, %k1 1114; KNL-NEXT: vblendmps %zmm0, %zmm1, %zmm0 {%k1} 1115; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<kill> 1116; KNL-NEXT: retq 1117; 1118; SKX-LABEL: test41: 1119; SKX: ## BB#0: 1120; SKX-NEXT: vcmpltps (%rdi){1to8}, %ymm0, %k1 1121; SKX-NEXT: vblendmps %ymm0, %ymm1, %ymm0 {%k1} 1122; SKX-NEXT: retq 1123 1124 %a = load float, float* %ptr 1125 %v = insertelement <8 x float> undef, float %a, i32 0 1126 %shuffle = shufflevector <8 x float> %v, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0> 1127 1128 %mask = fcmp ogt <8 x float> %shuffle, %x 1129 %max = select <8 x i1> %mask, <8 x float> %x, <8 x float> %x1 1130 ret <8 x float> %max 1131} 1132 1133define <4 x float> @test42(<4 x float> %x, <4 x float> %x1, float* %ptr) nounwind { 1134; KNL-LABEL: test42: 1135; KNL: ## BB#0: 1136; KNL-NEXT: vbroadcastss (%rdi), %xmm2 1137; KNL-NEXT: vcmpltps %xmm2, %xmm0, %xmm2 1138; KNL-NEXT: vblendvps %xmm2, %xmm0, %xmm1, %xmm0 1139; KNL-NEXT: retq 1140; 1141; SKX-LABEL: test42: 1142; SKX: ## BB#0: 1143; SKX-NEXT: vcmpltps (%rdi){1to4}, %xmm0, %k1 1144; SKX-NEXT: vblendmps %xmm0, %xmm1, %xmm0 {%k1} 1145; SKX-NEXT: retq 1146 1147 %a = load float, float* %ptr 1148 %v = insertelement <4 x float> undef, float %a, i32 0 1149 %shuffle = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0> 1150 1151 %mask = fcmp ogt <4 x float> %shuffle, %x 1152 %max = select <4 x i1> %mask, <4 x float> %x, <4 x float> %x1 1153 ret <4 x float> %max 1154} 1155 1156define <8 x double> @test43(<8 x double> %x, <8 x double> %x1, double* %ptr,<8 x i1> %mask_in) nounwind { 1157; KNL-LABEL: test43: 1158; KNL: ## BB#0: 1159; KNL-NEXT: vpmovsxwq %xmm2, %zmm2 1160; KNL-NEXT: vpsllq $63, %zmm2, %zmm2 1161; KNL-NEXT: vptestmq %zmm2, %zmm2, %k1 1162; KNL-NEXT: vcmpltpd (%rdi){1to8}, %zmm0, %k1 {%k1} 1163; KNL-NEXT: vblendmpd %zmm0, %zmm1, %zmm0 {%k1} 1164; KNL-NEXT: retq 1165; 1166; SKX-LABEL: test43: 1167; SKX: ## BB#0: 1168; SKX-NEXT: vpsllw $15, %xmm2, %xmm2 1169; SKX-NEXT: vpmovw2m %xmm2, %k1 1170; SKX-NEXT: vcmpltpd (%rdi){1to8}, %zmm0, %k1 {%k1} 1171; SKX-NEXT: vblendmpd %zmm0, %zmm1, %zmm0 {%k1} 1172; SKX-NEXT: retq 1173 1174 %a = load double, double* %ptr 1175 %v = insertelement <8 x double> undef, double %a, i32 0 1176 %shuffle = shufflevector <8 x double> %v, <8 x double> undef, <8 x i32> zeroinitializer 1177 1178 %mask_cmp = fcmp ogt <8 x double> %shuffle, %x 1179 %mask = and <8 x i1> %mask_cmp, %mask_in 1180 %max = select <8 x i1> %mask, <8 x double> %x, <8 x double> %x1 1181 ret <8 x double> %max 1182} 1183 1184define <4 x i32> @test44(<4 x i16> %x, <4 x i16> %y) #0 { 1185; KNL-LABEL: test44: 1186; KNL: ## BB#0: 1187; KNL-NEXT: vpxor %xmm2, %xmm2, %xmm2 1188; KNL-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7] 1189; KNL-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7] 1190; KNL-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0 1191; KNL-NEXT: retq 1192; 1193; SKX-LABEL: test44: 1194; SKX: ## BB#0: 1195; SKX-NEXT: vpxord %xmm2, %xmm2, %xmm2 1196; SKX-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7] 1197; SKX-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7] 1198; SKX-NEXT: vpcmpeqd %xmm1, %xmm0, %k0 1199; SKX-NEXT: vpmovm2d %k0, %xmm0 1200; SKX-NEXT: retq 1201 %mask = icmp eq <4 x i16> %x, %y 1202 %1 = sext <4 x i1> %mask to <4 x i32> 1203 ret <4 x i32> %1 1204} 1205 1206define <2 x i64> @test45(<2 x i16> %x, <2 x i16> %y) #0 { 1207; KNL-LABEL: test45: 1208; KNL: ## BB#0: 1209; KNL-NEXT: vpxor %xmm2, %xmm2, %xmm2 1210; KNL-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3],xmm1[4],xmm2[5,6,7] 1211; KNL-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1,2,3],xmm0[4],xmm2[5,6,7] 1212; KNL-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0 1213; KNL-NEXT: vpsrlq $63, %xmm0, %xmm0 1214; KNL-NEXT: retq 1215; 1216; SKX-LABEL: test45: 1217; SKX: ## BB#0: 1218; SKX-NEXT: vpxord %xmm2, %xmm2, %xmm2 1219; SKX-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1,2,3],xmm1[4],xmm2[5,6,7] 1220; SKX-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1,2,3],xmm0[4],xmm2[5,6,7] 1221; SKX-NEXT: vpcmpeqq %xmm1, %xmm0, %k1 1222; SKX-NEXT: vmovdqa64 {{.*}}(%rip), %xmm0 {%k1} {z} 1223; SKX-NEXT: retq 1224 %mask = icmp eq <2 x i16> %x, %y 1225 %1 = zext <2 x i1> %mask to <2 x i64> 1226 ret <2 x i64> %1 1227} 1228 1229define <2 x i64> @test46(<2 x float> %x, <2 x float> %y) #0 { 1230; KNL-LABEL: test46: 1231; KNL: ## BB#0: 1232; KNL-NEXT: vcmpeqps %xmm1, %xmm0, %xmm0 1233; KNL-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero 1234; KNL-NEXT: vpsllq $32, %xmm0, %xmm0 1235; KNL-NEXT: vpsrad $31, %xmm0, %xmm1 1236; KNL-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1237; KNL-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3] 1238; KNL-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 1239; KNL-NEXT: retq 1240; 1241; SKX-LABEL: test46: 1242; SKX: ## BB#0: 1243; SKX-NEXT: vcmpeqps %xmm1, %xmm0, %k1 1244; SKX-NEXT: vmovdqa64 {{.*}}(%rip), %xmm0 {%k1} {z} 1245; SKX-NEXT: retq 1246 %mask = fcmp oeq <2 x float> %x, %y 1247 %1 = zext <2 x i1> %mask to <2 x i64> 1248 ret <2 x i64> %1 1249} 1250