[mlir] Fix bug in partial dialect conversion
authorVladislav Vinogradov <vlad.vinogradov@intel.com>
Fri, 20 Aug 2021 11:25:42 +0000 (14:25 +0300)
committerVladislav Vinogradov <vlad.vinogradov@intel.com>
Mon, 20 Sep 2021 07:39:10 +0000 (10:39 +0300)
commitec03bbe8a74ae593d0ea5d8bf55c337e395873d1
tree4488eaee5e77201bd0cc83be8b6e151506e208e2
parent9a2255dfa012ad0334eacb2d09da7aa4db249c51
[mlir] Fix bug in partial dialect conversion

The discussion on forum:
https://llvm.discourse.group/t/bug-in-partial-dialect-conversion/4115

The `applyPartialConversion` didn't handle the operations, that were
marked as illegal inside dynamic legality callback.
Instead of reporting error, if such operation was not converted to legal set,
the method just added it to `unconvertedSet` in the same way as unknown operations.

This patch fixes that and handle dynamically illegal operations as well.

The patch includes 2 fixes for existing passes:

* `tensor-bufferize` - explicitly mark `std.return` as legal.
* `convert-parallel-loops-to-gpu` - ugly fix with marking visited operations
  to avoid recursive legality checks.

Reviewed By: rriddle

Differential Revision: https://reviews.llvm.org/D108505
mlir/include/mlir/Conversion/SCFToGPU/SCFToGPU.h
mlir/lib/Conversion/SCFToGPU/SCFToGPU.cpp
mlir/lib/Conversion/SCFToGPU/SCFToGPUPass.cpp
mlir/lib/Dialect/Tensor/Transforms/Bufferize.cpp
mlir/lib/Transforms/Utils/DialectConversion.cpp
mlir/test/Transforms/test-legalizer-full.mlir
mlir/test/Transforms/test-legalizer.mlir
mlir/test/lib/Dialect/Test/TestOps.td
mlir/test/lib/Dialect/Test/TestPatterns.cpp