Author: Akash Deo
Date: 2026-06-21T10:11:15Z
New Revision: e0cc08dc1121126392df2b832ee060a60cca6dc3

URL: 
https://github.com/llvm/llvm-project/commit/e0cc08dc1121126392df2b832ee060a60cca6dc3
DIFF: 
https://github.com/llvm/llvm-project/commit/e0cc08dc1121126392df2b832ee060a60cca6dc3.diff

LOG: [clang][x86] Add constexpr support for VNNI intrinsics (#190549)

Fixes #161340.

It adds constexpr support for VNNI
intrinsics by modifying their header files, their TableGen definitions,
how they're interpreted in InterpBuiltin.cpp and ExprConstant.cpp, and
adds unit tests in the headers' corresponding unit test files.

Added: 
    

Modified: 
    clang/include/clang/Basic/BuiltinsX86.td
    clang/lib/AST/ByteCode/InterpBuiltin.cpp
    clang/lib/AST/ExprConstant.cpp
    clang/lib/Headers/avx512vlvnniintrin.h
    clang/lib/Headers/avx512vnniintrin.h
    clang/lib/Headers/avxvnniintrin.h
    clang/test/CodeGen/X86/avx512vlvnni-builtins.c
    clang/test/CodeGen/X86/avx512vnni-builtins.c
    clang/test/CodeGen/X86/avxvnni-builtins.c

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/Basic/BuiltinsX86.td 
b/clang/include/clang/Basic/BuiltinsX86.td
index c8c371625b568..f0112a2db0f1d 100644
--- a/clang/include/clang/Basic/BuiltinsX86.td
+++ b/clang/include/clang/Basic/BuiltinsX86.td
@@ -1075,51 +1075,33 @@ let Features = "avx512f", Attributes = [NoThrow, Const, 
Constexpr, RequiredVecto
   def extractf32x4_mask : X86Builtin<"_Vector<4, float>(_Vector<16, float>, 
_Constant int, _Vector<4, float>, unsigned char)">;
 }
 
-let Features = "avx512vl,avx512vnni|avxvnni", Attributes = [NoThrow, Const, 
RequiredVectorWidth<128>] in {
+let Features = "avx512vl,avx512vnni|avxvnni", Attributes = [NoThrow, Const, 
Constexpr, RequiredVectorWidth<128>] in {
   def vpdpbusd128 : X86Builtin<"_Vector<4, int>(_Vector<4, int>, _Vector<16, 
unsigned char>, _Vector<16, char>)">;
-}
-
-let Features = "avx512vl,avx512vnni|avxvnni", Attributes = [NoThrow, Const, 
RequiredVectorWidth<256>] in {
-  def vpdpbusd256 : X86Builtin<"_Vector<8, int>(_Vector<8, int>, _Vector<32, 
unsigned char>, _Vector<32, char>)">;
-}
-
-let Features = "avx512vnni", Attributes = [NoThrow, Const, 
RequiredVectorWidth<512>] in {
-  def vpdpbusd512 : X86Builtin<"_Vector<16, int>(_Vector<16, int>, _Vector<64, 
unsigned char>, _Vector<64, char>)">;
-}
-
-let Features = "avx512vl,avx512vnni|avxvnni", Attributes = [NoThrow, Const, 
RequiredVectorWidth<128>] in {
   def vpdpbusds128 : X86Builtin<"_Vector<4, int>(_Vector<4, int>, _Vector<16, 
unsigned char>, _Vector<16, char>)">;
 }
 
-let Features = "avx512vl,avx512vnni|avxvnni", Attributes = [NoThrow, Const, 
RequiredVectorWidth<256>] in {
+let Features = "avx512vl,avx512vnni|avxvnni", Attributes = [NoThrow, Const, 
Constexpr, RequiredVectorWidth<256>] in {
+  def vpdpbusd256 : X86Builtin<"_Vector<8, int>(_Vector<8, int>, _Vector<32, 
unsigned char>, _Vector<32, char>)">;
   def vpdpbusds256 : X86Builtin<"_Vector<8, int>(_Vector<8, int>, _Vector<32, 
unsigned char>, _Vector<32, char>)">;
 }
 
-let Features = "avx512vnni", Attributes = [NoThrow, Const, 
RequiredVectorWidth<512>] in {
+let Features = "avx512vnni", Attributes = [NoThrow, Const, Constexpr, 
RequiredVectorWidth<512>] in {
+  def vpdpbusd512 : X86Builtin<"_Vector<16, int>(_Vector<16, int>, _Vector<64, 
unsigned char>, _Vector<64, char>)">;
   def vpdpbusds512 : X86Builtin<"_Vector<16, int>(_Vector<16, int>, 
_Vector<64, unsigned char>, _Vector<64, char>)">;
 }
 
-let Features = "avx512vl,avx512vnni|avxvnni", Attributes = [NoThrow, Const, 
RequiredVectorWidth<128>] in {
+let Features = "avx512vl,avx512vnni|avxvnni", Attributes = [NoThrow, Const, 
Constexpr, RequiredVectorWidth<128>] in {
   def vpdpwssd128 : X86Builtin<"_Vector<4, int>(_Vector<4, int>, _Vector<8, 
short>, _Vector<8, short>)">;
-}
-
-let Features = "avx512vl,avx512vnni|avxvnni", Attributes = [NoThrow, Const, 
RequiredVectorWidth<256>] in {
-  def vpdpwssd256 : X86Builtin<"_Vector<8, int>(_Vector<8, int>, _Vector<16, 
short>, _Vector<16, short>)">;
-}
-
-let Features = "avx512vnni", Attributes = [NoThrow, Const, 
RequiredVectorWidth<512>] in {
-  def vpdpwssd512 : X86Builtin<"_Vector<16, int>(_Vector<16, int>, _Vector<32, 
short>, _Vector<32, short>)">;
-}
-
-let Features = "avx512vl,avx512vnni|avxvnni", Attributes = [NoThrow, Const, 
RequiredVectorWidth<128>] in {
   def vpdpwssds128 : X86Builtin<"_Vector<4, int>(_Vector<4, int>, _Vector<8, 
short>, _Vector<8, short>)">;
 }
 
-let Features = "avx512vl,avx512vnni|avxvnni", Attributes = [NoThrow, Const, 
RequiredVectorWidth<256>] in {
+let Features = "avx512vl,avx512vnni|avxvnni", Attributes = [NoThrow, Const, 
Constexpr, RequiredVectorWidth<256>] in {
+  def vpdpwssd256 : X86Builtin<"_Vector<8, int>(_Vector<8, int>, _Vector<16, 
short>, _Vector<16, short>)">;
   def vpdpwssds256 : X86Builtin<"_Vector<8, int>(_Vector<8, int>, _Vector<16, 
short>, _Vector<16, short>)">;
 }
 
-let Features = "avx512vnni", Attributes = [NoThrow, Const, 
RequiredVectorWidth<512>] in {
+let Features = "avx512vnni", Attributes = [NoThrow, Const, Constexpr, 
RequiredVectorWidth<512>] in {
+  def vpdpwssd512 : X86Builtin<"_Vector<16, int>(_Vector<16, int>, _Vector<32, 
short>, _Vector<32, short>)">;
   def vpdpwssds512 : X86Builtin<"_Vector<16, int>(_Vector<16, int>, 
_Vector<32, short>, _Vector<32, short>)">;
 }
 

diff  --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp 
b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
index 5eb1e51f76a00..ab94bb96829ac 100644
--- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp
+++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
@@ -4441,6 +4441,66 @@ static bool interp__builtin_ia32_gfni_mul(InterpState 
&S, CodePtr OpPC,
   return true;
 }
 
+static bool interp__builtin_ia32_vpdp(InterpState &S, CodePtr OpPC,
+                                      const CallExpr *Call, bool IsSaturating) 
{
+  assert(Call->getNumArgs() == 3);
+
+  QualType SrcT = Call->getArg(0)->getType();
+  QualType OpAT = Call->getArg(1)->getType();
+  QualType OpBT = Call->getArg(2)->getType();
+  QualType DstT = Call->getType();
+  if (!SrcT->isVectorType() || !OpAT->isVectorType() || !OpBT->isVectorType() 
||
+      !DstT->isVectorType())
+    return false;
+
+  const auto *SrcVecT = SrcT->castAs<VectorType>();
+  const auto *OpAVecT = OpAT->castAs<VectorType>();
+  const auto *OpBVecT = OpBT->castAs<VectorType>();
+  const auto *DstVecT = DstT->castAs<VectorType>();
+
+  assert(OpAVecT->getNumElements() == OpBVecT->getNumElements());
+
+  unsigned NumSrcElems = SrcVecT->getNumElements();
+  unsigned NumOperandElems = OpAVecT->getNumElements();
+  unsigned ElemsPerLane = NumOperandElems / NumSrcElems;
+
+  PrimType SrcElemT = *S.getContext().classify(SrcVecT->getElementType());
+  PrimType OpAElemT = *S.getContext().classify(OpAVecT->getElementType());
+  PrimType OpBElemT = *S.getContext().classify(OpBVecT->getElementType());
+  PrimType DstElemT = *S.getContext().classify(DstVecT->getElementType());
+
+  assert(SrcElemT == DstElemT);
+
+  const Pointer &OpBPtr = S.Stk.pop<Pointer>();
+  const Pointer &OpAPtr = S.Stk.pop<Pointer>();
+  const Pointer &SrcPtr = S.Stk.pop<Pointer>();
+  const Pointer &Dst = S.Stk.peek<Pointer>();
+
+  for (unsigned I = 0; I != NumSrcElems; ++I) {
+    APSInt Acc;
+    INT_TYPE_SWITCH_NO_BOOL(SrcElemT, { Acc = SrcPtr.elem<T>(I).toAPSInt(); });
+    Acc = Acc.sext(64);
+    for (unsigned J = 0; J != ElemsPerLane; ++J) {
+      APSInt OpA, OpB;
+      INT_TYPE_SWITCH_NO_BOOL(
+          OpAElemT, { OpA = OpAPtr.elem<T>(ElemsPerLane * I + J).toAPSInt(); 
});
+      INT_TYPE_SWITCH_NO_BOOL(
+          OpBElemT, { OpB = OpBPtr.elem<T>(ElemsPerLane * I + J).toAPSInt(); 
});
+      OpA = APSInt(OpA.extend(64), false);
+      OpB = APSInt(OpB.extend(64), false);
+      Acc += OpA * OpB;
+    }
+    if (IsSaturating)
+      Acc = APSInt(Acc.truncSSat(32), false);
+    else
+      Acc = APSInt(Acc.trunc(32), false);
+    INT_TYPE_SWITCH_NO_BOOL(DstElemT,
+                            { Dst.elem<T>(I) = static_cast<T>(Acc); });
+  }
+  Dst.initializeAllElements();
+  return true;
+}
+
 bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call,
                       uint32_t BuiltinID) {
   if (!S.getASTContext().BuiltinInfo.isConstantEvaluated(BuiltinID))
@@ -6505,7 +6565,20 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, 
const CallExpr *Call,
           return EvalScalarMinMaxFp(A, B, RoundingMode, /*IsMin=*/false);
         },
         /*IsScalar=*/true);
-
+  case X86::BI__builtin_ia32_vpdpwssd128:
+  case X86::BI__builtin_ia32_vpdpwssd256:
+  case X86::BI__builtin_ia32_vpdpwssd512:
+  case X86::BI__builtin_ia32_vpdpbusd128:
+  case X86::BI__builtin_ia32_vpdpbusd256:
+  case X86::BI__builtin_ia32_vpdpbusd512:
+    return interp__builtin_ia32_vpdp(S, OpPC, Call, false);
+  case X86::BI__builtin_ia32_vpdpwssds128:
+  case X86::BI__builtin_ia32_vpdpwssds256:
+  case X86::BI__builtin_ia32_vpdpwssds512:
+  case X86::BI__builtin_ia32_vpdpbusds128:
+  case X86::BI__builtin_ia32_vpdpbusds256:
+  case X86::BI__builtin_ia32_vpdpbusds512:
+    return interp__builtin_ia32_vpdp(S, OpPC, Call, true);
   default:
     S.FFDiag(S.Current->getLocation(OpPC),
              diag::note_invalid_subexpr_in_const_expr)

diff  --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index f7d63d91737c0..220a7a22c6992 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -12407,6 +12407,45 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr 
*E) {
     return Success(V, E);
   };
 
