@@ -2474,15 +2474,30 @@ static bool interp__builtin_elementwise_sat(InterpState &S, CodePtr OpPC,
24742474 });
24752475
24762476 APSInt Result;
2477- if (BuiltinID == Builtin::BI__builtin_elementwise_add_sat) {
2477+ switch (BuiltinID) {
2478+ case Builtin::BI__builtin_elementwise_add_sat:
24782479 Result = APSInt (Elem1.isSigned () ? Elem1.sadd_sat (Elem2)
24792480 : Elem1.uadd_sat (Elem2),
24802481 Call->getType ()->isUnsignedIntegerOrEnumerationType ());
2481- } else if (BuiltinID == Builtin::BI__builtin_elementwise_sub_sat) {
2482+ break ;
2483+ case Builtin::BI__builtin_elementwise_sub_sat:
24822484 Result = APSInt (Elem1.isSigned () ? Elem1.ssub_sat (Elem2)
24832485 : Elem1.usub_sat (Elem2),
24842486 Call->getType ()->isUnsignedIntegerOrEnumerationType ());
2485- } else {
2487+ break ;
2488+ case clang::X86::BI__builtin_ia32_pmulhuw128:
2489+ case clang::X86::BI__builtin_ia32_pmulhuw256:
2490+ case clang::X86::BI__builtin_ia32_pmulhuw512:
2491+ Result = APSInt (llvm::APIntOps::mulhu (Elem1, Elem2),
2492+ /* isUnsigned=*/ true );
2493+ break ;
2494+ case clang::X86::BI__builtin_ia32_pmulhw128:
2495+ case clang::X86::BI__builtin_ia32_pmulhw256:
2496+ case clang::X86::BI__builtin_ia32_pmulhw512:
2497+ Result = APSInt (llvm::APIntOps::mulhs (Elem1, Elem2),
2498+ /* isUnsigned=*/ false );
2499+ break ;
2500+ default :
24862501 llvm_unreachable (" Wrong builtin ID" );
24872502 }
24882503
@@ -2976,6 +2991,12 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call,
29762991
29772992 case Builtin::BI__builtin_elementwise_add_sat:
29782993 case Builtin::BI__builtin_elementwise_sub_sat:
2994+ case clang::X86::BI__builtin_ia32_pmulhuw128:
2995+ case clang::X86::BI__builtin_ia32_pmulhuw256:
2996+ case clang::X86::BI__builtin_ia32_pmulhuw512:
2997+ case clang::X86::BI__builtin_ia32_pmulhw128:
2998+ case clang::X86::BI__builtin_ia32_pmulhw256:
2999+ case clang::X86::BI__builtin_ia32_pmulhw512:
29793000 return interp__builtin_elementwise_sat (S, OpPC, Call, BuiltinID);
29803001
29813002 case Builtin::BI__builtin_elementwise_max:
0 commit comments