[SROA] Don't falsely report that changes have occured

We would report that the function changed despite creating no new
allocas or performing any promotion.

This fixes PR27316.

llvm-svn: 267507
This commit is contained in:
David Majnemer 2016-04-26 01:05:00 +00:00
parent 1aa3cf7d18
commit 30ffc4ce45
1 changed files with 10 additions and 6 deletions

View File

@ -3920,15 +3920,19 @@ AllocaInst *SROA::rewritePartition(AllocaInst &AI, AllocaSlices &AS,
Worklist.insert(NewAI);
}
} else {
// If we can't promote the alloca, iterate on it to check for new
// refinements exposed by splitting the current alloca. Don't iterate on an
// alloca which didn't actually change and didn't get promoted.
if (NewAI != &AI)
Worklist.insert(NewAI);
// Drop any post-promotion work items if promotion didn't happen.
while (PostPromotionWorklist.size() > PPWOldSize)
PostPromotionWorklist.pop_back();
// We couldn't promote and we didn't create a new partition, nothing
// happened.
if (NewAI == &AI)
return nullptr;
// If we can't promote the alloca, iterate on it to check for new
// refinements exposed by splitting the current alloca. Don't iterate on an
// alloca which didn't actually change and didn't get promoted.
Worklist.insert(NewAI);
}
return NewAI;