mini-llvm
0.1.0
Toggle main menu visibility
Loading...
Searching...
No Matches
FCvtFU.h
Go to the documentation of this file.
1
// SPDX-License-Identifier: MIT
2
3
#pragma once
4
5
#include <format>
6
#include <memory>
7
#include <string>
8
#include <unordered_set>
9
#include <utility>
10
11
#include "
mini-llvm/common/Precision.h
"
12
#include "
mini-llvm/mir/FormatPrecision.h
"
13
#include "
mini-llvm/mir/ImmediateOperand.h
"
14
#include "
mini-llvm/mir/Instruction.h
"
15
#include "
mini-llvm/mir/MemoryOperand.h
"
16
#include "
mini-llvm/mir/Register.h
"
17
#include "
mini-llvm/mir/RegisterClass.h
"
18
#include "
mini-llvm/mir/RegisterOperand.h
"
19
#include "
mini-llvm/utils/Compiler.h
"
20
#include "
mini-llvm/utils/Memory.h
"
21
22
namespace
mini_llvm::mir
{
23
24
class
MINI_LLVM_EXPORT
FCvtFU
:
public
Instruction
{
25
public
:
26
FCvtFU
(
Precision
dstPrecision
,
int
srcWidth
, std::shared_ptr<Register>
dst
, std::shared_ptr<Register>
src
)
27
: dstPrecision_(
dstPrecision
),
28
srcWidth_(
srcWidth
),
29
dst_(
RegisterClass
::
kFPR
, std::move(
dst
)),
30
src_(
RegisterClass
::
kGPR
, std::move(
src
)) {}
31
32
Precision
dstPrecision
()
const
{
33
return
dstPrecision_;
34
}
35
36
int
srcWidth
()
const
{
37
return
srcWidth_;
38
}
39
40
template
<
typename
Self>
41
auto
&
dst
(
this
Self &&self) {
42
return
self.dst_;
43
}
44
45
template
<
typename
Self>
46
auto
&
src
(
this
Self &&self) {
47
return
self.src_;
48
}
49
50
std::unordered_set<const RegisterOperand *>
regOps
()
const override
{
51
return
{&
dst
(), &
src
()};
52
}
53
54
std::unordered_set<const RegisterOperand *>
dsts
()
const override
{
55
return
{&
dst
()};
56
}
57
58
std::unordered_set<const RegisterOperand *>
srcs
()
const override
{
59
return
{&
src
()};
60
}
61
62
std::unordered_set<const ImmediateOperand *>
immOps
()
const override
{
63
return
{};
64
}
65
66
std::unordered_set<const MemoryOperand *>
memOps
()
const override
{
67
return
{};
68
}
69
70
bool
hasSideEffects
()
const override
{
71
return
true
;
72
}
73
74
std::string
format
()
const override
{
75
return
std::format(
"FCVTFU {} i{} {}, {}"
,
specifier
(
dstPrecision
()),
srcWidth
() * 8, *
dst
(), *
src
());
76
}
77
78
std::unique_ptr<Instruction>
clone
()
const override
{
79
return
std::make_unique<FCvtFU>(
dstPrecision
(),
srcWidth
(),
share
(*
dst
()),
share
(*
src
()));
80
}
81
82
void
accept
(
InstructionVisitor
&visitor)
override
{
83
visitor.
visitFCvtFU
(*
this
);
84
}
85
86
void
accept
(
InstructionVisitor
&visitor)
const override
{
87
visitor.
visitFCvtFU
(*
this
);
88
}
89
90
private
:
91
Precision
dstPrecision_;
92
int
srcWidth_;
93
RegisterOperand
dst_, src_;
94
};
95
96
}
// namespace mini_llvm::mir
Compiler.h
MINI_LLVM_EXPORT
#define MINI_LLVM_EXPORT
Definition
Compiler.h:17
FormatPrecision.h
ImmediateOperand.h
MemoryOperand.h
Memory.h
Precision.h
RegisterClass.h
RegisterOperand.h
Register.h
mini_llvm::mir::FCvtFU::src
auto & src(this Self &&self)
Definition
FCvtFU.h:46
mini_llvm::mir::FCvtFU::accept
void accept(InstructionVisitor &visitor) override
Definition
FCvtFU.h:82
mini_llvm::mir::FCvtFU::format
std::string format() const override
Definition
FCvtFU.h:74
mini_llvm::mir::FCvtFU::dstPrecision
Precision dstPrecision() const
Definition
FCvtFU.h:32
mini_llvm::mir::FCvtFU::clone
std::unique_ptr< Instruction > clone() const override
Definition
FCvtFU.h:78
mini_llvm::mir::FCvtFU::dst
auto & dst(this Self &&self)
Definition
FCvtFU.h:41
mini_llvm::mir::FCvtFU::regOps
std::unordered_set< const RegisterOperand * > regOps() const override
Definition
FCvtFU.h:50
mini_llvm::mir::FCvtFU::srcWidth
int srcWidth() const
Definition
FCvtFU.h:36
mini_llvm::mir::FCvtFU::memOps
std::unordered_set< const MemoryOperand * > memOps() const override
Definition
FCvtFU.h:66
mini_llvm::mir::FCvtFU::FCvtFU
FCvtFU(Precision dstPrecision, int srcWidth, std::shared_ptr< Register > dst, std::shared_ptr< Register > src)
Definition
FCvtFU.h:26
mini_llvm::mir::FCvtFU::hasSideEffects
bool hasSideEffects() const override
Definition
FCvtFU.h:70
mini_llvm::mir::FCvtFU::dsts
std::unordered_set< const RegisterOperand * > dsts() const override
Definition
FCvtFU.h:54
mini_llvm::mir::FCvtFU::srcs
std::unordered_set< const RegisterOperand * > srcs() const override
Definition
FCvtFU.h:58
mini_llvm::mir::FCvtFU::accept
void accept(InstructionVisitor &visitor) const override
Definition
FCvtFU.h:86
mini_llvm::mir::FCvtFU::immOps
std::unordered_set< const ImmediateOperand * > immOps() const override
Definition
FCvtFU.h:62
mini_llvm::mir::InstructionVisitor
Definition
InstructionVisitor.h:70
mini_llvm::mir::InstructionVisitor::visitFCvtFU
virtual void visitFCvtFU(FCvtFS &I)
Definition
InstructionVisitor.h:100
mini_llvm::mir::Instruction::Instruction
Instruction()=default
mini_llvm::mir::RegisterOperand
Definition
RegisterOperand.h:13
Instruction.h
mini_llvm::mir
Definition
BasicBlock.h:22
mini_llvm::mir::specifier
constexpr const char * specifier(Condition cond)
Definition
Condition.h:15
mini_llvm::mir::RegisterClass
RegisterClass
Definition
RegisterClass.h:7
mini_llvm::mir::RegisterClass::kFPR
@ kFPR
Definition
RegisterClass.h:9
mini_llvm::mir::RegisterClass::kGPR
@ kGPR
Definition
RegisterClass.h:8
mini_llvm::share
std::shared_ptr< T > share(T &value)
Definition
Memory.h:25
mini_llvm::Precision
Precision
Definition
Precision.h:7
include
mini-llvm
mir
Instruction
FCvtFU.h
Generated by
1.17.0