mini-llvm
0.1.0
Toggle main menu visibility
Loading...
Searching...
No Matches
ArrayConstant.h
Go to the documentation of this file.
1
// SPDX-License-Identifier: MIT
2
3
#pragma once
4
5
#include <cstddef>
6
#include <memory>
7
#include <ranges>
8
#include <string>
9
#include <vector>
10
11
#include "
mini-llvm/ir/Constant.h
"
12
#include "
mini-llvm/ir/ConstantVisitor.h
"
13
#include "
mini-llvm/ir/Type.h
"
14
#include "
mini-llvm/ir/Type/ArrayType.h
"
15
#include "
mini-llvm/ir/Use.h
"
16
#include "
mini-llvm/ir/Value.h
"
17
#include "
mini-llvm/utils/Compiler.h
"
18
#include "
mini-llvm/utils/IndirectIterator.h
"
19
20
namespace
mini_llvm::ir
{
21
22
class
MINI_LLVM_EXPORT
ArrayConstant
final :
public
Constant
{
23
using
ElementList = std::vector<std::unique_ptr<Use<Constant>>>;
24
25
public
:
26
using
element_iterator
=
IndirectIterator<ElementList::iterator, Use<Constant>
>;
27
using
const_element_iterator
=
IndirectIterator<ElementList::const_iterator, const Use<Constant>
>;
28
29
ArrayConstant
(std::unique_ptr<ArrayType>
type
, std::vector<std::shared_ptr<Constant>>
elements
);
30
31
element_iterator
element_begin
() {
32
return
element_iterator
(elements_.begin());
33
}
34
35
element_iterator
element_end
() {
36
return
element_iterator
(elements_.end());
37
}
38
39
const_element_iterator
element_begin
()
const
{
40
return
const_element_iterator
(elements_.begin());
41
}
42
43
const_element_iterator
element_end
()
const
{
44
return
const_element_iterator
(elements_.end());
45
}
46
47
bool
element_empty
()
const
{
48
return
elements_.empty();
49
}
50
51
size_t
element_size
()
const
{
52
return
elements_.size();
53
}
54
55
Use<Constant>
&
element
(
size_t
i) {
56
return
*elements_[i];
57
}
58
59
const
Use<Constant>
&
element
(
size_t
i)
const
{
60
return
*elements_[i];
61
}
62
63
void
accept
(
ConstantVisitor
&visitor)
override
{
64
visitor.
visitArrayConstant
(*
this
);
65
}
66
67
void
accept
(
ConstantVisitor
&visitor)
const override
{
68
visitor.
visitArrayConstant
(*
this
);
69
}
70
71
bool
isWellFormed
()
const override
;
72
73
std::unique_ptr<Type>
type
()
const override
{
74
return
type_->clone();
75
}
76
77
std::string
format
()
const override
;
78
std::unique_ptr<Value>
clone
()
const override
;
79
80
protected
:
81
bool
equals
(
const
Constant
&other)
const override
;
82
83
private
:
84
std::unique_ptr<ArrayType> type_;
85
ElementList elements_;
86
};
87
88
inline
auto
elements
(
ArrayConstant
&C) {
89
return
std::ranges::subrange(C.
element_begin
(), C.
element_end
());
90
}
91
92
inline
auto
elements
(
const
ArrayConstant
&C) {
93
return
std::ranges::subrange(C.
element_begin
(), C.
element_end
());
94
}
95
96
}
// namespace mini_llvm::ir
ArrayType.h
Compiler.h
MINI_LLVM_EXPORT
#define MINI_LLVM_EXPORT
Definition
Compiler.h:17
IndirectIterator.h
Type.h
Use.h
Value.h
mini_llvm::IndirectIterator
Definition
IndirectIterator.h:16
mini_llvm::ir::ArrayConstant
Definition
ArrayConstant.h:22
mini_llvm::ir::ArrayConstant::format
std::string format() const override
mini_llvm::ir::ArrayConstant::element
const Use< Constant > & element(size_t i) const
Definition
ArrayConstant.h:59
mini_llvm::ir::ArrayConstant::element_begin
element_iterator element_begin()
Definition
ArrayConstant.h:31
mini_llvm::ir::ArrayConstant::isWellFormed
bool isWellFormed() const override
mini_llvm::ir::ArrayConstant::element_end
const_element_iterator element_end() const
Definition
ArrayConstant.h:43
mini_llvm::ir::ArrayConstant::element_size
size_t element_size() const
Definition
ArrayConstant.h:51
mini_llvm::ir::ArrayConstant::element_iterator
IndirectIterator< ElementList::iterator, Use< Constant > > element_iterator
Definition
ArrayConstant.h:26
mini_llvm::ir::ArrayConstant::element_begin
const_element_iterator element_begin() const
Definition
ArrayConstant.h:39
mini_llvm::ir::ArrayConstant::type
std::unique_ptr< Type > type() const override
Definition
ArrayConstant.h:73
mini_llvm::ir::ArrayConstant::element_empty
bool element_empty() const
Definition
ArrayConstant.h:47
mini_llvm::ir::ArrayConstant::equals
bool equals(const Constant &other) const override
mini_llvm::ir::ArrayConstant::element
Use< Constant > & element(size_t i)
Definition
ArrayConstant.h:55
mini_llvm::ir::ArrayConstant::accept
void accept(ConstantVisitor &visitor) override
Definition
ArrayConstant.h:63
mini_llvm::ir::ArrayConstant::ArrayConstant
ArrayConstant(std::unique_ptr< ArrayType > type, std::vector< std::shared_ptr< Constant > > elements)
mini_llvm::ir::ArrayConstant::const_element_iterator
IndirectIterator< ElementList::const_iterator, const Use< Constant > > const_element_iterator
Definition
ArrayConstant.h:27
mini_llvm::ir::ArrayConstant::element_end
element_iterator element_end()
Definition
ArrayConstant.h:35
mini_llvm::ir::ArrayConstant::clone
std::unique_ptr< Value > clone() const override
mini_llvm::ir::ArrayConstant::accept
void accept(ConstantVisitor &visitor) const override
Definition
ArrayConstant.h:67
mini_llvm::ir::ConstantVisitor
Definition
ConstantVisitor.h:26
mini_llvm::ir::ConstantVisitor::visitArrayConstant
virtual void visitArrayConstant(ArrayConstant &C)
Definition
ConstantVisitor.h:38
mini_llvm::ir::Constant
Definition
Constant.h:13
mini_llvm::ir::Use
Definition
Use.h:44
ConstantVisitor.h
Constant.h
mini_llvm::ir
Definition
Argument.h:13
mini_llvm::ir::elements
auto elements(ArrayConstant &C)
Definition
ArrayConstant.h:88
include
mini-llvm
ir
Constant
ArrayConstant.h
Generated by
1.17.0