github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. 
:warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff origin/main HEAD --extensions cpp,h,c -- 
clang/lib/AST/ByteCode/InterpBuiltin.cpp clang/lib/AST/ExprConstant.cpp 
clang/lib/Headers/mmintrin.h clang/test/CodeGen/X86/avx2-builtins.c 
clang/test/CodeGen/X86/avx512bw-builtins.c 
clang/test/CodeGen/X86/avx512f-builtins.c 
clang/test/CodeGen/X86/avx512vl-builtins.c 
clang/test/CodeGen/X86/avx512vlbw-builtins.c 
clang/test/CodeGen/X86/mmx-builtins.c clang/test/CodeGen/X86/sse2-builtins.c
``````````

:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp 
b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
index 1156626a3..e3b9acac6 100644
--- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp
+++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
@@ -3179,7 +3179,6 @@ static bool 
interp__builtin_x86_insert_subvector(InterpState &S, CodePtr OpPC,
   return true;
 }
 
-
 bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call,
                       uint32_t BuiltinID) {
   if (!S.getASTContext().BuiltinInfo.isConstantEvaluated(BuiltinID))
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 3fee70212..a5e9bd69d 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -11868,292 +11868,318 @@ bool VectorExprEvaluator::VisitCallExpr(const 
CallExpr *E) {
 
     return Success(APValue(ResultElements.data(), ResultElements.size()), E);
   }
-case X86::BI__builtin_ia32_pshufw: {
-  APValue Src;
-  APSInt Imm;
-  if (!EvaluateAsRValue(Info, E->getArg(0), Src)) return false;
-  if (!EvaluateInteger(E->getArg(1), Imm, Info))  return false;
+  case X86::BI__builtin_ia32_pshufw: {
+    APValue Src;
+    APSInt Imm;
+    if (!EvaluateAsRValue(Info, E->getArg(0), Src))
+      return false;
+    if (!EvaluateInteger(E->getArg(1), Imm, Info))
+      return false;
 
-  unsigned N = Src.getVectorLength(); 
-  SmallVector<APValue, 4> ResultElements;
-  ResultElements.reserve(N);
+    unsigned N = Src.getVectorLength();
+    SmallVector<APValue, 4> ResultElements;
+    ResultElements.reserve(N);
 
-  uint8_t C = static_cast<uint8_t>(Imm.getZExtValue());
-  for (unsigned i = 0; i != N; ++i) {
-    unsigned sel = (C >> (2 * i)) & 0x3;
-    ResultElements.push_back(Src.getVectorElt(sel));
+    uint8_t C = static_cast<uint8_t>(Imm.getZExtValue());
+    for (unsigned i = 0; i != N; ++i) {
+      unsigned sel = (C >> (2 * i)) & 0x3;
+      ResultElements.push_back(Src.getVectorElt(sel));
+    }
+    return Success(APValue(ResultElements.data(), ResultElements.size()), E);
   }
-  return Success(APValue(ResultElements.data(), ResultElements.size()), E);
-}
 
-case clang::X86::BI__builtin_ia32_pshuflw:
-case clang::X86::BI__builtin_ia32_pshuflw256:
-case clang::X86::BI__builtin_ia32_pshuflw512:
-case clang::X86::BI__builtin_ia32_pshuflw128_mask:
-case clang::X86::BI__builtin_ia32_pshuflw256_mask:
-case clang::X86::BI__builtin_ia32_pshuflw512_mask:
-case clang::X86::BI__builtin_ia32_pshuflw128_maskz:
-case clang::X86::BI__builtin_ia32_pshuflw256_maskz:
-case clang::X86::BI__builtin_ia32_pshuflw512_maskz: {
-  const unsigned BID = E->getBuiltinCallee();
-
-  const bool IsMask =
-      BID == clang::X86::BI__builtin_ia32_pshuflw128_mask  ||
-      BID == clang::X86::BI__builtin_ia32_pshuflw256_mask  ||
-      BID == clang::X86::BI__builtin_ia32_pshuflw512_mask;
-
-  const bool IsMaskZ =
-      BID == clang::X86::BI__builtin_ia32_pshuflw128_maskz ||
-      BID == clang::X86::BI__builtin_ia32_pshuflw256_maskz ||
-      BID == clang::X86::BI__builtin_ia32_pshuflw512_maskz;
-
-  const unsigned AIdx  = 0, ImmIdx = 1;
-  const unsigned SrcIdx = 2;
-  const unsigned KIdx   = IsMaskZ ? 2 : 3;
-
-  APValue AVal, SrcVal;
-  APSInt Imm, K;
-  if (!EvaluateAsRValue(Info, E->getArg(AIdx), AVal)) return false;
-  if (!EvaluateInteger(E->getArg(ImmIdx), Imm, Info))  return false;
-
-  const APSInt *KPtr = nullptr;
-  const APValue *PassThru = nullptr;
-  bool ZeroInactive = false;
-
-  if (IsMask) {
-    if (!EvaluateAsRValue(Info, E->getArg(SrcIdx), SrcVal)) return false;
-    if (!EvaluateInteger(E->getArg(KIdx), K, Info))         return false;
-    KPtr = &K; PassThru = &SrcVal; ZeroInactive = false;
-  } else if (IsMaskZ) {
-    if (!EvaluateInteger(E->getArg(KIdx), K, Info))         return false;
-    KPtr = &K; PassThru = nullptr; ZeroInactive = true;
-  }
-
-  const auto *VT = E->getType()->getAs<VectorType>();
-  if (!VT) return false;
-  const unsigned NumElts = VT->getNumElements();
-
-  const unsigned ElemBits  = 16;
-  const unsigned LaneElems = std::min(NumElts, 128u / ElemBits);
-  const unsigned Half      = 4;
-  const uint8_t  Ctl       = static_cast<uint8_t>(Imm.getZExtValue());
-  const bool DestUnsigned =
-      VT->getElementType()->isUnsignedIntegerOrEnumerationType();
-
-  auto MakeZero = [&]() -> APValue {
-    return APValue(APSInt(APInt(ElemBits, 0), DestUnsigned));
-  };
+  case clang::X86::BI__builtin_ia32_pshuflw:
+  case clang::X86::BI__builtin_ia32_pshuflw256:
+  case clang::X86::BI__builtin_ia32_pshuflw512:
+  case clang::X86::BI__builtin_ia32_pshuflw128_mask:
+  case clang::X86::BI__builtin_ia32_pshuflw256_mask:
+  case clang::X86::BI__builtin_ia32_pshuflw512_mask:
+  case clang::X86::BI__builtin_ia32_pshuflw128_maskz:
+  case clang::X86::BI__builtin_ia32_pshuflw256_maskz:
+  case clang::X86::BI__builtin_ia32_pshuflw512_maskz: {
+    const unsigned BID = E->getBuiltinCallee();
 
-  SmallVector<APValue, 32> ResultElements;
-  ResultElements.reserve(NumElts);
+    const bool IsMask = BID == clang::X86::BI__builtin_ia32_pshuflw128_mask ||
+                        BID == clang::X86::BI__builtin_ia32_pshuflw256_mask ||
+                        BID == clang::X86::BI__builtin_ia32_pshuflw512_mask;
 
-  for (unsigned i = 0; i < NumElts; ++i) {
-    const unsigned laneBase = (i / LaneElems) * LaneElems;
-    const unsigned inLane   = i % LaneElems;
+    const bool IsMaskZ = BID == clang::X86::BI__builtin_ia32_pshuflw128_maskz 
||
+                         BID == clang::X86::BI__builtin_ia32_pshuflw256_maskz 
||
+                         BID == clang::X86::BI__builtin_ia32_pshuflw512_maskz;
 
-    APValue Chosen;
-    if (inLane < Half) {
-      const unsigned pos = inLane;
-      const unsigned sel = (Ctl >> (2 * pos)) & 0x3;
-      const unsigned srcIdx = laneBase + sel;
-      Chosen = AVal.getVectorElt(srcIdx);
-    } else {
-      Chosen = AVal.getVectorElt(i);
+    const unsigned AIdx = 0, ImmIdx = 1;
+    const unsigned SrcIdx = 2;
+    const unsigned KIdx = IsMaskZ ? 2 : 3;
+
+    APValue AVal, SrcVal;
+    APSInt Imm, K;
+    if (!EvaluateAsRValue(Info, E->getArg(AIdx), AVal))
+      return false;
+    if (!EvaluateInteger(E->getArg(ImmIdx), Imm, Info))
+      return false;
+
+    const APSInt *KPtr = nullptr;
+    const APValue *PassThru = nullptr;
+    bool ZeroInactive = false;
+
+    if (IsMask) {
+      if (!EvaluateAsRValue(Info, E->getArg(SrcIdx), SrcVal))
+        return false;
+      if (!EvaluateInteger(E->getArg(KIdx), K, Info))
+        return false;
+      KPtr = &K;
+      PassThru = &SrcVal;
+      ZeroInactive = false;
+    } else if (IsMaskZ) {
+      if (!EvaluateInteger(E->getArg(KIdx), K, Info))
+        return false;
+      KPtr = &K;
+      PassThru = nullptr;
+      ZeroInactive = true;
     }
 
-    if (KPtr) {
-      const bool Keep = (i < KPtr->getBitWidth()) ? (*KPtr)[i] : false;
-      if (Keep) {
-        ResultElements.push_back(Chosen);
-      } else if (ZeroInactive) {
-        ResultElements.push_back(MakeZero());
+    const auto *VT = E->getType()->getAs<VectorType>();
+    if (!VT)
+      return false;
+    const unsigned NumElts = VT->getNumElements();
+
+    const unsigned ElemBits = 16;
+    const unsigned LaneElems = std::min(NumElts, 128u / ElemBits);
+    const unsigned Half = 4;
+    const uint8_t Ctl = static_cast<uint8_t>(Imm.getZExtValue());
+    const bool DestUnsigned =
+        VT->getElementType()->isUnsignedIntegerOrEnumerationType();
+
+    auto MakeZero = [&]() -> APValue {
+      return APValue(APSInt(APInt(ElemBits, 0), DestUnsigned));
+    };
+
+    SmallVector<APValue, 32> ResultElements;
+    ResultElements.reserve(NumElts);
+
+    for (unsigned i = 0; i < NumElts; ++i) {
+      const unsigned laneBase = (i / LaneElems) * LaneElems;
+      const unsigned inLane = i % LaneElems;
+
+      APValue Chosen;
+      if (inLane < Half) {
+        const unsigned pos = inLane;
+        const unsigned sel = (Ctl >> (2 * pos)) & 0x3;
+        const unsigned srcIdx = laneBase + sel;
+        Chosen = AVal.getVectorElt(srcIdx);
       } else {
-        const APValue &PT = PassThru ? PassThru->getVectorElt(i)
-                                     : AVal.getVectorElt(i);
-        ResultElements.push_back(PT);
+        Chosen = AVal.getVectorElt(i);
+      }
+
+      if (KPtr) {
+        const bool Keep = (i < KPtr->getBitWidth()) ? (*KPtr)[i] : false;
+        if (Keep) {
+          ResultElements.push_back(Chosen);
+        } else if (ZeroInactive) {
+          ResultElements.push_back(MakeZero());
+        } else {
+          const APValue &PT =
+              PassThru ? PassThru->getVectorElt(i) : AVal.getVectorElt(i);
+          ResultElements.push_back(PT);
+        }
+      } else {
+        ResultElements.push_back(Chosen);
       }
-    } else {
-      ResultElements.push_back(Chosen);
     }
+    return Success(APValue(ResultElements.data(), ResultElements.size()), E);
   }
-  return Success(APValue(ResultElements.data(), ResultElements.size()), E);
-}
 
-case clang::X86::BI__builtin_ia32_pshufhw:
-case clang::X86::BI__builtin_ia32_pshufhw256:
-case clang::X86::BI__builtin_ia32_pshufhw512:
-case clang::X86::BI__builtin_ia32_pshufhw128_mask:
-case clang::X86::BI__builtin_ia32_pshufhw256_mask:
-case clang::X86::BI__builtin_ia32_pshufhw512_mask:
-case clang::X86::BI__builtin_ia32_pshufhw128_maskz:
-case clang::X86::BI__builtin_ia32_pshufhw256_maskz:
-case clang::X86::BI__builtin_ia32_pshufhw512_maskz: {
-  const unsigned BID = E->getBuiltinCallee();
-
-  const bool IsMask =
-      BID == clang::X86::BI__builtin_ia32_pshufhw128_mask  ||
-      BID == clang::X86::BI__builtin_ia32_pshufhw256_mask  ||
-      BID == clang::X86::BI__builtin_ia32_pshufhw512_mask;
-
-  const bool IsMaskZ =
-      BID == clang::X86::BI__builtin_ia32_pshufhw128_maskz ||
-      BID == clang::X86::BI__builtin_ia32_pshufhw256_maskz ||
-      BID == clang::X86::BI__builtin_ia32_pshufhw512_maskz;
-
-  const unsigned AIdx = 0, ImmIdx = 1;
-  const unsigned SrcIdx = 2;
-  const unsigned KIdx   = IsMaskZ ? 2 : 3;
-
-  APValue AVal, SrcVal;
-  APSInt Imm, K;
-  if (!EvaluateAsRValue(Info, E->getArg(AIdx), AVal)) return false;
-  if (!EvaluateInteger(E->getArg(ImmIdx), Imm, Info))  return false;
-
-  const APSInt *KPtr = nullptr;
-  const APValue *PassThru = nullptr;
-  bool ZeroInactive = false;
-  if (IsMask) {
-    if (!EvaluateAsRValue(Info, E->getArg(SrcIdx), SrcVal)) return false;
-    if (!EvaluateInteger(E->getArg(KIdx), K, Info))         return false;
-    KPtr = &K; PassThru = &SrcVal; ZeroInactive = false;
-  } else if (IsMaskZ) {
-    if (!EvaluateInteger(E->getArg(KIdx), K, Info))         return false;
-    KPtr = &K; PassThru = nullptr; ZeroInactive = true;
-  }
-
-  const auto *VT = E->getType()->getAs<VectorType>();
-  if (!VT) return false;
-  const unsigned NumElts = VT->getNumElements();
-  const unsigned ElemBits  = 16;
-  const unsigned LaneElems = std::min(NumElts, 128u / ElemBits);
-  const unsigned Half      = 4;
-  const uint8_t  Ctl       = static_cast<uint8_t>(Imm.getZExtValue());
-  const bool DestUnsigned =
-      VT->getElementType()->isUnsignedIntegerOrEnumerationType();
-
-  auto MakeZero = [&]() -> APValue {
-    return APValue(APSInt(APInt(ElemBits, 0), DestUnsigned));
-  };
+  case clang::X86::BI__builtin_ia32_pshufhw:
+  case clang::X86::BI__builtin_ia32_pshufhw256:
+  case clang::X86::BI__builtin_ia32_pshufhw512:
+  case clang::X86::BI__builtin_ia32_pshufhw128_mask:
+  case clang::X86::BI__builtin_ia32_pshufhw256_mask:
+  case clang::X86::BI__builtin_ia32_pshufhw512_mask:
+  case clang::X86::BI__builtin_ia32_pshufhw128_maskz:
+  case clang::X86::BI__builtin_ia32_pshufhw256_maskz:
+  case clang::X86::BI__builtin_ia32_pshufhw512_maskz: {
+    const unsigned BID = E->getBuiltinCallee();
 
-  SmallVector<APValue, 32> Out;
-  Out.reserve(NumElts);
+    const bool IsMask = BID == clang::X86::BI__builtin_ia32_pshufhw128_mask ||
+                        BID == clang::X86::BI__builtin_ia32_pshufhw256_mask ||
+                        BID == clang::X86::BI__builtin_ia32_pshufhw512_mask;
 
-  for (unsigned i = 0; i < NumElts; ++i) {
-    const unsigned laneBase = (i / LaneElems) * LaneElems;
-    const unsigned inLane   = i % LaneElems;
+    const bool IsMaskZ = BID == clang::X86::BI__builtin_ia32_pshufhw128_maskz 
||
+                         BID == clang::X86::BI__builtin_ia32_pshufhw256_maskz 
||
+                         BID == clang::X86::BI__builtin_ia32_pshufhw512_maskz;
 
-    APValue Chosen;
-    if (inLane >= Half) {
-      const unsigned pos = inLane - Half;
-      const unsigned sel = (Ctl >> (2 * pos)) & 0x3;
-      const unsigned srcIdx = laneBase + Half + sel;
-      Chosen = AVal.getVectorElt(srcIdx);
-    } else {
-      Chosen = AVal.getVectorElt(i);
+    const unsigned AIdx = 0, ImmIdx = 1;
+    const unsigned SrcIdx = 2;
+    const unsigned KIdx = IsMaskZ ? 2 : 3;
+
+    APValue AVal, SrcVal;
+    APSInt Imm, K;
+    if (!EvaluateAsRValue(Info, E->getArg(AIdx), AVal))
+      return false;
+    if (!EvaluateInteger(E->getArg(ImmIdx), Imm, Info))
+      return false;
+
+    const APSInt *KPtr = nullptr;
+    const APValue *PassThru = nullptr;
+    bool ZeroInactive = false;
+    if (IsMask) {
+      if (!EvaluateAsRValue(Info, E->getArg(SrcIdx), SrcVal))
+        return false;
+      if (!EvaluateInteger(E->getArg(KIdx), K, Info))
+        return false;
+      KPtr = &K;
+      PassThru = &SrcVal;
+      ZeroInactive = false;
+    } else if (IsMaskZ) {
+      if (!EvaluateInteger(E->getArg(KIdx), K, Info))
+        return false;
+      KPtr = &K;
+      PassThru = nullptr;
+      ZeroInactive = true;
     }
 
-    if (KPtr) {
-      const bool Keep = (i < KPtr->getBitWidth()) ? (*KPtr)[i] : false;
-      if (Keep) {
-        Out.push_back(Chosen);
-      } else if (ZeroInactive) {
-        Out.push_back(MakeZero());
+    const auto *VT = E->getType()->getAs<VectorType>();
+    if (!VT)
+      return false;
+    const unsigned NumElts = VT->getNumElements();
+    const unsigned ElemBits = 16;
+    const unsigned LaneElems = std::min(NumElts, 128u / ElemBits);
+    const unsigned Half = 4;
+    const uint8_t Ctl = static_cast<uint8_t>(Imm.getZExtValue());
+    const bool DestUnsigned =
+        VT->getElementType()->isUnsignedIntegerOrEnumerationType();
+
+    auto MakeZero = [&]() -> APValue {
+      return APValue(APSInt(APInt(ElemBits, 0), DestUnsigned));
+    };
+
+    SmallVector<APValue, 32> Out;
+    Out.reserve(NumElts);
+
+    for (unsigned i = 0; i < NumElts; ++i) {
+      const unsigned laneBase = (i / LaneElems) * LaneElems;
+      const unsigned inLane = i % LaneElems;
+
+      APValue Chosen;
+      if (inLane >= Half) {
+        const unsigned pos = inLane - Half;
+        const unsigned sel = (Ctl >> (2 * pos)) & 0x3;
+        const unsigned srcIdx = laneBase + Half + sel;
+        Chosen = AVal.getVectorElt(srcIdx);
       } else {
-        const APValue &PT = PassThru ? PassThru->getVectorElt(i)
-                                     : AVal.getVectorElt(i);
-        Out.push_back(PT);
+        Chosen = AVal.getVectorElt(i);
       }
-    } else {
-      Out.push_back(Chosen);
-    }
-  }
-  return Success(APValue(Out.data(), Out.size()), E);
-}
-
-case clang::X86::BI__builtin_ia32_pshufd:
-case clang::X86::BI__builtin_ia32_pshufd256:
-case clang::X86::BI__builtin_ia32_pshufd512:
-case clang::X86::BI__builtin_ia32_pshufd128_mask:
-case clang::X86::BI__builtin_ia32_pshufd256_mask:
-case clang::X86::BI__builtin_ia32_pshufd512_mask:
-case clang::X86::BI__builtin_ia32_pshufd128_maskz:
-case clang::X86::BI__builtin_ia32_pshufd256_maskz:
-case clang::X86::BI__builtin_ia32_pshufd512_maskz: {
-  const unsigned BID = E->getBuiltinCallee();
-
-  const bool IsMask =
-      BID == clang::X86::BI__builtin_ia32_pshufd512_mask ||
-      BID == clang::X86::BI__builtin_ia32_pshufd128_mask ||
-      BID == clang::X86::BI__builtin_ia32_pshufd256_mask;
-
-  const bool IsMaskZ =
-      BID == clang::X86::BI__builtin_ia32_pshufd512_maskz ||
-      BID == clang::X86::BI__builtin_ia32_pshufd128_maskz ||
-      BID == clang::X86::BI__builtin_ia32_pshufd256_maskz;
-
-  const unsigned AIdx = 0, ImmIdx = 1;
-  const unsigned SrcIdx = 2;
-  const unsigned KIdx   = IsMaskZ ? 2 : 3;
-
-  APValue AVal, SrcVal;
-  APSInt Imm, K;
-  if (!EvaluateAsRValue(Info, E->getArg(AIdx), AVal)) return false;
-  if (!EvaluateInteger(E->getArg(ImmIdx), Imm, Info))  return false;
-
-  const APSInt *KPtr = nullptr;
-  const APValue *PassThru = nullptr;
-  bool ZeroInactive = false;
-  if (IsMask) {
-    if (!EvaluateAsRValue(Info, E->getArg(SrcIdx), SrcVal)) return false;
-    if (!EvaluateInteger(E->getArg(KIdx), K, Info))         return false;
-    KPtr = &K; PassThru = &SrcVal; ZeroInactive = false;
-  } else if (IsMaskZ) {
-    if (!EvaluateInteger(E->getArg(KIdx), K, Info))         return false;
-    KPtr = &K; PassThru = nullptr; ZeroInactive = true;
-  }
-
-  const auto *VT = E->getType()->getAs<VectorType>();
-  if (!VT) return false;
-  const unsigned NumElts = VT->getNumElements();
-  const unsigned ElemBits  = 32;
-  const unsigned LaneElems = std::min(NumElts, 128u / ElemBits);
-  const uint8_t  Ctl       = static_cast<uint8_t>(Imm.getZExtValue());
-  const bool DestUnsigned =
-      VT->getElementType()->isUnsignedIntegerOrEnumerationType();
-
-  auto MakeZero = [&]() -> APValue {
-    return APValue(APSInt(APInt(ElemBits, 0), DestUnsigned));
-  };
 
-  SmallVector<APValue, 32> Out;
-  Out.reserve(NumElts);
+      if (KPtr) {
+        const bool Keep = (i < KPtr->getBitWidth()) ? (*KPtr)[i] : false;
+        if (Keep) {
+          Out.push_back(Chosen);
+        } else if (ZeroInactive) {
+          Out.push_back(MakeZero());
+        } else {
+          const APValue &PT =
+              PassThru ? PassThru->getVectorElt(i) : AVal.getVectorElt(i);
+          Out.push_back(PT);
+        }
+      } else {
+        Out.push_back(Chosen);
+      }
+    }
+    return Success(APValue(Out.data(), Out.size()), E);
+  }
 
-  for (unsigned i = 0; i < NumElts; ++i) {
-    const unsigned laneBase = (i / LaneElems) * LaneElems;
-    const unsigned inLane   = i % LaneElems;
+  case clang::X86::BI__builtin_ia32_pshufd:
+  case clang::X86::BI__builtin_ia32_pshufd256:
+  case clang::X86::BI__builtin_ia32_pshufd512:
+  case clang::X86::BI__builtin_ia32_pshufd128_mask:
+  case clang::X86::BI__builtin_ia32_pshufd256_mask:
+  case clang::X86::BI__builtin_ia32_pshufd512_mask:
+  case clang::X86::BI__builtin_ia32_pshufd128_maskz:
+  case clang::X86::BI__builtin_ia32_pshufd256_maskz:
+  case clang::X86::BI__builtin_ia32_pshufd512_maskz: {
+    const unsigned BID = E->getBuiltinCallee();
 
-    const unsigned pos = inLane & 3;
-    const unsigned sel = (Ctl >> (2 * pos)) & 0x3;
-    const unsigned srcIdx = laneBase + sel;
-    APValue Chosen = AVal.getVectorElt(srcIdx);
+    const bool IsMask = BID == clang::X86::BI__builtin_ia32_pshufd512_mask ||
+                        BID == clang::X86::BI__builtin_ia32_pshufd128_mask ||
+                        BID == clang::X86::BI__builtin_ia32_pshufd256_mask;
 
-    if (KPtr) {
-      const bool Keep = (i < KPtr->getBitWidth()) ? (*KPtr)[i] : false;
-      if (Keep) {
-        Out.push_back(Chosen);
-      } else if (ZeroInactive) {
-        Out.push_back(MakeZero());
+    const bool IsMaskZ = BID == clang::X86::BI__builtin_ia32_pshufd512_maskz ||
+                         BID == clang::X86::BI__builtin_ia32_pshufd128_maskz ||
+                         BID == clang::X86::BI__builtin_ia32_pshufd256_maskz;
+
+    const unsigned AIdx = 0, ImmIdx = 1;
+    const unsigned SrcIdx = 2;
+    const unsigned KIdx = IsMaskZ ? 2 : 3;
+
+    APValue AVal, SrcVal;
+    APSInt Imm, K;
+    if (!EvaluateAsRValue(Info, E->getArg(AIdx), AVal))
+      return false;
+    if (!EvaluateInteger(E->getArg(ImmIdx), Imm, Info))
+      return false;
+
+    const APSInt *KPtr = nullptr;
+    const APValue *PassThru = nullptr;
+    bool ZeroInactive = false;
+    if (IsMask) {
+      if (!EvaluateAsRValue(Info, E->getArg(SrcIdx), SrcVal))
+        return false;
+      if (!EvaluateInteger(E->getArg(KIdx), K, Info))
+        return false;
+      KPtr = &K;
+      PassThru = &SrcVal;
+      ZeroInactive = false;
+    } else if (IsMaskZ) {
+      if (!EvaluateInteger(E->getArg(KIdx), K, Info))
+        return false;
+      KPtr = &K;
+      PassThru = nullptr;
+      ZeroInactive = true;
+    }
+
+    const auto *VT = E->getType()->getAs<VectorType>();
+    if (!VT)
+      return false;
+    const unsigned NumElts = VT->getNumElements();
+    const unsigned ElemBits = 32;
+    const unsigned LaneElems = std::min(NumElts, 128u / ElemBits);
+    const uint8_t Ctl = static_cast<uint8_t>(Imm.getZExtValue());
+    const bool DestUnsigned =
+        VT->getElementType()->isUnsignedIntegerOrEnumerationType();
+
+    auto MakeZero = [&]() -> APValue {
+      return APValue(APSInt(APInt(ElemBits, 0), DestUnsigned));
+    };
+
+    SmallVector<APValue, 32> Out;
+    Out.reserve(NumElts);
+
+    for (unsigned i = 0; i < NumElts; ++i) {
+      const unsigned laneBase = (i / LaneElems) * LaneElems;
+      const unsigned inLane = i % LaneElems;
+
+      const unsigned pos = inLane & 3;
+      const unsigned sel = (Ctl >> (2 * pos)) & 0x3;
+      const unsigned srcIdx = laneBase + sel;
+      APValue Chosen = AVal.getVectorElt(srcIdx);
+
+      if (KPtr) {
+        const bool Keep = (i < KPtr->getBitWidth()) ? (*KPtr)[i] : false;
+        if (Keep) {
+          Out.push_back(Chosen);
+        } else if (ZeroInactive) {
+          Out.push_back(MakeZero());
+        } else {
+          const APValue &PT =
+              PassThru ? PassThru->getVectorElt(i) : AVal.getVectorElt(i);
+          Out.push_back(PT);
+        }
       } else {
-        const APValue &PT = PassThru ? PassThru->getVectorElt(i)
-                                     : AVal.getVectorElt(i);
-        Out.push_back(PT);
+        Out.push_back(Chosen);
       }
-    } else {
-      Out.push_back(Chosen);
     }
+    return Success(APValue(Out.data(), Out.size()), E);
   }
-  return Success(APValue(Out.data(), Out.size()), E);
-}
 
   case clang::X86::BI__builtin_ia32_vprotbi:
   case clang::X86::BI__builtin_ia32_vprotdi:
@@ -12477,7 +12503,6 @@ case clang::X86::BI__builtin_ia32_pshufd512_maskz: {
     return Success(APValue(ResultElements.data(), ResultElements.size()), E);
   }
 
-  
   case X86::BI__builtin_ia32_insertf32x4_256:
   case X86::BI__builtin_ia32_inserti32x4_256:
   case X86::BI__builtin_ia32_insertf64x2_256:
diff --git a/clang/lib/Headers/mmintrin.h b/clang/lib/Headers/mmintrin.h
index 039f8c5ca..371a8c5ac 100644
--- a/clang/lib/Headers/mmintrin.h
+++ b/clang/lib/Headers/mmintrin.h
@@ -43,7 +43,7 @@ typedef char __v16qi __attribute__((__vector_size__(16)));
   __attribute__((__always_inline__, __nodebug__, __target__("sse2"),           
\
                  __min_vector_width__(128)))
 
-#define __DEFAULT_FN_ATTRS_MMX \
+#define __DEFAULT_FN_ATTRS_MMX                                                 
\
   __attribute__((__always_inline__, __nodebug__, __target__("mmx")))
 
 #if defined(__cplusplus) && (__cplusplus >= 201103L)
@@ -51,7 +51,7 @@ typedef char __v16qi __attribute__((__vector_size__(16)));
 #define __DEFAULT_FN_ATTRS_MMX_CONSTEXPR __DEFAULT_FN_ATTRS_MMX constexpr
 #else
 #define __DEFAULT_FN_ATTRS_SSE2_CONSTEXPR __DEFAULT_FN_ATTRS_SSE2
-#define __DEFAULT_FN_ATTRS_MMX_CONSTEXPR __DEFAULT_FN_ATTRS_MMX 
+#define __DEFAULT_FN_ATTRS_MMX_CONSTEXPR __DEFAULT_FN_ATTRS_MMX
 #endif
 
 #define __trunc64(x)                                                           
\
@@ -192,7 +192,6 @@ _mm_packs_pi32(__m64 __m1, __m64 __m2) {
       (__v4si)__builtin_shufflevector(__m1, __m2, 0, 1), (__v4si){}));
 }
 
-
 /// Converts, with saturation, 16-bit signed integers from both 64-bit integer
 ///    vector parameters of [4 x i16] into 8-bit unsigned integer values, and
 ///    constructs a 64-bit integer vector of [8 x i8] as the result.

``````````

</details>


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

Reply via email to