Skip to content

Commit eb7a1d9

Browse files
authored
[clang][bytecode] Support pmul X86 builtins (#154275)
1 parent cded128 commit eb7a1d9

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

clang/lib/AST/ByteCode/InterpBuiltin.cpp

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)