[vmkit-commits] [vmkit] r86534 - in /vmkit/trunk: Makefile.rules lib/Mvm/Compiler/InlineMalloc.cpp mmtk/Makefile mmtk/mmtk-alloc/ mmtk/mmtk-alloc/Makefile mmtk/mmtk-alloc/Selected.cpp mmtk/mmtk-fake/Makefile mmtk/mmtk-fake/Selected.cpp mmtk/mmtk-j3/Selected.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Mon Nov 9 01:07:04 PST 2009


Author: geoffray
Date: Mon Nov  9 03:07:02 2009
New Revision: 86534

URL: http://llvm.org/viewvc/llvm-project?rev=86534&view=rev
Log:
Meta-circularity always requires some hacks...


Added:
    vmkit/trunk/mmtk/mmtk-alloc/
    vmkit/trunk/mmtk/mmtk-alloc/Makefile
    vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
Modified:
    vmkit/trunk/Makefile.rules
    vmkit/trunk/lib/Mvm/Compiler/InlineMalloc.cpp
    vmkit/trunk/mmtk/Makefile
    vmkit/trunk/mmtk/mmtk-fake/Makefile
    vmkit/trunk/mmtk/mmtk-fake/Selected.cpp
    vmkit/trunk/mmtk/mmtk-j3/Selected.cpp

Modified: vmkit/trunk/Makefile.rules
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile.rules?rev=86534&r1=86533&r2=86534&view=diff

==============================================================================
--- vmkit/trunk/Makefile.rules (original)
+++ vmkit/trunk/Makefile.rules Mon Nov  9 03:07:02 2009
@@ -127,15 +127,15 @@
 ifdef RUN_ANT
 ifdef ANT
 
-ADDITIONAL_ARGS := -load-bc=$(LibDir)/MMTKRuntime.bc -load-bc=$(LibDir)/MMTKFake.bc
+ADDITIONAL_ARGS := -load-bc=$(LibDir)/MMTKRuntime.bc 
 
 all::
 	$(Verb) $(ANT)
 	$(Echo) Building $(BuildMode) $(JARNAME).jar $(notdir $@)
