LLVM: include/llvm/ADT/ilist_node_options.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9#ifndef LLVM_ADT_ILIST_NODE_OPTIONS_H
10#define LLVM_ADT_ILIST_NODE_OPTIONS_H
11
12#include "llvm/Config/abi-breaking.h"
13
14#include <type_traits>
15
16namespace llvm {
17
18template <bool EnableSentinelTracking, class ParentTy> class ilist_node_base;
19template <bool EnableSentinelTracking, class ParentTy> class ilist_base;
20
21
22
23
24
25
27
28
29
30
31
33
34
35
36
37
38
39
41
42
43
44
45
46
47
48
49
50
51
52
54
56
57
63
64
65
66
67
68
69
70
71
72
73
74
75template struct is_valid_option : std::false_type {};
76
77
78
79
80
82template <bool EnableSentinelTracking, class... Options>
85 : std::bool_constant, is_explicit {};
86template <class Option1, class... Options>
89#if LLVM_ENABLE_ABI_BREAKING_CHECKS
91#else
92template <>
94#endif
95template
98
99
100
101
102
104template <class Tag, class... Options>
108template <class Option1, class... Options>
114
115
116
117
118
120template <bool IteratorBits, class... Options>
122 : std::bool_constant {};
123template <class Option1, class... Options>
127template
129
130
131
132
133
135template <class ParentTy, class... Options>
139template <class Option1, class... Options>
144template
146
147
148
149
150template <class... Options>
151struct check_options : std::conjunction<is_valid_option...> {};
152
153
154
155
156template <class T, bool EnableSentinelTracking, bool IsSentinelTrackingExplicit,
157 class TagT, bool HasIteratorBits, class ParentTy>
173
181
182}
183}
184
185#endif
Implementations of list algorithms using ilist_node_base.
Base class for ilist nodes.
explicitness< true > is_explicit
Definition ilist_node_options.h:61
explicitness< false > is_implicit
Definition ilist_node_options.h:62
This is an optimization pass for GlobalISel generic memory operations.
Check whether options are valid.
Definition ilist_node_options.h:151
node_options< T, extract_sentinel_tracking< Options... >::value, extract_sentinel_tracking< Options... >::is_explicit, typename extract_tag< Options... >::type, extract_iterator_bits< Options... >::value, typename extract_parent< Options... >::type > type
Definition ilist_node_options.h:175
Helper trait for recording whether an option is specified explicitly.
Definition ilist_node_options.h:58
static const bool is_explicit
Definition ilist_node_options.h:59
Check whether an option is valid.
Definition ilist_node_options.h:75
Traits for options for ilist_node.
Definition ilist_node_options.h:158
const T & const_reference
Definition ilist_node_options.h:163
ilist_node_base< enable_sentinel_tracking, parent_ty > node_base_type
Definition ilist_node_options.h:170
T value_type
Definition ilist_node_options.h:159
static const bool enable_sentinel_tracking
Definition ilist_node_options.h:165
T & reference
Definition ilist_node_options.h:161
ParentTy parent_ty
Definition ilist_node_options.h:169
T * pointer
Definition ilist_node_options.h:160
static const bool is_sentinel_tracking_explicit
Definition ilist_node_options.h:166
TagT tag
Definition ilist_node_options.h:168
static const bool has_iterator_bits
Definition ilist_node_options.h:167
ilist_base< enable_sentinel_tracking, parent_ty > list_base_type
Definition ilist_node_options.h:171
const T * const_pointer
Definition ilist_node_options.h:162
Option to add extra bits to the ilist_iterator.
Definition ilist_node_options.h:40
Option to add a pointer to this list's owner in every node.
Definition ilist_node_options.h:53
Option to choose whether to track sentinels.
Definition ilist_node_options.h:26
Option to specify a tag for the node type.
Definition ilist_node_options.h:32