mini-llvm 0.1.0
Loading...
Searching...
No Matches
RISCVRegister.h
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2
3#pragma once
4
5#include <string>
6#include <string_view>
7#include <unordered_set>
8#include <vector>
9
13
14namespace mini_llvm::mir {
15
16class MINI_LLVM_EXPORT RISCVRegister final : public PhysicalRegister {
17public:
18 int idx() const override {
19 return idx_;
20 }
21
22 std::string name() const override {
23 return name_;
24 }
25
26 RegisterClass Class() const override {
27 return class_;
28 }
29
30 int width() const override {
31 return width_;
32 }
33
34 bool isPreserved() const override {
35 return isPreserved_;
36 }
37
38 bool isAllocatable() const override {
39 return isAllocatable_;
40 }
41
42 static RISCVRegister *get(int idx);
43 static RISCVRegister *get(std::string_view name);
44
45private:
46 int idx_;
47 const char *name_;
48 RegisterClass class_;
49 int width_;
50 bool isPreserved_;
51 bool isAllocatable_;
52
53 RISCVRegister(int idx, const char *name, RegisterClass Class, int width, bool isPreserved, bool isAllocatable)
54 : idx_(idx), name_(name), class_(Class), width_(width), isPreserved_(isPreserved), isAllocatable_(isAllocatable) {}
55};
56
57MINI_LLVM_EXPORT const std::unordered_set<RISCVRegister *> &riscvRegs();
58MINI_LLVM_EXPORT const std::vector<RISCVRegister *> &riscvIntegerResultRegs();
59MINI_LLVM_EXPORT const std::vector<RISCVRegister *> &riscvIntegerArgRegs();
60MINI_LLVM_EXPORT const std::vector<RISCVRegister *> &riscvFloatingResultRegs();
61MINI_LLVM_EXPORT const std::vector<RISCVRegister *> &riscvFloatingArgRegs();
62MINI_LLVM_EXPORT std::unordered_set<PhysicalRegister *> riscvCallImplicitDsts();
63MINI_LLVM_EXPORT std::unordered_set<PhysicalRegister *> riscvCallImplicitSrcs(int numIntegerArgs, int numFloatingArgs);
64
65} // namespace mini_llvm::mir
#define MINI_LLVM_EXPORT
Definition Compiler.h:17
Definition PhysicalRegister.h:13
bool isPreserved() const override
Definition RISCVRegister.h:34
RegisterClass Class() const override
Definition RISCVRegister.h:26
int idx() const override
Definition RISCVRegister.h:18
static RISCVRegister * get(int idx)
bool isAllocatable() const override
Definition RISCVRegister.h:38
int width() const override
Definition RISCVRegister.h:30
std::string name() const override
Definition RISCVRegister.h:22
static RISCVRegister * get(std::string_view name)
Definition BasicBlock.h:22
RegisterClass
Definition RegisterClass.h:7
MINI_LLVM_EXPORT std::unordered_set< PhysicalRegister * > riscvCallImplicitSrcs(int numIntegerArgs, int numFloatingArgs)
MINI_LLVM_EXPORT std::unordered_set< PhysicalRegister * > riscvCallImplicitDsts()
MINI_LLVM_EXPORT const std::vector< RISCVRegister * > & riscvIntegerResultRegs()
MINI_LLVM_EXPORT const std::vector< RISCVRegister * > & riscvIntegerArgRegs()
MINI_LLVM_EXPORT const std::vector< RISCVRegister * > & riscvFloatingArgRegs()
MINI_LLVM_EXPORT const std::unordered_set< RISCVRegister * > & riscvRegs()
MINI_LLVM_EXPORT const std::vector< RISCVRegister * > & riscvFloatingResultRegs()