[clang] [Headers][X86] VisitCallExpr constexpr immediate shifts (#154293) (PR #155542)

Simon Pilgrim via cfe-commits cfe-commits at lists.llvm.org
Fri Aug 29 04:19:56 PDT 2025


================
@@ -11704,6 +11793,32 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
         ResultElements.push_back(
             APValue(APSInt(LHS.lshr(RHS.getZExtValue()), DestUnsigned)));
         break;
+        switch (E->getBuiltinCallee()) {
+        case Builtin::BI__builtin_elementwise_add_sat:
+          ResultElements.push_back(APValue(
+              APSInt(LHS.isSigned() ? LHS.sadd_sat(RHS) : LHS.uadd_sat(RHS),
+                     DestEltTy->isUnsignedIntegerOrEnumerationType())));
+          break;
+        case Builtin::BI__builtin_elementwise_sub_sat:
+          ResultElements.push_back(APValue(
+              APSInt(LHS.isSigned() ? LHS.ssub_sat(RHS) : LHS.usub_sat(RHS),
+                     DestEltTy->isUnsignedIntegerOrEnumerationType())));
+          break;
+        case clang::X86::BI__builtin_ia32_pmulhuw128:
+        case clang::X86::BI__builtin_ia32_pmulhuw256:
+        case clang::X86::BI__builtin_ia32_pmulhuw512:
+          ResultElements.push_back(
+              APValue(APSInt(llvm::APIntOps::mulhu(LHS, RHS),
+                             /*isUnsigned=*/true)));
+          break;
+        case clang::X86::BI__builtin_ia32_pmulhw128:
+        case clang::X86::BI__builtin_ia32_pmulhw256:
+        case clang::X86::BI__builtin_ia32_pmulhw512:
+          ResultElements.push_back(
+              APValue(APSInt(llvm::APIntOps::mulhs(LHS, RHS),
+                             /*isUnsigned=*/false)));
+          break;
+        }
----------------
RKSimon wrote:

this block needs removing entirely

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


More information about the cfe-commits mailing list