[clang] [clang][X86] Allow VALIGND/Q element-shift intrinsics in constexpr evaluation (PR #168206)
Simon Pilgrim via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 17 05:44:42 PST 2025
================
@@ -13551,6 +13551,30 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
return false;
return Success(R, E);
}
+ case X86::BI__builtin_ia32_alignd128:
+ case X86::BI__builtin_ia32_alignd256:
+ case X86::BI__builtin_ia32_alignd512:
+ case X86::BI__builtin_ia32_alignq128:
+ case X86::BI__builtin_ia32_alignq256:
+ case X86::BI__builtin_ia32_alignq512: {
+ APValue R;
+ const unsigned NumElts =
+ E->getType()->castAs<VectorType>()->getNumElements();
+ if (!evalShuffleGeneric(
+ Info, E, R, [NumElts](unsigned DstIdx, unsigned Shift) {
+ unsigned Imm = Shift & 0xFF;
+ unsigned EffectiveShift = Imm & (NumElts - 1);
+ unsigned SourcePos = DstIdx + EffectiveShift;
+ unsigned VecIdx = SourcePos < NumElts ? 1 : 0;
+ unsigned ElemIdx =
+ SourcePos < NumElts ? SourcePos : SourcePos - NumElts;
----------------
RKSimon wrote:
```suggestion
unsigned ElemIdx = SourcePos & (NumElems - 1);
```
https://github.com/llvm/llvm-project/pull/168206
More information about the cfe-commits
mailing list