[clang] [X86][bytecode] Allow SSE/AVX BLEND imm intrinsics to be used in constexpr (PR #157776)
Simon Pilgrim via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 10 11:07:03 PDT 2025
================
@@ -2831,6 +2831,44 @@ static bool interp__builtin_select(InterpState &S, CodePtr OpPC,
return true;
}
+static bool interp__builtin_blend(InterpState &S, CodePtr OpPC,
+ const CallExpr *Call, unsigned BuiltinID) {
+ PrimType MaskT = *S.getContext().classify(Call->getArg(2));
+ APSInt Mask = popToAPSInt(S.Stk, MaskT);
+ const Pointer &TrueElem = S.Stk.pop<Pointer>();
+ const Pointer &FalseElem = S.Stk.pop<Pointer>();
+ const Pointer &Dst = S.Stk.peek<Pointer>();
+
+ assert(FalseElem.getNumElems() == TrueElem.getNumElems());
+ assert(FalseElem.getNumElems() == Dst.getNumElems());
+ unsigned NumElems = FalseElem.getNumElems();
+ PrimType ElemT = FalseElem.getFieldDesc()->getPrimType();
+ PrimType DstElemT = Dst.getFieldDesc()->getPrimType();
+
+ auto BitIndex = BuiltinID == X86::BI__builtin_ia32_pblendw256
+ ? [](unsigned I) { return I % 8; }
+ : [](unsigned I) { return I; };
----------------
RKSimon wrote:
You can use the `I % 8` in all cases
https://github.com/llvm/llvm-project/pull/157776
More information about the cfe-commits
mailing list