[vmkit-commits] [vmkit] r180287 - Removed GC header from JavaObject. Have to remove useless logs.
Peter Senna Tschudin
peter.senna at gmail.com
Thu Apr 25 09:49:46 PDT 2013
Author: peter.senna
Date: Thu Apr 25 11:47:51 2013
New Revision: 180287
URL: http://llvm.org/viewvc/llvm-project?rev=180287&view=rev
Log:
Removed GC header from JavaObject. Have to remove useless logs.
(cherry picked from commit e41d165843b2724abb26adabd7424e0edddba27b)
Modified:
vmkit/trunk/include/vmkit/GC.h
vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp
vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp
vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp
vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll
vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp
vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java
vmkit/trunk/mmtk/magic/LowerMagic.cpp
vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h
vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
vmkit/trunk/tools/vmjc/vmjc.cpp
Modified: vmkit/trunk/include/vmkit/GC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/GC.h?rev=180287&r1=180286&r2=180287&view=diff
==============================================================================
--- vmkit/trunk/include/vmkit/GC.h (original)
+++ vmkit/trunk/include/vmkit/GC.h Thu Apr 25 11:47:51 2013
@@ -28,7 +28,6 @@ public:
class gcRoot {
private:
- word_t _header;
public:
virtual ~gcRoot() {}
virtual void tracer(word_t closure) {}
Modified: vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp?rev=180287&r1=180286&r2=180287&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaAOTCompiler.cpp Thu Apr 25 11:47:51 2013
@@ -655,8 +655,8 @@ Constant* JavaAOTCompiler::CreateConstan
Elmts.push_back(getVirtualTable(cl->virtualVT));
// lock
- Constant* L = ConstantInt::get(Type::getInt64Ty(getLLVMContext()), 0);
- Elmts.push_back(ConstantExpr::getIntToPtr(L, JavaIntrinsics.ptrType));
+// Constant* L = ConstantInt::get(Type::getInt64Ty(getLLVMContext()), 0);
+// Elmts.push_back(ConstantExpr::getIntToPtr(L, JavaIntrinsics.ptrType));
return ConstantStruct::get(STy, Elmts);
}
Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp?rev=180287&r1=180286&r2=180287&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp Thu Apr 25 11:47:51 2013
@@ -1429,7 +1429,7 @@ void JavaJIT::loadConstant(uint16 index)
void JavaJIT::JITVerifyNull(Value* obj) {
if (TheCompiler->hasExceptionsEnabled()) {
if (nbHandlers == 0 && vmkit::System::SupportsHardwareNullCheck()) {
- Value* indexes[2] = { intrinsics->constantZero, intrinsics->constantZero };
+ Value* indexes[2] = { intrinsics->constantZero, intrinsics->JavaObjectVTOffsetConstant };
Value* VTPtr = GetElementPtrInst::Create(obj, indexes, "", currentBlock);
Instruction* VT = new LoadInst(VTPtr, "", true, currentBlock);
VT->setDebugLoc(DebugLoc::get(currentBytecodeIndex, 1, DbgSubprogram));
Modified: vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp?rev=180287&r1=180286&r2=180287&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/LowerConstantCalls.cpp Thu Apr 25 11:47:51 2013
@@ -143,7 +143,7 @@ bool LowerConstantCalls::runOnFunction(F
} else if (V == intrinsics->GetVTFunction) {
Changed = true;
Value* val = Call.getArgument(0); // get the object
- Value* indexes[2] = { intrinsics->constantZero, intrinsics->constantZero };
+ Value* indexes[2] = { intrinsics->constantZero, intrinsics->JavaObjectVTOffsetConstant };
Value* VTPtr = GetElementPtrInst::Create(val, indexes, "", CI);
Value* VT = new LoadInst(VTPtr, "", CI);
CI->replaceAllUsesWith(VT);
Modified: vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll?rev=180287&r1=180286&r2=180287&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll (original)
+++ vmkit/trunk/lib/j3/LLVMRuntime/runtime-default.ll Thu Apr 25 11:47:51 2013
@@ -5,11 +5,8 @@
;;; A virtual table is an array of function pointers.
%VT = type [0 x i32 (...)*]
-;;; Java VT (partial definition, only needed fields)
-%JavaVT = type { i8*, i8*, i8*, [ 1 x i8* ], %JavaCommonClass* }
-
-;;; The root of all Java Objects: a VT and a lock.
-%JavaObject = type { %VT*, i8* }
+;;; The root of all Java Objects: a VT (and a lock moved into GC header).
+%JavaObject = type { %VT* }
;;; Types for Java arrays. A size of 0 means an undefined size.
%JavaArray = type { %JavaObject, i8* }
@@ -25,15 +22,15 @@
%ArrayUInt8 = type { %JavaObject, i8*, [0 x i8] }
;;; The task class mirror.
-;;; Field 0: The class state
-;;; Field 1: The initialization state
-;;; Field 2: The static instance
+;;; Field 1: The class state
+;;; Field 2: The initialization state
+;;; Field 3: The static instance
%TaskClassMirror = type { i8, i1, i8* }
%CircularBase = type { %VT*, %CircularBase*, %CircularBase* }
;;; Field 0: the parent (circular base)
-;;; Field 1: isolate_id_t IsolateID
+;;; Field 1: size_t IsolateID
;;; Field 2: void* MyVM
;;; Field 3: void* baseSP
;;; Field 4: bool doYield
@@ -44,21 +41,21 @@
;;; field 9: void* routine
;;; field 10: void* lastKnownFrame
;;; field 11: void* lastExceptionBuffer
-%Thread = type { %CircularBase, i32, i8*, i8*, i1, i1, i1, i8*, i8*, i8*, i8*, i8*, i1 }
+%Thread = type { %CircularBase, i8*, i8*, i8*, i1, i1, i1, i8*, i8*, i8*, i8*, i8* }
%JavaThread = type { %MutatorThread, i8*, %JavaObject* }
%JavaConstantPool = type { %JavaClass*, i32, i8*, i32*, i8** }
-%Attribute = type { %UTF8*, i32, i32 }
+%Attribut = type { %UTF8*, i32, i32 }
-%UTF8 = type { i32, [0 x i16] }
+%UTF8 = type { i8*, [0 x i16] }
-%JavaField = type { i8*, i16, %UTF8*, %UTF8*, %Attribute*, i16, %JavaClass*, i32,
+%JavaField = type { i8*, i16, %UTF8*, %UTF8*, %Attribut*, i16, %JavaClass*, i32,
i16 }
-%JavaMethod = type { i8*, i16, %Attribute*, i16, %JavaClass*,
+%JavaMethod = type { i8*, i16, %Attribut*, i16, %JavaClass*,
%UTF8*, %UTF8*, i8, i8*, i32 }
%JavaClassPrimitive = type { %JavaCommonClass, i32 }
@@ -91,11 +88,10 @@ declare void @listAllTypes(%JavaObject,
%JavaField,
%JavaMethod,
%UTF8,
- %Attribute,
+ %Attribut,
%JavaThread,
%MutatorThread,
- %J3DenseMap,
- %JavaVT);
+ %J3DenseMap);
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;; Constant calls for J3 runtime internal objects field accesses ;;;;;;;;;
@@ -117,7 +113,7 @@ declare %VT* @getIMT(%VT*) readnone
declare %JavaCommonClass* @getClass(%JavaObject*) readnone
;;; getLock - Get the lock of an object.
-declare i8* @getLock(%JavaObject*)
+;;;declare i8* @getLock(%JavaObject*)
;;; getVTFromCommonClass - Get the VT of a class from its runtime
;;; representation.
@@ -148,7 +144,7 @@ declare %VT* @getVTInDisplay(%VT**, i32)
declare i32 @getDepth(%VT*) readnone
;;; getStaticInstance - Get the static instance of this class.
-declare i8* @j3GetStaticInstance(%JavaClass*) readnone
+declare i8* @getStaticInstance(%JavaClass*) readnone
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -165,8 +161,7 @@ declare %JavaObject* @j3MultiCallNew(%Ja
;;; initialisationCheck - Checks if the class has been initialized and
;;; initializes if not. This is used for initialization barriers in an isolate
;;; environment, and in some specific scenario in a single environment.
-declare %JavaClass* @j3InitialisationCheck(%JavaClass*)
-declare %JavaClass* @j3InitialisationCheckForJavaObject(%JavaObject*)
+declare %JavaClass* @initialisationCheck(%JavaClass*) readnone
;;; forceInitialisationCheck - Force to check initialization. The difference
;;; between this function and the initialisationCheck function is that the
@@ -184,9 +179,8 @@ declare void @forceLoadedCheck(%JavaComm
;;; getConstantPoolAt - Get the value in the constant pool of this class.
;;; This function is removed by J3's LLVM pass, therefore it does
;;; not have an actual implementation.
-declare i8* @getConstantPoolAt(i8* (%JavaClass*, i32, ...)*, i32,
+declare i8* @getConstantPoolAt(i8* (%JavaClass*, i32, ...)*, i8**,
%JavaClass*, i32, ...)
-declare i8* @j3GetCachedValue(%JavaClass*, i32, i32)
;;; j3VirtualTableLookup - Look up the offset in a virtual table of a
;;; specific function.
@@ -224,13 +218,11 @@ declare i1 @isSecondaryClass(%VT*, %VT*)
;;; getClassDelegatee - Returns the java/lang/Class representation of the
;;; class. This method is lowered to the GEP to the class delegatee in
;;; the common class.
-declare %JavaObject** @j3GetClassDelegateePtr(%JavaCommonClass*)
-declare %JavaObject* @j3GetClassDelegatee(%JavaCommonClass*)
+declare %JavaObject* @getClassDelegatee(%JavaCommonClass*)
;;; j3RuntimeDelegatee - Returns the java/lang/Class representation of the
;;; class. This method is called if the class delegatee has not been created
;;; yet.
-declare %JavaObject** @j3RuntimeDelegateePtr(%JavaCommonClass*)
declare %JavaObject* @j3RuntimeDelegatee(%JavaCommonClass*)
;;; j3GetArrayClass - Get the array user class of the user class.
Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp?rev=180287&r1=180286&r2=180287&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp (original)
+++ vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp Thu Apr 25 11:47:51 2013
@@ -49,9 +49,13 @@ extern "C" void addFinalizationCandidate
}
extern "C" void* AllocateMagicArray(int32_t sz, void* length) {
- gc* res = (gc*)malloc(sz);
- memset((void*)res, 0, sz);
- ((void**)res)[0] = length;
+ sz += gcHeader::hiddenHeaderSize();
+ gcHeader* head = 0;
+ gc* res = 0;
+ head = (gcHeader*)malloc(sz);
+ memset((void*)head, 0, sz);
+ res = head->toReference();
+ res->setVirtualTable((VirtualTable*)length);
return res;
}
Modified: vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java?rev=180287&r1=180286&r2=180287&view=diff
==============================================================================
--- vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java (original)
+++ vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java Thu Apr 25 11:47:51 2013
@@ -134,6 +134,9 @@ public final class Bindings {
private static native void setVT(Address addr , ObjectReference virtualTable);
@Inline
+ private static native int hiddenHeaderSize();
+
+ @Inline
private static native void memcpy(
ObjectReference to, ObjectReference from, int size);
Modified: vmkit/trunk/mmtk/magic/LowerMagic.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/magic/LowerMagic.cpp?rev=180287&r1=180286&r2=180287&view=diff
==============================================================================
--- vmkit/trunk/mmtk/magic/LowerMagic.cpp (original)
+++ vmkit/trunk/mmtk/magic/LowerMagic.cpp Thu Apr 25 11:47:51 2013
@@ -983,6 +983,12 @@ bool LowerMagic::runOnFunction(Function&
} else if (!strcmp(FCur->getName().data(), ObjectReferenceToAddressMethod)) {
Value* Val = Call.getArgument(0);
Val = new PtrToIntInst(Val, pointerSizeType, "", CI);
+
+ /*
+ * REMOVE ObjectReferenceToAddress offset !!!
+ */
+
+
Constant* M = ConstantInt::get(pointerSizeType, gcHeader::hiddenHeaderSize());
Val = BinaryOperator::CreateSub(Val, M, "", CI);
Val = new IntToPtrInst(Val, FCur->getReturnType(), "", CI);
Modified: vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h?rev=180287&r1=180286&r2=180287&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h (original)
+++ vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h Thu Apr 25 11:47:51 2013
@@ -28,7 +28,6 @@ struct MMTkVirtualTable : public Virtual
struct MMTkObject {
MMTkVirtualTable* virtualTable;
- gcHeader header;
};
struct MMTkArray : public MMTkObject {
Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp?rev=180287&r1=180286&r2=180287&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Thu Apr 25 11:47:51 2013
@@ -70,6 +70,13 @@ extern "C" void Java_org_j3_bindings_Bin
header->toReference()->setVirtualTable(VT);
}
+extern "C" int Java_org_j3_bindings_Bindings_hiddenHeaderSize__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2() ALWAYS_INLINE;
+
+extern "C" int Java_org_j3_bindings_Bindings_hiddenHeaderSize__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2() {
+ return gcHeader::hiddenHeaderSize();
+}
+
+
extern "C" void Java_org_j3_bindings_Bindings_memcpy__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2I(
void* res, void* src, int size) ALWAYS_INLINE;
Modified: vmkit/trunk/tools/vmjc/vmjc.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmjc/vmjc.cpp?rev=180287&r1=180286&r2=180287&view=diff
==============================================================================
--- vmkit/trunk/tools/vmjc/vmjc.cpp (original)
+++ vmkit/trunk/tools/vmjc/vmjc.cpp Thu Apr 25 11:47:51 2013
@@ -182,6 +182,13 @@ int main(int argc, char **argv) {
}
}
+ printf("Verifying Generated Module...\n");
+ if(llvm::verifyModule(*(Comp->getLLVMModule()), llvm::PrintMessageAction)){
+ printf("ERROR !!!\n");
+ return 1;
+ }
+ printf("Verification OK\n");
+
std::string ErrorInfo;
std::auto_ptr<raw_ostream> Out
(new raw_fd_ostream(OutputFilename.c_str(), ErrorInfo,
More information about the vmkit-commits
mailing list