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