bodyRegion->push_back(new Block{});
bodyRegion->front().addArgument(builder.getIndexType());
bodyRegion->front().addArgument(iterate.getType());
- for (auto v : iterArgs)
- bodyRegion->front().addArgument(v.getType());
+ bodyRegion->front().addArguments(iterArgs.getTypes());
result.addAttributes(attributes);
}
if (iterArgs.empty())
LoopOp::ensureTerminator(*bodyRegion, builder, result.location);
bodyRegion->front().addArgument(builder.getIndexType());
- for (auto v : iterArgs)
- bodyRegion->front().addArgument(v.getType());
+ bodyRegion->front().addArguments(iterArgs.getTypes());
if (unordered)
result.addAttribute(unorderedAttrName(), builder.getUnitAttr());
result.addAttributes(attributes);
};
indexed_accessor_range_base(iterator begin, iterator end)
- : base(DerivedT::offset_base(begin.getBase(), begin.getIndex())),
+ : base(offset_base(begin.getBase(), begin.getIndex())),
count(end.getIndex() - begin.getIndex()) {}
indexed_accessor_range_base(const iterator_range<iterator> &range)
: indexed_accessor_range_base(range.begin(), range.end()) {}
/// Drop the first N elements, and keep M elements.
DerivedT slice(size_t n, size_t m) const {
assert(n + m <= size() && "invalid size specifiers");
- return DerivedT(DerivedT::offset_base(base, n), m);
+ return DerivedT(offset_base(base, n), m);
}
/// Drop the first n elements.
return RangeT(iterator_range<iterator>(*this));
}
+private:
+ /// Offset the given base by the given amount.
+ static BaseT offset_base(const BaseT &base, size_t n) {
+ return n == 0 ? base : DerivedT::offset_base(base, n);
+ }
+
protected:
indexed_accessor_range_base(const indexed_accessor_range_base &) = default;
indexed_accessor_range_base(indexed_accessor_range_base &&) = default;