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 24namespace llvm { 25 26template <> 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. 38using VPDominatorTree = DomTreeBase<VPBlockBase>; 39 40using VPDomTreeNode = DomTreeNodeBase<VPBlockBase>; 41 42/// Template specializations of GraphTraits for VPDomTreeNode. 43template <> 44struct GraphTraits<VPDomTreeNode *> 45 : public DomTreeGraphTraitsBase<VPDomTreeNode, 46 VPDomTreeNode::const_iterator> {}; 47 48template <> 49struct GraphTraits<const VPDomTreeNode *> 50 : public DomTreeGraphTraitsBase<const VPDomTreeNode, 51 VPDomTreeNode::const_iterator> {}; 52} // namespace llvm 53#endif // LLVM_TRANSFORMS_VECTORIZE_VPLANDOMINATORTREE_H 54