mini-llvm
0.1.0
Toggle main menu visibility
Loading...
Searching...
No Matches
ArrayType.h
Go to the documentation of this file.
1
// SPDX-License-Identifier: MIT
2
3
#pragma once
4
5
#include <cstddef>
6
#include <cstdint>
7
#include <cstdlib>
8
#include <format>
9
#include <memory>
10
#include <string>
11
#include <utility>
12
13
#include "
mini-llvm/ir/Constant.h
"
14
#include "
mini-llvm/ir/Type.h
"
15
#include "
mini-llvm/ir/TypeVisitor.h
"
16
#include "
mini-llvm/utils/Compiler.h
"
17
18
namespace
mini_llvm::ir
{
19
20
class
MINI_LLVM_EXPORT
ArrayType
final :
public
Type
{
21
public
:
22
ArrayType
(std::unique_ptr<Type>
elementType
,
size_t
numElements
)
23
: elementType_(std::move(
elementType
)), numElements_(
numElements
) {}
24
25
std::unique_ptr<Type>
elementType
()
const
{
26
return
elementType_->clone();
27
}
28
29
size_t
numElements
()
const
{
30
return
numElements_;
31
}
32
33
int
size
()
const override
{
34
return
static_cast<
int
>
(
numElements
()) *
elementType
()->size();
35
}
36
37
int
alignment
()
const override
{
38
return
elementType
()->alignment();
39
}
40
41
int
size
(
int
pointerSize)
const override
{
42
return
static_cast<
int
>
(
numElements
()) *
elementType
()->size(pointerSize);
43
}
44
45
int
alignment
(
int
pointerAlignment)
const override
{
46
return
elementType
()->alignment(pointerAlignment);
47
}
48
49
std::unique_ptr<Constant>
zeroValue
()
const override
;
50
51
std::unique_ptr<Constant>
constant
(int64_t)
const override
{
52
abort();
53
}
54
55
std::unique_ptr<Type>
promoted
()
const override
{
56
abort();
57
}
58
59
std::unique_ptr<Type>
demoted
()
const override
{
60
abort();
61
}
62
63
std::string
format
()
const override
{
64
return
std::format(
"[{} x {}]"
,
numElements
(), *
elementType
());
65
}
66
67
std::unique_ptr<Type>
clone
()
const override
{
68
return
std::make_unique<ArrayType>(
elementType
(),
numElements
());
69
}
70
71
void
accept
(
TypeVisitor
&visitor)
override
{
72
visitor.
visitArrayType
(*
this
);
73
}
74
75
void
accept
(
TypeVisitor
&visitor)
const override
{
76
visitor.
visitArrayType
(*
this
);
77
}
78
79
protected
:
80
bool
equals
(
const
Type
&other)
const override
;
81
82
private
:
83
std::unique_ptr<Type> elementType_;
84
size_t
numElements_;
85
};
86
87
}
// namespace mini_llvm::ir
Compiler.h
MINI_LLVM_EXPORT
#define MINI_LLVM_EXPORT
Definition
Compiler.h:17
TypeVisitor.h
Type.h
mini_llvm::ir::ArrayType::format
std::string format() const override
Definition
ArrayType.h:63
mini_llvm::ir::ArrayType::accept
void accept(TypeVisitor &visitor) override
Definition
ArrayType.h:71
mini_llvm::ir::ArrayType::equals
bool equals(const Type &other) const override
mini_llvm::ir::ArrayType::numElements
size_t numElements() const
Definition
ArrayType.h:29
mini_llvm::ir::ArrayType::alignment
int alignment() const override
Definition
ArrayType.h:37
mini_llvm::ir::ArrayType::promoted
std::unique_ptr< Type > promoted() const override
Definition
ArrayType.h:55
mini_llvm::ir::ArrayType::size
int size() const override
Definition
ArrayType.h:33
mini_llvm::ir::ArrayType::demoted
std::unique_ptr< Type > demoted() const override
Definition
ArrayType.h:59
mini_llvm::ir::ArrayType::zeroValue
std::unique_ptr< Constant > zeroValue() const override
mini_llvm::ir::ArrayType::constant
std::unique_ptr< Constant > constant(int64_t) const override
Definition
ArrayType.h:51
mini_llvm::ir::ArrayType::ArrayType
ArrayType(std::unique_ptr< Type > elementType, size_t numElements)
Definition
ArrayType.h:22
mini_llvm::ir::ArrayType::clone
std::unique_ptr< Type > clone() const override
Definition
ArrayType.h:67
mini_llvm::ir::ArrayType::accept
void accept(TypeVisitor &visitor) const override
Definition
ArrayType.h:75
mini_llvm::ir::ArrayType::size
int size(int pointerSize) const override
Definition
ArrayType.h:41
mini_llvm::ir::ArrayType::elementType
std::unique_ptr< Type > elementType() const
Definition
ArrayType.h:25
mini_llvm::ir::ArrayType::alignment
int alignment(int pointerAlignment) const override
Definition
ArrayType.h:45
mini_llvm::ir::TypeVisitor
Definition
TypeVisitor.h:25
mini_llvm::ir::TypeVisitor::visitArrayType
virtual void visitArrayType(ArrayType &type)
Definition
TypeVisitor.h:37
mini_llvm::ir::Type::Type
Type()=default
Constant.h
mini_llvm::ir
Definition
Argument.h:13
include
mini-llvm
ir
Type
ArrayType.h
Generated by
1.17.0