mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-07 19:19:26 +00:00
Emit the MachineConstantPool constants in one contiguous memory `pool'.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10060 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0ca042db71
commit
ef7e57018d
@ -187,13 +187,28 @@ void Emitter::finishFunction(MachineFunction &F) {
|
|||||||
|
|
||||||
void Emitter::emitConstantPool(MachineConstantPool *MCP) {
|
void Emitter::emitConstantPool(MachineConstantPool *MCP) {
|
||||||
const std::vector<Constant*> &Constants = MCP->getConstants();
|
const std::vector<Constant*> &Constants = MCP->getConstants();
|
||||||
|
if (Constants.size() == 0) return;
|
||||||
|
|
||||||
|
std::vector<unsigned> ConstantSizes;
|
||||||
|
unsigned TotalSize = 0;
|
||||||
|
// Calculate how much space we will need for all the constants
|
||||||
for (unsigned i = 0, e = Constants.size(); i != e; ++i) {
|
for (unsigned i = 0, e = Constants.size(); i != e; ++i) {
|
||||||
// For now we just allocate some memory on the heap, this can be
|
|
||||||
// dramatically improved.
|
|
||||||
const Type *Ty = ((Value*)Constants[i])->getType();
|
const Type *Ty = ((Value*)Constants[i])->getType();
|
||||||
void *Addr = malloc(TheVM->getTargetData().getTypeSize(Ty));
|
unsigned TySize = TheVM->getTargetData().getTypeSize(Ty);
|
||||||
TheVM->InitializeMemory(Constants[i], Addr);
|
ConstantSizes.push_back(TySize);
|
||||||
ConstantPoolAddresses.push_back(Addr);
|
TotalSize += TySize;
|
||||||
|
}
|
||||||
|
// Allocate a 'pool' of memory just once
|
||||||
|
void *ConstPool = malloc(TotalSize);
|
||||||
|
if (!ConstPool) {
|
||||||
|
perror("malloc");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
// Initialize each slot in the 'pool' appropriately
|
||||||
|
for (unsigned i = 0, e = Constants.size(); i != e; ++i) {
|
||||||
|
TheVM->InitializeMemory(Constants[i], ConstPool);
|
||||||
|
ConstantPoolAddresses.push_back(ConstPool);
|
||||||
|
ConstPool = (void*) ((intptr_t)ConstPool + ConstantSizes[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user