diff options
| author | Johannes Doerfert <jdoerfert@anl.gov> | 2019-10-13 02:21:23 +0000 |
|---|---|---|
| committer | Johannes Doerfert <jdoerfert@anl.gov> | 2019-10-13 02:21:23 +0000 |
| commit | 92694eba933ef4ea0b1b6377809ff266df37d61b (patch) | |
| tree | 99e59935e0a34da0b5e4f5a0bc73e1897b3f1d1e /llvm/lib/Transforms | |
| parent | e95d1ca1e2e24ffddd10bd890ed18280b8e415a2 (diff) | |
| download | bcm5719-llvm-92694eba933ef4ea0b1b6377809ff266df37d61b.tar.gz bcm5719-llvm-92694eba933ef4ea0b1b6377809ff266df37d61b.zip | |
[SROA] Reuse existing lifetime markers if possible
Summary:
If the underlying alloca did not change, we do not necessarily need new
lifetime markers. This patch adds a check and reuses the old ones if
possible.
Reviewers: reames, ssarda, t.p.northover, hfinkel
Subscribers: hiraditya, bollu, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68900
llvm-svn: 374692
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/SROA.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Scalar/SROA.cpp b/llvm/lib/Transforms/Scalar/SROA.cpp index 4b816832c31..a36b3c50ea3 100644 --- a/llvm/lib/Transforms/Scalar/SROA.cpp +++ b/llvm/lib/Transforms/Scalar/SROA.cpp @@ -3072,6 +3072,13 @@ private: LLVM_DEBUG(dbgs() << " original: " << II << "\n"); assert(II.getArgOperand(1) == OldPtr); + bool EntireRange = (NewBeginOffset == NewAllocaBeginOffset && + NewEndOffset == NewAllocaEndOffset); + + // If the new lifetime marker would not differ from the old, just keep it. + if (&OldAI == &NewAI && EntireRange) + return true; + // Record this instruction for deletion. Pass.DeadInsts.insert(&II); @@ -3082,8 +3089,7 @@ private: // promoted, but PromoteMemToReg doesn't handle that case.) // FIXME: Check whether the alloca is promotable before dropping the // lifetime intrinsics? - if (NewBeginOffset != NewAllocaBeginOffset || - NewEndOffset != NewAllocaEndOffset) + if (!EntireRange) return true; ConstantInt *Size = |

