[clang] [CIR] Upstream support for while and do..while loops (PR #133157)
Henrich Lauko via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 27 02:59:38 PDT 2025
================
@@ -539,9 +539,29 @@ Block *cir::BrCondOp::getSuccessorForOperands(ArrayRef<Attribute> operands) {
}
//===----------------------------------------------------------------------===//
-// ForOp
+// LoopOpInterface Methods
//===----------------------------------------------------------------------===//
+void cir::DoWhileOp::getSuccessorRegions(
+ mlir::RegionBranchPoint point,
+ llvm::SmallVectorImpl<mlir::RegionSuccessor> ®ions) {
+ LoopOpInterface::getLoopOpSuccessorRegions(*this, point, regions);
+}
+
+llvm::SmallVector<Region *> cir::DoWhileOp::getLoopRegions() {
+ return {&getBody()};
+}
+
+void cir::WhileOp::getSuccessorRegions(
+ mlir::RegionBranchPoint point,
+ llvm::SmallVectorImpl<mlir::RegionSuccessor> ®ions) {
+ LoopOpInterface::getLoopOpSuccessorRegions(*this, point, regions);
+}
+
+llvm::SmallVector<Region *> cir::WhileOp::getLoopRegions() {
+ return {&getBody()};
+}
----------------
xlauko wrote:
Can be deduplicated as extraClassDefinition in `WhileOpBase` as:
```
let extraClassDefinition = [{
void $cppClass::getSuccessorRegions(
mlir::RegionBranchPoint point,
llvm::SmallVectorImpl<mlir::RegionSuccessor> ®ions) {
LoopOpInterface::getLoopOpSuccessorRegions(*this, point, regions);
}
llvm::SmallVector<Region *> $cppClass::getLoopRegions() {
return {&getBody()};
}
}];
```
https://github.com/llvm/llvm-project/pull/133157
More information about the cfe-commits
mailing list