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