X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FTransforms%2FIPO.h;h=71b3fa7b08cd784f4671913fbf49166b78f4728a;hb=13d57320bd212483463d4f8992d5787b29eda5df;hp=a0515a7f5e0ff270c2e4d29e67f0dc586a52bcfd;hpb=ecc1cef8bfd07575ba4026780adf7054c771e12e;p=oota-llvm.git diff --git a/include/llvm/Transforms/IPO.h b/include/llvm/Transforms/IPO.h index a0515a7f5e0..71b3fa7b08c 100644 --- a/include/llvm/Transforms/IPO.h +++ b/include/llvm/Transforms/IPO.h @@ -1,10 +1,10 @@ //===- llvm/Transforms/IPO.h - Interprocedural Transformations --*- C++ -*-===// -// +// // The LLVM Compiler Infrastructure // -// This file was developed by the LLVM research group and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. -// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// //===----------------------------------------------------------------------===// // // This header file defines prototypes for accessor functions that expose passes @@ -21,8 +21,10 @@ namespace llvm { class FunctionPass; class ModulePass; +class Pass; class Function; class BasicBlock; +class GlobalValue; //===----------------------------------------------------------------------===// // @@ -77,44 +79,41 @@ ModulePass *createGlobalDCEPass(); //===----------------------------------------------------------------------===// -/// createFunctionExtractionPass - If deleteFn is true, this pass deletes as -/// the specified function. Otherwise, it deletes as much of the module as -/// possible, except for the function specified. -/// -ModulePass *createFunctionExtractionPass(Function *F, bool deleteFn = false); - - -//===----------------------------------------------------------------------===// -/// FunctionResolvingPass - Go over the functions that are in the module and -/// look for functions that have the same name. More often than not, there will -/// be things like: -/// void "foo"(...) -/// void "foo"(int, int) -/// because of the way things are declared in C. If this is the case, patch -/// things up. -/// -/// This is an interprocedural pass. +/// createGVExtractionPass - If deleteFn is true, this pass deletes as +/// the specified global values. Otherwise, it deletes as much of the module as +/// possible, except for the global values specified. /// -ModulePass *createFunctionResolvingPass(); +ModulePass *createGVExtractionPass(std::vector& GVs, bool + deleteFn = false, + bool relinkCallees = false); //===----------------------------------------------------------------------===// /// createFunctionInliningPass - Return a new pass object that uses a heuristic /// to inline direct function calls to small functions. /// -ModulePass *createFunctionInliningPass(); +Pass *createFunctionInliningPass(); +Pass *createFunctionInliningPass(int Threshold); //===----------------------------------------------------------------------===// /// createPruneEHPass - Return a new pass object which transforms invoke /// instructions into calls, if the callee can _not_ unwind the stack. /// -ModulePass *createPruneEHPass(); +Pass *createPruneEHPass(); //===----------------------------------------------------------------------===// /// createInternalizePass - This pass loops over all of the functions in the -/// input module, looking for a main function. If a main function is found, all -/// other functions are marked as internal. +/// input module, internalizing all globals (functions and variables) not part +/// of the api. If a list of symbols is specified with the +/// -internalize-public-api-* command line options, those symbols are not +/// internalized and all others are. Otherwise if AllButMain is set and the +/// main function is found, all other globals are marked as internal. /// -ModulePass *createInternalizePass(); +ModulePass *createInternalizePass(bool InternalizeEverything); + +/// createInternalizePass - This pass loops over all of the functions in the +/// input module, internalizing all globals (functions and variables) not in the +/// given exportList. +ModulePass *createInternalizePass(const std::vector &exportList); //===----------------------------------------------------------------------===// /// createDeadArgEliminationPass - This pass removes arguments from functions @@ -129,9 +128,11 @@ ModulePass *createDeadArgHackingPass(); //===----------------------------------------------------------------------===// /// createArgumentPromotionPass - This pass promotes "by reference" arguments to -/// be passed by value. +/// be passed by value if the number of elements passed is smaller or +/// equal to maxElements (maxElements == 0 means always promote). /// -ModulePass *createArgumentPromotionPass(); +Pass *createArgumentPromotionPass(unsigned maxElements = 3); +Pass *createStructRetPromotionPass(); //===----------------------------------------------------------------------===// /// createIPConstantPropagationPass - This pass propagates constants from call @@ -158,10 +159,18 @@ FunctionPass *createLoopExtractorPass(); /// FunctionPass *createSingleLoopExtractorPass(); -// createBlockExtractorPass - This pass extracts all blocks (except those -// specified in the argument list) from the functions in the module. -// -ModulePass *createBlockExtractorPass(std::vector &BTNE); +/// createBlockExtractorPass - This pass extracts all blocks (except those +/// specified in the argument list) from the functions in the module. +/// +ModulePass *createBlockExtractorPass(const std::vector &BTNE); + +/// createIndMemRemPass - This pass removes potential indirect calls of +/// malloc and free +ModulePass *createIndMemRemPass(); + +/// createStripDeadPrototypesPass - This pass removes any function declarations +/// (prototypes) that are not used. +ModulePass *createStripDeadPrototypesPass(); } // End llvm namespace