Author: Timm Baeder Date: 2025-08-19T09:10:50+02:00 New Revision: eb7a1d91b28d4f83e41133aa2dcd92dae67f0279
URL: https://github.com/llvm/llvm-project/commit/eb7a1d91b28d4f83e41133aa2dcd92dae67f0279 DIFF: https://github.com/llvm/llvm-project/commit/eb7a1d91b28d4f83e41133aa2dcd92dae67f0279.diff LOG: [clang][bytecode] Support pmul X86 builtins (#154275) Added: Modified: clang/lib/AST/ByteCode/InterpBuiltin.cpp Removed: ################################################################################ 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