diff --git a/mlir/docs/Tutorials/Toy/Ch-4.md b/mlir/docs/Tutorials/Toy/Ch-4.md index b753ee7a5332f..39e9ecdd92221 100644 --- a/mlir/docs/Tutorials/Toy/Ch-4.md +++ b/mlir/docs/Tutorials/Toy/Ch-4.md @@ -91,7 +91,7 @@ struct ToyInlinerInterface : public DialectInlinerInterface { /// previously returned by the call operation with the operands of the /// return. void handleTerminator(Operation *op, - MutableArrayRef valuesToRepl) const final { + ValueRange valuesToRepl) const final { // Only "toy.return" needs to be handled here. auto returnOp = cast(op); @@ -147,7 +147,7 @@ and add it to the traits list of `GenericCallOp`: ```tablegen def FuncOp : Toy_Op<"func", - [DeclareOpInterfaceMethods]> { + [FunctionOpInterface, IsolatedFromAbove]> { ... } @@ -159,7 +159,8 @@ def GenericCallOp : Toy_Op<"generic_call", In the above we also use the `DeclareOpInterfaceMethods` directive to auto-declare all of the interface methods in the class declaration of -GenericCallOp. This means that we just need to provide a definition: +GenericCallOp. We have already provided the definition in the `extraClassDeclaration` +field of the `FuncOp` class: ```c++ /// Returns the region on the function operation that is callable. @@ -170,7 +171,7 @@ Region *FuncOp::getCallableRegion() { return &getBody(); } /// Return the callee of the generic call operation, this is required by the /// call interface. CallInterfaceCallable GenericCallOp::getCallableForCallee() { - return getAttrOfType("callee"); + return (*this)->getAttrOfType("callee"); } /// Set the callee for the generic call operation, this is required by the call @@ -181,7 +182,13 @@ void GenericCallOp::setCalleeFromCallable(CallInterfaceCallable callee) { /// Get the argument operands to the called function, this is required by the /// call interface. -Operation::operand_range GenericCallOp::getArgOperands() { return inputs(); } +Operation::operand_range GenericCallOp::getArgOperands() { return getInputs(); } + +/// Get the argument operands to the called function as a mutable range, this is +/// required by the call interface. +MutableOperandRange GenericCallOp::getArgOperandsMutable() { + return getInputsMutable(); +} ``` Now that the inliner has been informed about the Toy dialect, we can add the @@ -255,8 +262,8 @@ bool CastOp::areCastCompatible(TypeRange inputs, TypeRange outputs) { if (inputs.size() != 1 || outputs.size() != 1) return false; // The inputs must be Tensors with the same element type. - TensorType input = inputs.front().dyn_cast(); - TensorType output = outputs.front().dyn_cast(); + TensorType input = llvm::dyn_cast(inputs.front()); + TensorType output = llvm::dyn_cast(outputs.front()); if (!input || !output || input.getElementType() != output.getElementType()) return false; // The shape is required to match if both types are ranked.