diff --git a/mlir/include/mlir/Dialect/Func/IR/FuncOps.td b/mlir/include/mlir/Dialect/Func/IR/FuncOps.td index 22efe15aa83a5..8f20ca64602e4 100644 --- a/mlir/include/mlir/Dialect/Func/IR/FuncOps.td +++ b/mlir/include/mlir/Dialect/Func/IR/FuncOps.td @@ -338,8 +338,10 @@ def FuncOp : Func_Op<"func", [ // ReturnOp //===----------------------------------------------------------------------===// -def ReturnOp : Func_Op<"return", [Pure, HasParent<"FuncOp">, - MemRefsNormalizable, ReturnLike, Terminator]> { +def ReturnOp : Func_Op<"return", [ + Pure, HasParent<"FuncOp">, MemRefsNormalizable, ReturnLike, Terminator, + DeclareOpInterfaceMethods] + > { let summary = "Function return operation"; let description = [{ The `func.return` operation represents a return operation within a function. diff --git a/mlir/lib/Dialect/Func/IR/FuncOps.cpp b/mlir/lib/Dialect/Func/IR/FuncOps.cpp index a490b4c3c4ab4..06e0172a0fab6 100644 --- a/mlir/lib/Dialect/Func/IR/FuncOps.cpp +++ b/mlir/lib/Dialect/Func/IR/FuncOps.cpp @@ -306,6 +306,12 @@ LogicalResult ReturnOp::verify() { return success(); } +void ReturnOp::getSuccessorRegions(ArrayRef operands, + SmallVectorImpl ®ions) { + // Return control back to func::FuncOp. + regions.push_back(RegionSuccessor()); +} + //===----------------------------------------------------------------------===// // TableGen'd op method definitions //===----------------------------------------------------------------------===//