diff options
Diffstat (limited to 'llvm/lib/CodeGen/InterleavedAccessPass.cpp')
-rw-r--r-- | llvm/lib/CodeGen/InterleavedAccessPass.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/InterleavedAccessPass.cpp b/llvm/lib/CodeGen/InterleavedAccessPass.cpp index 8c9065a..ef11713 100644 --- a/llvm/lib/CodeGen/InterleavedAccessPass.cpp +++ b/llvm/lib/CodeGen/InterleavedAccessPass.cpp @@ -489,7 +489,7 @@ bool InterleavedAccessImpl::lowerDeinterleaveIntrinsic( LLVM_DEBUG(dbgs() << "IA: Found a deinterleave intrinsic: " << *DI << "\n"); // Try and match this with target specific intrinsics. - if (!TLI->lowerDeinterleaveIntrinsicToLoad(DI, LI)) + if (!TLI->lowerDeinterleaveIntrinsicToLoad(DI, LI, DeadInsts)) return false; // We now have a target-specific load, so delete the old one. @@ -510,13 +510,16 @@ bool InterleavedAccessImpl::lowerInterleaveIntrinsic( LLVM_DEBUG(dbgs() << "IA: Found an interleave intrinsic: " << *II << "\n"); + SmallVector<Instruction *, 4> InterleaveDeadInsts; // Try and match this with target specific intrinsics. - if (!TLI->lowerInterleaveIntrinsicToStore(II, SI)) + if (!TLI->lowerInterleaveIntrinsicToStore(II, SI, InterleaveDeadInsts)) return false; // We now have a target-specific store, so delete the old one. DeadInsts.push_back(SI); DeadInsts.push_back(II); + DeadInsts.insert(DeadInsts.end(), InterleaveDeadInsts.begin(), + InterleaveDeadInsts.end()); return true; } @@ -537,7 +540,7 @@ bool InterleavedAccessImpl::runOnFunction(Function &F) { // with a factor of 2. if (II->getIntrinsicID() == Intrinsic::vector_deinterleave2) Changed |= lowerDeinterleaveIntrinsic(II, DeadInsts); - if (II->getIntrinsicID() == Intrinsic::vector_interleave2) + else if (II->getIntrinsicID() == Intrinsic::vector_interleave2) Changed |= lowerInterleaveIntrinsic(II, DeadInsts); } } |