23 IRBuilderBase::InsertPoint IP;
24 std::deque<Var> Arguments;
25 std::deque<Var> Variables;
28 enum class ScopeKind { FUNCTION, IF, FOR };
33 IRBuilderBase::InsertPoint ContIP;
35 explicit Scope(
const char *File,
int Line, ScopeKind Kind,
36 IRBuilderBase::InsertPoint ContIP)
37 : File(File), Line(Line), Kind(Kind), ContIP(ContIP) {}
39 std::vector<Scope> Scopes;
41 std::string toString(ScopeKind Kind) {
43 case ScopeKind::FUNCTION:
51 std::to_string(
static_cast<int>(Kind)));
56 Func(FunctionCallee FC);
60 AllocaInst *
emitAlloca(Type *Ty, StringRef Name);
65 Type *PointerElemType =
nullptr);
71 return Variables.emplace_back(
77 auto &EntryBB = F->getEntryBlock();
78 IP = IRBuilderBase::InsertPoint(&EntryBB, EntryBB.end());
84 "arg." + std::to_string(Arguments.size()));
86 auto *Arg = F->getArg(Arguments.size());
87 IRB.CreateStore(Arg, Alloca);
89 Arguments.emplace_back(
93 IRB.ClearInsertionPoint();
99 int Line = __builtin_LINE());
102 void beginIf(
Var &CondVar,
const char *File = __builtin_FILE(),
103 int Line = __builtin_LINE());
107 const char *File = __builtin_FILE(),
108 int Line = __builtin_LINE());
111 template <
typename RetT,
typename... ArgT>
void call(StringRef Name);
115 void ret(std::optional<std::reference_wrapper<Var>> OptRet = std::nullopt);
void beginFor(Var &IterVar, Var &InitVar, Var &UpperBound, Var &IncVar, const char *File=__builtin_FILE(), int Line=__builtin_LINE())
Definition Func.cpp:146