1#ifndef PROTEUS_FRONTEND_FUNC_HPP
2#define PROTEUS_FRONTEND_FUNC_HPP
6#include <llvm/IR/IRBuilder.h>
7#include <llvm/IR/Module.h>
27 IRBuilderBase::InsertPoint
IP;
41 IRBuilderBase::InsertPoint
ContIP)
56 std::to_string(
static_cast<int>(Kind)));
70 Type *PointerElemType =
nullptr);
111 auto &EntryBB = F->getEntryBlock();
112 IP = IRBuilderBase::InsertPoint(&EntryBB, EntryBB.end());
118 "arg." + std::to_string(
Arguments.size()));
121 IRB.CreateStore(Arg, Alloca);
127 IRB.ClearInsertionPoint();
133 int Line = __builtin_LINE());
136 void beginIf(
Var &CondVar,
const char *File = __builtin_FILE(),
137 int Line = __builtin_LINE());
141 const char *File = __builtin_FILE(),
142 int Line = __builtin_LINE());
145 template <
typename RetT,
typename... ArgT>
146 std::enable_if_t<!std::is_void_v<RetT>,
Var &>
call(StringRef
Name);
147 template <
typename RetT,
typename... ArgT>
148 std::enable_if_t<std::is_void_v<RetT>,
void>
call(StringRef
Name);
154 void ret(std::optional<std::reference_wrapper<Var>> OptRet = std::nullopt);
159 Name = NewName.str();
165template <
typename RetT,
typename... ArgT>
class Func final :
public FuncBase {
168 RetT (*CompiledFunc)(ArgT...) =
nullptr;
171 template <std::size_t... Is>
auto getArgsImpl(std::index_sequence<Is...>) {
172 return std::tie(
getArg(Is)...);
181 auto getArgs() {
return getArgsImpl(std::index_sequence_for<ArgT...>{}); }
186 CompiledFunc = CompiledFuncIn;
char int void ** Args
Definition CompilerInterfaceHost.cpp:21
#define PROTEUS_FATAL_ERROR(x)
Definition Error.h:7
Definition Dispatcher.hpp:46
void declArgs()
Definition Func.hpp:109
std::enable_if_t<!std::is_void_v< RetT >, Var & > call(StringRef Name)
Definition JitFrontend.hpp:224
std::vector< Scope > Scopes
Definition Func.hpp:44
void setName(StringRef NewName)
Definition Func.hpp:158
Var & declVarInternal(StringRef Name, Type *Ty, Type *PointerElemType=nullptr)
Definition Func.cpp:18
void beginIf(Var &CondVar, const char *File=__builtin_FILE(), int Line=__builtin_LINE())
Definition Func.cpp:98
Var & defVar(T Val, StringRef Name="var")
Definition Func.hpp:80
auto defRuntimeConsts(ArgT &&...Args)
Definition Func.hpp:105
void endFunction()
Definition Func.cpp:47
void beginFunction(const char *File=__builtin_FILE(), int Line=__builtin_LINE())
Definition Func.cpp:24
IRBuilder IRB
Definition Func.hpp:26
Var & defRuntimeConst(T Val, StringRef Name="run.const.var")
Definition Func.hpp:93
Function * getFunction()
Definition Func.cpp:60
ScopeKind
Definition Func.hpp:33
std::deque< Var > Arguments
Definition Func.hpp:28
void endIf()
Definition Func.cpp:132
Var & getArg(unsigned int ArgNo)
Definition Func.cpp:67
std::string Name
Definition Func.hpp:31
FunctionCallee FC
Definition Func.hpp:25
std::deque< Var > RuntimeConstants
Definition Func.hpp:30
IRBuilderBase::InsertPoint IP
Definition Func.hpp:27
JitModule & J
Definition Func.hpp:24
void ret(std::optional< std::reference_wrapper< Var > > OptRet=std::nullopt)
Definition Func.cpp:81
std::deque< Var > Variables
Definition Func.hpp:29
StringRef getName() const
Definition Func.hpp:156
void beginFor(Var &IterVar, Var &InitVar, Var &UpperBound, Var &IncVar, const char *File=__builtin_FILE(), int Line=__builtin_LINE())
Definition Func.cpp:148
AllocaInst * emitAlloca(Type *Ty, StringRef Name)
Definition Func.cpp:69
void endFor()
Definition Func.cpp:206
Var & callBuiltin(function_ref< Var &(FuncBase &)> Lower)
Definition Func.hpp:150
std::string toString(ScopeKind Kind)
Definition Func.hpp:46
IRBuilderBase & getIRBuilder()
Definition Func.cpp:12
Var & declVar(StringRef Name="var")
Definition Func.hpp:72
Func(JitModule &J, FunctionCallee FC, Dispatcher &Dispatch)
Definition Func.hpp:176
auto getCompiledFunc() const
Definition Func.hpp:183
auto getArgs()
Definition Func.hpp:181
void setCompiledFunc(RetT(*CompiledFuncIn)(ArgT...))
Definition Func.hpp:185
RetT operator()(ArgT... Args)
Definition JitFrontend.hpp:248
Definition JitFrontend.hpp:26
Definition CppJitModule.cpp:21
Scope(const char *File, int Line, ScopeKind Kind, IRBuilderBase::InsertPoint ContIP)
Definition Func.hpp:40
int Line
Definition Func.hpp:36
ScopeKind Kind
Definition Func.hpp:37
std::string File
Definition Func.hpp:35
IRBuilderBase::InsertPoint ContIP
Definition Func.hpp:38
Definition TypeMap.hpp:13