//===- PredicateTree.h - Predicate tree node definitions --------*- C++ -*-===// // // 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 // //===----------------------------------------------------------------------===// // // This file contains definitions for nodes of a tree structure for representing // the general control flow within a pattern match. // //===----------------------------------------------------------------------===// #ifndef MLIR_LIB_CONVERSION_PDLTOPDLINTERP_PREDICATETREE_H_ #define MLIR_LIB_CONVERSION_PDLTOPDLINTERP_PREDICATETREE_H_ #include "Predicate.h" #include "mlir/Dialect/PDL/IR/PDLOps.h" #include "llvm/ADT/MapVector.h" namespace mlir { class ModuleOp; namespace pdl_to_pdl_interp { class MatcherNode; /// A PositionalPredicate is a predicate that is associated with a specific /// positional value. struct PositionalPredicate { … }; //===----------------------------------------------------------------------===// // MatcherNode //===----------------------------------------------------------------------===// /// This class represents the base of a predicate matcher node. class MatcherNode { … }; //===----------------------------------------------------------------------===// // BoolNode /// A BoolNode denotes a question with a boolean-like result. These nodes branch /// to a single node on a successful result, otherwise defaulting to the failure /// node. struct BoolNode : public MatcherNode { … }; //===----------------------------------------------------------------------===// // ExitNode /// An ExitNode is a special sentinel node that denotes the end of matcher. struct ExitNode : public MatcherNode { … }; //===----------------------------------------------------------------------===// // SuccessNode /// A SuccessNode denotes that a given high level pattern has successfully been /// matched. This does not terminate the matcher, as there may be multiple /// successful matches. struct SuccessNode : public MatcherNode { … }; //===----------------------------------------------------------------------===// // SwitchNode /// A SwitchNode denotes a question with multiple potential results. These nodes /// branch to a specific node based on the result of the question. struct SwitchNode : public MatcherNode { … }; } // namespace pdl_to_pdl_interp } // namespace mlir #endif // MLIR_CONVERSION_PDLTOPDLINTERP_PREDICATETREE_H_