[mlir] support materialization for 1-1 type conversions
authorAlex Zinenko <zinenko@google.com>
Tue, 2 Jun 2020 11:24:04 +0000 (13:24 +0200)
committerAlex Zinenko <zinenko@google.com>
Tue, 2 Jun 2020 11:48:33 +0000 (13:48 +0200)
commit5c5dafc534ac80aad978f4092ff842457aab6d07
tree6083f3337b39fa8e27445982c17689d23fb69dd6
parentbff0c56ff92106afad22b54a90e1c612da4d6f99
[mlir] support materialization for 1-1 type conversions

Dialect conversion infrastructure supports 1->N type conversions by requiring
individual conversions to provide facilities to generate operations
retrofitting N values into 1 of the original type when N > 1. This
functionality can also be used to materialize explicit "cast"-like operations,
but it did not support 1->1 type conversions until now. Modify TypeConverter to
support materialization of cast operations for 1-1 conversions.

This also makes materialization specification more extensible following the
same pattern as type conversions. Instead of overloading a virtual function,
users or subclasses of TypeConversion can now register type-specific
materialization callbacks that will be called in order for the given type.

Differential Revision: https://reviews.llvm.org/D79729
mlir/docs/DialectConversion.md
mlir/include/mlir/Conversion/StandardToLLVM/ConvertStandardToLLVM.h
mlir/include/mlir/Transforms/DialectConversion.h
mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp
mlir/lib/Transforms/DialectConversion.cpp
mlir/test/Transforms/test-legalizer.mlir
mlir/test/lib/Dialect/Test/TestPatterns.cpp