mini-llvm 0.1.0
Loading...
Searching...
No Matches
BasicBlockBuilder.h
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2
3#pragma once
4
5#include <concepts>
6#include <memory>
7#include <utility>
8
11
12namespace mini_llvm::mir {
13
15public:
16 BasicBlockBuilder() = default;
17
19 : block_(block), pos_(pos) {}
20
22 : block_(block), pos_(block->end()) {}
23
25 block_ = block;
26 pos_ = pos;
27 }
28
29 void setPos(BasicBlock *block) {
30 setPos(block, block->end());
31 }
32
33 template <typename T>
34 requires std::derived_from<T, Instruction>
35 T &add(std::unique_ptr<T> I) const {
36 return block_->add(pos_, std::move(I));
37 }
38
39private:
40 BasicBlock *block_{};
42};
43
44} // namespace mini_llvm::mir
BasicBlockBuilder(BasicBlock *block, BasicBlock::const_iterator pos)
Definition BasicBlockBuilder.h:18
T & add(std::unique_ptr< T > I) const
Definition BasicBlockBuilder.h:35
BasicBlockBuilder(BasicBlock *block)
Definition BasicBlockBuilder.h:21
void setPos(BasicBlock *block, BasicBlock::const_iterator pos)
Definition BasicBlockBuilder.h:24
void setPos(BasicBlock *block)
Definition BasicBlockBuilder.h:29
Definition BasicBlock.h:24
iterator end()
Definition BasicBlock.h:59
IndirectIterator< InstructionList::const_iterator, const Instruction > const_iterator
Definition BasicBlock.h:29
Definition BasicBlock.h:22