[mlir][xegpu] Fill split-group inner dims on shape_cast result layout (#227560)

This PR set the result layout for shape_cast when it can't infer the
layout from incoming consumer layout. For example,
```mlir
vector.shape_cast %0 : vector<16x1024xbf16> to vector<16x32x32xbf16>
// consumer layout: inst_data = [1, 2, 8], lane_layout = [1, 2, 8], lane_data = [1, 1, 1]
```
Taking the consumer layout as is doesn't work for layout propagation.
The lanes cover 2 along dim 1 and only 8 of dim 2's 32 — a 2x8 box.
Collapsing dims 1 and 2 gives inst_data = [1, 16] on the 16x1024 source,
which is 16 contiguous elements. Those are not the same elements: the
2x8 box is two runs of 8, 32 apart.

This PR fixes the issue by stretching the lane_data to cover the
innermost dims of source shape, to set up result layout so that each
lane gets the same data before and after the shapecast, which is the
condition that shapecast op can be successfully distributed.
```
before:  inst_data = [1, 2,  8], lane_layout = [1, 2, 8],lane_data = [1, 1, 1]
after:   inst_data = [1, 2, 32], lane_layout = [1, 2, 8],lane_data = [1, 1, 4]
                            ^^          ^
collapses to:  inst_data = [1, 64], lane_layout = [1, 16],lane_data = [1, 4]
```
lane_data grows from 1 to 4 so that 8 lanes x 4 elements = 32, and
inst_data follows.

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
GitOrigin-RevId: b5ab963ec7498a5c2ac81a8955ba98549dc5d6d0
5 files changed
tree: 81351f543fa4eda79b1caa376903c8cf9657dff7
  1. benchmark/
  2. cmake/
  3. docs/
  4. examples/
  5. include/
  6. lib/
  7. python/
  8. test/
  9. tools/
  10. unittests/
  11. utils/
  12. .clang-format
  13. .clang-tidy
  14. CMakeLists.txt
  15. LICENSE.TXT
  16. Maintainers.md
  17. README.md
README.md

Multi-Level Intermediate Representation

See https://mlir.llvm.org/ for more information.