Changes in directory llvm/include/llvm/ExecutionEngine:
ExecutionEngine.h updated: 1.37 -> 1.38 --- Log message: Move methods out of line so that MutexGuard.h isn't required in the header. --- Diffs of the changes: (+18 -48) ExecutionEngine.h | 66 ++++++++++++++---------------------------------------- 1 files changed, 18 insertions(+), 48 deletions(-) Index: llvm/include/llvm/ExecutionEngine/ExecutionEngine.h diff -u llvm/include/llvm/ExecutionEngine/ExecutionEngine.h:1.37 llvm/include/llvm/ExecutionEngine/ExecutionEngine.h:1.38 --- llvm/include/llvm/ExecutionEngine/ExecutionEngine.h:1.37 Tue May 2 20:29:56 2006 +++ llvm/include/llvm/ExecutionEngine/ExecutionEngine.h Mon May 8 17:00:26 2006 @@ -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 ModuleProvider; class TargetData; class Type; +class MutexGuard; class ExecutionEngineState { private: @@ -114,58 +115,27 @@ 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. _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits