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?= <tbae...@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: _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits