mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-21 03:32:21 +00:00
* Give alloca's for pool descriptors better names than "pool<n>".
* Fill in the pool descriptor links in the pool descriptors. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2239 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
027a6755f8
commit
ddcbd34f56
@ -1183,8 +1183,9 @@ void PoolAllocate::CreatePools(Function *F, const vector<AllocDSNode*> &Allocs,
|
|||||||
"Pool type should not be abstract anymore!");
|
"Pool type should not be abstract anymore!");
|
||||||
|
|
||||||
// Add an allocation and a free for each pool...
|
// Add an allocation and a free for each pool...
|
||||||
AllocaInst *PoolAlloc = new AllocaInst(PointerType::get(PI.PoolType),
|
AllocaInst *PoolAlloc
|
||||||
0, "pool");
|
= new AllocaInst(PointerType::get(PI.PoolType), 0,
|
||||||
|
CurModule->getTypeName(PI.PoolType));
|
||||||
PI.Handle = PoolAlloc;
|
PI.Handle = PoolAlloc;
|
||||||
EntryNodeInsts.push_back(PoolAlloc);
|
EntryNodeInsts.push_back(PoolAlloc);
|
||||||
AllocationInst *AI = Allocs[i]->getAllocation();
|
AllocationInst *AI = Allocs[i]->getAllocation();
|
||||||
@ -1201,9 +1202,6 @@ void PoolAllocate::CreatePools(Function *F, const vector<AllocDSNode*> &Allocs,
|
|||||||
Args.push_back(PoolAlloc); // Pool to initialize
|
Args.push_back(PoolAlloc); // Pool to initialize
|
||||||
EntryNodeInsts.push_back(new CallInst(PoolInit, Args));
|
EntryNodeInsts.push_back(new CallInst(PoolInit, Args));
|
||||||
|
|
||||||
// FIXME: add code to initialize inter pool links
|
|
||||||
cerr << "TODO: add code to initialize inter pool links!\n";
|
|
||||||
|
|
||||||
// Add code to destroy the pool in all of the exit nodes of the function...
|
// Add code to destroy the pool in all of the exit nodes of the function...
|
||||||
Args.clear();
|
Args.clear();
|
||||||
Args.push_back(PoolAlloc); // Pool to initialize
|
Args.push_back(PoolAlloc); // Pool to initialize
|
||||||
@ -1217,6 +1215,31 @@ void PoolAllocate::CreatePools(Function *F, const vector<AllocDSNode*> &Allocs,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Now that all of the pool descriptors have been created, link them together
|
||||||
|
// so that called functions can get links as neccesary...
|
||||||
|
//
|
||||||
|
for (unsigned i = 0, e = Allocs.size(); i != e; ++i) {
|
||||||
|
PoolInfo &PI = PoolDescs[Allocs[i]];
|
||||||
|
|
||||||
|
// For every pointer in the data structure, initialize a link that
|
||||||
|
// indicates which pool to access...
|
||||||
|
//
|
||||||
|
vector<Value*> Indices(2);
|
||||||
|
Indices[0] = ConstantUInt::get(Type::UIntTy, 0);
|
||||||
|
for (unsigned l = 0, le = PI.Node->getNumLinks(); l != le; ++l)
|
||||||
|
// Only store an entry for the field if the field is used!
|
||||||
|
if (!PI.Node->getLink(l).empty()) {
|
||||||
|
assert(PI.Node->getLink(l).size() == 1 && "Should have only one link!");
|
||||||
|
PointerVal PV = PI.Node->getLink(l)[0];
|
||||||
|
assert(PV.Index == 0 && "Subindexing not supported yet!");
|
||||||
|
PoolInfo &LinkedPool = PoolDescs[PV.Node];
|
||||||
|
Indices[1] = ConstantUInt::get(Type::UByteTy, 1+l);
|
||||||
|
|
||||||
|
EntryNodeInsts.push_back(new StoreInst(LinkedPool.Handle, PI.Handle,
|
||||||
|
Indices));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Insert the entry node code into the entry block...
|
// Insert the entry node code into the entry block...
|
||||||
F->getEntryNode()->getInstList().insert(F->getEntryNode()->begin()+1,
|
F->getEntryNode()->getInstList().insert(F->getEntryNode()->begin()+1,
|
||||||
EntryNodeInsts.begin(),
|
EntryNodeInsts.begin(),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user