[vmkit-commits] [vmkit] r180314 - Removed VirtualTable usage when tracing objects in MMTk. Object tracing is now delegated to VirtualMachine.

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 09:54:56 PDT 2013


Author: peter.senna
Date: Thu Apr 25 11:53:26 2013
New Revision: 180314

URL: http://llvm.org/viewvc/llvm-project?rev=180314&view=rev
Log:
Removed VirtualTable usage when tracing objects in MMTk. Object tracing is now delegated to VirtualMachine.
(cherry picked from commit 134bfd384358fa7270c7dc4d254ebba2992f447a)

Modified:
    vmkit/trunk/include/vmkit/VirtualMachine.h
    vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
    vmkit/trunk/lib/j3/VMCore/Jnjvm.h
    vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp

Modified: vmkit/trunk/include/vmkit/VirtualMachine.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/VirtualMachine.h?rev=180314&r1=180313&r2=180314&view=diff
==============================================================================
--- vmkit/trunk/include/vmkit/VirtualMachine.h (original)
+++ vmkit/trunk/include/vmkit/VirtualMachine.h Thu Apr 25 11:53:26 2013
@@ -190,6 +190,10 @@ public:
   ///
   virtual void tracer(word_t closure) {}
 
+  /// traceObject - Method called during GC to trace live objects graph.
+  ///
+  virtual void traceObject(gc* object, word_t closure) = 0;
+
   /// getObjectSize - Get the size of this object. Used by copying collectors.
   ///
   virtual size_t getObjectSize(gc* object) = 0;

Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp?rev=180314&r1=180313&r2=180314&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp Thu Apr 25 11:53:26 2013
@@ -1382,6 +1382,14 @@ void Jnjvm::addFinalizationCandidate(gc*
   finalizerThread->addFinalizationCandidate(object);
 }
 
+// This method is called during GC so no llvm_gcroot needed.
+void Jnjvm::traceObject(gc* obj, word_t closure) {
+  assert(obj && "No object to trace");
+  assert(obj->getVirtualTable() && "No virtual table");
+  assert(obj->getVirtualTable()->tracer && "No tracer in VT");
+  obj->tracer(closure);
+}
+
 size_t Jnjvm::getObjectSize(gc* object) {
   // TODO: because this is called during GC, there is no need to do
   // llvm_gcroot. For clarity, it may be useful to have a special type

Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.h?rev=180314&r1=180313&r2=180314&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/j3/VMCore/Jnjvm.h Thu Apr 25 11:53:26 2013
@@ -130,6 +130,7 @@ private:
   virtual void scanPhantomReferencesQueue(word_t closure);
   virtual void scanFinalizationQueue(word_t closure);
   virtual void addFinalizationCandidate(gc* obj);
+  virtual void traceObject(gc* obj, word_t closure);
   virtual size_t getObjectSize(gc* obj);
   virtual const char* getObjectTypeName(gc* obj);
   virtual void printMethod(vmkit::FrameInfo* FI, word_t ip, word_t addr);

Modified: vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp?rev=180314&r1=180313&r2=180314&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/Scanning.cpp Thu Apr 25 11:53:26 2013
@@ -49,10 +49,7 @@ extern "C" void Java_org_j3_mmtk_Scannin
 extern "C" void Java_org_j3_mmtk_Scanning_specializedScanObject__ILorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* Scanning, uint32_t id, MMTkObject* TC, gc* obj) ALWAYS_INLINE;
 
 extern "C" void Java_org_j3_mmtk_Scanning_specializedScanObject__ILorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* Scanning, uint32_t id, MMTkObject* TC, gc* obj) {
-  assert(obj && "No object to trace");
-  assert(obj->getVirtualTable() && "No virtual table");
-  assert(obj->getVirtualTable()->tracer && "No tracer in VT");
-  obj->tracer(reinterpret_cast<word_t>(TC));
+  vmkit::Thread::get()->MyVM->traceObject(obj, reinterpret_cast<word_t>(TC));
 }
 
 extern "C" void Java_org_j3_mmtk_Scanning_preCopyGCInstances__Lorg_mmtk_plan_TraceLocal_2 (MMTkObject* Scanning, MMTkObject* TL) {
@@ -61,10 +58,7 @@ extern "C" void Java_org_j3_mmtk_Scannin
 
 extern "C" void Java_org_j3_mmtk_Scanning_scanObject__Lorg_mmtk_plan_TransitiveClosure_2Lorg_vmmagic_unboxed_ObjectReference_2 (
     MMTkObject* Scanning, word_t TC, gc* obj) {
-  assert(obj && "No object to trace");
-  assert(obj->getVirtualTable() && "No virtual table");
-  assert(obj->getVirtualTable()->tracer && "No tracer in VT");
-  obj->tracer(TC);
+	vmkit::Thread::get()->MyVM->traceObject(obj, TC);
 }
 
 extern "C" void Java_org_j3_mmtk_Scanning_precopyChildren__Lorg_mmtk_plan_TraceLocal_2Lorg_vmmagic_unboxed_ObjectReference_2 (





More information about the vmkit-commits mailing list