[clang] [Clang] allow SSE/AVX/AVX512 square root intrinsics to be used in constexpr (PR #161547)

Shreeyash Pandey via cfe-commits cfe-commits at lists.llvm.org
Thu Oct 2 05:47:31 PDT 2025


https://github.com/bojle updated https://github.com/llvm/llvm-project/pull/161547

>From 6283f3d21efe332035daf4a726b6a174688e75f9 Mon Sep 17 00:00:00 2001
From: Shreeyash Pandey <shreeyash335 at gmail.com>
Date: Sat, 27 Sep 2025 18:19:08 +0530
Subject: [PATCH 1/8] [clang] make SSE/AVX/AVX512 sqrt constexpr

Signed-off-by: Shreeyash Pandey <shreeyash335 at gmail.com>
---
 clang/include/clang/Basic/BuiltinsX86.td |  3 +-
 clang/lib/AST/ByteCode/InterpBuiltin.cpp |  2 ++
 clang/lib/AST/ExprConstant.cpp           | 36 ++++++++++++++++++++++++
 clang/lib/Headers/emmintrin.h            |  2 +-
 clang/test/CodeGen/X86/sse2-builtins.c   |  2 ++
 5 files changed, 43 insertions(+), 2 deletions(-)

diff --git a/clang/include/clang/Basic/BuiltinsX86.td b/clang/include/clang/Basic/BuiltinsX86.td
index 77e599587edc3..bddcd432f8857 100644
--- a/clang/include/clang/Basic/BuiltinsX86.td
+++ b/clang/include/clang/Basic/BuiltinsX86.td
@@ -222,7 +222,6 @@ let Features = "sse2", Attributes = [NoThrow, Const, RequiredVectorWidth<128>] i
   def pshuflw : X86Builtin<"_Vector<8, short>(_Vector<8, short>, _Constant int)">;
   def pshufhw : X86Builtin<"_Vector<8, short>(_Vector<8, short>, _Constant int)">;
   def psadbw128 : X86Builtin<"_Vector<2, long long int>(_Vector<16, char>, _Vector<16, char>)">;
-  def sqrtpd : X86Builtin<"_Vector<2, double>(_Vector<2, double>)">;
   def sqrtsd : X86Builtin<"_Vector<2, double>(_Vector<2, double>)">;
   def shufpd : X86Builtin<"_Vector<2, double>(_Vector<2, double>, _Vector<2, double>, _Constant int)">;
   def cvtpd2dq : X86Builtin<"_Vector<2, long long int>(_Vector<2, double>)">;
@@ -295,6 +294,8 @@ let Features = "sse2",
 
   def psrawi128 : X86Builtin<"_Vector<8, short>(_Vector<8, short>, int)">;
   def psradi128 : X86Builtin<"_Vector<4, int>(_Vector<4, int>, int)">;
+
+  def sqrtpd : X86Builtin<"_Vector<2, double>(_Vector<2, double>)">;
 }
 
 let Features = "sse3", Attributes = [NoThrow] in {
diff --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
index 9076946d29657..7abe1b932f238 100644
--- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp
+++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
@@ -19,6 +19,7 @@
 #include "llvm/ADT/StringExtras.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/SipHash.h"
+#include "llvm/Support/raw_ostream.h"
 
 namespace clang {
 namespace interp {
@@ -2996,6 +2997,7 @@ static bool interp__builtin_x86_insert_subvector(InterpState &S, CodePtr OpPC,
 
 bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call,
                       uint32_t BuiltinID) {
+  llvm::errs() << "Calling InterpretBuiltin\n";
   if (!S.getASTContext().BuiltinInfo.isConstantEvaluated(BuiltinID))
     return Invalid(S, OpPC);
 
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index b706b14945b6d..e380f24b561d0 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -68,6 +68,7 @@
 #include <functional>
 #include <limits>
 #include <optional>
+#include <cmath>
 
 #define DEBUG_TYPE "exprconstant"
 
@@ -12235,6 +12236,41 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
 
     return Success(APValue(ResultElements.data(), ResultElements.size()), E);
   }
+  case X86::BI__builtin_ia32_sqrtpd: {
+    llvm::errs() << "We are inside sqrtpd\n";
+    APValue Source;
+    if (!EvaluateAsRValue(Info, E->getArg(0), Source))
+      return false;
+
+    QualType DestEltTy = E->getType()->castAs<VectorType>()->getElementType();
+    unsigned SourceLen = Source.getVectorLength();
+    SmallVector<APValue, 4> ResultElements;
+    ResultElements.reserve(SourceLen);
+
+    llvm::errs() << "SourceLen " << SourceLen << '\n';
+
+    for (unsigned EltNum = 0; EltNum < SourceLen; ++EltNum) {
+      llvm::errs() << "We are inside for loop\n";
+      APValue CurrentEle = Source.getVectorElt(EltNum);
+      if (DestEltTy->isFloatingType()) {
+        llvm::APFloat Value = CurrentEle.getFloat();
+        if (Value.isNegative() && !Value.isZero()) {
+          Value = llvm::APFloat::getQNaN(Value.getSemantics());
+        } else {
+          double DoubleValue = Value.convertToDouble();
+          double SqrtValue = ::sqrt(DoubleValue);
+          llvm::APFloat Value2{SqrtValue};
+          Value = Value2;
+          llvm::errs() << "Pushing " << SqrtValue << ' ' << Value2 << " to resultelements\n";
+        }
+        ResultElements.push_back(APValue(Value));
+      } else {
+        return false;
+      }
+      llvm::errs() << "Outside the loop, about to exit " << "res size " << ResultElements.size() << "\n";
+      return Success(APValue(ResultElements.data(), ResultElements.size()), E);
+    }
+  }
   }
 }
 
diff --git a/clang/lib/Headers/emmintrin.h b/clang/lib/Headers/emmintrin.h
index 6597e7e7d4030..fef9e280ba53f 100644
--- a/clang/lib/Headers/emmintrin.h
+++ b/clang/lib/Headers/emmintrin.h
@@ -256,7 +256,7 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_sqrt_sd(__m128d __a,
 ///    A 128-bit vector of [2 x double].
 /// \returns A 128-bit vector of [2 x double] containing the square roots of the
 ///    values in the operand.
-static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_sqrt_pd(__m128d __a) {
+static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR _mm_sqrt_pd(__m128d __a) {
   return __builtin_ia32_sqrtpd((__v2df)__a);
 }
 
diff --git a/clang/test/CodeGen/X86/sse2-builtins.c b/clang/test/CodeGen/X86/sse2-builtins.c
index 84b90c09444c2..a71546c2fb6ce 100644
--- a/clang/test/CodeGen/X86/sse2-builtins.c
+++ b/clang/test/CodeGen/X86/sse2-builtins.c
@@ -1423,6 +1423,8 @@ __m128d test_mm_sqrt_pd(__m128d A) {
   return _mm_sqrt_pd(A);
 }
 
+TEST_CONSTEXPR(match_m128d(_mm_sqrt_pd(_mm_set_pd(4.0,4.0)), 2.0, 2.0));
+
 __m128d test_mm_sqrt_sd(__m128d A, __m128d B) {
   // CHECK-LABEL: test_mm_sqrt_sd
   // CHECK: extractelement <2 x double> %{{.*}}, i64 0

>From 83c0718a996679a4ccb60589d155eb6bf4177ffd Mon Sep 17 00:00:00 2001
From: Shreeyash Pandey <shreeyash335 at gmail.com>
Date: Wed, 1 Oct 2025 18:50:09 +0530
Subject: [PATCH 2/8] [clang] add sqrtpd and sqrtps

Signed-off-by: Shreeyash Pandey <shreeyash335 at gmail.com>
---
 clang/include/clang/Basic/BuiltinsX86.td |  5 +-
 clang/lib/AST/ByteCode/InterpBuiltin.cpp | 77 +++++++++++++++++++++++-
 clang/lib/AST/ExprConstant.cpp           | 22 ++++---
 clang/lib/Headers/xmmintrin.h            |  2 +-
 clang/test/CodeGen/X86/sse-builtins.c    |  3 +
 clang/test/CodeGen/X86/sse2-builtins.c   |  1 +
 6 files changed, 98 insertions(+), 12 deletions(-)

diff --git a/clang/include/clang/Basic/BuiltinsX86.td b/clang/include/clang/Basic/BuiltinsX86.td
index bddcd432f8857..d49b7be7a8052 100644
--- a/clang/include/clang/Basic/BuiltinsX86.td
+++ b/clang/include/clang/Basic/BuiltinsX86.td
@@ -199,11 +199,14 @@ let Features = "sse", Attributes = [NoThrow, Const, RequiredVectorWidth<128>] in
   def rcpss : X86Builtin<"_Vector<4, float>(_Vector<4, float>)">;
   def rsqrtps : X86Builtin<"_Vector<4, float>(_Vector<4, float>)">;
   def rsqrtss : X86Builtin<"_Vector<4, float>(_Vector<4, float>)">;
-  def sqrtps : X86Builtin<"_Vector<4, float>(_Vector<4, float>)">;
   def sqrtss : X86Builtin<"_Vector<4, float>(_Vector<4, float>)">;
   def shufps : X86Builtin<"_Vector<4, float>(_Vector<4, float>, _Vector<4, float>, _Constant int)">;
 }
 
+let Features = "sse", Attributes = [NoThrow, Const, Constexpr, RequiredVectorWidth<128>] in {
+  def sqrtps : X86Builtin<"_Vector<4, float>(_Vector<4, float>)">;
+}
+
 let Features = "sse2", Attributes = [NoThrow, RequiredVectorWidth<128>] in {
   def maskmovdqu : X86Builtin<"void(_Vector<16, char>, _Vector<16, char>, char *)">;
 }
diff --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
index 7abe1b932f238..da1cba76dd64f 100644
--- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp
+++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
@@ -20,6 +20,7 @@
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/SipHash.h"
 #include "llvm/Support/raw_ostream.h"
+#include <cmath>
 
 namespace clang {
 namespace interp {
@@ -2995,9 +2996,80 @@ static bool interp__builtin_x86_insert_subvector(InterpState &S, CodePtr OpPC,
   return true;
 }
 
+static llvm::APFloat apply_x86_sqrt(llvm::APFloat Val, const llvm::fltSemantics &Semantics) {
+  if (Val.isNegative() && !Val.isZero()) {
+    return llvm::APFloat::getQNaN(Semantics);
+  } else {
+    double DoubleValue = Val.convertToDouble();
+    double SqrtValue = ::sqrt(DoubleValue);
+
+    llvm::APFloat TempValue(SqrtValue);
+
+    bool LosesInfo;
+    TempValue.convert(Semantics, llvm::APFloat::rmNearestTiesToEven, &LosesInfo);
+    return TempValue;
+  }
+}
+
+static bool interp__builtin_x86_sqrt(InterpState &S, CodePtr OpPC,
+                                                 const CallExpr *Call,
+                                                 unsigned ID) {
+  llvm::errs() << "Entering x86 sqrtpd/ps interpretbuiltin\n";
+  
+  assert(Call->getNumArgs() == 1);
+  const Expr *ArgExpr = Call->getArg(0);
+  QualType ArgTy = ArgExpr->getType();
+  QualType ResultTy = Call->getType();
+  
+  if (!(ArgTy->isRealFloatingType() ||
+        (ArgTy->isVectorType() &&
+         ArgTy->castAs<VectorType>()->getElementType()->isRealFloatingType())))
+    return false;
+
+  const llvm::fltSemantics *SemanticsPtr;
+  if (ArgTy->isVectorType())
+    SemanticsPtr = &S.getContext().getFloatSemantics(ArgTy->castAs<VectorType>()->getElementType());
+  else
+    SemanticsPtr = &S.getContext().getFloatSemantics(ArgTy);
+  const llvm::fltSemantics &Semantics = *SemanticsPtr;
+
+
+  // Scalar case
+  if (!ArgTy->isVectorType()) {
+    llvm::APFloat Val = S.Stk.pop<Floating>().getAPFloat();
+    Val = apply_x86_sqrt(Val, Semantics);
+    S.Stk.push<Floating>(Val);
+    return true;
+  }
+
+  // Vector case
+  assert(ArgTy->isVectorType());
+  llvm::errs() << "Considering this as a vector\n";
+  const auto *VT = ArgTy->castAs<VectorType>();
+  
+  const Pointer &Arg = S.Stk.pop<Pointer>();
+  const Pointer &Dst = S.Stk.peek<Pointer>();
+
+  assert(Arg.getFieldDesc()->isPrimitiveArray());
+  assert(Dst.getFieldDesc()->isPrimitiveArray());
+  assert(Arg.getFieldDesc()->getNumElems() == Dst.getFieldDesc()->getNumElems());
+
+  PrimType ElemT = *S.getContext().classify(VT->getElementType());
+  unsigned NumElems = VT->getNumElements();
+
+  for (unsigned I = 0; I != NumElems; ++I) {
+    llvm::APFloat Val = Arg.elem<Floating>(I).getAPFloat();
+    Val = apply_x86_sqrt(Val, Semantics);
+    Dst.elem<Floating>(I) = Val;
+  }
+
+  Dst.initializeAllElements();
+  return true;
+}
+
 bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call,
                       uint32_t BuiltinID) {
-  llvm::errs() << "Calling InterpretBuiltin\n";
+  llvm::errs() << "Inside Interpretbuiltin for " << Call << "\n";
   if (!S.getASTContext().BuiltinInfo.isConstantEvaluated(BuiltinID))
     return Invalid(S, OpPC);
 
@@ -3755,6 +3827,9 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call,
   case X86::BI__builtin_ia32_vinsertf128_si256:
   case X86::BI__builtin_ia32_insert128i256:
     return interp__builtin_x86_insert_subvector(S, OpPC, Call, BuiltinID);
+  case X86::BI__builtin_ia32_sqrtpd:
+  case X86::BI__builtin_ia32_sqrtps:
+    return interp__builtin_x86_sqrt(S, OpPC, Call, BuiltinID);
 
   default:
     S.FFDiag(S.Current->getLocation(OpPC),
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index e380f24b561d0..95228e7ef5169 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -12236,13 +12236,15 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
 
     return Success(APValue(ResultElements.data(), ResultElements.size()), E);
   }
-  case X86::BI__builtin_ia32_sqrtpd: {
-    llvm::errs() << "We are inside sqrtpd\n";
+  case X86::BI__builtin_ia32_sqrtpd: 
+  case X86::BI__builtin_ia32_sqrtps: {
+    llvm::errs() << "We are inside sqrtpd/sqrtps\n";
     APValue Source;
     if (!EvaluateAsRValue(Info, E->getArg(0), Source))
       return false;
 
     QualType DestEltTy = E->getType()->castAs<VectorType>()->getElementType();
+    const llvm::fltSemantics &Semantics = Info.Ctx.getFloatTypeSemantics(DestEltTy); // Retrieve correct semantics
     unsigned SourceLen = Source.getVectorLength();
     SmallVector<APValue, 4> ResultElements;
     ResultElements.reserve(SourceLen);
@@ -12257,19 +12259,21 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
         if (Value.isNegative() && !Value.isZero()) {
           Value = llvm::APFloat::getQNaN(Value.getSemantics());
         } else {
-          double DoubleValue = Value.convertToDouble();
-          double SqrtValue = ::sqrt(DoubleValue);
-          llvm::APFloat Value2{SqrtValue};
-          Value = Value2;
-          llvm::errs() << "Pushing " << SqrtValue << ' ' << Value2 << " to resultelements\n";
+double DoubleValue = Value.convertToDouble();
+double SqrtValue = sqrt(DoubleValue);
+llvm::APFloat TempValue(SqrtValue);
+bool LosesInfo;
+auto RetStatus = TempValue.convert(Semantics, llvm::RoundingMode::NearestTiesToEven, &LosesInfo);
+Value = TempValue;
+          //llvm::errs() << "Pushing " << SqrtValue << ' ' << Value2 << " to resultelements\n";
         }
         ResultElements.push_back(APValue(Value));
       } else {
         return false;
       }
-      llvm::errs() << "Outside the loop, about to exit " << "res size " << ResultElements.size() << "\n";
-      return Success(APValue(ResultElements.data(), ResultElements.size()), E);
     }
+    llvm::errs() << "Outside the loop, about to exit " << "res size " << ResultElements.size() << "\n";
+    return Success(APValue(ResultElements.data(), ResultElements.size()), E);
   }
   }
 }
diff --git a/clang/lib/Headers/xmmintrin.h b/clang/lib/Headers/xmmintrin.h
index d876b4735a7d2..2a41324dd31c6 100644
--- a/clang/lib/Headers/xmmintrin.h
+++ b/clang/lib/Headers/xmmintrin.h
@@ -248,7 +248,7 @@ _mm_sqrt_ss(__m128 __a)
 ///    A 128-bit vector of [4 x float].
 /// \returns A 128-bit vector of [4 x float] containing the square roots of the
 ///    values in the operand.
-static __inline__ __m128 __DEFAULT_FN_ATTRS
+static __inline__ __m128 __DEFAULT_FN_ATTRS_CONSTEXPR
 _mm_sqrt_ps(__m128 __a)
 {
   return __builtin_ia32_sqrtps((__v4sf)__a);
diff --git a/clang/test/CodeGen/X86/sse-builtins.c b/clang/test/CodeGen/X86/sse-builtins.c
index 3bad3426b1586..929dad963ce52 100644
--- a/clang/test/CodeGen/X86/sse-builtins.c
+++ b/clang/test/CodeGen/X86/sse-builtins.c
@@ -610,6 +610,7 @@ __m128 test_mm_rsqrt_ps(__m128 x) {
   return _mm_rsqrt_ps(x);
 }
 
+
 __m128 test_mm_rsqrt_ss(__m128 x) {
   // CHECK-LABEL: test_mm_rsqrt_ss
   // CHECK: call {{.*}}<4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float> {{.*}})
@@ -742,6 +743,8 @@ __m128 test_mm_sqrt_ps(__m128 x) {
   return _mm_sqrt_ps(x);
 }
 
+TEST_CONSTEXPR(match_m128(_mm_sqrt_ps(_mm_set_ps(16.0f, 9.0f, 4.0f, 1.0f)), 1.0f, 2.0f, 3.0f, 4.0f));
+
 __m128 test_mm_sqrt_ss(__m128 x) {
   // CHECK-LABEL: test_mm_sqrt_ss
   // CHECK: extractelement <4 x float> {{.*}}, i64 0
diff --git a/clang/test/CodeGen/X86/sse2-builtins.c b/clang/test/CodeGen/X86/sse2-builtins.c
index a71546c2fb6ce..2e009ba432207 100644
--- a/clang/test/CodeGen/X86/sse2-builtins.c
+++ b/clang/test/CodeGen/X86/sse2-builtins.c
@@ -1433,6 +1433,7 @@ __m128d test_mm_sqrt_sd(__m128d A, __m128d B) {
   return _mm_sqrt_sd(A, B);
 }
 
+
 __m128i test_mm_sra_epi16(__m128i A, __m128i B) {
   // CHECK-LABEL: test_mm_sra_epi16
   // CHECK: call <8 x i16> @llvm.x86.sse2.psra.w(<8 x i16> %{{.*}}, <8 x i16> %{{.*}})

>From bece3db5a8411368d4d9d24eb5d5cbc3d2d73b53 Mon Sep 17 00:00:00 2001
From: Shreeyash Pandey <shreeyash335 at gmail.com>
Date: Wed, 1 Oct 2025 20:49:03 +0530
Subject: [PATCH 3/8] [clang] add sqrt{pd|ps}256

Signed-off-by: Shreeyash Pandey <shreeyash335 at gmail.com>
---
 clang/include/clang/Basic/BuiltinsX86.td | 4 ++--
 clang/lib/AST/ByteCode/InterpBuiltin.cpp | 2 ++
 clang/lib/AST/ExprConstant.cpp           | 4 +++-
 clang/lib/Headers/avxintrin.h            | 4 ++--
 clang/test/CodeGen/X86/avx-builtins.c    | 4 ++++
 5 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/clang/include/clang/Basic/BuiltinsX86.td b/clang/include/clang/Basic/BuiltinsX86.td
index d49b7be7a8052..b41540c670362 100644
--- a/clang/include/clang/Basic/BuiltinsX86.td
+++ b/clang/include/clang/Basic/BuiltinsX86.td
@@ -504,13 +504,13 @@ let Features = "avx", Attributes = [NoThrow, Const, Constexpr, RequiredVectorWid
   def vinsertf128_pd256 : X86Builtin<"_Vector<4, double>(_Vector<4, double>, _Vector<2, double>, _Constant int)">;
   def vinsertf128_ps256 : X86Builtin<"_Vector<8, float>(_Vector<8, float>, _Vector<4, float>, _Constant int)">;
   def vinsertf128_si256 : X86Builtin<"_Vector<8, int>(_Vector<8, int>, _Vector<4, int>, _Constant int)">;
+  def sqrtpd256 : X86Builtin<"_Vector<4, double>(_Vector<4, double>)">;
+  def sqrtps256 : X86Builtin<"_Vector<8, float>(_Vector<8, float>)">;
 }
 
 let Features = "avx", Attributes = [NoThrow, Const, RequiredVectorWidth<256>] in {
   def vpermilpd256 : X86Builtin<"_Vector<4, double>(_Vector<4, double>, _Constant int)">;
   def vpermilps256 : X86Builtin<"_Vector<8, float>(_Vector<8, float>, _Constant int)">;
-  def sqrtpd256 : X86Builtin<"_Vector<4, double>(_Vector<4, double>)">;
-  def sqrtps256 : X86Builtin<"_Vector<8, float>(_Vector<8, float>)">;
   def rsqrtps256 : X86Builtin<"_Vector<8, float>(_Vector<8, float>)">;
   def rcpps256 : X86Builtin<"_Vector<8, float>(_Vector<8, float>)">;
   def roundpd256 : X86Builtin<"_Vector<4, double>(_Vector<4, double>, _Constant int)">;
diff --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
index da1cba76dd64f..fe5090dbd94c1 100644
--- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp
+++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
@@ -3829,6 +3829,8 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call,
     return interp__builtin_x86_insert_subvector(S, OpPC, Call, BuiltinID);
   case X86::BI__builtin_ia32_sqrtpd:
   case X86::BI__builtin_ia32_sqrtps:
+  case X86::BI__builtin_ia32_sqrtpd256:
+  case X86::BI__builtin_ia32_sqrtps256:
     return interp__builtin_x86_sqrt(S, OpPC, Call, BuiltinID);
 
   default:
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 95228e7ef5169..67102e55f84d2 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -12237,7 +12237,9 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
     return Success(APValue(ResultElements.data(), ResultElements.size()), E);
   }
   case X86::BI__builtin_ia32_sqrtpd: 
-  case X86::BI__builtin_ia32_sqrtps: {
+  case X86::BI__builtin_ia32_sqrtps: 
+  case X86::BI__builtin_ia32_sqrtpd256:
+  case X86::BI__builtin_ia32_sqrtps256: {
     llvm::errs() << "We are inside sqrtpd/sqrtps\n";
     APValue Source;
     if (!EvaluateAsRValue(Info, E->getArg(0), Source))
diff --git a/clang/lib/Headers/avxintrin.h b/clang/lib/Headers/avxintrin.h
index a7f70994be9db..c794b334ab9c0 100644
--- a/clang/lib/Headers/avxintrin.h
+++ b/clang/lib/Headers/avxintrin.h
@@ -335,7 +335,7 @@ static __inline __m256 __DEFAULT_FN_ATTRS_CONSTEXPR _mm256_mul_ps(__m256 __a,
 ///    A 256-bit vector of [4 x double].
 /// \returns A 256-bit vector of [4 x double] containing the square roots of the
 ///    values in the operand.
-static __inline __m256d __DEFAULT_FN_ATTRS
+static __inline __m256d __DEFAULT_FN_ATTRS_CONSTEXPR
 _mm256_sqrt_pd(__m256d __a)
 {
   return (__m256d)__builtin_ia32_sqrtpd256((__v4df)__a);
@@ -352,7 +352,7 @@ _mm256_sqrt_pd(__m256d __a)
 ///    A 256-bit vector of [8 x float].
 /// \returns A 256-bit vector of [8 x float] containing the square roots of the
 ///    values in the operand.
-static __inline __m256 __DEFAULT_FN_ATTRS
+static __inline __m256 __DEFAULT_FN_ATTRS_CONSTEXPR
 _mm256_sqrt_ps(__m256 __a)
 {
   return (__m256)__builtin_ia32_sqrtps256((__v8sf)__a);
diff --git a/clang/test/CodeGen/X86/avx-builtins.c b/clang/test/CodeGen/X86/avx-builtins.c
index 347cd9ee6a667..28132883d4125 100644
--- a/clang/test/CodeGen/X86/avx-builtins.c
+++ b/clang/test/CodeGen/X86/avx-builtins.c
@@ -1871,12 +1871,16 @@ __m256d test_mm256_sqrt_pd(__m256d A) {
   return _mm256_sqrt_pd(A);
 }
 
+TEST_CONSTEXPR(match_m256d(_mm256_sqrt_pd(_mm256_set_pd(16.0, 9.0, 4.0, 1.0)), 1.0, 2.0, 3.0, 4.0));
+
 __m256 test_mm256_sqrt_ps(__m256 A) {
   // CHECK-LABEL: test_mm256_sqrt_ps
   // CHECK: call {{.*}}<8 x float> @llvm.sqrt.v8f32(<8 x float> %{{.*}})
   return _mm256_sqrt_ps(A);
 }
 
+TEST_CONSTEXPR(match_m256(_mm256_sqrt_ps(_mm256_set_ps(64.0f, 49.0f, 36.0f, 25.0f, 16.0f, 9.0f, 4.0f, 1.0f)), 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f));
+
 void test_mm256_store_pd(double* A, __m256d B) {
   // CHECK-LABEL: test_mm256_store_pd
   // CHECK: store <4 x double> %{{.*}}, ptr %{{.*}}, align 32

>From bd73af2d210cff9249cb3848879d82281b634ed9 Mon Sep 17 00:00:00 2001
From: Shreeyash Pandey <shreeyash335 at gmail.com>
Date: Thu, 2 Oct 2025 17:23:53 +0530
Subject: [PATCH 4/8] [clang] add sqrt{pd|ps}512

Signed-off-by: Shreeyash Pandey <shreeyash335 at gmail.com>
---
 clang/include/clang/Basic/BuiltinsX86.td  |  2 +-
 clang/lib/AST/ByteCode/InterpBuiltin.cpp  | 19 ++++++++++++++++++-
 clang/lib/AST/ExprConstant.cpp            |  4 +++-
 clang/lib/Headers/avx512fintrin.h         |  4 ++--
 clang/test/CodeGen/X86/avx512f-builtins.c |  4 ++++
 5 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/clang/include/clang/Basic/BuiltinsX86.td b/clang/include/clang/Basic/BuiltinsX86.td
index b41540c670362..85f99e538c84a 100644
--- a/clang/include/clang/Basic/BuiltinsX86.td
+++ b/clang/include/clang/Basic/BuiltinsX86.td
@@ -950,7 +950,7 @@ let Features = "pku", Attributes = [NoThrow] in {
   def wrpkru : X86Builtin<"void(unsigned int)">;
 }
 
-let Features = "avx512f", Attributes = [NoThrow, Const, RequiredVectorWidth<512>] in {
+let Features = "avx512f", Attributes = [NoThrow, Const, Constexpr, RequiredVectorWidth<512>] in {
   def sqrtpd512 : X86Builtin<"_Vector<8, double>(_Vector<8, double>, _Constant int)">;
   def sqrtps512 : X86Builtin<"_Vector<16, float>(_Vector<16, float>, _Constant int)">;
 }
diff --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
index fe5090dbd94c1..6be22308c0c25 100644
--- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp
+++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
@@ -3016,7 +3016,12 @@ static bool interp__builtin_x86_sqrt(InterpState &S, CodePtr OpPC,
                                                  unsigned ID) {
   llvm::errs() << "Entering x86 sqrtpd/ps interpretbuiltin\n";
   
-  assert(Call->getNumArgs() == 1);
+  llvm::errs() << "BI__builtin_ia32_sqrtpd512 " << X86::BI__builtin_ia32_sqrtpd512 << '\n';
+  llvm::errs() << "BI__builtin_ia32_sqrtps512 " << X86::BI__builtin_ia32_sqrtps512 << '\n';
+  llvm::errs() << "Current ID " << ID << '\n';
+  llvm::errs() << "GetNumArgs " << Call->getNumArgs() << '\n';
+  unsigned NumArgs = Call->getNumArgs();
+  assert(NumArgs == 1 || NumArgs == 2);
   const Expr *ArgExpr = Call->getArg(0);
   QualType ArgTy = ArgExpr->getType();
   QualType ResultTy = Call->getType();
@@ -3033,6 +3038,16 @@ static bool interp__builtin_x86_sqrt(InterpState &S, CodePtr OpPC,
     SemanticsPtr = &S.getContext().getFloatSemantics(ArgTy);
   const llvm::fltSemantics &Semantics = *SemanticsPtr;
 
+  if (NumArgs == 2) {
+    if (!Call->getArg(1)->getType()->isIntegerType()) {
+      return false;
+    }
+    APSInt RoundingMode = popToAPSInt(S, Call->getArg(1));
+    if (RoundingMode.getZExtValue() != 4) {
+      return false;
+    }
+  }
+
 
   // Scalar case
   if (!ArgTy->isVectorType()) {
@@ -3831,6 +3846,8 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call,
   case X86::BI__builtin_ia32_sqrtps:
   case X86::BI__builtin_ia32_sqrtpd256:
   case X86::BI__builtin_ia32_sqrtps256:
+  case X86::BI__builtin_ia32_sqrtps512:
+  case X86::BI__builtin_ia32_sqrtpd512:
     return interp__builtin_x86_sqrt(S, OpPC, Call, BuiltinID);
 
   default:
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 67102e55f84d2..a5550996b1fcd 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -12239,7 +12239,9 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
   case X86::BI__builtin_ia32_sqrtpd: 
   case X86::BI__builtin_ia32_sqrtps: 
   case X86::BI__builtin_ia32_sqrtpd256:
-  case X86::BI__builtin_ia32_sqrtps256: {
+  case X86::BI__builtin_ia32_sqrtps256: 
+  case X86::BI__builtin_ia32_sqrtps512:
+  case X86::BI__builtin_ia32_sqrtpd512: {
     llvm::errs() << "We are inside sqrtpd/sqrtps\n";
     APValue Source;
     if (!EvaluateAsRValue(Info, E->getArg(0), Source))
diff --git a/clang/lib/Headers/avx512fintrin.h b/clang/lib/Headers/avx512fintrin.h
index 80e58425cdd71..e5b54dd7285eb 100644
--- a/clang/lib/Headers/avx512fintrin.h
+++ b/clang/lib/Headers/avx512fintrin.h
@@ -1458,7 +1458,7 @@ _mm512_mask_mullox_epi64(__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) {
                                        (__v8df)_mm512_sqrt_round_pd((A), (R)), \
                                        (__v8df)_mm512_setzero_pd()))
 
-static  __inline__ __m512d __DEFAULT_FN_ATTRS512
+static  __inline__ __m512d __DEFAULT_FN_ATTRS512_CONSTEXPR
 _mm512_sqrt_pd(__m512d __A)
 {
   return (__m512d)__builtin_ia32_sqrtpd512((__v8df)__A,
@@ -1494,7 +1494,7 @@ _mm512_maskz_sqrt_pd (__mmask8 __U, __m512d __A)
                                       (__v16sf)_mm512_sqrt_round_ps((A), (R)), \
                                       (__v16sf)_mm512_setzero_ps()))
 
-static  __inline__ __m512 __DEFAULT_FN_ATTRS512
+static  __inline__ __m512 __DEFAULT_FN_ATTRS512_CONSTEXPR
 _mm512_sqrt_ps(__m512 __A)
 {
   return (__m512)__builtin_ia32_sqrtps512((__v16sf)__A,
diff --git a/clang/test/CodeGen/X86/avx512f-builtins.c b/clang/test/CodeGen/X86/avx512f-builtins.c
index 84eaad8d99e61..c45139489a047 100644
--- a/clang/test/CodeGen/X86/avx512f-builtins.c
+++ b/clang/test/CodeGen/X86/avx512f-builtins.c
@@ -18,6 +18,8 @@ __m512d test_mm512_sqrt_pd(__m512d a)
   return _mm512_sqrt_pd(a);
 }
 
+TEST_CONSTEXPR(match_m512d(_mm512_sqrt_pd(_mm512_set_pd(16.0, 9.0, 4.0, 1.0, 16.0, 9.0, 4.0, 1.0)), 1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0, 4.0));
+
 __m512d test_mm512_mask_sqrt_pd (__m512d __W, __mmask8 __U, __m512d __A)
 {
   // CHECK-LABEL: test_mm512_mask_sqrt_pd 
@@ -68,6 +70,8 @@ __m512 test_mm512_sqrt_ps(__m512 a)
   return _mm512_sqrt_ps(a);
 }
 
+TEST_CONSTEXPR(match_m512(_mm512_sqrt_ps(_mm512_set_ps(64.0f, 49.0f, 36.0f, 25.0f, 16.0f, 9.0f, 4.0f, 1.0f, 64.0f, 49.0f, 36.0f, 25.0f, 16.0f, 9.0f, 4.0f, 1.0f)), 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f));
+
 __m512 test_mm512_mask_sqrt_ps(__m512 __W, __mmask16 __U, __m512 __A)
 {
   // CHECK-LABEL: test_mm512_mask_sqrt_ps

>From 69a4e222674ff0e0db7323756f80ee3743ece7b5 Mon Sep 17 00:00:00 2001
From: Shreeyash Pandey <shreeyash335 at gmail.com>
Date: Thu, 2 Oct 2025 18:04:07 +0530
Subject: [PATCH 5/8] [clang] add masked sqrt

Signed-off-by: Shreeyash Pandey <shreeyash335 at gmail.com>
---
 clang/lib/Headers/avx512vlintrin.h         | 16 +++++++--------
 clang/test/CodeGen/X86/avx512vl-builtins.c | 24 ++++++++++++++++++++++
 2 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/clang/lib/Headers/avx512vlintrin.h b/clang/lib/Headers/avx512vlintrin.h
index 754f43ad88543..ea41f975546b7 100644
--- a/clang/lib/Headers/avx512vlintrin.h
+++ b/clang/lib/Headers/avx512vlintrin.h
@@ -3444,56 +3444,56 @@ _mm256_maskz_scalef_ps (__mmask8 __U, __m256 __A, __m256 __B) {
                                  (__v8si)(__m256i)(index), \
                                  (__v8si)(__m256i)(v1), (int)(scale))
 
-  static __inline__ __m128d __DEFAULT_FN_ATTRS128
+  static __inline__ __m128d __DEFAULT_FN_ATTRS128_CONSTEXPR
   _mm_mask_sqrt_pd(__m128d __W, __mmask8 __U, __m128d __A) {
     return (__m128d)__builtin_ia32_selectpd_128((__mmask8)__U,
                                                 (__v2df)_mm_sqrt_pd(__A),
                                                 (__v2df)__W);
   }
 
-  static __inline__ __m128d __DEFAULT_FN_ATTRS128
+  static __inline__ __m128d __DEFAULT_FN_ATTRS128_CONSTEXPR
   _mm_maskz_sqrt_pd(__mmask8 __U, __m128d __A) {
     return (__m128d)__builtin_ia32_selectpd_128((__mmask8)__U,
                                                 (__v2df)_mm_sqrt_pd(__A),
                                                 (__v2df)_mm_setzero_pd());
   }
 
-  static __inline__ __m256d __DEFAULT_FN_ATTRS256
+  static __inline__ __m256d __DEFAULT_FN_ATTRS256_CONSTEXPR
   _mm256_mask_sqrt_pd(__m256d __W, __mmask8 __U, __m256d __A) {
     return (__m256d)__builtin_ia32_selectpd_256((__mmask8)__U,
                                                 (__v4df)_mm256_sqrt_pd(__A),
                                                 (__v4df)__W);
   }
 
-  static __inline__ __m256d __DEFAULT_FN_ATTRS256
+  static __inline__ __m256d __DEFAULT_FN_ATTRS256_CONSTEXPR
   _mm256_maskz_sqrt_pd(__mmask8 __U, __m256d __A) {
     return (__m256d)__builtin_ia32_selectpd_256((__mmask8)__U,
                                                 (__v4df)_mm256_sqrt_pd(__A),
                                                 (__v4df)_mm256_setzero_pd());
   }
 
-  static __inline__ __m128 __DEFAULT_FN_ATTRS128
+  static __inline__ __m128 __DEFAULT_FN_ATTRS128_CONSTEXPR
   _mm_mask_sqrt_ps(__m128 __W, __mmask8 __U, __m128 __A) {
     return (__m128)__builtin_ia32_selectps_128((__mmask8)__U,
                                                (__v4sf)_mm_sqrt_ps(__A),
                                                (__v4sf)__W);
   }
 
-  static __inline__ __m128 __DEFAULT_FN_ATTRS128
+  static __inline__ __m128 __DEFAULT_FN_ATTRS128_CONSTEXPR
   _mm_maskz_sqrt_ps(__mmask8 __U, __m128 __A) {
     return (__m128)__builtin_ia32_selectps_128((__mmask8)__U,
                                                (__v4sf)_mm_sqrt_ps(__A),
                                                (__v4sf)_mm_setzero_ps());
   }
 
-  static __inline__ __m256 __DEFAULT_FN_ATTRS256
+  static __inline__ __m256 __DEFAULT_FN_ATTRS256_CONSTEXPR
   _mm256_mask_sqrt_ps(__m256 __W, __mmask8 __U, __m256 __A) {
     return (__m256)__builtin_ia32_selectps_256((__mmask8)__U,
                                                (__v8sf)_mm256_sqrt_ps(__A),
                                                (__v8sf)__W);
   }
 
-  static __inline__ __m256 __DEFAULT_FN_ATTRS256
+  static __inline__ __m256 __DEFAULT_FN_ATTRS256_CONSTEXPR
   _mm256_maskz_sqrt_ps(__mmask8 __U, __m256 __A) {
     return (__m256)__builtin_ia32_selectps_256((__mmask8)__U,
                                                (__v8sf)_mm256_sqrt_ps(__A),
diff --git a/clang/test/CodeGen/X86/avx512vl-builtins.c b/clang/test/CodeGen/X86/avx512vl-builtins.c
index 5282c7ab06dea..67cab0097b641 100644
--- a/clang/test/CodeGen/X86/avx512vl-builtins.c
+++ b/clang/test/CodeGen/X86/avx512vl-builtins.c
@@ -5514,48 +5514,72 @@ __m128d test_mm_mask_sqrt_pd(__m128d __W, __mmask8 __U, __m128d __A) {
   // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}
   return _mm_mask_sqrt_pd(__W,__U,__A); 
 }
+
+TEST_CONSTEXPR(match_m128d(_mm_mask_sqrt_pd(_mm_set_pd(200.0, 100.0), 0b01, _mm_set_pd(9.0, 4.0)), 2.0, 200.0));
+
 __m128d test_mm_maskz_sqrt_pd(__mmask8 __U, __m128d __A) {
   // CHECK-LABEL: test_mm_maskz_sqrt_pd
   // CHECK: @llvm.sqrt.v2f64
   // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}
   return _mm_maskz_sqrt_pd(__U,__A); 
 }
+
+TEST_CONSTEXPR(match_m128d(_mm_maskz_sqrt_pd(0b10, _mm_set_pd(9.0, 4.0)), 0.0, 3.0));
+
 __m256d test_mm256_mask_sqrt_pd(__m256d __W, __mmask8 __U, __m256d __A) {
   // CHECK-LABEL: test_mm256_mask_sqrt_pd
   // CHECK: @llvm.sqrt.v4f64
   // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
   return _mm256_mask_sqrt_pd(__W,__U,__A); 
 }
+
+TEST_CONSTEXPR(match_m256d(_mm256_mask_sqrt_pd(_mm256_set_pd(400.0, 300.0, 200.0, 100.0), 0b1001, _mm256_set_pd(25.0, 16.0, 9.0, 4.0)), 2.0, 200.0, 300.0, 5.0));
+
 __m256d test_mm256_maskz_sqrt_pd(__mmask8 __U, __m256d __A) {
   // CHECK-LABEL: test_mm256_maskz_sqrt_pd
   // CHECK: @llvm.sqrt.v4f64
   // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
   return _mm256_maskz_sqrt_pd(__U,__A); 
 }
+
+TEST_CONSTEXPR(match_m256d(_mm256_maskz_sqrt_pd(0b0110, _mm256_set_pd(25.0, 16.0, 9.0, 4.0)), 0.0, 3.0, 4.0, 0.0));
+
 __m128 test_mm_mask_sqrt_ps(__m128 __W, __mmask8 __U, __m128 __A) {
   // CHECK-LABEL: test_mm_mask_sqrt_ps
   // CHECK: @llvm.sqrt.v4f32
   // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
   return _mm_mask_sqrt_ps(__W,__U,__A); 
 }
+
+TEST_CONSTEXPR(match_m128(_mm_mask_sqrt_ps(_mm_set_ps(400.0f, 300.0f, 200.0f, 100.0f), 0b1010, _mm_set_ps(25.0f, 16.0f, 9.0f, 4.0f)), 100.0f, 3.0f, 300.0f, 5.0f));
+
 __m128 test_mm_maskz_sqrt_ps(__mmask8 __U, __m128 __A) {
   // CHECK-LABEL: test_mm_maskz_sqrt_ps
   // CHECK: @llvm.sqrt.v4f32
   // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
   return _mm_maskz_sqrt_ps(__U,__A); 
 }
+
+TEST_CONSTEXPR(match_m128(_mm_maskz_sqrt_ps(0b0011, _mm_set_ps(25.0f, 16.0f, 9.0f, 4.0f)), 2.0f, 3.0f, 0.0f, 0.0f));
+
 __m256 test_mm256_mask_sqrt_ps(__m256 __W, __mmask8 __U, __m256 __A) {
   // CHECK-LABEL: test_mm256_mask_sqrt_ps
   // CHECK: @llvm.sqrt.v8f32
   // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
   return _mm256_mask_sqrt_ps(__W,__U,__A); 
 }
+
+TEST_CONSTEXPR(match_m256(_mm256_mask_sqrt_ps(_mm256_set_ps(800.0f, 700.0f, 600.0f, 500.0f, 400.0f, 300.0f, 200.0f, 100.0f), 0b11001100, _mm256_set_ps(64.0f, 49.0f, 36.0f, 25.0f, 16.0f, 9.0f, 4.0f, 1.0f)), 100.0f, 200.0f, 3.0f, 4.0f, 500.0f, 600.0f, 7.0f, 8.0f));
+
 __m256 test_mm256_maskz_sqrt_ps(__mmask8 __U, __m256 __A) {
   // CHECK-LABEL: test_mm256_maskz_sqrt_ps
   // CHECK: @llvm.sqrt.v8f32
   // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
   return _mm256_maskz_sqrt_ps(__U,__A); 
 }
+
+TEST_CONSTEXPR(match_m256(_mm256_maskz_sqrt_ps(0b11110000, _mm256_set_ps(64.0f, 49.0f, 36.0f, 25.0f, 16.0f, 9.0f, 4.0f, 1.0f)), 0.0f, 0.0f, 0.0f, 0.0f, 5.0f, 6.0f, 7.0f, 8.0f));
+
 __m128d test_mm_mask_sub_pd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
   // CHECK-LABEL: test_mm_mask_sub_pd
   // CHECK: fsub <2 x double> %{{.*}}, %{{.*}}

>From 8e50cab159306fd2b132f7ca3377510f6495fc1c Mon Sep 17 00:00:00 2001
From: Shreeyash Pandey <shreeyash335 at gmail.com>
Date: Thu, 2 Oct 2025 18:04:56 +0530
Subject: [PATCH 6/8] [clang] sqrt formatting

Signed-off-by: Shreeyash Pandey <shreeyash335 at gmail.com>
---
 clang/include/clang/Basic/BuiltinsX86.td | 13 ++--
 clang/lib/AST/ByteCode/InterpBuiltin.cpp | 28 ++++----
 clang/lib/AST/ExprConstant.cpp           | 30 ++++----
 clang/lib/Headers/avx512fintrin.h        | 10 ++-
 clang/lib/Headers/avx512vlintrin.h       | 88 +++++++++++-------------
 clang/lib/Headers/avxintrin.h            |  7 +-
 clang/lib/Headers/emmintrin.h            |  3 +-
 clang/lib/Headers/xmmintrin.h            |  4 +-
 8 files changed, 91 insertions(+), 92 deletions(-)

diff --git a/clang/include/clang/Basic/BuiltinsX86.td b/clang/include/clang/Basic/BuiltinsX86.td
index 85f99e538c84a..7d9845fbf4cf5 100644
--- a/clang/include/clang/Basic/BuiltinsX86.td
+++ b/clang/include/clang/Basic/BuiltinsX86.td
@@ -203,7 +203,8 @@ let Features = "sse", Attributes = [NoThrow, Const, RequiredVectorWidth<128>] in
   def shufps : X86Builtin<"_Vector<4, float>(_Vector<4, float>, _Vector<4, float>, _Constant int)">;
 }
 
-let Features = "sse", Attributes = [NoThrow, Const, Constexpr, RequiredVectorWidth<128>] in {
+let Features = "sse",
+    Attributes = [NoThrow, Const, Constexpr, RequiredVectorWidth<128>] in {
   def sqrtps : X86Builtin<"_Vector<4, float>(_Vector<4, float>)">;
 }
 
@@ -224,7 +225,9 @@ let Features = "sse2", Attributes = [NoThrow, Const, RequiredVectorWidth<128>] i
   def pshufd : X86Builtin<"_Vector<4, int>(_Vector<4, int>, _Constant int)">;
   def pshuflw : X86Builtin<"_Vector<8, short>(_Vector<8, short>, _Constant int)">;
   def pshufhw : X86Builtin<"_Vector<8, short>(_Vector<8, short>, _Constant int)">;
-  def psadbw128 : X86Builtin<"_Vector<2, long long int>(_Vector<16, char>, _Vector<16, char>)">;
+  def psadbw128
+      : X86Builtin<
+            "_Vector<2, long long int>(_Vector<16, char>, _Vector<16, char>)">;
   def sqrtsd : X86Builtin<"_Vector<2, double>(_Vector<2, double>)">;
   def shufpd : X86Builtin<"_Vector<2, double>(_Vector<2, double>, _Vector<2, double>, _Constant int)">;
   def cvtpd2dq : X86Builtin<"_Vector<2, long long int>(_Vector<2, double>)">;
@@ -510,7 +513,8 @@ let Features = "avx", Attributes = [NoThrow, Const, Constexpr, RequiredVectorWid
 
 let Features = "avx", Attributes = [NoThrow, Const, RequiredVectorWidth<256>] in {
   def vpermilpd256 : X86Builtin<"_Vector<4, double>(_Vector<4, double>, _Constant int)">;
-  def vpermilps256 : X86Builtin<"_Vector<8, float>(_Vector<8, float>, _Constant int)">;
+  def vpermilps256
+      : X86Builtin<"_Vector<8, float>(_Vector<8, float>, _Constant int)">;
   def rsqrtps256 : X86Builtin<"_Vector<8, float>(_Vector<8, float>)">;
   def rcpps256 : X86Builtin<"_Vector<8, float>(_Vector<8, float>)">;
   def roundpd256 : X86Builtin<"_Vector<4, double>(_Vector<4, double>, _Constant int)">;
@@ -950,7 +954,8 @@ let Features = "pku", Attributes = [NoThrow] in {
   def wrpkru : X86Builtin<"void(unsigned int)">;
 }
 
-let Features = "avx512f", Attributes = [NoThrow, Const, Constexpr, RequiredVectorWidth<512>] in {
+let Features = "avx512f",
+    Attributes = [NoThrow, Const, Constexpr, RequiredVectorWidth<512>] in {
   def sqrtpd512 : X86Builtin<"_Vector<8, double>(_Vector<8, double>, _Constant int)">;
   def sqrtps512 : X86Builtin<"_Vector<16, float>(_Vector<16, float>, _Constant int)">;
 }
diff --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
index 6be22308c0c25..ad3443fb162a1 100644
--- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp
+++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
@@ -2996,7 +2996,8 @@ static bool interp__builtin_x86_insert_subvector(InterpState &S, CodePtr OpPC,
   return true;
 }
 
-static llvm::APFloat apply_x86_sqrt(llvm::APFloat Val, const llvm::fltSemantics &Semantics) {
+static llvm::APFloat apply_x86_sqrt(llvm::APFloat Val,
+                                    const llvm::fltSemantics &Semantics) {
   if (Val.isNegative() && !Val.isZero()) {
     return llvm::APFloat::getQNaN(Semantics);
   } else {
@@ -3006,18 +3007,20 @@ static llvm::APFloat apply_x86_sqrt(llvm::APFloat Val, const llvm::fltSemantics
     llvm::APFloat TempValue(SqrtValue);
 
     bool LosesInfo;
-    TempValue.convert(Semantics, llvm::APFloat::rmNearestTiesToEven, &LosesInfo);
+    TempValue.convert(Semantics, llvm::APFloat::rmNearestTiesToEven,
+                      &LosesInfo);
     return TempValue;
   }
 }
 
 static bool interp__builtin_x86_sqrt(InterpState &S, CodePtr OpPC,
-                                                 const CallExpr *Call,
-                                                 unsigned ID) {
+                                     const CallExpr *Call, unsigned ID) {
   llvm::errs() << "Entering x86 sqrtpd/ps interpretbuiltin\n";
-  
-  llvm::errs() << "BI__builtin_ia32_sqrtpd512 " << X86::BI__builtin_ia32_sqrtpd512 << '\n';
-  llvm::errs() << "BI__builtin_ia32_sqrtps512 " << X86::BI__builtin_ia32_sqrtps512 << '\n';
+
+  llvm::errs() << "BI__builtin_ia32_sqrtpd512 "
+               << X86::BI__builtin_ia32_sqrtpd512 << '\n';
+  llvm::errs() << "BI__builtin_ia32_sqrtps512 "
+               << X86::BI__builtin_ia32_sqrtps512 << '\n';
   llvm::errs() << "Current ID " << ID << '\n';
   llvm::errs() << "GetNumArgs " << Call->getNumArgs() << '\n';
   unsigned NumArgs = Call->getNumArgs();
@@ -3025,7 +3028,7 @@ static bool interp__builtin_x86_sqrt(InterpState &S, CodePtr OpPC,
   const Expr *ArgExpr = Call->getArg(0);
   QualType ArgTy = ArgExpr->getType();
   QualType ResultTy = Call->getType();
-  
+
   if (!(ArgTy->isRealFloatingType() ||
         (ArgTy->isVectorType() &&
          ArgTy->castAs<VectorType>()->getElementType()->isRealFloatingType())))
@@ -3033,7 +3036,8 @@ static bool interp__builtin_x86_sqrt(InterpState &S, CodePtr OpPC,
 
   const llvm::fltSemantics *SemanticsPtr;
   if (ArgTy->isVectorType())
-    SemanticsPtr = &S.getContext().getFloatSemantics(ArgTy->castAs<VectorType>()->getElementType());
+    SemanticsPtr = &S.getContext().getFloatSemantics(
+        ArgTy->castAs<VectorType>()->getElementType());
   else
     SemanticsPtr = &S.getContext().getFloatSemantics(ArgTy);
   const llvm::fltSemantics &Semantics = *SemanticsPtr;
@@ -3048,7 +3052,6 @@ static bool interp__builtin_x86_sqrt(InterpState &S, CodePtr OpPC,
     }
   }
 
-
   // Scalar case
   if (!ArgTy->isVectorType()) {
     llvm::APFloat Val = S.Stk.pop<Floating>().getAPFloat();
@@ -3061,13 +3064,14 @@ static bool interp__builtin_x86_sqrt(InterpState &S, CodePtr OpPC,
   assert(ArgTy->isVectorType());
   llvm::errs() << "Considering this as a vector\n";
   const auto *VT = ArgTy->castAs<VectorType>();
-  
+
   const Pointer &Arg = S.Stk.pop<Pointer>();
   const Pointer &Dst = S.Stk.peek<Pointer>();
 
   assert(Arg.getFieldDesc()->isPrimitiveArray());
   assert(Dst.getFieldDesc()->isPrimitiveArray());
-  assert(Arg.getFieldDesc()->getNumElems() == Dst.getFieldDesc()->getNumElems());
+  assert(Arg.getFieldDesc()->getNumElems() ==
+         Dst.getFieldDesc()->getNumElems());
 
   PrimType ElemT = *S.getContext().classify(VT->getElementType());
   unsigned NumElems = VT->getNumElements();
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index a5550996b1fcd..9148c699b6b59 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -64,11 +64,11 @@
 #include "llvm/Support/SipHash.h"
 #include "llvm/Support/TimeProfiler.h"
 #include "llvm/Support/raw_ostream.h"
+#include <cmath>
 #include <cstring>
 #include <functional>
 #include <limits>
 #include <optional>
-#include <cmath>
 
 #define DEBUG_TYPE "exprconstant"
 
@@ -12236,10 +12236,10 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
 
     return Success(APValue(ResultElements.data(), ResultElements.size()), E);
   }
-  case X86::BI__builtin_ia32_sqrtpd: 
-  case X86::BI__builtin_ia32_sqrtps: 
+  case X86::BI__builtin_ia32_sqrtpd:
+  case X86::BI__builtin_ia32_sqrtps:
   case X86::BI__builtin_ia32_sqrtpd256:
-  case X86::BI__builtin_ia32_sqrtps256: 
+  case X86::BI__builtin_ia32_sqrtps256:
   case X86::BI__builtin_ia32_sqrtps512:
   case X86::BI__builtin_ia32_sqrtpd512: {
     llvm::errs() << "We are inside sqrtpd/sqrtps\n";
@@ -12248,7 +12248,8 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
       return false;
 
     QualType DestEltTy = E->getType()->castAs<VectorType>()->getElementType();
-    const llvm::fltSemantics &Semantics = Info.Ctx.getFloatTypeSemantics(DestEltTy); // Retrieve correct semantics
+    const llvm::fltSemantics &Semantics =
+        Info.Ctx.getFloatTypeSemantics(DestEltTy); // Retrieve correct semantics
     unsigned SourceLen = Source.getVectorLength();
     SmallVector<APValue, 4> ResultElements;
     ResultElements.reserve(SourceLen);
@@ -12263,20 +12264,23 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
         if (Value.isNegative() && !Value.isZero()) {
           Value = llvm::APFloat::getQNaN(Value.getSemantics());
         } else {
-double DoubleValue = Value.convertToDouble();
-double SqrtValue = sqrt(DoubleValue);
-llvm::APFloat TempValue(SqrtValue);
-bool LosesInfo;
-auto RetStatus = TempValue.convert(Semantics, llvm::RoundingMode::NearestTiesToEven, &LosesInfo);
-Value = TempValue;
-          //llvm::errs() << "Pushing " << SqrtValue << ' ' << Value2 << " to resultelements\n";
+          double DoubleValue = Value.convertToDouble();
+          double SqrtValue = sqrt(DoubleValue);
+          llvm::APFloat TempValue(SqrtValue);
+          bool LosesInfo;
+          auto RetStatus = TempValue.convert(
+              Semantics, llvm::RoundingMode::NearestTiesToEven, &LosesInfo);
+          Value = TempValue;
+          // llvm::errs() << "Pushing " << SqrtValue << ' ' << Value2 << " to
+          // resultelements\n";
         }
         ResultElements.push_back(APValue(Value));
       } else {
         return false;
       }
     }
-    llvm::errs() << "Outside the loop, about to exit " << "res size " << ResultElements.size() << "\n";
+    llvm::errs() << "Outside the loop, about to exit " << "res size "
+                 << ResultElements.size() << "\n";
     return Success(APValue(ResultElements.data(), ResultElements.size()), E);
   }
   }
diff --git a/clang/lib/Headers/avx512fintrin.h b/clang/lib/Headers/avx512fintrin.h
index e5b54dd7285eb..4ec4ab05ab468 100644
--- a/clang/lib/Headers/avx512fintrin.h
+++ b/clang/lib/Headers/avx512fintrin.h
@@ -1458,9 +1458,8 @@ _mm512_mask_mullox_epi64(__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) {
                                        (__v8df)_mm512_sqrt_round_pd((A), (R)), \
                                        (__v8df)_mm512_setzero_pd()))
 
-static  __inline__ __m512d __DEFAULT_FN_ATTRS512_CONSTEXPR
-_mm512_sqrt_pd(__m512d __A)
-{
+static __inline__ __m512d __DEFAULT_FN_ATTRS512_CONSTEXPR
+_mm512_sqrt_pd(__m512d __A) {
   return (__m512d)__builtin_ia32_sqrtpd512((__v8df)__A,
                                            _MM_FROUND_CUR_DIRECTION);
 }
@@ -1494,9 +1493,8 @@ _mm512_maskz_sqrt_pd (__mmask8 __U, __m512d __A)
                                       (__v16sf)_mm512_sqrt_round_ps((A), (R)), \
                                       (__v16sf)_mm512_setzero_ps()))
 
-static  __inline__ __m512 __DEFAULT_FN_ATTRS512_CONSTEXPR
-_mm512_sqrt_ps(__m512 __A)
-{
+static __inline__ __m512 __DEFAULT_FN_ATTRS512_CONSTEXPR
+_mm512_sqrt_ps(__m512 __A) {
   return (__m512)__builtin_ia32_sqrtps512((__v16sf)__A,
                                           _MM_FROUND_CUR_DIRECTION);
 }
diff --git a/clang/lib/Headers/avx512vlintrin.h b/clang/lib/Headers/avx512vlintrin.h
index ea41f975546b7..99351610cb1fc 100644
--- a/clang/lib/Headers/avx512vlintrin.h
+++ b/clang/lib/Headers/avx512vlintrin.h
@@ -3444,61 +3444,53 @@ _mm256_maskz_scalef_ps (__mmask8 __U, __m256 __A, __m256 __B) {
                                  (__v8si)(__m256i)(index), \
                                  (__v8si)(__m256i)(v1), (int)(scale))
 
-  static __inline__ __m128d __DEFAULT_FN_ATTRS128_CONSTEXPR
-  _mm_mask_sqrt_pd(__m128d __W, __mmask8 __U, __m128d __A) {
-    return (__m128d)__builtin_ia32_selectpd_128((__mmask8)__U,
-                                                (__v2df)_mm_sqrt_pd(__A),
-                                                (__v2df)__W);
-  }
+static __inline__ __m128d __DEFAULT_FN_ATTRS128_CONSTEXPR
+_mm_mask_sqrt_pd(__m128d __W, __mmask8 __U, __m128d __A) {
+  return (__m128d)__builtin_ia32_selectpd_128(
+      (__mmask8)__U, (__v2df)_mm_sqrt_pd(__A), (__v2df)__W);
+}
 
-  static __inline__ __m128d __DEFAULT_FN_ATTRS128_CONSTEXPR
-  _mm_maskz_sqrt_pd(__mmask8 __U, __m128d __A) {
-    return (__m128d)__builtin_ia32_selectpd_128((__mmask8)__U,
-                                                (__v2df)_mm_sqrt_pd(__A),
-                                                (__v2df)_mm_setzero_pd());
-  }
+static __inline__ __m128d __DEFAULT_FN_ATTRS128_CONSTEXPR
+_mm_maskz_sqrt_pd(__mmask8 __U, __m128d __A) {
+  return (__m128d)__builtin_ia32_selectpd_128(
+      (__mmask8)__U, (__v2df)_mm_sqrt_pd(__A), (__v2df)_mm_setzero_pd());
+}
 
-  static __inline__ __m256d __DEFAULT_FN_ATTRS256_CONSTEXPR
-  _mm256_mask_sqrt_pd(__m256d __W, __mmask8 __U, __m256d __A) {
-    return (__m256d)__builtin_ia32_selectpd_256((__mmask8)__U,
-                                                (__v4df)_mm256_sqrt_pd(__A),
-                                                (__v4df)__W);
-  }
+static __inline__ __m256d __DEFAULT_FN_ATTRS256_CONSTEXPR
+_mm256_mask_sqrt_pd(__m256d __W, __mmask8 __U, __m256d __A) {
+  return (__m256d)__builtin_ia32_selectpd_256(
+      (__mmask8)__U, (__v4df)_mm256_sqrt_pd(__A), (__v4df)__W);
+}
 
-  static __inline__ __m256d __DEFAULT_FN_ATTRS256_CONSTEXPR
-  _mm256_maskz_sqrt_pd(__mmask8 __U, __m256d __A) {
-    return (__m256d)__builtin_ia32_selectpd_256((__mmask8)__U,
-                                                (__v4df)_mm256_sqrt_pd(__A),
-                                                (__v4df)_mm256_setzero_pd());
-  }
+static __inline__ __m256d __DEFAULT_FN_ATTRS256_CONSTEXPR
+_mm256_maskz_sqrt_pd(__mmask8 __U, __m256d __A) {
+  return (__m256d)__builtin_ia32_selectpd_256(
+      (__mmask8)__U, (__v4df)_mm256_sqrt_pd(__A), (__v4df)_mm256_setzero_pd());
+}
 
-  static __inline__ __m128 __DEFAULT_FN_ATTRS128_CONSTEXPR
-  _mm_mask_sqrt_ps(__m128 __W, __mmask8 __U, __m128 __A) {
-    return (__m128)__builtin_ia32_selectps_128((__mmask8)__U,
-                                               (__v4sf)_mm_sqrt_ps(__A),
-                                               (__v4sf)__W);
-  }
+static __inline__ __m128 __DEFAULT_FN_ATTRS128_CONSTEXPR
+_mm_mask_sqrt_ps(__m128 __W, __mmask8 __U, __m128 __A) {
+  return (__m128)__builtin_ia32_selectps_128(
+      (__mmask8)__U, (__v4sf)_mm_sqrt_ps(__A), (__v4sf)__W);
+}
 
-  static __inline__ __m128 __DEFAULT_FN_ATTRS128_CONSTEXPR
-  _mm_maskz_sqrt_ps(__mmask8 __U, __m128 __A) {
-    return (__m128)__builtin_ia32_selectps_128((__mmask8)__U,
-                                               (__v4sf)_mm_sqrt_ps(__A),
-                                               (__v4sf)_mm_setzero_ps());
-  }
+static __inline__ __m128 __DEFAULT_FN_ATTRS128_CONSTEXPR
+_mm_maskz_sqrt_ps(__mmask8 __U, __m128 __A) {
+  return (__m128)__builtin_ia32_selectps_128(
+      (__mmask8)__U, (__v4sf)_mm_sqrt_ps(__A), (__v4sf)_mm_setzero_ps());
+}
 
-  static __inline__ __m256 __DEFAULT_FN_ATTRS256_CONSTEXPR
-  _mm256_mask_sqrt_ps(__m256 __W, __mmask8 __U, __m256 __A) {
-    return (__m256)__builtin_ia32_selectps_256((__mmask8)__U,
-                                               (__v8sf)_mm256_sqrt_ps(__A),
-                                               (__v8sf)__W);
-  }
+static __inline__ __m256 __DEFAULT_FN_ATTRS256_CONSTEXPR
+_mm256_mask_sqrt_ps(__m256 __W, __mmask8 __U, __m256 __A) {
+  return (__m256)__builtin_ia32_selectps_256(
+      (__mmask8)__U, (__v8sf)_mm256_sqrt_ps(__A), (__v8sf)__W);
+}
 
-  static __inline__ __m256 __DEFAULT_FN_ATTRS256_CONSTEXPR
-  _mm256_maskz_sqrt_ps(__mmask8 __U, __m256 __A) {
-    return (__m256)__builtin_ia32_selectps_256((__mmask8)__U,
-                                               (__v8sf)_mm256_sqrt_ps(__A),
-                                               (__v8sf)_mm256_setzero_ps());
-  }
+static __inline__ __m256 __DEFAULT_FN_ATTRS256_CONSTEXPR
+_mm256_maskz_sqrt_ps(__mmask8 __U, __m256 __A) {
+  return (__m256)__builtin_ia32_selectps_256(
+      (__mmask8)__U, (__v8sf)_mm256_sqrt_ps(__A), (__v8sf)_mm256_setzero_ps());
+}
 
   static __inline__ __m128d __DEFAULT_FN_ATTRS128
   _mm_mask_sub_pd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) {
diff --git a/clang/lib/Headers/avxintrin.h b/clang/lib/Headers/avxintrin.h
index c794b334ab9c0..2ef8d5085869f 100644
--- a/clang/lib/Headers/avxintrin.h
+++ b/clang/lib/Headers/avxintrin.h
@@ -336,8 +336,7 @@ static __inline __m256 __DEFAULT_FN_ATTRS_CONSTEXPR _mm256_mul_ps(__m256 __a,
 /// \returns A 256-bit vector of [4 x double] containing the square roots of the
 ///    values in the operand.
 static __inline __m256d __DEFAULT_FN_ATTRS_CONSTEXPR
-_mm256_sqrt_pd(__m256d __a)
-{
+_mm256_sqrt_pd(__m256d __a) {
   return (__m256d)__builtin_ia32_sqrtpd256((__v4df)__a);
 }
 
@@ -352,9 +351,7 @@ _mm256_sqrt_pd(__m256d __a)
 ///    A 256-bit vector of [8 x float].
 /// \returns A 256-bit vector of [8 x float] containing the square roots of the
 ///    values in the operand.
-static __inline __m256 __DEFAULT_FN_ATTRS_CONSTEXPR
-_mm256_sqrt_ps(__m256 __a)
-{
+static __inline __m256 __DEFAULT_FN_ATTRS_CONSTEXPR _mm256_sqrt_ps(__m256 __a) {
   return (__m256)__builtin_ia32_sqrtps256((__v8sf)__a);
 }
 
diff --git a/clang/lib/Headers/emmintrin.h b/clang/lib/Headers/emmintrin.h
index fef9e280ba53f..1943624f3424e 100644
--- a/clang/lib/Headers/emmintrin.h
+++ b/clang/lib/Headers/emmintrin.h
@@ -256,7 +256,8 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_sqrt_sd(__m128d __a,
 ///    A 128-bit vector of [2 x double].
 /// \returns A 128-bit vector of [2 x double] containing the square roots of the
 ///    values in the operand.
-static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR _mm_sqrt_pd(__m128d __a) {
+static __inline__ __m128d __DEFAULT_FN_ATTRS_CONSTEXPR
+_mm_sqrt_pd(__m128d __a) {
   return __builtin_ia32_sqrtpd((__v2df)__a);
 }
 
diff --git a/clang/lib/Headers/xmmintrin.h b/clang/lib/Headers/xmmintrin.h
index 2a41324dd31c6..7c68c1395df5c 100644
--- a/clang/lib/Headers/xmmintrin.h
+++ b/clang/lib/Headers/xmmintrin.h
@@ -248,9 +248,7 @@ _mm_sqrt_ss(__m128 __a)
 ///    A 128-bit vector of [4 x float].
 /// \returns A 128-bit vector of [4 x float] containing the square roots of the
 ///    values in the operand.
-static __inline__ __m128 __DEFAULT_FN_ATTRS_CONSTEXPR
-_mm_sqrt_ps(__m128 __a)
-{
+static __inline__ __m128 __DEFAULT_FN_ATTRS_CONSTEXPR _mm_sqrt_ps(__m128 __a) {
   return __builtin_ia32_sqrtps((__v4sf)__a);
 }
 

>From 427920598f556102034af58f8e1712c2b69653df Mon Sep 17 00:00:00 2001
From: Shreeyash Pandey <shreeyash335 at gmail.com>
Date: Thu, 2 Oct 2025 18:08:31 +0530
Subject: [PATCH 7/8] [clang] remove debug messages

Signed-off-by: Shreeyash Pandey <shreeyash335 at gmail.com>
---
 clang/lib/AST/ByteCode/InterpBuiltin.cpp | 11 -----------
 clang/lib/AST/ExprConstant.cpp           |  8 --------
 2 files changed, 19 deletions(-)

diff --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
index ad3443fb162a1..42492784b2e1b 100644
--- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp
+++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
@@ -19,7 +19,6 @@
 #include "llvm/ADT/StringExtras.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/SipHash.h"
-#include "llvm/Support/raw_ostream.h"
 #include <cmath>
 
 namespace clang {
@@ -3015,14 +3014,6 @@ static llvm::APFloat apply_x86_sqrt(llvm::APFloat Val,
 
 static bool interp__builtin_x86_sqrt(InterpState &S, CodePtr OpPC,
                                      const CallExpr *Call, unsigned ID) {
-  llvm::errs() << "Entering x86 sqrtpd/ps interpretbuiltin\n";
-
-  llvm::errs() << "BI__builtin_ia32_sqrtpd512 "
-               << X86::BI__builtin_ia32_sqrtpd512 << '\n';
-  llvm::errs() << "BI__builtin_ia32_sqrtps512 "
-               << X86::BI__builtin_ia32_sqrtps512 << '\n';
-  llvm::errs() << "Current ID " << ID << '\n';
-  llvm::errs() << "GetNumArgs " << Call->getNumArgs() << '\n';
   unsigned NumArgs = Call->getNumArgs();
   assert(NumArgs == 1 || NumArgs == 2);
   const Expr *ArgExpr = Call->getArg(0);
@@ -3062,7 +3053,6 @@ static bool interp__builtin_x86_sqrt(InterpState &S, CodePtr OpPC,
 
   // Vector case
   assert(ArgTy->isVectorType());
-  llvm::errs() << "Considering this as a vector\n";
   const auto *VT = ArgTy->castAs<VectorType>();
 
   const Pointer &Arg = S.Stk.pop<Pointer>();
@@ -3088,7 +3078,6 @@ static bool interp__builtin_x86_sqrt(InterpState &S, CodePtr OpPC,
 
 bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call,
                       uint32_t BuiltinID) {
-  llvm::errs() << "Inside Interpretbuiltin for " << Call << "\n";
   if (!S.getASTContext().BuiltinInfo.isConstantEvaluated(BuiltinID))
     return Invalid(S, OpPC);
 
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 9148c699b6b59..445edfb66b518 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -12242,7 +12242,6 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
   case X86::BI__builtin_ia32_sqrtps256:
   case X86::BI__builtin_ia32_sqrtps512:
   case X86::BI__builtin_ia32_sqrtpd512: {
-    llvm::errs() << "We are inside sqrtpd/sqrtps\n";
     APValue Source;
     if (!EvaluateAsRValue(Info, E->getArg(0), Source))
       return false;
@@ -12254,10 +12253,7 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
     SmallVector<APValue, 4> ResultElements;
     ResultElements.reserve(SourceLen);
 
-    llvm::errs() << "SourceLen " << SourceLen << '\n';
-
     for (unsigned EltNum = 0; EltNum < SourceLen; ++EltNum) {
-      llvm::errs() << "We are inside for loop\n";
       APValue CurrentEle = Source.getVectorElt(EltNum);
       if (DestEltTy->isFloatingType()) {
         llvm::APFloat Value = CurrentEle.getFloat();
@@ -12271,16 +12267,12 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
           auto RetStatus = TempValue.convert(
               Semantics, llvm::RoundingMode::NearestTiesToEven, &LosesInfo);
           Value = TempValue;
-          // llvm::errs() << "Pushing " << SqrtValue << ' ' << Value2 << " to
-          // resultelements\n";
         }
         ResultElements.push_back(APValue(Value));
       } else {
         return false;
       }
     }
-    llvm::errs() << "Outside the loop, about to exit " << "res size "
-                 << ResultElements.size() << "\n";
     return Success(APValue(ResultElements.data(), ResultElements.size()), E);
   }
   }

>From 67efeb82808b3b274296e0b481ff7cf0acc8de5e Mon Sep 17 00:00:00 2001
From: Shreeyash Pandey <shreeyash335 at gmail.com>
Date: Thu, 2 Oct 2025 18:17:13 +0530
Subject: [PATCH 8/8] [clang] remove redundant comment

Signed-off-by: Shreeyash Pandey <shreeyash335 at gmail.com>
---
 clang/lib/AST/ExprConstant.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 445edfb66b518..761648486d3ac 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -12248,7 +12248,7 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
 
     QualType DestEltTy = E->getType()->castAs<VectorType>()->getElementType();
     const llvm::fltSemantics &Semantics =
-        Info.Ctx.getFloatTypeSemantics(DestEltTy); // Retrieve correct semantics
+        Info.Ctx.getFloatTypeSemantics(DestEltTy);
     unsigned SourceLen = Source.getVectorLength();
     SmallVector<APValue, 4> ResultElements;
     ResultElements.reserve(SourceLen);



More information about the cfe-commits mailing list