This website requires JavaScript.
Explore
Help
Register
Sign In
llvm
/
torch-mlir
mirror of
https://github.com/llvm/torch-mlir
Watch
1
Star
0
Fork
You've already forked torch-mlir
0
Code
Issues
Packages
Projects
Releases
Wiki
Activity
1f00f95d2e
torch-mlir
/
lib
/
Dialect
/
CMakeLists.txt
4 lines
88 B
CMake
Raw
Normal View
History
Unescape
Escape
[RefBackend] Rename RefBackend dialect to Refback I now realize that VerboseCamelCase is not the best choice for dialect directory/file names and C++ identifiers (take e.g. "Linalg", "Basicpy", etc. as prior art here; not LinearAlgebra or BasicPython). If I had to name the convention it seems to be "Shortword" (or of course just acronym dialects like LLVM, SCF, etc.). This rename also has the side benefit of differentiating RefBackend directories, which now refer to the actual backend itself, from Refback/Refbackrt, which are the dialects which happen to be used by that backend.
2020-10-08 08:30:10 +08:00
add_subdirectory
(
Refback
)
[RefBackend] Rename Npcomprt dialect to Refbackrt.
2020-10-08 08:12:52 +08:00
add_subdirectory
(
Refbackrt
)
Add TorchToIREE and factor out TorchConversion dialect. This converts a basic list op (torch.prim.ListConstruct) to the IREE dialect. ``` def forward(self, x: float): return [x, x] ``` turns into: ``` builtin.func @forward(%arg0: !torch.float) -> !torch.list<!torch.float> { %0 = torch.prim.ListConstruct %arg0, %arg0 : (!torch.float, !torch.float) -> !torch.list<!torch.float> return %0 : !torch.list<!torch.float> } ``` which turns into: ``` builtin.func @forward(%arg0: f64) -> !iree.list<f64> { %c1 = constant 1 : index %c0 = constant 0 : index %c2 = constant 2 : index %0 = iree.list.create %c2 : !iree.list<f64> iree.list.set %0[%c0], %arg0 : !iree.list<f64>, f64 iree.list.set %0[%c1], %arg0 : !iree.list<f64>, f64 return %0 : !iree.list<f64> } ``` As part of doing this, I realized that it was time to formalize the IR form that we reach right before running TorchTo{Linalg,Std,...}. We now call it the "Torch backend contract". We then lower the "Torch backend contract" to the "npcomp backend contract", which involves the new TorchConversion (`torch_c`) dialect, which holds ops that need to operate on both the npcomp backend types (e.g. builtin tensors, i1, IREE list, etc.) and the `!torch` types. This made more sense, as I realized that if I didn't factor out `torch_c` then the Torch dialect would have a dependency on IREE dialect (we previously didn't notice this was an issue because we only depended on `builtin` types), which seemed wrong to me. Recommended review order: - TorchToIREE.cpp / `TorchToIREE/basic.mlir` - Look at the new structure of createTorchScriptToNpcompBackendPipeline. It now lives in TorchConversion/Transforms/Passes.cpp and cleanly calls into `Torch::createTorchScriptToTorchBackendPipeline` for the frontend lowering to the Torch backend contract. - Mechanical change extracting `torch_c.{to,from}_{i1,i64,f64,builtin_tensor,iree_list}` into a new TorchConversion dialect, and a few passes specific to the lowering from the Torch backend contract to the npcomp backend contract. - Minor fixes to TorchToLinalg.cpp to use unconverted operands (now that we convert lists as part of operand materialization, we need to use the original operands). Also added test for AtenMaxPool2dOp and fixed m_TorchConstantIntList. - TmpDeleteDeadIREELists pass. Temporary pass for deleting dead IREE lists that are created as part of operand materialization for conv/max pool/avg pool ops in TorchToLinalg.
2021-08-12 05:40:08 +08:00
add_subdirectory
(
TorchConversion
)