mini-llvm
0.1.0
Toggle main menu visibility
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
10
#include "
mini-llvm/mir/PhysicalRegister.h
"
11
#include "
mini-llvm/mir/RegisterClass.h
"
12
#include "
mini-llvm/utils/Compiler.h
"
13
14
namespace
mini_llvm::mir
{
15
16
class
MINI_LLVM_EXPORT
RISCVRegister final :
public
PhysicalRegister
{
17
public
:
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
45
private
:
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
57
MINI_LLVM_EXPORT
const
std::unordered_set<RISCVRegister *> &
riscvRegs
();
58
MINI_LLVM_EXPORT
const
std::vector<RISCVRegister *> &
riscvIntegerResultRegs
();
59
MINI_LLVM_EXPORT
const
std::vector<RISCVRegister *> &
riscvIntegerArgRegs
();
60
MINI_LLVM_EXPORT
const
std::vector<RISCVRegister *> &
riscvFloatingResultRegs
();
61
MINI_LLVM_EXPORT
const
std::vector<RISCVRegister *> &
riscvFloatingArgRegs
();
62
MINI_LLVM_EXPORT
std::unordered_set<PhysicalRegister *>
riscvCallImplicitDsts
();
63
MINI_LLVM_EXPORT
std::unordered_set<PhysicalRegister *>
riscvCallImplicitSrcs
(
int
numIntegerArgs,
int
numFloatingArgs);
64
65
}
// namespace mini_llvm::mir
Compiler.h
MINI_LLVM_EXPORT
#define MINI_LLVM_EXPORT
Definition
Compiler.h:17
PhysicalRegister.h
RegisterClass.h
mini_llvm::mir::PhysicalRegister
Definition
PhysicalRegister.h:13
mini_llvm::mir::RISCVRegister::isPreserved
bool isPreserved() const override
Definition
RISCVRegister.h:34
mini_llvm::mir::RISCVRegister::Class
RegisterClass Class() const override
Definition
RISCVRegister.h:26
mini_llvm::mir::RISCVRegister::idx
int idx() const override
Definition
RISCVRegister.h:18
mini_llvm::mir::RISCVRegister::get
static RISCVRegister * get(int idx)
mini_llvm::mir::RISCVRegister::isAllocatable
bool isAllocatable() const override
Definition
RISCVRegister.h:38
mini_llvm::mir::RISCVRegister::width
int width() const override
Definition
RISCVRegister.h:30
mini_llvm::mir::RISCVRegister::name
std::string name() const override
Definition
RISCVRegister.h:22
mini_llvm::mir::RISCVRegister::get
static RISCVRegister * get(std::string_view name)
mini_llvm::mir
Definition
BasicBlock.h:22
mini_llvm::mir::RegisterClass
RegisterClass
Definition
RegisterClass.h:7
mini_llvm::mir::riscvCallImplicitSrcs
MINI_LLVM_EXPORT std::unordered_set< PhysicalRegister * > riscvCallImplicitSrcs(int numIntegerArgs, int numFloatingArgs)
mini_llvm::mir::riscvCallImplicitDsts
MINI_LLVM_EXPORT std::unordered_set< PhysicalRegister * > riscvCallImplicitDsts()
mini_llvm::mir::riscvIntegerResultRegs
MINI_LLVM_EXPORT const std::vector< RISCVRegister * > & riscvIntegerResultRegs()
mini_llvm::mir::riscvIntegerArgRegs
MINI_LLVM_EXPORT const std::vector< RISCVRegister * > & riscvIntegerArgRegs()
mini_llvm::mir::riscvFloatingArgRegs
MINI_LLVM_EXPORT const std::vector< RISCVRegister * > & riscvFloatingArgRegs()
mini_llvm::mir::riscvRegs
MINI_LLVM_EXPORT const std::unordered_set< RISCVRegister * > & riscvRegs()
mini_llvm::mir::riscvFloatingResultRegs
MINI_LLVM_EXPORT const std::vector< RISCVRegister * > & riscvFloatingResultRegs()
include
mini-llvm
targets
riscv
mir
RISCVRegister.h
Generated by
1.17.0