| //===- 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 |