[llvm] [X86] IsElementEquivalent - pull out exact matching for same index/op. NFC. (PR #143367)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 9 04:17:53 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-x86
Author: Simon Pilgrim (RKSimon)
<details>
<summary>Changes</summary>
The types must still be vectors matching MaskSize
---
Full diff: https://github.com/llvm/llvm-project/pull/143367.diff
1 Files Affected:
- (modified) llvm/lib/Target/X86/X86ISelLowering.cpp (+5-2)
``````````diff
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 2badf2f6942d5..2994036b5f908 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -9790,6 +9790,10 @@ static bool IsElementEquivalent(int MaskSize, SDValue Op, SDValue ExpectedOp,
(int)ExpectedVT.getVectorNumElements() != MaskSize)
return false;
+ // Exact match.
+ if (Idx == ExpectedIdx && Op == ExpectedOp)
+ return true;
+
switch (Op.getOpcode()) {
case ISD::BUILD_VECTOR:
// If the values are build vectors, we can look through them to find
@@ -9837,8 +9841,7 @@ static bool IsElementEquivalent(int MaskSize, SDValue Op, SDValue ExpectedOp,
SmallVector<int, 8> Mask;
DecodeVPERMMask(MaskSize, Op.getConstantOperandVal(1), Mask);
SDValue Src = Op.getOperand(0);
- return (Mask[Idx] == Mask[ExpectedIdx]) ||
- IsElementEquivalent(MaskSize, Src, Src, Mask[Idx],
+ return IsElementEquivalent(MaskSize, Src, Src, Mask[Idx],
Mask[ExpectedIdx]);
}
break;
``````````
</details>
https://github.com/llvm/llvm-project/pull/143367
More information about the llvm-commits
mailing list