Fix the compatiblity issues with llvm version aff028f7d8322c625422febd3d8b9794746cdc5b
This commit is contained in:
parent
76a9106559
commit
3e82b71903
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
Checks: 'clang-diagnostic-*,clang-analyzer-*,-*,clang-analyzer-*,cert-*,-cert-err58-cpp,concurrency-*,llvm-*,performance-*,readability-*'
|
||||
Checks: 'clang-diagnostic-*,clang-analyzer-*,-*,clang-analyzer-*,cert-*,-cert-err58-cpp,concurrency-*,llvm-*,performance-*,-readability-identifier-length*,readability-*'
|
||||
WarningsAsErrors: 'clang-diagnostic-*,clang-analyzer-*,-*,clang-analyzer-*,cert-*,-cert-err58-cpp,concurrency-*,llvm-*,performance-*,readability-*'
|
||||
HeaderFilterRegex: ''
|
||||
AnalyzeTemporaryDtors: false
|
||||
|
|
|
@ -18,6 +18,11 @@ Setup the githook and install dependencies using the following commands:
|
|||
- CCache (If you want faster builds specially with the LLVM)
|
||||
|
||||
** LLVM Installation
|
||||
|
||||
*Important Note*: We're trying to keep Serene up to date with the LLVM release cycle till we get
|
||||
to our first release. So we use the development version of the LLVM. Currently we are using
|
||||
=aff028f7d8322c625422febd3d8b9794746cdc5b= commit as our reference.
|
||||
|
||||
MLIR is a part of the [[https://llvm.org][LLVM]] project and in order to build it we need to build the LLVM itself as well.
|
||||
Here is a quick guide to build the latest version of the LLVM and MLIR.
|
||||
|
||||
|
|
|
@ -95,8 +95,8 @@ public:
|
|||
|
||||
baseLayer.emit(std::move(mr), compileAst(ns, e));
|
||||
}
|
||||
|
||||
orc::SymbolFlagsMap getInterface(Namespace &ns, exprs::Ast &e);
|
||||
orc::MaterializationUnit::Interface getInterface(Namespace &ns,
|
||||
exprs::Ast &e);
|
||||
};
|
||||
|
||||
/// NS Layer ==================================================================
|
||||
|
@ -157,7 +157,7 @@ public:
|
|||
baseLayer.emit(std::move(mr), compileNS(ns));
|
||||
}
|
||||
|
||||
orc::SymbolFlagsMap getInterface(serene::Namespace &ns);
|
||||
orc::MaterializationUnit::Interface getInterface(serene::Namespace &ns);
|
||||
};
|
||||
} // namespace jit
|
||||
} // namespace serene
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#define LLVM_PATCHES_H
|
||||
|
||||
#include <llvm/ADT/DenseMap.h>
|
||||
#include <llvm/ADT/Hashing.h>
|
||||
|
||||
namespace llvm {
|
||||
|
||||
|
|
|
@ -48,15 +48,16 @@ llvm::orc::ThreadSafeModule compileAst(Namespace &ns, exprs::Ast &ast) {
|
|||
|
||||
AstMaterializationUnit::AstMaterializationUnit(Namespace &ns, AstLayer &l,
|
||||
exprs::Ast &ast)
|
||||
: MaterializationUnit(l.getInterface(ns, ast), nullptr), ns(ns),
|
||||
astLayer(l), ast(ast){};
|
||||
: orc::MaterializationUnit(l.getInterface(ns, ast)), ns(ns), astLayer(l),
|
||||
ast(ast){};
|
||||
|
||||
void AstMaterializationUnit::materialize(
|
||||
std::unique_ptr<orc::MaterializationResponsibility> r) {
|
||||
astLayer.emit(std::move(r), ns, ast);
|
||||
}
|
||||
|
||||
orc::SymbolFlagsMap AstLayer::getInterface(Namespace &ns, exprs::Ast &e) {
|
||||
orc::MaterializationUnit::Interface AstLayer::getInterface(Namespace &ns,
|
||||
exprs::Ast &e) {
|
||||
orc::SymbolFlagsMap Symbols;
|
||||
auto symList = ns.getSymList();
|
||||
unsigned index = symList.size();
|
||||
|
@ -67,7 +68,7 @@ orc::SymbolFlagsMap AstLayer::getInterface(Namespace &ns, exprs::Ast &e) {
|
|||
if (err) {
|
||||
// TODO: Fix this by a call to diag engine or return the err
|
||||
llvm::outs() << "Fixme: semantic err\n";
|
||||
return Symbols;
|
||||
return orc::MaterializationUnit::Interface(std::move(Symbols), nullptr);
|
||||
}
|
||||
|
||||
auto &env = ns.getRootEnv();
|
||||
|
@ -92,7 +93,7 @@ orc::SymbolFlagsMap AstLayer::getInterface(Namespace &ns, exprs::Ast &e) {
|
|||
};
|
||||
|
||||
std::for_each(symList.begin() + index, symList.end(), populateTableFn);
|
||||
return Symbols;
|
||||
return orc::MaterializationUnit::Interface(std::move(Symbols), nullptr);
|
||||
}
|
||||
|
||||
/// NS Layer ==================================================================
|
||||
|
@ -111,7 +112,7 @@ llvm::orc::ThreadSafeModule compileNS(Namespace &ns) {
|
|||
};
|
||||
|
||||
NSMaterializationUnit::NSMaterializationUnit(NSLayer &l, Namespace &ns)
|
||||
: MaterializationUnit(l.getInterface(ns), nullptr), nsLayer(l), ns(ns){};
|
||||
: MaterializationUnit(l.getInterface(ns)), nsLayer(l), ns(ns){};
|
||||
|
||||
void NSMaterializationUnit::materialize(
|
||||
std::unique_ptr<orc::MaterializationResponsibility> r) {
|
||||
|
@ -139,7 +140,8 @@ llvm::Error NSLayer::add(orc::ResourceTrackerSP &rt, llvm::StringRef nsname,
|
|||
std::make_unique<NSMaterializationUnit>(*this, *ns), rt);
|
||||
}
|
||||
|
||||
orc::SymbolFlagsMap NSLayer::getInterface(serene::Namespace &ns) {
|
||||
orc::MaterializationUnit::Interface
|
||||
NSLayer::getInterface(serene::Namespace &ns) {
|
||||
orc::SymbolFlagsMap Symbols;
|
||||
|
||||
for (auto &k : ns.getRootEnv()) {
|
||||
|
@ -156,7 +158,7 @@ orc::SymbolFlagsMap NSLayer::getInterface(serene::Namespace &ns) {
|
|||
Symbols[mangledSym] = llvm::JITSymbolFlags(flags);
|
||||
}
|
||||
|
||||
return Symbols;
|
||||
return orc::MaterializationUnit::Interface(std::move(Symbols), nullptr);
|
||||
}
|
||||
|
||||
} // namespace serene::jit
|
||||
|
|
|
@ -56,11 +56,13 @@ ValueOpLowering::matchAndRewrite(serene::slir::ValueOp op,
|
|||
auto *entryBlock = fn.addEntryBlock();
|
||||
rewriter.setInsertionPointToStart(entryBlock);
|
||||
|
||||
// Since we only support i64 at the moment we use ConstantIntOp
|
||||
auto retVal = rewriter
|
||||
.create<mlir::ConstantIntOp>(loc, (int64_t)value,
|
||||
rewriter.getI64Type())
|
||||
.getResult();
|
||||
// Since we only support i64 at the moment we use ConstantOp
|
||||
auto retVal =
|
||||
rewriter
|
||||
.create<mlir::ConstantOp>(
|
||||
loc, mlir::IntegerAttr::get(rewriter.getI64Type(), value),
|
||||
rewriter.getI64Type())
|
||||
.getResult();
|
||||
|
||||
UNUSED(rewriter.create<mlir::ReturnOp>(loc, retVal));
|
||||
|
||||
|
@ -92,7 +94,7 @@ FnOpLowering::matchAndRewrite(serene::slir::FnOp op,
|
|||
llvm::SmallVector<mlir::Type, 4> arg_types;
|
||||
|
||||
for (const auto &arg : args) {
|
||||
auto attr = std::get<1>(arg).dyn_cast<mlir::TypeAttr>();
|
||||
auto attr = arg.getValue().dyn_cast<mlir::TypeAttr>();
|
||||
|
||||
if (!attr) {
|
||||
op.emitError("It's not a type attr");
|
||||
|
@ -108,10 +110,11 @@ FnOpLowering::matchAndRewrite(serene::slir::FnOp op,
|
|||
|
||||
rewriter.setInsertionPointToStart(entryBlock);
|
||||
|
||||
auto retVal =
|
||||
rewriter
|
||||
.create<mlir::ConstantIntOp>(loc, (int64_t)3, rewriter.getI64Type())
|
||||
.getResult();
|
||||
auto retVal = rewriter
|
||||
.create<mlir::ConstantOp>(
|
||||
loc, mlir::IntegerAttr::get(rewriter.getI64Type(), 3),
|
||||
rewriter.getI64Type())
|
||||
.getResult();
|
||||
|
||||
rewriter.create<mlir::ReturnOp>(loc, retVal);
|
||||
|
||||
|
|
|
@ -35,12 +35,12 @@
|
|||
#include <llvm/ADT/SmallString.h>
|
||||
#include <llvm/ADT/StringRef.h>
|
||||
#include <llvm/IR/LegacyPassManager.h>
|
||||
//#include <llvm/MC/TargetRegistry.h>
|
||||
#include <llvm/Support/CommandLine.h>
|
||||
#include <llvm/Support/FileSystem.h>
|
||||
#include <llvm/Support/FormatVariadic.h>
|
||||
#include <llvm/Support/Host.h>
|
||||
#include <llvm/Support/Path.h>
|
||||
#include <llvm/Support/TargetRegistry.h>
|
||||
#include <llvm/Support/raw_ostream.h>
|
||||
#include <llvm/Target/TargetMachine.h>
|
||||
#include <llvm/Target/TargetOptions.h>
|
||||
|
|
Loading…
Reference in New Issue