[clang] [X86][Clang] Add AVX512 Integer Comparison Intrinsics for constexpr Evaluation (PR #164026)
Timm Baeder via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 20 20:47:21 PDT 2025
================
@@ -3119,40 +3152,13 @@ static bool interp__builtin_cmp_mask(InterpState &S, CodePtr OpPC,
for (unsigned ElemNum = 0; ElemNum < VectorLen; ++ElemNum) {
INT_TYPE_SWITCH_NO_BOOL(ElemT, {
- const APSInt &A = LHS.elem<T>(ElemNum).toAPSInt();
- const APSInt &B = RHS.elem<T>(ElemNum).toAPSInt();
- bool Result = false;
- switch (Opcode.getExtValue() & 0x7) {
- case 0x00: // _MM_CMPINT_EQ
- Result = (A == B);
- break;
- case 0x01: // _MM_CMPINT_LT
- Result = IsUnsigned ? A.ult(B) : A.slt(B);
- break;
- case 0x02: // _MM_CMPINT_LE
- Result = IsUnsigned ? A.ule(B) : A.sle(B);
- break;
- case 0x03: // _MM_CMPINT_FALSE
- Result = false;
- break;
- case 0x04: // _MM_CMPINT_NE
- Result = (A != B);
- break;
- case 0x05: // _MM_CMPINT_NLT (>=)
- Result = IsUnsigned ? A.uge(B) : A.sge(B);
- break;
- case 0x06: // _MM_CMPINT_NLE (>)
- Result = IsUnsigned ? A.ugt(B) : A.sgt(B);
- break;
- case 0x07: // _MM_CMPINT_TRUE
- Result = true;
- break;
- }
-
- RetMask.setBitVal(ElemNum, Mask[ElemNum] && Result);
+ RetMask.setBitVal(ElemNum,
+ Mask[ElemNum] &&
+ evalICmpImm(CmpOp, LHS.elem<T>(ElemNum).toAPSInt(),
+ RHS.elem<T>(ElemNum).toAPSInt(),
+ IsUnsigned));
----------------
tbaederr wrote:
Just do
```c++
APSInt A;
APSInt B;
TYPE_SWITCH_NO_BOOL(ElemT, {A = LHS.elem<T>().toAPSInt(); B = LHS.elem<T>().toAPSINt(); });
Rest of the code
```
?
https://github.com/llvm/llvm-project/pull/164026
More information about the cfe-commits
mailing list