[Mlir-commits] [mlir] [MLIR][XeGPU] Add Layout Propagation support for multi-reduction/reduction op with scalar result (PR #189133)
Artem Kroviakov
llvmlistbot at llvm.org
Wed Apr 1 02:55:57 PDT 2026
================
@@ -440,37 +445,24 @@ xegpu::inferShapeCastSourceLayout(xegpu::DistributeLayoutAttr resLayout,
xegpu::SliceAttr xegpu::setupMultiReductionResultLayout(
xegpu::LayoutKind layoutKind, VectorType srcVecTy,
DistributeLayoutAttr consumerLayout, SmallVector<int64_t> reductionDims,
- const xegpu::uArch::uArch *uArch) {
+ int numSg, const xegpu::uArch::uArch *uArch) {
auto srcShape = srcVecTy.getShape();
int srcRank = srcShape.size();
- auto context = consumerLayout.getContext();
-
- // Reduction layout requires at least 2D tensors
- if (srcRank < 2)
- return nullptr;
+ auto context = srcVecTy.getContext();
// Helper lambda to convert int64 vectors to int32 DenseArrayAttr
auto toInt32Attr = [&](ArrayRef<int64_t> vec) {
SmallVector<int32_t> vec32(vec.begin(), vec.end());
return DenseI32ArrayAttr::get(context, vec32);
};
- const int workgroupSize = consumerLayout.getNumSubgroups();
const int subgroupSize = uArch->getSubgroupSize();
int64_t maxReduceVectorSize = 1; // could extend to spirv vector Size
-
- SmallVector<int64_t> consumerSgLayout =
- consumerLayout.getEffectiveSgLayoutAsInt();
- SmallVector<int64_t> consumerLaneLayout =
- consumerLayout.getEffectiveLaneLayoutAsInt();
- SmallVector<int64_t> consumerOrder = consumerLayout.getEffectiveOrderAsInt();
- DenseI32ArrayAttr orderAttr = consumerLayout.getOrder();
-
xegpu::DistributeLayoutAttr srcLayout;
if (layoutKind == xegpu::LayoutKind::Subgroup) {
xegpu::SliceAttr consumerSliceLayout =
- dyn_cast<xegpu::SliceAttr>(consumerLayout);
+ consumerLayout ? dyn_cast<xegpu::SliceAttr>(consumerLayout) : nullptr;
----------------
akroviakov wrote:
What about `dyn_cast_if_present` ?
https://github.com/llvm/llvm-project/pull/189133
More information about the Mlir-commits
mailing list