torch-mlir/include/npcomp/Dialect/Torch/IR
Sean Silva 43dba03afd Properly model "derefinement".
In terms of IR structure, TorchScript allows types to vary in many
circumstances where MLIR requires pointer-identical types. In particular,
it is valid to pass any subtype in place of a type. For example, if an
`Optional[int]` is required somewhere in the IR, it is legal to pass a
value of just `int` (but not the other way around; see
`torch.prim.unchecked_cast`). In effect, every *use* can have a different
type.

We introduce a new op `torch.derefine` that models that impedance
mismatch. This op allows casting a value from one type to a type that it
is a subtype of to model this behavior.

Recommended review order:
- TorchOps.td for new torch.derefine (and updated docs for
  `torch.prim.unchecked_cast`)
- new test code in if.py, loop.py, function-derefine.py
- new code in node_importer.cpp for handling derefinement insertion
- function_importer.cpp and utils changes in torch_to_mlir_utils.cpp

Properly handling derefinement on function boundaries required
relayering the code so that graph_importer.cpp/.h is now
function_importer.cpp/.h because only the `torch::jit::Function`
(actually the `c10::FunctionSchema` it holds) knows the derefined types that are
actually needed at the boundary (see `function-derefine.py` for a test).

Annoyingly, this churns all the functions which are now prefixed with
`__torch__.` but that is more correct anyway (that is their linkage name
in the `torch::jit::CompilationUnit`; the previous `mb.import_function`
was actually buggy in the case of functions calling each other as it
would reference their unqualified name).

With this change, we can import `resnet18` from `torchvision` :)
IR: https://gist.github.com/silvasean/6426a5272d8a6c7caae533fce05ab704
2021-03-03 15:09:44 -08:00
..
CMakeLists.txt Add initial TorchScript module importer 2021-01-28 11:55:17 -08:00
OpInterfaces.h Add a number of kernels and new patterns. 2020-11-04 14:36:59 -08:00
OpInterfaces.td Expose signature metadata to ops and implement ATenRecognizeKernelsPass pass. 2020-10-26 20:31:45 -07:00
TorchBase.td Add initial TorchScript module importer 2021-01-28 11:55:17 -08:00
TorchDialect.h Expose signature metadata to ops and implement ATenRecognizeKernelsPass pass. 2020-10-26 20:31:45 -07:00
TorchOps.h Properly model "derefinement". 2021-03-03 15:09:44 -08:00
TorchOps.td Properly model "derefinement". 2021-03-03 15:09:44 -08:00
TorchTypes.h Add initial TorchScript module importer 2021-01-28 11:55:17 -08:00
TorchTypes.td Add support for prim.NumToTensor 2021-02-26 10:16:56 -08:00