//===- DependencyGraph.h ----------------------------------*- 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 declares the dependency graph used by the vectorizer's instruction // scheduler. // // The nodes of the graph are objects of the `DGNode` class. Each `DGNode` // object points to an instruction. // The edges between `DGNode`s are implicitly defined by an ordered set of // predecessor nodes, to save memory. // Finally the whole dependency graph is an object of the `DependencyGraph` // class, which also provides the API for creating/extending the graph from // input Sandbox IR. // //===----------------------------------------------------------------------===// #ifndef LLVM_TRANSFORMS_VECTORIZE_SANDBOXVECTORIZER_DEPENDENCYGRAPH_H #define LLVM_TRANSFORMS_VECTORIZE_SANDBOXVECTORIZER_DEPENDENCYGRAPH_H #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/iterator_range.h" #include "llvm/SandboxIR/Instruction.h" #include "llvm/SandboxIR/Utils.h" #include "llvm/Transforms/Vectorize/SandboxVectorizer/Interval.h" namespace llvm::sandboxir { class DependencyGraph; class MemDGNode; /// SubclassIDs for isa/dyn_cast etc. enum class DGNodeID { … }; /// A DependencyGraph Node that points to an Instruction and contains memory /// dependency edges. class DGNode { … }; /// A DependencyGraph Node for instructions that may read/write memory, or have /// some ordering constraints, like with stacksave/stackrestore and /// alloca/inalloca. class MemDGNode final : public DGNode { … }; /// Convenience builders for a MemDGNode interval. class MemDGNodeIntervalBuilder { … }; class DependencyGraph { … }; } // namespace llvm::sandboxir #endif // LLVM_TRANSFORMS_VECTORIZE_SANDBOXVECTORIZER_DEPENDENCYGRAPH_H