This revision unifies Linalg vectorization and paves the way for vectorization of Linalg ops with mixed-precision operations.
The new algorithm traverses the ops in the linalg block in order and avoids recursion.
It uses a BlockAndValueMapping to keep track of vectorized operations.
The revision makes the following modifications but is otherwise NFC:
- vector.transfer_read are created eagerly and may appear in a different order than the original order.
- a more progressive vectorization to vector.contract results in only the multiply operation being converted to vector.contract %a, %b, %zero, where %zero is a constant of the proper type. Later vector canonicalizations are assumed to rewrite vector.contract %a, %b, %zero + add to a proper accumulate form.
Nit: missing period at the end.