[Mlir-commits] [mlir] Improve mlir-query by adding matcher combinators (PR #141423)
Jacques Pienaar
llvmlistbot at llvm.org
Mon May 26 08:43:35 PDT 2025
================
@@ -116,6 +117,51 @@ bool BackwardSliceMatcher<Matcher>::matches(
: backwardSlice.size() >= 1;
}
+/// Computes the backward-slice of all transitive defs reachable from `rootOp`,
+/// if `innerMatcher` matches. Traversal stops where `filterMatcher` matches.
+template <typename BaseMatcher, typename Filter>
+class PredicateBackwardSliceMatcher {
+public:
+ PredicateBackwardSliceMatcher(BaseMatcher innerMatcher, Filter filterMatcher,
+ bool inclusive, bool omitBlockArguments,
+ bool omitUsesFromAbove)
+ : innerMatcher(std::move(innerMatcher)),
+ filterMatcher(std::move(filterMatcher)), inclusive(inclusive),
+ omitBlockArguments(omitBlockArguments),
+ omitUsesFromAbove(omitUsesFromAbove) {}
+
+ bool match(Operation *rootOp, SetVector<Operation *> &backwardSlice) {
+ backwardSlice.clear();
+ BackwardSliceOptions options;
+ options.inclusive = inclusive;
+ options.omitUsesFromAbove = omitUsesFromAbove;
+ options.omitBlockArguments = omitBlockArguments;
+ if (innerMatcher.match(rootOp)) {
+ options.filter = [&](Operation *subOp) {
+ return !filterMatcher.match(subOp);
+ };
+ getBackwardSlice(rootOp, &backwardSlice, options);
+ return options.inclusive ? backwardSlice.size() > 1
+ : backwardSlice.size() >= 1;
+ }
+ return false;
+ }
+
+private:
+ BaseMatcher innerMatcher;
+ Filter filterMatcher;
+ bool inclusive;
+ bool omitBlockArguments;
+ bool omitUsesFromAbove;
+};
+
+const matcher::VariadicOperatorMatcherFunc<1,
----------------
jpienaar wrote:
This is the only one that is not slicing related correct? Lets just move it as the others are still slicing related all and this one has no dependencies on analysis (putting adjacent to DynMatcher in MatchersInternal.h)
https://github.com/llvm/llvm-project/pull/141423
More information about the Mlir-commits
mailing list