get ORC version to work correctly

gccjit-ravi534
Dibyendu Majumdar 7 years ago
parent bf173e28dc
commit 6c608a38b5

@ -1,5 +1,6 @@
mkdir llvm64d
cd llvm64d
rem cmake -DCMAKE_INSTALL_PREFIX=c:\ravi64llvmd -G "Visual Studio 14 Win64" -DLLVM_JIT=ON -DLLVM_DIR=c:\LLVM37debug\share\llvm\cmake ..
cmake -DSTATIC_BUILD=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=c:\d\ravi64llvmd -G "Visual Studio 15 2017 Win64" -DLLVM_JIT=ON -DEMBEDDED_DMRC=ON -DLLVM_DIR=c:\d\LLVM39D64\lib\cmake\llvm ..
rem cmake -DSTATIC_BUILD=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=c:\d\ravi64llvmd -G "Visual Studio 15 2017 Win64" -DLLVM_JIT=ON -DEMBEDDED_DMRC=ON -DLLVM_DIR=c:\d\LLVM39D64\lib\cmake\llvm ..
cmake -DCMAKE_INSTALL_PREFIX=c:\ravi -G "Visual Studio 15 2017 Win64" -DLLVM_JIT=ON -DLLVM_DIR=c:\d\LLVM5_64D\lib\cmake\llvm ..
cd ..

@ -60,7 +60,11 @@
#include "llvm/Transforms/Scalar.h"
#include "llvm/Support/FormattedStream.h"
#define USE_ORC_JIT 1
#if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 9 || LLVM_VERSION_MAJOR >= 4
#define USE_ORC_JIT 0
#else
#define USE_ORC_JIT 0
#endif
#ifdef USE_ORC_JIT
#include "llvm/ADT/STLExtras.h"

