//===-- VPlanHCFGBuilder.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
//
//===----------------------------------------------------------------------===//
///
/// \file
/// This file defines the VPlanHCFGBuilder class which contains the public
/// interface (buildHierarchicalCFG) to build a VPlan-based Hierarchical CFG
/// (H-CFG) for an incoming IR.
///
/// A H-CFG in VPlan is a control-flow graph whose nodes are VPBasicBlocks
/// and/or VPRegionBlocks (i.e., other H-CFGs). The outermost H-CFG of a VPlan
/// consists of a VPRegionBlock, denoted Top Region, which encloses any other
/// VPBlockBase in the H-CFG. This guarantees that any VPBlockBase in the H-CFG
/// other than the Top Region will have a parent VPRegionBlock and allows us
/// to easily add more nodes before/after the main vector loop (such as the
/// reduction epilogue).
///
//===----------------------------------------------------------------------===//

#ifndef LLVM_TRANSFORMS_VECTORIZE_VPLAN_VPLANHCFGBUILDER_H
#define LLVM_TRANSFORMS_VECTORIZE_VPLAN_VPLANHCFGBUILDER_H

#include "VPlanDominatorTree.h"
#include "VPlanVerifier.h"

namespace llvm {

class Loop;
class LoopInfo;
class VPRegionBlock;
class VPlan;
class VPlanTestBase;

/// Main class to build the VPlan H-CFG for an incoming IR.
class VPlanHCFGBuilder {
  friend VPlanTestBase;

private:
  // The outermost loop of the input loop nest considered for vectorization.
  Loop *TheLoop;

  // Loop Info analysis.
  LoopInfo *LI;

  // The VPlan that will contain the H-CFG we are building.
  VPlan &Plan;

  // VPlan verifier utility.
  VPlanVerifier Verifier;

  // Dominator analysis for VPlan plain CFG to be used in the
  // construction of the H-CFG. This analysis is no longer valid once regions
  // are introduced.
  VPDominatorTree VPDomTree;

  /// Build plain CFG for TheLoop. Return the pre-header VPBasicBlock connected
  /// to a new VPRegionBlock (TopRegion) enclosing the plain CFG.
  VPBasicBlock *buildPlainCFG();

public:
  VPlanHCFGBuilder(Loop *Lp, LoopInfo *LI, VPlan &P)
      : TheLoop(Lp), LI(LI), Plan(P) {}

  /// Build H-CFG for TheLoop and update Plan accordingly.
  void buildHierarchicalCFG();
};
} // namespace llvm

#endif // LLVM_TRANSFORMS_VECTORIZE_VPLAN_VPLANHCFGBUILDER_H
