Cleanups to implement PR135
authorChris Lattner <sabre@nondot.org>
Sat, 20 Dec 2003 03:35:50 +0000 (03:35 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 20 Dec 2003 03:35:50 +0000 (03:35 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10548 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ExecutionEngine/ExecutionEngine.h

index 573e5f1d9ab5d55e76790ad7f45c76123740baf3..ba6a6e1cc06d60e0c91118ca013de7eecdf6d607 100644 (file)
@@ -35,11 +35,11 @@ class ExecutionEngine {
   Module &CurMod;
   const TargetData *TD;
 
-protected:
-  ModuleProvider *MP;
   // GlobalAddress - A mapping between LLVM global values and their actualized
   // version...
   std::map<const GlobalValue*, void *> GlobalAddress;
+protected:
+  ModuleProvider *MP;
 
   void setTargetData(const TargetData &td) {
     TD = &td;
@@ -63,7 +63,7 @@ public:
 
   void addGlobalMapping(const GlobalValue *GV, void *Addr) {
     void *&CurVal = GlobalAddress[GV];
-    assert(CurVal == 0 && "GlobalMapping already established!");
+    assert((CurVal == 0 || Addr == 0) && "GlobalMapping already established!");
     CurVal = Addr;
   }
 
@@ -106,13 +106,20 @@ public:
   ///
   virtual void *recompileAndRelinkFunction(Function *F) = 0;
 
+  /// getOrEmitGlobalVariable - Return the address of the specified global
+  /// variable, possibly emitting it to memory if needed.  This is used by the
+  /// Emitter.
+  virtual void *getOrEmitGlobalVariable(const GlobalVariable *GV) {
+    return getPointerToGlobal((GlobalValue*)GV);
+  }
+
 protected:
   void emitGlobals();
 
   // EmitGlobalVariable - This method emits the specified global variable to the
   // address specified in GlobalAddresses, or allocates new memory if it's not
   // already in the map.
-  void EmitGlobalVariable(GlobalVariable *GV);
+  void EmitGlobalVariable(const GlobalVariable *GV);
 
   GenericValue getConstantValue(const Constant *C);
   GenericValue LoadValueFromMemory(GenericValue *Ptr, const Type *Ty);