[vmkit-commits] [vmkit] r180527 - Preparing branch for merge with master.

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 10:22:52 PDT 2013


Author: peter.senna
Date: Thu Apr 25 12:20:26 2013
New Revision: 180527

URL: http://llvm.org/viewvc/llvm-project?rev=180527&view=rev
Log:
Preparing branch for merge with master.
(cherry picked from commit a729b9c678be527c1f87534ad71d5347c1f5f327)

Modified:
    vmkit/trunk/lib/j3/ClassLib/Classpath.h.in
    vmkit/trunk/lib/j3/VMCore/JavaArray.h
    vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
    vmkit/trunk/lib/j3/VMCore/JavaClass.h
    vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp
    vmkit/trunk/lib/j3/VMCore/JavaObject.cpp
    vmkit/trunk/lib/j3/VMCore/JavaThread.h
    vmkit/trunk/lib/j3/VMCore/Jni.cpp
    vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
    vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp
    vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h
    vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp
    vmkit/trunk/lib/vmkit/Compiler/JIT.cpp
    vmkit/trunk/mmtk/inline/InlineMethods.cpp
    vmkit/trunk/tools/precompiler/Precompiler.cpp

Modified: vmkit/trunk/lib/j3/ClassLib/Classpath.h.in
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/Classpath.h.in?rev=180527&r1=180526&r2=180527&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/Classpath.h.in (original)
+++ vmkit/trunk/lib/j3/ClassLib/Classpath.h.in Thu Apr 25 12:20:26 2013
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 
 // Historically has been included here, keep it for now
-#include "jni.h"
+#include "j3/jni.h"
 #include "vmkit/System.h"
 
 #ifndef USE_OPENJDK

Modified: vmkit/trunk/lib/j3/VMCore/JavaArray.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaArray.h?rev=180527&r1=180526&r2=180527&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaArray.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaArray.h Thu Apr 25 12:20:26 2013
@@ -80,7 +80,6 @@ public:
 
 template<>
 void TJavaArray<JavaObject*>::setElement(TJavaArray<JavaObject*>* self, JavaObject* value, uint32_t i);
-
 typedef TJavaArray<JavaObject*> ArrayObject;
 
 /// Instantiation of the TJavaArray class for Java arrays.

Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180527&r1=180526&r2=180527&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 12:20:26 2013
@@ -17,7 +17,7 @@
 #include "ClasspathReflect.h"
 #include "JavaArray.h"
 #include "JavaClass.h"
-#include "JavaCompiler.h"
+#include "j3/JavaCompiler.h"
 #include "JavaString.h"
 #include "JavaConstantPool.h"
 #include "JavaObject.h"
@@ -30,6 +30,7 @@
 
 #include <cstring>
 #include <cstdlib>
+#include <algorithm>
 
 #if 0
 using namespace vmkit;
@@ -84,17 +85,16 @@ extern "C" bool IsSubtypeIntrinsic(JavaV
 	 return obj->isSubtypeOf(clazz);
 }
 
