diff options
author | Chris Lattner <sabre@nondot.org> | 2006-05-08 22:00:26 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-05-08 22:00:26 +0000 |
commit | 683d1bb712d8f8fc2d727a160da029c9cf40a423 (patch) | |
tree | c6dcb9941e7b7a43c85ea0f151b64e10c70e71ea /include/llvm/ExecutionEngine/ExecutionEngine.h | |
parent | 9fd868ae0a390f955c67b67e2e8e61cf7533e996 (diff) |
Move methods out of line so that MutexGuard.h isn't required in the header.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28178 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/ExecutionEngine/ExecutionEngine.h')
-rw-r--r-- | include/llvm/ExecutionEngine/ExecutionEngine.h | 66 |
1 files changed, 18 insertions, 48 deletions
diff --git a/include/llvm/ExecutionEngine/ExecutionEngine.h b/include/llvm/ExecutionEngine/ExecutionEngine.h index 0974915154..2a117f53be 100644 --- a/include/llvm/ExecutionEngine/ExecutionEngine.h +++ b/include/llvm/ExecutionEngine/ExecutionEngine.h @@ -19,7 +19,7 @@ #include <map> #include <cassert> #include <string> -#include "llvm/Support/MutexGuard.h" +#include "llvm/System/Mutex.h" namespace llvm { @@ -32,6 +32,7 @@ class Module; class ModuleProvider; class TargetData; class Type; +class MutexGuard; class ExecutionEngineState { private: @@ -114,58 +115,27 @@ public: const char * const * envp); - void addGlobalMapping(const GlobalValue *GV, void *Addr) { - MutexGuard locked(lock); - - void *&CurVal = state.getGlobalAddressMap(locked)[GV]; - assert((CurVal == 0 || Addr == 0) && "GlobalMapping already established!"); - CurVal = Addr; - - // If we are using the reverse mapping, add it too - if (!state.getGlobalAddressReverseMap(locked).empty()) { - const GlobalValue *&V = state.getGlobalAddressReverseMap(locked)[Addr]; - assert((V == 0 || GV == 0) && "GlobalMapping already established!"); - V = GV; - } - } - + /// addGlobalMapping - Tell the execution engine that the specified global is + /// at the specified location. This is used internally as functions are JIT'd + /// and as global variables are laid out in memory. It can and should also be + /// used by clients of the EE that want to have an LLVM global overlay + /// existing data in memory. + void addGlobalMapping(const GlobalValue *GV, void *Addr); + /// clearAllGlobalMappings - Clear all global mappings and start over again /// use in dynamic compilation scenarios when you want to move globals - void clearAllGlobalMappings() { - MutexGuard locked(lock); - - state.getGlobalAddressMap(locked).clear(); - state.getGlobalAddressReverseMap(locked).clear(); - } - + void clearAllGlobalMappings(); + /// updateGlobalMapping - Replace an existing mapping for GV with a new - /// address. This updates both maps as required. - void updateGlobalMapping(const GlobalValue *GV, void *Addr) { - MutexGuard locked(lock); - - void *&CurVal = state.getGlobalAddressMap(locked)[GV]; - if (CurVal && !state.getGlobalAddressReverseMap(locked).empty()) - state.getGlobalAddressReverseMap(locked).erase(CurVal); - CurVal = Addr; - - // If we are using the reverse mapping, add it too - if (!state.getGlobalAddressReverseMap(locked).empty()) { - const GlobalValue *&V = state.getGlobalAddressReverseMap(locked)[Addr]; - assert((V == 0 || GV == 0) && "GlobalMapping already established!"); - V = GV; - } - } - + /// address. This updates both maps as required. If "Addr" is null, the + /// entry for the global is removed from the mappings. + void updateGlobalMapping(const GlobalValue *GV, void *Addr); + /// getPointerToGlobalIfAvailable - This returns the address of the specified - /// global value if it is available, otherwise it returns null. + /// global value if it is has already been codegen'd, otherwise it returns + /// null. /// - void *getPointerToGlobalIfAvailable(const GlobalValue *GV) { - MutexGuard locked(lock); - - std::map<const GlobalValue*, void*>::iterator I = - state.getGlobalAddressMap(locked).find(GV); - return I != state.getGlobalAddressMap(locked).end() ? I->second : 0; - } + void *getPointerToGlobalIfAvailable(const GlobalValue *GV); /// getPointerToGlobal - This returns the address of the specified global /// value. This may involve code generation if it's a function. |