[vmkit-commits] [vmkit] r60118 - in /vmkit/trunk: include/mvm/Allocator.h include/mvm/JIT.h include/mvm/Threads/Locks.h include/mvm/Threads/Thread.h lib/JnJVM/Classpath/ClasspathVMObject.cpp lib/JnJVM/VMCore/JavaObject.cpp lib/JnJVM/VMCore/JavaObject.h lib/JnJVM/VMCore/JavaRuntimeJIT.cpp lib/JnJVM/VMCore/JnjvmModule.h lib/Mvm/Runtime/JIT.cpp lib/N3/VMCore/VMClass.cpp tools/vmkit/Launcher.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Wed Nov 26 13:46:39 PST 2008


Author: geoffray
Date: Wed Nov 26 15:46:39 2008
New Revision: 60118

URL: http://llvm.org/viewvc/llvm-project?rev=60118&view=rev
Log:
Reorganize thin lock implementation. Now the implementation is in
Mvm and virtual machines can specialize the thin lock to be inflated
in a virtual machine specific object.


Modified:
    vmkit/trunk/include/mvm/Allocator.h
    vmkit/trunk/include/mvm/JIT.h
    vmkit/trunk/include/mvm/Threads/Locks.h
    vmkit/trunk/include/mvm/Threads/Thread.h
    vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
    vmkit/trunk/lib/Mvm/Runtime/JIT.cpp
    vmkit/trunk/lib/N3/VMCore/VMClass.cpp
    vmkit/trunk/tools/vmkit/Launcher.cpp

Modified: vmkit/trunk/include/mvm/Allocator.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Allocator.h?rev=60118&r1=60117&r2=60118&view=diff

==============================================================================
--- vmkit/trunk/include/mvm/Allocator.h (original)
+++ vmkit/trunk/include/mvm/Allocator.h Wed Nov 26 15:46:39 2008
@@ -93,6 +93,13 @@
   }
 };
 
+/// JITInfo - This class can be derived from to hold private JIT-specific
+/// information. Objects of type are accessed/created with
+/// <Class>::getInfo and destroyed when the <Class> object is destroyed.
+struct JITInfo : public mvm::PermanentObject {
+  virtual ~JITInfo() {}
+};
+
 } // end namespace mvm
 
 #endif // MVM_ALLOCATOR_H

Modified: vmkit/trunk/include/mvm/JIT.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/JIT.h?rev=60118&r1=60117&r2=60118&view=diff

==============================================================================
--- vmkit/trunk/include/mvm/JIT.h (original)
+++ vmkit/trunk/include/mvm/JIT.h Wed Nov 26 15:46:39 2008
@@ -24,21 +24,12 @@
 
 #include "types.h"
 
