[llvm] Removed expansive copy (PR #93658)
via llvm-commits
llvm-commits at lists.llvm.org
Wed May 29 01:36:36 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-x86
Author: None (JaydeepChauhan14)
<details>
<summary>Changes</summary>
Removed expansive copy.
There are two calls for method **isBlendOrUndef** in file **llvm/lib/Target/X86/X86ISelLowering.cpp** ,
1. For NewBlendMask it is allocating 32*4=>128 Bytes
```
...
SmallVector<int, 32> NewBlendMask(NumElts, SM_SentinelUndef);
...
assert(isBlendOrUndef(NewBlendMask) && "Bad blend");
...
```
2. For BlendMask it is allocating 16*4=> 64 Bytes
```
...
SmallVector<int, 16> BlendMask;
DecodeBLENDMask(NumElts, Op.getConstantOperandVal(2), BlendMask);
if (SDValue R = combineBlendOfPermutes(
VT.getSimpleVT(), Op.getOperand(0), Op.getOperand(1), BlendMask,
DemandedElts, TLO.DAG, Subtarget, SDLoc(Op)))
return TLO.CombineTo(Op, R);
...
assert(isBlendOrUndef(BlendMask) && "Blend shuffle expected");
...
```
- Both above cases are allocating 64 and 128 bytes. which is looks expansive, So removed copy.
---
Full diff: https://github.com/llvm/llvm-project/pull/93658.diff
1 Files Affected:
- (modified) llvm/lib/Target/X86/X86ISelLowering.cpp (+1-1)
``````````diff
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 2d8343ffa1a0b..c240b4fa6b599 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -3588,7 +3588,7 @@ static bool isUndefOrZeroOrInRange(ArrayRef<int> Mask, int Low, int Hi) {
/// undef.
LLVM_ATTRIBUTE_UNUSED static bool isBlendOrUndef(ArrayRef<int> Mask) {
unsigned NumElts = Mask.size();
- for (auto [I, M] : enumerate(Mask))
+ for (auto &[I, M] : enumerate(Mask))
if (!isUndefOrEqual(M, I) && !isUndefOrEqual(M, I + NumElts))
return false;
return true;
``````````
</details>
https://github.com/llvm/llvm-project/pull/93658
More information about the llvm-commits
mailing list