13#ifndef LLVM_TEXTAPI_ARCHITECTURESET_H
14#define LLVM_TEXTAPI_ARCHITECTURESET_H
34 const static ArchSetType EndIndexVal =
35 std::numeric_limits<ArchSetType>::max();
36 ArchSetType ArchSet{0};
49 ArchSet |= 1U <<
static_cast<int>(Arch);
53 ArchSet &= ~(1U <<
static_cast<int>(Arch));
58 return ArchSet & (1U <<
static_cast<int>(Arch));
62 return (ArchSet & Archs.ArchSet) == Archs.ArchSet;
67 bool empty()
const {
return ArchSet == 0; }
69 ArchSetType
rawValue()
const {
return ArchSet; }
72 return has(AK_i386) ||
has(AK_x86_64) ||
has(AK_x86_64h);
87 void findNextSetBit() {
88 if (Index == EndIndexVal)
90 while (++Index <
sizeof(Ty) * 8) {
91 if (*ArchSet & (1UL << Index))
100 : Index(Index), ArchSet(ArchSet) {
101 if (Index != EndIndexVal && !(*ArchSet & (1UL << Index)))
119 return std::tie(Index, ArchSet) == std::tie(o.Index, o.ArchSet);
126 return {ArchSet & o.ArchSet};
130 return {ArchSet | o.ArchSet};
134 ArchSet |= o.ArchSet;
144 return ArchSet == o.ArchSet;
148 return ArchSet != o.ArchSet;
162 LLVM_ABI operator std::string()
const;
163 LLVM_ABI operator std::vector<Architecture>()
const;
arch_iterator(Ty *ArchSet, ArchSetType Index=0)
bool operator!=(const arch_iterator &o) const
std::forward_iterator_tag iterator_category
arch_iterator & operator++()
bool operator==(const arch_iterator &o) const
std::size_t difference_type
Architecture operator*() const
arch_iterator operator++(int)
constexpr ArchitectureSet(ArchSetType Raw)
static ArchitectureSet All()
arch_iterator< ArchSetType > iterator
ArchSetType rawValue() const
const_iterator end() const
ArchitectureSet clear(Architecture Arch)
constexpr ArchitectureSet()=default
bool operator==(const ArchitectureSet &o) const
bool has(Architecture Arch) const
void set(Architecture Arch)
const_iterator begin() const
bool contains(ArchitectureSet Archs) const
bool operator!=(const ArchitectureSet &o) const
ArchitectureSet operator&(const ArchitectureSet &o)
ArchitectureSet & operator|=(const Architecture &Arch)
ArchitectureSet(Architecture Arch)
LLVM_ABI size_t count() const
ArchitectureSet & operator|=(const ArchitectureSet &o)
arch_iterator< const ArchSetType > const_iterator
ArchitectureSet operator|(const ArchitectureSet &o)
bool operator<(const ArchitectureSet &o) const
LLVM_ABI void print(raw_ostream &OS) const
This class implements an extremely fast bulk output stream that can only output to a stream.
ArchitectureSet operator|(const Architecture &lhs, const Architecture &rhs)
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.