[vmkit-commits] [vmkit] r111399 - in /vmkit/trunk: include/j3/J3Intrinsics.h lib/J3/Compiler/J3Intrinsics.cpp lib/J3/Compiler/JavaAOTCompiler.cpp lib/J3/LLVMRuntime/runtime-isolate.ll lib/J3/LLVMRuntime/runtime-single.ll lib/J3/VMCore/JavaClass.h

Nicolas Geoffray nicolas.geoffray at lip6.fr
Wed Aug 18 13:25:16 PDT 2010


Author: geoffray
Date: Wed Aug 18 15:25:16 2010
New Revision: 111399

URL: http://llvm.org/viewvc/llvm-project?rev=111399&view=rev
Log:
Don't use a thin lock for class locks: it is not worth it to complicate the code of the ThinLock implementation.


Modified:
    vmkit/trunk/include/j3/J3Intrinsics.h
    vmkit/trunk/lib/J3/Compiler/J3Intrinsics.cpp
    vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp
    vmkit/trunk/lib/J3/LLVMRuntime/runtime-isolate.ll
    vmkit/trunk/lib/J3/LLVMRuntime/runtime-single.ll
    vmkit/trunk/lib/J3/VMCore/JavaClass.h

Modified: vmkit/trunk/include/j3/J3Intrinsics.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/J3Intrinsics.h?rev=111399&r1=111398&r2=111399&view=diff
==============================================================================
--- vmkit/trunk/include/j3/J3Intrinsics.h (original)
+++ vmkit/trunk/include/j3/J3Intrinsics.h Wed Aug 18 15:25:16 2010
@@ -128,7 +128,6 @@
   llvm::Constant* OffsetObjectSizeInClassConstant;
   llvm::Constant* OffsetVTInClassConstant;
   llvm::Constant* OffsetTaskClassMirrorInClassConstant;
-  llvm::Constant* OffsetVirtualMethodsInClassConstant;
   llvm::Constant* OffsetStaticInstanceInTaskClassMirrorConstant;
   llvm::Constant* OffsetInitializedInTaskClassMirrorConstant;
   llvm::Constant* OffsetStatusInTaskClassMirrorConstant;

Modified: vmkit/trunk/lib/J3/Compiler/J3Intrinsics.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/J3Intrinsics.cpp?rev=111399&r1=111398&r2=111399&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Compiler/J3Intrinsics.cpp (original)
+++ vmkit/trunk/lib/J3/Compiler/J3Intrinsics.cpp Wed Aug 18 15:25:16 2010
@@ -138,8 +138,6 @@
   OffsetObjectSizeInClassConstant = constantOne;
   OffsetVTInClassConstant = ConstantInt::get(Type::getInt32Ty(Context), 7);
   OffsetTaskClassMirrorInClassConstant = constantThree;
-  OffsetVirtualMethodsInClassConstant =
-    ConstantInt::get(Type::getInt32Ty(Context), 9);
   OffsetStaticInstanceInTaskClassMirrorConstant = constantThree;
   OffsetStatusInTaskClassMirrorConstant = constantZero;
   OffsetInitializedInTaskClassMirrorConstant = constantOne;

Modified: vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp?rev=111399&r1=111398&r2=111399&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp Wed Aug 18 15:25:16 2010
@@ -1043,9 +1043,6 @@
   TempElts.clear();
   ClassElts.push_back(ConstantArray::get(ATy, CStr, 1));
 
-  // thinlock
-  ClassElts.push_back(Constant::getNullValue(JavaIntrinsics.ptrType));
-
   if (cl->nbVirtualFields + cl->nbStaticFields) {
     ATy = ArrayType::get(JavaIntrinsics.JavaFieldType->getContainedType(0),
                          cl->nbVirtualFields + cl->nbStaticFields);

Modified: vmkit/trunk/lib/J3/LLVMRuntime/runtime-isolate.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/LLVMRuntime/runtime-isolate.ll?rev=111399&r1=111398&r2=111399&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/LLVMRuntime/runtime-isolate.ll (original)
+++ vmkit/trunk/lib/J3/LLVMRuntime/runtime-isolate.ll Wed Aug 18 15:25:16 2010
@@ -9,7 +9,7 @@
                           %VT* }
 
 
