[vmkit-commits] [vmkit] r180451 - Removed gcroot calls for special MMTk objects. Removed useless lock inside CommonClass::setDelegatee(). Cleaned up useless class ArrayObject, replaced by a specialized version of TJavaArray.

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 10:12:31 PDT 2013


Author: peter.senna
Date: Thu Apr 25 12:11:01 2013
New Revision: 180451

URL: http://llvm.org/viewvc/llvm-project?rev=180451&view=rev
Log:
Removed gcroot calls for special MMTk objects. Removed useless lock inside CommonClass::setDelegatee(). Cleaned up useless class ArrayObject, replaced by a specialized version of TJavaArray.
(cherry picked from commit fc79d75e0790d1ceaa9f21604dd27c48ca523991)

Modified:
    vmkit/trunk/include/j3/JavaAOTCompiler.h
    vmkit/trunk/include/vmkit/VirtualMachine.h
    vmkit/trunk/lib/j3/Compiler/LLVMInfo.cpp
    vmkit/trunk/lib/j3/VMCore/JavaArray.cpp
    vmkit/trunk/lib/j3/VMCore/JavaArray.h
    vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
    vmkit/trunk/lib/j3/VMCore/JavaClass.h
    vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
    vmkit/trunk/lib/j3/VMCore/Jnjvm.h
    vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h
    vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp
    vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp
    vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp

