[mlir] Add shaped container component type interface
authorJacques Pienaar <jpienaar@google.com>
Thu, 9 Jan 2020 02:48:38 +0000 (18:48 -0800)
committerJacques Pienaar <jpienaar@google.com>
Wed, 15 Jan 2020 21:28:39 +0000 (13:28 -0800)
commitfa26a37d36991dd19276c2112ae03e962debe0e4
tree6c1c9f5e32f5f1126b743cd6462484a4f8d44a18
parent34ba96a3d49e14abb2a36114a4ed6f97e1b9a9ee
[mlir] Add shaped container component type interface

Summary:
* Add shaped container type interface which allows infering the shape, element
  type and attribute of shaped container type separately. Show usage by way of
  tensor type inference trait which combines the shape & element type in
  infering a tensor type;
  - All components need not be specified;
  - Attribute is added to allow for layout attribute that was previously
    discussed;
* Expand the test driver to make it easier to test new creation instances
  (adding new operands or ops with attributes or regions would trigger build
  functions/type inference methods);
  - The verification part will be moved out of the test and to verify method
    instead of ops implementing the type inference interface in a follow up;
* Add MLIRContext as arg to possible to create type for ops without arguments,
  region or location;
* Also move out the section in OpDefinitions doc to separate ShapeInference doc
  where the shape function requirements can be captured;
  - Part of this would move to the shape dialect and/or shape dialect ops be
    included as subsection of this doc;
* Update ODS's variable usage to match camelBack format for builder,
  state and arg variables;
  - I could have split this out, but I had to make some changes around
    these and the inconsistency bugged me :)

Differential Revision: https://reviews.llvm.org/D72432
15 files changed:
mlir/docs/OpDefinitions.md
mlir/docs/ShapeInference.md [new file with mode: 0644]
mlir/include/mlir/Analysis/InferTypeOpInterface.h
mlir/include/mlir/Analysis/InferTypeOpInterface.td
mlir/include/mlir/IR/OpBase.td
mlir/lib/Analysis/InferTypeOpInterface.cpp
mlir/test/lib/TestDialect/TestDialect.cpp
mlir/test/lib/TestDialect/TestOps.td
mlir/test/lib/TestDialect/TestPatterns.cpp
mlir/test/mlir-tblgen/op-attribute.td
mlir/test/mlir-tblgen/op-decl.td
mlir/test/mlir-tblgen/op-operand.td
mlir/test/mlir-tblgen/op-result.td
mlir/test/mlir-tblgen/return-types.mlir
mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp