LLVM
17.0.0git
include
llvm
Analysis
CycleAnalysis.h
Go to the documentation of this file.
1
//===- CycleAnalysis.h - Cycle Info for LLVM IR -----------------*- 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
/// \file
9
///
10
/// This file declares an analysis pass that computes CycleInfo for
11
/// LLVM IR, specialized from GenericCycleInfo.
12
///
13
//===----------------------------------------------------------------------===//
14
15
#ifndef LLVM_ANALYSIS_CYCLEANALYSIS_H
16
#define LLVM_ANALYSIS_CYCLEANALYSIS_H
17
18
#include "
llvm/ADT/GenericCycleInfo.h
"
19
#include "
llvm/IR/PassManager.h
"
20
#include "
llvm/IR/SSAContext.h
"
21
#include "
llvm/Pass.h
"
22
23
namespace
llvm
{
24
extern
template
class
GenericCycleInfo<SSAContext>;
25
extern
template
class
GenericCycle<SSAContext>;
26
27
using
CycleInfo
=
GenericCycleInfo<SSAContext>
;
28
using
Cycle
=
CycleInfo::CycleT
;
29
30
/// Legacy analysis pass which computes a \ref CycleInfo.
31
class
CycleInfoWrapperPass
:
public
FunctionPass
{
32
Function
*
F
=
nullptr
;
33
CycleInfo
CI;
34
35
public
:
36
static
char
ID
;
37
38
CycleInfoWrapperPass
();
39
40
CycleInfo
&
getResult
() {
return
CI; }
41
const
CycleInfo
&
getResult
()
const
{
return
CI; }
42
43
bool
runOnFunction
(
Function
&
F
)
override
;
44
void
getAnalysisUsage(
AnalysisUsage
&AU)
const override
;
45
void
releaseMemory()
override
;
46
void
print
(
raw_ostream
&
OS
,
const
Module
*M =
nullptr
)
const override
;
47
48
// TODO: verify analysis?
49
};
50
51
/// Analysis pass which computes a \ref CycleInfo.
52
class
CycleAnalysis
:
public
AnalysisInfoMixin<CycleAnalysis>
{
53
friend
AnalysisInfoMixin<CycleAnalysis>
;
54
static
AnalysisKey
Key;
55
56
public
:
57
/// Provide the result typedef for this analysis pass.
58
using
Result
=
CycleInfo
;
59
60
using
LegacyWrapper
=
CycleInfoWrapperPass
;
61
62
/// Run the analysis pass over a function and produce a dominator tree.
63
CycleInfo
run(
Function
&
F
,
FunctionAnalysisManager
&);
64
65
// TODO: verify analysis?
66
};
67
68
/// Printer pass for the \c DominatorTree.
69
class
CycleInfoPrinterPass
:
public
PassInfoMixin<CycleInfoPrinterPass>
{
70
raw_ostream
&
OS
;
71
72
public
:
73
explicit
CycleInfoPrinterPass
(
raw_ostream
&
OS
);
74
75
PreservedAnalyses
run(
Function
&
F
,
FunctionAnalysisManager
&AM);
76
};
77
78
}
// end namespace llvm
79
80
#endif
// LLVM_ANALYSIS_CYCLEANALYSIS_H
runOnFunction
static bool runOnFunction(Function &F, bool PostInlining)
Definition:
EntryExitInstrumenter.cpp:82
GenericCycleInfo.h
Find all cycles in a control-flow graph, including irreducible loops.
F
#define F(x, y, z)
Definition:
MD5.cpp:55
PassManager.h
This header defines various interfaces for pass management in LLVM.
Pass.h
SSAContext.h
This file declares a specialization of the GenericSSAContext<X> class template for LLVM IR.
OS
raw_pwrite_stream & OS
Definition:
SampleProfWriter.cpp:53
llvm::AnalysisManager
A container for analyses that lazily runs them and caches their results.
Definition:
PassManager.h:620
llvm::AnalysisUsage
Represent the analysis usage information of a pass.
Definition:
PassAnalysisSupport.h:47
llvm::CycleAnalysis
Analysis pass which computes a CycleInfo.
Definition:
CycleAnalysis.h:52
llvm::CycleInfoPrinterPass
Printer pass for the DominatorTree.
Definition:
CycleAnalysis.h:69
llvm::CycleInfoWrapperPass
Legacy analysis pass which computes a CycleInfo.
Definition:
CycleAnalysis.h:31
llvm::CycleInfoWrapperPass::ID
static char ID
Definition:
CycleAnalysis.h:36
llvm::CycleInfoWrapperPass::getResult
CycleInfo & getResult()
Definition:
CycleAnalysis.h:40
llvm::CycleInfoWrapperPass::getResult
const CycleInfo & getResult() const
Definition:
CycleAnalysis.h:41
llvm::FunctionPass
FunctionPass class - This class is used to implement most global optimizations.
Definition:
Pass.h:311
llvm::Function
Definition:
Function.h:60
llvm::GenericCycleInfo< SSAContext >
llvm::GenericCycleInfo< SSAContext >::CycleT
GenericCycle< SSAContext > CycleT
Definition:
GenericCycleInfo.h:225
llvm::GenericCycle
A possibly irreducible generalization of a Loop.
Definition:
GenericCycleInfo.h:44
llvm::Module
A Module instance is used to store all the information related to an LLVM module.
Definition:
Module.h:65
llvm::PreservedAnalyses
A set of analyses that are preserved following a run of a transformation pass.
Definition:
PassManager.h:152
llvm::raw_ostream
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition:
raw_ostream.h:52
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition:
AddressRanges.h:18
llvm::print
Printable print(const GCNRegPressure &RP, const GCNSubtarget *ST=nullptr)
Definition:
GCNRegPressure.cpp:138
llvm::CycleInfo
GenericCycleInfo< SSAContext > CycleInfo
Definition:
CycleAnalysis.h:27
llvm::AnalysisInfoMixin
A CRTP mix-in that provides informational APIs needed for analysis passes.
Definition:
PassManager.h:394
llvm::AnalysisKey
A special type used by analysis passes to provide an address that identifies that particular analysis...
Definition:
PassManager.h:69
llvm::PassInfoMixin
A CRTP mix-in to automatically provide informational APIs needed for passes.
Definition:
PassManager.h:371
Generated on Mon May 29 2023 11:25:07 for LLVM by
1.9.6