Home | History | Annotate | Download | only in Transforms
      1 //===- llvm/Transforms/IPO.h - Interprocedural Transformations --*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // 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 
     20 namespace llvm {
     21 
     22 class ModulePass;
     23 class Pass;
     24 class Function;
     25 class BasicBlock;
     26 class GlobalValue;
     27 
     28 //===----------------------------------------------------------------------===//
     29 //
     30 // These functions removes symbols from functions and modules.  If OnlyDebugInfo
     31 // is true, only debugging information is removed from the module.
     32 //
     33 ModulePass *createStripSymbolsPass(bool OnlyDebugInfo = false);
     34 
     35 //===----------------------------------------------------------------------===//
     36 //
     37 // These functions strips symbols from functions and modules.
     38 // Only debugging information is not stripped.
     39 //
     40 ModulePass *createStripNonDebugSymbolsPass();
     41 
     42 //===----------------------------------------------------------------------===//
     43 //
     44 // These pass removes llvm.dbg.declare intrinsics.
     45 ModulePass *createStripDebugDeclarePass();
     46 
     47 //===----------------------------------------------------------------------===//
     48 //
     49 // These pass removes unused symbols' debug info.
     50 ModulePass *createStripDeadDebugInfoPass();
     51 
     52 //===----------------------------------------------------------------------===//
     53 /// createConstantMergePass - This function returns a new pass that merges
     54 /// duplicate global constants together into a single constant that is shared.
     55 /// This is useful because some passes (ie TraceValues) insert a lot of string
     56 /// constants into the program, regardless of whether or not they duplicate an
     57 /// existing string.
     58 ///
     59 ModulePass *createConstantMergePass();
     60 
     61 
     62 //===----------------------------------------------------------------------===//
     63 /// createGlobalOptimizerPass - This function returns a new pass that optimizes
     64 /// non-address taken internal globals.
     65 ///
     66 ModulePass *createGlobalOptimizerPass();
     67 
     68 
     69 //===----------------------------------------------------------------------===//
     70 /// createGlobalDCEPass - This transform is designed to eliminate unreachable
     71 /// internal globals (functions or global variables)
     72 ///
     73 ModulePass *createGlobalDCEPass();
     74 
     75 
     76 //===----------------------------------------------------------------------===//
     77 /// createGVExtractionPass - If deleteFn is true, this pass deletes
     78 /// the specified global values. Otherwise, it deletes as much of the module as
     79 /// possible, except for the global values specified.
     80 ///
     81 ModulePass *createGVExtractionPass(std::vector<GlobalValue*>& GVs, bool
     82                                    deleteFn = false);
     83 
     84 //===----------------------------------------------------------------------===//
     85 /// createFunctionInliningPass - Return a new pass object that uses a heuristic
     86 /// to inline direct function calls to small functions.
     87 ///
     88 /// The -inline-threshold command line option takes precedence over the
     89 /// threshold given here.
     90 Pass *createFunctionInliningPass();
     91 Pass *createFunctionInliningPass(int Threshold);
     92 
     93 //===----------------------------------------------------------------------===//
     94 /// createAlwaysInlinerPass - Return a new pass object that inlines only
     95 /// functions that are marked as "always_inline".
     96 Pass *createAlwaysInlinerPass();
     97 
     98 //===----------------------------------------------------------------------===//
     99 /// createPruneEHPass - Return a new pass object which transforms invoke
    100 /// instructions into calls, if the callee can _not_ unwind the stack.
    101 ///
    102 Pass *createPruneEHPass();
    103 
    104 //===----------------------------------------------------------------------===//
    105 /// createInternalizePass - This pass loops over all of the functions in the
    106 /// input module, internalizing all globals (functions and variables) not part
    107 /// of the api.  If a list of symbols is specified with the
    108 /// -internalize-public-api-* command line options, those symbols are not
    109 /// internalized and all others are.  Otherwise if AllButMain is set and the
    110 /// main function is found, all other globals are marked as internal. If no api
    111 /// is supplied and AllButMain is not set, or no main function is found, nothing
    112 /// is internalized.
    113 ///
    114 ModulePass *createInternalizePass(bool AllButMain);
    115 
    116 /// createInternalizePass - This pass loops over all of the functions in the
    117 /// input module, internalizing all globals (functions and variables) not in the
    118 /// given exportList.
    119 ///
    120 /// Note that commandline options that are used with the above function are not
    121 /// used now! Also, when exportList is empty, nothing is internalized.
    122 ModulePass *createInternalizePass(const std::vector<const char *> &exportList);
    123 
    124 //===----------------------------------------------------------------------===//
    125 /// createDeadArgEliminationPass - This pass removes arguments from functions
    126 /// which are not used by the body of the function.
    127 ///
    128 ModulePass *createDeadArgEliminationPass();
    129 
    130 /// DeadArgHacking pass - Same as DAE, but delete arguments of external
    131 /// functions as well.  This is definitely not safe, and should only be used by
    132 /// bugpoint.
    133 ModulePass *createDeadArgHackingPass();
    134 
    135 //===----------------------------------------------------------------------===//
    136 /// createArgumentPromotionPass - This pass promotes "by reference" arguments to
    137 /// be passed by value if the number of elements passed is smaller or
    138 /// equal to maxElements (maxElements == 0 means always promote).
    139 ///
    140 Pass *createArgumentPromotionPass(unsigned maxElements = 3);
    141 
    142 //===----------------------------------------------------------------------===//
    143 /// createIPConstantPropagationPass - This pass propagates constants from call
    144 /// sites into the bodies of functions.
    145 ///
    146 ModulePass *createIPConstantPropagationPass();
    147 
    148 //===----------------------------------------------------------------------===//
    149 /// createIPSCCPPass - This pass propagates constants from call sites into the
    150 /// bodies of functions, and keeps track of whether basic blocks are executable
    151 /// in the process.
    152 ///
    153 ModulePass *createIPSCCPPass();
    154 
    155 //===----------------------------------------------------------------------===//
    156 //
    157 /// createLoopExtractorPass - This pass extracts all natural loops from the
    158 /// program into a function if it can.
    159 ///
    160 Pass *createLoopExtractorPass();
    161 
    162 /// createSingleLoopExtractorPass - This pass extracts one natural loop from the
    163 /// program into a function if it can.  This is used by bugpoint.
    164 ///
    165 Pass *createSingleLoopExtractorPass();
    166 
    167 /// createBlockExtractorPass - This pass extracts all blocks (except those
    168 /// specified in the argument list) from the functions in the module.
    169 ///
    170 ModulePass *createBlockExtractorPass();
    171 
    172 /// createStripDeadPrototypesPass - This pass removes any function declarations
    173 /// (prototypes) that are not used.
    174 ModulePass *createStripDeadPrototypesPass();
    175 
    176 //===----------------------------------------------------------------------===//
    177 /// createFunctionAttrsPass - This pass discovers functions that do not access
    178 /// memory, or only read memory, and gives them the readnone/readonly attribute.
    179 /// It also discovers function arguments that are not captured by the function
    180 /// and marks them with the nocapture attribute.
    181 ///
    182 Pass *createFunctionAttrsPass();
    183 
    184 //===----------------------------------------------------------------------===//
    185 /// createMergeFunctionsPass - This pass discovers identical functions and
    186 /// collapses them.
    187 ///
    188 ModulePass *createMergeFunctionsPass();
    189 
    190 //===----------------------------------------------------------------------===//
    191 /// createPartialInliningPass - This pass inlines parts of functions.
    192 ///
    193 ModulePass *createPartialInliningPass();
    194 
    195 } // End llvm namespace
    196 
    197 #endif
    198