IPO.h revision 753d94a1c8fe02f64eb4f482d396712c68db1d84
1//===- llvm/Transforms/IPO.h - Interprocedural Transformations --*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file was developed by the LLVM research group and is distributed under 6// the University of Illinois Open Source License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This header file defines prototypes for accessor functions that expose passes 11// in the IPO transformations library. 12// 13//===----------------------------------------------------------------------===// 14 15#ifndef LLVM_TRANSFORMS_IPO_H 16#define LLVM_TRANSFORMS_IPO_H 17 18#include <vector> 19 20namespace llvm { 21 22class FunctionPass; 23class ModulePass; 24class Function; 25class BasicBlock; 26 27//===----------------------------------------------------------------------===// 28// 29// These functions removes symbols from functions and modules. If OnlyDebugInfo 30// is true, only debugging information is removed from the module. 31// 32ModulePass *createStripSymbolsPass(bool OnlyDebugInfo = false); 33 34//===----------------------------------------------------------------------===// 35/// createLowerSetJmpPass - This function lowers the setjmp/longjmp intrinsics 36/// to invoke/unwind instructions. This should really be part of the C/C++ 37/// front-end, but it's so much easier to write transformations in LLVM proper. 38/// 39ModulePass* createLowerSetJmpPass(); 40 41//===----------------------------------------------------------------------===// 42/// createConstantMergePass - This function returns a new pass that merges 43/// duplicate global constants together into a single constant that is shared. 44/// This is useful because some passes (ie TraceValues) insert a lot of string 45/// constants into the program, regardless of whether or not they duplicate an 46/// existing string. 47/// 48ModulePass *createConstantMergePass(); 49 50 51//===----------------------------------------------------------------------===// 52/// createGlobalOptimizerPass - This function returns a new pass that optimizes 53/// non-address taken internal globals. 54/// 55ModulePass *createGlobalOptimizerPass(); 56 57 58//===----------------------------------------------------------------------===// 59/// createRaiseAllocationsPass - Return a new pass that transforms malloc and 60/// free function calls into malloc and free instructions. 61/// 62ModulePass *createRaiseAllocationsPass(); 63 64 65//===----------------------------------------------------------------------===// 66/// createDeadTypeEliminationPass - Return a new pass that eliminates symbol 67/// table entries for types that are never used. 68/// 69ModulePass *createDeadTypeEliminationPass(); 70 71 72//===----------------------------------------------------------------------===// 73/// createGlobalDCEPass - This transform is designed to eliminate unreachable 74/// internal globals (functions or global variables) 75/// 76ModulePass *createGlobalDCEPass(); 77 78 79//===----------------------------------------------------------------------===// 80/// createFunctionExtractionPass - If deleteFn is true, this pass deletes as 81/// the specified function. Otherwise, it deletes as much of the module as 82/// possible, except for the function specified. 83/// 84ModulePass *createFunctionExtractionPass(Function *F, bool deleteFn = false); 85 86 87//===----------------------------------------------------------------------===// 88/// FunctionResolvingPass - Go over the functions that are in the module and 89/// look for functions that have the same name. More often than not, there will 90/// be things like: 91/// void "foo"(...) 92/// void "foo"(int, int) 93/// because of the way things are declared in C. If this is the case, patch 94/// things up. 95/// 96/// This is an interprocedural pass. 97/// 98ModulePass *createFunctionResolvingPass(); 99 100//===----------------------------------------------------------------------===// 101/// createFunctionInliningPass - Return a new pass object that uses a heuristic 102/// to inline direct function calls to small functions. 103/// 104ModulePass *createFunctionInliningPass(); 105 106//===----------------------------------------------------------------------===// 107/// createPruneEHPass - Return a new pass object which transforms invoke 108/// instructions into calls, if the callee can _not_ unwind the stack. 109/// 110ModulePass *createPruneEHPass(); 111 112//===----------------------------------------------------------------------===// 113/// createInternalizePass - This pass loops over all of the functions in the 114/// input module, looking for a main function. If a list of symbols is 115/// specified with the -internalize-public-api-* command line options, those 116/// symbols are internalized. Otherwise if InternalizeEverything is set and 117/// the main function is found, all other globals are marked as internal. 118/// 119ModulePass *createInternalizePass(bool InternalizeEverything); 120ModulePass *createInternalizePass(const std::vector<const char *> &exportList); 121 122//===----------------------------------------------------------------------===// 123/// createDeadArgEliminationPass - This pass removes arguments from functions 124/// which are not used by the body of the function. 125/// 126ModulePass *createDeadArgEliminationPass(); 127 128/// DeadArgHacking pass - Same as DAE, but delete arguments of external 129/// functions as well. This is definitely not safe, and should only be used by 130/// bugpoint. 131ModulePass *createDeadArgHackingPass(); 132 133//===----------------------------------------------------------------------===// 134/// createArgumentPromotionPass - This pass promotes "by reference" arguments to 135/// be passed by value. 136/// 137ModulePass *createArgumentPromotionPass(); 138 139//===----------------------------------------------------------------------===// 140/// createIPConstantPropagationPass - This pass propagates constants from call 141/// sites into the bodies of functions. 142/// 143ModulePass *createIPConstantPropagationPass(); 144 145//===----------------------------------------------------------------------===// 146/// createIPSCCPPass - This pass propagates constants from call sites into the 147/// bodies of functions, and keeps track of whether basic blocks are executable 148/// in the process. 149/// 150ModulePass *createIPSCCPPass(); 151 152//===----------------------------------------------------------------------===// 153// 154/// createLoopExtractorPass - This pass extracts all natural loops from the 155/// program into a function if it can. 156/// 157FunctionPass *createLoopExtractorPass(); 158 159/// createSingleLoopExtractorPass - This pass extracts one natural loop from the 160/// program into a function if it can. This is used by bugpoint. 161/// 162FunctionPass *createSingleLoopExtractorPass(); 163 164// createBlockExtractorPass - This pass extracts all blocks (except those 165// specified in the argument list) from the functions in the module. 166// 167ModulePass *createBlockExtractorPass(std::vector<BasicBlock*> &BTNE); 168 169// createOptimizeWellKnownCallsPass - This pass optimizes specific calls to 170// specific well-known (library) functions. 171ModulePass *createSimplifyLibCallsPass(); 172 173 174// createIndMemRemPass - This pass removes potential indirect calls of 175// malloc and free 176ModulePass *createIndMemRemPass(); 177 178} // End llvm namespace 179 180#endif 181