Skip to content

Commit 16bb84f

Browse files
authored
Merge pull request #27574 from jrose-apple/we-could-have-called-them-iterator-stoves
Remove IteratorRange in favor of llvm::iterator_range
2 parents 1724f5b + a1ea211 commit 16bb84f

File tree

19 files changed

+45
-90
lines changed

19 files changed

+45
-90
lines changed

include/swift/AST/Attr.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1672,7 +1672,7 @@ class DeclAttributes {
16721672
public:
16731673
template <typename ATTR, bool AllowInvalid>
16741674
using AttributeKindRange =
1675-
OptionalTransformRange<llvm::iterator_range<const_iterator>,
1675+
OptionalTransformRange<iterator_range<const_iterator>,
16761676
ToAttributeKind<ATTR, AllowInvalid>,
16771677
const_iterator>;
16781678

include/swift/AST/DeclContext.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -667,7 +667,7 @@ class DeclIterator {
667667

668668
/// The range of declarations stored within an iterable declaration
669669
/// context.
670-
typedef IteratorRange<DeclIterator> DeclRange;
670+
using DeclRange = iterator_range<DeclIterator>;
671671

672672
/// The kind of an \c IterableDeclContext.
673673
enum class IterableDeclContextKind : uint8_t {

include/swift/AST/Types.h

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3965,13 +3965,11 @@ class SILFunctionType final : public TypeBase, public llvm::FoldingSetNode,
39653965
};
39663966
using IndirectFormalResultIter =
39673967
llvm::filter_iterator<const SILResultInfo *, IndirectFormalResultFilter>;
3968-
using IndirectFormalResultRange = IteratorRange<IndirectFormalResultIter>;
3968+
using IndirectFormalResultRange = iterator_range<IndirectFormalResultIter>;
39693969

39703970
/// A range of SILResultInfo for all formally indirect results.
39713971
IndirectFormalResultRange getIndirectFormalResults() const {
3972-
auto filter =
3973-
llvm::make_filter_range(getResults(), IndirectFormalResultFilter());
3974-
return makeIteratorRange(filter.begin(), filter.end());
3972+
return llvm::make_filter_range(getResults(), IndirectFormalResultFilter());
39753973
}
39763974

39773975
struct DirectFormalResultFilter {
@@ -3981,13 +3979,11 @@ class SILFunctionType final : public TypeBase, public llvm::FoldingSetNode,
39813979
};
39823980
using DirectFormalResultIter =
39833981
llvm::filter_iterator<const SILResultInfo *, DirectFormalResultFilter>;
3984-
using DirectFormalResultRange = IteratorRange<DirectFormalResultIter>;
3982+
using DirectFormalResultRange = iterator_range<DirectFormalResultIter>;
39853983

39863984
/// A range of SILResultInfo for all formally direct results.
39873985
DirectFormalResultRange getDirectFormalResults() const {
3988-
auto filter =
3989-
llvm::make_filter_range(getResults(), DirectFormalResultFilter());
3990-
return makeIteratorRange(filter.begin(), filter.end());
3986+
return llvm::make_filter_range(getResults(), DirectFormalResultFilter());
39913987
}
39923988

39933989
/// Get a single non-address SILType that represents all formal direct

include/swift/Basic/BlotSetVector.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,14 @@ class BlotSetVector {
6767

6868
ArrayRef<Optional<ValueT>> getArray() const { return vector; }
6969

70-
llvm::iterator_range<const_iterator> getRange() const {
70+
iterator_range<const_iterator> getRange() const {
7171
return {begin(), end()};
7272
}
7373

7474
using const_reverse_iterator = typename VectorT::const_reverse_iterator;
7575
const_reverse_iterator rbegin() const { return vector.rbegin(); }
7676
const_reverse_iterator rend() const { return vector.rend(); }
77-
llvm::iterator_range<const_reverse_iterator> getReverseRange() const {
77+
iterator_range<const_reverse_iterator> getReverseRange() const {
7878
return {rbegin(), rend()};
7979
}
8080

include/swift/Basic/LLVM.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ namespace llvm {
4343
template<typename T> class TinyPtrVector;
4444
template<typename T> class Optional;
4545
template <typename ...PTs> class PointerUnion;
46+
template <typename IteratorT> class iterator_range;
4647
class SmallBitVector;
4748

4849
// Other common classes.
@@ -63,6 +64,7 @@ namespace swift {
6364

6465
// Containers.
6566
using llvm::ArrayRef;
67+
using llvm::iterator_range;
6668
using llvm::MutableArrayRef;
6769
using llvm::None;
6870
using llvm::Optional;

include/swift/Basic/Range.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444

4545
namespace swift {
4646
using llvm::make_range;
47-
using llvm::iterator_range;
4847

4948
template<typename T>
5049
inline auto reversed(T &&container)

include/swift/Basic/STLExtras.h

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -251,37 +251,13 @@ inline Iterator prev_or_begin(Iterator it, Iterator begin) {
251251

252252
/// @}
253253

254-
/// A range of iterators.
255-
/// TODO: Add `llvm::iterator_range::empty()`, then remove this helper, along
256-
/// with the superfluous TransformIterator.
257-
template<typename Iterator>
258-
class IteratorRange {
259-
Iterator First, Last;
260-
261-
public:
262-
using iterator = Iterator;
263-
264-
IteratorRange(Iterator first, Iterator last) : First(first), Last(last) { }
265-
iterator begin() const { return First; }
266-
iterator end() const { return Last; }
267-
bool empty() const { return First == Last; }
268-
269-
typename std::iterator_traits<iterator>::value_type front() const {
270-
assert(!empty() && "Front of empty range");
271-
return *begin();
272-
}
273-
};
274-
275-
/// Create a new iterator range.
276-
template<typename Iterator>
277-
inline IteratorRange<Iterator>
278-
makeIteratorRange(Iterator first, Iterator last) {
279-
return IteratorRange<Iterator>(first, last);
280-
}
281254

282255
/// An iterator that transforms the result of an underlying bidirectional
283256
/// iterator with a given operation.
284257
///
258+
/// Slightly different semantics from llvm::map_iterator, but we should
259+
/// probably figure out how to merge them eventually.
260+
///
285261
/// \tparam Iterator the underlying iterator.
286262
///
287263
/// \tparam Operation A function object that transforms the underlying

include/swift/SIL/Notifications.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ class DeserializationNotificationHandlerSet final
194194
using iterator = llvm::mapped_iterator<
195195
decltype(handlerSet)::const_iterator,
196196
decltype(&DeserializationNotificationHandlerSet::getUnderlyingHandler)>;
197-
using range = llvm::iterator_range<iterator>;
197+
using range = iterator_range<iterator>;
198198

199199
/// Returns an iterator to the first element of the handler set.
200200
///

include/swift/SIL/SILFunctionConventions.h

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -193,10 +193,9 @@ class SILFunctionConventions {
193193
if (silConv.loweredAddresses)
194194
return funcTy->getIndirectFormalResults();
195195

196-
auto filter = llvm::make_filter_range(
197-
makeIteratorRange((const SILResultInfo *)0, (const SILResultInfo *)0),
196+
return llvm::make_filter_range(
197+
llvm::make_range((const SILResultInfo *)0, (const SILResultInfo *)0),
198198
SILFunctionType::IndirectFormalResultFilter());
199-
return makeIteratorRange(filter.begin(), filter.end());
200199
}
201200

202201
struct SILResultTypeFunc {
@@ -210,16 +209,12 @@ class SILFunctionConventions {
210209

211210
using IndirectSILResultTypeIter =
212211
llvm::mapped_iterator<IndirectSILResultIter, SILResultTypeFunc>;
213-
using IndirectSILResultTypeRange = IteratorRange<IndirectSILResultTypeIter>;
212+
using IndirectSILResultTypeRange = iterator_range<IndirectSILResultTypeIter>;
214213

215214
/// Return a range of SILTypes for each result passed as an address-typed SIL
216215
/// argument.
217216
IndirectSILResultTypeRange getIndirectSILResultTypes() const {
218-
return makeIteratorRange(
219-
IndirectSILResultTypeIter(getIndirectSILResults().begin(),
220-
SILResultTypeFunc(silConv)),
221-
IndirectSILResultTypeIter(getIndirectSILResults().end(),
222-
SILResultTypeFunc(silConv)));
217+
return llvm::map_range(getIndirectSILResults(), SILResultTypeFunc(silConv));
223218
}
224219

225220
/// Get the number of SIL results directly returned by SIL value.
@@ -238,28 +233,23 @@ class SILFunctionConventions {
238233
};
239234
using DirectSILResultIter =
240235
llvm::filter_iterator<const SILResultInfo *, DirectSILResultFilter>;
241-
using DirectSILResultRange = IteratorRange<DirectSILResultIter>;
236+
using DirectSILResultRange = iterator_range<DirectSILResultIter>;
242237

243238
/// Return a range of direct result information for results directly returned
244239
/// by SIL value.
245240
DirectSILResultRange getDirectSILResults() const {
246-
auto filter = llvm::make_filter_range(
241+
return llvm::make_filter_range(
247242
funcTy->getResults(), DirectSILResultFilter(silConv.loweredAddresses));
248-
return makeIteratorRange(filter.begin(), filter.end());
249243
}
250244

251245
using DirectSILResultTypeIter =
252246
llvm::mapped_iterator<DirectSILResultIter, SILResultTypeFunc>;
253-
using DirectSILResultTypeRange = IteratorRange<DirectSILResultTypeIter>;
247+
using DirectSILResultTypeRange = iterator_range<DirectSILResultTypeIter>;
254248

255249
/// Return a range of SILTypes for each result directly returned
256250
/// by SIL value.
257251
DirectSILResultTypeRange getDirectSILResultTypes() const {
258-
return makeIteratorRange(
259-
DirectSILResultTypeIter(getDirectSILResults().begin(),
260-
SILResultTypeFunc(silConv)),
261-
DirectSILResultTypeIter(getDirectSILResults().end(),
262-
SILResultTypeFunc(silConv)));
252+
return llvm::map_range(getDirectSILResults(), SILResultTypeFunc(silConv));
263253
}
264254

265255
//===--------------------------------------------------------------------===//
@@ -288,16 +278,13 @@ class SILFunctionConventions {
288278

289279
using SILParameterTypeIter =
290280
llvm::mapped_iterator<const SILParameterInfo *, SILParameterTypeFunc>;
291-
using SILParameterTypeRange = IteratorRange<SILParameterTypeIter>;
281+
using SILParameterTypeRange = iterator_range<SILParameterTypeIter>;
292282

293283
/// Return a range of SILTypes for each function parameter, not including
294284
/// indirect results.
295285
SILParameterTypeRange getParameterSILTypes() const {
296-
return makeIteratorRange(
297-
SILParameterTypeIter(funcTy->getParameters().begin(),
298-
SILParameterTypeFunc(silConv)),
299-
SILParameterTypeIter(funcTy->getParameters().end(),
300-
SILParameterTypeFunc(silConv)));
286+
return llvm::map_range(funcTy->getParameters(),
287+
SILParameterTypeFunc(silConv));
301288
}
302289

303290
//===--------------------------------------------------------------------===//
@@ -312,14 +299,10 @@ class SILFunctionConventions {
312299

313300
using SILYieldTypeIter =
314301
llvm::mapped_iterator<const SILYieldInfo *, SILParameterTypeFunc>;
315-
using SILYieldTypeRange = IteratorRange<SILYieldTypeIter>;
302+
using SILYieldTypeRange = iterator_range<SILYieldTypeIter>;
316303

317304
SILYieldTypeRange getYieldSILTypes() const {
318-
return makeIteratorRange(
319-
SILYieldTypeIter(funcTy->getYields().begin(),
320-
SILParameterTypeFunc(silConv)),
321-
SILYieldTypeIter(funcTy->getYields().end(),
322-
SILParameterTypeFunc(silConv)));
305+
return llvm::map_range(funcTy->getYields(), SILParameterTypeFunc(silConv));
323306
}
324307

325308
SILYieldInfo getYieldInfoForOperandIndex(unsigned opIndex) const {

include/swift/SIL/SILInstruction.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,12 @@ class SILInstructionResultArray {
168168
reverse_iterator rbegin() const;
169169
reverse_iterator rend() const;
170170

171-
using range = llvm::iterator_range<iterator>;
171+
using range = iterator_range<iterator>;
172172
range getValues() const;
173-
using reverse_range = llvm::iterator_range<reverse_iterator>;
173+
using reverse_range = iterator_range<reverse_iterator>;
174174
reverse_range getReversedValues() const;
175175

176-
using type_range = llvm::iterator_range<
176+
using type_range = iterator_range<
177177
llvm::mapped_iterator<iterator, SILType(*)(SILValue), SILType>>;
178178
type_range getTypes() const;
179179

include/swift/SIL/SILValue.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ class ValueBase : public SILNode, public SILAllocated<ValueBase> {
281281
template <typename Subclass>
282282
using DowncastUserFilterRange =
283283
DowncastFilterRange<Subclass,
284-
llvm::iterator_range<llvm::mapped_iterator<
284+
iterator_range<llvm::mapped_iterator<
285285
use_iterator, UseToUser, SILInstruction *>>>;
286286

287287
/// Iterate over the use list of this ValueBase visiting all users that are of

include/swift/SILOptimizer/Analysis/ClosureScope.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ class ClosureScopeAnalysis : public SILAnalysis {
102102
return None;
103103
}
104104
};
105-
using IndexRange = IteratorRange<int *>;
105+
using IndexRange = iterator_range<int *>;
106106

107107
public:
108108
// A range of SILFunction scopes converted from their scope indices and

include/swift/SILOptimizer/Analysis/LoopRegionAnalysis.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -591,11 +591,11 @@ class LoopRegion {
591591
return getSubregionData().rend();
592592
}
593593

594-
llvm::iterator_range<subregion_iterator> getSubregions() const {
594+
iterator_range<subregion_iterator> getSubregions() const {
595595
return {subregion_begin(), subregion_end()};
596596
}
597597

598-
llvm::iterator_range<subregion_reverse_iterator>
598+
iterator_range<subregion_reverse_iterator>
599599
getReverseSubregions() const {
600600
return {subregion_rbegin(), subregion_rend()};
601601
}
@@ -674,7 +674,7 @@ class LoopRegion {
674674
unsigned succ_size() const { return Succs.size(); }
675675

676676
private:
677-
using InnerSuccRange = IteratorRange<decltype(Succs)::const_iterator>;
677+
using InnerSuccRange = iterator_range<decltype(Succs)::const_iterator>;
678678

679679
public:
680680
using SuccRange =
@@ -964,7 +964,7 @@ class LoopRegionFunctionInfo {
964964
const_iterator end() const { return IDToRegionMap.end(); }
965965
unsigned size() const { return IDToRegionMap.size(); }
966966
bool empty() const { return IDToRegionMap.empty(); }
967-
llvm::iterator_range<const_iterator> getRegions() const {
967+
iterator_range<const_iterator> getRegions() const {
968968
return {begin(), end()};
969969
}
970970

include/swift/SILOptimizer/Utils/InstOptUtils.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,12 @@ template <class T> class NullablePtr;
3838
/// Transform a Use Range (Operand*) into a User Range (SILInstruction*)
3939
using UserTransform = std::function<SILInstruction *(Operand *)>;
4040
using ValueBaseUserRange =
41-
TransformRange<IteratorRange<ValueBase::use_iterator>, UserTransform>;
41+
TransformRange<iterator_range<ValueBase::use_iterator>, UserTransform>;
4242

4343
inline ValueBaseUserRange
4444
makeUserRange(iterator_range<ValueBase::use_iterator> range) {
4545
auto toUser = [](Operand *operand) { return operand->getUser(); };
46-
return makeTransformRange(makeIteratorRange(range.begin(), range.end()),
47-
UserTransform(toUser));
46+
return makeTransformRange(range, UserTransform(toUser));
4847
}
4948

5049
using DeadInstructionSet = llvm::SmallSetVector<SILInstruction *, 8>;

lib/FrontendTool/ImportedModules.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@ static void findAllClangImports(const clang::Module *module,
3737
modules.insert(getTopLevelName(imported));
3838
}
3939

40-
for (auto sub :
41-
makeIteratorRange(module->submodule_begin(), module->submodule_end())) {
40+
for (auto sub : module->submodules()) {
4241
findAllClangImports(sub, modules);
4342
}
4443
}

lib/PrintAsObjC/DeclAndTypePrinter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2034,7 +2034,7 @@ void DeclAndTypePrinter::print(Type ty) {
20342034
}
20352035

20362036
void DeclAndTypePrinter::printAdHocCategory(
2037-
llvm::iterator_range<const ValueDecl * const *> members) {
2037+
iterator_range<const ValueDecl * const *> members) {
20382038
getImpl().printAdHocCategory(members);
20392039
}
20402040

lib/PrintAsObjC/DeclAndTypePrinter.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class DeclAndTypePrinter {
7474
///
7575
/// All members must have the same parent type. The list must not be empty.
7676
void
77-
printAdHocCategory(llvm::iterator_range<const ValueDecl * const *> members);
77+
printAdHocCategory(iterator_range<const ValueDecl * const *> members);
7878

7979
/// Returns the name of an <os/object.h> type minus the leading "OS_",
8080
/// or an empty string if \p decl is not an <os/object.h> type.

lib/SIL/SILVerifier.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2027,13 +2027,14 @@ class SILVerifier : public SILVerifierBase<SILVerifier> {
20272027
require(initConv.getNumDirectSILResults() == 1,
20282028
"wrong number of init function results");
20292029
require(Dest->getType().getObjectType() ==
2030-
initConv.getDirectSILResultTypes().front(),
2030+
*initConv.getDirectSILResultTypes().begin(),
20312031
"wrong init function result type");
20322032
break;
20332033
case 1:
20342034
require(initConv.getNumDirectSILResults() == 0,
20352035
"wrong number of init function results");
2036-
require(Dest->getType() == initConv.getIndirectSILResultTypes().front(),
2036+
require(Dest->getType() ==
2037+
*initConv.getIndirectSILResultTypes().begin(),
20372038
"wrong indirect init function result type");
20382039
break;
20392040
default:

lib/SILOptimizer/Transforms/CopyPropagation.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ class LivenessInfo {
419419
originalDestroyBlocks.insert(use->getUser()->getParent());
420420
}
421421

422-
llvm::iterator_range<BlockSetVec::const_iterator>
422+
iterator_range<BlockSetVec::const_iterator>
423423
getOriginalDestroyBlocks() const {
424424
return originalDestroyBlocks;
425425
}

0 commit comments

Comments
 (0)