1 //===-- VPlanVerifier.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 declares the class VPlanVerifier, which contains utility functions 11 /// to check the consistency of a VPlan. This includes the following kinds of 12 /// invariants: 13 /// 14 /// 1. Region/Block invariants: 15 /// - Region's entry/exit block must have no predecessors/successors, 16 /// respectively. 17 /// - Block's parent must be the region immediately containing the block. 18 /// - Linked blocks must have a bi-directional link (successor/predecessor). 19 /// - All predecessors/successors of a block must belong to the same region. 20 /// - Blocks must have no duplicated successor/predecessor. 21 /// 22 //===----------------------------------------------------------------------===// 23 24 #ifndef LLVM_TRANSFORMS_VECTORIZE_VPLANVERIFIER_H 25 #define LLVM_TRANSFORMS_VECTORIZE_VPLANVERIFIER_H 26 27 namespace llvm { 28 class VPRegionBlock; 29 class VPlan; 30 31 /// Struct with utility functions that can be used to check the consistency and 32 /// invariants of a VPlan, including the components of its H-CFG. 33 struct VPlanVerifier { 34 /// Verify the invariants of the H-CFG starting from \p TopRegion. The 35 /// verification process comprises the following steps: 36 /// 1. Region/Block verification: Check the Region/Block verification 37 /// invariants for every region in the H-CFG. 38 void verifyHierarchicalCFG(const VPRegionBlock *TopRegion) const; 39 40 /// Verify invariants for general VPlans. Currently it checks the following: 41 /// 1. all phi-like recipes must be at the beginning of a block, with no other 42 /// recipes in between. Note that currently there is still an exception for 43 /// VPBlendRecipes. 44 static bool verifyPlanIsValid(const VPlan &Plan); 45 }; 46 } // namespace llvm 47 48 #endif //LLVM_TRANSFORMS_VECTORIZE_VPLANVERIFIER_H 49