Modified: vmkit/trunk/include/j3/JavaAOTCompiler.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/JavaAOTCompiler.h?rev=180451&r1=180450&r2=180451&view=diff
==============================================================================
--- vmkit/trunk/include/j3/JavaAOTCompiler.h (original)
+++ vmkit/trunk/include/j3/JavaAOTCompiler.h Thu Apr 25 12:11:01 2013
@@ -16,11 +16,13 @@
 
 namespace j3 {
 
-class ArrayObject;
 class JavaAttribute;
 class ClassBytes;
 class JnjvmBootstrapLoader;
 
+template <class T> class TJavaArray;
+typedef TJavaArray<JavaObject*> ArrayObject;
+
 using vmkit::UTF8;
 
 class JavaAOTCompiler : public JavaLLVMCompiler {

Modified: vmkit/trunk/include/vmkit/VirtualMachine.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/VirtualMachine.h?rev=180451&r1=180450&r2=180451&view=diff
==============================================================================
--- vmkit/trunk/include/vmkit/VirtualMachine.h (original)
+++ vmkit/trunk/include/vmkit/VirtualMachine.h Thu Apr 25 12:11:01 2013
@@ -204,6 +204,7 @@ public:
   /// set the identity of the object (identity is determined by user).
   ///
   virtual void setType(gc* header, void* type) = 0;
+  virtual void setType(void* header, void* type) = 0;
 
   /// getType - Gets the type of given object.
   ///

Modified: vmkit/trunk/lib/j3/Compiler/LLVMInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/LLVMInfo.cpp?rev=180451&r1=180450&r2=180451&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/LLVMInfo.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/LLVMInfo.cpp Thu Apr 25 12:11:01 2013
@@ -401,28 +401,31 @@ Function* LLVMSignatureInfo::createFunct
   Value *obj, *ptr, *func;
   ++i;
   func = i;
+  func->setName("func");
   ++i;
   if (virt) {
     obj = i;
     ++i;
     Args.push_back(obj);
+    obj->setName("object");
   }
   ptr = i;
-  
+  ptr->setName("nextArgPtr");
+
   Typedef* const* arguments = signature->getArgumentsType();
   for (uint32 i = 0; i < signature->nbArguments; ++i) {
   
     LLVMAssessorInfo& LAI = Compiler->getTypedefInfo(arguments[i]);
-    Value* arg = new LoadInst(ptr, "", currentBlock);
+    Value* arg = new LoadInst(ptr, "loadedArg", currentBlock);
     
     if (arguments[i]->isReference()) {
       arg = new IntToPtrInst(arg, Intrinsics.JavaObjectType, "", currentBlock);
       Value* cmp = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ,
                                 Intrinsics.JavaObjectNullConstant,
-                                arg, "");
-      BasicBlock* endBlock = BasicBlock::Create(context, "end", res);
-      BasicBlock* loadBlock = BasicBlock::Create(context, "load", res);
-      PHINode* node = PHINode::Create(Intrinsics.JavaObjectType, 2, "",
+                                arg, "isNullRefArg");
+      BasicBlock* endBlock = BasicBlock::Create(context, "refArgDone", res);
+      BasicBlock* loadBlock = BasicBlock::Create(context, "loadRefArg", res);
+      PHINode* node = PHINode::Create(Intrinsics.JavaObjectType, 2, "refArg",
                                       endBlock);
       node->addIncoming(Intrinsics.JavaObjectNullConstant, currentBlock);
       BranchInst::Create(endBlock, loadBlock, cmp, currentBlock);
@@ -430,7 +433,7 @@ Function* LLVMSignatureInfo::createFunct
       arg = new BitCastInst(arg,
                             PointerType::getUnqual(Intrinsics.JavaObjectType),
                             "", currentBlock);
-      arg = new LoadInst(arg, "", false, currentBlock);
+      arg = new LoadInst(arg, "loadedRefArg", false, currentBlock);
       node->addIncoming(arg, currentBlock);
       BranchInst::Create(endBlock, currentBlock);
       currentBlock = endBlock;
@@ -438,18 +441,18 @@ Function* LLVMSignatureInfo::createFunct
     } else if (arguments[i]->isFloat()) {
       arg = new TruncInst(arg, Compiler->AssessorInfo[I_INT].llvmType,
                           "", currentBlock);
-      arg = new BitCastInst(arg, LAI.llvmType, "", currentBlock);
+      arg = new BitCastInst(arg, LAI.llvmType, "arg", currentBlock);
     } else if (arguments[i]->isDouble()) {
-      arg = new BitCastInst(arg, LAI.llvmType, "", currentBlock);
+      arg = new BitCastInst(arg, LAI.llvmType, "arg", currentBlock);
     } else if (!arguments[i]->isLong()){
-      arg = new TruncInst(arg, LAI.llvmType, "", currentBlock);
+      arg = new TruncInst(arg, LAI.llvmType, "arg", currentBlock);
     }
     Args.push_back(arg);
-    ptr = GetElementPtrInst::Create(ptr, Intrinsics.constantOne,"",
+    ptr = GetElementPtrInst::Create(ptr, Intrinsics.constantOne,"nextArgPtr",
                                     currentBlock);
   }
 
-  Value* val = CallInst::Create(func, Args, "", currentBlock);
+  Value* val = CallInst::Create(func, Args, signature->getReturnType()->isVoid() ? "" : "retVal", currentBlock);
   if (!signature->getReturnType()->isVoid()) {
     ReturnInst::Create(context, val, currentBlock);
   } else {
@@ -598,7 +601,7 @@ Function* LLVMSignatureInfo::createFunct
   BasicBlock* callBlock = BasicBlock::Create(context, "call", stub);
   PHINode* node = NULL;
   if (!signature->getReturnType()->isVoid()) {
-    node = PHINode::Create(stub->getReturnType(), 2, "", endBlock);
+    node = PHINode::Create(stub->getReturnType(), 2, "retVal", endBlock);
   }
     
 
@@ -607,7 +610,7 @@ Function* LLVMSignatureInfo::createFunct
     Value* temp = arg;
     if (Compiler->useCooperativeGC() &&
         arg->getType() == Intrinsics.JavaObjectType) {
-      temp = new AllocaInst(Intrinsics.JavaObjectType, "", currentBlock);
+      temp = new AllocaInst(Intrinsics.JavaObjectType, "arg", currentBlock);
       new StoreInst(arg, temp, "", currentBlock);
       Value* GCArgs[2] = {
         new BitCastInst(temp, Intrinsics.ptrPtrType, "", currentBlock),
@@ -615,15 +618,17 @@ Function* LLVMSignatureInfo::createFunct
       };
         
       CallInst::Create(Intrinsics.llvm_gc_gcroot, GCArgs, "", currentBlock);
-    }
+    } else
+    	arg->setName("arg");
     
     TempArgs.push_back(temp);
   }
 
   if (virt) {
     if (Compiler->useCooperativeGC()) {
-      Args.push_back(new LoadInst(TempArgs[0], "", false, currentBlock));
+      Args.push_back(new LoadInst(TempArgs[0], "object", false, currentBlock));
     } else {
+      TempArgs[0]->setName("object");
       Args.push_back(TempArgs[0]);
     }
   }
@@ -631,17 +636,17 @@ Function* LLVMSignatureInfo::createFunct
   Value* val = CallInst::Create(virt ? Intrinsics.ResolveVirtualStubFunction :
                                 special ? Intrinsics.ResolveSpecialStubFunction:
                                           Intrinsics.ResolveStaticStubFunction,
-                                Args, "", currentBlock);
+                                Args, "resolvedFuncPtr", currentBlock);
   
   Constant* nullValue = Constant::getNullValue(val->getType());
   Value* cmp = new ICmpInst(*currentBlock, ICmpInst::ICMP_EQ,
-                            nullValue, val, "");
+                            nullValue, val, "isNotResolved");
   BranchInst::Create(endBlock, callBlock, cmp, currentBlock);
   if (node) node->addIncoming(Constant::getNullValue(node->getType()),
                               currentBlock);
 
   currentBlock = callBlock;
