Nuke the old JIT.
[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 #include "llvm/ExecutionEngine/ExecutionEngine.h"
16 #include "llvm/ADT/SmallString.h"
17 #include "llvm/ADT/Statistic.h"
18 #include "llvm/ExecutionEngine/GenericValue.h"
19 #include "llvm/ExecutionEngine/JITMemoryManager.h"
20 #include "llvm/ExecutionEngine/ObjectCache.h"
21 #include "llvm/IR/Constants.h"
22 #include "llvm/IR/DataLayout.h"
23 #include "llvm/IR/DerivedTypes.h"
24 #include "llvm/IR/Module.h"
25 #include "llvm/IR/Operator.h"
26 #include "llvm/IR/ValueHandle.h"
27 #include "llvm/Object/Archive.h"
28 #include "llvm/Object/ObjectFile.h"
29 #include "llvm/Support/Debug.h"
30 #include "llvm/Support/DynamicLibrary.h"
31 #include "llvm/Support/ErrorHandling.h"
32 #include "llvm/Support/Host.h"
33 #include "llvm/Support/MutexGuard.h"
34 #include "llvm/Support/TargetRegistry.h"
35 #include "llvm/Support/raw_ostream.h"
36 #include "llvm/Target/TargetMachine.h"
37 #include <cmath>
38 #include <cstring>
39 using namespace llvm;
40
41 #define DEBUG_TYPE "jit"
42
43 STATISTIC(NumInitBytes, "Number of bytes of global vars initialized");
44 STATISTIC(NumGlobals  , "Number of global vars initialized");
45
46 // Pin the vtable to this file.
47 void ObjectCache::anchor() {}
48 void ObjectBuffer::anchor() {}
49 void ObjectBufferStream::anchor() {}
50
51 ExecutionEngine *(*ExecutionEngine::MCJITCtor)(
52   Module *M,
53   std::string *ErrorStr,
54   RTDyldMemoryManager *MCJMM,
55   TargetMachine *TM) = nullptr;
56 ExecutionEngine *(*ExecutionEngine::InterpCtor)(Module *M,
57                                                 std::string *ErrorStr) =nullptr;
58
59 ExecutionEngine::ExecutionEngine(Module *M)
60   : EEState(*this),
61     LazyFunctionCreator(nullptr) {
62   CompilingLazily         = false;
63   GVCompilationDisabled   = false;
64   SymbolSearchingDisabled = false;
65
66   // IR module verification is enabled by default in debug builds, and disabled
67   // by default in release builds.
68 #ifndef NDEBUG
69   VerifyModules = true;
70 #else
71   VerifyModules = false;
72 #endif
73
74   Modules.push_back(M);
75   assert(M && "Module is null?");
76 }
77
78 ExecutionEngine::~ExecutionEngine() {
79   clearAllGlobalMappings();
80   for (unsigned i = 0, e = Modules.size(); i != e; ++i)
81     delete Modules[i];
82 }
83
84 namespace {
85 /// \brief Helper class which uses a value handler to automatically deletes the
86 /// memory block when the GlobalVariable is destroyed.
87 class GVMemoryBlock : public CallbackVH {
88   GVMemoryBlock(const GlobalVariable *GV)
89     : CallbackVH(const_cast<GlobalVariable*>(GV)) {}
90
91 public:
92   /// \brief Returns the address the GlobalVariable should be written into.  The
93   /// GVMemoryBlock object prefixes that.
94   static char *Create(const GlobalVariable *GV, const DataLayout& TD) {
95     Type *ElTy = GV->getType()->getElementType();
96     size_t GVSize = (size_t)TD.getTypeAllocSize(ElTy);
97     void *RawMemory = ::operator new(
98       DataLayout::RoundUpAlignment(sizeof(GVMemoryBlock),
99                                    TD.getPreferredAlignment(GV))
100       + GVSize);
101     new(RawMemory) GVMemoryBlock(GV);
102     return static_cast<char*>(RawMemory) + sizeof(GVMemoryBlock);
103   }
104
105   void deleted() override {
106     // We allocated with operator new and with some extra memory hanging off the
107     // end, so don't just delete this.  I'm not sure if this is actually
108     // required.
109     this->~GVMemoryBlock();
110     ::operator delete(this);
111   }
112 };
113 }  // anonymous namespace
114
115 char *ExecutionEngine::getMemoryForGV(const GlobalVariable *GV) {
116   return GVMemoryBlock::Create(GV, *getDataLayout());
117 }
118
119 void ExecutionEngine::addObjectFile(std::unique_ptr<object::ObjectFile> O) {
120   llvm_unreachable("ExecutionEngine subclass doesn't implement addObjectFile.");
121 }
122
123 void ExecutionEngine::addArchive(std::unique_ptr<object::Archive> A) {
124   llvm_unreachable("ExecutionEngine subclass doesn't implement addArchive.");
125 }
126
127 bool ExecutionEngine::removeModule(Module *M) {
128   for(SmallVectorImpl<Module *>::iterator I = Modules.begin(),
129         E = Modules.end(); I != E; ++I) {
130     Module *Found = *I;
131     if (Found == M) {
132       Modules.erase(I);
133       clearGlobalMappingsFromModule(M);
134       return true;
135     }
136   }
137   return false;
138 }
139
140 Function *ExecutionEngine::FindFunctionNamed(const char *FnName) {
141   for (unsigned i = 0, e = Modules.size(); i != e; ++i) {
142     if (Function *F = Modules[i]->getFunction(FnName))
143       return F;
144   }
145   return nullptr;
146 }
147
148
149 void *ExecutionEngineState::RemoveMapping(const GlobalValue *ToUnmap) {
150   GlobalAddressMapTy::iterator I = GlobalAddressMap.find(ToUnmap);
151   void *OldVal;
152
153   // FIXME: This is silly, we shouldn't end up with a mapping -> 0 in the
154   // GlobalAddressMap.
155   if (I == GlobalAddressMap.end())
156     OldVal = nullptr;
157   else {
158     OldVal = I->second;
159     GlobalAddressMap.erase(I);
160   }
161
162   GlobalAddressReverseMap.erase(OldVal);
163   return OldVal;
164 }
165
166 void ExecutionEngine::addGlobalMapping(const GlobalValue *GV, void *Addr) {
167   MutexGuard locked(lock);
168
169   DEBUG(dbgs() << "JIT: Map \'" << GV->getName()
170         << "\' to [" << Addr << "]\n";);
171   void *&CurVal = EEState.getGlobalAddressMap()[GV];
172   assert((!CurVal || !Addr) && "GlobalMapping already established!");
173   CurVal = Addr;
174
175   // If we are using the reverse mapping, add it too.
176   if (!EEState.getGlobalAddressReverseMap().empty()) {
177     AssertingVH<const GlobalValue> &V =
178       EEState.getGlobalAddressReverseMap()[Addr];
179     assert((!V || !GV) && "GlobalMapping already established!");
180     V = GV;
181   }
182 }
183
184 void ExecutionEngine::clearAllGlobalMappings() {
185   MutexGuard locked(lock);
186
187   EEState.getGlobalAddressMap().clear();
188   EEState.getGlobalAddressReverseMap().clear();
189 }
190
191 void ExecutionEngine::clearGlobalMappingsFromModule(Module *M) {
192   MutexGuard locked(lock);
193
194   for (Module::iterator FI = M->begin(), FE = M->end(); FI != FE; ++FI)
195     EEState.RemoveMapping(FI);
196   for (Module::global_iterator GI = M->global_begin(), GE = M->global_end();
197        GI != GE; ++GI)
198     EEState.RemoveMapping(GI);
199 }
200
201 void *ExecutionEngine::updateGlobalMapping(const GlobalValue *GV, void *Addr) {
202   MutexGuard locked(lock);
203
204   ExecutionEngineState::GlobalAddressMapTy &Map =
205     EEState.getGlobalAddressMap();
206
207   // Deleting from the mapping?
208   if (!Addr)
209     return EEState.RemoveMapping(GV);
210
211   void *&CurVal = Map[GV];
212   void *OldVal = CurVal;
213
214   if (CurVal && !EEState.getGlobalAddressReverseMap().empty())
215     EEState.getGlobalAddressReverseMap().erase(CurVal);
216   CurVal = Addr;
217
218   // If we are using the reverse mapping, add it too.
219   if (!EEState.getGlobalAddressReverseMap().empty()) {
220     AssertingVH<const GlobalValue> &V =
221       EEState.getGlobalAddressReverseMap()[Addr];
222     assert((!V || !GV) && "GlobalMapping already established!");
223     V = GV;
224   }
225   return OldVal;
226 }
227
228 void *ExecutionEngine::getPointerToGlobalIfAvailable(const GlobalValue *GV) {
229   MutexGuard locked(lock);
230
231   ExecutionEngineState::GlobalAddressMapTy::iterator I =
232     EEState.getGlobalAddressMap().find(GV);
233   return I != EEState.getGlobalAddressMap().end() ? I->second : nullptr;
234 }
235
236 const GlobalValue *ExecutionEngine::getGlobalValueAtAddress(void *Addr) {
237   MutexGuard locked(lock);
238
239   // If we haven't computed the reverse mapping yet, do so first.
240   if (EEState.getGlobalAddressReverseMap().empty()) {
241     for (ExecutionEngineState::GlobalAddressMapTy::iterator
242          I = EEState.getGlobalAddressMap().begin(),
243          E = EEState.getGlobalAddressMap().end(); I != E; ++I)
244       EEState.getGlobalAddressReverseMap().insert(std::make_pair(
245                                                           I->second, I->first));
246   }
247
248   std::map<void *, AssertingVH<const GlobalValue> >::iterator I =
249     EEState.getGlobalAddressReverseMap().find(Addr);
250   return I != EEState.getGlobalAddressReverseMap().end() ? I->second : nullptr;
251 }
252
253 namespace {
254 class ArgvArray {
255   char *Array;
256   std::vector<char*> Values;
257 public:
258   ArgvArray() : Array(nullptr) {}
259   ~ArgvArray() { clear(); }
260   void clear() {
261     delete[] Array;
262     Array = nullptr;
263     for (size_t I = 0, E = Values.size(); I != E; ++I) {
264       delete[] Values[I];
265     }
266     Values.clear();
267   }
268   /// Turn a vector of strings into a nice argv style array of pointers to null
269   /// terminated strings.
270   void *reset(LLVMContext &C, ExecutionEngine *EE,
271               const std::vector<std::string> &InputArgv);
272 };
273 }  // anonymous namespace
274 void *ArgvArray::reset(LLVMContext &C, ExecutionEngine *EE,
275                        const std::vector<std::string> &InputArgv) {
276   clear();  // Free the old contents.
277   unsigned PtrSize = EE->getDataLayout()->getPointerSize();
278   Array = new char[(InputArgv.size()+1)*PtrSize];
279
280   DEBUG(dbgs() << "JIT: ARGV = " << (void*)Array << "\n");
281   Type *SBytePtr = Type::getInt8PtrTy(C);
282
283   for (unsigned i = 0; i != InputArgv.size(); ++i) {
284     unsigned Size = InputArgv[i].size()+1;
285     char *Dest = new char[Size];
286     Values.push_back(Dest);
287     DEBUG(dbgs() << "JIT: ARGV[" << i << "] = " << (void*)Dest << "\n");
288
289     std::copy(InputArgv[i].begin(), InputArgv[i].end(), Dest);
290     Dest[Size-1] = 0;
291
292     // Endian safe: Array[i] = (PointerTy)Dest;
293     EE->StoreValueToMemory(PTOGV(Dest), (GenericValue*)(Array+i*PtrSize),
294                            SBytePtr);
295   }
296
297   // Null terminate it
298   EE->StoreValueToMemory(PTOGV(nullptr),
299                          (GenericValue*)(Array+InputArgv.size()*PtrSize),
300                          SBytePtr);
301   return Array;
302 }
303
304 void ExecutionEngine::runStaticConstructorsDestructors(Module *module,
305                                                        bool isDtors) {
306   const char *Name = isDtors ? "llvm.global_dtors" : "llvm.global_ctors";
307   GlobalVariable *GV = module->getNamedGlobal(Name);
308
309   // If this global has internal linkage, or if it has a use, then it must be
310   // an old-style (llvmgcc3) static ctor with __main linked in and in use.  If
311   // this is the case, don't execute any of the global ctors, __main will do
312   // it.
313   if (!GV || GV->isDeclaration() || GV->hasLocalLinkage()) return;
314
315   // Should be an array of '{ i32, void ()* }' structs.  The first value is
316   // the init priority, which we ignore.
317   ConstantArray *InitList = dyn_cast<ConstantArray>(GV->getInitializer());
318   if (!InitList)
319     return;
320   for (unsigned i = 0, e = InitList->getNumOperands(); i != e; ++i) {
321     ConstantStruct *CS = dyn_cast<ConstantStruct>(InitList->getOperand(i));
322     if (!CS) continue;
323
324     Constant *FP = CS->getOperand(1);
325     if (FP->isNullValue())
326       continue;  // Found a sentinal value, ignore.
327
328     // Strip off constant expression casts.
329     if (ConstantExpr *CE = dyn_cast<ConstantExpr>(FP))
330       if (CE->isCast())
331         FP = CE->getOperand(0);
332
333     // Execute the ctor/dtor function!
334     if (Function *F = dyn_cast<Function>(FP))
335       runFunction(F, std::vector<GenericValue>());
336
337     // FIXME: It is marginally lame that we just do nothing here if we see an
338     // entry we don't recognize. It might not be unreasonable for the verifier
339     // to not even allow this and just assert here.
340   }
341 }
342
343 void ExecutionEngine::runStaticConstructorsDestructors(bool isDtors) {
344   // Execute global ctors/dtors for each module in the program.
345   for (unsigned i = 0, e = Modules.size(); i != e; ++i)
346     runStaticConstructorsDestructors(Modules[i], isDtors);
347 }
348
349 #ifndef NDEBUG
350 /// isTargetNullPtr - Return whether the target pointer stored at Loc is null.
351 static bool isTargetNullPtr(ExecutionEngine *EE, void *Loc) {
352   unsigned PtrSize = EE->getDataLayout()->getPointerSize();
353   for (unsigned i = 0; i < PtrSize; ++i)
354     if (*(i + (uint8_t*)Loc))
355       return false;
356   return true;
357 }
358 #endif
359
360 int ExecutionEngine::runFunctionAsMain(Function *Fn,
361                                        const std::vector<std::string> &argv,
362                                        const char * const * envp) {
363   std::vector<GenericValue> GVArgs;
364   GenericValue GVArgc;
365   GVArgc.IntVal = APInt(32, argv.size());
366
367   // Check main() type
368   unsigned NumArgs = Fn->getFunctionType()->getNumParams();
369   FunctionType *FTy = Fn->getFunctionType();
370   Type* PPInt8Ty = Type::getInt8PtrTy(Fn->getContext())->getPointerTo();
371
372   // Check the argument types.
373   if (NumArgs > 3)
374     report_fatal_error("Invalid number of arguments of main() supplied");
375   if (NumArgs >= 3 && FTy->getParamType(2) != PPInt8Ty)
376     report_fatal_error("Invalid type for third argument of main() supplied");
377   if (NumArgs >= 2 && FTy->getParamType(1) != PPInt8Ty)
378     report_fatal_error("Invalid type for second argument of main() supplied");
379   if (NumArgs >= 1 && !FTy->getParamType(0)->isIntegerTy(32))
380     report_fatal_error("Invalid type for first argument of main() supplied");
381   if (!FTy->getReturnType()->isIntegerTy() &&
382       !FTy->getReturnType()->isVoidTy())
383     report_fatal_error("Invalid return type of main() supplied");
384
385   ArgvArray CArgv;
386   ArgvArray CEnv;
387   if (NumArgs) {
388     GVArgs.push_back(GVArgc); // Arg #0 = argc.
389     if (NumArgs > 1) {
390       // Arg #1 = argv.
391       GVArgs.push_back(PTOGV(CArgv.reset(Fn->getContext(), this, argv)));
392       assert(!isTargetNullPtr(this, GVTOP(GVArgs[1])) &&
393              "argv[0] was null after CreateArgv");
394       if (NumArgs > 2) {
395         std::vector<std::string> EnvVars;
396         for (unsigned i = 0; envp[i]; ++i)
397           EnvVars.push_back(envp[i]);
398         // Arg #2 = envp.
399         GVArgs.push_back(PTOGV(CEnv.reset(Fn->getContext(), this, EnvVars)));
400       }
401     }
402   }
403
404   return runFunction(Fn, GVArgs).IntVal.getZExtValue();
405 }
406
407 void EngineBuilder::InitEngine() {
408   WhichEngine = EngineKind::Either;
409   ErrorStr = nullptr;
410   OptLevel = CodeGenOpt::Default;
411   MCJMM = nullptr;
412   JMM = nullptr;
413   Options = TargetOptions();
414   RelocModel = Reloc::Default;
415   CMModel = CodeModel::JITDefault;
416
417 // IR module verification is enabled by default in debug builds, and disabled
418 // by default in release builds.
419 #ifndef NDEBUG
420   VerifyModules = true;
421 #else
422   VerifyModules = false;
423 #endif
424 }
425
426 ExecutionEngine *EngineBuilder::create(TargetMachine *TM) {
427   std::unique_ptr<TargetMachine> TheTM(TM); // Take ownership.
428
429   // Make sure we can resolve symbols in the program as well. The zero arg
430   // to the function tells DynamicLibrary to load the program, not a library.
431   if (sys::DynamicLibrary::LoadLibraryPermanently(nullptr, ErrorStr))
432     return nullptr;
433
434   assert(!(JMM && MCJMM));
435   
436   // If the user specified a memory manager but didn't specify which engine to
437   // create, we assume they only want the JIT, and we fail if they only want
438   // the interpreter.
439   if (JMM || MCJMM) {
440     if (WhichEngine & EngineKind::JIT)
441       WhichEngine = EngineKind::JIT;
442     else {
443       if (ErrorStr)
444         *ErrorStr = "Cannot create an interpreter with a memory manager.";
445       return nullptr;
446     }
447   }
448
449   // Unless the interpreter was explicitly selected or the JIT is not linked,
450   // try making a JIT.
451   if ((WhichEngine & EngineKind::JIT) && TheTM) {
452     Triple TT(M->getTargetTriple());
453     if (!TM->getTarget().hasJIT()) {
454       errs() << "WARNING: This target JIT is not designed for the host"
455              << " you are running.  If bad things happen, please choose"
456              << " a different -march switch.\n";
457     }
458
459     ExecutionEngine *EE = nullptr;
460     if (ExecutionEngine::MCJITCtor)
461       EE = ExecutionEngine::MCJITCtor(M, ErrorStr, MCJMM ? MCJMM : JMM,
462                                       TheTM.release());
463
464     if (EE) {
465       EE->setVerifyModules(VerifyModules);
466       return EE;
467     }
468   }
469
470   // If we can't make a JIT and we didn't request one specifically, try making
471   // an interpreter instead.
472   if (WhichEngine & EngineKind::Interpreter) {
473     if (ExecutionEngine::InterpCtor)
474       return ExecutionEngine::InterpCtor(M, ErrorStr);
475     if (ErrorStr)
476       *ErrorStr = "Interpreter has not been linked in.";
477     return nullptr;
478   }
479
480   if ((WhichEngine & EngineKind::JIT) && !ExecutionEngine::MCJITCtor) {
481     if (ErrorStr)
482       *ErrorStr = "JIT has not been linked in.";
483   }
484
485   return nullptr;
486 }
487
488 void *ExecutionEngine::getPointerToGlobal(const GlobalValue *GV) {
489   if (Function *F = const_cast<Function*>(dyn_cast<Function>(GV)))
490     return getPointerToFunction(F);
491
492   MutexGuard locked(lock);
493   if (void *P = EEState.getGlobalAddressMap()[GV])
494     return P;
495
496   // Global variable might have been added since interpreter started.
497   if (GlobalVariable *GVar =
498           const_cast<GlobalVariable *>(dyn_cast<GlobalVariable>(GV)))
499     EmitGlobalVariable(GVar);
500   else
501     llvm_unreachable("Global hasn't had an address allocated yet!");
502
503   return EEState.getGlobalAddressMap()[GV];
504 }
505
506 /// \brief Converts a Constant* into a GenericValue, including handling of
507 /// ConstantExpr values.
508 GenericValue ExecutionEngine::getConstantValue(const Constant *C) {
509   // If its undefined, return the garbage.
510   if (isa<UndefValue>(C)) {
511     GenericValue Result;
512     switch (C->getType()->getTypeID()) {
513     default:
514       break;
515     case Type::IntegerTyID:
516     case Type::X86_FP80TyID:
517     case Type::FP128TyID:
518     case Type::PPC_FP128TyID:
519       // Although the value is undefined, we still have to construct an APInt
520       // with the correct bit width.
521       Result.IntVal = APInt(C->getType()->getPrimitiveSizeInBits(), 0);
522       break;
523     case Type::StructTyID: {
524       // if the whole struct is 'undef' just reserve memory for the value.
525       if(StructType *STy = dyn_cast<StructType>(C->getType())) {
526         unsigned int elemNum = STy->getNumElements();
527         Result.AggregateVal.resize(elemNum);
528         for (unsigned int i = 0; i < elemNum; ++i) {
529           Type *ElemTy = STy->getElementType(i);
530           if (ElemTy->isIntegerTy())
531             Result.AggregateVal[i].IntVal = 
532               APInt(ElemTy->getPrimitiveSizeInBits(), 0);
533           else if (ElemTy->isAggregateType()) {
534               const Constant *ElemUndef = UndefValue::get(ElemTy);
535               Result.AggregateVal[i] = getConstantValue(ElemUndef);
536             }
537           }
538         }
539       }
540       break;
541     case Type::VectorTyID:
542       // if the whole vector is 'undef' just reserve memory for the value.
543       const VectorType* VTy = dyn_cast<VectorType>(C->getType());
544       const Type *ElemTy = VTy->getElementType();
545       unsigned int elemNum = VTy->getNumElements();
546       Result.AggregateVal.resize(elemNum);
547       if (ElemTy->isIntegerTy())
548         for (unsigned int i = 0; i < elemNum; ++i)
549           Result.AggregateVal[i].IntVal =
550             APInt(ElemTy->getPrimitiveSizeInBits(), 0);
551       break;
552     }
553     return Result;
554   }
555
556   // Otherwise, if the value is a ConstantExpr...
557   if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) {
558     Constant *Op0 = CE->getOperand(0);
559     switch (CE->getOpcode()) {
560     case Instruction::GetElementPtr: {
561       // Compute the index
562       GenericValue Result = getConstantValue(Op0);
563       APInt Offset(DL->getPointerSizeInBits(), 0);
564       cast<GEPOperator>(CE)->accumulateConstantOffset(*DL, Offset);
565
566       char* tmp = (char*) Result.PointerVal;
567       Result = PTOGV(tmp + Offset.getSExtValue());
568       return Result;
569     }
570     case Instruction::Trunc: {
571       GenericValue GV = getConstantValue(Op0);
572       uint32_t BitWidth = cast<IntegerType>(CE->getType())->getBitWidth();
573       GV.IntVal = GV.IntVal.trunc(BitWidth);
574       return GV;
575     }
576     case Instruction::ZExt: {
577       GenericValue GV = getConstantValue(Op0);
578       uint32_t BitWidth = cast<IntegerType>(CE->getType())->getBitWidth();
579       GV.IntVal = GV.IntVal.zext(BitWidth);
580       return GV;
581     }
582     case Instruction::SExt: {
583       GenericValue GV = getConstantValue(Op0);
584       uint32_t BitWidth = cast<IntegerType>(CE->getType())->getBitWidth();
585       GV.IntVal = GV.IntVal.sext(BitWidth);
586       return GV;
587     }
588     case Instruction::FPTrunc: {
589       // FIXME long double
590       GenericValue GV = getConstantValue(Op0);
591       GV.FloatVal = float(GV.DoubleVal);
592       return GV;
593     }
594     case Instruction::FPExt:{
595       // FIXME long double
596       GenericValue GV = getConstantValue(Op0);
597       GV.DoubleVal = double(GV.FloatVal);
598       return GV;
599     }
600     case Instruction::UIToFP: {
601       GenericValue GV = getConstantValue(Op0);
602       if (CE->getType()->isFloatTy())
603         GV.FloatVal = float(GV.IntVal.roundToDouble());
604       else if (CE->getType()->isDoubleTy())
605         GV.DoubleVal = GV.IntVal.roundToDouble();
606       else if (CE->getType()->isX86_FP80Ty()) {
607         APFloat apf = APFloat::getZero(APFloat::x87DoubleExtended);
608         (void)apf.convertFromAPInt(GV.IntVal,
609                                    false,
610                                    APFloat::rmNearestTiesToEven);
611         GV.IntVal = apf.bitcastToAPInt();
612       }
613       return GV;
614     }
615     case Instruction::SIToFP: {
616       GenericValue GV = getConstantValue(Op0);
617       if (CE->getType()->isFloatTy())
618         GV.FloatVal = float(GV.IntVal.signedRoundToDouble());
619       else if (CE->getType()->isDoubleTy())
620         GV.DoubleVal = GV.IntVal.signedRoundToDouble();
621       else if (CE->getType()->isX86_FP80Ty()) {
622         APFloat apf = APFloat::getZero(APFloat::x87DoubleExtended);
623         (void)apf.convertFromAPInt(GV.IntVal,
624                                    true,
625                                    APFloat::rmNearestTiesToEven);
626         GV.IntVal = apf.bitcastToAPInt();
627       }
628       return GV;
629     }
630     case Instruction::FPToUI: // double->APInt conversion handles sign
631     case Instruction::FPToSI: {
632       GenericValue GV = getConstantValue(Op0);
633       uint32_t BitWidth = cast<IntegerType>(CE->getType())->getBitWidth();
634       if (Op0->getType()->isFloatTy())
635         GV.IntVal = APIntOps::RoundFloatToAPInt(GV.FloatVal, BitWidth);
636       else if (Op0->getType()->isDoubleTy())
637         GV.IntVal = APIntOps::RoundDoubleToAPInt(GV.DoubleVal, BitWidth);
638       else if (Op0->getType()->isX86_FP80Ty()) {
639         APFloat apf = APFloat(APFloat::x87DoubleExtended, GV.IntVal);
640         uint64_t v;
641         bool ignored;
642         (void)apf.convertToInteger(&v, BitWidth,
643                                    CE->getOpcode()==Instruction::FPToSI,
644                                    APFloat::rmTowardZero, &ignored);
645         GV.IntVal = v; // endian?
646       }
647       return GV;
648     }
649     case Instruction::PtrToInt: {
650       GenericValue GV = getConstantValue(Op0);
651       uint32_t PtrWidth = DL->getTypeSizeInBits(Op0->getType());
652       assert(PtrWidth <= 64 && "Bad pointer width");
653       GV.IntVal = APInt(PtrWidth, uintptr_t(GV.PointerVal));
654       uint32_t IntWidth = DL->getTypeSizeInBits(CE->getType());
655       GV.IntVal = GV.IntVal.zextOrTrunc(IntWidth);
656       return GV;
657     }
658     case Instruction::IntToPtr: {
659       GenericValue GV = getConstantValue(Op0);
660       uint32_t PtrWidth = DL->getTypeSizeInBits(CE->getType());
661       GV.IntVal = GV.IntVal.zextOrTrunc(PtrWidth);
662       assert(GV.IntVal.getBitWidth() <= 64 && "Bad pointer width");
663       GV.PointerVal = PointerTy(uintptr_t(GV.IntVal.getZExtValue()));
664       return GV;
665     }
666     case Instruction::BitCast: {
667       GenericValue GV = getConstantValue(Op0);
668       Type* DestTy = CE->getType();
669       switch (Op0->getType()->getTypeID()) {
670         default: llvm_unreachable("Invalid bitcast operand");
671         case Type::IntegerTyID:
672           assert(DestTy->isFloatingPointTy() && "invalid bitcast");
673           if (DestTy->isFloatTy())
674             GV.FloatVal = GV.IntVal.bitsToFloat();
675           else if (DestTy->isDoubleTy())
676             GV.DoubleVal = GV.IntVal.bitsToDouble();
677           break;
678         case Type::FloatTyID:
679           assert(DestTy->isIntegerTy(32) && "Invalid bitcast");
680           GV.IntVal = APInt::floatToBits(GV.FloatVal);
681           break;
682         case Type::DoubleTyID:
683           assert(DestTy->isIntegerTy(64) && "Invalid bitcast");
684           GV.IntVal = APInt::doubleToBits(GV.DoubleVal);
685           break;
686         case Type::PointerTyID:
687           assert(DestTy->isPointerTy() && "Invalid bitcast");
688           break; // getConstantValue(Op0)  above already converted it
689       }
690       return GV;
691     }
692     case Instruction::Add:
693     case Instruction::FAdd:
694     case Instruction::Sub:
695     case Instruction::FSub:
696     case Instruction::Mul:
697     case Instruction::FMul:
698     case Instruction::UDiv:
699     case Instruction::SDiv:
700     case Instruction::URem:
701     case Instruction::SRem:
702     case Instruction::And:
703     case Instruction::Or:
704     case Instruction::Xor: {
705       GenericValue LHS = getConstantValue(Op0);
706       GenericValue RHS = getConstantValue(CE->getOperand(1));
707       GenericValue GV;
708       switch (CE->getOperand(0)->getType()->getTypeID()) {
709       default: llvm_unreachable("Bad add type!");
710       case Type::IntegerTyID:
711         switch (CE->getOpcode()) {
712           default: llvm_unreachable("Invalid integer opcode");
713           case Instruction::Add: GV.IntVal = LHS.IntVal + RHS.IntVal; break;
714           case Instruction::Sub: GV.IntVal = LHS.IntVal - RHS.IntVal; break;
715           case Instruction::Mul: GV.IntVal = LHS.IntVal * RHS.IntVal; break;
716           case Instruction::UDiv:GV.IntVal = LHS.IntVal.udiv(RHS.IntVal); break;
717           case Instruction::SDiv:GV.IntVal = LHS.IntVal.sdiv(RHS.IntVal); break;
718           case Instruction::URem:GV.IntVal = LHS.IntVal.urem(RHS.IntVal); break;
719           case Instruction::SRem:GV.IntVal = LHS.IntVal.srem(RHS.IntVal); break;
720           case Instruction::And: GV.IntVal = LHS.IntVal & RHS.IntVal; break;
721           case Instruction::Or:  GV.IntVal = LHS.IntVal | RHS.IntVal; break;
722           case Instruction::Xor: GV.IntVal = LHS.IntVal ^ RHS.IntVal; break;
723         }
724         break;
725       case Type::FloatTyID:
726         switch (CE->getOpcode()) {
727           default: llvm_unreachable("Invalid float opcode");
728           case Instruction::FAdd:
729             GV.FloatVal = LHS.FloatVal + RHS.FloatVal; break;
730           case Instruction::FSub:
731             GV.FloatVal = LHS.FloatVal - RHS.FloatVal; break;
732           case Instruction::FMul:
733             GV.FloatVal = LHS.FloatVal * RHS.FloatVal; break;
734           case Instruction::FDiv:
735             GV.FloatVal = LHS.FloatVal / RHS.FloatVal; break;
736           case Instruction::FRem:
737             GV.FloatVal = std::fmod(LHS.FloatVal,RHS.FloatVal); break;
738         }
739         break;
740       case Type::DoubleTyID:
741         switch (CE->getOpcode()) {
742           default: llvm_unreachable("Invalid double opcode");
743           case Instruction::FAdd:
744             GV.DoubleVal = LHS.DoubleVal + RHS.DoubleVal; break;
745           case Instruction::FSub:
746             GV.DoubleVal = LHS.DoubleVal - RHS.DoubleVal; break;
747           case Instruction::FMul:
748             GV.DoubleVal = LHS.DoubleVal * RHS.DoubleVal; break;
749           case Instruction::FDiv:
750             GV.DoubleVal = LHS.DoubleVal / RHS.DoubleVal; break;
751           case Instruction::FRem:
752             GV.DoubleVal = std::fmod(LHS.DoubleVal,RHS.DoubleVal); break;
753         }
754         break;
755       case Type::X86_FP80TyID:
756       case Type::PPC_FP128TyID:
757       case Type::FP128TyID: {
758         const fltSemantics &Sem = CE->getOperand(0)->getType()->getFltSemantics();
759         APFloat apfLHS = APFloat(Sem, LHS.IntVal);
760         switch (CE->getOpcode()) {
761           default: llvm_unreachable("Invalid long double opcode");
762           case Instruction::FAdd:
763             apfLHS.add(APFloat(Sem, RHS.IntVal), APFloat::rmNearestTiesToEven);
764             GV.IntVal = apfLHS.bitcastToAPInt();
765             break;
766           case Instruction::FSub:
767             apfLHS.subtract(APFloat(Sem, RHS.IntVal),
768                             APFloat::rmNearestTiesToEven);
769             GV.IntVal = apfLHS.bitcastToAPInt();
770             break;
771           case Instruction::FMul:
772             apfLHS.multiply(APFloat(Sem, RHS.IntVal),
773                             APFloat::rmNearestTiesToEven);
774             GV.IntVal = apfLHS.bitcastToAPInt();
775             break;
776           case Instruction::FDiv:
777             apfLHS.divide(APFloat(Sem, RHS.IntVal),
778                           APFloat::rmNearestTiesToEven);
779             GV.IntVal = apfLHS.bitcastToAPInt();
780             break;
781           case Instruction::FRem:
782             apfLHS.mod(APFloat(Sem, RHS.IntVal),
783                        APFloat::rmNearestTiesToEven);
784             GV.IntVal = apfLHS.bitcastToAPInt();
785             break;
786           }
787         }
788         break;
789       }
790       return GV;
791     }
792     default:
793       break;
794     }
795
796     SmallString<256> Msg;
797     raw_svector_ostream OS(Msg);
798     OS << "ConstantExpr not handled: " << *CE;
799     report_fatal_error(OS.str());
800   }
801
802   // Otherwise, we have a simple constant.
803   GenericValue Result;
804   switch (C->getType()->getTypeID()) {
805   case Type::FloatTyID:
806     Result.FloatVal = cast<ConstantFP>(C)->getValueAPF().convertToFloat();
807     break;
808   case Type::DoubleTyID:
809     Result.DoubleVal = cast<ConstantFP>(C)->getValueAPF().convertToDouble();
810     break;
811   case Type::X86_FP80TyID:
812   case Type::FP128TyID:
813   case Type::PPC_FP128TyID:
814     Result.IntVal = cast <ConstantFP>(C)->getValueAPF().bitcastToAPInt();
815     break;
816   case Type::IntegerTyID:
817     Result.IntVal = cast<ConstantInt>(C)->getValue();
818     break;
819   case Type::PointerTyID:
820     if (isa<ConstantPointerNull>(C))
821       Result.PointerVal = nullptr;
822     else if (const Function *F = dyn_cast<Function>(C))
823       Result = PTOGV(getPointerToFunctionOrStub(const_cast<Function*>(F)));
824     else if (const GlobalVariable *GV = dyn_cast<GlobalVariable>(C))
825       Result = PTOGV(getOrEmitGlobalVariable(const_cast<GlobalVariable*>(GV)));
826     else
827       llvm_unreachable("Unknown constant pointer type!");
828     break;
829   case Type::VectorTyID: {
830     unsigned elemNum;
831     Type* ElemTy;
832     const ConstantDataVector *CDV = dyn_cast<ConstantDataVector>(C);
833     const ConstantVector *CV = dyn_cast<ConstantVector>(C);
834     const ConstantAggregateZero *CAZ = dyn_cast<ConstantAggregateZero>(C);
835
836     if (CDV) {
837         elemNum = CDV->getNumElements();
838         ElemTy = CDV->getElementType();
839     } else if (CV || CAZ) {
840         VectorType* VTy = dyn_cast<VectorType>(C->getType());
841         elemNum = VTy->getNumElements();
842         ElemTy = VTy->getElementType();
843     } else {
844         llvm_unreachable("Unknown constant vector type!");
845     }
846
847     Result.AggregateVal.resize(elemNum);
848     // Check if vector holds floats.
849     if(ElemTy->isFloatTy()) {
850       if (CAZ) {
851         GenericValue floatZero;
852         floatZero.FloatVal = 0.f;
853         std::fill(Result.AggregateVal.begin(), Result.AggregateVal.end(),
854                   floatZero);
855         break;
856       }
857       if(CV) {
858         for (unsigned i = 0; i < elemNum; ++i)
859           if (!isa<UndefValue>(CV->getOperand(i)))
860             Result.AggregateVal[i].FloatVal = cast<ConstantFP>(
861               CV->getOperand(i))->getValueAPF().convertToFloat();
862         break;
863       }
864       if(CDV)
865         for (unsigned i = 0; i < elemNum; ++i)
866           Result.AggregateVal[i].FloatVal = CDV->getElementAsFloat(i);
867
868       break;
869     }
870     // Check if vector holds doubles.
871     if (ElemTy->isDoubleTy()) {
872       if (CAZ) {
873         GenericValue doubleZero;
874         doubleZero.DoubleVal = 0.0;
875         std::fill(Result.AggregateVal.begin(), Result.AggregateVal.end(),
876                   doubleZero);
877         break;
878       }
879       if(CV) {
880         for (unsigned i = 0; i < elemNum; ++i)
881           if (!isa<UndefValue>(CV->getOperand(i)))
882             Result.AggregateVal[i].DoubleVal = cast<ConstantFP>(
883               CV->getOperand(i))->getValueAPF().convertToDouble();
884         break;
885       }
886       if(CDV)
887         for (unsigned i = 0; i < elemNum; ++i)
888           Result.AggregateVal[i].DoubleVal = CDV->getElementAsDouble(i);
889
890       break;
891     }
892     // Check if vector holds integers.
893     if (ElemTy->isIntegerTy()) {
894       if (CAZ) {
895         GenericValue intZero;     
896         intZero.IntVal = APInt(ElemTy->getScalarSizeInBits(), 0ull);
897         std::fill(Result.AggregateVal.begin(), Result.AggregateVal.end(),
898                   intZero);
899         break;
900       }
901       if(CV) {
902         for (unsigned i = 0; i < elemNum; ++i)
903           if (!isa<UndefValue>(CV->getOperand(i)))
904             Result.AggregateVal[i].IntVal = cast<ConstantInt>(
905                                             CV->getOperand(i))->getValue();
906           else {
907             Result.AggregateVal[i].IntVal =
908               APInt(CV->getOperand(i)->getType()->getPrimitiveSizeInBits(), 0);
909           }
910         break;
911       }
912       if(CDV)
913         for (unsigned i = 0; i < elemNum; ++i)
914           Result.AggregateVal[i].IntVal = APInt(
915             CDV->getElementType()->getPrimitiveSizeInBits(),
916             CDV->getElementAsInteger(i));
917
918       break;
919     }
920     llvm_unreachable("Unknown constant pointer type!");
921   }
922   break;
923
924   default:
925     SmallString<256> Msg;
926     raw_svector_ostream OS(Msg);
927     OS << "ERROR: Constant unimplemented for type: " << *C->getType();
928     report_fatal_error(OS.str());
929   }
930
931   return Result;
932 }
933
934 /// StoreIntToMemory - Fills the StoreBytes bytes of memory starting from Dst
935 /// with the integer held in IntVal.
936 static void StoreIntToMemory(const APInt &IntVal, uint8_t *Dst,
937                              unsigned StoreBytes) {
938   assert((IntVal.getBitWidth()+7)/8 >= StoreBytes && "Integer too small!");
939   const uint8_t *Src = (const uint8_t *)IntVal.getRawData();
940
941   if (sys::IsLittleEndianHost) {
942     // Little-endian host - the source is ordered from LSB to MSB.  Order the
943     // destination from LSB to MSB: Do a straight copy.
944     memcpy(Dst, Src, StoreBytes);
945   } else {
946     // Big-endian host - the source is an array of 64 bit words ordered from
947     // LSW to MSW.  Each word is ordered from MSB to LSB.  Order the destination
948     // from MSB to LSB: Reverse the word order, but not the bytes in a word.
949     while (StoreBytes > sizeof(uint64_t)) {
950       StoreBytes -= sizeof(uint64_t);
951       // May not be aligned so use memcpy.
952       memcpy(Dst + StoreBytes, Src, sizeof(uint64_t));
953       Src += sizeof(uint64_t);
954     }
955
956     memcpy(Dst, Src + sizeof(uint64_t) - StoreBytes, StoreBytes);
957   }
958 }
959
960 void ExecutionEngine::StoreValueToMemory(const GenericValue &Val,
961                                          GenericValue *Ptr, Type *Ty) {
962   const unsigned StoreBytes = getDataLayout()->getTypeStoreSize(Ty);
963
964   switch (Ty->getTypeID()) {
965   default:
966     dbgs() << "Cannot store value of type " << *Ty << "!\n";
967     break;
968   case Type::IntegerTyID:
969     StoreIntToMemory(Val.IntVal, (uint8_t*)Ptr, StoreBytes);
970     break;
971   case Type::FloatTyID:
972     *((float*)Ptr) = Val.FloatVal;
973     break;
974   case Type::DoubleTyID:
975     *((double*)Ptr) = Val.DoubleVal;
976     break;
977   case Type::X86_FP80TyID:
978     memcpy(Ptr, Val.IntVal.getRawData(), 10);
979     break;
980   case Type::PointerTyID:
981     // Ensure 64 bit target pointers are fully initialized on 32 bit hosts.
982     if (StoreBytes != sizeof(PointerTy))
983       memset(&(Ptr->PointerVal), 0, StoreBytes);
984
985     *((PointerTy*)Ptr) = Val.PointerVal;
986     break;
987   case Type::VectorTyID:
988     for (unsigned i = 0; i < Val.AggregateVal.size(); ++i) {
989       if (cast<VectorType>(Ty)->getElementType()->isDoubleTy())
990         *(((double*)Ptr)+i) = Val.AggregateVal[i].DoubleVal;
991       if (cast<VectorType>(Ty)->getElementType()->isFloatTy())
992         *(((float*)Ptr)+i) = Val.AggregateVal[i].FloatVal;
993       if (cast<VectorType>(Ty)->getElementType()->isIntegerTy()) {
994         unsigned numOfBytes =(Val.AggregateVal[i].IntVal.getBitWidth()+7)/8;
995         StoreIntToMemory(Val.AggregateVal[i].IntVal, 
996           (uint8_t*)Ptr + numOfBytes*i, numOfBytes);
997       }
998     }
999     break;
1000   }
1001
1002   if (sys::IsLittleEndianHost != getDataLayout()->isLittleEndian())
1003     // Host and target are different endian - reverse the stored bytes.
1004     std::reverse((uint8_t*)Ptr, StoreBytes + (uint8_t*)Ptr);
1005 }
1006
1007 /// LoadIntFromMemory - Loads the integer stored in the LoadBytes bytes starting
1008 /// from Src into IntVal, which is assumed to be wide enough and to hold zero.
1009 static void LoadIntFromMemory(APInt &IntVal, uint8_t *Src, unsigned LoadBytes) {
1010   assert((IntVal.getBitWidth()+7)/8 >= LoadBytes && "Integer too small!");
1011   uint8_t *Dst = reinterpret_cast<uint8_t *>(
1012                    const_cast<uint64_t *>(IntVal.getRawData()));
1013
1014   if (sys::IsLittleEndianHost)
1015     // Little-endian host - the destination must be ordered from LSB to MSB.
1016     // The source is ordered from LSB to MSB: Do a straight copy.
1017     memcpy(Dst, Src, LoadBytes);
1018   else {
1019     // Big-endian - the destination is an array of 64 bit words ordered from
1020     // LSW to MSW.  Each word must be ordered from MSB to LSB.  The source is
1021     // ordered from MSB to LSB: Reverse the word order, but not the bytes in
1022     // a word.
1023     while (LoadBytes > sizeof(uint64_t)) {
1024       LoadBytes -= sizeof(uint64_t);
1025       // May not be aligned so use memcpy.
1026       memcpy(Dst, Src + LoadBytes, sizeof(uint64_t));
1027       Dst += sizeof(uint64_t);
1028     }
1029
1030     memcpy(Dst + sizeof(uint64_t) - LoadBytes, Src, LoadBytes);
1031   }
1032 }
1033
1034 /// FIXME: document
1035 ///
1036 void ExecutionEngine::LoadValueFromMemory(GenericValue &Result,
1037                                           GenericValue *Ptr,
1038                                           Type *Ty) {
1039   const unsigned LoadBytes = getDataLayout()->getTypeStoreSize(Ty);
1040
1041   switch (Ty->getTypeID()) {
1042   case Type::IntegerTyID:
1043     // An APInt with all words initially zero.
1044     Result.IntVal = APInt(cast<IntegerType>(Ty)->getBitWidth(), 0);
1045     LoadIntFromMemory(Result.IntVal, (uint8_t*)Ptr, LoadBytes);
1046     break;
1047   case Type::FloatTyID:
1048     Result.FloatVal = *((float*)Ptr);
1049     break;
1050   case Type::DoubleTyID:
1051     Result.DoubleVal = *((double*)Ptr);
1052     break;
1053   case Type::PointerTyID:
1054     Result.PointerVal = *((PointerTy*)Ptr);
1055     break;
1056   case Type::X86_FP80TyID: {
1057     // This is endian dependent, but it will only work on x86 anyway.
1058     // FIXME: Will not trap if loading a signaling NaN.
1059     uint64_t y[2];
1060     memcpy(y, Ptr, 10);
1061     Result.IntVal = APInt(80, y);
1062     break;
1063   }
1064   case Type::VectorTyID: {
1065     const VectorType *VT = cast<VectorType>(Ty);
1066     const Type *ElemT = VT->getElementType();
1067     const unsigned numElems = VT->getNumElements();
1068     if (ElemT->isFloatTy()) {
1069       Result.AggregateVal.resize(numElems);
1070       for (unsigned i = 0; i < numElems; ++i)
1071         Result.AggregateVal[i].FloatVal = *((float*)Ptr+i);
1072     }
1073     if (ElemT->isDoubleTy()) {
1074       Result.AggregateVal.resize(numElems);
1075       for (unsigned i = 0; i < numElems; ++i)
1076         Result.AggregateVal[i].DoubleVal = *((double*)Ptr+i);
1077     }
1078     if (ElemT->isIntegerTy()) {
1079       GenericValue intZero;
1080       const unsigned elemBitWidth = cast<IntegerType>(ElemT)->getBitWidth();
1081       intZero.IntVal = APInt(elemBitWidth, 0);
1082       Result.AggregateVal.resize(numElems, intZero);
1083       for (unsigned i = 0; i < numElems; ++i)
1084         LoadIntFromMemory(Result.AggregateVal[i].IntVal,
1085           (uint8_t*)Ptr+((elemBitWidth+7)/8)*i, (elemBitWidth+7)/8);
1086     }
1087   break;
1088   }
1089   default:
1090     SmallString<256> Msg;
1091     raw_svector_ostream OS(Msg);
1092     OS << "Cannot load value of type " << *Ty << "!";
1093     report_fatal_error(OS.str());
1094   }
1095 }
1096
1097 void ExecutionEngine::InitializeMemory(const Constant *Init, void *Addr) {
1098   DEBUG(dbgs() << "JIT: Initializing " << Addr << " ");
1099   DEBUG(Init->dump());
1100   if (isa<UndefValue>(Init))
1101     return;
1102   
1103   if (const ConstantVector *CP = dyn_cast<ConstantVector>(Init)) {
1104     unsigned ElementSize =
1105       getDataLayout()->getTypeAllocSize(CP->getType()->getElementType());
1106     for (unsigned i = 0, e = CP->getNumOperands(); i != e; ++i)
1107       InitializeMemory(CP->getOperand(i), (char*)Addr+i*ElementSize);
1108     return;
1109   }
1110   
1111   if (isa<ConstantAggregateZero>(Init)) {
1112     memset(Addr, 0, (size_t)getDataLayout()->getTypeAllocSize(Init->getType()));
1113     return;
1114   }
1115   
1116   if (const ConstantArray *CPA = dyn_cast<ConstantArray>(Init)) {
1117     unsigned ElementSize =
1118       getDataLayout()->getTypeAllocSize(CPA->getType()->getElementType());
1119     for (unsigned i = 0, e = CPA->getNumOperands(); i != e; ++i)
1120       InitializeMemory(CPA->getOperand(i), (char*)Addr+i*ElementSize);
1121     return;
1122   }
1123   
1124   if (const ConstantStruct *CPS = dyn_cast<ConstantStruct>(Init)) {
1125     const StructLayout *SL =
1126       getDataLayout()->getStructLayout(cast<StructType>(CPS->getType()));
1127     for (unsigned i = 0, e = CPS->getNumOperands(); i != e; ++i)
1128       InitializeMemory(CPS->getOperand(i), (char*)Addr+SL->getElementOffset(i));
1129     return;
1130   }
1131
1132   if (const ConstantDataSequential *CDS =
1133                dyn_cast<ConstantDataSequential>(Init)) {
1134     // CDS is already laid out in host memory order.
1135     StringRef Data = CDS->getRawDataValues();
1136     memcpy(Addr, Data.data(), Data.size());
1137     return;
1138   }
1139
1140   if (Init->getType()->isFirstClassType()) {
1141     GenericValue Val = getConstantValue(Init);
1142     StoreValueToMemory(Val, (GenericValue*)Addr, Init->getType());
1143     return;
1144   }
1145
1146   DEBUG(dbgs() << "Bad Type: " << *Init->getType() << "\n");
1147   llvm_unreachable("Unknown constant type to initialize memory with!");
1148 }
1149
1150 /// EmitGlobals - Emit all of the global variables to memory, storing their
1151 /// addresses into GlobalAddress.  This must make sure to copy the contents of
1152 /// their initializers into the memory.
1153 void ExecutionEngine::emitGlobals() {
1154   // Loop over all of the global variables in the program, allocating the memory
1155   // to hold them.  If there is more than one module, do a prepass over globals
1156   // to figure out how the different modules should link together.
1157   std::map<std::pair<std::string, Type*>,
1158            const GlobalValue*> LinkedGlobalsMap;
1159
1160   if (Modules.size() != 1) {
1161     for (unsigned m = 0, e = Modules.size(); m != e; ++m) {
1162       Module &M = *Modules[m];
1163       for (const auto &GV : M.globals()) {
1164         if (GV.hasLocalLinkage() || GV.isDeclaration() ||
1165             GV.hasAppendingLinkage() || !GV.hasName())
1166           continue;// Ignore external globals and globals with internal linkage.
1167
1168         const GlobalValue *&GVEntry =
1169           LinkedGlobalsMap[std::make_pair(GV.getName(), GV.getType())];
1170
1171         // If this is the first time we've seen this global, it is the canonical
1172         // version.
1173         if (!GVEntry) {
1174           GVEntry = &GV;
1175           continue;
1176         }
1177
1178         // If the existing global is strong, never replace it.
1179         if (GVEntry->hasExternalLinkage())
1180           continue;
1181
1182         // Otherwise, we know it's linkonce/weak, replace it if this is a strong
1183         // symbol.  FIXME is this right for common?
1184         if (GV.hasExternalLinkage() || GVEntry->hasExternalWeakLinkage())
1185           GVEntry = &GV;
1186       }
1187     }
1188   }
1189
1190   std::vector<const GlobalValue*> NonCanonicalGlobals;
1191   for (unsigned m = 0, e = Modules.size(); m != e; ++m) {
1192     Module &M = *Modules[m];
1193     for (const auto &GV : M.globals()) {
1194       // In the multi-module case, see what this global maps to.
1195       if (!LinkedGlobalsMap.empty()) {
1196         if (const GlobalValue *GVEntry =
1197               LinkedGlobalsMap[std::make_pair(GV.getName(), GV.getType())]) {
1198           // If something else is the canonical global, ignore this one.
1199           if (GVEntry != &GV) {
1200             NonCanonicalGlobals.push_back(&GV);
1201             continue;
1202           }
1203         }
1204       }
1205
1206       if (!GV.isDeclaration()) {
1207         addGlobalMapping(&GV, getMemoryForGV(&GV));
1208       } else {
1209         // External variable reference. Try to use the dynamic loader to
1210         // get a pointer to it.
1211         if (void *SymAddr =
1212             sys::DynamicLibrary::SearchForAddressOfSymbol(GV.getName()))
1213           addGlobalMapping(&GV, SymAddr);
1214         else {
1215           report_fatal_error("Could not resolve external global address: "
1216                             +GV.getName());
1217         }
1218       }
1219     }
1220
1221     // If there are multiple modules, map the non-canonical globals to their
1222     // canonical location.
1223     if (!NonCanonicalGlobals.empty()) {
1224       for (unsigned i = 0, e = NonCanonicalGlobals.size(); i != e; ++i) {
1225         const GlobalValue *GV = NonCanonicalGlobals[i];
1226         const GlobalValue *CGV =
1227           LinkedGlobalsMap[std::make_pair(GV->getName(), GV->getType())];
1228         void *Ptr = getPointerToGlobalIfAvailable(CGV);
1229         assert(Ptr && "Canonical global wasn't codegen'd!");
1230         addGlobalMapping(GV, Ptr);
1231       }
1232     }
1233
1234     // Now that all of the globals are set up in memory, loop through them all
1235     // and initialize their contents.
1236     for (const auto &GV : M.globals()) {
1237       if (!GV.isDeclaration()) {
1238         if (!LinkedGlobalsMap.empty()) {
1239           if (const GlobalValue *GVEntry =
1240                 LinkedGlobalsMap[std::make_pair(GV.getName(), GV.getType())])
1241             if (GVEntry != &GV)  // Not the canonical variable.
1242               continue;
1243         }
1244         EmitGlobalVariable(&GV);
1245       }
1246     }
1247   }
1248 }
1249
1250 // EmitGlobalVariable - This method emits the specified global variable to the
1251 // address specified in GlobalAddresses, or allocates new memory if it's not
1252 // already in the map.
1253 void ExecutionEngine::EmitGlobalVariable(const GlobalVariable *GV) {
1254   void *GA = getPointerToGlobalIfAvailable(GV);
1255
1256   if (!GA) {
1257     // If it's not already specified, allocate memory for the global.
1258     GA = getMemoryForGV(GV);
1259
1260     // If we failed to allocate memory for this global, return.
1261     if (!GA) return;
1262
1263     addGlobalMapping(GV, GA);
1264   }
1265
1266   // Don't initialize if it's thread local, let the client do it.
1267   if (!GV->isThreadLocal())
1268     InitializeMemory(GV->getInitializer(), GA);
1269
1270   Type *ElTy = GV->getType()->getElementType();
1271   size_t GVSize = (size_t)getDataLayout()->getTypeAllocSize(ElTy);
1272   NumInitBytes += (unsigned)GVSize;
1273   ++NumGlobals;
1274 }
1275
1276 ExecutionEngineState::ExecutionEngineState(ExecutionEngine &EE)
1277   : EE(EE), GlobalAddressMap(this) {
1278 }
1279
1280 sys::Mutex *
1281 ExecutionEngineState::AddressMapConfig::getMutex(ExecutionEngineState *EES) {
1282   return &EES->EE.lock;
1283 }
1284
1285 void ExecutionEngineState::AddressMapConfig::onDelete(ExecutionEngineState *EES,
1286                                                       const GlobalValue *Old) {
1287   void *OldVal = EES->GlobalAddressMap.lookup(Old);
1288   EES->GlobalAddressReverseMap.erase(OldVal);
1289 }
1290
1291 void ExecutionEngineState::AddressMapConfig::onRAUW(ExecutionEngineState *,
1292                                                     const GlobalValue *,
1293                                                     const GlobalValue *) {
1294   llvm_unreachable("The ExecutionEngine doesn't know how to handle a"
1295                    " RAUW on a value it has a global mapping for.");
1296 }