summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/Scalar/SROA.cpp10
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 =
OpenPOWER on IntegriCloud