diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2021-12-25 22:30:44 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2021-12-25 22:30:44 +0000 | 
| commit | 77fc4c146f0870ffb09c1afb823ccbe742c5e6ff (patch) | |
| tree | 5c0eb39553003b9c75a901af6bc4ddabd6f2f28c /llvm/lib/Transforms/Vectorize/VPlanVerifier.cpp | |
| parent | f65dcba83ce5035ab88a85fe17628b447eb56e1b (diff) | |
Diffstat (limited to 'llvm/lib/Transforms/Vectorize/VPlanVerifier.cpp')
| -rw-r--r-- | llvm/lib/Transforms/Vectorize/VPlanVerifier.cpp | 26 | 
1 files changed, 26 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Vectorize/VPlanVerifier.cpp b/llvm/lib/Transforms/Vectorize/VPlanVerifier.cpp index 6d6ea4eb30f1..7732d9367985 100644 --- a/llvm/lib/Transforms/Vectorize/VPlanVerifier.cpp +++ b/llvm/lib/Transforms/Vectorize/VPlanVerifier.cpp @@ -156,5 +156,31 @@ bool VPlanVerifier::verifyPlanIsValid(const VPlan &Plan) {        RecipeI++;      }    } + +  const VPRegionBlock *TopRegion = cast<VPRegionBlock>(Plan.getEntry()); +  const VPBasicBlock *Entry = dyn_cast<VPBasicBlock>(TopRegion->getEntry()); +  if (!Entry) { +    errs() << "VPlan entry block is not a VPBasicBlock\n"; +    return false; +  } +  const VPBasicBlock *Exit = dyn_cast<VPBasicBlock>(TopRegion->getExit()); +  if (!Exit) { +    errs() << "VPlan exit block is not a VPBasicBlock\n"; +    return false; +  } + +  for (const VPRegionBlock *Region : +       VPBlockUtils::blocksOnly<const VPRegionBlock>( +           depth_first(VPBlockRecursiveTraversalWrapper<const VPBlockBase *>( +               Plan.getEntry())))) { +    if (Region->getEntry()->getNumPredecessors() != 0) { +      errs() << "region entry block has predecessors\n"; +      return false; +    } +    if (Region->getExit()->getNumSuccessors() != 0) { +      errs() << "region exit block has successors\n"; +      return false; +    } +  }    return true;  }  | 
