[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