%c = xor <16 x i32> %b, %z
ret <16 x i32> %c
}
+
+define <16 x i32> @ternlog_or_and_mask(<16 x i32> %x, <16 x i32> %y) {
+; KNL-LABEL: ternlog_or_and_mask:
+; KNL: ## %bb.0:
+; KNL-NEXT: vpandq {{.*}}(%rip), %zmm0, %zmm0
+; KNL-NEXT: vpord %zmm1, %zmm0, %zmm0
+; KNL-NEXT: retq
+;
+; SKX-LABEL: ternlog_or_and_mask:
+; SKX: ## %bb.0:
+; SKX-NEXT: vandps {{.*}}(%rip), %zmm0, %zmm0
+; SKX-NEXT: vorps %zmm1, %zmm0, %zmm0
+; SKX-NEXT: retq
+ %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>
+ %b = or <16 x i32> %a, %y
+ ret <16 x i32> %b
+}
+
+define <8 x i64> @ternlog_xor_and_mask(<8 x i64> %x, <8 x i64> %y) {
+; KNL-LABEL: ternlog_xor_and_mask:
+; KNL: ## %bb.0:
+; KNL-NEXT: vpandd {{.*}}(%rip), %zmm0, %zmm0
+; KNL-NEXT: vpxorq %zmm1, %zmm0, %zmm0
+; KNL-NEXT: retq
+;
+; SKX-LABEL: ternlog_xor_and_mask:
+; SKX: ## %bb.0:
+; SKX-NEXT: vandps {{.*}}(%rip), %zmm0, %zmm0
+; SKX-NEXT: vxorps %zmm1, %zmm0, %zmm0
+; SKX-NEXT: retq
+ %a = and <8 x i64> %x, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
+ %b = xor <8 x i64> %a, %y
+ ret <8 x i64> %b
+}
%c = xor <4 x i32> %b, %z
ret <4 x i32> %c
}
+
+define <4 x i32> @ternlog_or_and_mask(<4 x i32> %x, <4 x i32> %y) {
+; CHECK-LABEL: ternlog_or_and_mask:
+; CHECK: ## %bb.0:
+; CHECK-NEXT: vandps {{.*}}(%rip), %xmm0, %xmm0
+; CHECK-NEXT: vorps %xmm1, %xmm0, %xmm0
+; CHECK-NEXT: retq
+ %a = and <4 x i32> %x, <i32 255, i32 255, i32 255, i32 255>
+ %b = or <4 x i32> %a, %y
+ ret <4 x i32> %b
+}
+
+define <8 x i32> @ternlog_or_and_mask_ymm(<8 x i32> %x, <8 x i32> %y) {
+; CHECK-LABEL: ternlog_or_and_mask_ymm:
+; CHECK: ## %bb.0:
+; CHECK-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0
+; CHECK-NEXT: vorps %ymm1, %ymm0, %ymm0
+; CHECK-NEXT: retq
+ %a = and <8 x i32> %x, <i32 -16777216, i32 -16777216, i32 -16777216, i32 -16777216, i32 -16777216, i32 -16777216, i32 -16777216, i32 -16777216>
+ %b = or <8 x i32> %a, %y
+ ret <8 x i32> %b
+}
+
+define <2 x i64> @ternlog_xor_and_mask(<2 x i64> %x, <2 x i64> %y) {
+; CHECK-LABEL: ternlog_xor_and_mask:
+; CHECK: ## %bb.0:
+; CHECK-NEXT: vandps {{.*}}(%rip), %xmm0, %xmm0
+; CHECK-NEXT: vxorps %xmm1, %xmm0, %xmm0
+; CHECK-NEXT: retq
+ %a = and <2 x i64> %x, <i64 1099511627775, i64 1099511627775>
+ %b = xor <2 x i64> %a, %y
+ ret <2 x i64> %b
+}
+
+define <4 x i64> @ternlog_xor_and_mask_ymm(<4 x i64> %x, <4 x i64> %y) {
+; CHECK-LABEL: ternlog_xor_and_mask_ymm:
+; CHECK: ## %bb.0:
+; CHECK-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0
+; CHECK-NEXT: vxorps %ymm1, %ymm0, %ymm0
+; CHECK-NEXT: retq
+ %a = and <4 x i64> %x, <i64 72057594037927935, i64 72057594037927935, i64 72057594037927935, i64 72057594037927935>
+ %b = xor <4 x i64> %a, %y
+ ret <4 x i64> %b
+}