OSDN Git Service

Split the locking out of JIT::runJITOnFunction so that callers
authorDan Gohman <gohman@apple.com>
Fri, 6 Feb 2009 21:25:08 +0000 (21:25 +0000)
committerDan Gohman <gohman@apple.com>
Fri, 6 Feb 2009 21:25:08 +0000 (21:25 +0000)
that already hold the lock can call an entry point that doesn't
re-acquire the lock.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63965 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ExecutionEngine/JIT/JIT.cpp
lib/ExecutionEngine/JIT/JIT.h

index 9595099..008c590 100644 (file)
@@ -475,9 +475,12 @@ GenericValue JIT::runFunction(Function *F,
 /// GlobalAddress[F] with the address of F's machine code.
 ///
 void JIT::runJITOnFunction(Function *F) {
-  static bool isAlreadyCodeGenerating = false;
-
   MutexGuard locked(lock);
+  runJITOnFunctionUnlocked(F, locked);
+}
+
+void JIT::runJITOnFunctionUnlocked(Function *F, const MutexGuard &locked) {
+  static bool isAlreadyCodeGenerating = false;
   assert(!isAlreadyCodeGenerating && "Error: Recursive compilation detected!");
 
   // JIT the function
@@ -537,7 +540,7 @@ void *JIT::getPointerToFunction(Function *F) {
     return Addr;
   }
 
-  runJITOnFunction(F);
+  runJITOnFunctionUnlocked(F, locked);
 
   void *Addr = getPointerToGlobalIfAvailable(F);
   assert(Addr && "Code generation didn't add function to GlobalAddress table!");
index 7c085e3..395e049 100644 (file)
@@ -147,8 +147,9 @@ public:
   
 private:
   static MachineCodeEmitter *createEmitter(JIT &J, JITMemoryManager *JMM);
-  void runJITOnFunction (Function *F);
-  
+  void runJITOnFunction(Function *F);
+  void runJITOnFunctionUnlocked(Function *F, const MutexGuard &locked);
+
 protected:
 
   /// getMemoryforGV - Allocate memory for a global variable.