[vmkit-commits] [vmkit] r54916 - in /vmkit/trunk/lib/JnJVM: Classpath/ClasspathVMClassLoader.cpp.inc VMCore/JavaClass.cpp VMCore/JavaJIT.cpp VMCore/Jnjvm.cpp VMCore/JnjvmModule.cpp VMCore/JnjvmModuleProvider.cpp VMCore/LowerConstantCalls.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Mon Aug 18 03:55:46 PDT 2008


Author: geoffray
Date: Mon Aug 18 05:55:46 2008
New Revision: 54916

URL: http://llvm.org/viewvc/llvm-project?rev=54916&view=rev
Log:
Compilation and bugfixes for a multi-vm environment.

Removing the ForceInitializationCheck function call in LLVM IR
is done by a separate pass and should be the last pass to run
on the IR.


Modified:
    vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp
    vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp

Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc?rev=54916&r1=54915&r2=54916&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc Mon Aug 18 05:55:46 2008
@@ -102,7 +102,7 @@
 #ifndef MULTIPLE_VM
       cl->delegatee = (JavaObject*)pd;
 #else
-      vm->delegatees->hash(cl, (JavaObject*)pd);
+      JavaThread::get()->isolate->delegatees->hash(cl, (JavaObject*)pd);
 #endif
     }
     cl->release();

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=54916&r1=54915&r2=54916&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Mon Aug 18 05:55:46 2008
@@ -545,9 +545,10 @@
 }
 
 void Class::createStaticInstance() {
+  JavaAllocator* allocator = &(JavaThread::get()->isolate->allocator);
   JavaObject* val = 
-    (JavaObject*)JavaThread::get()->isolate->allocateObject(staticSize,
-                                                            staticVT);
+    (JavaObject*)allocator->allocateObject(staticSize, staticVT);
+
   val->initialise(this);
   for (field_iterator i = this->staticFields.begin(),
             e = this->staticFields.end(); i!= e; ++i) {

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp?rev=54916&r1=54915&r2=54916&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Mon Aug 18 05:55:46 2008
@@ -1559,14 +1559,17 @@
     
     uint32 clIndex = ctpInfo->getClassIndexFromMethod(index);
     Class* mycl = (Class*)(ctpInfo->getMethodClassIfLoaded(clIndex));
-    if (mycl && mycl->status >= resolved) {
+    Value* arg = 0;
+    if (mycl && mycl->isResolved()) {
       LLVMCommonClassInfo* LCI = module->getClassInfo(mycl);
-      Value* arg = LCI->getVar(this);
+      arg = LCI->getVar(this);
       arg = invoke(JnjvmModule::InitialisationCheckFunction, arg, "",
                    currentBlock);
-      CallInst::Create(JnjvmModule::ForceInitialisationCheckFunction, arg, "",
-                       currentBlock);
+    } else {
+      arg = getResolvedClass(clIndex, true);
     }
+    CallInst::Create(JnjvmModule::ForceInitialisationCheckFunction, arg, "",
+                     currentBlock);
 
 #endif
 

Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=54916&r1=54915&r2=54916&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Mon Aug 18 05:55:46 2008
@@ -674,6 +674,7 @@
   LOAD_CLASS(Classpath::newMethod);
   LOAD_CLASS(Classpath::newField);
   LOAD_CLASS(Classpath::newStackTraceElement);
+  LOAD_CLASS(Classpath::newVMThrowable);
   LOAD_CLASS(ClasspathException::InvocationTargetException);
   LOAD_CLASS(ClasspathException::ArrayStoreException);
   LOAD_CLASS(ClasspathException::ClassCastException);
@@ -815,7 +816,7 @@
     isolate->classpath = ".";
   }
   
-  isolate->bootstrapThread = gc_new(JavaThread)();
+  isolate->bootstrapThread = allocator_new(&isolate->allocator, JavaThread)();
   isolate->bootstrapThread->initialise(0, isolate);
   void* baseSP = mvm::Thread::get()->baseSP;
   isolate->bootstrapThread->threadID = (mvm::Thread::self() << 8) & 0x7FFFFF00;
@@ -836,8 +837,8 @@
   isolate->hashStr = new StringMap();
   isolate->globalRefsLock = mvm::Lock::allocNormal();
 #ifdef MULTIPLE_VM
-  isolate->statics = vm_new(isolate, StaticInstanceMap)();  
-  isolate->delegatees = vm_new(isolate, DelegateeMap)(); 
+  isolate->statics = allocator_new(&isolate->allocator, StaticInstanceMap)(); 
+  isolate->delegatees = allocator_new(&isolate->allocator, DelegateeMap)(); 
 #endif
 
   return isolate;

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=54916&r1=54915&r2=54916&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Mon Aug 18 05:55:46 2008
@@ -131,10 +131,10 @@
 Value* LLVMCommonClassInfo::getVar(JavaJIT* jit) {
   if (!varGV) {
 #ifdef MULTIPLE_VM
-    if (jit->compilingClass->isolate->TheModule == Jnjvm::bootstrapVM->TheModule &&
-        classDef->isArray && classDef->isolate != Jnjvm::bootstrapVM) {
+    if (jit->compilingClass->classLoader->TheModule == JnjvmClassLoader::bootstrapLoader->TheModule &&
+        classDef->isArray && classDef->classLoader != JnjvmClassLoader::bootstrapLoader) {
       // We know the array class can belong to bootstrap
-      CommonClass* cl = Jnjvm::bootstrapVM->constructArray(classDef->name, 0);
+      CommonClass* cl = JnjvmClassLoader::bootstrapLoader->constructArray(classDef->name);
       return cl->classLoader->TheModule->getClassInfo(cl)->getVar(jit);
     }
 #endif

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp?rev=54916&r1=54915&r2=54916&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp Mon Aug 18 05:55:46 2008
@@ -181,6 +181,7 @@
 namespace mvm {
   llvm::FunctionPass* createEscapeAnalysisPass(llvm::Function*);
   llvm::FunctionPass* createLowerConstantCallsPass();
+  llvm::FunctionPass* createLowerForcedCallsPass();
 }
 
 static void addPass(FunctionPassManager *PM, Pass *P) {
@@ -228,8 +229,6 @@
   addPass(PM, mvm::createEscapeAnalysisPass(JnjvmModule::JavaObjectAllocateFunction));
   addPass(PM, mvm::createLowerConstantCallsPass());
   
-  addPass(PM, createGVNPass());                  // Remove redundancies
-
   // Run instcombine after redundancy elimination to exploit opportunities
   // opened up by them.
   addPass(PM, createInstructionCombiningPass());
@@ -239,6 +238,8 @@
   addPass(PM, createAggressiveDCEPass());        // Delete dead instructions
   addPass(PM, createCFGSimplificationPass());    // Merge & remove BBs
   
+  addPass(PM, mvm::createLowerForcedCallsPass());
+  
 }
 
 JnjvmModuleProvider::JnjvmModuleProvider(JnjvmModule *m) {

Modified: vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp?rev=54916&r1=54915&r2=54916&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp Mon Aug 18 05:55:46 2008
@@ -102,9 +102,6 @@
           Value* Size = new LoadInst(SizePtr, "", CI);
           CI->replaceAllUsesWith(Size);
           CI->eraseFromParent();
-        } else if (V == jnjvm::JnjvmModule::ForceInitialisationCheckFunction) {
-          Changed = true;
-          CI->eraseFromParent();
         } else if (V == jnjvm::JnjvmModule::GetDepthFunction) {
           Changed = true;
           Value* val = CI->getOperand(1); 
@@ -253,4 +250,40 @@
 FunctionPass* createLowerConstantCallsPass() {
   return new LowerConstantCalls();
 }
+  
+class VISIBILITY_HIDDEN LowerForcedCalls : public FunctionPass {
+  public:
+    static char ID;
+    LowerForcedCalls() : FunctionPass((intptr_t)&ID) { }
+
+    virtual bool runOnFunction(Function &F);
+  private:
+  };
+  char LowerForcedCalls::ID = 0;
+  static RegisterPass<LowerForcedCalls> Y("LowerForcedCalls",
+                                            "Lower Forced calls");
+
+bool LowerForcedCalls::runOnFunction(Function& F) {
+  bool Changed = false;
+  for (Function::iterator BI = F.begin(), BE = F.end(); BI != BE; BI++) { 
+    BasicBlock *Cur = BI; 
+    for (BasicBlock::iterator II = Cur->begin(), IE = Cur->end(); II != IE;) {
+      Instruction *I = II;
+      II++;
+      if (CallInst *CI = dyn_cast<CallInst>(I)) {
+        Value* V = CI->getOperand(0);
+        if (V == jnjvm::JnjvmModule::ForceInitialisationCheckFunction) {
+          Changed = true;
+          CI->eraseFromParent();
+        }
+      }
+    }
+  }
+  return Changed;
+}
+
+FunctionPass* createLowerForcedCallsPass() {
+  return new LowerForcedCalls();
+}
+
 }





More information about the vmkit-commits mailing list