mini-llvm 0.1.0
Loading...
Searching...
No Matches
GlobalVar.h
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2
3#pragma once
4
5#include <cassert>
6#include <memory>
7#include <string>
8#include <typeinfo>
9#include <variant>
10
15#include "mini-llvm/ir/Type.h"
17
18namespace mini_llvm::ir {
19
21public:
22 GlobalVar(std::unique_ptr<Type> valueType,
24 bool isConstant,
25 std::shared_ptr<Constant> initializer);
26
27 GlobalVar(std::unique_ptr<Type> valueType, Linkage linkage);
28
29 std::unique_ptr<Type> valueType() const {
30 return valueType_->clone();
31 }
32
33 Linkage linkage() const {
34 return linkage_;
35 }
36
37 bool isConstant() const {
38 return isConstant_;
39 }
40
42 const Constant &initializer() const;
43
44 void setInitializer(std::shared_ptr<Constant> initializer);
45
46 bool isDeclaration() const override;
47
48 void accept(ConstantVisitor &visitor) override {
49 visitor.visitGlobalVar(*this);
50 }
51
52 void accept(ConstantVisitor &visitor) const override {
53 visitor.visitGlobalVar(*this);
54 }
55
56 std::string format() const override;
57
58protected:
59 bool equals([[maybe_unused]] const Constant &other) const override {
60 assert(typeid(*this) != typeid(other));
61 return false;
62 }
63
64private:
65 std::unique_ptr<Type> valueType_;
66 Linkage linkage_;
67 bool isConstant_;
68 std::variant<std::monostate, std::shared_ptr<Constant>, std::weak_ptr<Constant>> initializer_;
69};
70
71} // namespace mini_llvm::ir
#define MINI_LLVM_EXPORT
Definition Compiler.h:17
Definition ConstantVisitor.h:26
virtual void visitGlobalVar(GlobalVar &C)
Definition ConstantVisitor.h:42
Definition Constant.h:13
Definition GlobalValue.h:17
std::unique_ptr< Type > valueType() const
Definition GlobalVar.h:29
const Constant & initializer() const
void setInitializer(std::shared_ptr< Constant > initializer)
void accept(ConstantVisitor &visitor) const override
Definition GlobalVar.h:52
std::string format() const override
bool equals(const Constant &other) const override
Definition GlobalVar.h:59
void accept(ConstantVisitor &visitor) override
Definition GlobalVar.h:48
GlobalVar(std::unique_ptr< Type > valueType, Linkage linkage)
bool isDeclaration() const override
Linkage linkage() const
Definition GlobalVar.h:33
GlobalVar(std::unique_ptr< Type > valueType, Linkage linkage, bool isConstant, std::shared_ptr< Constant > initializer)
bool isConstant() const
Definition GlobalVar.h:37
Definition Argument.h:13
Linkage
Definition Linkage.h:7