[PATCH] D64663: Extend function attributes bitset size from 64 to 96.
Evgenii Stepanov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 12 13:03:28 PDT 2019
eugenis created this revision.
eugenis added reviewers: pcc, jdoerfert, lebedev.ri.
Herald added a subscriber: hiraditya.
Herald added a project: LLVM.
We are going to add a function attribute number 64.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D64663
Files:
llvm/lib/IR/AttributeImpl.h
llvm/lib/IR/Attributes.cpp
Index: llvm/lib/IR/Attributes.cpp
===================================================================
--- llvm/lib/IR/Attributes.cpp
+++ llvm/lib/IR/Attributes.cpp
@@ -896,7 +896,7 @@
AttributeListImpl::AttributeListImpl(LLVMContext &C,
ArrayRef<AttributeSet> Sets)
- : AvailableFunctionAttrs(0), Context(C), NumAttrSets(Sets.size()) {
+ : Context(C), NumAttrSets(Sets.size()), AvailableFunctionAttrs{} {
assert(!Sets.empty() && "pointless AttributeListImpl");
// There's memory after the node where we can store the entries in.
@@ -909,8 +909,10 @@
static_assert(attrIdxToArrayIdx(AttributeList::FunctionIndex) == 0U,
"function should be stored in slot 0");
for (const auto I : Sets[0]) {
- if (!I.isStringAttribute())
- AvailableFunctionAttrs |= 1ULL << I.getKindAsEnum();
+ if (!I.isStringAttribute()) {
+ Attribute::AttrKind Kind = I.getKindAsEnum();
+ AvailableFunctionAttrs[Kind / 8] |= 1ULL << (Kind % 8);
+ }
}
}
Index: llvm/lib/IR/AttributeImpl.h
===================================================================
--- llvm/lib/IR/AttributeImpl.h
+++ llvm/lib/IR/AttributeImpl.h
@@ -244,10 +244,10 @@
friend TrailingObjects;
private:
- /// Bitset with a bit for each available attribute Attribute::AttrKind.
- uint64_t AvailableFunctionAttrs;
LLVMContext &Context;
unsigned NumAttrSets; ///< Number of entries in this set.
+ /// Bitset with a bit for each available attribute Attribute::AttrKind.
+ uint8_t AvailableFunctionAttrs[12];
// Helper fn for TrailingObjects class.
size_t numTrailingObjects(OverloadToken<AttributeSet>) { return NumAttrSets; }
@@ -267,7 +267,7 @@
/// Return true if the AttributeSet or the FunctionIndex has an
/// enum attribute of the given kind.
bool hasFnAttribute(Attribute::AttrKind Kind) const {
- return AvailableFunctionAttrs & ((uint64_t)1) << Kind;
+ return AvailableFunctionAttrs[Kind / 8] & ((uint64_t)1) << (Kind % 8);
}
using iterator = const AttributeSet *;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D64663.209572.patch
Type: text/x-patch
Size: 2065 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190712/1715f812/attachment.bin>
More information about the llvm-commits
mailing list