blob: 5208f2d58e2bee851e3a1eba537fac9efead0106 [file] [log] [blame]
Diego Caballero35871502018-07-31 01:57:29 +00001//===-- VPLoopInfo.h --------------------------------------------*- C++ -*-===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// 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
Diego Caballero35871502018-07-31 01:57:29 +00006//
7//===----------------------------------------------------------------------===//
8///
9/// \file
10/// This file defines VPLoopInfo analysis and VPLoop class. VPLoopInfo is a
11/// specialization of LoopInfoBase for VPBlockBase. VPLoops is a specialization
12/// of LoopBase that is used to hold loop metadata from VPLoopInfo. Further
13/// information can be found in VectorizationPlanner.rst.
14///
15//===----------------------------------------------------------------------===//
16
17#ifndef LLVM_TRANSFORMS_VECTORIZE_VPLOOPINFO_H
18#define LLVM_TRANSFORMS_VECTORIZE_VPLOOPINFO_H
19
20#include "llvm/Analysis/LoopInfoImpl.h"
21
22namespace llvm {
23class VPBlockBase;
24
25/// Hold analysis information for every loop detected by VPLoopInfo. It is an
26/// instantiation of LoopBase.
27class VPLoop : public LoopBase<VPBlockBase, VPLoop> {
28private:
29 friend class LoopInfoBase<VPBlockBase, VPLoop>;
30 explicit VPLoop(VPBlockBase *VPB) : LoopBase<VPBlockBase, VPLoop>(VPB) {}
31};
32
33/// VPLoopInfo provides analysis of natural loop for VPBlockBase-based
34/// Hierarchical CFG. It is a specialization of LoopInfoBase class.
35// TODO: VPLoopInfo is initially computed on top of the VPlan plain CFG, which
36// is the same as the incoming IR CFG. If it's more efficient than running the
37// whole loop detection algorithm, we may want to create a mechanism to
38// translate LoopInfo into VPLoopInfo. However, that would require significant
39// changes in LoopInfoBase class.
40typedef LoopInfoBase<VPBlockBase, VPLoop> VPLoopInfo;
41
42} // namespace llvm
43
44#endif // LLVM_TRANSFORMS_VECTORIZE_VPLOOPINFO_H