a549ccf023e293f27d06333b65dfd845793af660
[oota-llvm.git] / include / llvm / Transforms / Utils / BasicInliner.h
1 //===- BasicInliner.h - Basic function level inliner ------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by Devang Patel and is distributed under
6 // the University of Illinois Open Source License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines a simple function based inliner that does not use
11 // call graph information. 
12 //
13 //===----------------------------------------------------------------------===//
14
15 #ifndef BASICINLINER_H
16 #define BASICINLINER_H
17
18 #include "llvm/Transforms/Utils/InlineCost.h"
19
20 namespace llvm {
21
22   class Function;
23   class TargetData;
24   struct BasicInlinerImpl;
25
26   /// BasicInliner - BasicInliner provides function level inlining interface.
27   /// Clients provide list of functions which are inline without using
28   /// module level call graph information. Note that the BasicInliner is
29   /// free to delete a function if it is inlined into all call sites.
30   class BasicInliner {
31   public:
32     
33     BasicInliner(TargetData *T = NULL);
34     ~BasicInliner();
35
36     /// addFunction - Add function into the list of functions to process.
37     /// All functions must be inserted using this interface before invoking
38     /// inlineFunctions().
39     void addFunction(Function *F);
40
41     /// neverInlineFunction - Sometimes a function is never to be inlined 
42     /// because of one or other reason. 
43     void neverInlineFunction(Function *F);
44
45     /// inlineFuctions - Walk all call sites in all functions supplied by
46     /// client. Inline as many call sites as possible. Delete completely
47     /// inlined functions.
48     void inlineFunctions();
49
50   private:
51     BasicInlinerImpl *Impl;
52   };
53 }
54
55 #endif