13#include <unordered_set>
25 using InstructionList = std::list<std::unique_ptr<Instruction>>;
39 const std::string &
name() const & {
44 return std::move(name_);
48 name_ = std::move(
name);
92 return *std::prev(
end());
96 return *std::prev(
end());
100 return insts_.empty();
104 return insts_.size();
114 return add(
end(), std::move(I));
117 template <
typename T>
118 requires std::derived_from<T, Instruction>
123 template <
typename T>
124 requires std::derived_from<T, Instruction>
129 template <
typename T>
130 requires std::derived_from<T, Instruction>
149 template <
typename I>
150 requires std::input_iterator<I>
153 for (; first != last; ++first) {
154 append(std::move(*first));
158 template <
typename R>
159 requires std::ranges::range<R>
161 assign(range.begin(), range.end());
169 InstructionList insts_;
180 constexpr auto parse(std::format_parse_context &ctx) {
181 if (*ctx.begin() ==
'o') {
183 return std::next(ctx.begin());
188 template <
typename FormatContext>
193 return std::format_to(ctx.out(),
"{}", B.
format());
197 bool asOperand_ =
false;
#define MINI_LLVM_EXPORT
Definition Compiler.h:17
Definition IndirectIterator.h:16
Definition BasicBlock.h:24
IndirectIterator< InstructionList::iterator, Instruction > iterator
Definition BasicBlock.h:28
iterator begin()
Definition BasicBlock.h:51
reverse_iterator rend()
Definition BasicBlock.h:75
void assign(I first, I last)
Definition BasicBlock.h:151
iterator end()
Definition BasicBlock.h:59
IndirectIterator< InstructionList::reverse_iterator, Instruction > reverse_iterator
Definition BasicBlock.h:30
BasicBlock(const BasicBlock &)=delete
const_iterator begin() const
Definition BasicBlock.h:55
std::unique_ptr< Instruction > remove(const_iterator pos)
const std::string & name() const &
Definition BasicBlock.h:39
const Instruction & back() const
Definition BasicBlock.h:95
T & append(std::unique_ptr< T > I)
Definition BasicBlock.h:131
T & add(const_iterator pos, std::unique_ptr< T > I)
Definition BasicBlock.h:119
std::unique_ptr< Instruction > removeLast()
Definition BasicBlock.h:141
IndirectIterator< InstructionList::const_iterator, const Instruction > const_iterator
Definition BasicBlock.h:29
BasicBlock & operator=(const BasicBlock &)=delete
std::string format() const
BasicBlock(BasicBlock &&)=delete
IndirectIterator< InstructionList::const_reverse_iterator, const Instruction > const_reverse_iterator
Definition BasicBlock.h:31
Instruction & add(const_iterator pos, std::unique_ptr< Instruction > I)
std::string formatAsOperand() const
reverse_iterator rbegin()
Definition BasicBlock.h:67
Instruction & prepend(std::unique_ptr< Instruction > I)
Definition BasicBlock.h:109
void assign_range(R &&range)
Definition BasicBlock.h:160
void setName(std::string name)
Definition BasicBlock.h:47
Instruction & append(std::unique_ptr< Instruction > I)
Definition BasicBlock.h:113
const Instruction & front() const
Definition BasicBlock.h:87
const_reverse_iterator rend() const
Definition BasicBlock.h:79
std::string && name() &&
Definition BasicBlock.h:43
size_t size() const
Definition BasicBlock.h:103
BasicBlock & operator=(BasicBlock &&)=delete
const_iterator end() const
Definition BasicBlock.h:63
bool empty() const
Definition BasicBlock.h:99
std::unique_ptr< Instruction > removeFirst()
Definition BasicBlock.h:137
void replace(const_iterator pos, std::unique_ptr< Instruction > I)
Instruction & front()
Definition BasicBlock.h:83
Instruction & back()
Definition BasicBlock.h:91
T & prepend(std::unique_ptr< T > I)
Definition BasicBlock.h:125
const_reverse_iterator rbegin() const
Definition BasicBlock.h:71
Definition Instruction.h:21
Definition BasicBlock.h:22
std::unordered_set< BasicBlock * > successors(const BasicBlock &B)
std::unordered_set< Register * > def(const BasicBlock &B)
std::unordered_set< Register * > use(const BasicBlock &B)
Definition GraphColoringAllocator.h:13
std::unique_ptr< To > cast(std::unique_ptr< From > from) noexcept
Definition Memory.h:10