llvm-journey

LLVM Journey
git clone git://0xff.ir/g/llvm-journey.git
Log | Files | Refs | README | LICENSE

commit 2f9f2455aaeb0ab7acd1717676e078196d135e76
parent a6d9d5d3c4b6ac3c256361d919a3c3975378321c
Author: Mohammad-Reza Nabipoor <m.nabipoor@yahoo.com>
Date:   Sun, 13 Sep 2020 05:31:28 +0430

kaleidoscope_codegen: Add name param to mkfunc

Function name is no longer auto-generated. User should choose a
name.

Diffstat:
Mkaleidoscope_codegen.cpp | 10++--------
Mkaleidoscope_codegen.hpp | 4+++-
Mtests/kaleidoscope_codegen.test.cpp | 2+-
3 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/kaleidoscope_codegen.cpp b/kaleidoscope_codegen.cpp @@ -4,7 +4,6 @@ #include "kaleidoscope_ast.hpp" #include <algorithm> -#include <cstdio> #include <string> #include <utility> #include <vector> @@ -274,17 +273,12 @@ kal::codegen(const Function& f) } llvm::Function* -kal::mkfunc(ASTNode* f, ASTNode* l) +kal::mkfunc(const std::string& name, ASTNode* f, ASTNode* l) { - static std::size_t i; - char fname[1024]; - if (f == l) return nullptr; - snprintf(fname, sizeof(fname), "kaleidoscope_body_%zu__", i++); - - auto func = codegen(kal::Prototype{ fname, {} }); + auto func = codegen(kal::Prototype{ name, {} }); ASSERT_ALWAYS(func != nullptr); diff --git a/kaleidoscope_codegen.hpp b/kaleidoscope_codegen.hpp @@ -1,6 +1,8 @@ #pragma once +#include <string> + namespace llvm { class Value; class Function; @@ -35,7 +37,7 @@ llvm::Function* codegen(const Function&); llvm::Function* -mkfunc(kal::ASTNode* f, kal::ASTNode* l); +mkfunc(const std::string& name, kal::ASTNode* f, kal::ASTNode* l); void codegen_reset(void); diff --git a/tests/kaleidoscope_codegen.test.cpp b/tests/kaleidoscope_codegen.test.cpp @@ -265,7 +265,7 @@ sin(2.72) + formula(1, 2, 3) auto f = pd.stmts.data(); auto l = f + pd.stmts.size(); - REQUIRE(to_string(kal::mkfunc(f, l)) == + REQUIRE(to_string(kal::mkfunc("kaleidoscope_body_0__", f, l)) == "define double @kaleidoscope_body_0__() {\n" "entry:\n" " %calltmp = call double @sin(double 2.720000e+00)\n"