[clang] [clang][bytecode] Support pmul X86 builtins (PR #154275)
Timm Baeder via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 18 23:38:36 PDT 2025
https://github.com/tbaederr created https://github.com/llvm/llvm-project/pull/154275
None
>From e9a3788484b567c5af15f84caeead70cc2f363a2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timm=20B=C3=A4der?= <tbaeder at redhat.com>
Date: Tue, 19 Aug 2025 08:37:31 +0200
Subject: [PATCH] [clang][bytecode] Support pmul X86 builtins
---
clang/lib/AST/ByteCode/InterpBuiltin.cpp | 27 +++++++++++++++++++++---
1 file changed, 24 insertions(+), 3 deletions(-)
diff --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
index 0d49059460c25..c821f7aa43da1 100644
--- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp
+++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
@@ -2474,15 +2474,30 @@ static bool interp__builtin_elementwise_sat(InterpState &S, CodePtr OpPC,
});
APSInt Result;
- if (BuiltinID == Builtin::BI__builtin_elementwise_add_sat) {
+ switch (BuiltinID) {
+ case Builtin::BI__builtin_elementwise_add_sat:
Result = APSInt(Elem1.isSigned() ? Elem1.sadd_sat(Elem2)
: Elem1.uadd_sat(Elem2),
Call->getType()->isUnsignedIntegerOrEnumerationType());
- } else if (BuiltinID == Builtin::BI__builtin_elementwise_sub_sat) {
+ break;
+ case Builtin::BI__builtin_elementwise_sub_sat:
Result = APSInt(Elem1.isSigned() ? Elem1.ssub_sat(Elem2)
: Elem1.usub_sat(Elem2),
Call->getType()->isUnsignedIntegerOrEnumerationType());
- } else {
+ break;
+ case clang::X86::BI__builtin_ia32_pmulhuw128:
+ case clang::X86::BI__builtin_ia32_pmulhuw256:
+ case clang::X86::BI__builtin_ia32_pmulhuw512:
+ Result = APSInt(llvm::APIntOps::mulhu(Elem1, Elem2),
+ /*isUnsigned=*/true);
+ break;
+ case clang::X86::BI__builtin_ia32_pmulhw128:
+ case clang::X86::BI__builtin_ia32_pmulhw256:
+ case clang::X86::BI__builtin_ia32_pmulhw512:
+ Result = APSInt(llvm::APIntOps::mulhs(Elem1, Elem2),
+ /*isUnsigned=*/false);
+ break;
+ default:
llvm_unreachable("Wrong builtin ID");
}
@@ -2976,6 +2991,12 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call,
case Builtin::BI__builtin_elementwise_add_sat:
case Builtin::BI__builtin_elementwise_sub_sat:
+ case clang::X86::BI__builtin_ia32_pmulhuw128:
+ case clang::X86::BI__builtin_ia32_pmulhuw256:
+ case clang::X86::BI__builtin_ia32_pmulhuw512:
+ case clang::X86::BI__builtin_ia32_pmulhw128:
+ case clang::X86::BI__builtin_ia32_pmulhw256:
+ case clang::X86::BI__builtin_ia32_pmulhw512:
return interp__builtin_elementwise_sat(S, OpPC, Call, BuiltinID);
case Builtin::BI__builtin_elementwise_max:
More information about the cfe-commits
mailing list