mini-llvm 0.1.0
Loading...
Searching...
No Matches
DoubleConstant.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
14#include "mini-llvm/ir/Type.h"
16#include "mini-llvm/ir/Value.h"
17
18namespace mini_llvm::ir {
19
20class DoubleConstant final : public FloatingConstant {
21public:
22 explicit DoubleConstant(double value) : value_(value) {}
23
24 double value() const {
25 return value_;
26 }
27
28 uint64_t bitPattern() const override {
29 return std::bit_cast<uint64_t>(value_);
30 }
31
32 void accept(ConstantVisitor &visitor) override {
33 visitor.visitDoubleConstant(*this);
34 }
35
36 void accept(ConstantVisitor &visitor) const override {
37 visitor.visitDoubleConstant(*this);
38 }
39
40 std::unique_ptr<Type> type() const override {
41 return std::make_unique<Double>();
42 }
43
44 std::string format() const override {
45 return std::format("0x{:016x}", std::bit_cast<uint64_t>(value()));
46 }
47
48 std::unique_ptr<Value> clone() const override {
49 return std::make_unique<DoubleConstant>(value());
50 }
51
52protected:
53 bool equals(const Constant &other) const override {
54 return typeid(*this) == typeid(other)
55 && std::bit_cast<uint64_t>(value()) == std::bit_cast<uint64_t>(static_cast<const DoubleConstant &>(other).value());
56 }
57
58private:
59 double value_;
60};
61
62} // namespace mini_llvm::ir
Definition ConstantVisitor.h:26
virtual void visitDoubleConstant(DoubleConstant &C)
Definition ConstantVisitor.h:39
Definition Constant.h:13
std::string format() const override
Definition DoubleConstant.h:44
std::unique_ptr< Type > type() const override
Definition DoubleConstant.h:40
bool equals(const Constant &other) const override
Definition DoubleConstant.h:53
void accept(ConstantVisitor &visitor) override
Definition DoubleConstant.h:32
void accept(ConstantVisitor &visitor) const override
Definition DoubleConstant.h:36
std::unique_ptr< Value > clone() const override
Definition DoubleConstant.h:48
uint64_t bitPattern() const override
Definition DoubleConstant.h:28
DoubleConstant(double value)
Definition DoubleConstant.h:22
double value() const
Definition DoubleConstant.h:24
Definition FloatingConstant.h:13
Definition Argument.h:13