Improving handling of unit dimensions in the vector dialect

To summarize from the discussion:

  • Splitting off vector.shape_cast into collapse_shape/expand_shape and/or squeeze/unsqueeze has some agreement, but needs a follow up post describing the expected amount of work. I will add that as a follow up in this post.
  • Efforts towards some e2e SPIR-V examples/flows upstream
    • Downstream is carrying some patterns for breaking down large vectors, with loop-carried values cited as a specifically problematic case. @antiagainst to provide some example tests for such flows so we can hold the problem in one hand.
    • Some discussion of a general “vector legalization” pass for targeting native vector sizes

Others please add any additional comments/takeaways.