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());
28 mlir::Region *parentRegion =
29 point.getTerminatorPredecessorOrNull()->getParentRegion();
31 mlir::Region *
step = op.maybeGetStep();
32 mlir::Region *
cleanup = op.maybeGetCleanup();
36 if (&op.getCond() == parentRegion) {
40 regions.emplace_back(op);
41 regions.emplace_back(&op.getBody());
47 if (&op.getBody() == parentRegion) {
50 regions.emplace_back(
step);
54 regions.emplace_back(&op.getCond());
60 if (
step == parentRegion) {
64 regions.emplace_back(&op.getCond());
71 regions.emplace_back(&op.getCond());
72 regions.emplace_back(op);
76 llvm_unreachable(
"unexpected branch origin");
80LoopOpInterface::getLoopOpSuccessorInputs(LoopOpInterface op,
81 mlir::RegionSuccessor successor) {
82 if (successor.isOperation())
83 return op->getResults();
84 if (mlir::Region *region = successor.getSuccessor())
85 return region->getArguments();
86 llvm_unreachable(
"invalid region successor");
96 return llvm::success();
mlir::LogicalResult verifyLoopOpInterface(::mlir::Operation *op)
Verify invariants of the LoopOpInterface.
float __ovld __cnfn step(float, float)
Returns 0.0 if x < edge, otherwise it returns 1.0.