[clang] [X86][Clang] VectorExprEvaluator::VisitCallExpr / InterpretBuiltin - allow AVX512 mask predicate intrinsics to be used in constexpr (PR #165054)
Simon Pilgrim via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 20 02:52:28 PST 2025
================
@@ -16593,6 +16593,37 @@ bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E,
return Success(Vec.getVectorElt(Idx).getInt(), E);
}
+ case clang::X86::BI__builtin_ia32_cvtb2mask128:
+ case clang::X86::BI__builtin_ia32_cvtb2mask256:
+ case clang::X86::BI__builtin_ia32_cvtb2mask512:
+ case clang::X86::BI__builtin_ia32_cvtw2mask128:
+ case clang::X86::BI__builtin_ia32_cvtw2mask256:
+ case clang::X86::BI__builtin_ia32_cvtw2mask512:
+ case clang::X86::BI__builtin_ia32_cvtd2mask128:
+ case clang::X86::BI__builtin_ia32_cvtd2mask256:
+ case clang::X86::BI__builtin_ia32_cvtd2mask512:
+ case clang::X86::BI__builtin_ia32_cvtq2mask128:
+ case clang::X86::BI__builtin_ia32_cvtq2mask256:
+ case clang::X86::BI__builtin_ia32_cvtq2mask512: {
+ assert(E->getNumArgs() == 1);
+ APValue Vec;
+ if (!EvaluateVector(E->getArg(0), Vec, Info))
+ return false;
+
+ unsigned VectorLen = Vec.getVectorLength();
+ unsigned RetWidth = Info.Ctx.getIntWidth(E->getType());
+ llvm::APInt Bits(RetWidth, 0);
+
+ for (unsigned ElemNum = 0; ElemNum < VectorLen; ++ElemNum) {
----------------
RKSimon wrote:
```suggestion
for (unsigned ElemNum = 0; ElemNum != VectorLen; ++ElemNum) {
```
https://github.com/llvm/llvm-project/pull/165054
More information about the cfe-commits
mailing list