mini-llvm 0.1.0
Loading...
Searching...
No Matches
Register.h
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2
3#pragma once
4
5#include <concepts>
6#include <format>
7#include <memory>
8#include <string>
9
11
12namespace mini_llvm::mir {
13
14class MINI_LLVM_EXPORT Register : public std::enable_shared_from_this<Register> {
15public:
16 virtual ~Register() = default;
17
18 Register() = default;
19
20 Register(const Register &) = delete;
21 Register &operator=(const Register &) = delete;
22
23 Register(Register &&) = delete;
25
26 virtual int width() const = 0;
27 virtual std::string format() const = 0;
28};
29
30} // namespace mini_llvm::mir
31
32template <typename RegisterT>
33 requires std::derived_from<RegisterT, mini_llvm::mir::Register>
34struct std::formatter<RegisterT> {
35 constexpr auto parse(std::format_parse_context &ctx) {
36 return ctx.begin();
37 }
38
39 template <typename FormatContext>
40 auto format(const RegisterT &I, FormatContext &ctx) const {
41 return std::format_to(ctx.out(), "{}", I.format());
42 }
43};
#define MINI_LLVM_EXPORT
Definition Compiler.h:17
virtual int width() const =0
virtual ~Register()=default
Register(const Register &)=delete
Register(Register &&)=delete
Register & operator=(Register &&)=delete
Register & operator=(const Register &)=delete
virtual std::string format() const =0
Definition BasicBlock.h:22
auto format(const RegisterT &I, FormatContext &ctx) const
Definition Register.h:40
constexpr auto parse(std::format_parse_context &ctx)
Definition Register.h:35