From 2f3c7cc3d41a1cde7cc5de64baeb6302005db6c5 Mon Sep 17 00:00:00 2001 From: "A. R. Shajii" Date: Thu, 4 Nov 2021 13:04:35 -0400 Subject: [PATCH] Set JIT flag on LLVMVisitor --- codon/compiler/jit.cpp | 11 +++-------- codon/sir/llvm/llvisitor.h | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/codon/compiler/jit.cpp b/codon/compiler/jit.cpp index 930abb90..6896d894 100644 --- a/codon/compiler/jit.cpp +++ b/codon/compiler/jit.cpp @@ -25,6 +25,7 @@ JIT::JIT(const std::string &argv0) engine = {}; seqassert(false, "JIT engine creation error"); } + compiler->getLLVMVisitor()->setJIT(true); } llvm::Error JIT::init() { @@ -34,17 +35,11 @@ llvm::Error JIT::init() { auto transformed = ast::SimplifyVisitor::apply( cache, std::make_shared(), JIT_FILENAME, {}); - auto p = transformSimplified(transformed); + auto typechecked = ast::TypecheckVisitor::apply(cache, std::move(transformed)); + ast::TranslateVisitor::apply(cache, std::move(typechecked)); cache->isJit = true; // we still need main(), so set isJit after it has been set module->setSrcInfo({JIT_FILENAME, 0, 0, 0}); - for (auto var : p.second) - llvisitor->registerGlobal(var); - for (auto var : p.second) { - if (auto *func = ir::cast(var)) - func->accept(*llvisitor); - } - module->accept(*llvisitor); auto pair = llvisitor->takeModule(); diff --git a/codon/sir/llvm/llvisitor.h b/codon/sir/llvm/llvisitor.h index 87e3cd22..751da353 100644 --- a/codon/sir/llvm/llvisitor.h +++ b/codon/sir/llvm/llvisitor.h @@ -229,6 +229,24 @@ public: explicit LLVMVisitor(bool debug = false, bool jit = false, const std::string &flags = ""); + /// @return true if in debug mode, false otherwise + bool getDebug() const { return db.debug; } + /// Sets debug status. + /// @param d true if debug mode + void setDebug(bool d = true) { db.debug = d; } + + /// @return true if in JIT mode, false otherwise + bool getJIT() const { return db.jit; } + /// Sets JIT status. + /// @param j true if JIT mode + void setJIT(bool j = true) { db.jit = j; } + + /// @return program flags + std::string getFlags() const { return db.flags; } + /// Sets program flags. + /// @param f flags + void setFlags(const std::string &f) { db.flags = f; } + llvm::LLVMContext &getContext() { return *context; } llvm::IRBuilder<> &getBuilder() { return *B; } llvm::Module *getModule() { return M.get(); }