From 425323f917173bca5a75810d41638811fd5fe0c9 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sat, 15 Jun 2024 13:17:31 -0400 Subject: [PATCH] xo-jit: ++ extend example --- example/CMakeLists.txt | 1 + example/ex1/ex1.cpp | 49 +++++++++++++++++++++++++++++++++++++++--- 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 4151ec21..0cb5ee51 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -1 +1,2 @@ add_subdirectory(ex1) +add_subdirectory(ex_kaleidoscope4) diff --git a/example/ex1/ex1.cpp b/example/ex1/ex1.cpp index d86b77f4..01b914d8 100644 --- a/example/ex1/ex1.cpp +++ b/example/ex1/ex1.cpp @@ -8,8 +8,33 @@ #include "xo/expression/Variable.hpp" #include +#include "llvm/ADT/APFloat.h" +#include "llvm/ADT/STLExtras.h" +#include "llvm/IR/BasicBlock.h" +#include "llvm/IR/Constants.h" +#include "llvm/IR/DerivedTypes.h" +#include "llvm/IR/Function.h" +#include "llvm/IR/IRBuilder.h" +#include "llvm/IR/LLVMContext.h" +#include "llvm/IR/Module.h" +#include "llvm/IR/PassManager.h" +#include "llvm/IR/Type.h" +#include "llvm/IR/Verifier.h" +#include "llvm/Passes/PassBuilder.h" +#include "llvm/Passes/StandardInstrumentations.h" +#include "llvm/Support/TargetSelect.h" +#include "llvm/Target/TargetMachine.h" +#include "llvm/Transforms/InstCombine/InstCombine.h" +#include "llvm/Transforms/Scalar.h" +#include "llvm/Transforms/Scalar/GVN.h" +#include "llvm/Transforms/Scalar/Reassociate.h" +#include "llvm/Transforms/Scalar/SimplifyCFG.h" + +//double foo(double x) { return x; } + int main() { + using xo::scope; using xo::jit::Jit; using xo::ast::make_constant; using xo::ast::make_primitive; @@ -22,11 +47,23 @@ main() { //using xo::ast::make_constant; - auto jit = Jit::make(); + static llvm::ExitOnError llvm_exit_on_err; + + llvm::InitializeNativeTarget(); + llvm::InitializeNativeTargetAsmPrinter(); + llvm::InitializeNativeTargetAsmParser(); + + auto jit = llvm_exit_on_err(Jit::make_aux()); + + //static_assert(std::is_function_v); + + scope log(XO_DEBUG(true)); { auto expr = make_constant(7.0); + log && log(xtag("expr", expr)); + auto llvm_ircode = jit->codegen(expr); if (llvm_ircode) { @@ -42,7 +79,9 @@ main() { } { - auto expr = make_primitive("sqrt", ::sqrt); + auto expr = make_primitive("sqrt", &sqrt); + + log && log(xtag("expr", expr)); auto llvm_ircode = jit->codegen(expr); @@ -61,11 +100,13 @@ main() { { /* (sqrt 2) */ - auto fn = make_primitive("sqrt", ::sqrt); + auto fn = make_primitive("sqrt", &sqrt); auto arg = make_constant(2.0); auto call = make_apply(fn, arg); + log && log(xtag("expr", call)); + auto llvm_ircode = jit->codegen(call); if (llvm_ircode) { @@ -95,6 +136,8 @@ main() { {"x"}, call2); + log && log(xtag("expr", lambda)); + auto llvm_ircode = jit->codegen(lambda); if (llvm_ircode) {