• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===- BasicInliner.h - Basic function level inliner ------------*- 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 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/Analysis/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     explicit 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
56