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.