Make ExecutionEngine::updateGlobalMapping(GV, NULL) properly remove GV's old
[oota-llvm.git] / lib / ExecutionEngine / ExecutionEngine.cpp
1 //===-- ExecutionEngine.cpp - Common Implementation shared by EEs ---------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines the common interface used by the various execution engine
11 // subclasses.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #define DEBUG_TYPE "jit"
16 #include "llvm/Constants.h"
17 #include "llvm/DerivedTypes.h"
18 #include "llvm/Module.h"
19 #include "llvm/ModuleProvider.h"
20 #include "llvm/ADT/Statistic.h"
21 #include "llvm/Config/alloca.h"
22 #include "llvm/ExecutionEngine/ExecutionEngine.h"
23 #include "llvm/ExecutionEngine/GenericValue.h"
24 #include "llvm/Support/Debug.h"
25 #include "llvm/Support/ErrorHandling.h"
26 #include "llvm/Support/MutexGuard.h"
27 #include "llvm/Support/raw_ostream.h"
28 #include "llvm/System/DynamicLibrary.h"
29 #include "llvm/System/Host.h"
30 #include "llvm/Target/TargetData.h"
31 #include <cmath>
32 #include <cstring>
33 using namespace llvm;
34
35 STATISTIC(NumInitBytes, "Number of bytes of global vars initialized");
36 STATISTIC(NumGlobals  , "Number of global vars initialized");
37
38 ExecutionEngine *(*ExecutionEngine::JITCtor)(ModuleProvider *MP,
39                                              std::string *ErrorStr,
40                                              JITMemoryManager *JMM,
41                                              CodeGenOpt::Level OptLevel,
42                                              bool GVsWithCode) = 0;
43 ExecutionEngine *(*ExecutionEngine::InterpCtor)(ModuleProvider *MP,
44                                                 std::string *ErrorStr) = 0;
45 ExecutionEngine::EERegisterFn ExecutionEngine::ExceptionTableRegister = 0;
46
47
48 ExecutionEngine::ExecutionEngine(ModuleProvider *P) : LazyFunctionCreator(0) {
49   LazyCompilationDisabled = false;
50   GVCompilationDisabled   = false;
51   SymbolSearchingDisabled = false;
52   DlsymStubsEnabled       = false;
53   Modules.push_back(P);
54   assert(P && "ModuleProvider is null?");
55 }
56
57 ExecutionEngine::~ExecutionEngine() {
58   clearAllGlobalMappings();
59   for (unsigned i = 0, e = Modules.size(); i != e; ++i)
60     delete Modules[i];
61 }
62
63 char* ExecutionEngine::getMemoryForGV(const GlobalVariable* GV) {
64   const Type *ElTy = GV->getType()->getElementType();
65   size_t GVSize = (size_t)getTargetData()->getTypeAllocSize(ElTy);
66   return new char[GVSize];
67 }
68
69 /// removeModuleProvider - Remove a ModuleProvider from the list of modules.
70 /// Relases the Module from the ModuleProvider, materializing it in the
71 /// process, and returns the materialized Module.
72 Module* ExecutionEngine::removeModuleProvider(ModuleProvider *P, 
73                                               std::string *ErrInfo) {
74   for(SmallVector<ModuleProvider *, 1>::iterator I = Modules.begin(), 
75         E = Modules.end(); I != E; ++I) {
76     ModuleProvider *MP = *I;
77     if (MP == P) {
78       Modules.erase(I);
79       clearGlobalMappingsFromModule(MP->getModule());
80       return MP->releaseModule(ErrInfo);
81     }
82   }
83   return NULL;
84 }
85
86 /// deleteModuleProvider - Remove a ModuleProvider from the list of modules,
87 /// and deletes the ModuleProvider and owned Module.  Avoids materializing 
88 /// the underlying module.
89 void ExecutionEngine::deleteModuleProvider(ModuleProvider *P, 
90                                            std::string *ErrInfo) {
91   for(SmallVector<ModuleProvider *, 1>::iterator I = Modules.begin(), 
92       E = Modules.end(); I != E; ++I) {
93     ModuleProvider *MP = *I;
94     if (MP == P) {
95       Modules.erase(I);
96       clearGlobalMappingsFromModule(MP->getModule());
97       delete MP;
98       return;
99     }
100   }
101 }
102
103 /// FindFunctionNamed - Search all of the active modules to find the one that
104 /// defines FnName.  This is very slow operation and shouldn't be used for
105 /// general code.
106 Function *ExecutionEngine::FindFunctionNamed(const char *FnName) {
107   for (unsigned i = 0, e = Modules.size(); i != e; ++i) {
108     if (Function *F = Modules[i]->getModule()->getFunction(FnName))
109       return F;
110   }
111   return 0;
112 }
113
114
115 /// addGlobalMapping - Tell the execution engine that the specified global is
116 /// at the specified location.  This is used internally as functions are JIT'd
117 /// and as global variables are laid out in memory.  It can and should also be
118 /// used by clients of the EE that want to have an LLVM global overlay
119 /// existing data in memory.
120 void ExecutionEngine::addGlobalMapping(const GlobalValue *GV, void *Addr) {
121   MutexGuard locked(lock);
122
123   DEBUG(errs() << "JIT: Map \'" << GV->getName() 
124         << "\' to [" << Addr << "]\n";);
125   void *&CurVal = state.getGlobalAddressMap(locked)[GV];
126   assert((CurVal == 0 || Addr == 0) && "GlobalMapping already established!");
127   CurVal = Addr;
128   
129   // If we are using the reverse mapping, add it too
130   if (!state.getGlobalAddressReverseMap(locked).empty()) {
131     const GlobalValue *&V = state.getGlobalAddressReverseMap(locked)[Addr];
132     assert((V == 0 || GV == 0) && "GlobalMapping already established!");
133     V = GV;
134   }
135 }
136
137 /// clearAllGlobalMappings - Clear all global mappings and start over again
138 /// use in dynamic compilation scenarios when you want to move globals
139 void ExecutionEngine::clearAllGlobalMappings() {
140   MutexGuard locked(lock);
141   
142   state.getGlobalAddressMap(locked).clear();
143   state.getGlobalAddressReverseMap(locked).clear();
144 }
145
146 /// clearGlobalMappingsFromModule - Clear all global mappings that came from a
147 /// particular module, because it has been removed from the JIT.
148 void ExecutionEngine::clearGlobalMappingsFromModule(Module *M) {
149   MutexGuard locked(lock);
150   
151   for (Module::iterator FI = M->begin(), FE = M->end(); FI != FE; ++FI) {
152     state.getGlobalAddressMap(locked).erase(FI);
153     state.getGlobalAddressReverseMap(locked).erase(FI);
154   }
155   for (Module::global_iterator GI = M->global_begin(), GE = M->global_end(); 
156        GI != GE; ++GI) {
157     state.getGlobalAddressMap(locked).erase(GI);
158     state.getGlobalAddressReverseMap(locked).erase(GI);
159   }
160 }
161
162 /// updateGlobalMapping - Replace an existing mapping for GV with a new
163 /// address.  This updates both maps as required.  If "Addr" is null, the
164 /// entry for the global is removed from the mappings.
165 void *ExecutionEngine::updateGlobalMapping(const GlobalValue *GV, void *Addr) {
166   MutexGuard locked(lock);
167
168   std::map<const GlobalValue*, void *> &Map = state.getGlobalAddressMap(locked);
169
170   // Deleting from the mapping?
171   if (Addr == 0) {
172     std::map<const GlobalValue*, void *>::iterator I = Map.find(GV);
173     void *OldVal;
174     if (I == Map.end())
175       OldVal = 0;
176     else {
177       OldVal = I->second;
178       Map.erase(I); 
179     }
180     
181     if (!state.getGlobalAddressReverseMap(locked).empty())
182       state.getGlobalAddressReverseMap(locked).erase(OldVal);
183     return OldVal;
184   }
185   
186   void *&CurVal = Map[GV];
187   void *OldVal = CurVal;
188
189   if (CurVal && !state.getGlobalAddressReverseMap(locked).empty())
190     state.getGlobalAddressReverseMap(locked).erase(CurVal);
191   CurVal = Addr;
192   
193   // If we are using the reverse mapping, add it too
194   if (!state.getGlobalAddressReverseMap(locked).empty()) {
195     const GlobalValue *&V = state.getGlobalAddressReverseMap(locked)[Addr];
196     assert((V == 0 || GV == 0) && "GlobalMapping already established!");
197     V = GV;
198   }
199   return OldVal;
200 }
201
202 /// getPointerToGlobalIfAvailable - This returns the address of the specified
203 /// global value if it is has already been codegen'd, otherwise it returns null.
204 ///
205 void *ExecutionEngine::getPointerToGlobalIfAvailable(const GlobalValue *GV) {
206   MutexGuard locked(lock);
207   
208   std::map<const GlobalValue*, void*>::iterator I =
209   state.getGlobalAddressMap(locked).find(GV);
210   return I != state.getGlobalAddressMap(locked).end() ? I->second : 0;
211 }
212
213 /// getGlobalValueAtAddress - Return the LLVM global value object that starts
214 /// at the specified address.
215 ///
216 const GlobalValue *ExecutionEngine::getGlobalValueAtAddress(void *Addr) {
217   MutexGuard locked(lock);
218
219   // If we haven't computed the reverse mapping yet, do so first.
220   if (state.getGlobalAddressReverseMap(locked).empty()) {
221     for (std::map<const GlobalValue*, void *>::iterator
222          I = state.getGlobalAddressMap(locked).begin(),
223          E = state.getGlobalAddressMap(locked).end(); I != E; ++I)
224       state.getGlobalAddressReverseMap(locked).insert(std::make_pair(I->second,
225                                                                      I->first));
226   }
227
228   std::map<void *, const GlobalValue*>::iterator I =
229     state.getGlobalAddressReverseMap(locked).find(Addr);
230   return I != state.getGlobalAddressReverseMap(locked).end() ? I->second : 0;
231 }
232
233 // CreateArgv - Turn a vector of strings into a nice argv style array of
234 // pointers to null terminated strings.
235 //
236 static void *CreateArgv(ExecutionEngine *EE,
237                         const std::vector<std::string> &InputArgv) {
238   unsigned PtrSize = EE->getTargetData()->getPointerSize();
239   char *Result = new char[(InputArgv.size()+1)*PtrSize];
240
241   DOUT << "JIT: ARGV = " << (void*)Result << "\n";
242   const Type *SBytePtr = PointerType::getUnqual(Type::Int8Ty);
243
244   for (unsigned i = 0; i != InputArgv.size(); ++i) {
245     unsigned Size = InputArgv[i].size()+1;
246     char *Dest = new char[Size];
247     DOUT << "JIT: ARGV[" << i << "] = " << (void*)Dest << "\n";
248
249     std::copy(InputArgv[i].begin(), InputArgv[i].end(), Dest);
250     Dest[Size-1] = 0;
251
252     // Endian safe: Result[i] = (PointerTy)Dest;
253     EE->StoreValueToMemory(PTOGV(Dest), (GenericValue*)(Result+i*PtrSize),
254                            SBytePtr);
255   }
256
257   // Null terminate it
258   EE->StoreValueToMemory(PTOGV(0),
259                          (GenericValue*)(Result+InputArgv.size()*PtrSize),
260                          SBytePtr);
261   return Result;
262 }
263
264
265 /// runStaticConstructorsDestructors - This method is used to execute all of
266 /// the static constructors or destructors for a module, depending on the
267 /// value of isDtors.
268 void ExecutionEngine::runStaticConstructorsDestructors(Module *module, bool isDtors) {
269   const char *Name = isDtors ? "llvm.global_dtors" : "llvm.global_ctors";
270   
271   // Execute global ctors/dtors for each module in the program.
272   
273  GlobalVariable *GV = module->getNamedGlobal(Name);
274
275  // If this global has internal linkage, or if it has a use, then it must be
276  // an old-style (llvmgcc3) static ctor with __main linked in and in use.  If
277  // this is the case, don't execute any of the global ctors, __main will do
278  // it.
279  if (!GV || GV->isDeclaration() || GV->hasLocalLinkage()) return;
280  
281  // Should be an array of '{ int, void ()* }' structs.  The first value is
282  // the init priority, which we ignore.
283  ConstantArray *InitList = dyn_cast<ConstantArray>(GV->getInitializer());
284  if (!InitList) return;
285  for (unsigned i = 0, e = InitList->getNumOperands(); i != e; ++i)
286    if (ConstantStruct *CS = 
287        dyn_cast<ConstantStruct>(InitList->getOperand(i))) {
288      if (CS->getNumOperands() != 2) return; // Not array of 2-element structs.
289    
290      Constant *FP = CS->getOperand(1);
291      if (FP->isNullValue())
292        break;  // Found a null terminator, exit.
293    
294      if (ConstantExpr *CE = dyn_cast<ConstantExpr>(FP))
295        if (CE->isCast())
296          FP = CE->getOperand(0);
297      if (Function *F = dyn_cast<Function>(FP)) {
298        // Execute the ctor/dtor function!
299        runFunction(F, std::vector<GenericValue>());
300      }
301    }
302 }
303
304 /// runStaticConstructorsDestructors - This method is used to execute all of
305 /// the static constructors or destructors for a program, depending on the
306 /// value of isDtors.
307 void ExecutionEngine::runStaticConstructorsDestructors(bool isDtors) {
308   // Execute global ctors/dtors for each module in the program.
309   for (unsigned m = 0, e = Modules.size(); m != e; ++m)
310     runStaticConstructorsDestructors(Modules[m]->getModule(), isDtors);
311 }
312
313 #ifndef NDEBUG
314 /// isTargetNullPtr - Return whether the target pointer stored at Loc is null.
315 static bool isTargetNullPtr(ExecutionEngine *EE, void *Loc) {
316   unsigned PtrSize = EE->getTargetData()->getPointerSize();
317   for (unsigned i = 0; i < PtrSize; ++i)
318     if (*(i + (uint8_t*)Loc))
319       return false;
320   return true;
321 }
322 #endif
323
324 /// runFunctionAsMain - This is a helper function which wraps runFunction to
325 /// handle the common task of starting up main with the specified argc, argv,
326 /// and envp parameters.
327 int ExecutionEngine::runFunctionAsMain(Function *Fn,
328                                        const std::vector<std::string> &argv,
329                                        const char * const * envp) {
330   std::vector<GenericValue> GVArgs;
331   GenericValue GVArgc;
332   GVArgc.IntVal = APInt(32, argv.size());
333
334   // Check main() type
335   unsigned NumArgs = Fn->getFunctionType()->getNumParams();
336   const FunctionType *FTy = Fn->getFunctionType();
337   const Type* PPInt8Ty = 
338     PointerType::getUnqual(PointerType::getUnqual(Type::Int8Ty));
339   switch (NumArgs) {
340   case 3:
341    if (FTy->getParamType(2) != PPInt8Ty) {
342      llvm_report_error("Invalid type for third argument of main() supplied");
343    }
344    // FALLS THROUGH
345   case 2:
346    if (FTy->getParamType(1) != PPInt8Ty) {
347      llvm_report_error("Invalid type for second argument of main() supplied");
348    }
349    // FALLS THROUGH
350   case 1:
351    if (FTy->getParamType(0) != Type::Int32Ty) {
352      llvm_report_error("Invalid type for first argument of main() supplied");
353    }
354    // FALLS THROUGH
355   case 0:
356    if (!isa<IntegerType>(FTy->getReturnType()) &&
357        FTy->getReturnType() != Type::VoidTy) {
358      llvm_report_error("Invalid return type of main() supplied");
359    }
360    break;
361   default:
362    llvm_report_error("Invalid number of arguments of main() supplied");
363   }
364   
365   if (NumArgs) {
366     GVArgs.push_back(GVArgc); // Arg #0 = argc.
367     if (NumArgs > 1) {
368       GVArgs.push_back(PTOGV(CreateArgv(this, argv))); // Arg #1 = argv.
369       assert(!isTargetNullPtr(this, GVTOP(GVArgs[1])) &&
370              "argv[0] was null after CreateArgv");
371       if (NumArgs > 2) {
372         std::vector<std::string> EnvVars;
373         for (unsigned i = 0; envp[i]; ++i)
374           EnvVars.push_back(envp[i]);
375         GVArgs.push_back(PTOGV(CreateArgv(this, EnvVars))); // Arg #2 = envp.
376       }
377     }
378   }
379   return runFunction(Fn, GVArgs).IntVal.getZExtValue();
380 }
381
382 /// If possible, create a JIT, unless the caller specifically requests an
383 /// Interpreter or there's an error. If even an Interpreter cannot be created,
384 /// NULL is returned.
385 ///
386 ExecutionEngine *ExecutionEngine::create(ModuleProvider *MP,
387                                          bool ForceInterpreter,
388                                          std::string *ErrorStr,
389                                          CodeGenOpt::Level OptLevel,
390                                          bool GVsWithCode) {
391   return EngineBuilder(MP)
392       .setEngineKind(ForceInterpreter
393                      ? EngineKind::Interpreter
394                      : EngineKind::JIT)
395       .setErrorStr(ErrorStr)
396       .setOptLevel(OptLevel)
397       .setAllocateGVsWithCode(GVsWithCode)
398       .create();
399 }
400
401 ExecutionEngine *ExecutionEngine::create(Module *M) {
402   return EngineBuilder(M).create();
403 }
404
405 /// EngineBuilder - Overloaded constructor that automatically creates an
406 /// ExistingModuleProvider for an existing module.
407 EngineBuilder::EngineBuilder(Module *m) : MP(new ExistingModuleProvider(m)) {
408   InitEngine();
409 }
410
411 ExecutionEngine *EngineBuilder::create() {
412   // Make sure we can resolve symbols in the program as well. The zero arg
413   // to the function tells DynamicLibrary to load the program, not a library.
414   if (sys::DynamicLibrary::LoadLibraryPermanently(0, ErrorStr))
415     return 0;
416
417   // If the user specified a memory manager but didn't specify which engine to
418   // create, we assume they only want the JIT, and we fail if they only want
419   // the interpreter.
420   if (JMM) {
421     if (WhichEngine & EngineKind::JIT) {
422       WhichEngine = EngineKind::JIT;
423     } else {
424       *ErrorStr = "Cannot create an interpreter with a memory manager.";
425     }
426   }
427
428   ExecutionEngine *EE = 0;
429
430   // Unless the interpreter was explicitly selected or the JIT is not linked,
431   // try making a JIT.
432   if (WhichEngine & EngineKind::JIT && ExecutionEngine::JITCtor) {
433     EE = ExecutionEngine::JITCtor(MP, ErrorStr, JMM, OptLevel,
434                                   AllocateGVsWithCode);
435   }
436
437   // If we can't make a JIT and we didn't request one specifically, try making
438   // an interpreter instead.
439   if (WhichEngine & EngineKind::Interpreter && EE == 0 &&
440       ExecutionEngine::InterpCtor) {
441     EE = ExecutionEngine::InterpCtor(MP, ErrorStr);
442   }
443
444   return EE;
445 }
446
447 /// getPointerToGlobal - This returns the address of the specified global
448 /// value.  This may involve code generation if it's a function.
449 ///
450 void *ExecutionEngine::getPointerToGlobal(const GlobalValue *GV) {
451   if (Function *F = const_cast<Function*>(dyn_cast<Function>(GV)))
452     return getPointerToFunction(F);
453
454   MutexGuard locked(lock);
455   void *p = state.getGlobalAddressMap(locked)[GV];
456   if (p)
457     return p;
458
459   // Global variable might have been added since interpreter started.
460   if (GlobalVariable *GVar =
461           const_cast<GlobalVariable *>(dyn_cast<GlobalVariable>(GV)))
462     EmitGlobalVariable(GVar);
463   else
464     llvm_unreachable("Global hasn't had an address allocated yet!");
465   return state.getGlobalAddressMap(locked)[GV];
466 }
467
468 /// This function converts a Constant* into a GenericValue. The interesting 
469 /// part is if C is a ConstantExpr.
470 /// @brief Get a GenericValue for a Constant*
471 GenericValue ExecutionEngine::getConstantValue(const Constant *C) {
472   // If its undefined, return the garbage.
473   if (isa<UndefValue>(C)) 
474     return GenericValue();
475
476   // If the value is a ConstantExpr
477   if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) {
478     Constant *Op0 = CE->getOperand(0);
479     switch (CE->getOpcode()) {
480     case Instruction::GetElementPtr: {
481       // Compute the index 
482       GenericValue Result = getConstantValue(Op0);
483       SmallVector<Value*, 8> Indices(CE->op_begin()+1, CE->op_end());
484       uint64_t Offset =
485         TD->getIndexedOffset(Op0->getType(), &Indices[0], Indices.size());
486
487       char* tmp = (char*) Result.PointerVal;
488       Result = PTOGV(tmp + Offset);
489       return Result;
490     }
491     case Instruction::Trunc: {
492       GenericValue GV = getConstantValue(Op0);
493       uint32_t BitWidth = cast<IntegerType>(CE->getType())->getBitWidth();
494       GV.IntVal = GV.IntVal.trunc(BitWidth);
495       return GV;
496     }
497     case Instruction::ZExt: {
498       GenericValue GV = getConstantValue(Op0);
499       uint32_t BitWidth = cast<IntegerType>(CE->getType())->getBitWidth();
500       GV.IntVal = GV.IntVal.zext(BitWidth);
501       return GV;
502     }
503     case Instruction::SExt: {
504       GenericValue GV = getConstantValue(Op0);
505       uint32_t BitWidth = cast<IntegerType>(CE->getType())->getBitWidth();
506       GV.IntVal = GV.IntVal.sext(BitWidth);
507       return GV;
508     }
509     case Instruction::FPTrunc: {
510       // FIXME long double
511       GenericValue GV = getConstantValue(Op0);
512       GV.FloatVal = float(GV.DoubleVal);
513       return GV;
514     }
515     case Instruction::FPExt:{
516       // FIXME long double
517       GenericValue GV = getConstantValue(Op0);
518       GV.DoubleVal = double(GV.FloatVal);
519       return GV;
520     }
521     case Instruction::UIToFP: {
522       GenericValue GV = getConstantValue(Op0);
523       if (CE->getType() == Type::FloatTy)
524         GV.FloatVal = float(GV.IntVal.roundToDouble());
525       else if (CE->getType() == Type::DoubleTy)
526         GV.DoubleVal = GV.IntVal.roundToDouble();
527       else if (CE->getType() == Type::X86_FP80Ty) {
528         const uint64_t zero[] = {0, 0};
529         APFloat apf = APFloat(APInt(80, 2, zero));
530         (void)apf.convertFromAPInt(GV.IntVal, 
531                                    false,
532                                    APFloat::rmNearestTiesToEven);
533         GV.IntVal = apf.bitcastToAPInt();
534       }
535       return GV;
536     }
537     case Instruction::SIToFP: {
538       GenericValue GV = getConstantValue(Op0);
539       if (CE->getType() == Type::FloatTy)
540         GV.FloatVal = float(GV.IntVal.signedRoundToDouble());
541       else if (CE->getType() == Type::DoubleTy)
542         GV.DoubleVal = GV.IntVal.signedRoundToDouble();
543       else if (CE->getType() == Type::X86_FP80Ty) {
544         const uint64_t zero[] = { 0, 0};
545         APFloat apf = APFloat(APInt(80, 2, zero));
546         (void)apf.convertFromAPInt(GV.IntVal, 
547                                    true,
548                                    APFloat::rmNearestTiesToEven);
549         GV.IntVal = apf.bitcastToAPInt();
550       }
551       return GV;
552     }
553     case Instruction::FPToUI: // double->APInt conversion handles sign
554     case Instruction::FPToSI: {
555       GenericValue GV = getConstantValue(Op0);
556       uint32_t BitWidth = cast<IntegerType>(CE->getType())->getBitWidth();
557       if (Op0->getType() == Type::FloatTy)
558         GV.IntVal = APIntOps::RoundFloatToAPInt(GV.FloatVal, BitWidth);
559       else if (Op0->getType() == Type::DoubleTy)
560         GV.IntVal = APIntOps::RoundDoubleToAPInt(GV.DoubleVal, BitWidth);
561       else if (Op0->getType() == Type::X86_FP80Ty) {
562         APFloat apf = APFloat(GV.IntVal);
563         uint64_t v;
564         bool ignored;
565         (void)apf.convertToInteger(&v, BitWidth,
566                                    CE->getOpcode()==Instruction::FPToSI, 
567                                    APFloat::rmTowardZero, &ignored);
568         GV.IntVal = v; // endian?
569       }
570       return GV;
571     }
572     case Instruction::PtrToInt: {
573       GenericValue GV = getConstantValue(Op0);
574       uint32_t PtrWidth = TD->getPointerSizeInBits();
575       GV.IntVal = APInt(PtrWidth, uintptr_t(GV.PointerVal));
576       return GV;
577     }
578     case Instruction::IntToPtr: {
579       GenericValue GV = getConstantValue(Op0);
580       uint32_t PtrWidth = TD->getPointerSizeInBits();
581       if (PtrWidth != GV.IntVal.getBitWidth())
582         GV.IntVal = GV.IntVal.zextOrTrunc(PtrWidth);
583       assert(GV.IntVal.getBitWidth() <= 64 && "Bad pointer width");
584       GV.PointerVal = PointerTy(uintptr_t(GV.IntVal.getZExtValue()));
585       return GV;
586     }
587     case Instruction::BitCast: {
588       GenericValue GV = getConstantValue(Op0);
589       const Type* DestTy = CE->getType();
590       switch (Op0->getType()->getTypeID()) {
591         default: llvm_unreachable("Invalid bitcast operand");
592         case Type::IntegerTyID:
593           assert(DestTy->isFloatingPoint() && "invalid bitcast");
594           if (DestTy == Type::FloatTy)
595             GV.FloatVal = GV.IntVal.bitsToFloat();
596           else if (DestTy == Type::DoubleTy)
597             GV.DoubleVal = GV.IntVal.bitsToDouble();
598           break;
599         case Type::FloatTyID: 
600           assert(DestTy == Type::Int32Ty && "Invalid bitcast");
601           GV.IntVal.floatToBits(GV.FloatVal);
602           break;
603         case Type::DoubleTyID:
604           assert(DestTy == Type::Int64Ty && "Invalid bitcast");
605           GV.IntVal.doubleToBits(GV.DoubleVal);
606           break;
607         case Type::PointerTyID:
608           assert(isa<PointerType>(DestTy) && "Invalid bitcast");
609           break; // getConstantValue(Op0)  above already converted it
610       }
611       return GV;
612     }
613     case Instruction::Add:
614     case Instruction::FAdd:
615     case Instruction::Sub:
616     case Instruction::FSub:
617     case Instruction::Mul:
618     case Instruction::FMul:
619     case Instruction::UDiv:
620     case Instruction::SDiv:
621     case Instruction::URem:
622     case Instruction::SRem:
623     case Instruction::And:
624     case Instruction::Or:
625     case Instruction::Xor: {
626       GenericValue LHS = getConstantValue(Op0);
627       GenericValue RHS = getConstantValue(CE->getOperand(1));
628       GenericValue GV;
629       switch (CE->getOperand(0)->getType()->getTypeID()) {
630       default: llvm_unreachable("Bad add type!");
631       case Type::IntegerTyID:
632         switch (CE->getOpcode()) {
633           default: llvm_unreachable("Invalid integer opcode");
634           case Instruction::Add: GV.IntVal = LHS.IntVal + RHS.IntVal; break;
635           case Instruction::Sub: GV.IntVal = LHS.IntVal - RHS.IntVal; break;
636           case Instruction::Mul: GV.IntVal = LHS.IntVal * RHS.IntVal; break;
637           case Instruction::UDiv:GV.IntVal = LHS.IntVal.udiv(RHS.IntVal); break;
638           case Instruction::SDiv:GV.IntVal = LHS.IntVal.sdiv(RHS.IntVal); break;
639           case Instruction::URem:GV.IntVal = LHS.IntVal.urem(RHS.IntVal); break;
640           case Instruction::SRem:GV.IntVal = LHS.IntVal.srem(RHS.IntVal); break;
641           case Instruction::And: GV.IntVal = LHS.IntVal & RHS.IntVal; break;
642           case Instruction::Or:  GV.IntVal = LHS.IntVal | RHS.IntVal; break;
643           case Instruction::Xor: GV.IntVal = LHS.IntVal ^ RHS.IntVal; break;
644         }
645         break;
646       case Type::FloatTyID:
647         switch (CE->getOpcode()) {
648           default: llvm_unreachable("Invalid float opcode");
649           case Instruction::FAdd:
650             GV.FloatVal = LHS.FloatVal + RHS.FloatVal; break;
651           case Instruction::FSub:
652             GV.FloatVal = LHS.FloatVal - RHS.FloatVal; break;
653           case Instruction::FMul:
654             GV.FloatVal = LHS.FloatVal * RHS.FloatVal; break;
655           case Instruction::FDiv: 
656             GV.FloatVal = LHS.FloatVal / RHS.FloatVal; break;
657           case Instruction::FRem: 
658             GV.FloatVal = ::fmodf(LHS.FloatVal,RHS.FloatVal); break;
659         }
660         break;
661       case Type::DoubleTyID:
662         switch (CE->getOpcode()) {
663           default: llvm_unreachable("Invalid double opcode");
664           case Instruction::FAdd:
665             GV.DoubleVal = LHS.DoubleVal + RHS.DoubleVal; break;
666           case Instruction::FSub:
667             GV.DoubleVal = LHS.DoubleVal - RHS.DoubleVal; break;
668           case Instruction::FMul:
669             GV.DoubleVal = LHS.DoubleVal * RHS.DoubleVal; break;
670           case Instruction::FDiv: 
671             GV.DoubleVal = LHS.DoubleVal / RHS.DoubleVal; break;
672           case Instruction::FRem: 
673             GV.DoubleVal = ::fmod(LHS.DoubleVal,RHS.DoubleVal); break;
674         }
675         break;
676       case Type::X86_FP80TyID:
677       case Type::PPC_FP128TyID:
678       case Type::FP128TyID: {
679         APFloat apfLHS = APFloat(LHS.IntVal);
680         switch (CE->getOpcode()) {
681           default: llvm_unreachable("Invalid long double opcode");llvm_unreachable(0);
682           case Instruction::FAdd:
683             apfLHS.add(APFloat(RHS.IntVal), APFloat::rmNearestTiesToEven);
684             GV.IntVal = apfLHS.bitcastToAPInt();
685             break;
686           case Instruction::FSub:
687             apfLHS.subtract(APFloat(RHS.IntVal), APFloat::rmNearestTiesToEven);
688             GV.IntVal = apfLHS.bitcastToAPInt();
689             break;
690           case Instruction::FMul:
691             apfLHS.multiply(APFloat(RHS.IntVal), APFloat::rmNearestTiesToEven);
692             GV.IntVal = apfLHS.bitcastToAPInt();
693             break;
694           case Instruction::FDiv: 
695             apfLHS.divide(APFloat(RHS.IntVal), APFloat::rmNearestTiesToEven);
696             GV.IntVal = apfLHS.bitcastToAPInt();
697             break;
698           case Instruction::FRem: 
699             apfLHS.mod(APFloat(RHS.IntVal), APFloat::rmNearestTiesToEven);
700             GV.IntVal = apfLHS.bitcastToAPInt();
701             break;
702           }
703         }
704         break;
705       }
706       return GV;
707     }
708     default:
709       break;
710     }
711     std::string msg;
712     raw_string_ostream Msg(msg);
713     Msg << "ConstantExpr not handled: " << *CE;
714     llvm_report_error(Msg.str());
715   }
716
717   GenericValue Result;
718   switch (C->getType()->getTypeID()) {
719   case Type::FloatTyID: 
720     Result.FloatVal = cast<ConstantFP>(C)->getValueAPF().convertToFloat(); 
721     break;
722   case Type::DoubleTyID:
723     Result.DoubleVal = cast<ConstantFP>(C)->getValueAPF().convertToDouble();
724     break;
725   case Type::X86_FP80TyID:
726   case Type::FP128TyID:
727   case Type::PPC_FP128TyID:
728     Result.IntVal = cast <ConstantFP>(C)->getValueAPF().bitcastToAPInt();
729     break;
730   case Type::IntegerTyID:
731     Result.IntVal = cast<ConstantInt>(C)->getValue();
732     break;
733   case Type::PointerTyID:
734     if (isa<ConstantPointerNull>(C))
735       Result.PointerVal = 0;
736     else if (const Function *F = dyn_cast<Function>(C))
737       Result = PTOGV(getPointerToFunctionOrStub(const_cast<Function*>(F)));
738     else if (const GlobalVariable* GV = dyn_cast<GlobalVariable>(C))
739       Result = PTOGV(getOrEmitGlobalVariable(const_cast<GlobalVariable*>(GV)));
740     else
741       llvm_unreachable("Unknown constant pointer type!");
742     break;
743   default:
744     std::string msg;
745     raw_string_ostream Msg(msg);
746     Msg << "ERROR: Constant unimplemented for type: " << *C->getType();
747     llvm_report_error(Msg.str());
748   }
749   return Result;
750 }
751
752 /// StoreIntToMemory - Fills the StoreBytes bytes of memory starting from Dst
753 /// with the integer held in IntVal.
754 static void StoreIntToMemory(const APInt &IntVal, uint8_t *Dst,
755                              unsigned StoreBytes) {
756   assert((IntVal.getBitWidth()+7)/8 >= StoreBytes && "Integer too small!");
757   uint8_t *Src = (uint8_t *)IntVal.getRawData();
758
759   if (sys::isLittleEndianHost())
760     // Little-endian host - the source is ordered from LSB to MSB.  Order the
761     // destination from LSB to MSB: Do a straight copy.
762     memcpy(Dst, Src, StoreBytes);
763   else {
764     // Big-endian host - the source is an array of 64 bit words ordered from
765     // LSW to MSW.  Each word is ordered from MSB to LSB.  Order the destination
766     // from MSB to LSB: Reverse the word order, but not the bytes in a word.
767     while (StoreBytes > sizeof(uint64_t)) {
768       StoreBytes -= sizeof(uint64_t);
769       // May not be aligned so use memcpy.
770       memcpy(Dst + StoreBytes, Src, sizeof(uint64_t));
771       Src += sizeof(uint64_t);
772     }
773
774     memcpy(Dst, Src + sizeof(uint64_t) - StoreBytes, StoreBytes);
775   }
776 }
777
778 /// StoreValueToMemory - Stores the data in Val of type Ty at address Ptr.  Ptr
779 /// is the address of the memory at which to store Val, cast to GenericValue *.
780 /// It is not a pointer to a GenericValue containing the address at which to
781 /// store Val.
782 void ExecutionEngine::StoreValueToMemory(const GenericValue &Val,
783                                          GenericValue *Ptr, const Type *Ty) {
784   const unsigned StoreBytes = getTargetData()->getTypeStoreSize(Ty);
785
786   switch (Ty->getTypeID()) {
787   case Type::IntegerTyID:
788     StoreIntToMemory(Val.IntVal, (uint8_t*)Ptr, StoreBytes);
789     break;
790   case Type::FloatTyID:
791     *((float*)Ptr) = Val.FloatVal;
792     break;
793   case Type::DoubleTyID:
794     *((double*)Ptr) = Val.DoubleVal;
795     break;
796   case Type::X86_FP80TyID:
797     memcpy(Ptr, Val.IntVal.getRawData(), 10);
798     break;
799   case Type::PointerTyID:
800     // Ensure 64 bit target pointers are fully initialized on 32 bit hosts.
801     if (StoreBytes != sizeof(PointerTy))
802       memset(Ptr, 0, StoreBytes);
803
804     *((PointerTy*)Ptr) = Val.PointerVal;
805     break;
806   default:
807     cerr << "Cannot store value of type " << *Ty << "!\n";
808   }
809
810   if (sys::isLittleEndianHost() != getTargetData()->isLittleEndian())
811     // Host and target are different endian - reverse the stored bytes.
812     std::reverse((uint8_t*)Ptr, StoreBytes + (uint8_t*)Ptr);
813 }
814
815 /// LoadIntFromMemory - Loads the integer stored in the LoadBytes bytes starting
816 /// from Src into IntVal, which is assumed to be wide enough and to hold zero.
817 static void LoadIntFromMemory(APInt &IntVal, uint8_t *Src, unsigned LoadBytes) {
818   assert((IntVal.getBitWidth()+7)/8 >= LoadBytes && "Integer too small!");
819   uint8_t *Dst = (uint8_t *)IntVal.getRawData();
820
821   if (sys::isLittleEndianHost())
822     // Little-endian host - the destination must be ordered from LSB to MSB.
823     // The source is ordered from LSB to MSB: Do a straight copy.
824     memcpy(Dst, Src, LoadBytes);
825   else {
826     // Big-endian - the destination is an array of 64 bit words ordered from
827     // LSW to MSW.  Each word must be ordered from MSB to LSB.  The source is
828     // ordered from MSB to LSB: Reverse the word order, but not the bytes in
829     // a word.
830     while (LoadBytes > sizeof(uint64_t)) {
831       LoadBytes -= sizeof(uint64_t);
832       // May not be aligned so use memcpy.
833       memcpy(Dst, Src + LoadBytes, sizeof(uint64_t));
834       Dst += sizeof(uint64_t);
835     }
836
837     memcpy(Dst + sizeof(uint64_t) - LoadBytes, Src, LoadBytes);
838   }
839 }
840
841 /// FIXME: document
842 ///
843 void ExecutionEngine::LoadValueFromMemory(GenericValue &Result,
844                                           GenericValue *Ptr,
845                                           const Type *Ty) {
846   const unsigned LoadBytes = getTargetData()->getTypeStoreSize(Ty);
847
848   if (sys::isLittleEndianHost() != getTargetData()->isLittleEndian()) {
849     // Host and target are different endian - reverse copy the stored
850     // bytes into a buffer, and load from that.
851     uint8_t *Src = (uint8_t*)Ptr;
852     uint8_t *Buf = (uint8_t*)alloca(LoadBytes);
853     std::reverse_copy(Src, Src + LoadBytes, Buf);
854     Ptr = (GenericValue*)Buf;
855   }
856
857   switch (Ty->getTypeID()) {
858   case Type::IntegerTyID:
859     // An APInt with all words initially zero.
860     Result.IntVal = APInt(cast<IntegerType>(Ty)->getBitWidth(), 0);
861     LoadIntFromMemory(Result.IntVal, (uint8_t*)Ptr, LoadBytes);
862     break;
863   case Type::FloatTyID:
864     Result.FloatVal = *((float*)Ptr);
865     break;
866   case Type::DoubleTyID:
867     Result.DoubleVal = *((double*)Ptr);
868     break;
869   case Type::PointerTyID:
870     Result.PointerVal = *((PointerTy*)Ptr);
871     break;
872   case Type::X86_FP80TyID: {
873     // This is endian dependent, but it will only work on x86 anyway.
874     // FIXME: Will not trap if loading a signaling NaN.
875     uint64_t y[2];
876     memcpy(y, Ptr, 10);
877     Result.IntVal = APInt(80, 2, y);
878     break;
879   }
880   default:
881     std::string msg;
882     raw_string_ostream Msg(msg);
883     Msg << "Cannot load value of type " << *Ty << "!";
884     llvm_report_error(Msg.str());
885   }
886 }
887
888 // InitializeMemory - Recursive function to apply a Constant value into the
889 // specified memory location...
890 //
891 void ExecutionEngine::InitializeMemory(const Constant *Init, void *Addr) {
892   DOUT << "JIT: Initializing " << Addr << " ";
893   DEBUG(Init->dump());
894   if (isa<UndefValue>(Init)) {
895     return;
896   } else if (const ConstantVector *CP = dyn_cast<ConstantVector>(Init)) {
897     unsigned ElementSize =
898       getTargetData()->getTypeAllocSize(CP->getType()->getElementType());
899     for (unsigned i = 0, e = CP->getNumOperands(); i != e; ++i)
900       InitializeMemory(CP->getOperand(i), (char*)Addr+i*ElementSize);
901     return;
902   } else if (isa<ConstantAggregateZero>(Init)) {
903     memset(Addr, 0, (size_t)getTargetData()->getTypeAllocSize(Init->getType()));
904     return;
905   } else if (const ConstantArray *CPA = dyn_cast<ConstantArray>(Init)) {
906     unsigned ElementSize =
907       getTargetData()->getTypeAllocSize(CPA->getType()->getElementType());
908     for (unsigned i = 0, e = CPA->getNumOperands(); i != e; ++i)
909       InitializeMemory(CPA->getOperand(i), (char*)Addr+i*ElementSize);
910     return;
911   } else if (const ConstantStruct *CPS = dyn_cast<ConstantStruct>(Init)) {
912     const StructLayout *SL =
913       getTargetData()->getStructLayout(cast<StructType>(CPS->getType()));
914     for (unsigned i = 0, e = CPS->getNumOperands(); i != e; ++i)
915       InitializeMemory(CPS->getOperand(i), (char*)Addr+SL->getElementOffset(i));
916     return;
917   } else if (Init->getType()->isFirstClassType()) {
918     GenericValue Val = getConstantValue(Init);
919     StoreValueToMemory(Val, (GenericValue*)Addr, Init->getType());
920     return;
921   }
922
923   cerr << "Bad Type: " << *Init->getType() << "\n";
924   llvm_unreachable("Unknown constant type to initialize memory with!");
925 }
926
927 /// EmitGlobals - Emit all of the global variables to memory, storing their
928 /// addresses into GlobalAddress.  This must make sure to copy the contents of
929 /// their initializers into the memory.
930 ///
931 void ExecutionEngine::emitGlobals() {
932
933   // Loop over all of the global variables in the program, allocating the memory
934   // to hold them.  If there is more than one module, do a prepass over globals
935   // to figure out how the different modules should link together.
936   //
937   std::map<std::pair<std::string, const Type*>,
938            const GlobalValue*> LinkedGlobalsMap;
939
940   if (Modules.size() != 1) {
941     for (unsigned m = 0, e = Modules.size(); m != e; ++m) {
942       Module &M = *Modules[m]->getModule();
943       for (Module::const_global_iterator I = M.global_begin(),
944            E = M.global_end(); I != E; ++I) {
945         const GlobalValue *GV = I;
946         if (GV->hasLocalLinkage() || GV->isDeclaration() ||
947             GV->hasAppendingLinkage() || !GV->hasName())
948           continue;// Ignore external globals and globals with internal linkage.
949           
950         const GlobalValue *&GVEntry = 
951           LinkedGlobalsMap[std::make_pair(GV->getName(), GV->getType())];
952
953         // If this is the first time we've seen this global, it is the canonical
954         // version.
955         if (!GVEntry) {
956           GVEntry = GV;
957           continue;
958         }
959         
960         // If the existing global is strong, never replace it.
961         if (GVEntry->hasExternalLinkage() ||
962             GVEntry->hasDLLImportLinkage() ||
963             GVEntry->hasDLLExportLinkage())
964           continue;
965         
966         // Otherwise, we know it's linkonce/weak, replace it if this is a strong
967         // symbol.  FIXME is this right for common?
968         if (GV->hasExternalLinkage() || GVEntry->hasExternalWeakLinkage())
969           GVEntry = GV;
970       }
971     }
972   }
973   
974   std::vector<const GlobalValue*> NonCanonicalGlobals;
975   for (unsigned m = 0, e = Modules.size(); m != e; ++m) {
976     Module &M = *Modules[m]->getModule();
977     for (Module::const_global_iterator I = M.global_begin(), E = M.global_end();
978          I != E; ++I) {
979       // In the multi-module case, see what this global maps to.
980       if (!LinkedGlobalsMap.empty()) {
981         if (const GlobalValue *GVEntry = 
982               LinkedGlobalsMap[std::make_pair(I->getName(), I->getType())]) {
983           // If something else is the canonical global, ignore this one.
984           if (GVEntry != &*I) {
985             NonCanonicalGlobals.push_back(I);
986             continue;
987           }
988         }
989       }
990       
991       if (!I->isDeclaration()) {
992         addGlobalMapping(I, getMemoryForGV(I));
993       } else {
994         // External variable reference. Try to use the dynamic loader to
995         // get a pointer to it.
996         if (void *SymAddr =
997             sys::DynamicLibrary::SearchForAddressOfSymbol(I->getName()))
998           addGlobalMapping(I, SymAddr);
999         else {
1000           llvm_report_error("Could not resolve external global address: "
1001                             +I->getName());
1002         }
1003       }
1004     }
1005     
1006     // If there are multiple modules, map the non-canonical globals to their
1007     // canonical location.
1008     if (!NonCanonicalGlobals.empty()) {
1009       for (unsigned i = 0, e = NonCanonicalGlobals.size(); i != e; ++i) {
1010         const GlobalValue *GV = NonCanonicalGlobals[i];
1011         const GlobalValue *CGV =
1012           LinkedGlobalsMap[std::make_pair(GV->getName(), GV->getType())];
1013         void *Ptr = getPointerToGlobalIfAvailable(CGV);
1014         assert(Ptr && "Canonical global wasn't codegen'd!");
1015         addGlobalMapping(GV, Ptr);
1016       }
1017     }
1018     
1019     // Now that all of the globals are set up in memory, loop through them all 
1020     // and initialize their contents.
1021     for (Module::const_global_iterator I = M.global_begin(), E = M.global_end();
1022          I != E; ++I) {
1023       if (!I->isDeclaration()) {
1024         if (!LinkedGlobalsMap.empty()) {
1025           if (const GlobalValue *GVEntry = 
1026                 LinkedGlobalsMap[std::make_pair(I->getName(), I->getType())])
1027             if (GVEntry != &*I)  // Not the canonical variable.
1028               continue;
1029         }
1030         EmitGlobalVariable(I);
1031       }
1032     }
1033   }
1034 }
1035
1036 // EmitGlobalVariable - This method emits the specified global variable to the
1037 // address specified in GlobalAddresses, or allocates new memory if it's not
1038 // already in the map.
1039 void ExecutionEngine::EmitGlobalVariable(const GlobalVariable *GV) {
1040   void *GA = getPointerToGlobalIfAvailable(GV);
1041
1042   if (GA == 0) {
1043     // If it's not already specified, allocate memory for the global.
1044     GA = getMemoryForGV(GV);
1045     addGlobalMapping(GV, GA);
1046   }
1047   
1048   // Don't initialize if it's thread local, let the client do it.
1049   if (!GV->isThreadLocal())
1050     InitializeMemory(GV->getInitializer(), GA);
1051   
1052   const Type *ElTy = GV->getType()->getElementType();
1053   size_t GVSize = (size_t)getTargetData()->getTypeAllocSize(ElTy);
1054   NumInitBytes += (unsigned)GVSize;
1055   ++NumGlobals;
1056 }