//===- BasicInliner.h - Basic function level inliner ------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file defines a simple function based inliner that does not use // call graph information. // //===----------------------------------------------------------------------===// #ifndef BASICINLINER_H #define BASICINLINER_H #include "llvm/Analysis/InlineCost.h" namespace llvm { class Function; class TargetData; struct BasicInlinerImpl; /// BasicInliner - BasicInliner provides function level inlining interface. /// Clients provide list of functions which are inline without using /// module level call graph information. Note that the BasicInliner is /// free to delete a function if it is inlined into all call sites. class BasicInliner { public: explicit BasicInliner(TargetData *T = NULL); ~BasicInliner(); /// addFunction - Add function into the list of functions to process. /// All functions must be inserted using this interface before invoking /// inlineFunctions(). void addFunction(Function *F); /// neverInlineFunction - Sometimes a function is never to be inlined /// because of one or other reason. void neverInlineFunction(Function *F); /// inlineFuctions - Walk all call sites in all functions supplied by /// client. Inline as many call sites as possible. Delete completely /// inlined functions. void inlineFunctions(); private: BasicInlinerImpl *Impl; }; } #endif