+  auto EvalVectorDotProduct = [&](bool IsSaturating) -> bool {
+    APValue Source, OperandA, OperandB;
+    if (!EvaluateVector(E->getArg(0), Source, Info) ||
+        !EvaluateVector(E->getArg(1), OperandA, Info) ||
+        !EvaluateVector(E->getArg(2), OperandB, Info)) {
+      return false;
+    }
+
+    unsigned NumSrcElems = Source.getVectorLength();
+    unsigned NumOperandElems = OperandA.getVectorLength();
+    unsigned ElemsPerLane = NumOperandElems / NumSrcElems;
+
+    assert(OperandA.getVectorLength() == OperandB.getVectorLength());
+
+    SmallVector<APValue, 16> Result;
+    Result.reserve(NumSrcElems);
+    for (unsigned I = 0; I != NumSrcElems; ++I) {
+      APSInt DotProduct = Source.getVectorElt(I).getInt();
+      DotProduct = DotProduct.extend(64);
+      for (unsigned J = 0; J != ElemsPerLane; ++J) {
+        APSInt OpA = APSInt(
+            OperandA.getVectorElt(ElemsPerLane * I + J).getInt().extend(64),
+            false);
+        APSInt OpB = APSInt(
+            OperandB.getVectorElt(ElemsPerLane * I + J).getInt().extend(64),
+            false);
+        DotProduct += OpA * OpB;
+      }
+      if (IsSaturating) {
+        DotProduct = APSInt(DotProduct.truncSSat(32), false);
+      } else {
+        DotProduct = APSInt(DotProduct.trunc(32), false);
+      }
+      Result.push_back(APValue(DotProduct));
+    }
+
+    return Success(APValue(Result.data(), Result.size()), E);
+  };
+
   switch (E->getBuiltinCallee()) {
   default:
     return false;
@@ -14775,6 +14814,20 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr 
*E) {
       return false;
     return Success(R, E);
   }
+  case X86::BI__builtin_ia32_vpdpwssd128:
+  case X86::BI__builtin_ia32_vpdpwssd256:
+  case X86::BI__builtin_ia32_vpdpwssd512:
+  case X86::BI__builtin_ia32_vpdpbusd128:
+  case X86::BI__builtin_ia32_vpdpbusd256:
+  case X86::BI__builtin_ia32_vpdpbusd512:
+    return EvalVectorDotProduct(false);
+  case X86::BI__builtin_ia32_vpdpwssds128:
+  case X86::BI__builtin_ia32_vpdpwssds256:
+  case X86::BI__builtin_ia32_vpdpwssds512:
+  case X86::BI__builtin_ia32_vpdpbusds128:
+  case X86::BI__builtin_ia32_vpdpbusds256:
+  case X86::BI__builtin_ia32_vpdpbusds512:
+    return EvalVectorDotProduct(true);
   }
 }
 

diff  --git a/clang/lib/Headers/avx512vlvnniintrin.h 
b/clang/lib/Headers/avx512vlvnniintrin.h
index 4b8a199af32e5..8dfcab3f01606 100644
--- a/clang/lib/Headers/avx512vlvnniintrin.h
+++ b/clang/lib/Headers/avx512vlvnniintrin.h
@@ -15,6 +15,16 @@
 #define __AVX512VLVNNIINTRIN_H
 
 /* Define the default attributes for the functions in this file. */
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+#define __DEFAULT_FN_ATTRS128                                                  
\
+  __attribute__((__always_inline__, __nodebug__,                               
\
+                 __target__("avx512vl,avx512vnni"),                            
\
+                 __min_vector_width__(128))) constexpr
+#define __DEFAULT_FN_ATTRS256                                                  
\
+  __attribute__((__always_inline__, __nodebug__,                               
\
+                 __target__("avx512vl,avx512vnni"),                            
\
+                 __min_vector_width__(256))) constexpr
+#else
 #define __DEFAULT_FN_ATTRS128                                                  
\
   __attribute__((__always_inline__, __nodebug__,                               
\
                  __target__("avx512vl,avx512vnni"),                            
\
@@ -23,6 +33,7 @@
   __attribute__((__always_inline__, __nodebug__,                               
\
                  __target__("avx512vl,avx512vnni"),                            
\
                  __min_vector_width__(256)))
+#endif
 
 /// Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in \a A with
 /// corresponding signed 8-bit integers in \a B, producing 4 intermediate 
signed
@@ -180,128 +191,112 @@
   ((__m128i)__builtin_ia32_vpdpwssds128((__v4si)(S), (__v8hi)(A), (__v8hi)(B)))
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
-_mm256_mask_dpbusd_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B)
-{
+_mm256_mask_dpbusd_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) {
   return (__m256i)__builtin_ia32_selectd_256(__U,
                                      (__v8si)_mm256_dpbusd_epi32(__S, __A, 
__B),
                                      (__v8si)__S);
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
-_mm256_maskz_dpbusd_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B)
-{
+_mm256_maskz_dpbusd_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) 
{
   return (__m256i)__builtin_ia32_selectd_256(__U,
                                      (__v8si)_mm256_dpbusd_epi32(__S, __A, 
__B),
                                      (__v8si)_mm256_setzero_si256());
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
-_mm256_mask_dpbusds_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B)
-{
+_mm256_mask_dpbusds_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) 
{
   return (__m256i)__builtin_ia32_selectd_256(__U,
                                     (__v8si)_mm256_dpbusds_epi32(__S, __A, 
__B),
                                     (__v8si)__S);
 }
 
-static __inline__ __m256i __DEFAULT_FN_ATTRS256
-_mm256_maskz_dpbusds_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B)
-{
+static __inline__ __m256i __DEFAULT_FN_ATTRS256 _mm256_maskz_dpbusds_epi32(
+    __mmask8 __U, __m256i __S, __m256i __A, __m256i __B) {
   return (__m256i)__builtin_ia32_selectd_256(__U,
                                      (__v8si)_mm256_dpbusds_epi32(__S, __A, 
__B),
                                      (__v8si)_mm256_setzero_si256());
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
-_mm256_mask_dpwssd_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B)
-{
+_mm256_mask_dpwssd_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) {
   return (__m256i)__builtin_ia32_selectd_256(__U,
                                      (__v8si)_mm256_dpwssd_epi32(__S, __A, 
__B),
                                      (__v8si)__S);
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
-_mm256_maskz_dpwssd_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B)
-{
+_mm256_maskz_dpwssd_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) 
{
   return (__m256i)__builtin_ia32_selectd_256(__U,
                                      (__v8si)_mm256_dpwssd_epi32(__S, __A, 
__B),
                                      (__v8si)_mm256_setzero_si256());
 }
 
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
-_mm256_mask_dpwssds_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B)
-{
+_mm256_mask_dpwssds_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) 
{
   return (__m256i)__builtin_ia32_selectd_256(__U,
                                     (__v8si)_mm256_dpwssds_epi32(__S, __A, 
__B),
                                     (__v8si)__S);
 }
 
-static __inline__ __m256i __DEFAULT_FN_ATTRS256
-_mm256_maskz_dpwssds_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B)
-{
+static __inline__ __m256i __DEFAULT_FN_ATTRS256 _mm256_maskz_dpwssds_epi32(
+    __mmask8 __U, __m256i __S, __m256i __A, __m256i __B) {
   return (__m256i)__builtin_ia32_selectd_256(__U,
                                     (__v8si)_mm256_dpwssds_epi32(__S, __A, 
__B),
                                     (__v8si)_mm256_setzero_si256());
 }
 
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
-_mm_mask_dpbusd_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B)
-{
+_mm_mask_dpbusd_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) {
   return (__m128i)__builtin_ia32_selectd_128(__U,
                                         (__v4si)_mm_dpbusd_epi32(__S, __A, 
__B),
                                         (__v4si)__S);
 }
 
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
-_mm_maskz_dpbusd_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B)
-{
+_mm_maskz_dpbusd_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) {
   return (__m128i)__builtin_ia32_selectd_128(__U,
                                         (__v4si)_mm_dpbusd_epi32(__S, __A, 
__B),
                                         (__v4si)_mm_setzero_si128());
 }
 
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
-_mm_mask_dpbusds_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B)
-{
+_mm_mask_dpbusds_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) {
   return (__m128i)__builtin_ia32_selectd_128(__U,
                                        (__v4si)_mm_dpbusds_epi32(__S, __A, 
__B),
                                        (__v4si)__S);
 }
 
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
-_mm_maskz_dpbusds_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B)
-{
+_mm_maskz_dpbusds_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) {
   return (__m128i)__builtin_ia32_selectd_128(__U,
                                        (__v4si)_mm_dpbusds_epi32(__S, __A, 
__B),
                                        (__v4si)_mm_setzero_si128());
 }
 
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
-_mm_mask_dpwssd_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B)
-{
+_mm_mask_dpwssd_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) {
   return (__m128i)__builtin_ia32_selectd_128(__U,
                                         (__v4si)_mm_dpwssd_epi32(__S, __A, 
__B),
                                         (__v4si)__S);
 }
 
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
-_mm_maskz_dpwssd_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B)
-{
+_mm_maskz_dpwssd_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) {
   return (__m128i)__builtin_ia32_selectd_128(__U,
                                         (__v4si)_mm_dpwssd_epi32(__S, __A, 
__B),
                                         (__v4si)_mm_setzero_si128());
 }
 
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
-_mm_mask_dpwssds_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B)
-{
+_mm_mask_dpwssds_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) {
   return (__m128i)__builtin_ia32_selectd_128(__U,
                                        (__v4si)_mm_dpwssds_epi32(__S, __A, 
__B),
                                        (__v4si)__S);
 }
 
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
-_mm_maskz_dpwssds_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B)
-{
+_mm_maskz_dpwssds_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) {
   return (__m128i)__builtin_ia32_selectd_128(__U,
                                        (__v4si)_mm_dpwssds_epi32(__S, __A, 
__B),
                                        (__v4si)_mm_setzero_si128());

diff  --git a/clang/lib/Headers/avx512vnniintrin.h 
b/clang/lib/Headers/avx512vnniintrin.h
index 2ce88efe4a04f..1e245292ab869 100644
--- a/clang/lib/Headers/avx512vnniintrin.h
+++ b/clang/lib/Headers/avx512vnniintrin.h
@@ -15,102 +15,99 @@
 #define __AVX512VNNIINTRIN_H
 
 /* Define the default attributes for the functions in this file. */
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+#define __DEFAULT_FN_ATTRS                                                     
\
+  __attribute__((__always_inline__, __nodebug__, __target__("avx512vnni"),     
\
+                 __min_vector_width__(512))) constexpr
+#else
 #define __DEFAULT_FN_ATTRS                                                     
\
   __attribute__((__always_inline__, __nodebug__, __target__("avx512vnni"),     
\
                  __min_vector_width__(512)))
+#endif
 
-static __inline__ __m512i __DEFAULT_FN_ATTRS
-_mm512_dpbusd_epi32(__m512i __S, __m512i __A, __m512i __B)
-{
+static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_dpbusd_epi32(__m512i __S,
+                                                                 __m512i __A,
+                                                                 __m512i __B) {
   return (__m512i)__builtin_ia32_vpdpbusd512((__v16si)__S, (__v64qu)__A,
                                              (__v64qi)__B);
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS
-_mm512_mask_dpbusd_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B)
-{
+_mm512_mask_dpbusd_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) 
{
   return (__m512i)__builtin_ia32_selectd_512(__U,
                                     (__v16si)_mm512_dpbusd_epi32(__S, __A, 
__B),
                                     (__v16si)__S);
 }
 
-static __inline__ __m512i __DEFAULT_FN_ATTRS
-_mm512_maskz_dpbusd_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B)
-{
+static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_maskz_dpbusd_epi32(
+    __mmask16 __U, __m512i __S, __m512i __A, __m512i __B) {
   return (__m512i)__builtin_ia32_selectd_512(__U,
                                     (__v16si)_mm512_dpbusd_epi32(__S, __A, 
__B),
                                     (__v16si)_mm512_setzero_si512());
 }
 
-static __inline__ __m512i __DEFAULT_FN_ATTRS
-_mm512_dpbusds_epi32(__m512i __S, __m512i __A, __m512i __B)
-{
+static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_dpbusds_epi32(__m512i __S,
+                                                                  __m512i __A,
+                                                                  __m512i __B) 
{
   return (__m512i)__builtin_ia32_vpdpbusds512((__v16si)__S, (__v64qu)__A,
                                               (__v64qi)__B);
 }
 
-static __inline__ __m512i __DEFAULT_FN_ATTRS
-_mm512_mask_dpbusds_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B)
-{
+static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_mask_dpbusds_epi32(
+    __m512i __S, __mmask16 __U, __m512i __A, __m512i __B) {
   return (__m512i)__builtin_ia32_selectd_512(__U,
                                    (__v16si)_mm512_dpbusds_epi32(__S, __A, 
__B),
                                    (__v16si)__S);
 }
 
-static __inline__ __m512i __DEFAULT_FN_ATTRS
-_mm512_maskz_dpbusds_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i 
__B)
-{
+static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_maskz_dpbusds_epi32(
+    __mmask16 __U, __m512i __S, __m512i __A, __m512i __B) {
   return (__m512i)__builtin_ia32_selectd_512(__U,
                                    (__v16si)_mm512_dpbusds_epi32(__S, __A, 
__B),
                                    (__v16si)_mm512_setzero_si512());
 }
 
-static __inline__ __m512i __DEFAULT_FN_ATTRS
-_mm512_dpwssd_epi32(__m512i __S, __m512i __A, __m512i __B)
-{
+static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_dpwssd_epi32(__m512i __S,
+                                                                 __m512i __A,
+                                                                 __m512i __B) {
   return (__m512i)__builtin_ia32_vpdpwssd512((__v16si)__S, (__v32hi)__A,
                                              (__v32hi)__B);
 }
 
 static __inline__ __m512i __DEFAULT_FN_ATTRS
-_mm512_mask_dpwssd_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B)
-{
+_mm512_mask_dpwssd_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) 
{
   return (__m512i)__builtin_ia32_selectd_512(__U,
                                     (__v16si)_mm512_dpwssd_epi32(__S, __A, 
__B),
                                     (__v16si)__S);
 }
 
-static __inline__ __m512i __DEFAULT_FN_ATTRS
-_mm512_maskz_dpwssd_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B)
-{
+static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_maskz_dpwssd_epi32(
+    __mmask16 __U, __m512i __S, __m512i __A, __m512i __B) {
   return (__m512i)__builtin_ia32_selectd_512(__U,
                                     (__v16si)_mm512_dpwssd_epi32(__S, __A, 
__B),
                                     (__v16si)_mm512_setzero_si512());
 }
 
-static __inline__ __m512i __DEFAULT_FN_ATTRS
-_mm512_dpwssds_epi32(__m512i __S, __m512i __A, __m512i __B)
-{
+static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_dpwssds_epi32(__m512i __S,
+                                                                  __m512i __A,
+                                                                  __m512i __B) 
{
   return (__m512i)__builtin_ia32_vpdpwssds512((__v16si)__S, (__v32hi)__A,
                                               (__v32hi)__B);
 }
 
-static __inline__ __m512i __DEFAULT_FN_ATTRS
-_mm512_mask_dpwssds_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B)
-{
+static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_mask_dpwssds_epi32(
+    __m512i __S, __mmask16 __U, __m512i __A, __m512i __B) {
   return (__m512i)__builtin_ia32_selectd_512(__U,
                                    (__v16si)_mm512_dpwssds_epi32(__S, __A, 
__B),
                                    (__v16si)__S);
 }
 
-static __inline__ __m512i __DEFAULT_FN_ATTRS
-_mm512_maskz_dpwssds_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i 
__B)
-{
+static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_maskz_dpwssds_epi32(
+    __mmask16 __U, __m512i __S, __m512i __A, __m512i __B) {
   return (__m512i)__builtin_ia32_selectd_512(__U,
                                    (__v16si)_mm512_dpwssds_epi32(__S, __A, 
__B),
                                    (__v16si)_mm512_setzero_si512());
 }
 
 #undef __DEFAULT_FN_ATTRS
-
 #endif

diff  --git a/clang/lib/Headers/avxvnniintrin.h 
b/clang/lib/Headers/avxvnniintrin.h
index 1d2e8c906effc..c92790b69ffbe 100644
--- a/clang/lib/Headers/avxvnniintrin.h
+++ b/clang/lib/Headers/avxvnniintrin.h
@@ -40,8 +40,21 @@
 
 /* Intrinsics with _avx_ prefix are for compatibility with msvc. */
 /* Define the default attributes for the functions in this file. */
-#define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, 
__target__("avxvnni"), __min_vector_width__(256)))
-#define __DEFAULT_FN_ATTRS128 __attribute__((__always_inline__, __nodebug__, 
__target__("avxvnni"), __min_vector_width__(128)))
+#if defined(__cplusplus) && (__cplusplus >= 201103L)
+#define __DEFAULT_FN_ATTRS256                                                  
\
+  __attribute__((__always_inline__, __nodebug__, __target__("avxvnni"),        
\
+                 __min_vector_width__(256))) constexpr
+#define __DEFAULT_FN_ATTRS128                                                  
\
+  __attribute__((__always_inline__, __nodebug__, __target__("avxvnni"),        
\
+                 __min_vector_width__(128))) constexpr
+#else
+#define __DEFAULT_FN_ATTRS256                                                  
\
+  __attribute__((__always_inline__, __nodebug__, __target__("avxvnni"),        
\
+                 __min_vector_width__(256)))
+#define __DEFAULT_FN_ATTRS128                                                  
\
+  __attribute__((__always_inline__, __nodebug__, __target__("avxvnni"),        
\
+                 __min_vector_width__(128)))
+#endif
 
 /// Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in \a __A 
