Mercurial > hg > CbC > CbC_llvm
view mlir/lib/IR/Visitors.cpp @ 201:a96fbbdf2d0f
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 04 Jun 2021 21:07:06 +0900 |
parents | 1d019706d866 |
children | 2e18cbf3894f |
line wrap: on
line source
//===- Visitors.cpp - MLIR Visitor Utilities ------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "mlir/IR/Visitors.h" #include "mlir/IR/Operation.h" using namespace mlir; /// Walk all of the operations nested under and including the given operations. void detail::walkOperations(Operation *op, function_ref<void(Operation *op)> callback) { // TODO(b/140235992) This walk should be iterative over the operations. for (auto ®ion : op->getRegions()) for (auto &block : region) // Early increment here in the case where the operation is erased. for (auto &nestedOp : llvm::make_early_inc_range(block)) walkOperations(&nestedOp, callback); callback(op); } /// Walk all of the operations nested under and including the given operations. /// This methods walks operations until an interrupt signal is received. WalkResult detail::walkOperations(Operation *op, function_ref<WalkResult(Operation *op)> callback) { // TODO(b/140235992) This walk should be iterative over the operations. for (auto ®ion : op->getRegions()) { for (auto &block : region) { // Early increment here in the case where the operation is erased. for (auto &nestedOp : llvm::make_early_inc_range(block)) if (walkOperations(&nestedOp, callback).wasInterrupted()) return WalkResult::interrupt(); } } return callback(op); }