-  Value* Func = new BitCastInst(val, stub->getType(), "", currentBlock);
+  Value* Func = new BitCastInst(val, stub->getType(), "resolvedFunc", currentBlock);
   
   int i = 0;
   for (Function::arg_iterator arg = stub->arg_begin();
@@ -649,11 +654,12 @@ Function* LLVMSignatureInfo::createFunct
     Value* temp = arg;
     if (Compiler->useCooperativeGC() &&
         arg->getType() == Intrinsics.JavaObjectType) {
-      temp = new LoadInst(TempArgs[i], "", false, currentBlock);
-    }
+      temp = new LoadInst(TempArgs[i], "arg", false, currentBlock);
+    } else
+    	temp->setName("arg");
     FunctionArgs.push_back(temp);
   }
-  Value* res = CallInst::Create(Func, FunctionArgs, "", currentBlock);
+  Value* res = CallInst::Create(Func, FunctionArgs, node ? "funcRetVal" : "", currentBlock);
   if (node) node->addIncoming(res, currentBlock);
   BranchInst::Create(endBlock, currentBlock);
 

Modified: vmkit/trunk/lib/j3/VMCore/JavaArray.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaArray.cpp?rev=180451&r1=180450&r2=180451&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaArray.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaArray.cpp Thu Apr 25 12:11:01 2013
@@ -35,7 +35,8 @@ const unsigned int JavaArray::T_SHORT =
 const unsigned int JavaArray::T_INT = 10;
 const unsigned int JavaArray::T_LONG = 11;
 
