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