[Matrix] Split TileSize into per-dimension fields; add remainder loop infrastructure
Split the single TileSize field in TileInfo into TileNumRows,
TileNumInner, and TileNumColumns to enable non-square tiles.
Add CreateTiledLoopsWithRemainder() which generates a full loop
nest covering remainder rows and columns that don't evenly divide
the tile size.
Expose asIndex()/indexType() helpers from MatrixUtils.cpp for use
by callers building the tiled loop bodies.
In LowerMatrixIntrinsics, replace the old TileSize/TileLoopsThreshold
cl::opts with per-dimension TileSizeRows/Inner/Columns and add
TileUseLoops (default false) as the explicit opt-in for loop-based
tiling. Add isTilingLoopProfitable() to gate when loops are
worthwhile vs. inlining the tile computation.
Author
Francis Visoiu Mistrih