-#include "mvm/Allocator.h"
-#include "mvm/MvmMemoryManager.h"
-#include "mvm/Threads/Locks.h"
-
 namespace mvm {
 
+class LockNormal;
+class MvmMemoryManager;
 class Thread;
 
-/// JITInfo - This class can be derived from to hold private JIT-specific
-/// information. Objects of type are accessed/created with
-/// <Class>::getInfo and destroyed when the <Class> object is destroyed.
-struct JITInfo : public mvm::PermanentObject {
-  virtual ~JITInfo() {}
-};
-
 const double MaxDouble = +INFINITY; //1.0 / 0.0;
 const double MinDouble = -INFINITY;//-1.0 / 0.0;
 const double MaxLongDouble =  9223372036854775807.0;

Modified: vmkit/trunk/include/mvm/Threads/Locks.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Locks.h?rev=60118&r1=60117&r2=60118&view=diff

==============================================================================
--- vmkit/trunk/include/mvm/Threads/Locks.h (original)
+++ vmkit/trunk/include/mvm/Threads/Locks.h Wed Nov 26 15:46:39 2008
@@ -12,6 +12,9 @@
 
 #include <pthread.h>
 
+#include "mvm/JIT.h"
+#include "mvm/Threads/Thread.h"
+
 namespace mvm {
 
 class Cond;
@@ -65,6 +68,165 @@
   void lockAll(int count);
 };
 
+#if (__WORDSIZE == 64)
+  static const uint64_t FatMask = 0x8000000000000000;
+#else
+  static const uint64_t FatMask = 0x80000000;
+#endif
+
+  static const uint64_t ThinMask = 0x7FFFFF00;
+  static const uint64_t ReservedMask = 0X7FFFFFFF;
+  static const uint64_t ThinCountMask = 0xFF;
+
+
+/// ThinLock - This class is an implementation of thin locks with reservation.
+/// The creator of the lock reserves this lock so that a lock only needs
+/// a comparison and not an expensive compare and swap. The template class
+/// TFatLock is a virtual machine specific fat lock.
+///
+template <class TFatLock>
+class ThinLock {
+  uintptr_t lock;
+
+public:
+  /// overflowThinlock - Change the lock of this object to a fat lock because
+  /// we have reached 0xFF locks.
+  void overflowThinLock() {
+    TFatLock* obj = TFatLock::allocate();
+    obj->acquireAll(256);
+    lock = ((uintptr_t)obj >> 1) | FatMask;
+  }
+ 
+  /// initialise - Initialise the value of the lock to the thread ID that is
+  /// creating this lock.
+  ///
+  void initialise() {
+    lock = (uintptr_t)mvm::Thread::get()->getThreadID();
+  }
+  
+  /// ThinLock - Calls initialize.
+  ThinLock() {
+    initialise();
+  }
+
+  
+  /// changeToFatlock - Change the lock of this object to a fat lock. The lock
+  /// may be in a thin lock or fat lock state.
+  TFatLock* changeToFatlock() {
+    if (!(lock & FatMask)) {
+      TFatLock* obj = TFatLock::allocate();
+      uintptr_t val = ((uintptr_t)obj >> 1) | FatMask;
+      uint32 count = lock & ThinCountMask;
+      obj->acquireAll(count);
+      lock = val;
+      return obj;
+    } else {
+      return (TFatLock*)(lock << 1);
+    }
+  }
+ 
+
+  /// acquire - Acquire the lock.
+  void acquire() {
+    uint64_t id = mvm::Thread::get()->getThreadID();
+    if ((lock & ReservedMask) == id) {
+      lock |= 1;
+    } else if ((lock & ThinMask) == id) {
+      if ((lock & ThinCountMask) == ThinCountMask) {
+        overflowThinLock();
+      } else {
+        ++lock;
+      }
+    } else {
+      uintptr_t currentLock = lock & ThinMask;
+      uintptr_t val = 
+        (uintptr_t)__sync_val_compare_and_swap((uintptr_t)&lock, currentLock, 
+                                             (id + 1));
+      if (val != currentLock) {
+        if (val & FatMask) {
+end:
+          //fat lock!
+          TFatLock* obj = (TFatLock*)(lock << 1);
+          obj->acquire();
+        } else {
+          TFatLock* obj = TFatLock::allocate();
+          val = ((uintptr_t)obj >> 1) | FatMask;
+          uint32 count = 0;
+loop:
+          if (lock & FatMask) goto end;
+
+          while ((lock & ThinCountMask) != 0) {
+            if (lock & FatMask) {
+#ifdef USE_GC_BOEHM
+              delete obj;
+#endif
+              goto end;
+            }
+            else {
+              mvm::Thread::yield(&count);
+            }
+          }
+        
+          currentLock = lock & ThinMask;
+          uintptr_t test = 
+            (uintptr_t)__sync_val_compare_and_swap((uintptr_t)&lock, currentLock,
+                                                   val);
+          if (test != currentLock) goto loop;
+          obj->acquire();
+        }
+      }
+    }
+  }
+
+  /// release - Release the lock.
+  void release() {
+    uint64 id = mvm::Thread::get()->getThreadID();
+    if ((lock & ThinMask) == id) {
+      --lock;
+    } else {
+      TFatLock* obj = (TFatLock*)(lock << 1);
+      obj->release();
+    } 
+  }
+
+  /// broadcast - Wakes up all threads waiting for this lock.
+  ///
+  void broadcast() {
+    if (lock & FatMask) {
+      TFatLock* obj = (TFatLock*)(lock << 1);
+      obj->broadcast();
+    }
+  }
+  
+  /// signal - Wakes up one thread waiting for this lock.
+  void signal() {
+    if (lock & FatMask) {
+      TFatLock* obj = (TFatLock*)(lock << 1);
+      obj->signal();
+    }
+  }
+  
+  /// owner - Returns true if the curren thread is the owner of this object's
+  /// lock.
+  bool owner() {
+    uint64 id = mvm::Thread::get()->getThreadID();
+    if ((lock & ThinMask) == id) return true;
+    if (lock & FatMask) {
+      TFatLock* obj = (TFatLock*)(lock << 1);
+      return obj->owner();
+    }
+    return false;
+  }
+
+  /// getFatLock - Get the fat lock is the lock is a fat lock, 0 otherwise.
+  TFatLock* getFatLock() {
+    if (lock & FatMask) {
+      return (TFatLock*)(lock << 1);
+    } else {
+      return 0;
+    }
+  }
+};
 
 } // end namespace mvm
 

