From 21afcda54479602c2936946731a3f1ee8e5d2322 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Fri, 6 Feb 2009 21:25:08 +0000 Subject: [PATCH] Split the locking out of JIT::runJITOnFunction so that callers 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 | 9 ++++++--- lib/ExecutionEngine/JIT/JIT.h | 5 +++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/ExecutionEngine/JIT/JIT.cpp b/lib/ExecutionEngine/JIT/JIT.cpp index 9595099c3c0..008c5907d83 100644 --- a/lib/ExecutionEngine/JIT/JIT.cpp +++ b/lib/ExecutionEngine/JIT/JIT.cpp @@ -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!"); diff --git a/lib/ExecutionEngine/JIT/JIT.h b/lib/ExecutionEngine/JIT/JIT.h index 7c085e360e2..395e04926d2 100644 --- a/lib/ExecutionEngine/JIT/JIT.h +++ b/lib/ExecutionEngine/JIT/JIT.h @@ -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.