AVX-512 set: added mask operations, lowering BUILD_VECTOR for i1 vector types.
[oota-llvm.git] / include / llvm / IR / IntrinsicsX86.td
index 69e0ab4fa2ed9edf11ea32408dc9b405bf42419e..c7675c2ffd9c047d559b6b2d4d89d7a38b982222 100644 (file)
@@ -2578,3 +2578,42 @@ let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_xtest : GCCBuiltin<"__builtin_ia32_xtest">,
               Intrinsic<[llvm_i32_ty], [], []>;
 }
+// AVX-512
+
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  // Mask instructions
+  // 16-bit mask
+  def int_x86_kadd_v16i1 : GCCBuiltin<"__builtin_ia32_kaddw">,
+              Intrinsic<[llvm_v16i1_ty], [llvm_v16i1_ty, llvm_v16i1_ty],
+                         [IntrNoMem]>;
+  def int_x86_kand_v16i1 : GCCBuiltin<"__builtin_ia32_kandw">,
+              Intrinsic<[llvm_v16i1_ty], [llvm_v16i1_ty, llvm_v16i1_ty],
+                         [IntrNoMem]>;
+  def int_x86_kandn_v16i1 : GCCBuiltin<"__builtin_ia32_kandnw">,
+              Intrinsic<[llvm_v16i1_ty], [llvm_v16i1_ty, llvm_v16i1_ty],
+                         [IntrNoMem]>;
+  def int_x86_knot_v16i1 : GCCBuiltin<"__builtin_ia32_knotw">,
+              Intrinsic<[llvm_v16i1_ty], [llvm_v16i1_ty], [IntrNoMem]>;
+  def int_x86_kor_v16i1 : GCCBuiltin<"__builtin_ia32_korw">,
+              Intrinsic<[llvm_v16i1_ty], [llvm_v16i1_ty, llvm_v16i1_ty],
+                         [IntrNoMem]>;
+  def int_x86_kxor_v16i1 : GCCBuiltin<"__builtin_ia32_kxorw">,
+              Intrinsic<[llvm_v16i1_ty], [llvm_v16i1_ty, llvm_v16i1_ty],
+                         [IntrNoMem]>;
+  def int_x86_kxnor_v16i1 : GCCBuiltin<"__builtin_ia32_kxnorw">,
+              Intrinsic<[llvm_v16i1_ty], [llvm_v16i1_ty, llvm_v16i1_ty],
+                         [IntrNoMem]>;
+  def int_x86_mask2int_v16i1 : GCCBuiltin<"__builtin_ia32_mask2intw">,
+              Intrinsic<[llvm_i32_ty], [llvm_v16i1_ty], [IntrNoMem]>;
+  def int_x86_int2mask_v16i1 : GCCBuiltin<"__builtin_ia32_int2maskw">,
+              Intrinsic<[llvm_v16i1_ty], [llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_kunpck_v16i1 : GCCBuiltin<"__builtin_ia32_kunpckbw">,
+              Intrinsic<[llvm_v16i1_ty], [llvm_v8i1_ty, llvm_v8i1_ty],
+                         [IntrNoMem]>;
+  def int_x86_avx512_kortestz : GCCBuiltin<"__builtin_ia32_kortestz">,
+              Intrinsic<[llvm_i32_ty], [llvm_i16_ty, llvm_i16_ty],
+                        [IntrNoMem]>;
+  def int_x86_avx512_kortestc : GCCBuiltin<"__builtin_ia32_kortestc">,
+              Intrinsic<[llvm_i32_ty], [llvm_i16_ty, llvm_i16_ty],
+                        [IntrNoMem]>;
+}