mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-24 13:18:17 +00:00
Temporarily Revert "Nuke the old JIT." as it's not quite ready to
be deleted. This will be reapplied as soon as possible and before the 3.6 branch date at any rate. Approved by Jim Grosbach, Lang Hames, Rafael Espindola. This reverts commits r215111, 215115, 215116, 215117, 215136. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215154 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
+34
-8
@@ -22,6 +22,7 @@
|
||||
#include "llvm/CodeGen/LinkAllCodegenComponents.h"
|
||||
#include "llvm/ExecutionEngine/GenericValue.h"
|
||||
#include "llvm/ExecutionEngine/Interpreter.h"
|
||||
#include "llvm/ExecutionEngine/JIT.h"
|
||||
#include "llvm/ExecutionEngine/JITEventListener.h"
|
||||
#include "llvm/ExecutionEngine/JITMemoryManager.h"
|
||||
#include "llvm/ExecutionEngine/MCJIT.h"
|
||||
@@ -75,6 +76,10 @@ namespace {
|
||||
cl::desc("Force interpretation: disable JIT"),
|
||||
cl::init(false));
|
||||
|
||||
cl::opt<bool> UseMCJIT(
|
||||
"use-mcjit", cl::desc("Enable use of the MC-based JIT (if available)"),
|
||||
cl::init(false));
|
||||
|
||||
cl::opt<bool> DebugIR(
|
||||
"debug-ir", cl::desc("Generate debug information to allow debugging IR."),
|
||||
cl::init(false));
|
||||
@@ -400,9 +405,12 @@ int main(int argc, char **argv, char * const *envp) {
|
||||
}
|
||||
|
||||
if (EnableCacheManager) {
|
||||
std::string CacheName("file:");
|
||||
CacheName.append(InputFile);
|
||||
Mod->setModuleIdentifier(CacheName);
|
||||
if (UseMCJIT) {
|
||||
std::string CacheName("file:");
|
||||
CacheName.append(InputFile);
|
||||
Mod->setModuleIdentifier(CacheName);
|
||||
} else
|
||||
errs() << "warning: -enable-cache-manager can only be used with MCJIT.";
|
||||
}
|
||||
|
||||
// If not jitting lazily, load the whole bitcode file eagerly too.
|
||||
@@ -415,6 +423,12 @@ int main(int argc, char **argv, char * const *envp) {
|
||||
}
|
||||
|
||||
if (DebugIR) {
|
||||
if (!UseMCJIT) {
|
||||
errs() << "warning: -debug-ir used without -use-mcjit. Only partial debug"
|
||||
<< " information will be emitted by the non-MC JIT engine. To see full"
|
||||
<< " source debug information, enable the flag '-use-mcjit'.\n";
|
||||
|
||||
}
|
||||
ModulePass *DebugIRPass = createDebugIRPass();
|
||||
DebugIRPass->runOnModule(*Mod);
|
||||
}
|
||||
@@ -437,7 +451,8 @@ int main(int argc, char **argv, char * const *envp) {
|
||||
|
||||
// Enable MCJIT if desired.
|
||||
RTDyldMemoryManager *RTDyldMM = nullptr;
|
||||
if (!ForceInterpreter) {
|
||||
if (UseMCJIT && !ForceInterpreter) {
|
||||
builder.setUseMCJIT(true);
|
||||
if (RemoteMCJIT)
|
||||
RTDyldMM = new RemoteMemoryManager();
|
||||
else
|
||||
@@ -502,9 +517,12 @@ int main(int argc, char **argv, char * const *envp) {
|
||||
return 1;
|
||||
}
|
||||
if (EnableCacheManager) {
|
||||
std::string CacheName("file:");
|
||||
CacheName.append(ExtraModules[i]);
|
||||
XMod->setModuleIdentifier(CacheName);
|
||||
if (UseMCJIT) {
|
||||
std::string CacheName("file:");
|
||||
CacheName.append(ExtraModules[i]);
|
||||
XMod->setModuleIdentifier(CacheName);
|
||||
}
|
||||
// else, we already printed a warning above.
|
||||
}
|
||||
EE->addModule(XMod);
|
||||
}
|
||||
@@ -593,12 +611,20 @@ int main(int argc, char **argv, char * const *envp) {
|
||||
NULL);
|
||||
|
||||
// Run static constructors.
|
||||
if (!ForceInterpreter) {
|
||||
if (UseMCJIT && !ForceInterpreter) {
|
||||
// Give MCJIT a chance to apply relocations and set page permissions.
|
||||
EE->finalizeObject();
|
||||
}
|
||||
EE->runStaticConstructorsDestructors(false);
|
||||
|
||||
if (!UseMCJIT && NoLazyCompilation) {
|
||||
for (Module::iterator I = Mod->begin(), E = Mod->end(); I != E; ++I) {
|
||||
Function *Fn = &*I;
|
||||
if (Fn != EntryFn && !Fn->isDeclaration())
|
||||
EE->getPointerToFunction(Fn);
|
||||
}
|
||||
}
|
||||
|
||||
// Trigger compilation separately so code regions that need to be
|
||||
// invalidated will be known.
|
||||
(void)EE->getPointerToFunction(EntryFn);
|
||||
|
||||
Reference in New Issue
Block a user