Analogous fix to memset and memcpy rewriting. Don't have a test case

contrived for these yet, as I spotted them by inspection and the test
cases are a bit more tricky to phrase.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164691 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chandler Carruth 2012-09-26 10:59:22 +00:00
parent 238fd1591e
commit d0ac06d188

View File

@ -2064,6 +2064,15 @@ private:
// pointer to the new alloca.
if (!isa<Constant>(II.getLength())) {
II.setDest(getAdjustedAllocaPtr(IRB, II.getRawDest()->getType()));
Type *CstTy = II.getAlignmentCst()->getType();
if (!NewAI.getAlignment())
II.setAlignment(ConstantInt::get(CstTy, 0));
else
II.setAlignment(
ConstantInt::get(CstTy, MinAlign(NewAI.getAlignment(),
BeginOffset - NewAllocaBeginOffset)));
deleteIfTriviallyDead(OldPtr);
return false;
}
@ -2187,6 +2196,13 @@ private:
else
II.setSource(getAdjustedAllocaPtr(IRB, II.getRawSource()->getType()));
Type *CstTy = II.getAlignmentCst()->getType();
if (II.getAlignment() > 1)
II.setAlignment(ConstantInt::get(
CstTy, MinAlign(II.getAlignment(),
MinAlign(NewAI.getAlignment(),
BeginOffset - NewAllocaBeginOffset))));
DEBUG(dbgs() << " to: " << II << "\n");
deleteIfTriviallyDead(OldOp);
return false;