mini-llvm
0.1.0
Toggle main menu visibility
Loading...
Searching...
No Matches
FloatConstant.h
Go to the documentation of this file.
1
// SPDX-License-Identifier: MIT
2
3
#pragma once
4
5
#include <bit>
6
#include <cstdint>
7
#include <format>
8
#include <memory>
9
#include <string>
10
#include <typeinfo>
11
12
#include "
mini-llvm/common/ops/ZExt.h
"
13
#include "
mini-llvm/ir/Constant/FloatingConstant.h
"
14
#include "
mini-llvm/ir/ConstantVisitor.h
"
15
#include "
mini-llvm/ir/Type.h
"
16
#include "
mini-llvm/ir/Type/Float.h
"
17
#include "
mini-llvm/ir/Value.h
"
18
19
namespace
mini_llvm::ir
{
20
21
class
FloatConstant
final :
public
FloatingConstant
{
22
public
:
23
explicit
FloatConstant
(
float
value
) : value_(
value
) {}
24
25
float
value
()
const
{
26
return
value_;
27
}
28
29
uint64_t
bitPattern
()
const override
{
30
return
ops::ZExt<uint64_t>
()(std::bit_cast<uint32_t>(value_));
31
}
32
33
void
accept
(
ConstantVisitor
&visitor)
override
{
34
visitor.
visitFloatConstant
(*
this
);
35
}
36
37
void
accept
(
ConstantVisitor
&visitor)
const override
{
38
visitor.
visitFloatConstant
(*
this
);
39
}
40
41
std::unique_ptr<Type>
type
()
const override
{
42
return
std::make_unique<Float>();
43
}
44
45
std::string
format
()
const override
{
46
return
std::format(
"0x{:16x}"
, std::bit_cast<uint64_t>(
static_cast<
double
>
(
value
())));
47
}
48
49
std::unique_ptr<Value>
clone
()
const override
{
50
return
std::make_unique<FloatConstant>(
value
());
51
}
52
53
protected
:
54
bool
equals
(
const
Constant
&other)
const override
{
55
return
typeid
(*this) ==
typeid
(other)
56
&& std::bit_cast<uint32_t>(
value
()) == std::bit_cast<uint32_t>(
static_cast<
const
FloatConstant
&
>
(other).
value
());
57
}
58
59
private
:
60
float
value_;
61
};
62
63
}
// namespace mini_llvm::ir
Float.h
FloatingConstant.h
Type.h
Value.h
mini_llvm::ir::ConstantVisitor
Definition
ConstantVisitor.h:26
mini_llvm::ir::ConstantVisitor::visitFloatConstant
virtual void visitFloatConstant(FloatConstant &C)
Definition
ConstantVisitor.h:40
mini_llvm::ir::Constant
Definition
Constant.h:13
mini_llvm::ir::FloatConstant::accept
void accept(ConstantVisitor &visitor) const override
Definition
FloatConstant.h:37
mini_llvm::ir::FloatConstant::accept
void accept(ConstantVisitor &visitor) override
Definition
FloatConstant.h:33
mini_llvm::ir::FloatConstant::clone
std::unique_ptr< Value > clone() const override
Definition
FloatConstant.h:49
mini_llvm::ir::FloatConstant::FloatConstant
FloatConstant(float value)
Definition
FloatConstant.h:23
mini_llvm::ir::FloatConstant::format
std::string format() const override
Definition
FloatConstant.h:45
mini_llvm::ir::FloatConstant::value
float value() const
Definition
FloatConstant.h:25
mini_llvm::ir::FloatConstant::bitPattern
uint64_t bitPattern() const override
Definition
FloatConstant.h:29
mini_llvm::ir::FloatConstant::equals
bool equals(const Constant &other) const override
Definition
FloatConstant.h:54
mini_llvm::ir::FloatConstant::type
std::unique_ptr< Type > type() const override
Definition
FloatConstant.h:41
mini_llvm::ir::FloatingConstant
Definition
FloatingConstant.h:13
ZExt.h
ConstantVisitor.h
mini_llvm::ir
Definition
Argument.h:13
mini_llvm::ops::ZExt
Definition
ZExt.h:14
include
mini-llvm
ir
Constant
FloatConstant.h
Generated by
1.17.0