[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