[llvm] [DSE] Add predicated vector length store support for masked store elimination (PR #134175)
Michael Berg via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 7 13:37:13 PDT 2025
================
@@ -248,28 +248,43 @@ static OverwriteResult isMaskedStoreOverwrite(const Instruction *KillingI,
return OW_Unknown;
if (KillingII->getIntrinsicID() != DeadII->getIntrinsicID())
return OW_Unknown;
- if (KillingII->getIntrinsicID() == Intrinsic::masked_store) {
- // Type size.
- VectorType *KillingTy =
- cast<VectorType>(KillingII->getArgOperand(0)->getType());
- VectorType *DeadTy = cast<VectorType>(DeadII->getArgOperand(0)->getType());
- if (KillingTy->getScalarSizeInBits() != DeadTy->getScalarSizeInBits())
+
+ switch (KillingII->getIntrinsicID()) {
+ case Intrinsic::masked_store:
+ case Intrinsic::vp_store: {
+ const DataLayout &DL = KillingII->getDataLayout();
+ auto *KillingTy = KillingII->getArgOperand(0)->getType();
+ auto *DeadTy = DeadII->getArgOperand(0)->getType();
+ if (DL.getTypeSizeInBits(KillingTy) != DL.getTypeSizeInBits(DeadTy))
return OW_Unknown;
// Element count.
- if (KillingTy->getElementCount() != DeadTy->getElementCount())
+ if (cast<VectorType>(KillingTy)->getElementCount() !=
+ cast<VectorType>(DeadTy)->getElementCount())
return OW_Unknown;
// Pointers.
- Value *KillingPtr = KillingII->getArgOperand(1)->stripPointerCasts();
- Value *DeadPtr = DeadII->getArgOperand(1)->stripPointerCasts();
+ auto *KillingPtr = KillingII->getArgOperand(1);
+ auto *DeadPtr = DeadII->getArgOperand(1);
----------------
mcberg2021 wrote:
ok
https://github.com/llvm/llvm-project/pull/134175
More information about the llvm-commits
mailing list