mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-21 21:29:41 +00:00
Fix a bug in heap-sra that caused compilation failure of office-ispell.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33043 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
19b569fc08
commit
39ff1e2afc
@ -1016,9 +1016,25 @@ static GlobalVariable *PerformHeapAllocSRoA(GlobalVariable *GV, MallocInst *MI){
|
|||||||
// loads, and all uses of those loads are simple. Rewrite them to use loads
|
// loads, and all uses of those loads are simple. Rewrite them to use loads
|
||||||
// of the per-field globals instead.
|
// of the per-field globals instead.
|
||||||
while (!GV->use_empty()) {
|
while (!GV->use_empty()) {
|
||||||
LoadInst *LI = cast<LoadInst>(GV->use_back());
|
if (LoadInst *LI = dyn_cast<LoadInst>(GV->use_back())) {
|
||||||
RewriteUsesOfLoadForHeapSRoA(LI, FieldGlobals);
|
RewriteUsesOfLoadForHeapSRoA(LI, FieldGlobals);
|
||||||
LI->eraseFromParent();
|
LI->eraseFromParent();
|
||||||
|
} else {
|
||||||
|
// Must be a store of null.
|
||||||
|
StoreInst *SI = cast<StoreInst>(GV->use_back());
|
||||||
|
assert(isa<Constant>(SI->getOperand(0)) &&
|
||||||
|
cast<Constant>(SI->getOperand(0))->isNullValue() &&
|
||||||
|
"Unexpected heap-sra user!");
|
||||||
|
|
||||||
|
// Insert a store of null into each global.
|
||||||
|
for (unsigned i = 0, e = FieldGlobals.size(); i != e; ++i) {
|
||||||
|
Constant *Null =
|
||||||
|
Constant::getNullValue(FieldGlobals[i]->getType()->getElementType());
|
||||||
|
new StoreInst(Null, FieldGlobals[i], SI);
|
||||||
|
}
|
||||||
|
// Erase the original store.
|
||||||
|
SI->eraseFromParent();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// The old global is now dead, remove it.
|
// The old global is now dead, remove it.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user