forked from OSchip/llvm-project
[NFC][AttributeList] Replace index_begin/end with an iterator
We expose the fact that we rely on unsigned wrapping to iterate through all indexes. This can be confusing. Rather, keeping it as an implementation detail through an iterator is less confusing and is less code. Reviewed By: rnk Differential Revision: https://reviews.llvm.org/D110885
This commit is contained in:
parent
31c92d515d
commit
a7b4ce9cfd
|
@ -237,8 +237,7 @@ bool fixupRSAllocationStructByValCalls(llvm::Module &module) {
|
|||
llvm::AttributeList call_attribs = call_inst->getAttributes();
|
||||
|
||||
// iterate over the argument attributes
|
||||
for (unsigned I = call_attribs.index_begin(); I != call_attribs.index_end();
|
||||
I++) {
|
||||
for (unsigned I : call_attribs.indexes()) {
|
||||
// if this argument is passed by val
|
||||
if (call_attribs.hasAttributeAtIndex(I, llvm::Attribute::ByVal)) {
|
||||
// strip away the byval attribute
|
||||
|
|
|
@ -851,9 +851,32 @@ public:
|
|||
|
||||
unsigned getNumAttrSets() const;
|
||||
|
||||
/// Use these to iterate over the valid attribute indices.
|
||||
unsigned index_begin() const { return AttributeList::FunctionIndex; }
|
||||
unsigned index_end() const { return getNumAttrSets() - 1; }
|
||||
// Implementation of indexes(). Produces iterators that wrap an index. Mostly
|
||||
// to hide the awkwardness of unsigned wrapping when iterating over valid
|
||||
// indexes.
|
||||
struct index_iterator {
|
||||
unsigned NumAttrSets;
|
||||
index_iterator(int NumAttrSets) : NumAttrSets(NumAttrSets) {}
|
||||
struct int_wrapper {
|
||||
int_wrapper(unsigned i) : i(i) {}
|
||||
unsigned i;
|
||||
unsigned operator*() { return i; }
|
||||
bool operator!=(const int_wrapper &Other) { return i != Other.i; }
|
||||
int_wrapper &operator++() {
|
||||
// This is expected to undergo unsigned wrapping since FunctionIndex is
|
||||
// ~0 and that's where we start.
|
||||
++i;
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
||||
int_wrapper begin() { return int_wrapper(AttributeList::FunctionIndex); }
|
||||
|
||||
int_wrapper end() { return int_wrapper(NumAttrSets - 1); }
|
||||
};
|
||||
|
||||
/// Use this to iterate over the valid attribute indexes.
|
||||
index_iterator indexes() const { return index_iterator(getNumAttrSets()); }
|
||||
|
||||
/// operator==/!= - Provide equality predicates.
|
||||
bool operator==(const AttributeList &RHS) const { return pImpl == RHS.pImpl; }
|
||||
|
|
|
@ -835,7 +835,7 @@ void ModuleBitcodeWriter::writeAttributeTable() {
|
|||
SmallVector<uint64_t, 64> Record;
|
||||
for (unsigned i = 0, e = Attrs.size(); i != e; ++i) {
|
||||
AttributeList AL = Attrs[i];
|
||||
for (unsigned i = AL.index_begin(), e = AL.index_end(); i != e; ++i) {
|
||||
for (unsigned i : AL.indexes()) {
|
||||
AttributeSet AS = AL.getAttributes(i);
|
||||
if (AS.hasAttributes())
|
||||
Record.push_back(VE.getAttributeGroupID({i, AS}));
|
||||
|
|
|
@ -1039,7 +1039,7 @@ void ValueEnumerator::EnumerateAttributes(AttributeList PAL) {
|
|||
}
|
||||
|
||||
// Do lookups for all attribute groups.
|
||||
for (unsigned i = PAL.index_begin(), e = PAL.index_end(); i != e; ++i) {
|
||||
for (unsigned i : PAL.indexes()) {
|
||||
AttributeSet AS = PAL.getAttributes(i);
|
||||
if (!AS.hasAttributes())
|
||||
continue;
|
||||
|
|
|
@ -1527,7 +1527,7 @@ unsigned AttributeList::getNumAttrSets() const {
|
|||
void AttributeList::print(raw_ostream &O) const {
|
||||
O << "AttributeList[\n";
|
||||
|
||||
for (unsigned i = index_begin(), e = index_end(); i != e; ++i) {
|
||||
for (unsigned i : indexes()) {
|
||||
if (!getAttributes(i).hasAttributes())
|
||||
continue;
|
||||
O << " { ";
|
||||
|
|
|
@ -110,7 +110,7 @@ int FunctionComparator::cmpAttrs(const AttributeList L,
|
|||
if (int Res = cmpNumbers(L.getNumAttrSets(), R.getNumAttrSets()))
|
||||
return Res;
|
||||
|
||||
for (unsigned i = L.index_begin(), e = L.index_end(); i != e; ++i) {
|
||||
for (unsigned i : L.indexes()) {
|
||||
AttributeSet LAS = L.getAttributes(i);
|
||||
AttributeSet RAS = R.getAttributes(i);
|
||||
AttributeSet::iterator LI = LAS.begin(), LE = LAS.end();
|
||||
|
|
|
@ -84,8 +84,7 @@ public:
|
|||
AttrPtrVecVecTy &AttributeSetsToPreserve) {
|
||||
assert(AttributeSetsToPreserve.empty() && "Should not be sharing vectors.");
|
||||
AttributeSetsToPreserve.reserve(AL.getNumAttrSets());
|
||||
for (unsigned SetIdx = AL.index_begin(), SetEndIdx = AL.index_end();
|
||||
SetIdx != SetEndIdx; ++SetIdx) {
|
||||
for (unsigned SetIdx : AL.indexes()) {
|
||||
AttrPtrIdxVecVecTy AttributesToPreserve;
|
||||
AttributesToPreserve.first = SetIdx;
|
||||
visitAttributeSet(AL.getAttributes(AttributesToPreserve.first),
|
||||
|
|
Loading…
Reference in New Issue