-void ArrayObject::setElement(ArrayObject* self, JavaObject* value, uint32_t i) {
+template<>
+void TJavaArray<JavaObject*>::setElement(TJavaArray<JavaObject*>* self, JavaObject* value, uint32_t i) {
   llvm_gcroot(self, 0);
   llvm_gcroot(value, 0);
   assert((ssize_t)i < self->size);

Modified: vmkit/trunk/lib/j3/VMCore/JavaArray.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaArray.h?rev=180451&r1=180450&r2=180451&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaArray.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaArray.h Thu Apr 25 12:11:01 2013
@@ -46,29 +46,29 @@ public:
   T elements[1];
 
 public:
-  static int32_t getSize(const TJavaArray* self) __attribute__((always_inline)) {
+  static int32_t getSize(const TJavaArray* self) {
     llvm_gcroot(self, 0);
     return self->size;
   }
   
-  static T getElement(const TJavaArray* self, uint32_t i) __attribute__((always_inline)) {
+  static T getElement(const TJavaArray* self, uint32_t i) {
     llvm_gcroot(self, 0);
     assert((ssize_t)i < self->size);
     return self->elements[i];
   }
 
-  static void setElement(TJavaArray* self, T value, uint32_t i) __attribute__((always_inline)) {
+  static void setElement(TJavaArray* self, T value, uint32_t i) {
     llvm_gcroot(self, 0);
     assert((ssize_t)i < self->size);
     self->elements[i] = value;
   }
 
-  static const T* getElements(const TJavaArray* self) __attribute__((always_inline)) {
+  static const T* getElements(const TJavaArray* self) {
     llvm_gcroot(self, 0);
     return self->elements;
   }
 
-  static T* getElements(TJavaArray* self) __attribute__((always_inline)) {
+  static T* getElements(TJavaArray* self) {
     llvm_gcroot(self, 0);
     return self->elements;
   }
@@ -76,35 +76,10 @@ public:
   friend class JavaArray;
 };
 
-class ArrayObject : public JavaObject {
-public:
-  /// size - The (constant) size of the array.
-  ssize_t size;
-
-  /// elements - Elements of this array. The size here is different than the
-  /// actual size of the Java array. This is to facilitate Java array accesses
-  /// in JnJVM code. The size should be set to zero, but this is invalid C99.
-  JavaObject* elements[1];
+template<>
+void TJavaArray<JavaObject*>::setElement(TJavaArray<JavaObject*>* self, JavaObject* value, uint32_t i);
 
-public:
-  static int32_t getSize(const ArrayObject* self) {
-    llvm_gcroot(self, 0);
-    return self->size;
-  }
-  
-  static JavaObject* getElement(const ArrayObject* self, uint32_t i) __attribute__((always_inline)) {
-    llvm_gcroot(self, 0);
-    assert((ssize_t)i < self->size);
-    return self->elements[i];
-  }
-
-  static void setElement(ArrayObject* self, JavaObject* value, uint32_t i);
-
-  static JavaObject** getElements(ArrayObject* self) __attribute__((always_inline)) {
-    llvm_gcroot(self, 0);
-    return self->elements;
-  }
-};
+typedef TJavaArray<JavaObject*> ArrayObject;
 
 /// Instantiation of the TJavaArray class for Java arrays.
 #define ARRAYCLASS(name, elmt)                                \
@@ -142,7 +117,7 @@ public:
   static const unsigned int T_INT;
   static const unsigned int T_LONG;
 
-  static void setSize(JavaObject* array, int size) __attribute__((always_inline)) {
+  static void setSize(JavaObject* array, int size) {
     ArrayUInt8* obj = 0;
     llvm_gcroot(obj, 0);
     llvm_gcroot(array, 0);
@@ -150,7 +125,7 @@ public:
     obj->size = size;
   }
 
-  static sint32 getSize(const JavaObject* array) __attribute__((always_inline)) {
+  static sint32 getSize(const JavaObject* array) {
     const ArrayUInt8* obj = 0;
     llvm_gcroot(obj, 0);
     llvm_gcroot(array, 0);
@@ -158,7 +133,7 @@ public:
     return obj->size;
   }
 
-  static const unsigned char* getElements(const JavaObject* array) __attribute__((always_inline)) {
+  static const unsigned char* getElements(const JavaObject* array) {
     const ArrayUInt8* obj = 0;
     llvm_gcroot(obj, 0);
     llvm_gcroot(array, 0);
@@ -166,7 +141,7 @@ public:
     return obj->elements;
   }
 
-  static unsigned char* getElements(JavaObject* array) __attribute__((always_inline)) {
+  static unsigned char* getElements(JavaObject* array) {
     ArrayUInt8* obj = 0;
     llvm_gcroot(obj, 0);
     llvm_gcroot(array, 0);

Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180451&r1=180450&r2=180451&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 12:11:01 2013
@@ -1072,11 +1072,9 @@ ArrayObject* JavaMethod::getExceptionTyp
 JavaObject* CommonClass::setDelegatee(JavaObject* val) {
   llvm_gcroot(val, 0);
   JavaObject** obj = &(delegatee[0]);
-  classLoader->lock.lock();
   if (*obj == NULL) {
     vmkit::Collector::objectReferenceNonHeapWriteBarrier((gc**)obj, (gc*)val);
   }
-  classLoader->lock.unlock();
   return getDelegatee();
 }
 

Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.h?rev=180451&r1=180450&r2=180451&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaClass.h Thu Apr 25 12:11:01 2013
@@ -31,7 +31,6 @@
 
 namespace j3 {
 
-class ArrayObject;
 class ArrayUInt8;
 class ArrayUInt16;
 class Class;
@@ -47,6 +46,8 @@ class Reader;
 class Signdef;
 class Typedef;
 
+template <class T> class TJavaArray;
+typedef TJavaArray<JavaObject*> ArrayObject;
 
 /// JavaState - List of states a Java class can have. A class is ready to be
 /// used (i.e allocating instances of the class, calling methods of the class

Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp?rev=180451&r1=180450&r2=180451&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp Thu Apr 25 12:11:01 2013
@@ -1398,13 +1398,17 @@ void Jnjvm::addFinalizationCandidate(gc*
 }
 
 void Jnjvm::setType(gc* header, void* type) {
-	JavaObject* src = 0;
+	JavaObject* src = (JavaObject*)header;
 	llvm_gcroot(src, 0);
 	llvm_gcroot(header, 0);
-	src = (JavaObject*)header;
 	src->setVirtualTable((JavaVirtualTable*)type);
 }
 
+void Jnjvm::setType(void* header, void* type)
+{
+	((JavaObject*)header)->setVirtualTable((JavaVirtualTable*)type);
+}
+
 void* Jnjvm::getType(gc* header) {
 	JavaObject* src = 0;
 	llvm_gcroot(src, 0);

Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.h?rev=180451&r1=180450&r2=180451&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/j3/VMCore/Jnjvm.h Thu Apr 25 12:11:01 2013
@@ -28,7 +28,6 @@
 
 namespace j3 {
 
-class ArrayObject;
 class ArrayUInt16;
 class Classpath;
 class CommonClass;
@@ -47,6 +46,9 @@ class UserClassArray;
 class UserClassPrimitive;
 class UserCommonClass;
 
+template <class T> class TJavaArray;
+typedef TJavaArray<JavaObject*> ArrayObject;
+
 /// ThreadSystem - Thread management of a JVM. Each JVM has one thread
 /// management system to count the number of non-daemon threads it owns.
 /// The initial thread of the JVM is a non-daemon thread. When there are
@@ -133,6 +135,7 @@ private:
   virtual void finalizeObject(gc* res);
   virtual void traceObject(gc* obj, word_t closure);
   virtual void setType(gc* header, void* type);
+  virtual void setType(void* header, void* type);
   virtual void* getType(gc* obj);
   virtual size_t getObjectSize(gc* obj);
   virtual const char* getObjectTypeName(gc* obj);

Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h?rev=180451&r1=180450&r2=180451&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h Thu Apr 25 12:11:01 2013
@@ -47,7 +47,9 @@ class Typedef;
 class TypeMap;
 class VMClassLoader;
 class ZipArchive;
-class ArrayObject;
+
+template <class T> class TJavaArray;
+typedef TJavaArray<JavaObject*> ArrayObject;
 
 /// JnjvmClassLoader - Runtime representation of a class loader. It contains
 /// its own tables (signatures, UTF8, types) which are mapped to a single

Modified: vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp?rev=180451&r1=180450&r2=180451&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp Thu Apr 25 12:11:01 2013
@@ -35,8 +35,6 @@ void Jnjvm::resetReferenceIfStale(const
 	src = const_cast<JavaObject*>(reinterpret_cast<const JavaObject*>(source));
 	JavaObject **objRef = reinterpret_cast<JavaObject**>(ref);
 
-	return;
-
 	// Check the type of Java object. Some Java objects are not real object, but
 	// are bridges between Java and the VM objects.
 	if (VMClassLoader::isVMClassLoader(*objRef))

Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp?rev=180451&r1=180450&r2=180451&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp (original)
+++ vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp Thu Apr 25 12:11:01 2013
@@ -93,13 +93,11 @@ extern "C" void* VTgcmallocUnresolved(ui
 
 // Do not insert MagicArray ref to InternalSet of references.
 extern "C" void* AllocateMagicArray(int32_t sz, void* length) {
-	gc* res = 0;
-	llvm_gcroot(res, 0);
 	gcHeader* head = 0;
 	sz += gcHeader::hiddenHeaderSize();
 	head = (gcHeader*)malloc(sz);
 	memset((void*)head, 0, sz);
-	res = head->toReference();
+	void* res = head->toReference();
 	vmkit::Thread::get()->MyVM->setType(res, length);
 	return res;
 }

Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=180451&r1=180450&r2=180451&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Thu Apr 25 12:11:01 2013
@@ -119,7 +119,7 @@ extern "C" void* vmkitgcmallocUnresolved
  * Optimized gcmalloc for VT based object layout.                             *
  *****************************************************************************/
 
-extern "C" void* VTgcmalloc(uint32_t sz, void* VT) {
+extern "C" void* VTgcmalloc(uint32_t sz, VirtualTable* VT) {
 	gc* res = 0;
 	llvm_gcroot(res, 0);
 	sz += gcHeader::hiddenHeaderSize();
@@ -128,11 +128,11 @@ extern "C" void* VTgcmalloc(uint32_t sz,
 	return res;
 }
 
-extern "C" void* VTgcmallocUnresolved(uint32_t sz, void* VT) {
+extern "C" void* VTgcmallocUnresolved(uint32_t sz, VirtualTable* VT) {
   gc* res = 0;
   llvm_gcroot(res, 0);
   res = (gc*)VTgcmalloc(sz, VT);
-  if (((VirtualTable*)VT)->hasDestructor()) addFinalizationCandidate(res);
+  if (VT->hasDestructor()) addFinalizationCandidate(res);
   return res;
 }
 
@@ -293,13 +293,7 @@ void Collector::initialise(int argc, cha
 }
 
 extern "C" void* MMTkMutatorAllocate(uint32_t size, void* type) {
-  gc* val = NULL;
-  gcHeader* head = NULL;
-  llvm_gcroot(val, 0);
-  size += gcHeader::hiddenHeaderSize();
-  size = llvm::RoundUpToAlignment(size, sizeof(void*));
-  head = (gcHeader*)MutatorThread::get()->Allocator.Allocate(size);
-  val = head->toReference();
+  void* val = MutatorThread::get()->Allocator.Allocate(size);
   vmkit::Thread::get()->MyVM->setType(val, type);
   return val;
 }





More information about the vmkit-commits mailing list