2004-06-28 06:31:26 +00:00
|
|
|
//===-- llvm/Analysis/Passes.h - Constructors for analyses ------*- C++ -*-===//
|
2005-04-21 20:19:05 +00:00
|
|
|
//
|
2004-06-28 06:31:26 +00:00
|
|
|
// The LLVM Compiler Infrastructure
|
|
|
|
//
|
2007-12-29 19:59:42 +00:00
|
|
|
// This file is distributed under the University of Illinois Open Source
|
|
|
|
// License. See LICENSE.TXT for details.
|
2005-04-21 20:19:05 +00:00
|
|
|
//
|
2004-06-28 06:31:26 +00:00
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// This header file defines prototypes for accessor functions that expose passes
|
|
|
|
// in the analysis libraries.
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
#ifndef LLVM_ANALYSIS_PASSES_H
|
|
|
|
#define LLVM_ANALYSIS_PASSES_H
|
|
|
|
|
|
|
|
namespace llvm {
|
2005-01-08 22:01:16 +00:00
|
|
|
class FunctionPass;
|
|
|
|
class ImmutablePass;
|
2009-06-24 21:29:13 +00:00
|
|
|
class LoopPass;
|
2005-01-08 22:01:16 +00:00
|
|
|
class ModulePass;
|
2004-06-28 06:31:26 +00:00
|
|
|
class Pass;
|
2009-08-08 18:44:18 +00:00
|
|
|
class PassInfo;
|
2008-05-07 19:53:05 +00:00
|
|
|
class LibCallInfo;
|
2004-06-28 06:31:26 +00:00
|
|
|
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
2005-01-08 22:01:16 +00:00
|
|
|
// createGlobalsModRefPass - This pass provides alias and mod/ref info for
|
|
|
|
// global values that do not have their addresses taken.
|
2004-06-28 06:31:26 +00:00
|
|
|
//
|
|
|
|
Pass *createGlobalsModRefPass();
|
2005-01-08 22:01:16 +00:00
|
|
|
|
2006-11-14 05:21:04 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// createAliasDebugger - This pass helps debug clients of AA
|
|
|
|
//
|
|
|
|
Pass *createAliasDebugger();
|
|
|
|
|
2005-01-08 22:01:16 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// createAliasAnalysisCounterPass - This pass counts alias queries and how the
|
|
|
|
// alias analysis implementation responds.
|
|
|
|
//
|
|
|
|
ModulePass *createAliasAnalysisCounterPass();
|
|
|
|
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// createAAEvalPass - This pass implements a simple N^2 alias analysis
|
|
|
|
// accuracy evaluator.
|
|
|
|
//
|
|
|
|
FunctionPass *createAAEvalPass();
|
|
|
|
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// createNoAAPass - This pass implements a "I don't know" alias analysis.
|
|
|
|
//
|
|
|
|
ImmutablePass *createNoAAPass();
|
2005-04-21 20:19:05 +00:00
|
|
|
|
2005-01-08 22:01:16 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
2010-10-19 23:09:08 +00:00
|
|
|
// createBasicAliasAnalysisPass - This pass implements the stateless alias
|
2010-07-07 14:27:09 +00:00
|
|
|
// analysis.
|
2005-01-08 22:01:16 +00:00
|
|
|
//
|
|
|
|
ImmutablePass *createBasicAliasAnalysisPass();
|
2005-04-21 20:19:05 +00:00
|
|
|
|
2008-05-07 19:53:05 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
/// createLibCallAliasAnalysisPass - Create an alias analysis pass that knows
|
|
|
|
/// about the semantics of a set of libcalls specified by LCI. The newly
|
|
|
|
/// constructed pass takes ownership of the pointer that is provided.
|
|
|
|
///
|
|
|
|
FunctionPass *createLibCallAliasAnalysisPass(LibCallInfo *LCI);
|
|
|
|
|
2009-08-26 14:53:06 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// createScalarEvolutionAliasAnalysisPass - This pass implements a simple
|
|
|
|
// alias analysis using ScalarEvolution queries.
|
|
|
|
//
|
|
|
|
FunctionPass *createScalarEvolutionAliasAnalysisPass();
|
|
|
|
|
2010-08-02 23:11:01 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// createTypeBasedAliasAnalysisPass - This pass implements metadata-based
|
|
|
|
// type-based alias analysis.
|
|
|
|
//
|
|
|
|
ImmutablePass *createTypeBasedAliasAnalysisPass();
|
|
|
|
|
2011-06-15 23:37:01 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// createObjCARCAliasAnalysisPass - This pass implements ObjC-ARC-based
|
|
|
|
// alias analysis.
|
|
|
|
//
|
|
|
|
ImmutablePass *createObjCARCAliasAnalysisPass();
|
|
|
|
|
2005-01-08 22:01:16 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
2005-01-10 03:56:27 +00:00
|
|
|
// createProfileLoaderPass - This pass loads information from a profile dump
|
|
|
|
// file.
|
2005-01-08 22:01:16 +00:00
|
|
|
//
|
2005-01-10 03:56:27 +00:00
|
|
|
ModulePass *createProfileLoaderPass();
|
2010-08-06 18:33:48 +00:00
|
|
|
extern char &ProfileLoaderPassID;
|
2005-04-21 20:19:05 +00:00
|
|
|
|
2012-08-28 22:21:25 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// createProfileMetadataLoaderPass - This pass loads information from a
|
|
|
|
// profile dump file and sets branch weight metadata.
|
|
|
|
//
|
|
|
|
ModulePass *createProfileMetadataLoaderPass();
|
|
|
|
extern char &ProfileMetadataLoaderPassID;
|
|
|
|
|
2005-01-08 22:01:16 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// createNoProfileInfoPass - This pass implements the default "no profile".
|
|
|
|
//
|
|
|
|
ImmutablePass *createNoProfileInfoPass();
|
2005-04-21 20:19:05 +00:00
|
|
|
|
2009-08-08 18:44:18 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// createProfileEstimatorPass - This pass estimates profiling information
|
|
|
|
// instead of loading it from a previous run.
|
|
|
|
//
|
|
|
|
FunctionPass *createProfileEstimatorPass();
|
2010-08-06 18:33:48 +00:00
|
|
|
extern char &ProfileEstimatorPassID;
|
2009-08-08 18:44:18 +00:00
|
|
|
|
2009-09-01 08:48:42 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// createProfileVerifierPass - This pass verifies profiling information.
|
|
|
|
//
|
|
|
|
FunctionPass *createProfileVerifierPass();
|
|
|
|
|
2011-01-29 01:09:53 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// createPathProfileLoaderPass - This pass loads information from a path
|
|
|
|
// profile dump file.
|
|
|
|
//
|
|
|
|
ModulePass *createPathProfileLoaderPass();
|
|
|
|
extern char &PathProfileLoaderPassID;
|
|
|
|
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// createNoPathProfileInfoPass - This pass implements the default
|
|
|
|
// "no path profile".
|
|
|
|
//
|
|
|
|
ImmutablePass *createNoPathProfileInfoPass();
|
|
|
|
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// createPathProfileVerifierPass - This pass verifies path profiling
|
|
|
|
// information.
|
|
|
|
//
|
|
|
|
ModulePass *createPathProfileVerifierPass();
|
|
|
|
|
2005-01-09 20:42:52 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// createDSAAPass - This pass implements simple context sensitive alias
|
|
|
|
// analysis.
|
|
|
|
//
|
|
|
|
ModulePass *createDSAAPass();
|
2005-04-21 20:19:05 +00:00
|
|
|
|
2005-01-09 20:42:52 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// createDSOptPass - This pass uses DSA to do a series of simple
|
|
|
|
// optimizations.
|
|
|
|
//
|
|
|
|
ModulePass *createDSOptPass();
|
2005-04-21 20:19:05 +00:00
|
|
|
|
2005-01-09 20:42:52 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// createSteensgaardPass - This pass uses the data structure graphs to do a
|
|
|
|
// simple context insensitive alias analysis.
|
|
|
|
//
|
|
|
|
ModulePass *createSteensgaardPass();
|
2009-03-19 17:29:04 +00:00
|
|
|
|
2009-11-11 00:22:30 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
/// createLazyValueInfoPass - This creates an instance of the LazyValueInfo
|
|
|
|
/// pass.
|
|
|
|
FunctionPass *createLazyValueInfoPass();
|
2009-06-24 21:29:13 +00:00
|
|
|
|
dependence analysis
Patch from Preston Briggs <preston.briggs@gmail.com>.
This is an updated version of the dependence-analysis patch, including an MIV
test based on Banerjee's inequalities.
It's a fairly complete implementation of the paper
Practical Dependence Testing
Gina Goff, Ken Kennedy, and Chau-Wen Tseng
PLDI 1991
It cannot yet propagate constraints between coupled RDIV subscripts (discussed
in Section 5.3.2 of the paper).
It's organized as a FunctionPass with a single entry point that supports testing
for dependence between two instructions in a function. If there's no dependence,
it returns null. If there's a dependence, it returns a pointer to a Dependence
which can be queried about details (what kind of dependence, is it loop
independent, direction and distance vector entries, etc). I haven't included
every imaginable feature, but there's a good selection that should be adequate
for supporting many loop transformations. Of course, it can be extended as
necessary.
Included in the patch file are many test cases, commented with C code showing
the loops and array references.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165708 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-11 07:32:34 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
2012-10-11 08:26:52 +00:00
|
|
|
// createDependenceAnalysisPass - This creates an instance of the
|
|
|
|
// DependenceAnalysis pass.
|
dependence analysis
Patch from Preston Briggs <preston.briggs@gmail.com>.
This is an updated version of the dependence-analysis patch, including an MIV
test based on Banerjee's inequalities.
It's a fairly complete implementation of the paper
Practical Dependence Testing
Gina Goff, Ken Kennedy, and Chau-Wen Tseng
PLDI 1991
It cannot yet propagate constraints between coupled RDIV subscripts (discussed
in Section 5.3.2 of the paper).
It's organized as a FunctionPass with a single entry point that supports testing
for dependence between two instructions in a function. If there's no dependence,
it returns null. If there's a dependence, it returns a pointer to a Dependence
which can be queried about details (what kind of dependence, is it loop
independent, direction and distance vector entries, etc). I haven't included
every imaginable feature, but there's a good selection that should be adequate
for supporting many loop transformations. Of course, it can be extended as
necessary.
Included in the patch file are many test cases, commented with C code showing
the loops and array references.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165708 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-11 07:32:34 +00:00
|
|
|
//
|
2012-10-11 08:26:52 +00:00
|
|
|
FunctionPass *createDependenceAnalysisPass();
|
dependence analysis
Patch from Preston Briggs <preston.briggs@gmail.com>.
This is an updated version of the dependence-analysis patch, including an MIV
test based on Banerjee's inequalities.
It's a fairly complete implementation of the paper
Practical Dependence Testing
Gina Goff, Ken Kennedy, and Chau-Wen Tseng
PLDI 1991
It cannot yet propagate constraints between coupled RDIV subscripts (discussed
in Section 5.3.2 of the paper).
It's organized as a FunctionPass with a single entry point that supports testing
for dependence between two instructions in a function. If there's no dependence,
it returns null. If there's a dependence, it returns a pointer to a Dependence
which can be queried about details (what kind of dependence, is it loop
independent, direction and distance vector entries, etc). I haven't included
every imaginable feature, but there's a good selection that should be adequate
for supporting many loop transformations. Of course, it can be extended as
necessary.
Included in the patch file are many test cases, commented with C code showing
the loops and array references.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165708 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-11 07:32:34 +00:00
|
|
|
|
2012-11-02 21:48:17 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// createCostModelAnalysisPass - This creates an instance of the
|
|
|
|
// CostModelAnalysis pass.
|
|
|
|
//
|
|
|
|
FunctionPass *createCostModelAnalysisPass();
|
|
|
|
|
dependence analysis
Patch from Preston Briggs <preston.briggs@gmail.com>.
This is an updated version of the dependence-analysis patch, including an MIV
test based on Banerjee's inequalities.
It's a fairly complete implementation of the paper
Practical Dependence Testing
Gina Goff, Ken Kennedy, and Chau-Wen Tseng
PLDI 1991
It cannot yet propagate constraints between coupled RDIV subscripts (discussed
in Section 5.3.2 of the paper).
It's organized as a FunctionPass with a single entry point that supports testing
for dependence between two instructions in a function. If there's no dependence,
it returns null. If there's a dependence, it returns a pointer to a Dependence
which can be queried about details (what kind of dependence, is it loop
independent, direction and distance vector entries, etc). I haven't included
every imaginable feature, but there's a good selection that should be adequate
for supporting many loop transformations. Of course, it can be extended as
necessary.
Included in the patch file are many test cases, commented with C code showing
the loops and array references.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165708 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-11 07:32:34 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
2005-10-24 01:00:32 +00:00
|
|
|
// Minor pass prototypes, allowing us to expose them through bugpoint and
|
|
|
|
// analyze.
|
|
|
|
FunctionPass *createInstCountPass();
|
2008-12-16 09:09:19 +00:00
|
|
|
|
|
|
|
// print debug info intrinsics in human readable form
|
|
|
|
FunctionPass *createDbgInfoPrinterPass();
|
2010-05-07 16:22:32 +00:00
|
|
|
|
2010-07-22 07:46:31 +00:00
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// createRegionInfoPass - This pass finds all single entry single exit regions
|
|
|
|
// in a function and builds the region hierarchy.
|
|
|
|
//
|
|
|
|
FunctionPass *createRegionInfoPass();
|
|
|
|
|
2010-05-07 16:22:32 +00:00
|
|
|
// Print module-level debug info metadata in human-readable form.
|
|
|
|
ModulePass *createModuleDebugInfoPrinterPass();
|
2010-09-16 22:08:32 +00:00
|
|
|
|
|
|
|
//===--------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// createMemDepPrinter - This pass exhaustively collects all memdep
|
|
|
|
// information and prints it with -analyze.
|
|
|
|
//
|
|
|
|
FunctionPass *createMemDepPrinter();
|
2004-06-28 06:31:26 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|