mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 04:38:24 +00:00
Make ExecutionEngine owning a DataLayout
Summary: This change is part of a series of commits dedicated to have a single DataLayout during compilation by using always the one owned by the module. The ExecutionEngine will act as an exception and will be unsafe to be reused across context. We don't enforce this rule but undefined behavior can occurs if the user tries to do it. Reviewers: lhames Subscribers: echristo, llvm-commits, rafael, yaron.keren Differential Revision: http://reviews.llvm.org/D11110 From: Mehdi Amini <mehdi.amini@apple.com> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242414 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -104,7 +104,12 @@ class ExecutionEngine {
|
||||
ExecutionEngineState EEState;
|
||||
|
||||
/// The target data for the platform for which execution is being performed.
|
||||
const DataLayout *DL;
|
||||
///
|
||||
/// Note: the DataLayout is LLVMContext specific because it has an
|
||||
/// internal cache based on type pointers. It makes unsafe to reuse the
|
||||
/// ExecutionEngine across context, we don't enforce this rule but undefined
|
||||
/// behavior can occurs if the user tries to do it.
|
||||
const DataLayout DL;
|
||||
|
||||
/// Whether lazy JIT compilation is enabled.
|
||||
bool CompilingLazily;
|
||||
@ -126,8 +131,6 @@ protected:
|
||||
/// optimize for the case where there is only one module.
|
||||
SmallVector<std::unique_ptr<Module>, 1> Modules;
|
||||
|
||||
void setDataLayout(const DataLayout *Val) { DL = Val; }
|
||||
|
||||
/// getMemoryforGV - Allocate memory for a global variable.
|
||||
virtual char *getMemoryForGV(const GlobalVariable *GV);
|
||||
|
||||
@ -194,7 +197,7 @@ public:
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
|
||||
const DataLayout *getDataLayout() const { return DL; }
|
||||
const DataLayout &getDataLayout() const { return DL; }
|
||||
|
||||
/// removeModule - Remove a Module from the list of modules. Returns true if
|
||||
/// M is found.
|
||||
@ -478,7 +481,8 @@ public:
|
||||
}
|
||||
|
||||
protected:
|
||||
ExecutionEngine() {}
|
||||
ExecutionEngine(const DataLayout DL) : DL(std::move(DL)){};
|
||||
explicit ExecutionEngine(DataLayout DL, std::unique_ptr<Module> M);
|
||||
explicit ExecutionEngine(std::unique_ptr<Module> M);
|
||||
|
||||
void emitGlobals();
|
||||
@ -488,6 +492,9 @@ protected:
|
||||
GenericValue getConstantValue(const Constant *C);
|
||||
void LoadValueFromMemory(GenericValue &Result, GenericValue *Ptr,
|
||||
Type *Ty);
|
||||
|
||||
private:
|
||||
void Init(std::unique_ptr<Module> M);
|
||||
};
|
||||
|
||||
namespace EngineKind {
|
||||
|
Reference in New Issue
Block a user