1 //===-- VPlanDominatorTree.h ------------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 /// 9 /// \file 10 /// This file implements dominator tree analysis for a single level of a VPlan's 11 /// H-CFG. 12 /// 13 //===----------------------------------------------------------------------===// 14 15 #ifndef LLVM_TRANSFORMS_VECTORIZE_VPLANDOMINATORTREE_H 16 #define LLVM_TRANSFORMS_VECTORIZE_VPLANDOMINATORTREE_H 17 18 #include "VPlan.h" 19 #include "VPlanCFG.h" 20 #include "llvm/ADT/GraphTraits.h" 21 #include "llvm/IR/Dominators.h" 22 #include "llvm/Support/GenericDomTree.h" 23 24 namespace llvm { 25 26 template <> struct DomTreeNodeTraits<VPBlockBase> { 27 using NodeType = VPBlockBase; 28 using NodePtr = VPBlockBase *; 29 using ParentPtr = VPlan *; 30 31 static NodePtr getEntryNode(ParentPtr Parent) { return Parent->getEntry(); } 32 static ParentPtr getParent(NodePtr B) { return B->getPlan(); } 33 }; 34 35 /// 36 /// Template specialization of the standard LLVM dominator tree utility for 37 /// VPBlockBases. 38 using VPDominatorTree = DomTreeBase<VPBlockBase>; 39 40 using VPDomTreeNode = DomTreeNodeBase<VPBlockBase>; 41 42 /// Template specializations of GraphTraits for VPDomTreeNode. 43 template <> 44 struct GraphTraits<VPDomTreeNode *> 45 : public DomTreeGraphTraitsBase<VPDomTreeNode, 46 VPDomTreeNode::const_iterator> {}; 47 48 template <> 49 struct GraphTraits<const VPDomTreeNode *> 50 : public DomTreeGraphTraitsBase<const VPDomTreeNode, 51 VPDomTreeNode::const_iterator> {}; 52 } // namespace llvm 53 #endif // LLVM_TRANSFORMS_VECTORIZE_VPLANDOMINATORTREE_H 54