-static int compJavaVirtualTable (const void * elem1, const void * elem2) {
-	void * f = *((void**)elem1);
-	void * s = *((void**)elem2);
-    if (f > s) return  1;
-    if (f < s) return -1;
-    return 0;
+static bool LessThanPtrVirtualTable (JavaVirtualTable * elem1, JavaVirtualTable * elem2) {
+	return elem1 < elem2;
+}
+
+static bool equalsPtrVirtualTable (JavaVirtualTable * elem1, JavaVirtualTable * elem2) {
+	return elem1 == elem2;
 }
 
 JavaAttribute::JavaAttribute(const UTF8* name, uint32 length,
                    uint32 offset) {
-  
   this->start    = offset;
   this->nbb      = length;
   this->name     = name;
@@ -871,6 +871,30 @@ static void computeMirandaMethods(Class*
   }
 }
 
+static bool lessThanJavaMethods (JavaMethod* a,JavaMethod* b) {
+	bool flag = a->name->lessThan(b->name);
+	if (!flag) {
+		flag = a->name->equals(b->name);
+		if (flag) {
+			flag = a->type->lessThan(b->type);
+		}
+	}
+	return flag;
+}
+
+static bool cmpJavaMethods (JavaMethod* a,JavaMethod* b) {
+	bool flag = a->name->equals(b->name) && a->type->equals(b->type);
+	return flag;
+}
+
+static void cleanMirandaMethods(std::vector<JavaMethod*>& mirandaMethods) {
+	std::sort(mirandaMethods.begin(), mirandaMethods.end(), lessThanJavaMethods);
+	// using predicate comparison:
+	std::vector<JavaMethod*>::iterator it;
+	it = std::unique (mirandaMethods.begin(), mirandaMethods.end(), cmpJavaMethods);   // (no changes)
+	mirandaMethods.resize( std::distance(mirandaMethods.begin(),it) ); // 10 20 30 20 10
+}
+
 void Class::readMethods(Reader& reader) {
 
   uint32 nbMethods = reader.readU2();
@@ -906,13 +930,14 @@ void Class::readMethods(Reader& reader)
     std::vector<JavaMethod*> mirandaMethods;
     computeMirandaMethods(this, this, mirandaMethods);
     uint32 size = mirandaMethods.size();
+    if (size > 100) {
+    	cleanMirandaMethods(mirandaMethods);
+    	size = mirandaMethods.size();
+    }
     nbMethods += size;
     JavaMethod* realMethods =
       new(classLoader->allocator, "Methods") JavaMethod[nbMethods];
 
-    if (nbMethods < size) {
-        	printf("Error in class %s\n", UTF8Buffer(name).cString());
-    }
     memcpy(realMethods + size, virtualMethods,
            sizeof(JavaMethod) * (nbMethods - size));
 
@@ -1527,15 +1552,9 @@ JavaVirtualTable::JavaVirtualTable(Class
     }
 
     if (nbSecondaryTypes) {
-    	qsort(secondaryTypes, nbSecondaryTypes, sizeof(JavaVirtualTable*), compJavaVirtualTable);
-    	lastIndex = 1;
-    	JavaVirtualTable* temp = secondaryTypes[0];
-    	for (uint32 i = 1 ; i < nbSecondaryTypes ; i++ )
-    		if (secondaryTypes[i] != temp) {
-    			secondaryTypes[lastIndex++] = secondaryTypes[i];
-    			temp = secondaryTypes[i];
-    		}
-    	nbSecondaryTypes = lastIndex;
+    	std::sort(secondaryTypes, &secondaryTypes[nbSecondaryTypes],LessThanPtrVirtualTable);
+    	JavaVirtualTable** it = std::unique (secondaryTypes, &secondaryTypes[nbSecondaryTypes], equalsPtrVirtualTable);   // (no changes)
+    	nbSecondaryTypes = std::distance(secondaryTypes,it);
     	//isSortedSecondaryTypes = true;
     }
 
@@ -1774,15 +1793,9 @@ JavaVirtualTable::JavaVirtualTable(Class
     // array to point to java.lang.Object[]'s secondary list.
   }
   if (offset == getCacheIndex() && nbSecondaryTypes) {
-	qsort(secondaryTypes, nbSecondaryTypes, sizeof(JavaVirtualTable*), compJavaVirtualTable);
-	uint32 lastIndex = 1;
-	JavaVirtualTable* temp = secondaryTypes[0];
-	for (uint32 i = 1 ; i < nbSecondaryTypes ; ++i )
-		if (secondaryTypes[i] != temp) {
-			secondaryTypes[lastIndex++] = secondaryTypes[i];
-			temp = secondaryTypes[i];
-		}
-	nbSecondaryTypes = lastIndex;
+	std::sort(secondaryTypes, &secondaryTypes[nbSecondaryTypes],LessThanPtrVirtualTable);
+	JavaVirtualTable** it = std::unique (secondaryTypes, &secondaryTypes[nbSecondaryTypes], equalsPtrVirtualTable);   // (no changes)
+	nbSecondaryTypes = std::distance(secondaryTypes,it);
 	//isSortedSecondaryTypes = true;
   }
 }
@@ -2168,7 +2181,6 @@ JavaObject* AnnotationReader::createAnno
   Jnjvm * vm = JavaThread::get()->getJVM();
   Classpath* upcalls = vm->upcalls;
   UserClass* HashMap = upcalls->newHashMap;
-
   newHashMap = HashMap->doNew(vm);
   upcalls->initHashMap->invokeIntSpecial(vm, HashMap, newHashMap);
 

Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.h?rev=180527&r1=180526&r2=180527&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaClass.h Thu Apr 25 12:20:26 2013
@@ -468,7 +468,7 @@ public:
 
   /// nbVirtualMethods - The number of virtual methods.
   ///
-  uint16 nbVirtualMethods;
+  uint32 nbVirtualMethods;
   
   /// staticMethods - List of all the static methods defined by this class.
   ///

Modified: vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp?rev=180527&r1=180526&r2=180527&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp Thu Apr 25 12:20:26 2013
@@ -9,7 +9,7 @@
 
 #include <cstdarg>
 #include <cstring>
-#include "jni.h"
+#include "j3/jni.h"
 
 #include "debug.h"
 

Modified: vmkit/trunk/lib/j3/VMCore/JavaObject.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaObject.cpp?rev=180527&r1=180526&r2=180527&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaObject.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaObject.cpp Thu Apr 25 12:20:26 2013
@@ -21,7 +21,7 @@
 #include "Jnjvm.h"
 #include "VMStaticInstance.h"
 
-#include "jni.h"
+#include "j3/jni.h"
 #include "debug.h"
 
 using namespace j3;

Modified: vmkit/trunk/lib/j3/VMCore/JavaThread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaThread.h?rev=180527&r1=180526&r2=180527&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaThread.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaThread.h Thu Apr 25 12:20:26 2013
@@ -181,6 +181,9 @@ public:
   /// throwFromJNI - Throw an exception after executing JNI code.
   ///
   void throwFromJNI(word_t SP) {
+  	/* DEBUG*/
+  	endKnownFrame();
+  	enterUncooperativeCode(SP);
     // Nothing to do. The RETURN_FROM_JNI will take care of it.
   }
   

Modified: vmkit/trunk/lib/j3/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jni.cpp?rev=180527&r1=180526&r2=180527&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/Jni.cpp Thu Apr 25 12:20:26 2013
@@ -7,7 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "jni.h"
+#include "j3/jni.h"
 
 #include "vmkit/System.h"
 

Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp?rev=180527&r1=180526&r2=180527&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp Thu Apr 25 12:20:26 2013
@@ -25,7 +25,7 @@
 #include "ClasspathReflect.h"
 #include "JavaArray.h"
 #include "JavaClass.h"
-#include "JavaCompiler.h"
+#include "j3/JavaCompiler.h"
 #include "JavaConstantPool.h"
 #include "JavaString.h"
 #include "JavaThread.h"
@@ -45,6 +45,27 @@ const char* Jnjvm::dirSeparator = "/";
 const char* Jnjvm::envSeparator = ":";
 const unsigned int Jnjvm::Magic = 0xcafebabe;
 
+/**
+ * In JVM specification, the virtual machine should execute some code when
+ *  the application finish.
+ * See Runtime.addShutdownHook
+ * In GNUClasspath the default behavior when the program call System.exit
+ * is to execute such a code.
+ * Hence, the only mission of this thread is to call System.exit when
+ * the user press Ctrl_C
+ */
+void threadToDetectCtrl_C(vmkit::Thread* th) {
+	while (!vmkit::finishForCtrl_C) {
+		vmkit::lockForCtrl_C.lock();
+		vmkit::condForCtrl_C.wait(&vmkit::lockForCtrl_C);
+		vmkit::lockForCtrl_C.unlock(th);
+	}
+	JavaThread* kk = (JavaThread*)th;
+	UserClass* cl = kk->getJVM()->upcalls->SystemClass;
+	kk->getJVM() -> upcalls->SystemExit->invokeIntStatic(kk->getJVM(), cl, 0);
+}
+
+
 /// initialiseClass - Java class initialization. Java specification §2.17.5.
 
 void UserClass::initialiseClass(Jnjvm* vm) {
@@ -971,7 +992,17 @@ void ClArgumentsInfo::readArgs(Jnjvm* vm
         char* path = &cur[16];
         vm->bootstrapLoader->analyseClasspathEnv(path);
       }
-    } else if (!(strcmp(cur, "-enableassertions"))) {
+    }
+    else if (!(strncmp(cur, "-Xbootclasspath/a:", 18))) {
+	  uint32 len = strlen(cur);
+	  if (len == 18) {
+		printInformation();
+	  } else {
+		char* path = &cur[18];
+		vm->bootstrapLoader->analyseClasspathEnv(path);
+	  }
+    }
+    else if (!(strcmp(cur, "-enableassertions"))) {
       nyi();
     } else if (!(strcmp(cur, "-ea"))) {
       nyi();
@@ -1311,6 +1342,9 @@ void Jnjvm::runApplication(int argc, cha
   argumentsInfo.argv = argv;
   mainThread = new JavaThread(this);
   mainThread->start((void (*)(vmkit::Thread*))mainJavaStart);
+
+  JavaThread* th = new JavaThread(this);
+  th->start((void (*)(vmkit::Thread*))threadToDetectCtrl_C);
 }
 
 Jnjvm::Jnjvm(vmkit::BumpPtrAllocator& Alloc,

Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp?rev=180527&r1=180526&r2=180527&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp Thu Apr 25 12:20:26 2013
@@ -32,7 +32,7 @@
 #include "Classpath.h"
 #include "ClasspathReflect.h"
 #include "JavaClass.h"
-#include "JavaCompiler.h"
+#include "j3/JavaCompiler.h"
 #include "JavaConstantPool.h"
 #include "JavaString.h"
 #include "JavaThread.h"
@@ -324,9 +324,11 @@ UserClass* JnjvmBootstrapLoader::interna
     if (slash) {
       int packagelen = slash - cname;
       const UTF8 * package = name->extract(hashUTF8, 0, packagelen);
+      //classes->lock.lock();
       lock.lock();
       packages.insert(package);
       lock.unlock();
+      //classes->lock.unlock();
     }
   }
 
@@ -622,7 +624,7 @@ UserClass* JnjvmClassLoader::constructCl
   JavaObject* excp = NULL;
   llvm_gcroot(excp, 0);
   UserClass* res = NULL;
-  lock.lock();
+  lock2.lock();
   classes->lock.lock();
   res = (UserClass*) classes->map.lookup(name);
   classes->lock.unlock();
@@ -645,7 +647,7 @@ UserClass* JnjvmClassLoader::constructCl
       JavaThread::get()->clearException();    
     } END_CATCH;
   }
