[Mlir-commits] [mlir] [mlir][linalg] add `toContractionDimensions` for healthy code reuse (PR #203916)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Mon Jun 15 07:34:25 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-mlir

Author: Federico Bruzzone (FedericoBruzzone)

<details>
<summary>Changes</summary>

Follow-up to #<!-- -->203323.

This PR adds the `toContractionDimensions` static function, aligning with what we suggested in #<!-- -->203323.

---
Full diff: https://github.com/llvm/llvm-project/pull/203916.diff


1 Files Affected:

- (modified) mlir/lib/CAPI/Dialect/Linalg.cpp (+16-28) 


``````````diff
diff --git a/mlir/lib/CAPI/Dialect/Linalg.cpp b/mlir/lib/CAPI/Dialect/Linalg.cpp
index 64bf6aacf9905..01b7a87b1b284 100644
--- a/mlir/lib/CAPI/Dialect/Linalg.cpp
+++ b/mlir/lib/CAPI/Dialect/Linalg.cpp
@@ -48,39 +48,36 @@ MLIR_CAPI_EXPORTED bool mlirLinalgIsAContractionOp(MlirOperation op) {
   return linalg::isaContractionOpInterface(linalgOp);
 }
 
+static MlirLinalgContractionDimensions
+toContractionDimensions(MLIRContext *ctx,
+                        const linalg::ContractionDimensions &dims) {
+  auto toAttr = [ctx](ArrayRef<unsigned> vals) -> MlirAttribute {
+    return wrap(DenseI32ArrayAttr::get(ctx, llvm::to_vector_of<int32_t>(vals)));
+  };
+  return {toAttr(dims.batch), toAttr(dims.m), toAttr(dims.n), toAttr(dims.k)};
+}
+
 MLIR_CAPI_EXPORTED MlirLinalgContractionDimensions
 mlirLinalgInferContractionDimensions(MlirOperation op) {
-  MlirLinalgContractionDimensions result{};
   auto linalgOp = dyn_cast<linalg::LinalgOp>(unwrap(op));
   if (!linalgOp)
-    return result;
+    return {};
 
   FailureOr<linalg::ContractionDimensions> maybeDims =
       linalg::inferContractionDims(linalgOp);
   if (failed(maybeDims))
-    return result;
+    return {};
 
   const linalg::ContractionDimensions &contractionDims = *maybeDims;
   MLIRContext *ctx = linalgOp.getContext();
-
-  auto toAttr = [ctx](ArrayRef<unsigned> vals) -> MlirAttribute {
-    return wrap(DenseI32ArrayAttr::get(ctx, llvm::to_vector_of<int32_t>(vals)));
-  };
-
-  result.batch = toAttr(contractionDims.batch);
-  result.m = toAttr(contractionDims.m);
-  result.n = toAttr(contractionDims.n);
-  result.k = toAttr(contractionDims.k);
-
-  return result;
+  return toContractionDimensions(ctx, contractionDims);
 }
 
 MLIR_CAPI_EXPORTED MlirLinalgContractionDimensions
 mlirLinalgInferContractionDimensionsFromMaps(const MlirAffineMap *indexingMaps,
                                              size_t numMaps) {
-  MlirLinalgContractionDimensions result{};
-  if (!indexingMaps || numMaps == 0)
-    return result;
+  if (!indexingMaps || numMaps != 3)
+    return {};
 
   SmallVector<AffineMap, 3> maps;
   maps.reserve(numMaps);
@@ -91,20 +88,11 @@ mlirLinalgInferContractionDimensionsFromMaps(const MlirAffineMap *indexingMaps,
   FailureOr<linalg::ContractionDimensions> maybeDims =
       linalg::inferContractionDims(maps);
   if (failed(maybeDims))
-    return result;
+    return {};
 
   MLIRContext *ctx = maps[0].getContext();
 
-  auto toAttr = [ctx](ArrayRef<unsigned> vals) -> MlirAttribute {
-    return wrap(DenseI32ArrayAttr::get(ctx, llvm::to_vector_of<int32_t>(vals)));
-  };
-
-  result.batch = toAttr(maybeDims->batch);
-  result.m = toAttr(maybeDims->m);
-  result.n = toAttr(maybeDims->n);
-  result.k = toAttr(maybeDims->k);
-
-  return result;
+  return toContractionDimensions(ctx, *maybeDims);
 }
 
 MLIR_CAPI_EXPORTED bool mlirLinalgIsAConvolutionOp(MlirOperation op) {

``````````

</details>


https://github.com/llvm/llvm-project/pull/203916


More information about the Mlir-commits mailing list