12#include "clang/CIR/Interfaces/CIRLoopOpInterface.cpp.inc"
13#include "llvm/Support/ErrorHandling.h"
17void LoopOpInterface::getLoopOpSuccessorRegions(
18 LoopOpInterface op, mlir::RegionBranchPoint point,
19 llvm::SmallVectorImpl<mlir::RegionSuccessor> ®ions) {
20 assert(point.isParent() || point.getTerminatorPredecessorOrNull());
23 if (point.isParent()) {
24 regions.emplace_back(&op.getEntry(), op.getEntry().getArguments());
28 mlir::Region *parentRegion =
29 point.getTerminatorPredecessorOrNull()->getParentRegion();
32 if (&op.getCond() == parentRegion) {
33 regions.emplace_back(mlir::RegionSuccessor(op, op->getResults()));
34 regions.emplace_back(&op.getBody(), op.getBody().getArguments());
39 if (&op.getBody() == parentRegion) {
41 mlir::Region *afterBody =
42 (op.maybeGetStep() ? op.maybeGetStep() : &op.getCond());
43 regions.emplace_back(afterBody, afterBody->getArguments());
48 if (op.maybeGetStep() == parentRegion) {
49 regions.emplace_back(&op.getCond(), op.getCond().getArguments());
53 llvm_unreachable(
"unexpected branch origin");
63 return llvm::success();
mlir::LogicalResult verifyLoopOpInterface(::mlir::Operation *op)
Verify invariants of the LoopOpInterface.