[Mlir-commits] [mlir] [mlir][xegpu] Add SIMT distribution support for GEMM transpose B case. (PR #155517)
Charitha Saumya
llvmlistbot at llvm.org
Fri Sep 12 16:11:00 PDT 2025
================
@@ -539,16 +682,48 @@ void LayoutInfoPropagation::visitVectorBitcastOp(
bitcast.getSourceVectorType().getElementType().getIntOrFloatBitWidth();
int outElemTyBitWidth =
bitcast.getResultVectorType().getElementType().getIntOrFloatBitWidth();
-
- // NOTE: We do not expect widening or narrowing bitcasts at this stage. Emit
- // a warning and return.
- if (inElemTyBitWidth != outElemTyBitWidth) {
- bitcast.emitWarning("Widening or narrowing bitcasts are not expected at "
- "layout propagation stage.");
+ // If the element bit widths are the same, then the layout does not change.
+ if (inElemTyBitWidth == outElemTyBitWidth) {
+ propagateIfChanged(operands[0], operands[0]->meet(resultLayout));
+ return;
+ }
+ int64_t rank = bitcast.getSourceVectorType().getRank();
+ // Bitcast is a `narrowing` if the input element type bit width larger than
+ // the output element type bit width. eg. f32 -> f16 is a narrowing bitcast.
+ bool isNarrowing = inElemTyBitWidth > outElemTyBitWidth;
+ int bitCastRatio = isNarrowing ? inElemTyBitWidth / outElemTyBitWidth
+ : outElemTyBitWidth / inElemTyBitWidth;
+ SmallVector<int> sourceLaneLayout =
+ resultLayout.getLaneLayout(); // Lane layout does not change for bitcast.
+ SmallVector<int> outData = resultLayout.getLaneData();
+
+ // TODO: Currently we assume that bitcasts does not require cross lane
+ // communication. So each lane must own the required number of elements to
+ // perform the bitcast locally without cross-lane communication.
+ int outInnerBitsPerLane = outData[rank - 1] * outElemTyBitWidth;
+ if (outInnerBitsPerLane < inElemTyBitWidth) {
----------------
charithaintc wrote:
I thought about this again. `sourceLayout.getLaneData` is not available to us because we are trying to decide this here. I think we can only detect narrowing case only.
Widening case will always be valid because at this point if result already have a valid layout. Otherwise it means that result was not assigned a correct layout. That must be concern of the layout conflict maybe.
In any case, I added a check to verify if the result layout is valid and can be distributed to lanes.
https://github.com/llvm/llvm-project/pull/155517
More information about the Mlir-commits
mailing list