@ -520,7 +520,7 @@ class RaviJITModule {
RaviJITModule(RaviJITState *owner);
~RaviJITModule();
#ifndef USE_ORC_JIT
#if !USE_ORC_JIT
llvm::Module *module() const { return module_; }
llvm::ExecutionEngine *engine() const { return engine_; }
#else
@ -600,7 +600,7 @@ class RaviJITFunction {
llvm::Function *function() const { return function_; }
llvm::Module *module() const { return module_->module(); }
std::shared_ptr<RaviJITModule> raviModule() const { return module_; }
#ifndef USE_ORC_JIT
#if !USE_ORC_JIT
llvm::ExecutionEngine *engine() const { return module_->engine(); }
#endif
RaviJITState *owner() const { return module_->owner(); }

@ -133,7 +133,7 @@ RaviJITState::RaviJITState()
llvm::InitializeNativeTargetAsmPrinter();
llvm::InitializeNativeTargetAsmParser();
// TODO see email trail on resolving symbols in process
// llvm::sys::DynamicLibrary::LoadLibraryPermanently(nullptr);
llvm::sys::DynamicLibrary::LoadLibraryPermanently(nullptr);
init++;
}
triple_ = llvm::sys::getProcessTriple();
@ -148,8 +148,12 @@ RaviJITState::RaviJITState()
context_ = new llvm::LLVMContext();
#if USE_ORC_JIT
TM = std::unique_ptr<llvm::TargetMachine>(
llvm::EngineBuilder().selectTarget());
llvm::EngineBuilder eengineBuilder;
llvm::SmallVector<std::string, 1> attrs;
auto target = eengineBuilder.selectTarget();
TM = std::unique_ptr<llvm::TargetMachine>(target);
// TM->setFastISel(true);
TM->setO0WantsFastISel(true);
DL = std::make_unique<llvm::DataLayout>(TM->createDataLayout());
ObjectLayer = std::make_unique<ObjectLayerT>(
@ -280,6 +284,7 @@ void RaviJITState::addGlobalSymbol(const std::string &name, void *address) {
llvm::sys::DynamicLibrary::AddSymbol(name, address);
}
#if USE_ORC_JIT
RaviJITState::ModuleHandle RaviJITState::addModule(
std::unique_ptr<llvm::Module> M) {
// Build our symbol resolver:
@ -308,12 +313,15 @@ llvm::JITSymbol RaviJITState::findSymbol(const std::string Name) {
std::string MangledName;
llvm::raw_string_ostream MangledNameStream(MangledName);
llvm::Mangler::getNameWithPrefix(MangledNameStream, Name, *DL);
return OptimizeLayer->findSymbol(MangledNameStream.str(), true);
// printf("Name %s Mangled Name %s\n", Name.c_str(),
// MangledNameStream.str().c_str());
return OptimizeLayer->findSymbol(MangledNameStream.str(), false);
}
void RaviJITState::removeModule(ModuleHandle H) {
llvm::cantFail(OptimizeLayer->removeModule(H));
}
#endif
void RaviJITState::dump() { types_->dump(); }
@ -333,6 +341,7 @@ RaviJITModule::RaviJITModule(RaviJITState *owner)
std::string moduleName(buf);
#if USE_ORC_JIT
module_ = std::make_unique<llvm::Module>(moduleName, owner->context());
module_->setDataLayout(owner_->getTargetMachine().createDataLayout());
#else
module_ = new llvm::Module(moduleName, owner->context());
#endif
@ -374,9 +383,6 @@ RaviJITModule::RaviJITModule(RaviJITState *owner)
builder.setUseMCJIT(true);
#endif
builder.setEngineKind(llvm::EngineKind::JIT);
llvm::TargetOptions TO;
TO.EnableFastISel = true;
builder.setTargetOptions(TO);
std::string errStr;
builder.setErrorStr(&errStr);
engine_ = builder.create();
@ -399,7 +405,7 @@ RaviJITModule::~RaviJITModule() {
// module as it would have been deleted by the engine
delete module_;
#else
owner()->removeModule(module_handle_);
owner()->removeModule(module_handle_);
#endif
owner_->decr_allocated_modules();
#if 1
@ -428,7 +434,9 @@ RaviJITFunction::RaviJITFunction(lua_CFunction *p,
function_(nullptr),
ptr_(nullptr),
func_ptrptr_(p) {
function_ = llvm::Function::Create(type, linkage, name, module_->module());
auto M = module_->module();
lua_assert(M);
function_ = llvm::Function::Create(type, linkage, name, M);
id_ = module_->addFunction(this);
}
@ -436,7 +444,9 @@ RaviJITFunction::RaviJITFunction(lua_CFunction *p,
const std::shared_ptr<RaviJITModule> &module,
const std::string &name)
: module_(module), name_(name), ptr_(nullptr), func_ptrptr_(p) {
function_ = module_->module()->getFunction(name);
auto M = module_->module();
lua_assert(M);
function_ = M->getFunction(name);
id_ = module_->addFunction(this);
}
@ -447,6 +457,7 @@ RaviJITFunction::~RaviJITFunction() {
}
void RaviJITModule::runpasses(bool dumpAsm) {
if (!module_) return;
#if !USE_ORC_JIT
#if LLVM_VERSION_MAJOR > 3 || LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
using llvm::legacy::FunctionPassManager;
@ -542,6 +553,8 @@ void RaviJITModule::runpasses(bool dumpAsm) {
}
void RaviJITModule::finalize(bool doDump) {
lua_assert(module_);
if (!module_) return;
#if !USE_ORC_JIT
// Following will generate very verbose dump when machine code is
// produced below
@ -557,6 +570,7 @@ void RaviJITModule::finalize(bool doDump) {
// is called which requires the code to have been generated.
engine_->finalizeObject();
#else
// module_->dump();
module_handle_ = owner()->addModule(std::move(module_));
#endif
for (int i = 0; i < functions_.size(); i++) {
@ -579,6 +593,7 @@ void RaviJITFunction::setFunctionPtr() {
*func_ptrptr_ = (lua_CFunction)ptr_;
}
#else
lua_assert(module_handle_);
if (function_) {
auto symbol = owner()->findSymbol(name());
if (symbol) {
@ -609,7 +624,7 @@ llvm::Function *RaviJITModule::addExternFunction(llvm::FunctionType *type,
void RaviJITModule::dump() {
#if defined(LLVM_ENABLE_DUMP)
module_->dump();
if (module_) module_->dump();
#endif
}

Loading…
Cancel
Save