diff options
Diffstat (limited to 'llvm/lib/Transforms/Scalar/SROA.cpp')
| -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 = |

