mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-14 00:32:55 +00:00
DSE: Remove an early exit optimization that depended on the ordering of a SmallPtrSet.
Fixes PR9569 and will hopefully make selfhost on ASLR-enabled systems more deterministic. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128482 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d0cfc99b30
commit
ec3f227820
@ -640,28 +640,15 @@ bool DSE::handleEndBlock(BasicBlock &BB) {
|
||||
if (AA->doesNotAccessMemory(CS))
|
||||
continue;
|
||||
|
||||
unsigned NumModRef = 0, NumOther = 0;
|
||||
|
||||
// If the call might load from any of our allocas, then any store above
|
||||
// the call is live.
|
||||
SmallVector<Value*, 8> LiveAllocas;
|
||||
for (SmallPtrSet<Value*, 16>::iterator I = DeadStackObjects.begin(),
|
||||
E = DeadStackObjects.end(); I != E; ++I) {
|
||||
// If we detect that our AA is imprecise, it's not worth it to scan the
|
||||
// rest of the DeadPointers set. Just assume that the AA will return
|
||||
// ModRef for everything, and go ahead and bail out.
|
||||
if (NumModRef >= 16 && NumOther == 0)
|
||||
return MadeChange;
|
||||
|
||||
// See if the call site touches it.
|
||||
AliasAnalysis::ModRefResult A =
|
||||
AA->getModRefInfo(CS, *I, getPointerSize(*I, *AA));
|
||||
|
||||
if (A == AliasAnalysis::ModRef)
|
||||
++NumModRef;
|
||||
else
|
||||
++NumOther;
|
||||
|
||||
if (A == AliasAnalysis::ModRef || A == AliasAnalysis::Ref)
|
||||
LiveAllocas.push_back(*I);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user