mini-llvm
0.1.0
Toggle main menu visibility
Loading...
Searching...
No Matches
FCmp.h
Go to the documentation of this file.
1
// SPDX-License-Identifier: MIT
2
3
#pragma once
4
5
#include <cstdlib>
6
#include <memory>
7
#include <string>
8
#include <utility>
9
10
#include "
mini-llvm/ir/Constant.h
"
11
#include "
mini-llvm/ir/Instruction/BinaryFloatingRelationalOperator.h
"
12
#include "
mini-llvm/ir/InstructionVisitor.h
"
13
#include "
mini-llvm/ir/Value.h
"
14
#include "
mini-llvm/utils/Compiler.h
"
15
16
namespace
mini_llvm::ir
{
17
18
class
MINI_LLVM_EXPORT
FCmp
final :
public
BinaryFloatingRelationalOperator
{
19
public
:
20
enum class
Condition
{
21
kOEQ,
22
kONE,
23
kOLT,
24
kOGT,
25
kOLE,
26
kOGE,
27
};
28
29
FCmp
(
Condition
cond
, std::shared_ptr<Value>
lhs
, std::shared_ptr<Value>
rhs
)
30
:
BinaryFloatingRelationalOperator
(std::move(
lhs
), std::move(
rhs
)), cond_(
cond
) {}
31
32
Condition
cond
()
const
{
33
return
cond_;
34
}
35
36
void
setCond
(
Condition
cond
) {
37
cond_ =
cond
;
38
}
39
40
std::shared_ptr<Constant>
fold
()
const override
;
41
42
void
accept
(
InstructionVisitor
&visitor)
override
{
43
visitor.
visitFCmp
(*
this
);
44
}
45
46
void
accept
(
InstructionVisitor
&visitor)
const override
{
47
visitor.
visitFCmp
(*
this
);
48
}
49
50
std::string
format
()
const override
;
51
std::unique_ptr<Value>
clone
()
const override
;
52
53
private
:
54
Condition
cond_;
55
};
56
57
inline
constexpr
const
char
*
specifier
(
FCmp::Condition
cond) {
58
using
enum
FCmp::Condition
;
59
switch
(cond) {
60
case
kOEQ:
return
"oeq"
;
61
case
kONE:
return
"one"
;
62
case
kOLT:
return
"olt"
;
63
case
kOGT:
return
"ogt"
;
64
case
kOLE:
return
"ole"
;
65
case
kOGE:
return
"oge"
;
66
default
: abort();
67
}
68
}
69
70
}
// namespace mini_llvm::ir
BinaryFloatingRelationalOperator.h
Compiler.h
MINI_LLVM_EXPORT
#define MINI_LLVM_EXPORT
Definition
Compiler.h:17
Value.h
mini_llvm::ir::BinaryFloatingOperator::rhs
auto & rhs(this Self &&self)
Definition
BinaryFloatingOperator.h:24
mini_llvm::ir::BinaryFloatingOperator::lhs
auto & lhs(this Self &&self)
Definition
BinaryFloatingOperator.h:19
mini_llvm::ir::BinaryFloatingRelationalOperator::BinaryFloatingRelationalOperator
BinaryFloatingRelationalOperator(std::shared_ptr< Value > lhs, std::shared_ptr< Value > rhs)
Definition
BinaryFloatingRelationalOperator.h:23
mini_llvm::ir::FCmp::fold
std::shared_ptr< Constant > fold() const override
mini_llvm::ir::FCmp::FCmp
FCmp(Condition cond, std::shared_ptr< Value > lhs, std::shared_ptr< Value > rhs)
Definition
FCmp.h:29
mini_llvm::ir::FCmp::setCond
void setCond(Condition cond)
Definition
FCmp.h:36
mini_llvm::ir::FCmp::Condition
Condition
Definition
FCmp.h:20
mini_llvm::ir::FCmp::cond
Condition cond() const
Definition
FCmp.h:32
mini_llvm::ir::FCmp::clone
std::unique_ptr< Value > clone() const override
mini_llvm::ir::FCmp::accept
void accept(InstructionVisitor &visitor) override
Definition
FCmp.h:42
mini_llvm::ir::FCmp::accept
void accept(InstructionVisitor &visitor) const override
Definition
FCmp.h:46
mini_llvm::ir::FCmp::format
std::string format() const override
mini_llvm::ir::InstructionVisitor
Definition
InstructionVisitor.h:58
mini_llvm::ir::InstructionVisitor::visitFCmp
virtual void visitFCmp(FCmp &I)
Definition
InstructionVisitor.h:79
Constant.h
InstructionVisitor.h
mini_llvm::ir
Definition
Argument.h:13
mini_llvm::ir::specifier
constexpr const char * specifier(FCmp::Condition cond)
Definition
FCmp.h:57
include
mini-llvm
ir
Instruction
FCmp.h
Generated by
1.17.0