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