mini-llvm 0.1.0
Loading...
Searching...
No Matches
FNeg.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:
20 FNeg(Precision precision, std::shared_ptr<Register> dst, std::shared_ptr<Register> src)
21 : FUnaryOperator(precision, std::move(dst), std::move(src)) {}
22
23 bool hasSideEffects() const override {
24 return true;
25 }
26
27 std::unique_ptr<Instruction> clone() const override {
28 return std::make_unique<FNeg>(precision(), share(*dst()), share(*src()));
29 }
30
31 void accept(InstructionVisitor &visitor) override {
32 visitor.visitFNeg(*this);
33 }
34
35 void accept(InstructionVisitor &visitor) const override {
36 visitor.visitFNeg(*this);
37 }
38
39protected:
40 const char *mnemonic() const override {
41 return "FNEG";
42 }
43};
44
45} // namespace mini_llvm::mir
#define MINI_LLVM_EXPORT
Definition Compiler.h:17
void accept(InstructionVisitor &visitor) override
Definition FNeg.h:31
void accept(InstructionVisitor &visitor) const override
Definition FNeg.h:35
const char * mnemonic() const override
Definition FNeg.h:40
bool hasSideEffects() const override
Definition FNeg.h:23
FNeg(Precision precision, std::shared_ptr< Register > dst, std::shared_ptr< Register > src)
Definition FNeg.h:20
std::unique_ptr< Instruction > clone() const override
Definition FNeg.h:27
Precision precision() const
Definition FUnaryOperator.h:25
auto & src(this Self &&self)
Definition FUnaryOperator.h:35
auto & dst(this Self &&self)
Definition FUnaryOperator.h:30
FUnaryOperator(Precision precision, std::shared_ptr< Register > dst, std::shared_ptr< Register > src)
Definition FUnaryOperator.h:64
Definition InstructionVisitor.h:70
virtual void visitFNeg(FNeg &I)
Definition InstructionVisitor.h:109
Definition BasicBlock.h:22
std::shared_ptr< T > share(T &value)
Definition Memory.h:25
Precision
Definition Precision.h:7