Go back to allocating memory for each constant separately. Since SPARCs do not
authorMisha Brukman <brukman+llvm@gmail.com>
Sun, 30 Nov 2003 00:50:53 +0000 (00:50 +0000)
committerMisha Brukman <brukman+llvm@gmail.com>
Sun, 30 Nov 2003 00:50:53 +0000 (00:50 +0000)
allow unaligned loads, that is probably the problem I've been seeing in numerous
SPARC test cases failing. X86, on the other hand, just slows down unaligned
accesses, since it must make 2 aligned accesses for each unaligned one.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10266 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ExecutionEngine/JIT/JITEmitter.cpp

index be60b239a3ec035575e57f25ac3f418b70ae0cbb..32d0651f22675c111711e54e4b29439cf3c7b871 100644 (file)
@@ -187,28 +187,13 @@ void Emitter::finishFunction(MachineFunction &F) {
 
 void Emitter::emitConstantPool(MachineConstantPool *MCP) {
   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 now we just allocate some memory on the heap, this can be
+    // dramatically improved.
     const Type *Ty = ((Value*)Constants[i])->getType();
-    unsigned TySize = TheVM->getTargetData().getTypeSize(Ty);
-    ConstantSizes.push_back(TySize);
-    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]);
+    void *Addr = malloc(TheVM->getTargetData().getTypeSize(Ty));
+    TheVM->InitializeMemory(Constants[i], Addr);
+    ConstantPoolAddresses.push_back(Addr);
   }
 }