aboutsummaryrefslogtreecommitdiff
path: root/lib/ExecutionEngine/JIT/JIT.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ExecutionEngine/JIT/JIT.h')
-rw-r--r--lib/ExecutionEngine/JIT/JIT.h29
1 files changed, 18 insertions, 11 deletions
diff --git a/lib/ExecutionEngine/JIT/JIT.h b/lib/ExecutionEngine/JIT/JIT.h
index 395e04926d..e0c74f8738 100644
--- a/lib/ExecutionEngine/JIT/JIT.h
+++ b/lib/ExecutionEngine/JIT/JIT.h
@@ -20,8 +20,6 @@
namespace llvm {
class Function;
-class GlobalValue;
-class Constant;
class TargetMachine;
class TargetJITInfo;
class MachineCodeEmitter;
@@ -29,21 +27,22 @@ class MachineCodeEmitter;
class JITState {
private:
FunctionPassManager PM; // Passes to compile a function
+ ModuleProvider *MP; // ModuleProvider used to create the PM
- /// PendingGlobals - Global variables which have had memory allocated for them
- /// while a function was code generated, but which have not been initialized
- /// yet.
- std::vector<const GlobalVariable*> PendingGlobals;
+ /// PendingFunctions - Functions which have not been code generated yet, but
+ /// were called from a function being code generated.
+ std::vector<Function*> PendingFunctions;
public:
- explicit JITState(ModuleProvider *MP) : PM(MP) {}
+ explicit JITState(ModuleProvider *MP) : PM(MP), MP(MP) {}
FunctionPassManager &getPM(const MutexGuard &L) {
return PM;
}
-
- std::vector<const GlobalVariable*> &getPendingGlobals(const MutexGuard &L) {
- return PendingGlobals;
+
+ ModuleProvider *getMP() const { return MP; }
+ std::vector<Function*> &getPendingFunctions(const MutexGuard &L) {
+ return PendingFunctions;
}
};
@@ -139,6 +138,12 @@ public:
///
void freeMachineCodeForFunction(Function *F);
+ /// addPendingFunction - while jitting non-lazily, a called but non-codegen'd
+ /// function was encountered. Add it to a pending list to be processed after
+ /// the current function.
+ ///
+ void addPendingFunction(Function *F);
+
/// getCodeEmitter - Return the code emitter this JIT is emitting into.
MachineCodeEmitter *getCodeEmitter() const { return MCE; }
@@ -149,7 +154,9 @@ private:
static MachineCodeEmitter *createEmitter(JIT &J, JITMemoryManager *JMM);
void runJITOnFunction(Function *F);
void runJITOnFunctionUnlocked(Function *F, const MutexGuard &locked);
-
+ void updateFunctionStub(Function *F);
+ void updateDlsymStubTable();
+
protected:
/// getMemoryforGV - Allocate memory for a global variable.