115fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner//===-- llvm/Analysis/Passes.h - Constructors for analyses ------*- C++ -*-===//
29769ab22265b313171d201b5928688524a01bd87Misha Brukman//
315fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner//                     The LLVM Compiler Infrastructure
415fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner//
57ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// This file is distributed under the University of Illinois Open Source
67ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// License. See LICENSE.TXT for details.
79769ab22265b313171d201b5928688524a01bd87Misha Brukman//
815fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner//===----------------------------------------------------------------------===//
915fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner//
1015fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner// This header file defines prototypes for accessor functions that expose passes
1115fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner// in the analysis libraries.
1215fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner//
1315fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner//===----------------------------------------------------------------------===//
1415fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner
1515fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner#ifndef LLVM_ANALYSIS_PASSES_H
1615fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner#define LLVM_ANALYSIS_PASSES_H
1715fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner
1815fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattnernamespace llvm {
19534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  class FunctionPass;
20534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  class ImmutablePass;
21cb21010fa0d7fd7018ddd966ca5bb48a47022ad0Andreas Bolka  class LoopPass;
22534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  class ModulePass;
2315fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner  class Pass;
2455e354ac0e294bde258420f80a2cc11ea19db482Daniel Dunbar  class PassInfo;
25029840c93521f5c54380e037a66216c8227ad1e1Chris Lattner  class LibCallInfo;
2615fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner
2715fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner  //===--------------------------------------------------------------------===//
2815fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner  //
29534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  // createGlobalsModRefPass - This pass provides alias and mod/ref info for
30534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  // global values that do not have their addresses taken.
3115fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner  //
3215fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner  Pass *createGlobalsModRefPass();
33534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen
34534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  //===--------------------------------------------------------------------===//
35534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  //
36472c7918b0bc155e002db6f682c899e21bff852cAndrew Lenharth  // createAliasDebugger - This pass helps debug clients of AA
37472c7918b0bc155e002db6f682c899e21bff852cAndrew Lenharth  //
38472c7918b0bc155e002db6f682c899e21bff852cAndrew Lenharth  Pass *createAliasDebugger();
39472c7918b0bc155e002db6f682c899e21bff852cAndrew Lenharth
40472c7918b0bc155e002db6f682c899e21bff852cAndrew Lenharth  //===--------------------------------------------------------------------===//
41472c7918b0bc155e002db6f682c899e21bff852cAndrew Lenharth  //
42534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  // createAliasAnalysisCounterPass - This pass counts alias queries and how the
43534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  // alias analysis implementation responds.
44534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  //
45534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  ModulePass *createAliasAnalysisCounterPass();
46534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen
47534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  //===--------------------------------------------------------------------===//
48534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  //
49534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  // createAAEvalPass - This pass implements a simple N^2 alias analysis
50534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  // accuracy evaluator.
51534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  //
52534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  FunctionPass *createAAEvalPass();
53534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen
54534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  //===--------------------------------------------------------------------===//
55534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  //
56534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  // createNoAAPass - This pass implements a "I don't know" alias analysis.
57534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  //
58534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  ImmutablePass *createNoAAPass();
599769ab22265b313171d201b5928688524a01bd87Misha Brukman
60534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  //===--------------------------------------------------------------------===//
61534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  //
62db4708cf86cece22539ff022cc0601612dd02eadDan Gohman  // createBasicAliasAnalysisPass - This pass implements the stateless alias
639e86f4364b912ae743490ba01d6989acfd12c046Dan Gohman  // analysis.
64534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  //
65534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  ImmutablePass *createBasicAliasAnalysisPass();
669769ab22265b313171d201b5928688524a01bd87Misha Brukman
67534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  //===--------------------------------------------------------------------===//
68534927d82de6d1be0f6e939263eeb309ad135661Jeff Cohen  //
69029840c93521f5c54380e037a66216c8227ad1e1Chris Lattner  /// createLibCallAliasAnalysisPass - Create an alias analysis pass that knows
70029840c93521f5c54380e037a66216c8227ad1e1Chris Lattner  /// about the semantics of a set of libcalls specified by LCI.  The newly
71029840c93521f5c54380e037a66216c8227ad1e1Chris Lattner  /// constructed pass takes ownership of the pointer that is provided.
72029840c93521f5c54380e037a66216c8227ad1e1Chris Lattner  ///
73029840c93521f5c54380e037a66216c8227ad1e1Chris Lattner  FunctionPass *createLibCallAliasAnalysisPass(LibCallInfo *LCI);
74029840c93521f5c54380e037a66216c8227ad1e1Chris Lattner
75029840c93521f5c54380e037a66216c8227ad1e1Chris Lattner  //===--------------------------------------------------------------------===//
76029840c93521f5c54380e037a66216c8227ad1e1Chris Lattner  //
772385e0e22ca482f2896dfa975a08db2f54926c09Dan Gohman  // createScalarEvolutionAliasAnalysisPass - This pass implements a simple
782385e0e22ca482f2896dfa975a08db2f54926c09Dan Gohman  // alias analysis using ScalarEvolution queries.
792385e0e22ca482f2896dfa975a08db2f54926c09Dan Gohman  //
802385e0e22ca482f2896dfa975a08db2f54926c09Dan Gohman  FunctionPass *createScalarEvolutionAliasAnalysisPass();
812385e0e22ca482f2896dfa975a08db2f54926c09Dan Gohman
822385e0e22ca482f2896dfa975a08db2f54926c09Dan Gohman  //===--------------------------------------------------------------------===//
832385e0e22ca482f2896dfa975a08db2f54926c09Dan Gohman  //
84c182cb5784cfe557f3c8fa6cfb208c02d2ed42d5Dan Gohman  // createTypeBasedAliasAnalysisPass - This pass implements metadata-based
85c182cb5784cfe557f3c8fa6cfb208c02d2ed42d5Dan Gohman  // type-based alias analysis.
86c182cb5784cfe557f3c8fa6cfb208c02d2ed42d5Dan Gohman  //
87c182cb5784cfe557f3c8fa6cfb208c02d2ed42d5Dan Gohman  ImmutablePass *createTypeBasedAliasAnalysisPass();
88c182cb5784cfe557f3c8fa6cfb208c02d2ed42d5Dan Gohman
89c182cb5784cfe557f3c8fa6cfb208c02d2ed42d5Dan Gohman  //===--------------------------------------------------------------------===//
90c182cb5784cfe557f3c8fa6cfb208c02d2ed42d5Dan Gohman  //
919fbd318d36e618fb08fb53bb48b7c848e617a8a7John McCall  // createObjCARCAliasAnalysisPass - This pass implements ObjC-ARC-based
929fbd318d36e618fb08fb53bb48b7c848e617a8a7John McCall  // alias analysis.
939fbd318d36e618fb08fb53bb48b7c848e617a8a7John McCall  //
949fbd318d36e618fb08fb53bb48b7c848e617a8a7John McCall  ImmutablePass *createObjCARCAliasAnalysisPass();
959fbd318d36e618fb08fb53bb48b7c848e617a8a7John McCall
969fbd318d36e618fb08fb53bb48b7c848e617a8a7John McCall  //===--------------------------------------------------------------------===//
979fbd318d36e618fb08fb53bb48b7c848e617a8a7John McCall  //
9810f2d13d580da348ba9769864f02d0d5a862c1e0Chris Lattner  /// createLazyValueInfoPass - This creates an instance of the LazyValueInfo
9910f2d13d580da348ba9769864f02d0d5a862c1e0Chris Lattner  /// pass.
10010f2d13d580da348ba9769864f02d0d5a862c1e0Chris Lattner  FunctionPass *createLazyValueInfoPass();
101cb21010fa0d7fd7018ddd966ca5bb48a47022ad0Andreas Bolka
102cb21010fa0d7fd7018ddd966ca5bb48a47022ad0Andreas Bolka  //===--------------------------------------------------------------------===//
103cb21010fa0d7fd7018ddd966ca5bb48a47022ad0Andreas Bolka  //
10454d2d2bbe9be3f23b680e6c6ba28e7ef1fade992NAKAMURA Takumi  // createDependenceAnalysisPass - This creates an instance of the
10554d2d2bbe9be3f23b680e6c6ba28e7ef1fade992NAKAMURA Takumi  // DependenceAnalysis pass.
106cb21010fa0d7fd7018ddd966ca5bb48a47022ad0Andreas Bolka  //
10754d2d2bbe9be3f23b680e6c6ba28e7ef1fade992NAKAMURA Takumi  FunctionPass *createDependenceAnalysisPass();
108ad43499fc4c2879e25e8c83ddd556a3079e41516Sebastian Pop
109ad43499fc4c2879e25e8c83ddd556a3079e41516Sebastian Pop  //===--------------------------------------------------------------------===//
110ad43499fc4c2879e25e8c83ddd556a3079e41516Sebastian Pop  //
1116bed58ef240b1e1a1fb41fb867a8ba6e7566e0e9Nadav Rotem  // createCostModelAnalysisPass - This creates an instance of the
1126bed58ef240b1e1a1fb41fb867a8ba6e7566e0e9Nadav Rotem  // CostModelAnalysis pass.
1136bed58ef240b1e1a1fb41fb867a8ba6e7566e0e9Nadav Rotem  //
1146bed58ef240b1e1a1fb41fb867a8ba6e7566e0e9Nadav Rotem  FunctionPass *createCostModelAnalysisPass();
1156bed58ef240b1e1a1fb41fb867a8ba6e7566e0e9Nadav Rotem
1166bed58ef240b1e1a1fb41fb867a8ba6e7566e0e9Nadav Rotem  //===--------------------------------------------------------------------===//
1176bed58ef240b1e1a1fb41fb867a8ba6e7566e0e9Nadav Rotem  //
1185230ad61fd35d3006e7764c3152d28e2e68c288fSebastian Pop  // createDelinearizationPass - This pass implements attempts to restore
1195230ad61fd35d3006e7764c3152d28e2e68c288fSebastian Pop  // multidimensional array indices from linearized expressions.
1205230ad61fd35d3006e7764c3152d28e2e68c288fSebastian Pop  //
1215230ad61fd35d3006e7764c3152d28e2e68c288fSebastian Pop  FunctionPass *createDelinearizationPass();
1225230ad61fd35d3006e7764c3152d28e2e68c288fSebastian Pop
1235230ad61fd35d3006e7764c3152d28e2e68c288fSebastian Pop  //===--------------------------------------------------------------------===//
1245230ad61fd35d3006e7764c3152d28e2e68c288fSebastian Pop  //
125d5bc0e5f9c20a3f8e44f23ea7795ed5ccd301ca9Chris Lattner  // Minor pass prototypes, allowing us to expose them through bugpoint and
126d5bc0e5f9c20a3f8e44f23ea7795ed5ccd301ca9Chris Lattner  // analyze.
127d5bc0e5f9c20a3f8e44f23ea7795ed5ccd301ca9Chris Lattner  FunctionPass *createInstCountPass();
1286e68106a47e9774476f2f39df572652c1eb5f75cTorok Edwin
129f96b0063674e6bf72da5429bd49097e33c2325c7Tobias Grosser  //===--------------------------------------------------------------------===//
130f96b0063674e6bf72da5429bd49097e33c2325c7Tobias Grosser  //
131f96b0063674e6bf72da5429bd49097e33c2325c7Tobias Grosser  // createRegionInfoPass - This pass finds all single entry single exit regions
132f96b0063674e6bf72da5429bd49097e33c2325c7Tobias Grosser  // in a function and builds the region hierarchy.
133f96b0063674e6bf72da5429bd49097e33c2325c7Tobias Grosser  //
134f96b0063674e6bf72da5429bd49097e33c2325c7Tobias Grosser  FunctionPass *createRegionInfoPass();
135f96b0063674e6bf72da5429bd49097e33c2325c7Tobias Grosser
136ef0b14593bb8dd5651606925584adb1ac1096ba5Dan Gohman  // Print module-level debug info metadata in human-readable form.
137ef0b14593bb8dd5651606925584adb1ac1096ba5Dan Gohman  ModulePass *createModuleDebugInfoPrinterPass();
138ead0109f5bc010af837d0fa7c9bb2401b34fb29dDan Gohman
139ead0109f5bc010af837d0fa7c9bb2401b34fb29dDan Gohman  //===--------------------------------------------------------------------===//
140ead0109f5bc010af837d0fa7c9bb2401b34fb29dDan Gohman  //
141ead0109f5bc010af837d0fa7c9bb2401b34fb29dDan Gohman  // createMemDepPrinter - This pass exhaustively collects all memdep
142ead0109f5bc010af837d0fa7c9bb2401b34fb29dDan Gohman  // information and prints it with -analyze.
143ead0109f5bc010af837d0fa7c9bb2401b34fb29dDan Gohman  //
144ead0109f5bc010af837d0fa7c9bb2401b34fb29dDan Gohman  FunctionPass *createMemDepPrinter();
145cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines
146cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  // createJumpInstrTableInfoPass - This creates a pass that stores information
147cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  // about the jump tables created by JumpInstrTables
148cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  ImmutablePass *createJumpInstrTableInfoPass();
14915fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner}
15015fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner
15115fde2eb837bf806a6dfa2e1b4c75d5f195f34adChris Lattner#endif
152