brintos

brintos / llvm-project-archived public Read only

0
0
Text · 36.9 KiB · bdcc524 Raw
1028 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl | FileCheck %s --check-prefix=ALL --check-prefix=KNL3; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck %s --check-prefix=ALL --check-prefix=SKX4 5 6define <16 x i32> @vpandd(<16 x i32> %a, <16 x i32> %b) nounwind uwtable readnone ssp {7; ALL-LABEL: vpandd:8; ALL:       ## %bb.0: ## %entry9; ALL-NEXT:    vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm010; ALL-NEXT:    vpandd %zmm1, %zmm0, %zmm011; ALL-NEXT:    retq12entry:13  ; Force the execution domain with an add.14  %a2 = add <16 x i32> %a, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2,15                            i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>16  %x = and <16 x i32> %a2, %b17  ret <16 x i32> %x18}19 20define <16 x i32> @vpandnd(<16 x i32> %a, <16 x i32> %b) nounwind uwtable readnone ssp {21; ALL-LABEL: vpandnd:22; ALL:       ## %bb.0: ## %entry23; ALL-NEXT:    vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm024; ALL-NEXT:    vpandnd %zmm0, %zmm1, %zmm025; ALL-NEXT:    retq26entry:27  ; Force the execution domain with an add.28  %a2 = add <16 x i32> %a, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3,29                            i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>30  %b2 = xor <16 x i32> %b, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1,31                            i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>32  %x = and <16 x i32> %a2, %b233  ret <16 x i32> %x34}35 36define <16 x i32> @vpord(<16 x i32> %a, <16 x i32> %b) nounwind uwtable readnone ssp {37; ALL-LABEL: vpord:38; ALL:       ## %bb.0: ## %entry39; ALL-NEXT:    vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm040; ALL-NEXT:    vpord %zmm1, %zmm0, %zmm041; ALL-NEXT:    retq42entry:43  ; Force the execution domain with an add.44  %a2 = add <16 x i32> %a, <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4,45                            i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>46  %x = or <16 x i32> %a2, %b47  ret <16 x i32> %x48}49 50define <16 x i32> @vpxord(<16 x i32> %a, <16 x i32> %b) nounwind uwtable readnone ssp {51; ALL-LABEL: vpxord:52; ALL:       ## %bb.0: ## %entry53; ALL-NEXT:    vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm054; ALL-NEXT:    vpxord %zmm1, %zmm0, %zmm055; ALL-NEXT:    retq56entry:57  ; Force the execution domain with an add.58  %a2 = add <16 x i32> %a, <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5,59                            i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>60  %x = xor <16 x i32> %a2, %b61  ret <16 x i32> %x62}63 64define <8 x i64> @vpandq(<8 x i64> %a, <8 x i64> %b) nounwind uwtable readnone ssp {65; ALL-LABEL: vpandq:66; ALL:       ## %bb.0: ## %entry67; ALL-NEXT:    vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm068; ALL-NEXT:    vpandq %zmm1, %zmm0, %zmm069; ALL-NEXT:    retq70entry:71  ; Force the execution domain with an add.72  %a2 = add <8 x i64> %a, <i64 6, i64 6, i64 6, i64 6, i64 6, i64 6, i64 6, i64 6>73  %x = and <8 x i64> %a2, %b74  ret <8 x i64> %x75}76 77define <8 x i64> @vpandnq(<8 x i64> %a, <8 x i64> %b) nounwind uwtable readnone ssp {78; ALL-LABEL: vpandnq:79; ALL:       ## %bb.0: ## %entry80; ALL-NEXT:    vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm081; ALL-NEXT:    vpandnq %zmm0, %zmm1, %zmm082; ALL-NEXT:    retq83entry:84  ; Force the execution domain with an add.85  %a2 = add <8 x i64> %a, <i64 7, i64 7, i64 7, i64 7, i64 7, i64 7, i64 7, i64 7>86  %b2 = xor <8 x i64> %b, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>87  %x = and <8 x i64> %a2, %b288  ret <8 x i64> %x89}90 91define <8 x i64> @vporq(<8 x i64> %a, <8 x i64> %b) nounwind uwtable readnone ssp {92; ALL-LABEL: vporq:93; ALL:       ## %bb.0: ## %entry94; ALL-NEXT:    vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm095; ALL-NEXT:    vporq %zmm1, %zmm0, %zmm096; ALL-NEXT:    retq97entry:98  ; Force the execution domain with an add.99  %a2 = add <8 x i64> %a, <i64 8, i64 8, i64 8, i64 8, i64 8, i64 8, i64 8, i64 8>100  %x = or <8 x i64> %a2, %b101  ret <8 x i64> %x102}103 104define <8 x i64> @vpxorq(<8 x i64> %a, <8 x i64> %b) nounwind uwtable readnone ssp {105; ALL-LABEL: vpxorq:106; ALL:       ## %bb.0: ## %entry107; ALL-NEXT:    vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0108; ALL-NEXT:    vpxorq %zmm1, %zmm0, %zmm0109; ALL-NEXT:    retq110entry:111  ; Force the execution domain with an add.112  %a2 = add <8 x i64> %a, <i64 9, i64 9, i64 9, i64 9, i64 9, i64 9, i64 9, i64 9>113  %x = xor <8 x i64> %a2, %b114  ret <8 x i64> %x115}116 117 118define <8 x i64> @orq_broadcast(<8 x i64> %a) nounwind {119; KNL-LABEL: orq_broadcast:120; KNL:       ## %bb.0:121; KNL-NEXT:    vporq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0122; KNL-NEXT:    retq123;124; SKX-LABEL: orq_broadcast:125; SKX:       ## %bb.0:126; SKX-NEXT:    vorpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0127; SKX-NEXT:    retq128  %b = or <8 x i64> %a, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2>129  ret <8 x i64> %b130}131 132define <16 x i32> @andd512fold(<16 x i32> %y, ptr %x) {133; KNL-LABEL: andd512fold:134; KNL:       ## %bb.0: ## %entry135; KNL-NEXT:    vpandd (%rdi), %zmm0, %zmm0136; KNL-NEXT:    retq137;138; SKX-LABEL: andd512fold:139; SKX:       ## %bb.0: ## %entry140; SKX-NEXT:    vandps (%rdi), %zmm0, %zmm0141; SKX-NEXT:    retq142entry:143  %a = load <16 x i32>, ptr %x, align 4144  %b = and <16 x i32> %y, %a145  ret <16 x i32> %b146}147 148define <8 x i64> @andqbrst(<8 x i64> %p1, ptr %ap) {149; KNL-LABEL: andqbrst:150; KNL:       ## %bb.0: ## %entry151; KNL-NEXT:    vpandq (%rdi){1to8}, %zmm0, %zmm0152; KNL-NEXT:    retq153;154; SKX-LABEL: andqbrst:155; SKX:       ## %bb.0: ## %entry156; SKX-NEXT:    vandpd (%rdi){1to8}, %zmm0, %zmm0157; SKX-NEXT:    retq158entry:159  %a = load i64, ptr %ap, align 8160  %b = insertelement <8 x i64> undef, i64 %a, i32 0161  %c = shufflevector <8 x i64> %b, <8 x i64> undef, <8 x i32> zeroinitializer162  %d = and <8 x i64> %p1, %c163  ret <8 x i64>%d164}165 166define <64 x i8> @and_v64i8(<64 x i8> %a, <64 x i8> %b) {167; KNL-LABEL: and_v64i8:168; KNL:       ## %bb.0:169; KNL-NEXT:    vpandq %zmm1, %zmm0, %zmm0170; KNL-NEXT:    retq171;172; SKX-LABEL: and_v64i8:173; SKX:       ## %bb.0:174; SKX-NEXT:    vandps %zmm1, %zmm0, %zmm0175; SKX-NEXT:    retq176  %res = and <64 x i8> %a, %b177  ret <64 x i8> %res178}179 180define <64 x i8> @andn_v64i8(<64 x i8> %a, <64 x i8> %b) {181; KNL-LABEL: andn_v64i8:182; KNL:       ## %bb.0:183; KNL-NEXT:    vpandnq %zmm0, %zmm1, %zmm0184; KNL-NEXT:    retq185;186; SKX-LABEL: andn_v64i8:187; SKX:       ## %bb.0:188; SKX-NEXT:    vandnps %zmm0, %zmm1, %zmm0189; SKX-NEXT:    retq190  %b2 = xor <64 x i8> %b, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,191                           i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,192                           i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,193                           i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>194  %res = and <64 x i8> %a, %b2195  ret <64 x i8> %res196}197 198define <64 x i8> @or_v64i8(<64 x i8> %a, <64 x i8> %b) {199; KNL-LABEL: or_v64i8:200; KNL:       ## %bb.0:201; KNL-NEXT:    vporq %zmm1, %zmm0, %zmm0202; KNL-NEXT:    retq203;204; SKX-LABEL: or_v64i8:205; SKX:       ## %bb.0:206; SKX-NEXT:    vorps %zmm1, %zmm0, %zmm0207; SKX-NEXT:    retq208  %res = or <64 x i8> %a, %b209  ret <64 x i8> %res210}211 212define <64 x i8> @xor_v64i8(<64 x i8> %a, <64 x i8> %b) {213; KNL-LABEL: xor_v64i8:214; KNL:       ## %bb.0:215; KNL-NEXT:    vpxorq %zmm1, %zmm0, %zmm0216; KNL-NEXT:    retq217;218; SKX-LABEL: xor_v64i8:219; SKX:       ## %bb.0:220; SKX-NEXT:    vxorps %zmm1, %zmm0, %zmm0221; SKX-NEXT:    retq222  %res = xor <64 x i8> %a, %b223  ret <64 x i8> %res224}225 226define <32 x i16> @and_v32i16(<32 x i16> %a, <32 x i16> %b) {227; KNL-LABEL: and_v32i16:228; KNL:       ## %bb.0:229; KNL-NEXT:    vpandq %zmm1, %zmm0, %zmm0230; KNL-NEXT:    retq231;232; SKX-LABEL: and_v32i16:233; SKX:       ## %bb.0:234; SKX-NEXT:    vandps %zmm1, %zmm0, %zmm0235; SKX-NEXT:    retq236  %res = and <32 x i16> %a, %b237  ret <32 x i16> %res238}239 240define <32 x i16> @andn_v32i16(<32 x i16> %a, <32 x i16> %b) {241; KNL-LABEL: andn_v32i16:242; KNL:       ## %bb.0:243; KNL-NEXT:    vpandnq %zmm0, %zmm1, %zmm0244; KNL-NEXT:    retq245;246; SKX-LABEL: andn_v32i16:247; SKX:       ## %bb.0:248; SKX-NEXT:    vandnps %zmm0, %zmm1, %zmm0249; SKX-NEXT:    retq250  %b2 = xor <32 x i16> %b, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1,251                            i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>252  %res = and <32 x i16> %a, %b2253  ret <32 x i16> %res254}255 256define <32 x i16> @or_v32i16(<32 x i16> %a, <32 x i16> %b) {257; KNL-LABEL: or_v32i16:258; KNL:       ## %bb.0:259; KNL-NEXT:    vporq %zmm1, %zmm0, %zmm0260; KNL-NEXT:    retq261;262; SKX-LABEL: or_v32i16:263; SKX:       ## %bb.0:264; SKX-NEXT:    vorps %zmm1, %zmm0, %zmm0265; SKX-NEXT:    retq266  %res = or <32 x i16> %a, %b267  ret <32 x i16> %res268}269 270define <32 x i16> @xor_v32i16(<32 x i16> %a, <32 x i16> %b) {271; KNL-LABEL: xor_v32i16:272; KNL:       ## %bb.0:273; KNL-NEXT:    vpxorq %zmm1, %zmm0, %zmm0274; KNL-NEXT:    retq275;276; SKX-LABEL: xor_v32i16:277; SKX:       ## %bb.0:278; SKX-NEXT:    vxorps %zmm1, %zmm0, %zmm0279; SKX-NEXT:    retq280  %res = xor <32 x i16> %a, %b281  ret <32 x i16> %res282}283 284define <16 x float> @masked_and_v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %passThru, i16 %mask, <16 x float> %c) {285; KNL-LABEL: masked_and_v16f32:286; KNL:       ## %bb.0:287; KNL-NEXT:    kmovw %edi, %k1288; KNL-NEXT:    vpandd %zmm1, %zmm0, %zmm2 {%k1}289; KNL-NEXT:    vaddps %zmm2, %zmm3, %zmm0290; KNL-NEXT:    retq291;292; SKX-LABEL: masked_and_v16f32:293; SKX:       ## %bb.0:294; SKX-NEXT:    kmovd %edi, %k1295; SKX-NEXT:    vandps %zmm1, %zmm0, %zmm2 {%k1}296; SKX-NEXT:    vaddps %zmm2, %zmm3, %zmm0297; SKX-NEXT:    retq298  %a1 = bitcast <16 x float> %a to <16 x i32>299  %b1 = bitcast <16 x float> %b to <16 x i32>300  %passThru1 = bitcast <16 x float> %passThru to <16 x i32>301  %mask1 = bitcast i16 %mask to <16 x i1>302  %op = and <16 x i32> %a1, %b1303  %select = select <16 x i1> %mask1, <16 x i32> %op, <16 x i32> %passThru1304  %cast = bitcast <16 x i32> %select to <16 x float>305  %add = fadd <16 x float> %c, %cast306  ret <16 x float> %add307}308 309define <16 x float> @masked_or_v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %passThru, i16 %mask, <16 x float> %c) {310; KNL-LABEL: masked_or_v16f32:311; KNL:       ## %bb.0:312; KNL-NEXT:    kmovw %edi, %k1313; KNL-NEXT:    vpandd %zmm1, %zmm0, %zmm2 {%k1}314; KNL-NEXT:    vaddps %zmm2, %zmm3, %zmm0315; KNL-NEXT:    retq316;317; SKX-LABEL: masked_or_v16f32:318; SKX:       ## %bb.0:319; SKX-NEXT:    kmovd %edi, %k1320; SKX-NEXT:    vandps %zmm1, %zmm0, %zmm2 {%k1}321; SKX-NEXT:    vaddps %zmm2, %zmm3, %zmm0322; SKX-NEXT:    retq323  %a1 = bitcast <16 x float> %a to <16 x i32>324  %b1 = bitcast <16 x float> %b to <16 x i32>325  %passThru1 = bitcast <16 x float> %passThru to <16 x i32>326  %mask1 = bitcast i16 %mask to <16 x i1>327  %op = and <16 x i32> %a1, %b1328  %select = select <16 x i1> %mask1, <16 x i32> %op, <16 x i32> %passThru1329  %cast = bitcast <16 x i32> %select to <16 x float>330  %add = fadd <16 x float> %c, %cast331  ret <16 x float> %add332}333 334define <16 x float> @masked_xor_v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %passThru, i16 %mask, <16 x float> %c) {335; KNL-LABEL: masked_xor_v16f32:336; KNL:       ## %bb.0:337; KNL-NEXT:    kmovw %edi, %k1338; KNL-NEXT:    vpandd %zmm1, %zmm0, %zmm2 {%k1}339; KNL-NEXT:    vaddps %zmm2, %zmm3, %zmm0340; KNL-NEXT:    retq341;342; SKX-LABEL: masked_xor_v16f32:343; SKX:       ## %bb.0:344; SKX-NEXT:    kmovd %edi, %k1345; SKX-NEXT:    vandps %zmm1, %zmm0, %zmm2 {%k1}346; SKX-NEXT:    vaddps %zmm2, %zmm3, %zmm0347; SKX-NEXT:    retq348  %a1 = bitcast <16 x float> %a to <16 x i32>349  %b1 = bitcast <16 x float> %b to <16 x i32>350  %passThru1 = bitcast <16 x float> %passThru to <16 x i32>351  %mask1 = bitcast i16 %mask to <16 x i1>352  %op = and <16 x i32> %a1, %b1353  %select = select <16 x i1> %mask1, <16 x i32> %op, <16 x i32> %passThru1354  %cast = bitcast <16 x i32> %select to <16 x float>355  %add = fadd <16 x float> %c, %cast356  ret <16 x float> %add357}358 359define <8 x double> @masked_and_v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %passThru, i8 %mask, <8 x double> %c) {360; KNL-LABEL: masked_and_v8f64:361; KNL:       ## %bb.0:362; KNL-NEXT:    kmovw %edi, %k1363; KNL-NEXT:    vpandq %zmm1, %zmm0, %zmm2 {%k1}364; KNL-NEXT:    vaddpd %zmm2, %zmm3, %zmm0365; KNL-NEXT:    retq366;367; SKX-LABEL: masked_and_v8f64:368; SKX:       ## %bb.0:369; SKX-NEXT:    kmovd %edi, %k1370; SKX-NEXT:    vandpd %zmm1, %zmm0, %zmm2 {%k1}371; SKX-NEXT:    vaddpd %zmm2, %zmm3, %zmm0372; SKX-NEXT:    retq373  %a1 = bitcast <8 x double> %a to <8 x i64>374  %b1 = bitcast <8 x double> %b to <8 x i64>375  %passThru1 = bitcast <8 x double> %passThru to <8 x i64>376  %mask1 = bitcast i8 %mask to <8 x i1>377  %op = and <8 x i64> %a1, %b1378  %select = select <8 x i1> %mask1, <8 x i64> %op, <8 x i64> %passThru1379  %cast = bitcast <8 x i64> %select to <8 x double>380  %add = fadd <8 x double> %c, %cast381  ret <8 x double> %add382}383 384define <8 x double> @masked_or_v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %passThru, i8 %mask, <8 x double> %c) {385; KNL-LABEL: masked_or_v8f64:386; KNL:       ## %bb.0:387; KNL-NEXT:    kmovw %edi, %k1388; KNL-NEXT:    vpandq %zmm1, %zmm0, %zmm2 {%k1}389; KNL-NEXT:    vaddpd %zmm2, %zmm3, %zmm0390; KNL-NEXT:    retq391;392; SKX-LABEL: masked_or_v8f64:393; SKX:       ## %bb.0:394; SKX-NEXT:    kmovd %edi, %k1395; SKX-NEXT:    vandpd %zmm1, %zmm0, %zmm2 {%k1}396; SKX-NEXT:    vaddpd %zmm2, %zmm3, %zmm0397; SKX-NEXT:    retq398  %a1 = bitcast <8 x double> %a to <8 x i64>399  %b1 = bitcast <8 x double> %b to <8 x i64>400  %passThru1 = bitcast <8 x double> %passThru to <8 x i64>401  %mask1 = bitcast i8 %mask to <8 x i1>402  %op = and <8 x i64> %a1, %b1403  %select = select <8 x i1> %mask1, <8 x i64> %op, <8 x i64> %passThru1404  %cast = bitcast <8 x i64> %select to <8 x double>405  %add = fadd <8 x double> %c, %cast406  ret <8 x double> %add407}408 409define <8 x double> @masked_xor_v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %passThru, i8 %mask, <8 x double> %c) {410; KNL-LABEL: masked_xor_v8f64:411; KNL:       ## %bb.0:412; KNL-NEXT:    kmovw %edi, %k1413; KNL-NEXT:    vpandq %zmm1, %zmm0, %zmm2 {%k1}414; KNL-NEXT:    vaddpd %zmm2, %zmm3, %zmm0415; KNL-NEXT:    retq416;417; SKX-LABEL: masked_xor_v8f64:418; SKX:       ## %bb.0:419; SKX-NEXT:    kmovd %edi, %k1420; SKX-NEXT:    vandpd %zmm1, %zmm0, %zmm2 {%k1}421; SKX-NEXT:    vaddpd %zmm2, %zmm3, %zmm0422; SKX-NEXT:    retq423  %a1 = bitcast <8 x double> %a to <8 x i64>424  %b1 = bitcast <8 x double> %b to <8 x i64>425  %passThru1 = bitcast <8 x double> %passThru to <8 x i64>426  %mask1 = bitcast i8 %mask to <8 x i1>427  %op = and <8 x i64> %a1, %b1428  %select = select <8 x i1> %mask1, <8 x i64> %op, <8 x i64> %passThru1429  %cast = bitcast <8 x i64> %select to <8 x double>430  %add = fadd <8 x double> %c, %cast431  ret <8 x double> %add432}433 434define <8 x i64> @test_mm512_mask_and_epi32(<8 x i64> %__src, i16 zeroext %__k, <8 x i64> %__a, <8 x i64> %__b) {435; KNL-LABEL: test_mm512_mask_and_epi32:436; KNL:       ## %bb.0: ## %entry437; KNL-NEXT:    kmovw %edi, %k1438; KNL-NEXT:    vpandd %zmm2, %zmm1, %zmm0 {%k1}439; KNL-NEXT:    retq440;441; SKX-LABEL: test_mm512_mask_and_epi32:442; SKX:       ## %bb.0: ## %entry443; SKX-NEXT:    kmovd %edi, %k1444; SKX-NEXT:    vandps %zmm2, %zmm1, %zmm0 {%k1}445; SKX-NEXT:    retq446entry:447  %and1.i.i = and <8 x i64> %__a, %__b448  %0 = bitcast <8 x i64> %and1.i.i to <16 x i32>449  %1 = bitcast <8 x i64> %__src to <16 x i32>450  %2 = bitcast i16 %__k to <16 x i1>451  %3 = select <16 x i1> %2, <16 x i32> %0, <16 x i32> %1452  %4 = bitcast <16 x i32> %3 to <8 x i64>453  ret <8 x i64> %4454}455 456define <8 x i64> @test_mm512_mask_or_epi32(<8 x i64> %__src, i16 zeroext %__k, <8 x i64> %__a, <8 x i64> %__b) {457; KNL-LABEL: test_mm512_mask_or_epi32:458; KNL:       ## %bb.0: ## %entry459; KNL-NEXT:    kmovw %edi, %k1460; KNL-NEXT:    vpord %zmm2, %zmm1, %zmm0 {%k1}461; KNL-NEXT:    retq462;463; SKX-LABEL: test_mm512_mask_or_epi32:464; SKX:       ## %bb.0: ## %entry465; SKX-NEXT:    kmovd %edi, %k1466; SKX-NEXT:    vorps %zmm2, %zmm1, %zmm0 {%k1}467; SKX-NEXT:    retq468entry:469  %or1.i.i = or <8 x i64> %__a, %__b470  %0 = bitcast <8 x i64> %or1.i.i to <16 x i32>471  %1 = bitcast <8 x i64> %__src to <16 x i32>472  %2 = bitcast i16 %__k to <16 x i1>473  %3 = select <16 x i1> %2, <16 x i32> %0, <16 x i32> %1474  %4 = bitcast <16 x i32> %3 to <8 x i64>475  ret <8 x i64> %4476}477 478define <8 x i64> @test_mm512_mask_xor_epi32(<8 x i64> %__src, i16 zeroext %__k, <8 x i64> %__a, <8 x i64> %__b) {479; KNL-LABEL: test_mm512_mask_xor_epi32:480; KNL:       ## %bb.0: ## %entry481; KNL-NEXT:    kmovw %edi, %k1482; KNL-NEXT:    vpxord %zmm2, %zmm1, %zmm0 {%k1}483; KNL-NEXT:    retq484;485; SKX-LABEL: test_mm512_mask_xor_epi32:486; SKX:       ## %bb.0: ## %entry487; SKX-NEXT:    kmovd %edi, %k1488; SKX-NEXT:    vxorps %zmm2, %zmm1, %zmm0 {%k1}489; SKX-NEXT:    retq490entry:491  %xor1.i.i = xor <8 x i64> %__a, %__b492  %0 = bitcast <8 x i64> %xor1.i.i to <16 x i32>493  %1 = bitcast <8 x i64> %__src to <16 x i32>494  %2 = bitcast i16 %__k to <16 x i1>495  %3 = select <16 x i1> %2, <16 x i32> %0, <16 x i32> %1496  %4 = bitcast <16 x i32> %3 to <8 x i64>497  ret <8 x i64> %4498}499 500define <8 x double> @test_mm512_mask_xor_pd(<8 x double> %__W, i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {501; KNL-LABEL: test_mm512_mask_xor_pd:502; KNL:       ## %bb.0: ## %entry503; KNL-NEXT:    kmovw %edi, %k1504; KNL-NEXT:    vpxorq %zmm2, %zmm1, %zmm0 {%k1}505; KNL-NEXT:    retq506;507; SKX-LABEL: test_mm512_mask_xor_pd:508; SKX:       ## %bb.0: ## %entry509; SKX-NEXT:    kmovd %edi, %k1510; SKX-NEXT:    vxorpd %zmm2, %zmm1, %zmm0 {%k1}511; SKX-NEXT:    retq512entry:513  %0 = bitcast <8 x double> %__A to <8 x i64>514  %1 = bitcast <8 x double> %__B to <8 x i64>515  %xor.i.i = xor <8 x i64> %0, %1516  %2 = bitcast <8 x i64> %xor.i.i to <8 x double>517  %3 = bitcast i8 %__U to <8 x i1>518  %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %__W519  ret <8 x double> %4520}521 522define <8 x double> @test_mm512_maskz_xor_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {523; KNL-LABEL: test_mm512_maskz_xor_pd:524; KNL:       ## %bb.0: ## %entry525; KNL-NEXT:    kmovw %edi, %k1526; KNL-NEXT:    vpxorq %zmm1, %zmm0, %zmm0 {%k1} {z}527; KNL-NEXT:    retq528;529; SKX-LABEL: test_mm512_maskz_xor_pd:530; SKX:       ## %bb.0: ## %entry531; SKX-NEXT:    kmovd %edi, %k1532; SKX-NEXT:    vxorpd %zmm1, %zmm0, %zmm0 {%k1} {z}533; SKX-NEXT:    retq534entry:535  %0 = bitcast <8 x double> %__A to <8 x i64>536  %1 = bitcast <8 x double> %__B to <8 x i64>537  %xor.i.i = xor <8 x i64> %0, %1538  %2 = bitcast <8 x i64> %xor.i.i to <8 x double>539  %3 = bitcast i8 %__U to <8 x i1>540  %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer541  ret <8 x double> %4542}543 544define <16 x float> @test_mm512_mask_xor_ps(<16 x float> %__W, i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {545; KNL-LABEL: test_mm512_mask_xor_ps:546; KNL:       ## %bb.0: ## %entry547; KNL-NEXT:    kmovw %edi, %k1548; KNL-NEXT:    vpxord %zmm2, %zmm1, %zmm0 {%k1}549; KNL-NEXT:    retq550;551; SKX-LABEL: test_mm512_mask_xor_ps:552; SKX:       ## %bb.0: ## %entry553; SKX-NEXT:    kmovd %edi, %k1554; SKX-NEXT:    vxorps %zmm2, %zmm1, %zmm0 {%k1}555; SKX-NEXT:    retq556entry:557  %0 = bitcast <16 x float> %__A to <16 x i32>558  %1 = bitcast <16 x float> %__B to <16 x i32>559  %xor.i.i = xor <16 x i32> %0, %1560  %2 = bitcast <16 x i32> %xor.i.i to <16 x float>561  %3 = bitcast i16 %__U to <16 x i1>562  %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %__W563  ret <16 x float> %4564}565 566define <16 x float> @test_mm512_maskz_xor_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {567; KNL-LABEL: test_mm512_maskz_xor_ps:568; KNL:       ## %bb.0: ## %entry569; KNL-NEXT:    kmovw %edi, %k1570; KNL-NEXT:    vpxord %zmm1, %zmm0, %zmm0 {%k1} {z}571; KNL-NEXT:    retq572;573; SKX-LABEL: test_mm512_maskz_xor_ps:574; SKX:       ## %bb.0: ## %entry575; SKX-NEXT:    kmovd %edi, %k1576; SKX-NEXT:    vxorps %zmm1, %zmm0, %zmm0 {%k1} {z}577; SKX-NEXT:    retq578entry:579  %0 = bitcast <16 x float> %__A to <16 x i32>580  %1 = bitcast <16 x float> %__B to <16 x i32>581  %xor.i.i = xor <16 x i32> %0, %1582  %2 = bitcast <16 x i32> %xor.i.i to <16 x float>583  %3 = bitcast i16 %__U to <16 x i1>584  %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer585  ret <16 x float> %4586}587 588define <8 x double> @test_mm512_mask_or_pd(<8 x double> %__W, i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {589; KNL-LABEL: test_mm512_mask_or_pd:590; KNL:       ## %bb.0: ## %entry591; KNL-NEXT:    kmovw %edi, %k1592; KNL-NEXT:    vporq %zmm1, %zmm2, %zmm0 {%k1}593; KNL-NEXT:    retq594;595; SKX-LABEL: test_mm512_mask_or_pd:596; SKX:       ## %bb.0: ## %entry597; SKX-NEXT:    kmovd %edi, %k1598; SKX-NEXT:    vorpd %zmm1, %zmm2, %zmm0 {%k1}599; SKX-NEXT:    retq600entry:601  %0 = bitcast <8 x double> %__A to <8 x i64>602  %1 = bitcast <8 x double> %__B to <8 x i64>603  %or.i.i = or <8 x i64> %1, %0604  %2 = bitcast <8 x i64> %or.i.i to <8 x double>605  %3 = bitcast i8 %__U to <8 x i1>606  %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %__W607  ret <8 x double> %4608}609 610define <8 x double> @test_mm512_maskz_or_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {611; KNL-LABEL: test_mm512_maskz_or_pd:612; KNL:       ## %bb.0: ## %entry613; KNL-NEXT:    kmovw %edi, %k1614; KNL-NEXT:    vporq %zmm0, %zmm1, %zmm0 {%k1} {z}615; KNL-NEXT:    retq616;617; SKX-LABEL: test_mm512_maskz_or_pd:618; SKX:       ## %bb.0: ## %entry619; SKX-NEXT:    kmovd %edi, %k1620; SKX-NEXT:    vorpd %zmm0, %zmm1, %zmm0 {%k1} {z}621; SKX-NEXT:    retq622entry:623  %0 = bitcast <8 x double> %__A to <8 x i64>624  %1 = bitcast <8 x double> %__B to <8 x i64>625  %or.i.i = or <8 x i64> %1, %0626  %2 = bitcast <8 x i64> %or.i.i to <8 x double>627  %3 = bitcast i8 %__U to <8 x i1>628  %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer629  ret <8 x double> %4630}631 632define <16 x float> @test_mm512_mask_or_ps(<16 x float> %__W, i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {633; KNL-LABEL: test_mm512_mask_or_ps:634; KNL:       ## %bb.0: ## %entry635; KNL-NEXT:    kmovw %edi, %k1636; KNL-NEXT:    vpord %zmm1, %zmm2, %zmm0 {%k1}637; KNL-NEXT:    retq638;639; SKX-LABEL: test_mm512_mask_or_ps:640; SKX:       ## %bb.0: ## %entry641; SKX-NEXT:    kmovd %edi, %k1642; SKX-NEXT:    vorps %zmm1, %zmm2, %zmm0 {%k1}643; SKX-NEXT:    retq644entry:645  %0 = bitcast <16 x float> %__A to <16 x i32>646  %1 = bitcast <16 x float> %__B to <16 x i32>647  %or.i.i = or <16 x i32> %1, %0648  %2 = bitcast <16 x i32> %or.i.i to <16 x float>649  %3 = bitcast i16 %__U to <16 x i1>650  %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %__W651  ret <16 x float> %4652}653 654define <16 x float> @test_mm512_maskz_or_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {655; KNL-LABEL: test_mm512_maskz_or_ps:656; KNL:       ## %bb.0: ## %entry657; KNL-NEXT:    kmovw %edi, %k1658; KNL-NEXT:    vpord %zmm0, %zmm1, %zmm0 {%k1} {z}659; KNL-NEXT:    retq660;661; SKX-LABEL: test_mm512_maskz_or_ps:662; SKX:       ## %bb.0: ## %entry663; SKX-NEXT:    kmovd %edi, %k1664; SKX-NEXT:    vorps %zmm0, %zmm1, %zmm0 {%k1} {z}665; SKX-NEXT:    retq666entry:667  %0 = bitcast <16 x float> %__A to <16 x i32>668  %1 = bitcast <16 x float> %__B to <16 x i32>669  %or.i.i = or <16 x i32> %1, %0670  %2 = bitcast <16 x i32> %or.i.i to <16 x float>671  %3 = bitcast i16 %__U to <16 x i1>672  %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer673  ret <16 x float> %4674}675 676define <8 x double> @test_mm512_mask_and_pd(<8 x double> %__W, i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {677; KNL-LABEL: test_mm512_mask_and_pd:678; KNL:       ## %bb.0: ## %entry679; KNL-NEXT:    kmovw %edi, %k1680; KNL-NEXT:    vpandq %zmm1, %zmm2, %zmm0 {%k1}681; KNL-NEXT:    retq682;683; SKX-LABEL: test_mm512_mask_and_pd:684; SKX:       ## %bb.0: ## %entry685; SKX-NEXT:    kmovd %edi, %k1686; SKX-NEXT:    vandpd %zmm1, %zmm2, %zmm0 {%k1}687; SKX-NEXT:    retq688entry:689  %0 = bitcast <8 x double> %__A to <8 x i64>690  %1 = bitcast <8 x double> %__B to <8 x i64>691  %and.i.i = and <8 x i64> %1, %0692  %2 = bitcast <8 x i64> %and.i.i to <8 x double>693  %3 = bitcast i8 %__U to <8 x i1>694  %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %__W695  ret <8 x double> %4696}697 698define <8 x double> @test_mm512_maskz_and_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {699; KNL-LABEL: test_mm512_maskz_and_pd:700; KNL:       ## %bb.0: ## %entry701; KNL-NEXT:    kmovw %edi, %k1702; KNL-NEXT:    vpandq %zmm0, %zmm1, %zmm0 {%k1} {z}703; KNL-NEXT:    retq704;705; SKX-LABEL: test_mm512_maskz_and_pd:706; SKX:       ## %bb.0: ## %entry707; SKX-NEXT:    kmovd %edi, %k1708; SKX-NEXT:    vandpd %zmm0, %zmm1, %zmm0 {%k1} {z}709; SKX-NEXT:    retq710entry:711  %0 = bitcast <8 x double> %__A to <8 x i64>712  %1 = bitcast <8 x double> %__B to <8 x i64>713  %and.i.i = and <8 x i64> %1, %0714  %2 = bitcast <8 x i64> %and.i.i to <8 x double>715  %3 = bitcast i8 %__U to <8 x i1>716  %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer717  ret <8 x double> %4718}719 720define <16 x float> @test_mm512_mask_and_ps(<16 x float> %__W, i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {721; KNL-LABEL: test_mm512_mask_and_ps:722; KNL:       ## %bb.0: ## %entry723; KNL-NEXT:    kmovw %edi, %k1724; KNL-NEXT:    vpandd %zmm1, %zmm2, %zmm0 {%k1}725; KNL-NEXT:    retq726;727; SKX-LABEL: test_mm512_mask_and_ps:728; SKX:       ## %bb.0: ## %entry729; SKX-NEXT:    kmovd %edi, %k1730; SKX-NEXT:    vandps %zmm1, %zmm2, %zmm0 {%k1}731; SKX-NEXT:    retq732entry:733  %0 = bitcast <16 x float> %__A to <16 x i32>734  %1 = bitcast <16 x float> %__B to <16 x i32>735  %and.i.i = and <16 x i32> %1, %0736  %2 = bitcast <16 x i32> %and.i.i to <16 x float>737  %3 = bitcast i16 %__U to <16 x i1>738  %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %__W739  ret <16 x float> %4740}741 742define <16 x float> @test_mm512_maskz_and_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {743; KNL-LABEL: test_mm512_maskz_and_ps:744; KNL:       ## %bb.0: ## %entry745; KNL-NEXT:    kmovw %edi, %k1746; KNL-NEXT:    vpandd %zmm0, %zmm1, %zmm0 {%k1} {z}747; KNL-NEXT:    retq748;749; SKX-LABEL: test_mm512_maskz_and_ps:750; SKX:       ## %bb.0: ## %entry751; SKX-NEXT:    kmovd %edi, %k1752; SKX-NEXT:    vandps %zmm0, %zmm1, %zmm0 {%k1} {z}753; SKX-NEXT:    retq754entry:755  %0 = bitcast <16 x float> %__A to <16 x i32>756  %1 = bitcast <16 x float> %__B to <16 x i32>757  %and.i.i = and <16 x i32> %1, %0758  %2 = bitcast <16 x i32> %and.i.i to <16 x float>759  %3 = bitcast i16 %__U to <16 x i1>760  %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer761  ret <16 x float> %4762}763 764define <8 x double> @test_mm512_mask_andnot_pd(<8 x double> %__W, i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {765; KNL-LABEL: test_mm512_mask_andnot_pd:766; KNL:       ## %bb.0: ## %entry767; KNL-NEXT:    kmovw %edi, %k1768; KNL-NEXT:    vpandnq %zmm2, %zmm1, %zmm0 {%k1}769; KNL-NEXT:    retq770;771; SKX-LABEL: test_mm512_mask_andnot_pd:772; SKX:       ## %bb.0: ## %entry773; SKX-NEXT:    kmovd %edi, %k1774; SKX-NEXT:    vandnpd %zmm2, %zmm1, %zmm0 {%k1}775; SKX-NEXT:    retq776entry:777  %0 = bitcast <8 x double> %__A to <8 x i64>778  %neg.i.i = xor <8 x i64> %0, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>779  %1 = bitcast <8 x double> %__B to <8 x i64>780  %and.i.i = and <8 x i64> %1, %neg.i.i781  %2 = bitcast <8 x i64> %and.i.i to <8 x double>782  %3 = bitcast i8 %__U to <8 x i1>783  %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %__W784  ret <8 x double> %4785}786 787define <8 x double> @test_mm512_maskz_andnot_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) {788; KNL-LABEL: test_mm512_maskz_andnot_pd:789; KNL:       ## %bb.0: ## %entry790; KNL-NEXT:    kmovw %edi, %k1791; KNL-NEXT:    vpandnq %zmm1, %zmm0, %zmm0 {%k1} {z}792; KNL-NEXT:    retq793;794; SKX-LABEL: test_mm512_maskz_andnot_pd:795; SKX:       ## %bb.0: ## %entry796; SKX-NEXT:    kmovd %edi, %k1797; SKX-NEXT:    vandnpd %zmm1, %zmm0, %zmm0 {%k1} {z}798; SKX-NEXT:    retq799entry:800  %0 = bitcast <8 x double> %__A to <8 x i64>801  %neg.i.i = xor <8 x i64> %0, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>802  %1 = bitcast <8 x double> %__B to <8 x i64>803  %and.i.i = and <8 x i64> %1, %neg.i.i804  %2 = bitcast <8 x i64> %and.i.i to <8 x double>805  %3 = bitcast i8 %__U to <8 x i1>806  %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer807  ret <8 x double> %4808}809 810define <16 x float> @test_mm512_mask_andnot_ps(<16 x float> %__W, i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {811; KNL-LABEL: test_mm512_mask_andnot_ps:812; KNL:       ## %bb.0: ## %entry813; KNL-NEXT:    kmovw %edi, %k1814; KNL-NEXT:    vpandnd %zmm2, %zmm1, %zmm0 {%k1}815; KNL-NEXT:    retq816;817; SKX-LABEL: test_mm512_mask_andnot_ps:818; SKX:       ## %bb.0: ## %entry819; SKX-NEXT:    kmovd %edi, %k1820; SKX-NEXT:    vandnps %zmm2, %zmm1, %zmm0 {%k1}821; SKX-NEXT:    retq822entry:823  %0 = bitcast <16 x float> %__A to <16 x i32>824  %neg.i.i = xor <16 x i32> %0, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>825  %1 = bitcast <16 x float> %__B to <16 x i32>826  %and.i.i = and <16 x i32> %1, %neg.i.i827  %2 = bitcast <16 x i32> %and.i.i to <16 x float>828  %3 = bitcast i16 %__U to <16 x i1>829  %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %__W830  ret <16 x float> %4831}832 833define <16 x float> @test_mm512_maskz_andnot_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) {834; KNL-LABEL: test_mm512_maskz_andnot_ps:835; KNL:       ## %bb.0: ## %entry836; KNL-NEXT:    kmovw %edi, %k1837; KNL-NEXT:    vpandnd %zmm1, %zmm0, %zmm0 {%k1} {z}838; KNL-NEXT:    retq839;840; SKX-LABEL: test_mm512_maskz_andnot_ps:841; SKX:       ## %bb.0: ## %entry842; SKX-NEXT:    kmovd %edi, %k1843; SKX-NEXT:    vandnps %zmm1, %zmm0, %zmm0 {%k1} {z}844; SKX-NEXT:    retq845entry:846  %0 = bitcast <16 x float> %__A to <16 x i32>847  %neg.i.i = xor <16 x i32> %0, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>848  %1 = bitcast <16 x float> %__B to <16 x i32>849  %and.i.i = and <16 x i32> %1, %neg.i.i850  %2 = bitcast <16 x i32> %and.i.i to <16 x float>851  %3 = bitcast i16 %__U to <16 x i1>852  %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer853  ret <16 x float> %4854}855 856define <16 x i32> @ternlog_and_andn(<16 x i32> %x, <16 x i32> %y, <16 x i32> %z) {857; ALL-LABEL: ternlog_and_andn:858; ALL:       ## %bb.0:859; ALL-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm2 & zmm1 & ~zmm0860; ALL-NEXT:    retq861  %a = xor <16 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>862  %b = and <16 x i32> %y, %a863  %c = and <16 x i32> %b, %z864  ret <16 x i32> %c865}866 867define <16 x i32> @ternlog_or_andn(<16 x i32> %x, <16 x i32> %y, <16 x i32> %z) {868; ALL-LABEL: ternlog_or_andn:869; ALL:       ## %bb.0:870; ALL-NEXT:    vpternlogd {{.*#+}} zmm0 = (zmm1 & ~zmm0) | zmm2871; ALL-NEXT:    retq872  %a = xor <16 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>873  %b = and <16 x i32> %y, %a874  %c = or <16 x i32> %b, %z875  ret <16 x i32> %c876}877 878define <16 x i32> @ternlog_xor_andn(<16 x i32> %x, <16 x i32> %y, <16 x i32> %z) {879; ALL-LABEL: ternlog_xor_andn:880; ALL:       ## %bb.0:881; ALL-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm2 ^ (zmm1 & ~zmm0)882; ALL-NEXT:    retq883  %a = xor <16 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>884  %b = and <16 x i32> %y, %a885  %c = xor <16 x i32> %b, %z886  ret <16 x i32> %c887}888 889define <16 x i32> @ternlog_or_and_mask(<16 x i32> %x, <16 x i32> %y) {890; ALL-LABEL: ternlog_or_and_mask:891; ALL:       ## %bb.0:892; ALL-NEXT:    vpternlogd {{.*#+}} zmm0 = (zmm0 & m32bcst) | zmm1893; ALL-NEXT:    retq894  %a = and <16 x i32> %x, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>895  %b = or <16 x i32> %a, %y896  ret <16 x i32> %b897}898 899define <8 x i64> @ternlog_xor_and_mask(<8 x i64> %x, <8 x i64> %y) {900; ALL-LABEL: ternlog_xor_and_mask:901; ALL:       ## %bb.0:902; ALL-NEXT:    vpternlogq {{.*#+}} zmm0 = zmm1 ^ (zmm0 & m64bcst)903; ALL-NEXT:    retq904  %a = and <8 x i64> %x, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>905  %b = xor <8 x i64> %a, %y906  ret <8 x i64> %b907}908 909define <16 x i32> @ternlog_maskz_or_and_mask(<16 x i32> %x, <16 x i32> %y, <16 x i32> %mask) {910; ALL-LABEL: ternlog_maskz_or_and_mask:911; ALL:       ## %bb.0:912; ALL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm3913; ALL-NEXT:    vpsrad $31, %zmm2, %zmm0914; ALL-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 & (zmm3 | zmm1)915; ALL-NEXT:    retq916  %m = icmp slt <16 x i32> %mask, zeroinitializer917  %a = and <16 x i32> %x, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>918  %b = or <16 x i32> %a, %y919  %c = select <16 x i1> %m, <16 x i32> %b, <16 x i32> zeroinitializer920  ret <16 x i32> %c921}922 923define <8 x i64> @ternlog_maskz_xor_and_mask(<8 x i64> %x, <8 x i64> %y, <8 x i64> %mask) {924; ALL-LABEL: ternlog_maskz_xor_and_mask:925; ALL:       ## %bb.0:926; ALL-NEXT:    vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm3927; ALL-NEXT:    vpsraq $63, %zmm2, %zmm0928; ALL-NEXT:    vpternlogq {{.*#+}} zmm0 = zmm0 & (zmm3 ^ zmm1)929; ALL-NEXT:    retq930  %m = icmp slt <8 x i64> %mask, zeroinitializer931  %a = and <8 x i64> %x, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>932  %b = xor <8 x i64> %a, %y933  %c = select <8 x i1> %m, <8 x i64> %b, <8 x i64> zeroinitializer934  ret <8 x i64> %c935}936 937define <16 x i32> @ternlog_maskx_or_and_mask(<16 x i32> %x, <16 x i32> %y, <16 x i32> %mask) {938; KNL-LABEL: ternlog_maskx_or_and_mask:939; KNL:       ## %bb.0:940; KNL-NEXT:    vpxor %xmm3, %xmm3, %xmm3941; KNL-NEXT:    vpcmpgtd %zmm2, %zmm3, %k1942; KNL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm2943; KNL-NEXT:    vpord %zmm1, %zmm2, %zmm0 {%k1}944; KNL-NEXT:    retq945;946; SKX-LABEL: ternlog_maskx_or_and_mask:947; SKX:       ## %bb.0:948; SKX-NEXT:    vpmovd2m %zmm2, %k1949; SKX-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm2950; SKX-NEXT:    vorps %zmm1, %zmm2, %zmm0 {%k1}951; SKX-NEXT:    retq952  %m = icmp slt <16 x i32> %mask, zeroinitializer953  %a = and <16 x i32> %x, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>954  %b = or <16 x i32> %a, %y955  %c = select <16 x i1> %m, <16 x i32> %b, <16 x i32> %x956  ret <16 x i32> %c957}958 959define <16 x i32> @ternlog_masky_or_and_mask(<16 x i32> %x, <16 x i32> %y, <16 x i32> %mask) {960; KNL-LABEL: ternlog_masky_or_and_mask:961; KNL:       ## %bb.0:962; KNL-NEXT:    vpxor %xmm3, %xmm3, %xmm3963; KNL-NEXT:    vpcmpgtd %zmm2, %zmm3, %k1964; KNL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm0965; KNL-NEXT:    vpord %zmm1, %zmm0, %zmm1 {%k1}966; KNL-NEXT:    vmovdqa64 %zmm1, %zmm0967; KNL-NEXT:    retq968;969; SKX-LABEL: ternlog_masky_or_and_mask:970; SKX:       ## %bb.0:971; SKX-NEXT:    vpmovd2m %zmm2, %k1972; SKX-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm0973; SKX-NEXT:    vorps %zmm1, %zmm0, %zmm1 {%k1}974; SKX-NEXT:    vmovaps %zmm1, %zmm0975; SKX-NEXT:    retq976  %m = icmp slt <16 x i32> %mask, zeroinitializer977  %a = and <16 x i32> %x, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>978  %b = or <16 x i32> %a, %y979  %c = select <16 x i1> %m, <16 x i32> %b, <16 x i32> %y980  ret <16 x i32> %c981}982 983define <8 x i64> @ternlog_maskx_xor_and_mask(<8 x i64> %x, <8 x i64> %y, <8 x i64> %mask) {984; KNL-LABEL: ternlog_maskx_xor_and_mask:985; KNL:       ## %bb.0:986; KNL-NEXT:    vpxor %xmm3, %xmm3, %xmm3987; KNL-NEXT:    vpcmpgtq %zmm2, %zmm3, %k1988; KNL-NEXT:    vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm2989; KNL-NEXT:    vpxorq %zmm1, %zmm2, %zmm0 {%k1}990; KNL-NEXT:    retq991;992; SKX-LABEL: ternlog_maskx_xor_and_mask:993; SKX:       ## %bb.0:994; SKX-NEXT:    vpmovq2m %zmm2, %k1995; SKX-NEXT:    vandpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm2996; SKX-NEXT:    vxorpd %zmm1, %zmm2, %zmm0 {%k1}997; SKX-NEXT:    retq998  %m = icmp slt <8 x i64> %mask, zeroinitializer999  %a = and <8 x i64> %x, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>1000  %b = xor <8 x i64> %a, %y1001  %c = select <8 x i1> %m, <8 x i64> %b, <8 x i64> %x1002  ret <8 x i64> %c1003}1004 1005define <8 x i64> @ternlog_masky_xor_and_mask(<8 x i64> %x, <8 x i64> %y, <8 x i64> %mask) {1006; KNL-LABEL: ternlog_masky_xor_and_mask:1007; KNL:       ## %bb.0:1008; KNL-NEXT:    vpxor %xmm3, %xmm3, %xmm31009; KNL-NEXT:    vpcmpgtq %zmm2, %zmm3, %k11010; KNL-NEXT:    vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm01011; KNL-NEXT:    vpxorq %zmm1, %zmm0, %zmm1 {%k1}1012; KNL-NEXT:    vmovdqa64 %zmm1, %zmm01013; KNL-NEXT:    retq1014;1015; SKX-LABEL: ternlog_masky_xor_and_mask:1016; SKX:       ## %bb.0:1017; SKX-NEXT:    vpmovq2m %zmm2, %k11018; SKX-NEXT:    vandpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm01019; SKX-NEXT:    vxorpd %zmm1, %zmm0, %zmm1 {%k1}1020; SKX-NEXT:    vmovapd %zmm1, %zmm01021; SKX-NEXT:    retq1022  %m = icmp slt <8 x i64> %mask, zeroinitializer1023  %a = and <8 x i64> %x, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>1024  %b = xor <8 x i64> %a, %y1025  %c = select <8 x i1> %m, <8 x i64> %b, <8 x i64> %y1026  ret <8 x i64> %c1027}1028