-  lock.unlock();
+  lock2.unlock();
   if (excp != NULL) {
     JavaThread::get()->throwException(excp);
   }

Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h?rev=180527&r1=180526&r2=180527&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h Thu Apr 25 12:20:26 2013
@@ -22,6 +22,7 @@
 #include "vmkit/VirtualMachine.h"
 
 #include "JavaObject.h"
+#include "JavaArray.h"
 #include "JnjvmConfig.h"
 #include "UTF8.h"
 
@@ -115,10 +116,15 @@ protected:
   ///
   SignMap* javaSignatures;
 
-  /// lock - Lock when loading classes.
+  /// lock - Lock when adding packages and Strings.
   ///
   vmkit::LockRecursive lock;
 
+  /// lock2 - Lock when loading classes.
+  ///
+  vmkit::LockRecursive lock2;
+
+
   /// registeredNatives - Stores the native function pointers corresponding
   /// to methods that were defined through JNI's RegisterNatives mechanism.
   ///

Modified: vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp?rev=180527&r1=180526&r2=180527&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp (original)
+++ vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp Thu Apr 25 12:20:26 2013
@@ -45,7 +45,7 @@ void ThinLock::overflowThinLock(gc* obje
  
 /// initialise - Initialise the value of the lock.
 ///
-#if 1
+#if 0
 // Disable fat lock deflation code in ObjectLocks.cpp
 // Fixes occasional assertion failure when running on multi-core machine.
 void ThinLock::removeFatLock(FatLock* fatLock, LockSystem& table) {
@@ -156,7 +156,7 @@ void ThinLock::acquire(gc* object, LockS
         if (obj->acquire(object, table)) {
           assert((object->header() & FatMask) && "Inconsistent lock");
           assert((table.getFatLockFromID(object->header()) == obj) && "Inconsistent lock");
-          assert(owner(object, table) && "Not owner after acquring fat lock!");
+          assert(owner(object, table) && "Not owner after acquiring fat lock!");
           break;
         }
       }
@@ -303,7 +303,7 @@ void FatLock::release(gc* obj, LockSyste
   llvm_gcroot(obj, 0);
   assert(associatedObject && "No associated object when releasing");
   assert(associatedObject == obj && "Mismatch object in lock");
-#if 1
+#if 0
   // Disable fat lock deflation code in ObjectLocks.cpp
   // Fixes occasional assertion failure when running on multi-core machine.
   if (!waitingThreads && !lockingThreads &&
@@ -441,6 +441,7 @@ bool LockingThread::wait(
   }
   
   this->state = LockingThread::StateWaiting;
+
   if (l->firstThread) {
     assert(l->firstThread->prevWaiting && l->firstThread->nextWaiting &&
            "Inconsistent list");
@@ -503,7 +504,7 @@ bool LockingThread::wait(
       this->nextWaiting = NULL;
       this->prevWaiting = NULL;
     } else {
-      assert(!this->prevWaiting && "Inconstitent state");
+      assert(!this->prevWaiting && "Inconsistent state");
       // Notify lost, notify someone else.
       notify(self, table);
     }

Modified: vmkit/trunk/lib/vmkit/Compiler/JIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Compiler/JIT.cpp?rev=180527&r1=180526&r2=180527&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/Compiler/JIT.cpp (original)
+++ vmkit/trunk/lib/vmkit/Compiler/JIT.cpp Thu Apr 25 12:20:26 2013
@@ -162,37 +162,37 @@ static void addPass(FunctionPassManager
 //
 static void AddStandardCompilePasses(FunctionPassManager* PM) { 
    
-//  addPass(PM, createCFGSimplificationPass()); // Clean up disgusting code
-//  addPass(PM, createPromoteMemoryToRegisterPass());// Kill useless allocas
-//
-//  addPass(PM, createInstructionCombiningPass()); // Cleanup for scalarrepl.
-//  addPass(PM, createScalarReplAggregatesPass()); // Break up aggregate allocas
-//  addPass(PM, createInstructionCombiningPass()); // Cleanup for scalarrepl.
-//  addPass(PM, createJumpThreadingPass());        // Thread jumps.
-//  addPass(PM, createCFGSimplificationPass());    // Merge & remove BBs
-//  addPass(PM, createInstructionCombiningPass()); // Combine silly seq's
-//
-//  addPass(PM, createCFGSimplificationPass());    // Merge & remove BBs
-//  addPass(PM, createReassociatePass());          // Reassociate expressions
-//  addPass(PM, createLoopRotatePass());           // Rotate loops.
-//  addPass(PM, createLICMPass());                 // Hoist loop invariants
-//  addPass(PM, createLoopUnswitchPass());         // Unswitch loops.
-//  addPass(PM, createInstructionCombiningPass());
-//  addPass(PM, createIndVarSimplifyPass());       // Canonicalize indvars
-//  addPass(PM, createLoopDeletionPass());         // Delete dead loops
-//  addPass(PM, createLoopUnrollPass());           // Unroll small loops*/
-//  addPass(PM, createInstructionCombiningPass()); // Clean up after the unroller
-//  addPass(PM, createGVNPass());                  // Remove redundancies
-//  addPass(PM, createMemCpyOptPass());             // Remove memcpy / form memset
-//  addPass(PM, createSCCPPass());                 // Constant prop with SCCP
+  addPass(PM, createCFGSimplificationPass()); // Clean up disgusting code
+  addPass(PM, createPromoteMemoryToRegisterPass());// Kill useless allocas
+
+  addPass(PM, createInstructionCombiningPass()); // Cleanup for scalarrepl.
+  addPass(PM, createScalarReplAggregatesPass()); // Break up aggregate allocas
+  addPass(PM, createInstructionCombiningPass()); // Cleanup for scalarrepl.
+  addPass(PM, createJumpThreadingPass());        // Thread jumps.
+  addPass(PM, createCFGSimplificationPass());    // Merge & remove BBs
+  addPass(PM, createInstructionCombiningPass()); // Combine silly seq's
+
+  addPass(PM, createCFGSimplificationPass());    // Merge & remove BBs
+  addPass(PM, createReassociatePass());          // Reassociate expressions
+  addPass(PM, createLoopRotatePass());           // Rotate loops.
+  addPass(PM, createLICMPass());                 // Hoist loop invariants
+  addPass(PM, createLoopUnswitchPass());         // Unswitch loops.
+  addPass(PM, createInstructionCombiningPass());
+  addPass(PM, createIndVarSimplifyPass());       // Canonicalize indvars
+  addPass(PM, createLoopDeletionPass());         // Delete dead loops
+  addPass(PM, createLoopUnrollPass());           // Unroll small loops*/
+  addPass(PM, createInstructionCombiningPass()); // Clean up after the unroller
+  addPass(PM, createGVNPass());                  // Remove redundancies
+  addPass(PM, createMemCpyOptPass());             // Remove memcpy / form memset
+  addPass(PM, createSCCPPass());                 // Constant prop with SCCP
 
   // Run instcombine after redundancy elimination to exploit opportunities
   // opened up by them.
-//  addPass(PM, createInstructionCombiningPass());
-//  addPass(PM, createJumpThreadingPass());         // Thread jumps
-//  addPass(PM, createDeadStoreEliminationPass());  // Delete dead stores
-//  addPass(PM, createAggressiveDCEPass());         // Delete dead instructions
-//  addPass(PM, createCFGSimplificationPass());     // Merge & remove BBs
+  addPass(PM, createInstructionCombiningPass());
+  addPass(PM, createJumpThreadingPass());         // Thread jumps
+  addPass(PM, createDeadStoreEliminationPass());  // Delete dead stores
+  addPass(PM, createAggressiveDCEPass());         // Delete dead instructions
+  addPass(PM, createCFGSimplificationPass());     // Merge & remove BBs
 }
 
 namespace vmkit {

Modified: vmkit/trunk/mmtk/inline/InlineMethods.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/inline/InlineMethods.cpp?rev=180527&r1=180526&r2=180527&view=diff
==============================================================================
--- vmkit/trunk/mmtk/inline/InlineMethods.cpp (original)
+++ vmkit/trunk/mmtk/inline/InlineMethods.cpp Thu Apr 25 12:20:26 2013
@@ -50,10 +50,7 @@ extern "C" void MMTk_InlineMethods(llvm:
 }
 
 namespace vmkit {
-
-extern "C" void makeLLVMFunctions_FinalMMTk(llvm::Module* mod)
-{
-  MMTk_InlineMethods(mod);
-}
-
+	extern "C" void vmkit::makeLLVMFunctions_FinalMMTk(llvm::Module* module) {
+		MMTk_InlineMethods(module);
+	}
 }

Modified: vmkit/trunk/tools/precompiler/Precompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/precompiler/Precompiler.cpp?rev=180527&r1=180526&r2=180527&view=diff
==============================================================================
--- vmkit/trunk/tools/precompiler/Precompiler.cpp (original)
+++ vmkit/trunk/tools/precompiler/Precompiler.cpp Thu Apr 25 12:20:26 2013
@@ -33,12 +33,6 @@
 using namespace j3;
 using namespace vmkit;
 
-#include "FrametablesExterns.inc"
-
-CompiledFrames* frametables[] = {
-  #include "FrametablesSymbols.inc"
-  NULL
-};
 
 static void mainCompilerLoaderStart(JavaThread* th) {
   Jnjvm* vm = th->getJVM();
@@ -80,7 +74,7 @@ int main(int argc, char **argv, char **e
     JavaJITCompiler* JIT = JavaJITCompiler::CreateCompiler("JIT");
     JnjvmBootstrapLoader* loader = new(Allocator, "Bootstrap loader")
       JnjvmBootstrapLoader(Allocator, JIT, true);
-    Jnjvm* vm = new(Allocator, "VM") Jnjvm(Allocator, frametables, loader);
+    Jnjvm* vm = new(Allocator, "VM") Jnjvm(Allocator, initialFrametables, loader);
  
     // Run the application. 
     vm->runApplication(argc, argv);





More information about the vmkit-commits mailing list