mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-24 13:18:17 +00:00
Reinstate "Nuke the old JIT."
Approved by Jim Grosbach, Lang Hames, Rafael Espindola. This reinstates commits r215111, 215115, 215116, 215117, 215136. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216982 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -26,8 +26,8 @@
|
||||
|
||||
#include "BrainF.h"
|
||||
#include "llvm/Bitcode/ReaderWriter.h"
|
||||
#include "llvm/ExecutionEngine/ExecutionEngine.h"
|
||||
#include "llvm/ExecutionEngine/GenericValue.h"
|
||||
#include "llvm/ExecutionEngine/JIT.h"
|
||||
#include "llvm/IR/Constants.h"
|
||||
#include "llvm/IR/Verifier.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
|
||||
@@ -2,7 +2,6 @@ set(LLVM_LINK_COMPONENTS
|
||||
BitWriter
|
||||
Core
|
||||
ExecutionEngine
|
||||
JIT
|
||||
MC
|
||||
Support
|
||||
nativecodegen
|
||||
|
||||
@@ -1966,10 +1966,8 @@ int main(int argc, char *argv[]) {
|
||||
// Build engine with JIT
|
||||
llvm::EngineBuilder factory(std::move(Owner));
|
||||
factory.setEngineKind(llvm::EngineKind::JIT);
|
||||
factory.setAllocateGVsWithCode(false);
|
||||
factory.setTargetOptions(Opts);
|
||||
factory.setMCJITMemoryManager(MemMgr);
|
||||
factory.setUseMCJIT(true);
|
||||
llvm::ExecutionEngine *executionEngine = factory.create();
|
||||
|
||||
{
|
||||
|
||||
@@ -2,7 +2,6 @@ set(LLVM_LINK_COMPONENTS
|
||||
Core
|
||||
ExecutionEngine
|
||||
Interpreter
|
||||
JIT
|
||||
MC
|
||||
Support
|
||||
nativecodegen
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
#include "llvm/IR/Verifier.h"
|
||||
#include "llvm/ExecutionEngine/GenericValue.h"
|
||||
#include "llvm/ExecutionEngine/Interpreter.h"
|
||||
#include "llvm/ExecutionEngine/JIT.h"
|
||||
#include "llvm/IR/Constants.h"
|
||||
#include "llvm/IR/DerivedTypes.h"
|
||||
#include "llvm/IR/Instructions.h"
|
||||
|
||||
@@ -2,7 +2,6 @@ set(LLVM_LINK_COMPONENTS
|
||||
Core
|
||||
ExecutionEngine
|
||||
Interpreter
|
||||
JIT
|
||||
MC
|
||||
Support
|
||||
nativecodegen
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
|
||||
#include "llvm/ExecutionEngine/GenericValue.h"
|
||||
#include "llvm/ExecutionEngine/Interpreter.h"
|
||||
#include "llvm/ExecutionEngine/JIT.h"
|
||||
#include "llvm/IR/Constants.h"
|
||||
#include "llvm/IR/DerivedTypes.h"
|
||||
#include "llvm/IR/IRBuilder.h"
|
||||
@@ -127,7 +126,6 @@ int main() {
|
||||
|
||||
// Import result of execution:
|
||||
outs() << "Result: " << gv.IntVal << "\n";
|
||||
EE->freeMachineCodeForFunction(FooF);
|
||||
delete EE;
|
||||
llvm_shutdown();
|
||||
return 0;
|
||||
|
||||
@@ -3,7 +3,6 @@ set(LLVM_LINK_COMPONENTS
|
||||
Core
|
||||
ExecutionEngine
|
||||
InstCombine
|
||||
JIT
|
||||
MC
|
||||
ScalarOpts
|
||||
Support
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#include "llvm/Analysis/Passes.h"
|
||||
#include "llvm/ExecutionEngine/ExecutionEngine.h"
|
||||
#include "llvm/ExecutionEngine/JIT.h"
|
||||
#include "llvm/IR/DataLayout.h"
|
||||
#include "llvm/IR/DerivedTypes.h"
|
||||
#include "llvm/IR/IRBuilder.h"
|
||||
|
||||
@@ -3,7 +3,6 @@ set(LLVM_LINK_COMPONENTS
|
||||
Core
|
||||
ExecutionEngine
|
||||
InstCombine
|
||||
JIT
|
||||
MC
|
||||
ScalarOpts
|
||||
Support
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#include "llvm/Analysis/Passes.h"
|
||||
#include "llvm/ExecutionEngine/ExecutionEngine.h"
|
||||
#include "llvm/ExecutionEngine/JIT.h"
|
||||
#include "llvm/IR/DataLayout.h"
|
||||
#include "llvm/IR/DerivedTypes.h"
|
||||
#include "llvm/IR/IRBuilder.h"
|
||||
|
||||
@@ -3,7 +3,6 @@ set(LLVM_LINK_COMPONENTS
|
||||
Core
|
||||
ExecutionEngine
|
||||
InstCombine
|
||||
JIT
|
||||
MC
|
||||
ScalarOpts
|
||||
Support
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#include "llvm/Analysis/Passes.h"
|
||||
#include "llvm/ExecutionEngine/ExecutionEngine.h"
|
||||
#include "llvm/ExecutionEngine/JIT.h"
|
||||
#include "llvm/IR/DataLayout.h"
|
||||
#include "llvm/IR/DerivedTypes.h"
|
||||
#include "llvm/IR/IRBuilder.h"
|
||||
|
||||
@@ -3,7 +3,6 @@ set(LLVM_LINK_COMPONENTS
|
||||
Core
|
||||
ExecutionEngine
|
||||
InstCombine
|
||||
JIT
|
||||
MC
|
||||
ScalarOpts
|
||||
Support
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#include "llvm/Analysis/Passes.h"
|
||||
#include "llvm/ExecutionEngine/ExecutionEngine.h"
|
||||
#include "llvm/ExecutionEngine/JIT.h"
|
||||
#include "llvm/IR/DataLayout.h"
|
||||
#include "llvm/IR/DerivedTypes.h"
|
||||
#include "llvm/IR/IRBuilder.h"
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
#include "llvm/Analysis/Passes.h"
|
||||
#include "llvm/ExecutionEngine/ExecutionEngine.h"
|
||||
#include "llvm/ExecutionEngine/JIT.h"
|
||||
#include "llvm/IR/DataLayout.h"
|
||||
#include "llvm/IR/DerivedTypes.h"
|
||||
#include "llvm/IR/IRBuilder.h"
|
||||
|
||||
@@ -897,7 +897,6 @@ ExecutionEngine *MCJITHelper::compileModule(Module *M) {
|
||||
std::string ErrStr;
|
||||
ExecutionEngine *NewEngine = EngineBuilder(M)
|
||||
.setErrorStr(&ErrStr)
|
||||
.setUseMCJIT(true)
|
||||
.setMCJITMemoryManager(new HelpingMemoryManager(this))
|
||||
.create();
|
||||
if (!NewEngine) {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#include "llvm/Analysis/Passes.h"
|
||||
#include "llvm/ExecutionEngine/ExecutionEngine.h"
|
||||
#include "llvm/ExecutionEngine/JIT.h"
|
||||
#include "llvm/ExecutionEngine/MCJIT.h"
|
||||
#include "llvm/ExecutionEngine/ObjectCache.h"
|
||||
#include "llvm/ExecutionEngine/SectionMemoryManager.h"
|
||||
@@ -52,10 +51,6 @@ namespace {
|
||||
cl::desc("Dump IR from modules to stderr on shutdown"),
|
||||
cl::init(false));
|
||||
|
||||
cl::opt<bool> UseMCJIT(
|
||||
"use-mcjit", cl::desc("Use the MCJIT execution engine"),
|
||||
cl::init(true));
|
||||
|
||||
cl::opt<bool> EnableLazyCompilation(
|
||||
"enable-lazy-compilation", cl::desc("Enable lazy compilation when using the MCJIT engine"),
|
||||
cl::init(true));
|
||||
@@ -792,96 +787,6 @@ public:
|
||||
virtual void dump();
|
||||
};
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Helper class for JIT execution engine
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
class JITHelper : public BaseHelper {
|
||||
public:
|
||||
JITHelper(LLVMContext &Context) {
|
||||
// Make the module, which holds all the code.
|
||||
if (!InputIR.empty()) {
|
||||
TheModule = parseInputIR(InputIR, Context);
|
||||
} else {
|
||||
TheModule = new Module("my cool jit", Context);
|
||||
}
|
||||
|
||||
// Create the JIT. This takes ownership of the module.
|
||||
std::string ErrStr;
|
||||
TheExecutionEngine = EngineBuilder(TheModule).setErrorStr(&ErrStr).create();
|
||||
if (!TheExecutionEngine) {
|
||||
fprintf(stderr, "Could not create ExecutionEngine: %s\n", ErrStr.c_str());
|
||||
exit(1);
|
||||
}
|
||||
|
||||
TheFPM = new FunctionPassManager(TheModule);
|
||||
|
||||
// Set up the optimizer pipeline. Start with registering info about how the
|
||||
// target lays out data structures.
|
||||
TheFPM->add(new DataLayout(*TheExecutionEngine->getDataLayout()));
|
||||
// Provide basic AliasAnalysis support for GVN.
|
||||
TheFPM->add(createBasicAliasAnalysisPass());
|
||||
// Promote allocas to registers.
|
||||
TheFPM->add(createPromoteMemoryToRegisterPass());
|
||||
// Do simple "peephole" optimizations and bit-twiddling optzns.
|
||||
TheFPM->add(createInstructionCombiningPass());
|
||||
// Reassociate expressions.
|
||||
TheFPM->add(createReassociatePass());
|
||||
// Eliminate Common SubExpressions.
|
||||
TheFPM->add(createGVNPass());
|
||||
// Simplify the control flow graph (deleting unreachable blocks, etc).
|
||||
TheFPM->add(createCFGSimplificationPass());
|
||||
|
||||
TheFPM->doInitialization();
|
||||
}
|
||||
|
||||
virtual ~JITHelper() {
|
||||
if (TheFPM)
|
||||
delete TheFPM;
|
||||
if (TheExecutionEngine)
|
||||
delete TheExecutionEngine;
|
||||
}
|
||||
|
||||
virtual Function *getFunction(const std::string FnName) {
|
||||
assert(TheModule);
|
||||
return TheModule->getFunction(FnName);
|
||||
}
|
||||
|
||||
virtual Module *getModuleForNewFunction() {
|
||||
assert(TheModule);
|
||||
return TheModule;
|
||||
}
|
||||
|
||||
virtual void *getPointerToFunction(Function* F) {
|
||||
assert(TheExecutionEngine);
|
||||
return TheExecutionEngine->getPointerToFunction(F);
|
||||
}
|
||||
|
||||
virtual void *getPointerToNamedFunction(const std::string &Name) {
|
||||
return TheExecutionEngine->getPointerToNamedFunction(Name);
|
||||
}
|
||||
|
||||
virtual void runFPM(Function &F) {
|
||||
assert(TheFPM);
|
||||
TheFPM->run(F);
|
||||
}
|
||||
|
||||
virtual void closeCurrentModule() {
|
||||
// This should never be called for JIT
|
||||
assert(false);
|
||||
}
|
||||
|
||||
virtual void dump() {
|
||||
assert(TheModule);
|
||||
TheModule->dump();
|
||||
}
|
||||
|
||||
private:
|
||||
Module *TheModule;
|
||||
ExecutionEngine *TheExecutionEngine;
|
||||
FunctionPassManager *TheFPM;
|
||||
};
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// MCJIT helper class
|
||||
//===----------------------------------------------------------------------===//
|
||||
@@ -1034,7 +939,6 @@ ExecutionEngine *MCJITHelper::compileModule(Module *M) {
|
||||
std::string ErrStr;
|
||||
ExecutionEngine *EE = EngineBuilder(M)
|
||||
.setErrorStr(&ErrStr)
|
||||
.setUseMCJIT(true)
|
||||
.setMCJITMemoryManager(new HelpingMemoryManager(this))
|
||||
.create();
|
||||
if (!EE) {
|
||||
@@ -1194,10 +1098,8 @@ Value *UnaryExprAST::Codegen() {
|
||||
Value *OperandV = Operand->Codegen();
|
||||
if (OperandV == 0) return 0;
|
||||
Function *F;
|
||||
if (UseMCJIT)
|
||||
F = TheHelper->getFunction(MakeLegalFunctionName(std::string("unary")+Opcode));
|
||||
else
|
||||
F = TheHelper->getFunction(std::string("unary")+Opcode);
|
||||
F = TheHelper->getFunction(
|
||||
MakeLegalFunctionName(std::string("unary") + Opcode));
|
||||
if (F == 0)
|
||||
return ErrorV("Unknown unary operator");
|
||||
|
||||
@@ -1246,10 +1148,7 @@ Value *BinaryExprAST::Codegen() {
|
||||
// If it wasn't a builtin binary operator, it must be a user defined one. Emit
|
||||
// a call to it.
|
||||
Function *F;
|
||||
if (UseMCJIT)
|
||||
F = TheHelper->getFunction(MakeLegalFunctionName(std::string("binary")+Op));
|
||||
else
|
||||
F = TheHelper->getFunction(std::string("binary")+Op);
|
||||
F = TheHelper->getFunction(MakeLegalFunctionName(std::string("binary")+Op));
|
||||
assert(F && "binary operator not found!");
|
||||
|
||||
Value *Ops[] = { L, R };
|
||||
@@ -1482,10 +1381,7 @@ Function *PrototypeAST::Codegen() {
|
||||
Doubles, false);
|
||||
|
||||
std::string FnName;
|
||||
if (UseMCJIT)
|
||||
FnName = MakeLegalFunctionName(Name);
|
||||
else
|
||||
FnName = Name;
|
||||
FnName = MakeLegalFunctionName(Name);
|
||||
|
||||
Module* M = TheHelper->getModuleForNewFunction();
|
||||
Function *F = Function::Create(FT, Function::ExternalLinkage, FnName, M);
|
||||
@@ -1560,10 +1456,6 @@ Function *FunctionAST::Codegen() {
|
||||
// Validate the generated code, checking for consistency.
|
||||
verifyFunction(*TheFunction);
|
||||
|
||||
// Optimize the function.
|
||||
if (!UseMCJIT)
|
||||
TheHelper->runFPM(*TheFunction);
|
||||
|
||||
return TheFunction;
|
||||
}
|
||||
|
||||
@@ -1581,7 +1473,7 @@ Function *FunctionAST::Codegen() {
|
||||
|
||||
static void HandleDefinition() {
|
||||
if (FunctionAST *F = ParseDefinition()) {
|
||||
if (UseMCJIT && EnableLazyCompilation)
|
||||
if (EnableLazyCompilation)
|
||||
TheHelper->closeCurrentModule();
|
||||
Function *LF = F->Codegen();
|
||||
if (LF && VerboseOutput) {
|
||||
@@ -1671,10 +1563,8 @@ double printlf() {
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
InitializeNativeTarget();
|
||||
if (UseMCJIT) {
|
||||
InitializeNativeTargetAsmPrinter();
|
||||
InitializeNativeTargetAsmParser();
|
||||
}
|
||||
InitializeNativeTargetAsmPrinter();
|
||||
InitializeNativeTargetAsmParser();
|
||||
LLVMContext &Context = getGlobalContext();
|
||||
|
||||
cl::ParseCommandLineOptions(argc, argv,
|
||||
@@ -1690,10 +1580,7 @@ int main(int argc, char **argv) {
|
||||
BinopPrecedence['*'] = 40; // highest.
|
||||
|
||||
// Make the Helper, which holds all the code.
|
||||
if (UseMCJIT)
|
||||
TheHelper = new MCJITHelper(Context);
|
||||
else
|
||||
TheHelper = new JITHelper(Context);
|
||||
TheHelper = new MCJITHelper(Context);
|
||||
|
||||
// Prime the first token.
|
||||
if (!SuppressPrompts)
|
||||
|
||||
@@ -778,7 +778,6 @@ void *MCJITHelper::getPointerToFunction(Function* F) {
|
||||
std::string ErrStr;
|
||||
ExecutionEngine *NewEngine = EngineBuilder(OpenModule)
|
||||
.setErrorStr(&ErrStr)
|
||||
.setUseMCJIT(true)
|
||||
.setMCJITMemoryManager(new HelpingMemoryManager(this))
|
||||
.create();
|
||||
if (!NewEngine) {
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
#include "llvm/Analysis/Passes.h"
|
||||
#include "llvm/ExecutionEngine/ExecutionEngine.h"
|
||||
#include "llvm/ExecutionEngine/JIT.h"
|
||||
#include "llvm/IR/DataLayout.h"
|
||||
#include "llvm/IR/DerivedTypes.h"
|
||||
#include "llvm/IR/IRBuilder.h"
|
||||
|
||||
@@ -808,7 +808,6 @@ ExecutionEngine *MCJITHelper::compileModule(Module *M) {
|
||||
std::string ErrStr;
|
||||
ExecutionEngine *NewEngine = EngineBuilder(M)
|
||||
.setErrorStr(&ErrStr)
|
||||
.setUseMCJIT(true)
|
||||
.setMCJITMemoryManager(new HelpingMemoryManager(this))
|
||||
.create();
|
||||
if (!NewEngine) {
|
||||
|
||||
@@ -2,7 +2,6 @@ set(LLVM_LINK_COMPONENTS
|
||||
Core
|
||||
ExecutionEngine
|
||||
Interpreter
|
||||
JIT
|
||||
Support
|
||||
nativecodegen
|
||||
)
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
|
||||
#include "llvm/ExecutionEngine/GenericValue.h"
|
||||
#include "llvm/ExecutionEngine/Interpreter.h"
|
||||
#include "llvm/ExecutionEngine/JIT.h"
|
||||
#include "llvm/IR/Constants.h"
|
||||
#include "llvm/IR/DerivedTypes.h"
|
||||
#include "llvm/IR/Instructions.h"
|
||||
|
||||
Reference in New Issue
Block a user