One Hat Cyber Team
Your IP :
216.73.216.115
Server IP :
194.44.31.54
Server :
Linux zen.imath.kiev.ua 4.18.0-553.77.1.el8_10.x86_64 #1 SMP Fri Oct 3 14:30:23 UTC 2025 x86_64
Server Software :
Apache/2.4.37 (Rocky Linux) OpenSSL/1.1.1k
PHP Version :
5.6.40
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
usr
/
include
/
llvm
/
IR
/
View File Name :
AttributeMask.h
//===- llvm/AttributeMask.h - Mask for Attributes ---------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // /// \file // This file declares the AttributeMask class. // //===----------------------------------------------------------------------===// #ifndef LLVM_IR_ATTRIBUTEMASK_H #define LLVM_IR_ATTRIBUTEMASK_H #include "llvm/ADT/SmallString.h" #include "llvm/IR/Attributes.h" #include <bitset> #include <cassert> #include <set> namespace llvm { //===----------------------------------------------------------------------===// /// \class /// This class stores enough information to efficiently remove some attributes /// from an existing AttrBuilder, AttributeSet or AttributeList. class AttributeMask { std::bitset<Attribute::EndAttrKinds> Attrs; std::set<SmallString<32>, std::less<>> TargetDepAttrs; public: AttributeMask() = default; AttributeMask(const AttributeMask &) = delete; AttributeMask(AttributeMask &&) = default; AttributeMask(AttributeSet AS) { for (Attribute A : AS) addAttribute(A); } /// Add an attribute to the mask. AttributeMask &addAttribute(Attribute::AttrKind Val) { assert((unsigned)Val < Attribute::EndAttrKinds && "Attribute out of range!"); Attrs[Val] = true; return *this; } /// Add the Attribute object to the builder. AttributeMask &addAttribute(Attribute A) { if (A.isStringAttribute()) addAttribute(A.getKindAsString()); else addAttribute(A.getKindAsEnum()); return *this; } /// Add the target-dependent attribute to the builder. AttributeMask &addAttribute(StringRef A) { TargetDepAttrs.insert(A); return *this; } /// Return true if the builder has the specified attribute. bool contains(Attribute::AttrKind A) const { assert((unsigned)A < Attribute::EndAttrKinds && "Attribute out of range!"); return Attrs[A]; } /// Return true if the builder has the specified target-dependent /// attribute. bool contains(StringRef A) const { return TargetDepAttrs.count(A); } /// Return true if the mask contains the specified attribute. bool contains(Attribute A) const { if (A.isStringAttribute()) return contains(A.getKindAsString()); return contains(A.getKindAsEnum()); } }; } // end namespace llvm #endif // LLVM_IR_ATTRIBUTEMASK_H