diff --git a/mlir/include/mlir/Dialect/Linalg/IR/LinalgOps.td b/mlir/include/mlir/Dialect/Linalg/IR/LinalgOps.td --- a/mlir/include/mlir/Dialect/Linalg/IR/LinalgOps.td +++ b/mlir/include/mlir/Dialect/Linalg/IR/LinalgOps.td @@ -591,6 +591,31 @@ return getBody()->getArguments(); } + + void setLowerBounds(ValueRange lowerBounds) { + unsigned numLoops = getNumLoops(); + assert(lowerBounds.size() == numLoops && + "expected lower bounds for every loop dimension"); + for (unsigned i = 0; i < numLoops; ++i) + setOperand(i, lowerBounds[i]); + } + + void setUpperBounds(ValueRange upperBounds) { + unsigned numLoops = getNumLoops(); + assert(upperBounds.size() == numLoops && + "expected upper bounds for every loop dimension"); + for (unsigned i = 0, pos = numLoops; i < numLoops; ++i, ++pos) + setOperand(pos, upperBounds[i]); + } + + void setSteps(ValueRange steps) { + unsigned numLoops = getNumLoops(); + assert(steps.size() == numLoops && + "expected upper bounds for every loop dimension"); + for (unsigned i = 0, pos = 2 * numLoops; i < numLoops; ++i, ++pos) + setOperand(pos, steps[i]); + } + /// Result that corresponds to the `outputs` argument of tensor type. OpResult getTiedOpResult(OpOperand& opOperand) { // No result can correspond to a memref argument.