LLVM: include/llvm/TextAPI/ArchitectureSet.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13#ifndef LLVM_TEXTAPI_ARCHITECTURESET_H

14#define LLVM_TEXTAPI_ARCHITECTURESET_H

15

18#include

19#include

20#include

21#include

22#include

23#include

24

25namespace llvm {

27

29

31private:

33

34 const static ArchSetType EndIndexVal =

35 std::numeric_limits::max();

36 ArchSetType ArchSet{0};

37

38public:

43

45

48 return;

49 ArchSet |= 1U << static_cast<int>(Arch);

50 }

51

53 ArchSet &= ~(1U << static_cast<int>(Arch));

54 return ArchSet;

55 }

56

58 return ArchSet & (1U << static_cast<int>(Arch));

59 }

60

62 return (ArchSet & Archs.ArchSet) == Archs.ArchSet;

63 }

64

66

67 bool empty() const { return ArchSet == 0; }

68

69 ArchSetType rawValue() const { return ArchSet; }

70

72 return has(AK_i386) || has(AK_x86_64) || has(AK_x86_64h);

73 }

74

76 public:

82

83 private:

84 ArchSetType Index;

85 Ty *ArchSet;

86

87 void findNextSetBit() {

88 if (Index == EndIndexVal)

89 return;

90 while (++Index < sizeof(Ty) * 8) {

91 if (*ArchSet & (1UL << Index))

92 return;

93 }

94

95 Index = EndIndexVal;

96 }

97

98 public:

100 : Index(Index), ArchSet(ArchSet) {

101 if (Index != EndIndexVal && !(*ArchSet & (1UL << Index)))

102 findNextSetBit();

103 }

104

106

108 findNextSetBit();

109 return *this;

110 }

111

113 auto tmp = *this;

114 findNextSetBit();

115 return tmp;

116 }

117

119 return std::tie(Index, ArchSet) == std::tie(o.Index, o.ArchSet);

120 }

121

123 };

124

126 return {ArchSet & o.ArchSet};

127 }

128

130 return {ArchSet | o.ArchSet};

131 }

132

134 ArchSet |= o.ArchSet;

135 return *this;

136 }

137

139 set(Arch);

140 return *this;

141 }

142

144 return ArchSet == o.ArchSet;

145 }

146

148 return ArchSet != o.ArchSet;

149 }

150

152

155

158

161

162 LLVM_ABI operator std::string() const;

163 LLVM_ABI operator std::vector() const;

165};

166

171

173

174}

175}

176

177#endif

Definition ArchitectureSet.h:75

Architecture value_type

Definition ArchitectureSet.h:78

arch_iterator(Ty *ArchSet, ArchSetType Index=0)

Definition ArchitectureSet.h:99

bool operator!=(const arch_iterator &o) const

Definition ArchitectureSet.h:122

std::forward_iterator_tag iterator_category

Definition ArchitectureSet.h:77

arch_iterator & operator++()

Definition ArchitectureSet.h:107

value_type * pointer

Definition ArchitectureSet.h:80

bool operator==(const arch_iterator &o) const

Definition ArchitectureSet.h:118

std::size_t difference_type

Definition ArchitectureSet.h:79

Architecture operator*() const

Definition ArchitectureSet.h:105

value_type & reference

Definition ArchitectureSet.h:81

arch_iterator operator++(int)

Definition ArchitectureSet.h:112

Definition ArchitectureSet.h:30

constexpr ArchitectureSet(ArchSetType Raw)

Definition ArchitectureSet.h:40

static ArchitectureSet All()

Definition ArchitectureSet.h:44

arch_iterator< ArchSetType > iterator

Definition ArchitectureSet.h:153

ArchSetType rawValue() const

Definition ArchitectureSet.h:69

const_iterator end() const

Definition ArchitectureSet.h:160

ArchitectureSet clear(Architecture Arch)

Definition ArchitectureSet.h:52

constexpr ArchitectureSet()=default

bool operator==(const ArchitectureSet &o) const

Definition ArchitectureSet.h:143

bool has(Architecture Arch) const

Definition ArchitectureSet.h:57

void set(Architecture Arch)

Definition ArchitectureSet.h:46

const_iterator begin() const

Definition ArchitectureSet.h:159

bool contains(ArchitectureSet Archs) const

Definition ArchitectureSet.h:61

bool operator!=(const ArchitectureSet &o) const

Definition ArchitectureSet.h:147

iterator end()

Definition ArchitectureSet.h:157

ArchitectureSet operator&(const ArchitectureSet &o)

Definition ArchitectureSet.h:125

ArchitectureSet & operator|=(const Architecture &Arch)

Definition ArchitectureSet.h:138

ArchitectureSet(Architecture Arch)

Definition ArchitectureSet.h:41

LLVM_ABI size_t count() const

bool hasX86() const

Definition ArchitectureSet.h:71

iterator begin()

Definition ArchitectureSet.h:156

ArchitectureSet & operator|=(const ArchitectureSet &o)

Definition ArchitectureSet.h:133

arch_iterator< const ArchSetType > const_iterator

Definition ArchitectureSet.h:154

ArchitectureSet operator|(const ArchitectureSet &o)

Definition ArchitectureSet.h:129

bool operator<(const ArchitectureSet &o) const

Definition ArchitectureSet.h:151

LLVM_ABI void print(raw_ostream &OS) const

bool empty() const

Definition ArchitectureSet.h:67

This class implements an extremely fast bulk output stream that can only output to a stream.

ArchitectureSet operator|(const Architecture &lhs, const Architecture &rhs)

Definition ArchitectureSet.h:167

Architecture

Defines the architecture slices that are supported by Text-based Stub files.

LLVM_ABI raw_ostream & operator<<(raw_ostream &OS, Architecture Arch)

This is an optimization pass for GlobalISel generic memory operations.