forked from OSchip/llvm-project
Add a utility accessor 'has_single_element' for ranges.
This provides an easy way to check if a range has a single element. PiperOrigin-RevId: 277544647
This commit is contained in:
parent
cb40e36d3b
commit
0568e952b6
|
@ -193,6 +193,11 @@ template <typename ContainerTy> auto make_second_range(ContainerTy &&c) {
|
|||
});
|
||||
}
|
||||
|
||||
/// Returns true of the given range only contains a single element.
|
||||
template <typename ContainerTy> bool has_single_element(ContainerTy &&c) {
|
||||
auto it = std::begin(c), e = std::end(c);
|
||||
return it != e && std::next(it) == e;
|
||||
}
|
||||
} // end namespace mlir
|
||||
|
||||
// Allow tuples to be usable as DenseMap keys.
|
||||
|
|
|
@ -1337,8 +1337,7 @@ struct AffineForEmptyLoopFolder : public OpRewritePattern<AffineForOp> {
|
|||
PatternMatchResult matchAndRewrite(AffineForOp forOp,
|
||||
PatternRewriter &rewriter) const override {
|
||||
// Check that the body only contains a terminator.
|
||||
auto *body = forOp.getBody();
|
||||
if (std::next(body->begin()) != body->end())
|
||||
if (!has_single_element(*forOp.getBody()))
|
||||
return matchFailure();
|
||||
rewriter.eraseOp(forOp);
|
||||
return matchSuccess();
|
||||
|
|
|
@ -1418,7 +1418,7 @@ static void print(spirv::LoopOp loopOp, OpAsmPrinter &printer) {
|
|||
/// given `dstBlock`.
|
||||
static inline bool hasOneBranchOpTo(Block &srcBlock, Block &dstBlock) {
|
||||
// Check that there is only one op in the `srcBlock`.
|
||||
if (srcBlock.empty() || std::next(srcBlock.begin()) != srcBlock.end())
|
||||
if (!has_single_element(srcBlock))
|
||||
return false;
|
||||
|
||||
auto branchOp = dyn_cast<spirv::BranchOp>(srcBlock.back());
|
||||
|
|
|
@ -87,7 +87,7 @@ LogicalResult ModuleOp::verify() {
|
|||
auto &bodyRegion = getOperation()->getRegion(0);
|
||||
|
||||
// The body must contain a single basic block.
|
||||
if (bodyRegion.empty() || std::next(bodyRegion.begin()) != bodyRegion.end())
|
||||
if (!has_single_element(bodyRegion))
|
||||
return emitOpError("expected body region to have a single block");
|
||||
|
||||
// Check that the body has no block arguments.
|
||||
|
|
Loading…
Reference in New Issue