[clang] [X86][bytecode] Allow SSE/AVX BLEND imm intrinsics to be used in constexpr (PR #157776)

via cfe-commits cfe-commits at lists.llvm.org
Wed Sep 10 19:53:12 PDT 2025


================
@@ -11945,6 +11945,40 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
 
     return Success(APValue(ResultElements.data(), ResultElements.size()), E);
   }
+  case X86::BI__builtin_ia32_blendpd:
+  case X86::BI__builtin_ia32_blendpd256:
+  case X86::BI__builtin_ia32_blendps:
+  case X86::BI__builtin_ia32_blendps256:
+  case X86::BI__builtin_ia32_pblendw128:
+  case X86::BI__builtin_ia32_pblendw256:
+  case X86::BI__builtin_ia32_pblendd128:
+  case X86::BI__builtin_ia32_pblendd256: {
+    APValue SourceF, SourceT, SourceC;
+    if (!EvaluateAsRValue(Info, E->getArg(0), SourceF) ||
+        !EvaluateAsRValue(Info, E->getArg(1), SourceT) ||
+        !EvaluateAsRValue(Info, E->getArg(2), SourceC))
+      return false;
+
+    assert(SourceF.getKind() == clang::APValue::Vector);
----------------
brandonxin wrote:

Thanks for your advice. However, I just noticed that `assert` is not commonly used in `VectorExprEvaluator::VisitCallExpr`, and most builtins don't check operands' types explicitly. Should I just remove these assertions for better consistency?

https://github.com/llvm/llvm-project/pull/157776


More information about the cfe-commits mailing list