[clang] [Headers][X86] Enable constexpr handling for MMX/SSE/AVX/AVX512 PMADDWD/PMADDUBSW intrinsics (PR #161563)

Simon Pilgrim via cfe-commits cfe-commits at lists.llvm.org
Mon Oct 6 06:48:09 PDT 2025


================
@@ -3364,6 +3425,16 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call,
     return interp__builtin_elementwise_int_binop(S, OpPC, Call,
                                                  llvm::APIntOps::avgCeilU);
 
+  case clang::X86::BI__builtin_ia32_pmaddubsw128:
+  case clang::X86::BI__builtin_ia32_pmaddubsw256:
+  case clang::X86::BI__builtin_ia32_pmaddubsw512:
+    return interp__builtin_ia32_pmadd(S, OpPC, Call, BuiltinID);
----------------
RKSimon wrote:

use a callback system like interp__builtin_elementwise_int_binop:
```cpp
return interp__builtin_ia32_pmadd(S, OpPC, Call, 
  [](const APSInt &LoLHS, const APSInt &HiLHS, const APSInt &HiRHS, const APSInt &HiRHS) {
    unsigned BitWidth = 2 * LHS.getBitWidth();
    return (LoLHS.zext(BitWidth) * LoRHS.sext(BitWidth)).sadd_sat((HiLHS.zext(BitWidth) * HiRHS.sext(BitWidth)));
  });
```

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


More information about the cfe-commits mailing list