[Mlir-commits] [mlir] [mlir-c] Add slice analysis and topological sort (PR #206550)

Maksim Levental llvmlistbot at llvm.org
Tue Sep 22 16:50:27 PDT 2026


================
@@ -0,0 +1,94 @@
+//===- Analysis.cpp - C API for MLIR Analysis Utilities -------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "mlir-c/Analysis.h"
+
+#include "mlir/Analysis/SliceAnalysis.h"
+#include "mlir/Analysis/TopologicalSortUtils.h"
+#include "mlir/CAPI/IR.h"
+#include "mlir/CAPI/Support.h"
+
+using namespace mlir;
+
+static SetVector<Operation *> computeForwardSlice(
+    MlirOperation op, MlirSliceFilterCallback filter, void *filterUserData) {
+  SetVector<Operation *> result;
+  ForwardSliceOptions options;
+  if (filter)
+    options.filter = [filter, filterUserData](Operation *op) {
+      return filter(wrap(op), filterUserData);
+    };
+  getForwardSlice(unwrap(op), &result, options);
+  return result;
+}
+
+intptr_t mlirGetForwardSliceSize(MlirOperation op,
+                                 MlirSliceFilterCallback filter,
+                                 void *filterUserData) {
+  return static_cast<intptr_t>(
+      computeForwardSlice(op, filter, filterUserData).size());
+}
+
+void mlirGetForwardSlice(MlirOperation op, MlirSliceFilterCallback filter,
+                         void *filterUserData, MlirOperation *slice) {
+  SetVector<Operation *> result =
+      computeForwardSlice(op, filter, filterUserData);
+  for (intptr_t i = 0, e = static_cast<intptr_t>(result.size()); i < e; ++i)
+    slice[i] = wrap(result[i]);
+}
+
+static LogicalResult computeBackwardSlice(MlirOperation op,
+                                          MlirSliceFilterCallback filter,
+                                          void *filterUserData,
+                                          SetVector<Operation *> &result) {
+  BackwardSliceOptions options;
+  if (filter)
+    options.filter = [filter, filterUserData](Operation *op) {
+      return filter(wrap(op), filterUserData);
+    };
----------------
makslevental wrote:

conditional needs braces

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


More information about the Mlir-commits mailing list