This revision demonstrates some basic support for declaratively defining Linalg "named" ops.
Such named ops form the backbone of operations that are ubiquitous in the ML application domain.
This revision closely related to the definition of a "Tensor Computation Primitives Dialect"
and demonstrates that certain ops can be expressed as declarative configurations of the
linalg.generic op.
For now, this only supports linalg.matvec (fixed-rank) and linalg.fill (rank-polymorphic)
and replaces manual C++ implementations with a Tablegen'd equivalent.
These 2 ops are already enough to exhibit interesting behaviors, tradeoffs and open questions:
- reference maps/iterators as static vs instance methods and requirements for rank-polymorphism
- behavior in the presence / absence of maps/iterators
- handling of other attributes than the ones from linalg.generic
- ability to sugar the parsing/pretty-printing
- (future) declarative specification of properties that will automate matchers and emitters to
loop, scalar and vector form
- (future) specification of mapping to library call / HW ISA
Should this comment be outside of the "section heading" block?