Modified: vmkit/trunk/include/mvm/Threads/Thread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Thread.h?rev=60118&r1=60117&r2=60118&view=diff

==============================================================================
--- vmkit/trunk/include/mvm/Threads/Thread.h (original)
+++ vmkit/trunk/include/mvm/Threads/Thread.h Wed Nov 26 15:46:39 2008
@@ -13,8 +13,6 @@
 #include "types.h"
 
 #include "MvmGC.h"
-#include "mvm/JIT.h"
-#include "mvm/Object.h"
 
 
 class Collector;

Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp?rev=60118&r1=60117&r2=60118&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp Wed Nov 26 15:46:39 2008
@@ -43,7 +43,7 @@
   JavaObject* res = (JavaObject*)
     vm->gcAllocator.allocateManagedObject(size, src->getVirtualTable());
   memcpy(res, src, size);
-  res->lock = JavaThread::get()->getThreadID();
+  res->lock.initialise();
   return (jobject)res;
 } 
 

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp Wed Nov 26 15:46:39 2008
@@ -74,94 +74,6 @@
   return res;
 }
 
-bool JavaObject::owner() {
-  uint64 id = mvm::Thread::get()->getThreadID();
-  if ((lock & ThinMask) == id) return true;
-  if (lock & FatMask) {
-    LockObj* obj = (LockObj*)(lock << 1);
-    return obj->owner();
-  }
-  return false;
-}
-
-void JavaObject::overflowThinlock() {
-  LockObj* obj = LockObj::allocate();
-  obj->lock.lockAll(256);
-  lock = ((uintptr_t)obj >> 1) | FatMask;
-}
-
-void JavaObject::release() {
-  uint64 id = mvm::Thread::get()->getThreadID();
-  if ((lock & ThinMask) == id) {
-    --lock;
-  } else {
-    LockObj* obj = (LockObj*)(lock << 1);
-    obj->release();
-  } 
-}
-
-void JavaObject::acquire() {
-  uint64_t id = mvm::Thread::get()->getThreadID();
-  if ((lock & ReservedMask) == id) {
-    lock |= 1;
-  } else if ((lock & ThinMask) == id) {
-    if ((lock & ThinCountMask) == ThinCountMask) {
-      overflowThinlock();
-    } else {
-      ++lock;
-    }
-  } else {
-    uintptr_t currentLock = lock & ThinMask;
-    uintptr_t val = 
-      (uintptr_t)__sync_val_compare_and_swap((uintptr_t)&lock, currentLock, 
-                                             (id + 1));
-    if (val != currentLock) {
-      if (val & FatMask) {
-end:
-        //fat lock!
-        LockObj* obj = (LockObj*)(lock << 1);
-        obj->acquire();
-      } else {
-        LockObj* obj = LockObj::allocate();
-        val = ((uintptr_t)obj >> 1) | FatMask;
-        uint32 count = 0;
-loop:
-        while ((lock & ThinCountMask) != 0) {
-          if (lock & FatMask) {
-#ifdef USE_GC_BOEHM
-            delete obj;
-#endif
-            goto end;
-          }
-          else {
-            mvm::Thread::yield(&count);
-          }
-        }
-        
-        currentLock = lock & ThinMask;
-        uintptr_t test = 
-          (uintptr_t)__sync_val_compare_and_swap((uintptr_t)&lock, currentLock,
-                                                 val);
-        if (test != currentLock) goto loop;
-        obj->acquire();
-      }
-    }
-  }
-}
-
-LockObj* JavaObject::changeToFatlock() {
-  if (!(lock & FatMask)) {
-    LockObj* obj = LockObj::allocate();
-    uintptr_t val = ((uintptr_t)obj >> 1) | FatMask;
-    uint32 count = lock & ThinCountMask;
-    obj->lock.lockAll(count);
-    lock = val;
-    return obj;
-  } else {
-    return (LockObj*)(lock << 1);
-  }
-}
-
 void JavaObject::print(mvm::PrintBuffer* buf) const {
   buf->write("JavaObject<");
   CommonClass::printClassName(classOf->getName(), buf);
@@ -171,7 +83,7 @@
 void JavaObject::waitIntern(struct timeval* info, bool timed) {
 
   if (owner()) {
-    LockObj * l = changeToFatlock();
+    LockObj * l = lock.changeToFatlock();
     JavaThread* thread = JavaThread::get();
     mvm::Lock& mutexThread = thread->lock;
     mvm::Cond& varcondThread = thread->varcond;
@@ -225,8 +137,8 @@
 
 void JavaObject::notify() {
   if (owner()) {
-    LockObj * l = changeToFatlock();
-    l->getCond()->notify();
+    LockObj * l = lock.getFatLock();
+    if (l) l->getCond()->notify();
   } else {
     JavaThread::get()->getJVM()->illegalMonitorStateException(this);
   }
@@ -234,8 +146,8 @@
 
 void JavaObject::notifyAll() {
   if (owner()) {
-    LockObj * l = changeToFatlock();
-    l->getCond()->notifyAll();
+    LockObj * l = lock.getFatLock();
+    if (l) l->getCond()->notifyAll();
   } else {
     JavaThread::get()->getJVM()->illegalMonitorStateException(this);
   } 

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h?rev=60118&r1=60117&r2=60118&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h Wed Nov 26 15:46:39 2008
@@ -60,9 +60,7 @@
 /// LockObj - This class represents a Java monitor.
 ///
 class LockObj : public mvm::Object {
-
   friend class JavaObject;
-
 private:
 
 
@@ -74,20 +72,21 @@
   ///
   JavaCond varcond;
 
+public:
   /// allocate - Allocates a lock object. Only the internal lock is allocated.
   ///
   static LockObj* allocate();
   
-  /// myLock - Returns the lock object of this object, allocating it if
-  /// non-existant. This uses the big lock to make the object lock unique.
-  ///
-  static LockObj* myLock(JavaObject* obj);
-
   /// acquire - Acquires the lock.
   ///
   void acquire() {
     lock.lock();
   }
+  
+  /// acquireAll - Acquires the lock nb times.
+  void acquireAll(uint32 nb) {
+    lock.lockAll(nb);
+  }
 
   /// release - Releases the lock.
   ///
@@ -108,8 +107,6 @@
     return &varcond;
   }
 
-public:
-
   static VirtualTable* VT;
 
   ~LockObj() {}
@@ -136,7 +133,7 @@
 
   /// lock - The monitor of this object. Most of the time null.
   ///
-  uintptr_t lock;
+  mvm::ThinLock<LockObj> lock;
 
   /// wait - Java wait. Makes the current thread waiting on a monitor.
   ///
@@ -156,12 +153,17 @@
   /// the monitor.
   ///
   void notifyAll();
-  
+ 
+  /// overflowThinLokc - Notify that the thin lock has overflowed.
+  ///
+  void overflowThinLock() {
+    lock.overflowThinLock();
+  }
+
   /// initialise - Initialises the object.
   ///
   void initialise(UserCommonClass* cl) {
     this->classOf = cl; 
-    this->lock = (uintptr_t)mvm::Thread::get();
   }
 
   /// instanceOf - Is this object's class of type the given class?
@@ -172,22 +174,20 @@
   }
 
   /// acquire - Acquire the lock on this object.
-  void acquire();
+  void acquire() {
+    lock.acquire();
+  }
 
   /// release - Release the lock on this object
-  void release();
-
-  /// changeToFatlock - Change the lock of this object to a fat lock. The lock
-  /// may be in thin lock or in fat lock.
-  LockObj* changeToFatlock();
+  void release() {
+    lock.release();
+  }
 
-  /// overflowThinlock -Change the lock of this object to a fat lock because
-  /// we have reached 0xFF locks.
-  void overflowThinlock();
-  
-  /// owner - Returns true if the curren thread is the owner of this object's
+  /// owner - Returns true if the current thread is the owner of this object's
   /// lock.
-  bool owner();
+  bool owner() {
+    return lock.owner();
+  }
 
 #ifdef SIGSEGV_THROW_NULL
   #define verifyNull(obj) {}
@@ -200,22 +200,9 @@
   virtual void TRACER;
 
 
-#if (__WORDSIZE == 64)
-  static const uint64_t FatMask = 0x8000000000000000;
-#else
-  static const uint64_t FatMask = 0x80000000;
-#endif
-
-  static const uint64_t ThinMask = 0x7FFFFF00;
-  static const uint64_t ReservedMask = 0X7FFFFFFF;
-  static const uint64_t ThinCountMask = 0xFF;
-
+  /// lockObj - Get the LockObj if the lock is a fat lock.
   LockObj* lockObj() {
-    if (lock & FatMask) {
-      return (LockObj*)(lock << 1);
-    } else {
-      return 0;
-    }
+    return lock.getFatLock();
   }
 };
 

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Wed Nov 26 15:46:39 2008
@@ -363,7 +363,6 @@
   obj->acquire();
 }
 
-
 extern "C" void JavaObjectRelease(JavaObject* obj) {
   obj->release();
 }
@@ -406,7 +405,7 @@
 }
 
 extern "C" void overflowThinLock(JavaObject* obj) {
-  obj->overflowThinlock();
+  obj->overflowThinLock();
 }
 
 #ifdef SERVICE

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h Wed Nov 26 15:46:39 2008
@@ -97,7 +97,7 @@
     
   LLVMMethodInfo(JavaMethod* M); 
 
-  static JavaMethod* get(const Function* F);
+  static JavaMethod* get(const llvm::Function* F);
 };
 
 class LLVMFieldInfo : public mvm::JITInfo {

Modified: vmkit/trunk/lib/Mvm/Runtime/JIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Runtime/JIT.cpp?rev=60118&r1=60117&r2=60118&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/Runtime/JIT.cpp (original)
+++ vmkit/trunk/lib/Mvm/Runtime/JIT.cpp Wed Nov 26 15:46:39 2008
@@ -25,6 +25,7 @@
 #include "mvm/JIT.h"
 #include "mvm/MvmMemoryManager.h"
 #include "mvm/Object.h"
+#include "mvm/Threads/Locks.h"
 #include "mvm/Threads/Thread.h"
 
 using namespace mvm;
@@ -140,8 +141,8 @@
   constantDoubleMinusZero = ConstantFP::get(Type::DoubleTy, -0.0);
   constantFloatMinusZero = ConstantFP::get(Type::FloatTy, -0.0f);
   constantThreadIDMask = ConstantInt::get(pointerSizeType, mvm::Thread::IDMask);
-  constantLockedMask = ConstantInt::get(pointerSizeType, 0x7FFFFF00);
-  constantThreadFreeMask = ConstantInt::get(pointerSizeType, 0x7FFFFFFF);
+  constantLockedMask = ConstantInt::get(pointerSizeType, ThinMask);
+  constantThreadFreeMask = ConstantInt::get(pointerSizeType, ReservedMask);
   constantPtrOne = ConstantInt::get(pointerSizeType, 1);
 
   constantPtrNull = Constant::getNullValue(ptrType); 

Modified: vmkit/trunk/lib/N3/VMCore/VMClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VMClass.cpp?rev=60118&r1=60117&r2=60118&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMClass.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VMClass.cpp Wed Nov 26 15:46:39 2008
@@ -303,7 +303,7 @@
 }
 
 void VMClass::unifyTypes(VMGenericClass* genClass, VMGenericMethod* genMethod) {
-  PATypeHolder PA = naturalType;
+  llvm::PATypeHolder PA = naturalType;
   for (std::vector<VMField*>::iterator i = virtualFields.begin(), 
        e = virtualFields.end(); i!= e; ++i) {
     (*i)->signature->resolveVirtual(genClass, genMethod);
@@ -323,7 +323,7 @@
         virtualFields[0]->offset = mvm::MvmModule::constantZero;
         ResultTy = virtualFields[0]->signature->naturalType;
       } else if (size == 0) {
-        ResultTy = Type::VoidTy;
+        ResultTy = llvm::Type::VoidTy;
       } else {
         std::vector<const llvm::Type*> Elts;
         uint32 offset = -1;
@@ -336,7 +336,7 @@
         ResultTy = llvm::StructType::get(Elts);
       }
     } else if (super == MSCorlib::pEnum) {
-      ResultTy = Type::Int32Ty; // TODO find max
+      ResultTy = llvm::Type::Int32Ty; // TODO find max
     } else {
       std::vector<const llvm::Type*> Elts;
       Elts.push_back(super->naturalType->getContainedType(0));
@@ -355,9 +355,10 @@
   
   
   if (naturalType->isAbstract()) {
-    const OpaqueType *OldTy = dyn_cast_or_null<OpaqueType>(this->naturalType);
+    const llvm::OpaqueType *OldTy = 
+      llvm::dyn_cast_or_null<llvm::OpaqueType>(this->naturalType);
     if (OldTy) {
-      const_cast<OpaqueType*>(OldTy)->refineAbstractTypeTo(ResultTy);
+      const_cast<llvm::OpaqueType*>(OldTy)->refineAbstractTypeTo(ResultTy);
     }
     naturalType = ResultTy;
   }

Modified: vmkit/trunk/tools/vmkit/Launcher.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmkit/Launcher.cpp?rev=60118&r1=60117&r2=60118&view=diff

==============================================================================
--- vmkit/trunk/tools/vmkit/Launcher.cpp (original)
+++ vmkit/trunk/tools/vmkit/Launcher.cpp Wed Nov 26 15:46:39 2008
@@ -24,6 +24,8 @@
 
 #include "CommandLine.h"
 
+using namespace llvm;
+
 enum VMType {
   Interactive, RunJava, RunNet
 };





More information about the vmkit-commits mailing list