This commit is the first baby step towards detensoring in
linalg-on-tensors.
Detensoring is the process through which a tensor value is convereted to one
or potentially more primitive value(s). During this process, operations with
such detensored operands are also converted to an equivalen form that works
on primitives.
The detensoring process is driven by linalg-on-tensor ops. In particular, a
linalg-on-tensor op is checked to see whether *all* its operands can be
detensored. If so, those operands are converted to thier primitive
counterparts and the linalg op is replaced by an equivalent op that takes
those new primitive values as operands. Therefore, the detensoring process
can be divided into 2 main logical phases:
- Detect/match an op that can be detensored.
- Detensor the operands of the op and replace it with a primitive equivalent.
These 2 logical phases are implemented by LinalgDetensoringPattern
which is documented in-place below.
This works towards handling github/google/iree#1159.
TODO: if this is a good direction, modify docs and more detailed descriptions here and below.