mini-llvm 0.1.0
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
15#include "mini-llvm/ir/Type.h"
17#include "mini-llvm/ir/Value.h"
18
19namespace mini_llvm::ir {
20
21class FloatConstant final : public FloatingConstant {
22public:
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
53protected:
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
59private:
60 float value_;
61};
62
63} // namespace mini_llvm::ir
Definition ConstantVisitor.h:26
virtual void visitFloatConstant(FloatConstant &C)
Definition ConstantVisitor.h:40
Definition Constant.h:13
void accept(ConstantVisitor &visitor) const override
Definition FloatConstant.h:37
void accept(ConstantVisitor &visitor) override
Definition FloatConstant.h:33
std::unique_ptr< Value > clone() const override
Definition FloatConstant.h:49
FloatConstant(float value)
Definition FloatConstant.h:23
std::string format() const override
Definition FloatConstant.h:45
float value() const
Definition FloatConstant.h:25
uint64_t bitPattern() const override
Definition FloatConstant.h:29
bool equals(const Constant &other) const override
Definition FloatConstant.h:54
std::unique_ptr< Type > type() const override
Definition FloatConstant.h:41
Definition FloatingConstant.h:13
Definition Argument.h:13
Definition ZExt.h:14