diff options
author | Philip Reames <preames@rivosinc.com> | 2025-07-16 18:09:27 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-07-16 18:09:27 -0700 |
commit | b9adc4a59cb50c98ec0e01645ea5eb64e6628afd (patch) | |
tree | 7eb8409ebd9a0f496bf8b75950d34c4ac370063c /llvm/lib/CodeGen/InterleavedAccessPass.cpp | |
parent | b41398294c85eacdb37b9637eed6f0e91edf35cf (diff) | |
download | llvm-b9adc4a59cb50c98ec0e01645ea5eb64e6628afd.zip llvm-b9adc4a59cb50c98ec0e01645ea5eb64e6628afd.tar.gz llvm-b9adc4a59cb50c98ec0e01645ea5eb64e6628afd.tar.bz2 |
[IA] Use a single callback for lowerInterleaveIntrinsic [nfc] (#148978) (#149168)
This continues in the direction started by commit 4b81dc7. We
essentially merges the handling for VPStore - currently in
lowerInterleavedVPStore which is shared between shuffle and intrinsic
based interleaves - into the existing dedicated routine.
Diffstat (limited to 'llvm/lib/CodeGen/InterleavedAccessPass.cpp')
-rw-r--r-- | llvm/lib/CodeGen/InterleavedAccessPass.cpp | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/llvm/lib/CodeGen/InterleavedAccessPass.cpp b/llvm/lib/CodeGen/InterleavedAccessPass.cpp index 68a9569..d43cd46 100644 --- a/llvm/lib/CodeGen/InterleavedAccessPass.cpp +++ b/llvm/lib/CodeGen/InterleavedAccessPass.cpp @@ -662,23 +662,19 @@ bool InterleavedAccessImpl::lowerInterleaveIntrinsic( const unsigned Factor = getInterleaveIntrinsicFactor(II->getIntrinsicID()); assert(Factor && "unexpected interleave intrinsic"); + Value *Mask = nullptr; if (auto *VPStore = dyn_cast<VPIntrinsic>(StoredBy)) { if (VPStore->getIntrinsicID() != Intrinsic::vp_store) return false; Value *WideMask = VPStore->getOperand(2); - Value *Mask = getMask(WideMask, Factor, - cast<VectorType>(InterleaveValues[0]->getType())); + Mask = getMask(WideMask, Factor, + cast<VectorType>(InterleaveValues[0]->getType())); if (!Mask) return false; LLVM_DEBUG(dbgs() << "IA: Found a vp.store with interleave intrinsic " << *II << " and factor = " << Factor << "\n"); - - // Since lowerInterleavedStore expects Shuffle and StoreInst, use special - // TLI function to emit target-specific interleaved instruction. - if (!TLI->lowerInterleavedVPStore(VPStore, Mask, InterleaveValues)) - return false; } else { auto *SI = cast<StoreInst>(StoredBy); if (!SI->isSimple()) @@ -686,12 +682,13 @@ bool InterleavedAccessImpl::lowerInterleaveIntrinsic( LLVM_DEBUG(dbgs() << "IA: Found a store with interleave intrinsic " << *II << " and factor = " << Factor << "\n"); - - // Try and match this with target specific intrinsics. - if (!TLI->lowerInterleaveIntrinsicToStore(SI, InterleaveValues)) - return false; } + // Try and match this with target specific intrinsics. + if (!TLI->lowerInterleaveIntrinsicToStore(cast<Instruction>(StoredBy), Mask, + InterleaveValues)) + return false; + // We now have a target-specific store, so delete the old one. DeadInsts.insert(cast<Instruction>(StoredBy)); DeadInsts.insert(II); |