-	$(Verb) $(LOPT) -load=$(LibDir)/JITGCPass$(SHLIBEXT) -std-compile-opts -JITGCPass -f $(LibDir)/MMTKRuntime.bc -o $(LibDir)/MMTKRuntime.bc
-	$(Verb) $(VMJC) -std-compile-opts $(ADDITIONAL_ARGS) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) -LowerMagic -verify $(JARNAME).jar -disable-exceptions -disable-cooperativegc -with-clinit=org/mmtk/vm/VM,org/mmtk/utility/*,org/mmtk/policy/*,org/j3/config/* -Dmmtk.hostjvm=org.j3.mmtk.Factory -o $(JARNAME).bc -Dmmtk.properties=vmkit.properties -disable-stubs -assume-compiled
+	$(Verb) $(LOPT) -load=$(LibDir)/JITGCPass$(SHLIBEXT) -std-compile-opts -JITGCPass -f $(LibDir)/MMTKAlloc.bc -o $(LibDir)/MMTKAlloc.bc
+	$(Verb) $(VMJC) -std-compile-opts $(ADDITIONAL_ARGS) -load=$(LibDir)/MMTKFake$(SHLIBEXT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) -LowerMagic -verify $(JARNAME).jar -disable-exceptions -disable-cooperativegc -with-clinit=org/mmtk/vm/VM,org/mmtk/utility/*,org/mmtk/policy/*,org/j3/config/* -Dmmtk.hostjvm=org.j3.mmtk.Factory -o $(JARNAME).bc -Dmmtk.properties=vmkit.properties -disable-stubs -assume-compiled
 	$(Verb) $(LOPT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) -std-compile-opts -LowerJavaRT -f $(JARNAME).bc -o $(JARNAME)-optimized.bc
-	$(Verb) $(LLVMLD) -r -o $(LibDir)/FinalMMTk.bc $(JARNAME)-optimized.bc $(LibDir)/MMTKRuntime.bc
+	$(Verb) $(LLVMLD) -r -o $(LibDir)/FinalMMTk.bc $(LibDir)/MMTKAlloc.bc $(JARNAME)-optimized.bc $(LibDir)/MMTKRuntime.bc
 	$(Verb) $(LOPT) -std-compile-opts $(LibDir)/FinalMMTk.bc -o $(LibDir)/FinalMMTk.bc
 
     

Modified: vmkit/trunk/lib/Mvm/Compiler/InlineMalloc.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Compiler/InlineMalloc.cpp?rev=86534&r1=86533&r2=86534&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/Compiler/InlineMalloc.cpp (original)
+++ vmkit/trunk/lib/Mvm/Compiler/InlineMalloc.cpp Mon Nov  9 03:07:02 2009
@@ -9,11 +9,16 @@
 
 #include "llvm/Constants.h"
 #include "llvm/GlobalVariable.h"
-#include "llvm/Pass.h"
 #include "llvm/Function.h"
 #include "llvm/Instructions.h"
+#include "llvm/Module.h"
+#include "llvm/Pass.h"
 #include "llvm/Support/CallSite.h"
 #include "llvm/Support/Debug.h"
+#include "llvm/Support/raw_ostream.h"
+#include "llvm/Transforms/Utils/Cloning.h"
+
+#include "mvm/JIT.h"
 
 using namespace llvm;
 
@@ -36,6 +41,8 @@
 
 
 bool InlineMalloc::runOnFunction(Function& F) {
+  Function* Malloc = mvm::MvmModule::globalModule->getFunction("gcmalloc");
+  if (Malloc->isDeclaration()) return false;
   bool Changed = false;
   for (Function::iterator BI = F.begin(), BE = F.end(); BI != BE; BI++) { 
     BasicBlock *Cur = BI; 
@@ -47,6 +54,11 @@
       if (CI) {
         Function* F = Call.getCalledFunction();
         if (F && F->getName() == "gcmalloc") {
+          if (dyn_cast<Constant>(Call.getArgument(0))) {
+            Call.setCalledFunction(mvm::MvmModule::globalModule->getFunction("gcmalloc"));
+            Changed |= InlineFunction(Call, 0, mvm::MvmModule::TheTargetData);
+            break;
+          }
         }
       }
     }

Modified: vmkit/trunk/mmtk/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/Makefile?rev=86534&r1=86533&r2=86534&view=diff

==============================================================================
--- vmkit/trunk/mmtk/Makefile (original)
+++ vmkit/trunk/mmtk/Makefile Mon Nov  9 03:07:02 2009
@@ -8,7 +8,7 @@
 ##===----------------------------------------------------------------------===##
 LEVEL = ..
 
-DIRS = magic mmtk-j3 mmtk-fake java
+DIRS = magic mmtk-j3 mmtk-fake mmtk-alloc java
 
 include $(LEVEL)/Makefile.config
 

Added: vmkit/trunk/mmtk/mmtk-alloc/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Makefile?rev=86534&view=auto

==============================================================================
--- vmkit/trunk/mmtk/mmtk-alloc/Makefile (added)
+++ vmkit/trunk/mmtk/mmtk-alloc/Makefile Mon Nov  9 03:07:02 2009
@@ -0,0 +1,26 @@
+##===- mmtk/mmtk-j3/Makefile -------------------------------*- Makefile -*-===##
+#
+#                     The vmkit project
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
+##===----------------------------------------------------------------------===##
+
+LEVEL = ../..
+
+include $(LEVEL)/Makefile.config
+
+ifeq ($(WITH_LLVM_GCC), 1)
+  MODULE_NAME = MMTKAlloc
+else
+  LIBRARYNAME = MMTKAlloc
+endif
+
+LOADABLE_MODULE = 1
+USEDLIBS =
+
+CXX.Flags += -I$(PROJ_OBJ_DIR)/../../lib/JnJVM/VMCore
+
+include $(LEVEL)/Makefile.common
+

Added: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=86534&view=auto

==============================================================================
--- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (added)
+++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Mon Nov  9 03:07:02 2009
@@ -0,0 +1,38 @@
+//===-------- Selected.cpp - Implementation of the Selected class  --------===//
+//
+//                              The VMKit project
+//
+// This file is distributed under the University of Illinois Open Source 
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "JavaArray.h"
+#include "JavaClass.h"
+#include "JavaObject.h"
+#include "JavaThread.h"
+#include "MutatorThread.h"
+
+using namespace jnjvm;
+
+extern "C" void* JnJVM_org_mmtk_plan_marksweep_MSMutator_alloc__IIIII(uintptr_t Mutator, int32_t sz, int32_t align, int32_t offset, int32_t allocator, int32_t site) __attribute__((always_inline));
+extern "C" int32_t JnJVM_org_mmtk_plan_MutatorContext_checkAllocator__III(uintptr_t Mutator, int32_t bytes, int32_t align, int32_t allocator) __attribute__((always_inline));
+extern "C" void JnJVM_org_mmtk_plan_marksweep_MSMutator_postAlloc__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2II(uintptr_t Mutator, uintptr_t ref, uintptr_t typeref,
+    int32_t bytes, int32_t allocator) __attribute__((always_inline));
+
+extern "C" void* gcmalloc(size_t sz, void* _VT) {
+  gc* res = 0;
+  llvm_gcroot(res, 0);
+  VirtualTable* VT = (VirtualTable*)_VT;
+  sz = llvm::RoundUpToAlignment(sz, sizeof(void*));
+  uintptr_t Mutator = mvm::MutatorThread::get()->MutatorContext;
+  int allocator = JnJVM_org_mmtk_plan_MutatorContext_checkAllocator__III(Mutator, sz, 0, 0);
+  res = (gc*)JnJVM_org_mmtk_plan_marksweep_MSMutator_alloc__IIIII(Mutator, sz, 0, 0, allocator, 0);
+  res->setVirtualTable(VT);
+  JnJVM_org_mmtk_plan_marksweep_MSMutator_postAlloc__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2II(Mutator, (uintptr_t)res, (uintptr_t)VT, sz, allocator);
+    
+  if (VT->destructor) {
+    mvm::Thread::get()->MyVM->addFinalizationCandidate(res);
+  }
+  return res;
+}

Modified: vmkit/trunk/mmtk/mmtk-fake/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-fake/Makefile?rev=86534&r1=86533&r2=86534&view=diff

==============================================================================
--- vmkit/trunk/mmtk/mmtk-fake/Makefile (original)
+++ vmkit/trunk/mmtk/mmtk-fake/Makefile Mon Nov  9 03:07:02 2009
@@ -11,12 +11,7 @@
 
 include $(LEVEL)/Makefile.config
 
-ifeq ($(WITH_LLVM_GCC), 1)
-  MODULE_NAME = MMTKFake
-else
-  LIBRARYNAME = MMTKFake
-endif
-
+LIBRARYNAME = MMTKFake
 LOADABLE_MODULE = 1
 USEDLIBS =
 

Modified: vmkit/trunk/mmtk/mmtk-fake/Selected.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-fake/Selected.cpp?rev=86534&r1=86533&r2=86534&view=diff

==============================================================================
--- vmkit/trunk/mmtk/mmtk-fake/Selected.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-fake/Selected.cpp Mon Nov  9 03:07:02 2009
@@ -20,11 +20,16 @@
                               int32_t site);
   
 
-extern "C" void* JnJVM_org_mmtk_plan_marksweep_MSMutator_alloc__IIIII(uintptr_t Mutator, int32_t sz, int32_t align, int32_t offset, int32_t allocator, int32_t site) {
-  return internalMalloc(Mutator, sz, align, offset, allocator, site);
-}
-extern "C" int32_t JnJVM_org_mmtk_plan_MutatorContext_checkAllocator__III(uintptr_t Mutator, int32_t bytes, int32_t align, int32_t allocator) {
-  return allocator;
+
+extern "C" void* gcmalloc(size_t sz, void* _VT) {
+  gc* res = 0;
+  VirtualTable* VT = (VirtualTable*)_VT;
+  sz = llvm::RoundUpToAlignment(sz, sizeof(void*));
+  res = internalMalloc(0, sz, 0, 0, 0, 0);
+  res->setVirtualTable(VT);
+    
+  if (VT->destructor) {
+    mvm::Thread::get()->MyVM->addFinalizationCandidate(res);
+  }
+  return res;
 }
-extern "C" void JnJVM_org_mmtk_plan_marksweep_MSMutator_postAlloc__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2II(uintptr_t Mutator, uintptr_t ref, uintptr_t typeref,
-    int32_t bytes, int32_t allocator) {}

Modified: vmkit/trunk/mmtk/mmtk-j3/Selected.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/Selected.cpp?rev=86534&r1=86533&r2=86534&view=diff

==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/Selected.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/Selected.cpp Mon Nov  9 03:07:02 2009
@@ -18,27 +18,3 @@
 extern "C" JavaObject* Java_org_j3_config_Selected_00024Mutator_get__() {
   return (JavaObject*)mvm::MutatorThread::get()->MutatorContext;
 }
-
-
-
-extern "C" void* JnJVM_org_mmtk_plan_marksweep_MSMutator_alloc__IIIII(uintptr_t Mutator, int32_t sz, int32_t align, int32_t offset, int32_t allocator, int32_t site) __attribute__((always_inline));
-extern "C" int32_t JnJVM_org_mmtk_plan_MutatorContext_checkAllocator__III(uintptr_t Mutator, int32_t bytes, int32_t align, int32_t allocator) __attribute__((always_inline));
-extern "C" void JnJVM_org_mmtk_plan_marksweep_MSMutator_postAlloc__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2II(uintptr_t Mutator, uintptr_t ref, uintptr_t typeref,
-    int32_t bytes, int32_t allocator) __attribute__((always_inline));
-
-extern "C" void* gcmalloc(size_t sz, void* _VT) {
-  gc* res = 0;
-  llvm_gcroot(res, 0);
-  VirtualTable* VT = (VirtualTable*)_VT;
-  sz = llvm::RoundUpToAlignment(sz, sizeof(void*));
-  uintptr_t Mutator = mvm::MutatorThread::get()->MutatorContext;
-  int allocator = JnJVM_org_mmtk_plan_MutatorContext_checkAllocator__III(Mutator, sz, 0, 0);
-  res = (gc*)JnJVM_org_mmtk_plan_marksweep_MSMutator_alloc__IIIII(Mutator, sz, 0, 0, allocator, 0);
-  res->setVirtualTable(VT);
-  JnJVM_org_mmtk_plan_marksweep_MSMutator_postAlloc__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2II(Mutator, (uintptr_t)res, (uintptr_t)VT, sz, allocator);
-    
-  if (VT->destructor) {
-    mvm::Thread::get()->MyVM->addFinalizationCandidate(res);
-  }
-  return res;
-}





More information about the vmkit-commits mailing list