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