-%JavaClass = type { %JavaCommonClass, i32, i32, [32 x %TaskClassMirror], i8*, 
+%JavaClass = type { %JavaCommonClass, i32, i32, [32 x %TaskClassMirror], 
                     %JavaField*, i16, %JavaField*, i16, %JavaMethod*, i16, 
                     %JavaMethod*, i16, i8*, %ArrayUInt8*, i8*, %Attribut*, 
                     i16, %JavaClass**, i16, %JavaClass*, i16, i8, i8, i32, i32 }

Modified: vmkit/trunk/lib/J3/LLVMRuntime/runtime-single.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/LLVMRuntime/runtime-single.ll?rev=111399&r1=111398&r2=111399&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/LLVMRuntime/runtime-single.ll (original)
+++ vmkit/trunk/lib/J3/LLVMRuntime/runtime-single.ll Wed Aug 18 15:25:16 2010
@@ -6,7 +6,7 @@
                           %JavaClass**, i16, %UTF8*, %JavaClass*, i8*, %VT* }
 
 
-%JavaClass = type { %JavaCommonClass, i32, i32, [1 x %TaskClassMirror], i8*,
+%JavaClass = type { %JavaCommonClass, i32, i32, [1 x %TaskClassMirror],
                     %JavaField*, i16, %JavaField*, i16, %JavaMethod*, i16,
                     %JavaMethod*, i16, i8*, %ArrayUInt8*, i8*, %Attribut*,
                     i16, %JavaClass**, i16, %JavaClass*, i16, i8, i8, i32, i32 }

Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.h?rev=111399&r1=111398&r2=111399&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaClass.h Wed Aug 18 15:25:16 2010
@@ -404,67 +404,6 @@
 ///
 class Class : public CommonClass {
 
-private:
- 
-  /// FatLock - This class is the inflated lock of Class instances. It should
-  /// be very rare that such locks are allocated.
-  class FatLock : public mvm::PermanentObject {
-  public:
-    /// lockVar - When multiple threads want to load/resolve/initialize a class,
-    /// they must be synchronized so that these steps are only performed once
-    /// for a given class.
-    mvm::LockRecursive lockVar;
-
-    /// condVar - Used to wake threads waiting on the load/resolve/initialize
-    /// process of this class, done by another thread.
-    mvm::Cond condVar;
-  
-    bool owner() {
-      return lockVar.selfOwner();
-    }
-
-    mvm::Thread* getOwner() {
-      return lockVar.getOwner();
-    }
-
-    static FatLock* allocate(UserCommonClass* cl) {
-      return new(cl->classLoader->allocator, "Class fat lock") FatLock();
-    }
-   
-    uintptr_t getID() {
-      return (((uintptr_t)this) >> 1) | mvm::FatMask;
-    }
-
-    static FatLock* getFromID(uintptr_t id) {
-      return (FatLock*)(id << 1);
-    }
-    
-    void deallocate() {
-      // Too bad, I can't deallocate it because it is in permanent memory.
-    }
-
-    bool acquire(CommonClass* cl) {
-      lockVar.lock();
-      return true;
-    }
-
-    void acquireAll(uint32 nb) {
-      lockVar.lockAll(nb);
-    }
-
-    void release(CommonClass* cl) {
-      lockVar.unlock();
-    }
-
-    void broadcast() {
-      condVar.broadcast();
-    }
-
-    void wait() {
-      condVar.wait(&lockVar);
-    }
-  };
-
 public:
   
   /// virtualSize - The size of instances of this class.
@@ -480,11 +419,6 @@
   ///
   TaskClassMirror IsolateInfo[NR_ISOLATES];
    
-  /// lock - The lock of this class. It should be very rare that this lock
-  /// inflates.
-  ///
-  mvm::ThinLock<FatLock, CommonClass, mvm::FatLockNoGC> lock;
-  
   /// virtualFields - List of all the virtual fields defined in this class.
   /// This does not contain non-redefined super fields.
   JavaField* virtualFields;
@@ -568,6 +502,10 @@
   /// staticSize - The size of the static instance of this class.
   ///
   uint32 staticSize;
+
+  /// lock - The lock of this class.
+  mvm::LockRecursive lock;
+  mvm::Cond condition;
   
   /// getVirtualSize - Get the virtual size of instances of this class.
   ///
@@ -751,27 +689,26 @@
   /// acquire - Acquire this class lock.
   ///
   void acquire() {
-    lock.acquire(this);
+    lock.lock();
   }
   
   /// release - Release this class lock.
   ///
   void release() {
-    lock.release(this);
+    lock.unlock();
   }
 
   /// waitClass - Wait for the class to be loaded/initialized/resolved.
   ///
   void waitClass() {
-    FatLock* FL = lock.changeToFatlock(this);
-    FL->wait();
+    condition.wait(&lock);
   }
   
   /// broadcastClass - Unblock threads that were waiting on the class being
   /// loaded/initialized/resolved.
   ///
   void broadcastClass() {
-    lock.broadcast();  
+    condition.broadcast();  
   }
   
 #ifndef ISOLATE





More information about the vmkit-commits mailing list