mirror of
https://github.com/intel/llvm.git
synced 2026-01-21 12:19:23 +08:00
[mlir][doc][tutorials] Remove docs and code discrepancies (#125422)
Toy tutorial [chapter 4](https://mlir.llvm.org/docs/Tutorials/Toy/Ch-4/) contains many discrepancies between snippets and code in `example` directory. This is a fix for the documentation.
This commit is contained in:
@@ -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<Value> valuesToRepl) const final {
|
||||
ValueRange valuesToRepl) const final {
|
||||
// Only "toy.return" needs to be handled here.
|
||||
auto returnOp = cast<ReturnOp>(op);
|
||||
|
||||
@@ -147,7 +147,7 @@ and add it to the traits list of `GenericCallOp`:
|
||||
|
||||
```tablegen
|
||||
def FuncOp : Toy_Op<"func",
|
||||
[DeclareOpInterfaceMethods<CallableOpInterface>]> {
|
||||
[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<SymbolRefAttr>("callee");
|
||||
return (*this)->getAttrOfType<SymbolRefAttr>("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>();
|
||||
TensorType output = outputs.front().dyn_cast<TensorType>();
|
||||
TensorType input = llvm::dyn_cast<TensorType>(inputs.front());
|
||||
TensorType output = llvm::dyn_cast<TensorType>(outputs.front());
|
||||
if (!input || !output || input.getElementType() != output.getElementType())
|
||||
return false;
|
||||
// The shape is required to match if both types are ranked.
|
||||
|
||||
Reference in New Issue
Block a user