//===- ReductionNode.h - Reduction Node Implementation ----------*- 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 defines the reduction nodes which are used to track of the metadata // for a specific generated variant within a reduction pass and are the building // blocks of the reduction tree structure. A reduction tree is used to keep // track of the different generated variants throughout a reduction pass in the // MLIR Reduce tool. // //===----------------------------------------------------------------------===// #ifndef MLIR_REDUCER_REDUCTIONNODE_H #define MLIR_REDUCER_REDUCTIONNODE_H #include <queue> #include <vector> #include "mlir/IR/OwningOpRef.h" #include "mlir/Reducer/Tester.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/Support/Allocator.h" #include "llvm/Support/ToolOutputFile.h" namespace mlir { class ModuleOp; class Region; /// Defines the traversal method options to be used in the reduction tree /// traversal. enum TraversalMode { … }; /// ReductionTreePass will build a reduction tree during module reduction and /// the ReductionNode represents the vertex of the tree. A ReductionNode records /// the information such as the reduced module, how this node is reduced from /// the parent node, etc. This information will be used to construct a reduction /// path to reduce the certain module. class ReductionNode { … }; // Specialized iterator for SinglePath traversal template <> class ReductionNode::iterator<SinglePath> : public BaseIterator<iterator<SinglePath>> { … }; } // namespace mlir #endif // MLIR_REDUCER_REDUCTIONNODE_H