[SROA] Simplify some of the logic to dig out the old pointer value by

using OldPtr more heavily. Lots of this code was written before the
rewriter had an OldPtr member setup ahead of time. There are already
asserts in place that should ensure this doesn't change any
functionality.

llvm-svn: 202135
This commit is contained in:
Chandler Carruth 2014-02-25 11:08:02 +00:00
parent 7625c54eb4
commit 8183a50f9b
1 changed files with 10 additions and 14 deletions

View File

@ -2330,8 +2330,7 @@ private:
if (!isa<Constant>(II.getLength())) {
assert(!IsSplit);
assert(BeginOffset >= NewAllocaBeginOffset);
II.setDest(
getAdjustedAllocaPtr(IRB, BeginOffset, II.getRawDest()->getType()));
II.setDest(getAdjustedAllocaPtr(IRB, BeginOffset, OldPtr->getType()));
Type *CstTy = II.getAlignmentCst()->getType();
II.setAlignment(ConstantInt::get(CstTy, getOffsetAlign(BeginOffset)));
@ -2363,7 +2362,7 @@ private:
Type *SizeTy = II.getLength()->getType();
Constant *Size = ConstantInt::get(SizeTy, NewEndOffset - NewBeginOffset);
CallInst *New = IRB.CreateMemSet(
getAdjustedAllocaPtr(IRB, NewBeginOffset, II.getRawDest()->getType()),
getAdjustedAllocaPtr(IRB, NewBeginOffset, OldPtr->getType()),
II.getValue(), Size, getOffsetAlign(SliceOffset), II.isVolatile());
(void)New;
DEBUG(dbgs() << " to: " << *New << "\n");
@ -2470,19 +2469,18 @@ private:
// memcpy, and so simply updating the pointers is the necessary for us to
// update both source and dest of a single call.
if (!IsSplittable) {
Value *OldOp = IsDest ? II.getRawDest() : II.getRawSource();
Value *AdjustedPtr =
getAdjustedAllocaPtr(IRB, BeginOffset, OldPtr->getType());
if (IsDest)
II.setDest(
getAdjustedAllocaPtr(IRB, BeginOffset, II.getRawDest()->getType()));
II.setDest(AdjustedPtr);
else
II.setSource(getAdjustedAllocaPtr(IRB, BeginOffset,
II.getRawSource()->getType()));
II.setSource(AdjustedPtr);
Type *CstTy = II.getAlignmentCst()->getType();
II.setAlignment(ConstantInt::get(CstTy, Align));
DEBUG(dbgs() << " to: " << II << "\n");
deleteIfTriviallyDead(OldOp);
deleteIfTriviallyDead(OldPtr);
return false;
}
// For split transfer intrinsics we have an incredibly useful assurance:
@ -2531,9 +2529,8 @@ private:
// a single, simple GEP in most cases.
OtherPtr = getAdjustedPtr(IRB, DL, OtherPtr, RelOffset, OtherPtrTy);
Value *OurPtr = getAdjustedAllocaPtr(
IRB, NewBeginOffset,
IsDest ? II.getRawDest()->getType() : II.getRawSource()->getType());
Value *OurPtr =
getAdjustedAllocaPtr(IRB, NewBeginOffset, OldPtr->getType());
Type *SizeTy = II.getLength()->getType();
Constant *Size = ConstantInt::get(SizeTy, NewEndOffset - NewBeginOffset);
@ -2631,8 +2628,7 @@ private:
ConstantInt *Size
= ConstantInt::get(cast<IntegerType>(II.getArgOperand(0)->getType()),
NewEndOffset - NewBeginOffset);
Value *Ptr =
getAdjustedAllocaPtr(IRB, NewBeginOffset, II.getArgOperand(1)->getType());
Value *Ptr = getAdjustedAllocaPtr(IRB, NewBeginOffset, OldPtr->getType());
Value *New;
if (II.getIntrinsicID() == Intrinsic::lifetime_start)
New = IRB.CreateLifetimeStart(Ptr, Size);