mini-llvm 0.1.0
Loading...
Searching...
No Matches
Mov.h
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2
3#pragma once
4
5#include <memory>
6#include <utility>
7
15
16namespace mini_llvm::mir {
17
19public:
21 std::shared_ptr<Register> dst,
22 std::shared_ptr<Register> src,
24 : UnaryOperator(width, std::move(dst), std::move(src), extMode) {}
25
26 bool isCoalescent() const override {
27 return true;
28 }
29
30 Register *coalescenceDst() const override {
31 return &*dst();
32 }
33
34 Register *coalescenceSrc() const override {
35 return &*src();
36 }
37
38 bool hasSideEffects() const override {
39 return false;
40 }
41
42 std::unique_ptr<Instruction> clone() const override {
43 return std::make_unique<Mov>(
44 width(), share(*dst()), share(*src()), extMode());
45 }
46
47 void accept(InstructionVisitor &visitor) override {
48 visitor.visitMov(*this);
49 }
50
51 void accept(InstructionVisitor &visitor) const override {
52 visitor.visitMov(*this);
53 }
54
55protected:
56 const char *mnemonic() const override {
57 return "MOV";
58 }
59};
60
61} // namespace mini_llvm::mir
#define MINI_LLVM_EXPORT
Definition Compiler.h:17
Definition InstructionVisitor.h:70
virtual void visitMov(Mov &I)
Definition InstructionVisitor.h:117
std::unique_ptr< Instruction > clone() const override
Definition Mov.h:42
Register * coalescenceDst() const override
Definition Mov.h:30
bool isCoalescent() const override
Definition Mov.h:26
const char * mnemonic() const override
Definition Mov.h:56
void accept(InstructionVisitor &visitor) const override
Definition Mov.h:51
bool hasSideEffects() const override
Definition Mov.h:38
Register * coalescenceSrc() const override
Definition Mov.h:34
void accept(InstructionVisitor &visitor) override
Definition Mov.h:47
Mov(int width, std::shared_ptr< Register > dst, std::shared_ptr< Register > src, ExtensionMode extMode=ExtensionMode::kNo)
Definition Mov.h:20
Definition Register.h:14
ExtensionMode extMode() const
Definition UnaryOperator.h:37
auto & src(this Self &&self)
Definition UnaryOperator.h:33
UnaryOperator(int width, std::shared_ptr< Register > dst, std::shared_ptr< Register > src, ExtensionMode extMode)
Definition UnaryOperator.h:64
int width() const
Definition UnaryOperator.h:23
auto & dst(this Self &&self)
Definition UnaryOperator.h:28
Definition BasicBlock.h:22
ExtensionMode
Definition ExtensionMode.h:7
@ kNo
Definition ExtensionMode.h:8
std::shared_ptr< T > share(T &value)
Definition Memory.h:25