summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2014-02-26 04:45:24 +0000
committerChandler Carruth <chandlerc@gmail.com>2014-02-26 04:45:24 +0000
commit735d5bee48099750293410192757da3a494a4da5 (patch)
tree1ba18d14f7135523123fee411c5b1ed6d7bb8ccf /llvm/lib/Transforms
parentea27cf08d823dd8d01c8093d3c59f0686cbf31d0 (diff)
downloadbcm5719-llvm-735d5bee48099750293410192757da3a494a4da5.tar.gz
bcm5719-llvm-735d5bee48099750293410192757da3a494a4da5.zip
[SROA] Use NewOffsetBegin in the unsplit case for memset merely for
consistency with memcpy rewriting, and fix a latent bug in the alignment management for memset. The alignment issue is that getAdjustedAllocaPtr is computing the *relative* offset into the new alloca, but the alignment isn't being set to the relative offset, it was using the the absolute offset which is into the old alloca. I don't think its possible to write a test case that actually reaches this code where the resulting alignment would be observably different, but the intent was clearly to use the relative offset within the new alloca. llvm-svn: 202229
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/Scalar/SROA.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/Scalar/SROA.cpp b/llvm/lib/Transforms/Scalar/SROA.cpp
index 2ecc517d485..d0f2561dd33 100644
--- a/llvm/lib/Transforms/Scalar/SROA.cpp
+++ b/llvm/lib/Transforms/Scalar/SROA.cpp
@@ -2393,10 +2393,11 @@ private:
// pointer to the new alloca.
if (!isa<Constant>(II.getLength())) {
assert(!IsSplit);
- assert(BeginOffset >= NewAllocaBeginOffset);
- II.setDest(getAdjustedAllocaPtr(IRB, BeginOffset, OldPtr->getType()));
+ assert(NewBeginOffset == BeginOffset);
+ II.setDest(getAdjustedAllocaPtr(IRB, NewBeginOffset, OldPtr->getType()));
Type *CstTy = II.getAlignmentCst()->getType();
- II.setAlignment(ConstantInt::get(CstTy, getOffsetAlign(BeginOffset)));
+ II.setAlignment(ConstantInt::get(
+ CstTy, getOffsetAlign(NewBeginOffset - NewAllocaBeginOffset)));
deleteIfTriviallyDead(OldPtr);
return false;
OpenPOWER on IntegriCloud