with
 /// corresponding signed 8-bit integers in \a __B, producing 4 intermediate 
signed
@@ -61,8 +74,7 @@
 ///    DST[MAX:256] := 0
 /// \endcode
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
-_mm256_dpbusd_avx_epi32(__m256i __S, __m256i __A, __m256i __B)
-{
+_mm256_dpbusd_avx_epi32(__m256i __S, __m256i __A, __m256i __B) {
   return (__m256i)__builtin_ia32_vpdpbusd256((__v8si)__S, (__v32qu)__A,
                                              (__v32qi)__B);
 }
@@ -85,8 +97,7 @@ _mm256_dpbusd_avx_epi32(__m256i __S, __m256i __A, __m256i __B)
 ///    DST[MAX:256] := 0
 /// \endcode
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
-_mm256_dpbusds_avx_epi32(__m256i __S, __m256i __A, __m256i __B)
-{
+_mm256_dpbusds_avx_epi32(__m256i __S, __m256i __A, __m256i __B) {
   return (__m256i)__builtin_ia32_vpdpbusds256((__v8si)__S, (__v32qu)__A,
                                               (__v32qi)__B);
 }
@@ -107,8 +118,7 @@ _mm256_dpbusds_avx_epi32(__m256i __S, __m256i __A, __m256i 
__B)
 ///    DST[MAX:256] := 0
 /// \endcode
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
-_mm256_dpwssd_avx_epi32(__m256i __S, __m256i __A, __m256i __B)
-{
+_mm256_dpwssd_avx_epi32(__m256i __S, __m256i __A, __m256i __B) {
   return (__m256i)__builtin_ia32_vpdpwssd256((__v8si)__S, (__v16hi)__A,
                                              (__v16hi)__B);
 }
@@ -129,8 +139,7 @@ _mm256_dpwssd_avx_epi32(__m256i __S, __m256i __A, __m256i 
__B)
 ///    DST[MAX:256] := 0
 /// \endcode
 static __inline__ __m256i __DEFAULT_FN_ATTRS256
-_mm256_dpwssds_avx_epi32(__m256i __S, __m256i __A, __m256i __B)
-{
+_mm256_dpwssds_avx_epi32(__m256i __S, __m256i __A, __m256i __B) {
   return (__m256i)__builtin_ia32_vpdpwssds256((__v8si)__S, (__v16hi)__A,
                                               (__v16hi)__B);
 }
@@ -153,8 +162,7 @@ _mm256_dpwssds_avx_epi32(__m256i __S, __m256i __A, __m256i 
__B)
 ///    DST[MAX:128] := 0
 /// \endcode
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
-_mm_dpbusd_avx_epi32(__m128i __S, __m128i __A, __m128i __B)
-{
+_mm_dpbusd_avx_epi32(__m128i __S, __m128i __A, __m128i __B) {
   return (__m128i)__builtin_ia32_vpdpbusd128((__v4si)__S, (__v16qu)__A,
                                              (__v16qi)__B);
 }
@@ -177,8 +185,7 @@ _mm_dpbusd_avx_epi32(__m128i __S, __m128i __A, __m128i __B)
 ///    DST[MAX:128] := 0
 /// \endcode
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
-_mm_dpbusds_avx_epi32(__m128i __S, __m128i __A, __m128i __B)
-{
+_mm_dpbusds_avx_epi32(__m128i __S, __m128i __A, __m128i __B) {
   return (__m128i)__builtin_ia32_vpdpbusds128((__v4si)__S, (__v16qu)__A,
                                               (__v16qi)__B);
 }
@@ -199,8 +206,7 @@ _mm_dpbusds_avx_epi32(__m128i __S, __m128i __A, __m128i __B)
 ///    DST[MAX:128] := 0
 /// \endcode
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
-_mm_dpwssd_avx_epi32(__m128i __S, __m128i __A, __m128i __B)
-{
+_mm_dpwssd_avx_epi32(__m128i __S, __m128i __A, __m128i __B) {
   return (__m128i)__builtin_ia32_vpdpwssd128((__v4si)__S, (__v8hi)__A,
                                              (__v8hi)__B);
 }
@@ -221,8 +227,7 @@ _mm_dpwssd_avx_epi32(__m128i __S, __m128i __A, __m128i __B)
 ///    DST[MAX:128] := 0
 /// \endcode
 static __inline__ __m128i __DEFAULT_FN_ATTRS128
-_mm_dpwssds_avx_epi32(__m128i __S, __m128i __A, __m128i __B)
-{
+_mm_dpwssds_avx_epi32(__m128i __S, __m128i __A, __m128i __B) {
   return (__m128i)__builtin_ia32_vpdpwssds128((__v4si)__S, (__v8hi)__A,
                                               (__v8hi)__B);
 }

diff  --git a/clang/test/CodeGen/X86/avx512vlvnni-builtins.c 
b/clang/test/CodeGen/X86/avx512vlvnni-builtins.c
index 11dbd717a9f77..a5cd72abea94a 100644
--- a/clang/test/CodeGen/X86/avx512vlvnni-builtins.c
+++ b/clang/test/CodeGen/X86/avx512vlvnni-builtins.c
@@ -3,7 +3,13 @@
 // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s 
-triple=x86_64-apple-darwin -target-feature +avx512vnni -target-feature 
+avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s
 // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s 
-triple=i386-apple-darwin -target-feature +avx512vnni -target-feature +avx512vl 
-emit-llvm -o - -Wall -Werror | FileCheck %s
 
+// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s 
-triple=x86_64-apple-darwin -target-feature +avx512vnni -target-feature 
+avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter 
| FileCheck %s
+// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s 
-triple=x86_64-apple-darwin -target-feature +avx512vnni -target-feature 
+avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter 
| FileCheck %s
+// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s 
-triple=i386-apple-darwin -target-feature +avx512vnni -target-feature +avx512vl 
-emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | 
FileCheck %s
+// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s 
-triple=i386-apple-darwin -target-feature +avx512vnni -target-feature +avx512vl 
-emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | 
FileCheck %s
+
 #include <immintrin.h>
+#include "builtin_test_helpers.h"
 
 __m256i test_mm256_mask_dpbusd_epi32(__m256i __S, __mmask8 __U, __m256i __A, 
__m256i __B) {
   // CHECK-LABEL: test_mm256_mask_dpbusd_epi32
@@ -11,6 +17,13 @@ __m256i test_mm256_mask_dpbusd_epi32(__m256i __S, __mmask8 
__U, __m256i __A, __m
   // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
   return _mm256_mask_dpbusd_epi32(__S, __U, __A, __B);
 }
+TEST_CONSTEXPR(match_v8si(
+  _mm256_mask_dpbusd_epi32(
+    (__m256i)(__v8si){100, 200, 300, 400, 500, 600, 700, 800},
+    (__mmask8)0x55,
+    (__m256i)(__v32qu){1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16, 17,18,19,20, 
21,22,23,24, 25,26,27,28, 29,30,31,32},
+    (__m256i)(__v32qi){-1,2,-3,4, -5,6,-7,8, -9,10,-11,12, -13,14,-15,16, 
-17,18,-19,20, -21,22,-23,24, -25,26,-27,28, -29,30,-31,32}),
+  110, 200, 342, 400, 574, 600, 806, 800));
 
 __m256i test_mm256_maskz_dpbusd_epi32(__mmask8 __U, __m256i __S, __m256i __A, 
__m256i __B) {
   // CHECK-LABEL: test_mm256_maskz_dpbusd_epi32
@@ -18,12 +31,25 @@ __m256i test_mm256_maskz_dpbusd_epi32(__mmask8 __U, __m256i 
__S, __m256i __A, __
   // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
   return _mm256_maskz_dpbusd_epi32(__U, __S, __A, __B);
 }
+TEST_CONSTEXPR(match_v8si(
+  _mm256_maskz_dpbusd_epi32(
+    (__mmask8)0x0F,
+    (__m256i)(__v8si){100, 200, 300, 400, 500, 600, 700, 800},
+    (__m256i)(__v32qu){1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16, 17,18,19,20, 
21,22,23,24, 25,26,27,28, 29,30,31,32},
+    (__m256i)(__v32qi){-1,2,-3,4, -5,6,-7,8, -9,10,-11,12, -13,14,-15,16, 
-17,18,-19,20, -21,22,-23,24, -25,26,-27,28, -29,30,-31,32}),
+  110, 226, 342, 458, 0, 0, 0, 0));
 
 __m256i test_mm256_dpbusd_epi32(__m256i __S, __m256i __A, __m256i __B) {
   // CHECK-LABEL: test_mm256_dpbusd_epi32
   // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpbusd.256(<8 x i32> %{{.*}}, 
<32 x i8> %{{.*}}, <32 x i8> %{{.*}})
   return _mm256_dpbusd_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v8si(
+  _mm256_dpbusd_epi32(
+    ((__m256i)(__v8si){2147483647, -2147483647-1, 2147483647, -2147483647-1, 
2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m256i)(__v32qu){255,1,8,15, 255,22,6,13, 255,20,4,11, 255,18,2,9, 
0,16,23,7, 0,14,21,5, 0,12,19,3, 0,10,17,1}),
+    ((__m256i)(__v32qi){127,-6,-1,4, 127,9,-5,0, -128,5,-9,-4, -128,1,6,-8, 
127,-3,2,7, 127,-7,-2,3, -128,8,-6,-1, -128,4,9,-5})),
+  -2147451218, -2147451095, 2147451027, 2147450966, -2147483602, 2147483523, 
2147483626, -2147483460));
 
 __m256i test_mm256_mask_dpbusds_epi32(__m256i __S, __mmask8 __U, __m256i __A, 
__m256i __B) {
   // CHECK-LABEL: test_mm256_mask_dpbusds_epi32
@@ -31,6 +57,13 @@ __m256i test_mm256_mask_dpbusds_epi32(__m256i __S, __mmask8 
__U, __m256i __A, __
   // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
   return _mm256_mask_dpbusds_epi32(__S, __U, __A, __B);
 }
+TEST_CONSTEXPR(match_v8si(
+  _mm256_mask_dpbusds_epi32(
+    (__m256i)(__v8si){100, 200, 300, 400, 500, 600, 700, 800},
+    (__mmask8)0xAA,
+    (__m256i)(__v32qu){1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16, 17,18,19,20, 
21,22,23,24, 25,26,27,28, 29,30,31,32},
+    (__m256i)(__v32qi){-1,2,-3,4, -5,6,-7,8, -9,10,-11,12, -13,14,-15,16, 
-17,18,-19,20, -21,22,-23,24, -25,26,-27,28, -29,30,-31,32}),
+  100, 226, 300, 458, 500, 690, 700, 922));
 
 __m256i test_mm256_maskz_dpbusds_epi32(__mmask8 __U, __m256i __S, __m256i __A, 
__m256i __B) {
   // CHECK-LABEL: test_mm256_maskz_dpbusds_epi32
@@ -38,12 +71,25 @@ __m256i test_mm256_maskz_dpbusds_epi32(__mmask8 __U, 
__m256i __S, __m256i __A, _
   // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
   return _mm256_maskz_dpbusds_epi32(__U, __S, __A, __B);
 }
+TEST_CONSTEXPR(match_v8si(
+  _mm256_maskz_dpbusds_epi32(
+    (__mmask8)0xFF,
+    (__m256i)(__v8si){100, 200, 300, 400, 500, 600, 700, 800},
+    (__m256i)(__v32qu){1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16, 17,18,19,20, 
21,22,23,24, 25,26,27,28, 29,30,31,32},
+    (__m256i)(__v32qi){-1,2,-3,4, -5,6,-7,8, -9,10,-11,12, -13,14,-15,16, 
-17,18,-19,20, -21,22,-23,24, -25,26,-27,28, -29,30,-31,32}),
+  110, 226, 342, 458, 574, 690, 806, 922));
 
 __m256i test_mm256_dpbusds_epi32(__m256i __S, __m256i __A, __m256i __B) {
   // CHECK-LABEL: test_mm256_dpbusds_epi32
   // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpbusds.256(<8 x i32> %{{.*}}, 
<32 x i8> %{{.*}}, <32 x i8> %{{.*}})
   return _mm256_dpbusds_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v8si(
+  _mm256_dpbusds_epi32(
+    ((__m256i)(__v8si){2147483647, -2147483647-1, 2147483647, -2147483647-1, 
2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m256i)(__v32qu){255,1,8,15, 255,22,6,13, 255,20,4,11, 255,18,2,9, 
0,16,23,7, 0,14,21,5, 0,12,19,3, 0,10,17,1}),
+    ((__m256i)(__v32qi){127,-6,-1,4, 127,9,-5,0, -128,5,-9,-4, -128,1,6,-8, 
127,-3,2,7, 127,-7,-2,3, -128,8,-6,-1, -128,4,9,-5})),
+  2147483647, -2147451095, 2147451027, -2147483647-1, 2147483647, 
-2147483647-1, 2147483626, -2147483460));
 
 __m256i test_mm256_mask_dpwssd_epi32(__m256i __S, __mmask8 __U, __m256i __A, 
__m256i __B) {
   // CHECK-LABEL: test_mm256_mask_dpwssd_epi32
@@ -51,6 +97,13 @@ __m256i test_mm256_mask_dpwssd_epi32(__m256i __S, __mmask8 
__U, __m256i __A, __m
   // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
   return _mm256_mask_dpwssd_epi32(__S, __U, __A, __B);
 }
+TEST_CONSTEXPR(match_v8si(
+  _mm256_mask_dpwssd_epi32(
+    (__m256i)(__v8si){100, 200, 300, 400, 500, 600, 700, 800},
+    (__mmask8)0xF0,
+    (__m256i)(__v16hi){1,2, 3,4, 5,6, 7,8, 9,10, 11,12, 13,14, 15,16},
+    (__m256i)(__v16hi){-1,2, -3,4, -5,6, -7,8, -9,10, -11,12, -13,14, -15,16}),
+  100, 200, 300, 400, 519, 623, 727, 831));
 
 __m256i test_mm256_maskz_dpwssd_epi32(__mmask8 __U, __m256i __S, __m256i __A, 
__m256i __B) {
   // CHECK-LABEL: test_mm256_maskz_dpwssd_epi32
@@ -58,12 +111,25 @@ __m256i test_mm256_maskz_dpwssd_epi32(__mmask8 __U, 
__m256i __S, __m256i __A, __
   // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
   return _mm256_maskz_dpwssd_epi32(__U, __S, __A, __B);
 }
+TEST_CONSTEXPR(match_v8si(
+  _mm256_maskz_dpwssd_epi32(
+    (__mmask8)0x0F,
+    (__m256i)(__v8si){100, 200, 300, 400, 500, 600, 700, 800},
+    (__m256i)(__v16hi){1,2, 3,4, 5,6, 7,8, 9,10, 11,12, 13,14, 15,16},
+    (__m256i)(__v16hi){-1,2, -3,4, -5,6, -7,8, -9,10, -11,12, -13,14, -15,16}),
+  103, 207, 311, 415, 0, 0, 0, 0));
 
 __m256i test_mm256_dpwssd_epi32(__m256i __S, __m256i __A, __m256i __B) {
   // CHECK-LABEL: test_mm256_dpwssd_epi32
   // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpwssd.256(<8 x i32> %{{.*}}, 
<16 x i16> %{{.*}}, <16 x i16> %{{.*}})
   return _mm256_dpwssd_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v8si(
+  _mm256_dpwssd_epi32(
+    ((__m256i)(__v8si){2147483647, -2147483647-1, 2147483647, -2147483647-1, 
2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m256i)(__v16hi){32767,1, 32767,8, 32767,15, 32767,22, -32768,6, 
-32768,13, -32768,20, -32768,4}),
+    ((__m256i)(__v16hi){32767,-6, 32767,-1, -32768,4, -32768,9, 32767,-5, 
32767,0, -32768,5, -32768,-9})),
+  -1073807366, -1073807367, 1073774651, 1073774790, 1073774561, 1073774592, 
-1073741725, -1073741860));
 
 __m256i test_mm256_mask_dpwssds_epi32(__m256i __S, __mmask8 __U, __m256i __A, 
__m256i __B) {
   // CHECK-LABEL: test_mm256_mask_dpwssds_epi32
@@ -71,6 +137,13 @@ __m256i test_mm256_mask_dpwssds_epi32(__m256i __S, __mmask8 
__U, __m256i __A, __
   // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
   return _mm256_mask_dpwssds_epi32(__S, __U, __A, __B);
 }
+TEST_CONSTEXPR(match_v8si(
+  _mm256_mask_dpwssds_epi32(
+    (__m256i)(__v8si){100, 200, 300, 400, 500, 600, 700, 800},
+    (__mmask8)0xAA,
+    (__m256i)(__v16hi){1,2, 3,4, 5,6, 7,8, 9,10, 11,12, 13,14, 15,16},
+    (__m256i)(__v16hi){-1,2, -3,4, -5,6, -7,8, -9,10, -11,12, -13,14, -15,16}),
+  100, 207, 300, 415, 500, 623, 700, 831));
 
 __m256i test_mm256_maskz_dpwssds_epi32(__mmask8 __U, __m256i __S, __m256i __A, 
__m256i __B) {
   // CHECK-LABEL: test_mm256_maskz_dpwssds_epi32
@@ -78,12 +151,25 @@ __m256i test_mm256_maskz_dpwssds_epi32(__mmask8 __U, 
__m256i __S, __m256i __A, _
   // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
   return _mm256_maskz_dpwssds_epi32(__U, __S, __A, __B);
 }
+TEST_CONSTEXPR(match_v8si(
+  _mm256_maskz_dpwssds_epi32(
+    (__mmask8)0xFF,
+    (__m256i)(__v8si){100, 200, 300, 400, 500, 600, 700, 800},
+    (__m256i)(__v16hi){1,2, 3,4, 5,6, 7,8, 9,10, 11,12, 13,14, 15,16},
+    (__m256i)(__v16hi){-1,2, -3,4, -5,6, -7,8, -9,10, -11,12, -13,14, -15,16}),
+  103, 207, 311, 415, 519, 623, 727, 831));
 
 __m256i test_mm256_dpwssds_epi32(__m256i __S, __m256i __A, __m256i __B) {
   // CHECK-LABEL: test_mm256_dpwssds_epi32
   // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpwssds.256(<8 x i32> %{{.*}}, 
<16 x i16> %{{.*}}, <16 x i16> %{{.*}})
   return _mm256_dpwssds_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v8si(
+  _mm256_dpwssds_epi32(
+    ((__m256i)(__v8si){2147483647, -2147483647-1, 2147483647, -2147483647-1, 
2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m256i)(__v16hi){32767,1, 32767,8, 32767,15, 32767,22, -32768,6, 
-32768,13, -32768,20, -32768,4}),
+    ((__m256i)(__v16hi){32767,-6, 32767,-1, -32768,4, -32768,9, 32767,-5, 
32767,0, -32768,5, -32768,-9})),
+  2147483647, -1073807367, 1073774651, -2147483647-1, 1073774561, 
-2147483647-1, 2147483647, -1073741860));
 
 __m128i test_mm_mask_dpbusd_epi32(__m128i __S, __mmask8 __U, __m128i __A, 
__m128i __B) {
   // CHECK-LABEL: test_mm_mask_dpbusd_epi32
@@ -91,6 +177,13 @@ __m128i test_mm_mask_dpbusd_epi32(__m128i __S, __mmask8 
__U, __m128i __A, __m128
   // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
   return _mm_mask_dpbusd_epi32(__S, __U, __A, __B);
 }
+TEST_CONSTEXPR(match_v4si(
+  _mm_mask_dpbusd_epi32(
+    (__m128i)(__v4si){1000, 2000, 3000, 4000},
+    (__mmask8)0x05,
+    (__m128i)(__v16qu){1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16},
+    (__m128i)(__v16qi){-1,2,-3,4, -5,6,-7,8, -9,10,-11,12, -13,14,-15,16}),
+  1010, 2000, 3042, 4000));
 
 __m128i test_mm_maskz_dpbusd_epi32(__mmask8 __U, __m128i __S, __m128i __A, 
__m128i __B) {
   // CHECK-LABEL: test_mm_maskz_dpbusd_epi32
@@ -98,12 +191,31 @@ __m128i test_mm_maskz_dpbusd_epi32(__mmask8 __U, __m128i 
__S, __m128i __A, __m12
   // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
   return _mm_maskz_dpbusd_epi32(__U, __S, __A, __B);
 }
+TEST_CONSTEXPR(match_v4si(
+  _mm_maskz_dpbusd_epi32(
+    (__mmask8)0x03,
+    (__m128i)(__v4si){1000, 2000, 3000, 4000},
+    (__m128i)(__v16qu){1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16},
+    (__m128i)(__v16qi){-1,2,-3,4, -5,6,-7,8, -9,10,-11,12, -13,14,-15,16}),
+  1010, 2026, 0, 0));
 
 __m128i test_mm_dpbusd_epi32(__m128i __S, __m128i __A, __m128i __B) {
   // CHECK-LABEL: test_mm_dpbusd_epi32
   // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpbusd.128(<4 x i32> %{{.*}}, 
<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
   return _mm_dpbusd_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpbusd_epi32(
+    ((__m128i)(__v4si){2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m128i)(__v16qu){255,1,8,15, 255,22,6,13, 0,20,4,11, 0,18,2,9}),
+    ((__m128i)(__v16qi){127,-6,-1,4, -128,9,-5,0, 127,5,-9,-4, -128,1,6,-8})),
+  -2147451218, 2147451176, -2147483629, 2147483606));
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpbusd_epi32(
+    ((__m128i)(__v4si){-2147483647-1, 2147483647, -2147483647-1, 2147483647}),
+    ((__m128i)(__v16qu){255,1,8,15, 255,22,6,13, 0,20,4,11, 0,18,2,9}),
+    ((__m128i)(__v16qi){127,-6,-1,4, -128,9,-5,0, 127,5,-9,-4, -128,1,6,-8})),
+  -2147451217, 2147451175, -2147483628, 2147483605));
 
 __m128i test_mm_mask_dpbusds_epi32(__m128i __S, __mmask8 __U, __m128i __A, 
__m128i __B) {
   // CHECK-LABEL: test_mm_mask_dpbusds_epi32
@@ -111,6 +223,13 @@ __m128i test_mm_mask_dpbusds_epi32(__m128i __S, __mmask8 
__U, __m128i __A, __m12
   // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
   return _mm_mask_dpbusds_epi32(__S, __U, __A, __B);
 }
+TEST_CONSTEXPR(match_v4si(
+  _mm_mask_dpbusds_epi32(
+    (__m128i)(__v4si){1000, 2000, 3000, 4000},
+    (__mmask8)0x0A,
+    (__m128i)(__v16qu){1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16},
+    (__m128i)(__v16qi){-1,2,-3,4, -5,6,-7,8, -9,10,-11,12, -13,14,-15,16}),
+  1000, 2026, 3000, 4058));
 
 __m128i test_mm_maskz_dpbusds_epi32(__mmask8 __U, __m128i __S, __m128i __A, 
__m128i __B) {
   // CHECK-LABEL: test_mm_maskz_dpbusds_epi32
@@ -118,12 +237,31 @@ __m128i test_mm_maskz_dpbusds_epi32(__mmask8 __U, __m128i 
__S, __m128i __A, __m1
   // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
   return _mm_maskz_dpbusds_epi32(__U, __S, __A, __B);
 }
+TEST_CONSTEXPR(match_v4si(
+  _mm_maskz_dpbusds_epi32(
+    (__mmask8)0x0F,
+    (__m128i)(__v4si){1000, 2000, 3000, 4000},
+    (__m128i)(__v16qu){1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16},
+    (__m128i)(__v16qi){-1,2,-3,4, -5,6,-7,8, -9,10,-11,12, -13,14,-15,16}),
+  1010, 2026, 3042, 4058));
 
 __m128i test_mm_dpbusds_epi32(__m128i __S, __m128i __A, __m128i __B) {
   // CHECK-LABEL: test_mm_dpbusds_epi32
   // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpbusds.128(<4 x i32> %{{.*}}, 
<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
   return _mm_dpbusds_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpbusds_epi32(
+    ((__m128i)(__v4si){2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m128i)(__v16qu){255,1,8,15, 255,22,6,13, 0,20,4,11, 0,18,2,9}),
+    ((__m128i)(__v16qi){127,-6,-1,4, -128,9,-5,0, 127,5,-9,-4, -128,1,6,-8})),
+  2147483647, -2147483647-1, 2147483647, -2147483647-1));
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpbusds_epi32(
+    ((__m128i)(__v4si){-2147483647-1, 2147483647, -2147483647-1, 2147483647}),
+    ((__m128i)(__v16qu){255,1,8,15, 255,22,6,13, 0,20,4,11, 0,18,2,9}),
+    ((__m128i)(__v16qi){127,-6,-1,4, -128,9,-5,0, 127,5,-9,-4, -128,1,6,-8})),
+  -2147451217, 2147451175, -2147483628, 2147483605));
 
 __m128i test_mm_mask_dpwssd_epi32(__m128i __S, __mmask8 __U, __m128i __A, 
__m128i __B) {
   // CHECK-LABEL: test_mm_mask_dpwssd_epi32
@@ -131,6 +269,13 @@ __m128i test_mm_mask_dpwssd_epi32(__m128i __S, __mmask8 
__U, __m128i __A, __m128
   // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
   return _mm_mask_dpwssd_epi32(__S, __U, __A, __B);
 }
+TEST_CONSTEXPR(match_v4si(
+  _mm_mask_dpwssd_epi32(
+    (__m128i)(__v4si){1000, 2000, 3000, 4000},
+    (__mmask8)0x05,
+    (__m128i)(__v8hi){1,2, 3,4, 5,6, 7,8},
+    (__m128i)(__v8hi){-1,2, -3,4, -5,6, -7,8}),
+  1003, 2000, 3011, 4000));
 
 __m128i test_mm_maskz_dpwssd_epi32(__mmask8 __U, __m128i __S, __m128i __A, 
__m128i __B) {
   // CHECK-LABEL: test_mm_maskz_dpwssd_epi32
@@ -138,12 +283,31 @@ __m128i test_mm_maskz_dpwssd_epi32(__mmask8 __U, __m128i 
__S, __m128i __A, __m12
   // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
   return _mm_maskz_dpwssd_epi32(__U, __S, __A, __B);
 }
+TEST_CONSTEXPR(match_v4si(
+  _mm_maskz_dpwssd_epi32(
+    (__mmask8)0x03,
+    (__m128i)(__v4si){1000, 2000, 3000, 4000},
+    (__m128i)(__v8hi){1,2, 3,4, 5,6, 7,8},
+    (__m128i)(__v8hi){-1,2, -3,4, -5,6, -7,8}),
+  1003, 2007, 0, 0));
 
 __m128i test_mm_dpwssd_epi32(__m128i __S, __m128i __A, __m128i __B) {
   // CHECK-LABEL: test_mm_dpwssd_epi32
   // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpwssd.128(<4 x i32> %{{.*}}, <8 
x i16> %{{.*}}, <8 x i16> %{{.*}})
   return _mm_dpwssd_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpwssd_epi32(
+    ((__m128i)(__v4si){2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m128i)(__v8hi){32767,1, 32767,8, -32768,15, -32768,22}),
+    ((__m128i)(__v8hi){32767,-6, -32768,-1, 32767,4, -32768,9})),
+  -1073807366, 1073774584, 1073774651, -1073741626));
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpwssd_epi32(
+    ((__m128i)(__v4si){-2147483647-1, 2147483647, -2147483647-1, 2147483647}),
+    ((__m128i)(__v8hi){32767,1, 32767,8, -32768,15, -32768,22}),
+    ((__m128i)(__v8hi){32767,-6, -32768,-1, 32767,4, -32768,9})),
+  -1073807365, 1073774583, 1073774652, -1073741627));
 
 __m128i test_mm_mask_dpwssds_epi32(__m128i __S, __mmask8 __U, __m128i __A, 
__m128i __B) {
   // CHECK-LABEL: test_mm_mask_dpwssds_epi32
@@ -151,6 +315,13 @@ __m128i test_mm_mask_dpwssds_epi32(__m128i __S, __mmask8 
__U, __m128i __A, __m12
   // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
   return _mm_mask_dpwssds_epi32(__S, __U, __A, __B);
 }
+TEST_CONSTEXPR(match_v4si(
+  _mm_mask_dpwssds_epi32(
+    (__m128i)(__v4si){1000, 2000, 3000, 4000},
+    (__mmask8)0x0A,
+    (__m128i)(__v8hi){1,2, 3,4, 5,6, 7,8},
+    (__m128i)(__v8hi){-1,2, -3,4, -5,6, -7,8}),
+  1000, 2007, 3000, 4015));
 
 __m128i test_mm_maskz_dpwssds_epi32(__mmask8 __U, __m128i __S, __m128i __A, 
__m128i __B) {
   // CHECK-LABEL: test_mm_maskz_dpwssds_epi32
@@ -158,10 +329,28 @@ __m128i test_mm_maskz_dpwssds_epi32(__mmask8 __U, __m128i 
__S, __m128i __A, __m1
   // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
   return _mm_maskz_dpwssds_epi32(__U, __S, __A, __B);
 }
+TEST_CONSTEXPR(match_v4si(
+  _mm_maskz_dpwssds_epi32(
+    (__mmask8)0x0F,
+    (__m128i)(__v4si){1000, 2000, 3000, 4000},
+    (__m128i)(__v8hi){1,2, 3,4, 5,6, 7,8},
+    (__m128i)(__v8hi){-1,2, -3,4, -5,6, -7,8}),
+  1003, 2007, 3011, 4015));
 
 __m128i test_mm_dpwssds_epi32(__m128i __S, __m128i __A, __m128i __B) {
   // CHECK-LABEL: test_mm_dpwssds_epi32
   // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpwssds.128(<4 x i32> %{{.*}}, 
<8 x i16> %{{.*}}, <8 x i16> %{{.*}})
   return _mm_dpwssds_epi32(__S, __A, __B);
 }
-
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpwssds_epi32(
+    ((__m128i)(__v4si){2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m128i)(__v8hi){32767,1, 32767,8, -32768,15, -32768,22}),
+    ((__m128i)(__v8hi){32767,-6, -32768,-1, 32767,4, -32768,9})),
+  2147483647, -2147483647-1, 1073774651, -1073741626));
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpwssds_epi32(
+    ((__m128i)(__v4si){-2147483647-1, 2147483647, -2147483647-1, 2147483647}),
+    ((__m128i)(__v8hi){32767,1, 32767,8, -32768,15, -32768,22}),
+    ((__m128i)(__v8hi){32767,-6, -32768,-1, 32767,4, -32768,9})),
+  -1073807365, 1073774583, -2147483647-1, 2147483647));

diff  --git a/clang/test/CodeGen/X86/avx512vnni-builtins.c 
b/clang/test/CodeGen/X86/avx512vnni-builtins.c
index 6b8465206eedb..c1a8229e53669 100644
--- a/clang/test/CodeGen/X86/avx512vnni-builtins.c
+++ b/clang/test/CodeGen/X86/avx512vnni-builtins.c
@@ -3,7 +3,13 @@
 //  RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s 
-triple=x86_64-apple-darwin -target-feature +avx512vnni -emit-llvm -o - -Wall 
-Werror | FileCheck %s
 //  RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s 
-triple=i386-apple-darwin -target-feature +avx512vnni -emit-llvm -o - -Wall 
-Werror | FileCheck %s
 
+//  RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s 
-triple=x86_64-apple-darwin -target-feature +avx512vnni -emit-llvm -o - -Wall 
-Werror -fexperimental-new-constant-interpreter | FileCheck %s
+//  RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s 
-triple=x86_64-apple-darwin -target-feature +avx512vnni -emit-llvm -o - -Wall 
-Werror -fexperimental-new-constant-interpreter | FileCheck %s
+//  RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s 
-triple=i386-apple-darwin -target-feature +avx512vnni -emit-llvm -o - -Wall 
-Werror -fexperimental-new-constant-interpreter | FileCheck %s
+//  RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s 
-triple=i386-apple-darwin -target-feature +avx512vnni -emit-llvm -o - -Wall 
-Werror -fexperimental-new-constant-interpreter | FileCheck %s
+
 #include <immintrin.h>
+#include "builtin_test_helpers.h"
 
 __m512i test_mm512_mask_dpbusd_epi32(__m512i __S, __mmask16 __U, __m512i __A, 
__m512i __B) {
   // CHECK-LABEL: test_mm512_mask_dpbusd_epi32
@@ -11,6 +17,13 @@ __m512i test_mm512_mask_dpbusd_epi32(__m512i __S, __mmask16 
__U, __m512i __A, __
   // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
   return _mm512_mask_dpbusd_epi32(__S, __U, __A, __B);
 }
+TEST_CONSTEXPR(match_v16si(
+  _mm512_mask_dpbusd_epi32(
+    (__m512i)(__v16si){100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 
1100, 1200, 1300, 1400, 1500, 1600},
+    (__mmask16)0x5555,
+    (__m512i)(__v64qu){1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16, 17,18,19,20, 
21,22,23,24, 25,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, 41,42,43,44, 
45,46,47,48, 49,50,51,52, 53,54,55,56, 57,58,59,60, 61,62,63,64},
+    (__m512i)(__v64qi){-1,2,-3,4, -5,6,-7,8, -9,10,-11,12, -13,14,-15,16, 
-17,18,-19,20, -21,22,-23,24, -25,26,-27,28, -29,30,-31,32, -33,34,-35,36, 
-37,38,-39,40, -41,42,-43,44, -45,46,-47,48, -49,50,-51,52, -53,54,-55,56, 
-57,58,-59,60, -61,62,-63,64}),
+  110, 200, 342, 400, 574, 600, 806, 800, 1038, 1000, 1270, 1200, 1502, 1400, 
1734, 1600));
 
 __m512i test_mm512_maskz_dpbusd_epi32(__mmask16 __U, __m512i __S, __m512i __A, 
__m512i __B) {
   // CHECK-LABEL: test_mm512_maskz_dpbusd_epi32
@@ -18,12 +31,25 @@ __m512i test_mm512_maskz_dpbusd_epi32(__mmask16 __U, 
__m512i __S, __m512i __A, _
   // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
   return _mm512_maskz_dpbusd_epi32(__U, __S, __A, __B);
 }
+TEST_CONSTEXPR(match_v16si(
+  _mm512_maskz_dpbusd_epi32(
+    (__mmask16)0x00FF,
+    (__m512i)(__v16si){100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 
1100, 1200, 1300, 1400, 1500, 1600},
+    (__m512i)(__v64qu){1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16, 17,18,19,20, 
21,22,23,24, 25,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, 41,42,43,44, 
45,46,47,48, 49,50,51,52, 53,54,55,56, 57,58,59,60, 61,62,63,64},
+    (__m512i)(__v64qi){-1,2,-3,4, -5,6,-7,8, -9,10,-11,12, -13,14,-15,16, 
-17,18,-19,20, -21,22,-23,24, -25,26,-27,28, -29,30,-31,32, -33,34,-35,36, 
-37,38,-39,40, -41,42,-43,44, -45,46,-47,48, -49,50,-51,52, -53,54,-55,56, 
-57,58,-59,60, -61,62,-63,64}),
+  110, 226, 342, 458, 574, 690, 806, 922, 0, 0, 0, 0, 0, 0, 0, 0));
 
 __m512i test_mm512_dpbusd_epi32(__m512i __S, __m512i __A, __m512i __B) {
   // CHECK-LABEL: test_mm512_dpbusd_epi32
   // CHECK: call <16 x i32> @llvm.x86.avx512.vpdpbusd.512(<16 x i32> %{{.*}}, 
<64 x i8> %{{.*}}, <64 x i8> %{{.*}})
   return _mm512_dpbusd_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v16si(
+  _mm512_dpbusd_epi32(
+    ((__m512i)(__v16si){2147483647, -2147483647-1, 2147483647, -2147483647-1, 
2147483647, -2147483647-1, 2147483647, -2147483647-1, 100, -50, 0, 1000, 7, 
-1000, 42, 2147483640}),
+    ((__m512i)(__v64qu){255,1,8,15, 255,22,6,13, 255,20,4,11, 255,18,2,9, 
0,16,23,7, 0,14,21,5, 0,12,19,3, 0,10,17,1, 11,18,2,9, 16,23,7,14, 21,5,12,19, 
3,10,17,1, 8,15,22,6, 13,20,4,11, 18,2,9,16, 23,7,14,21}),
+    ((__m512i)(__v64qi){127,-6,-1,4, 127,9,-5,0, -128,5,-9,-4, -128,1,6,-8, 
127,-3,2,7, 127,-7,-2,3, -128,8,-6,-1, -128,4,9,-5, 0,5,-9,-4, 1,6,-8,-3, 
2,7,-7,-2, 3,8,-6,-1, 4,9,-5,0, 5,-9,-4,1, 6,-8,-3,2, 7,-7,-2,3})),
+  -2147451218, -2147451095, 2147451027, 2147450966, -2147483602, 2147483523, 
2147483626, -2147483460, 136, 6, -45, 986, 64, -1120, 139, -2147483509));
 
 __m512i test_mm512_mask_dpbusds_epi32(__m512i __S, __mmask16 __U, __m512i __A, 
__m512i __B) {
   // CHECK-LABEL: test_mm512_mask_dpbusds_epi32
@@ -31,6 +57,13 @@ __m512i test_mm512_mask_dpbusds_epi32(__m512i __S, __mmask16 
__U, __m512i __A, _
   // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
   return _mm512_mask_dpbusds_epi32(__S, __U, __A, __B);
 }
+TEST_CONSTEXPR(match_v16si(
+  _mm512_mask_dpbusds_epi32(
+    (__m512i)(__v16si){100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 
1100, 1200, 1300, 1400, 1500, 1600},
+    (__mmask16)0x5555,
+    (__m512i)(__v64qu){1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16, 17,18,19,20, 
21,22,23,24, 25,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, 41,42,43,44, 
45,46,47,48, 49,50,51,52, 53,54,55,56, 57,58,59,60, 61,62,63,64},
+    (__m512i)(__v64qi){-1,2,-3,4, -5,6,-7,8, -9,10,-11,12, -13,14,-15,16, 
-17,18,-19,20, -21,22,-23,24, -25,26,-27,28, -29,30,-31,32, -33,34,-35,36, 
-37,38,-39,40, -41,42,-43,44, -45,46,-47,48, -49,50,-51,52, -53,54,-55,56, 
-57,58,-59,60, -61,62,-63,64}),
+  110, 200, 342, 400, 574, 600, 806, 800, 1038, 1000, 1270, 1200, 1502, 1400, 
1734, 1600));
 
 __m512i test_mm512_maskz_dpbusds_epi32(__mmask16 __U, __m512i __S, __m512i 
__A, __m512i __B) {
   // CHECK-LABEL: test_mm512_maskz_dpbusds_epi32
@@ -38,12 +71,25 @@ __m512i test_mm512_maskz_dpbusds_epi32(__mmask16 __U, 
__m512i __S, __m512i __A,
   // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
   return _mm512_maskz_dpbusds_epi32(__U, __S, __A, __B);
 }
+TEST_CONSTEXPR(match_v16si(
+  _mm512_maskz_dpbusds_epi32(
+    (__mmask16)0x00FF,
+    (__m512i)(__v16si){100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 
1100, 1200, 1300, 1400, 1500, 1600},
+    (__m512i)(__v64qu){1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16, 17,18,19,20, 
21,22,23,24, 25,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, 41,42,43,44, 
45,46,47,48, 49,50,51,52, 53,54,55,56, 57,58,59,60, 61,62,63,64},
+    (__m512i)(__v64qi){-1,2,-3,4, -5,6,-7,8, -9,10,-11,12, -13,14,-15,16, 
-17,18,-19,20, -21,22,-23,24, -25,26,-27,28, -29,30,-31,32, -33,34,-35,36, 
-37,38,-39,40, -41,42,-43,44, -45,46,-47,48, -49,50,-51,52, -53,54,-55,56, 
-57,58,-59,60, -61,62,-63,64}),
+  110, 226, 342, 458, 574, 690, 806, 922, 0, 0, 0, 0, 0, 0, 0, 0));
 
 __m512i test_mm512_dpbusds_epi32(__m512i __S, __m512i __A, __m512i __B) {
   // CHECK-LABEL: test_mm512_dpbusds_epi32
   // CHECK: call <16 x i32> @llvm.x86.avx512.vpdpbusds.512(<16 x i32> %{{.*}}, 
<64 x i8> %{{.*}}, <64 x i8> %{{.*}})
   return _mm512_dpbusds_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v16si(
+  _mm512_dpbusds_epi32(
+    ((__m512i)(__v16si){2147483647, -2147483647-1, 2147483647, -2147483647-1, 
2147483647, -2147483647-1, 2147483647, -2147483647-1, 100, -50, 0, 1000, 7, 
-1000, 42, 2147483640}),
+    ((__m512i)(__v64qu){255,1,8,15, 255,22,6,13, 255,20,4,11, 255,18,2,9, 
0,16,23,7, 0,14,21,5, 0,12,19,3, 0,10,17,1, 11,18,2,9, 16,23,7,14, 21,5,12,19, 
3,10,17,1, 8,15,22,6, 13,20,4,11, 18,2,9,16, 23,7,14,21}),
+    ((__m512i)(__v64qi){127,-6,-1,4, 127,9,-5,0, -128,5,-9,-4, -128,1,6,-8, 
127,-3,2,7, 127,-7,-2,3, -128,8,-6,-1, -128,4,9,-5, 0,5,-9,-4, 1,6,-8,-3, 
2,7,-7,-2, 3,8,-6,-1, 4,9,-5,0, 5,-9,-4,1, 6,-8,-3,2, 7,-7,-2,3})),
+  2147483647, -2147451095, 2147451027, -2147483647-1, 2147483647, 
-2147483647-1, 2147483626, -2147483460, 136, 6, -45, 986, 64, -1120, 139, 
2147483647));
 
 __m512i test_mm512_mask_dpwssd_epi32(__m512i __S, __mmask16 __U, __m512i __A, 
__m512i __B) {
   // CHECK-LABEL: test_mm512_mask_dpwssd_epi32
@@ -51,6 +97,13 @@ __m512i test_mm512_mask_dpwssd_epi32(__m512i __S, __mmask16 
__U, __m512i __A, __
   // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
   return _mm512_mask_dpwssd_epi32(__S, __U, __A, __B);
 }
+TEST_CONSTEXPR(match_v16si(
+  _mm512_mask_dpwssd_epi32(
+    (__m512i)(__v16si){100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 
1100, 1200, 1300, 1400, 1500, 1600},
+    (__mmask16)0xFF00,
+    (__m512i)(__v32hi){1,2, 3,4, 5,6, 7,8, 9,10, 11,12, 13,14, 15,16, 17,18, 
19,20, 21,22, 23,24, 25,26, 27,28, 29,30, 31,32},
+    (__m512i)(__v32hi){-1,2, -3,4, -5,6, -7,8, -9,10, -11,12, -13,14, -15,16, 
-17,18, -19,20, -21,22, -23,24, -25,26, -27,28, -29,30, -31,32}),
+  100, 200, 300, 400, 500, 600, 700, 800, 935, 1039, 1143, 1247, 1351, 1455, 
1559, 1663));
 
 __m512i test_mm512_maskz_dpwssd_epi32(__mmask16 __U, __m512i __S, __m512i __A, 
__m512i __B) {
   // CHECK-LABEL: test_mm512_maskz_dpwssd_epi32
@@ -58,12 +111,25 @@ __m512i test_mm512_maskz_dpwssd_epi32(__mmask16 __U, 
__m512i __S, __m512i __A, _
   // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
   return _mm512_maskz_dpwssd_epi32(__U, __S, __A, __B);
 }
+TEST_CONSTEXPR(match_v16si(
+  _mm512_maskz_dpwssd_epi32(
+    (__mmask16)0x000F,
+    (__m512i)(__v16si){100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 
1100, 1200, 1300, 1400, 1500, 1600},
+    (__m512i)(__v32hi){1,2, 3,4, 5,6, 7,8, 9,10, 11,12, 13,14, 15,16, 17,18, 
19,20, 21,22, 23,24, 25,26, 27,28, 29,30, 31,32},
+    (__m512i)(__v32hi){-1,2, -3,4, -5,6, -7,8, -9,10, -11,12, -13,14, -15,16, 
-17,18, -19,20, -21,22, -23,24, -25,26, -27,28, -29,30, -31,32}),
+  103, 207, 311, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
 
 __m512i test_mm512_dpwssd_epi32(__m512i __S, __m512i __A, __m512i __B) {
   // CHECK-LABEL: test_mm512_dpwssd_epi32
   // CHECK: call <16 x i32> @llvm.x86.avx512.vpdpwssd.512(<16 x i32> %{{.*}}, 
<32 x i16> %{{.*}}, <32 x i16> %{{.*}})
   return _mm512_dpwssd_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v16si(
+  _mm512_dpwssd_epi32(
+    ((__m512i)(__v16si){2147483647, -2147483647-1, 2147483647, -2147483647-1, 
2147483647, -2147483647-1, 2147483647, -2147483647-1, 100, -50, 0, 1000, 7, 
-1000, 42, 2147483640}),
+    ((__m512i)(__v32hi){32767,1, 32767,8, 32767,15, 32767,22, -32768,6, 
-32768,13, -32768,20, -32768,4, 11,18, 2,9, 16,23, 7,14, 21,5, 12,19, 3,10, 
17,1}),
+    ((__m512i)(__v32hi){32767,-6, 32767,-1, -32768,4, -32768,9, 32767,-5, 
32767,0, -32768,5, -32768,-9, 0,5, -9,-4, 1,6, -8,-3, 2,7, -7,-2, 3,8, -6,-1})),
+  -1073807366, -1073807367, 1073774651, 1073774790, 1073774561, 1073774592, 
-1073741725, -1073741860, 190, -104, 154, 902, 84, -1122, 131, 2147483537));
 
 __m512i test_mm512_mask_dpwssds_epi32(__m512i __S, __mmask16 __U, __m512i __A, 
__m512i __B) {
   // CHECK-LABEL: test_mm512_mask_dpwssds_epi32
@@ -71,6 +137,13 @@ __m512i test_mm512_mask_dpwssds_epi32(__m512i __S, 
__mmask16 __U, __m512i __A, _
   // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
   return _mm512_mask_dpwssds_epi32(__S, __U, __A, __B);
 }
+TEST_CONSTEXPR(match_v16si(
+  _mm512_mask_dpwssds_epi32(
+    (__m512i)(__v16si){100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 
1100, 1200, 1300, 1400, 1500, 1600},
+    (__mmask16)0xAAAA,
+    (__m512i)(__v32hi){1,2, 3,4, 5,6, 7,8, 9,10, 11,12, 13,14, 15,16, 17,18, 
19,20, 21,22, 23,24, 25,26, 27,28, 29,30, 31,32},
+    (__m512i)(__v32hi){-1,2, -3,4, -5,6, -7,8, -9,10, -11,12, -13,14, -15,16, 
-17,18, -19,20, -21,22, -23,24, -25,26, -27,28, -29,30, -31,32}),
+  100, 207, 300, 415, 500, 623, 700, 831, 900, 1039, 1100, 1247, 1300, 1455, 
1500, 1663));
 
 __m512i test_mm512_maskz_dpwssds_epi32(__mmask16 __U, __m512i __S, __m512i 
__A, __m512i __B) {
   // CHECK-LABEL: test_mm512_maskz_dpwssds_epi32
@@ -78,10 +151,22 @@ __m512i test_mm512_maskz_dpwssds_epi32(__mmask16 __U, 
__m512i __S, __m512i __A,
   // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
   return _mm512_maskz_dpwssds_epi32(__U, __S, __A, __B);
 }
+TEST_CONSTEXPR(match_v16si(
+  _mm512_maskz_dpwssds_epi32(
+    (__mmask16)0xFFFF,
+    (__m512i)(__v16si){100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 
1100, 1200, 1300, 1400, 1500, 1600},
+    (__m512i)(__v32hi){1,2, 3,4, 5,6, 7,8, 9,10, 11,12, 13,14, 15,16, 17,18, 
19,20, 21,22, 23,24, 25,26, 27,28, 29,30, 31,32},
+    (__m512i)(__v32hi){-1,2, -3,4, -5,6, -7,8, -9,10, -11,12, -13,14, -15,16, 
-17,18, -19,20, -21,22, -23,24, -25,26, -27,28, -29,30, -31,32}),
+  103, 207, 311, 415, 519, 623, 727, 831, 935, 1039, 1143, 1247, 1351, 1455, 
1559, 1663));
 
 __m512i test_mm512_dpwssds_epi32(__m512i __S, __m512i __A, __m512i __B) {
   // CHECK-LABEL: test_mm512_dpwssds_epi32
   // CHECK: call <16 x i32> @llvm.x86.avx512.vpdpwssds.512(<16 x i32> %{{.*}}, 
<32 x i16> %{{.*}}, <32 x i16> %{{.*}})
   return _mm512_dpwssds_epi32(__S, __A, __B);
 }
-
+TEST_CONSTEXPR(match_v16si(
+  _mm512_dpwssds_epi32(
+    ((__m512i)(__v16si){2147483647, -2147483647-1, 2147483647, -2147483647-1, 
2147483647, -2147483647-1, 2147483647, -2147483647-1, 100, -50, 0, 1000, 7, 
-1000, 42, 2147483640}),
+    ((__m512i)(__v32hi){32767,1, 32767,8, 32767,15, 32767,22, -32768,6, 
-32768,13, -32768,20, -32768,4, 11,18, 2,9, 16,23, 7,14, 21,5, 12,19, 3,10, 
17,1}),
+    ((__m512i)(__v32hi){32767,-6, 32767,-1, -32768,4, -32768,9, 32767,-5, 
32767,0, -32768,5, -32768,-9, 0,5, -9,-4, 1,6, -8,-3, 2,7, -7,-2, 3,8, -6,-1})),
+  2147483647, -1073807367, 1073774651, -2147483647-1, 1073774561, 
-2147483647-1, 2147483647, -1073741860, 190, -104, 154, 902, 84, -1122, 131, 
2147483537));

diff  --git a/clang/test/CodeGen/X86/avxvnni-builtins.c 
b/clang/test/CodeGen/X86/avxvnni-builtins.c
index 6557a26807eb2..a0297fc729bda 100644
--- a/clang/test/CodeGen/X86/avxvnni-builtins.c
+++ b/clang/test/CodeGen/X86/avxvnni-builtins.c
@@ -3,100 +3,262 @@
 // RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64-apple-darwin 
-target-feature +avxvnni -emit-llvm -o - -Wall -Werror | FileCheck %s
 // RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=i386-apple-darwin 
-target-feature +avxvnni -emit-llvm -o - -Wall -Werror | FileCheck %s
 
+// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin 
-target-feature +avxvnni -emit-llvm -o - -Wall -Werror 
-fexperimental-new-constant-interpreter | FileCheck %s
+// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64-apple-darwin 
-target-feature +avxvnni -emit-llvm -o - -Wall -Werror 
-fexperimental-new-constant-interpreter | FileCheck %s
+// RUN: %clang_cc1 -x c -ffreestanding %s -triple=i386-apple-darwin 
-target-feature +avxvnni -emit-llvm -o - -Wall -Werror 
-fexperimental-new-constant-interpreter | FileCheck %s
+// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=i386-apple-darwin 
-target-feature +avxvnni -emit-llvm -o - -Wall -Werror 
-fexperimental-new-constant-interpreter | FileCheck %s
+
 #include <immintrin.h>
+#include "builtin_test_helpers.h"
 
 __m256i test_mm256_dpbusd_epi32(__m256i __S, __m256i __A, __m256i __B) {
   // CHECK-LABEL: test_mm256_dpbusd_epi32
   // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpbusd.256(<8 x i32> %{{.*}}, 
<32 x i8> %{{.*}}, <32 x i8> %{{.*}})
   return _mm256_dpbusd_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v8si(
+  _mm256_dpbusd_epi32(
+    ((__m256i)(__v8si){2147483647, -2147483647-1, 2147483647, -2147483647-1, 
2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m256i)(__v32qu){255,1,8,15, 255,22,6,13, 255,20,4,11, 255,18,2,9, 
0,16,23,7, 0,14,21,5, 0,12,19,3, 0,10,17,1}),
+    ((__m256i)(__v32qi){127,-6,-1,4, 127,9,-5,0, -128,5,-9,-4, -128,1,6,-8, 
127,-3,2,7, 127,-7,-2,3, -128,8,-6,-1, -128,4,9,-5})),
+  -2147451218, -2147451095, 2147451027, 2147450966, -2147483602, 2147483523, 
2147483626, -2147483460));
 
 __m256i test_mm256_dpbusds_epi32(__m256i __S, __m256i __A, __m256i __B) {
   // CHECK-LABEL: test_mm256_dpbusds_epi32
   // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpbusds.256(<8 x i32> %{{.*}}, 
<32 x i8> %{{.*}}, <32 x i8> %{{.*}})
   return _mm256_dpbusds_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v8si(
+  _mm256_dpbusds_epi32(
+    ((__m256i)(__v8si){2147483647, -2147483647-1, 2147483647, -2147483647-1, 
2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m256i)(__v32qu){255,1,8,15, 255,22,6,13, 255,20,4,11, 255,18,2,9, 
0,16,23,7, 0,14,21,5, 0,12,19,3, 0,10,17,1}),
+    ((__m256i)(__v32qi){127,-6,-1,4, 127,9,-5,0, -128,5,-9,-4, -128,1,6,-8, 
127,-3,2,7, 127,-7,-2,3, -128,8,-6,-1, -128,4,9,-5})),
+  2147483647, -2147451095, 2147451027, -2147483647-1, 2147483647, 
-2147483647-1, 2147483626, -2147483460));
 
 __m256i test_mm256_dpwssd_epi32(__m256i __S, __m256i __A, __m256i __B) {
   // CHECK-LABEL: test_mm256_dpwssd_epi32
   // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpwssd.256(<8 x i32> %{{.*}}, 
<16 x i16> %{{.*}}, <16 x i16> %{{.*}})
   return _mm256_dpwssd_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v8si(
+  _mm256_dpwssd_epi32(
+    ((__m256i)(__v8si){2147483647, -2147483647-1, 2147483647, -2147483647-1, 
2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m256i)(__v16hi){32767,1, 32767,8, 32767,15, 32767,22, -32768,6, 
-32768,13, -32768,20, -32768,4}),
+    ((__m256i)(__v16hi){32767,-6, 32767,-1, -32768,4, -32768,9, 32767,-5, 
32767,0, -32768,5, -32768,-9})),
+  -1073807366, -1073807367, 1073774651, 1073774790, 1073774561, 1073774592, 
-1073741725, -1073741860));
 
 __m256i test_mm256_dpwssds_epi32(__m256i __S, __m256i __A, __m256i __B) {
   // CHECK-LABEL: test_mm256_dpwssds_epi32
   // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpwssds.256(<8 x i32> %{{.*}}, 
<16 x i16> %{{.*}}, <16 x i16> %{{.*}})
   return _mm256_dpwssds_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v8si(
+  _mm256_dpwssds_epi32(
+    ((__m256i)(__v8si){2147483647, -2147483647-1, 2147483647, -2147483647-1, 
2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m256i)(__v16hi){32767,1, 32767,8, 32767,15, 32767,22, -32768,6, 
-32768,13, -32768,20, -32768,4}),
+    ((__m256i)(__v16hi){32767,-6, 32767,-1, -32768,4, -32768,9, 32767,-5, 
32767,0, -32768,5, -32768,-9})),
+  2147483647, -1073807367, 1073774651, -2147483647-1, 1073774561, 
-2147483647-1, 2147483647, -1073741860));
+TEST_CONSTEXPR(match_v8si(
+  _mm256_dpwssds_epi32(
+    ((__m256i)(__v8si){-2147483647-1, -2147483647, -1000000000, -100, -1, 0, 
1000, 2147483647}),
+    ((__m256i)(__v16hi){-32768,-32768, -32768,-32768, -32768,-32768, 
-32768,-32768, -32768,-32768, -32768,-32768, -32768,-32768, -32768,-32768}),
+    ((__m256i)(__v16hi){-32768,-32768, -32768,-32768, -32768,-32768, 
-32768,-32768, -32768,-32768, -32768,-32768, -32768,-32768, -32768,-32768})),
+  0, 1, 1147483648, 2147483548, 2147483647, 2147483647, 2147483647, 
2147483647));
 
 __m128i test_mm_dpbusd_epi32(__m128i __S, __m128i __A, __m128i __B) {
   // CHECK-LABEL: test_mm_dpbusd_epi32
   // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpbusd.128(<4 x i32> %{{.*}}, 
<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
   return _mm_dpbusd_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpbusd_epi32(
+    ((__m128i)(__v4si){2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m128i)(__v16qu){255,1,8,15, 255,22,6,13, 0,20,4,11, 0,18,2,9}),
+    ((__m128i)(__v16qi){127,-6,-1,4, -128,9,-5,0, 127,5,-9,-4, -128,1,6,-8})),
+  -2147451218, 2147451176, -2147483629, 2147483606));
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpbusd_epi32(
+    ((__m128i)(__v4si){-2147483647-1, 2147483647, -2147483647-1, 2147483647}),
+    ((__m128i)(__v16qu){255,1,8,15, 255,22,6,13, 0,20,4,11, 0,18,2,9}),
+    ((__m128i)(__v16qi){127,-6,-1,4, -128,9,-5,0, 127,5,-9,-4, -128,1,6,-8})),
+  -2147451217, 2147451175, -2147483628, 2147483605));
 
 __m128i test_mm_dpbusds_epi32(__m128i __S, __m128i __A, __m128i __B) {
   // CHECK-LABEL: test_mm_dpbusds_epi32
   // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpbusds.128(<4 x i32> %{{.*}}, 
<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
   return _mm_dpbusds_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpbusds_epi32(
+    ((__m128i)(__v4si){2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m128i)(__v16qu){255,1,8,15, 255,22,6,13, 0,20,4,11, 0,18,2,9}),
+    ((__m128i)(__v16qi){127,-6,-1,4, -128,9,-5,0, 127,5,-9,-4, -128,1,6,-8})),
+  2147483647, -2147483647-1, 2147483647, -2147483647-1));
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpbusds_epi32(
+    ((__m128i)(__v4si){-2147483647-1, 2147483647, -2147483647-1, 2147483647}),
+    ((__m128i)(__v16qu){255,1,8,15, 255,22,6,13, 0,20,4,11, 0,18,2,9}),
+    ((__m128i)(__v16qi){127,-6,-1,4, -128,9,-5,0, 127,5,-9,-4, -128,1,6,-8})),
+  -2147451217, 2147451175, -2147483628, 2147483605));
 
 __m128i test_mm_dpwssd_epi32(__m128i __S, __m128i __A, __m128i __B) {
   // CHECK-LABEL: test_mm_dpwssd_epi32
   // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpwssd.128(<4 x i32> %{{.*}}, <8 
x i16> %{{.*}}, <8 x i16> %{{.*}})
   return _mm_dpwssd_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpwssd_epi32(
+    ((__m128i)(__v4si){2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m128i)(__v8hi){32767,1, 32767,8, -32768,15, -32768,22}),
+    ((__m128i)(__v8hi){32767,-6, -32768,-1, 32767,4, -32768,9})),
+  -1073807366, 1073774584, 1073774651, -1073741626));
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpwssd_epi32(
+    ((__m128i)(__v4si){-2147483647-1, 2147483647, -2147483647-1, 2147483647}),
+    ((__m128i)(__v8hi){32767,1, 32767,8, -32768,15, -32768,22}),
+    ((__m128i)(__v8hi){32767,-6, -32768,-1, 32767,4, -32768,9})),
+  -1073807365, 1073774583, 1073774652, -1073741627));
 
 __m128i test_mm_dpwssds_epi32(__m128i __S, __m128i __A, __m128i __B) {
   // CHECK-LABEL: test_mm_dpwssds_epi32
   // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpwssds.128(<4 x i32> %{{.*}}, 
<8 x i16> %{{.*}}, <8 x i16> %{{.*}})
   return _mm_dpwssds_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpwssds_epi32(
+    ((__m128i)(__v4si){2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m128i)(__v8hi){32767,1, 32767,8, -32768,15, -32768,22}),
+    ((__m128i)(__v8hi){32767,-6, -32768,-1, 32767,4, -32768,9})),
+  2147483647, -2147483647-1, 1073774651, -1073741626));
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpwssds_epi32(
+    ((__m128i)(__v4si){-2147483647-1, 2147483647, -2147483647-1, 2147483647}),
+    ((__m128i)(__v8hi){32767,1, 32767,8, -32768,15, -32768,22}),
+    ((__m128i)(__v8hi){32767,-6, -32768,-1, 32767,4, -32768,9})),
+  -1073807365, 1073774583, -2147483647-1, 2147483647));
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpwssds_epi32(
+    ((__m128i)(__v4si){-2147483647-1, -1000000000, -1, 1000}),
+    ((__m128i)(__v8hi){-32768,-32768, -32768,-32768, -32768,-32768, 
-32768,-32768}),
+    ((__m128i)(__v8hi){-32768,-32768, -32768,-32768, -32768,-32768, 
-32768,-32768})),
+  0, 1147483648, 2147483647, 2147483647));
 
 __m256i test_mm256_dpbusd_avx_epi32(__m256i __S, __m256i __A, __m256i __B) {
   // CHECK-LABEL: test_mm256_dpbusd_avx_epi32
   // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpbusd.256(<8 x i32> %{{.*}}, 
<32 x i8> %{{.*}}, <32 x i8> %{{.*}})
   return _mm256_dpbusd_avx_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v8si(
+  _mm256_dpbusd_avx_epi32(
+    ((__m256i)(__v8si){2147483647, -2147483647-1, 2147483647, -2147483647-1, 
2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m256i)(__v32qu){255,1,8,15, 255,22,6,13, 255,20,4,11, 255,18,2,9, 
0,16,23,7, 0,14,21,5, 0,12,19,3, 0,10,17,1}),
+    ((__m256i)(__v32qi){127,-6,-1,4, 127,9,-5,0, -128,5,-9,-4, -128,1,6,-8, 
127,-3,2,7, 127,-7,-2,3, -128,8,-6,-1, -128,4,9,-5})),
+  -2147451218, -2147451095, 2147451027, 2147450966, -2147483602, 2147483523, 
2147483626, -2147483460));
 
 __m256i test_mm256_dpbusds_avx_epi32(__m256i __S, __m256i __A, __m256i __B) {
   // CHECK-LABEL: test_mm256_dpbusds_avx_epi32
   // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpbusds.256(<8 x i32> %{{.*}}, 
<32 x i8> %{{.*}}, <32 x i8> %{{.*}})
   return _mm256_dpbusds_avx_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v8si(
+  _mm256_dpbusds_avx_epi32(
+    ((__m256i)(__v8si){2147483647, -2147483647-1, 2147483647, -2147483647-1, 
2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m256i)(__v32qu){255,1,8,15, 255,22,6,13, 255,20,4,11, 255,18,2,9, 
0,16,23,7, 0,14,21,5, 0,12,19,3, 0,10,17,1}),
+    ((__m256i)(__v32qi){127,-6,-1,4, 127,9,-5,0, -128,5,-9,-4, -128,1,6,-8, 
127,-3,2,7, 127,-7,-2,3, -128,8,-6,-1, -128,4,9,-5})),
+  2147483647, -2147451095, 2147451027, -2147483647-1, 2147483647, 
-2147483647-1, 2147483626, -2147483460));
 
 __m256i test_mm256_dpwssd_avx_epi32(__m256i __S, __m256i __A, __m256i __B) {
   // CHECK-LABEL: test_mm256_dpwssd_avx_epi32
   // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpwssd.256(<8 x i32> %{{.*}}, 
<16 x i16> %{{.*}}, <16 x i16> %{{.*}})
   return _mm256_dpwssd_avx_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v8si(
+  _mm256_dpwssd_avx_epi32(
+    ((__m256i)(__v8si){2147483647, -2147483647-1, 2147483647, -2147483647-1, 
2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m256i)(__v16hi){32767,1, 32767,8, 32767,15, 32767,22, -32768,6, 
-32768,13, -32768,20, -32768,4}),
+    ((__m256i)(__v16hi){32767,-6, 32767,-1, -32768,4, -32768,9, 32767,-5, 
32767,0, -32768,5, -32768,-9})),
+  -1073807366, -1073807367, 1073774651, 1073774790, 1073774561, 1073774592, 
-1073741725, -1073741860));
 
 __m256i test_mm256_dpwssds_avx_epi32(__m256i __S, __m256i __A, __m256i __B) {
   // CHECK-LABEL: test_mm256_dpwssds_avx_epi32
   // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpwssds.256(<8 x i32> %{{.*}}, 
<16 x i16> %{{.*}}, <16 x i16> %{{.*}})
   return _mm256_dpwssds_avx_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v8si(
+  _mm256_dpwssds_avx_epi32(
+    ((__m256i)(__v8si){2147483647, -2147483647-1, 2147483647, -2147483647-1, 
2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m256i)(__v16hi){32767,1, 32767,8, 32767,15, 32767,22, -32768,6, 
-32768,13, -32768,20, -32768,4}),
+    ((__m256i)(__v16hi){32767,-6, 32767,-1, -32768,4, -32768,9, 32767,-5, 
32767,0, -32768,5, -32768,-9})),
+  2147483647, -1073807367, 1073774651, -2147483647-1, 1073774561, 
-2147483647-1, 2147483647, -1073741860));
 
 __m128i test_mm_dpbusd_avx_epi32(__m128i __S, __m128i __A, __m128i __B) {
   // CHECK-LABEL: test_mm_dpbusd_avx_epi32
   // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpbusd.128(<4 x i32> %{{.*}}, 
<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
   return _mm_dpbusd_avx_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpbusd_avx_epi32(
+    ((__m128i)(__v4si){2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m128i)(__v16qu){255,1,8,15, 255,22,6,13, 0,20,4,11, 0,18,2,9}),
+    ((__m128i)(__v16qi){127,-6,-1,4, -128,9,-5,0, 127,5,-9,-4, -128,1,6,-8})),
+  -2147451218, 2147451176, -2147483629, 2147483606));
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpbusd_avx_epi32(
+    ((__m128i)(__v4si){-2147483647-1, 2147483647, -2147483647-1, 2147483647}),
+    ((__m128i)(__v16qu){255,1,8,15, 255,22,6,13, 0,20,4,11, 0,18,2,9}),
+    ((__m128i)(__v16qi){127,-6,-1,4, -128,9,-5,0, 127,5,-9,-4, -128,1,6,-8})),
+  -2147451217, 2147451175, -2147483628, 2147483605));
 
 __m128i test_mm_dpbusds_avx_epi32(__m128i __S, __m128i __A, __m128i __B) {
   // CHECK-LABEL: test_mm_dpbusds_avx_epi32
   // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpbusds.128(<4 x i32> %{{.*}}, 
<16 x i8> %{{.*}}, <16 x i8> %{{.*}})
   return _mm_dpbusds_avx_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpbusds_avx_epi32(
+    ((__m128i)(__v4si){2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m128i)(__v16qu){255,1,8,15, 255,22,6,13, 0,20,4,11, 0,18,2,9}),
+    ((__m128i)(__v16qi){127,-6,-1,4, -128,9,-5,0, 127,5,-9,-4, -128,1,6,-8})),
+  2147483647, -2147483647-1, 2147483647, -2147483647-1));
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpbusds_avx_epi32(
+    ((__m128i)(__v4si){-2147483647-1, 2147483647, -2147483647-1, 2147483647}),
+    ((__m128i)(__v16qu){255,1,8,15, 255,22,6,13, 0,20,4,11, 0,18,2,9}),
+    ((__m128i)(__v16qi){127,-6,-1,4, -128,9,-5,0, 127,5,-9,-4, -128,1,6,-8})),
+  -2147451217, 2147451175, -2147483628, 2147483605));
 
 __m128i test_mm_dpwssd_avx_epi32(__m128i __S, __m128i __A, __m128i __B) {
   // CHECK-LABEL: test_mm_dpwssd_avx_epi32
   // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpwssd.128(<4 x i32> %{{.*}}, <8 
x i16> %{{.*}}, <8 x i16> %{{.*}})
   return _mm_dpwssd_avx_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpwssd_avx_epi32(
+    ((__m128i)(__v4si){2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m128i)(__v8hi){32767,1, 32767,8, -32768,15, -32768,22}),
+    ((__m128i)(__v8hi){32767,-6, -32768,-1, 32767,4, -32768,9})),
+  -1073807366, 1073774584, 1073774651, -1073741626));
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpwssd_avx_epi32(
+    ((__m128i)(__v4si){-2147483647-1, 2147483647, -2147483647-1, 2147483647}),
+    ((__m128i)(__v8hi){32767,1, 32767,8, -32768,15, -32768,22}),
+    ((__m128i)(__v8hi){32767,-6, -32768,-1, 32767,4, -32768,9})),
+  -1073807365, 1073774583, 1073774652, -1073741627));
 
 __m128i test_mm_dpwssds_avx_epi32(__m128i __S, __m128i __A, __m128i __B) {
   // CHECK-LABEL: test_mm_dpwssds_avx_epi32
   // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpwssds.128(<4 x i32> %{{.*}}, 
<8 x i16> %{{.*}}, <8 x i16> %{{.*}})
   return _mm_dpwssds_avx_epi32(__S, __A, __B);
 }
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpwssds_avx_epi32(
+    ((__m128i)(__v4si){2147483647, -2147483647-1, 2147483647, -2147483647-1}),
+    ((__m128i)(__v8hi){32767,1, 32767,8, -32768,15, -32768,22}),
+    ((__m128i)(__v8hi){32767,-6, -32768,-1, 32767,4, -32768,9})),
+  2147483647, -2147483647-1, 1073774651, -1073741626));
+TEST_CONSTEXPR(match_v4si(
+  _mm_dpwssds_avx_epi32(
+    ((__m128i)(__v4si){-2147483647-1, 2147483647, -2147483647-1, 2147483647}),
+    ((__m128i)(__v8hi){32767,1, 32767,8, -32768,15, -32768,22}),
+    ((__m128i)(__v8hi){32767,-6, -32768,-1, 32767,4, -32768,9})),
+  -1073807365, 1073774583, -2147483647-1, 2147483647));


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to