llvm-6502/include/llvm/Transforms/Utils/BasicInliner.h
Devang Patel 6899b31422 Add BasicInliner interface.
This interface allows clients to inline bunch of functions with module
level call graph information.:wq



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40486 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-25 18:00:25 +00:00

56 lines
1.7 KiB
C++

//===- BasicInliner.h - Basic function level inliner ------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file was developed by Devang Patel and 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/Transforms/Utils/InlineCost.h"
namespace llvm {
class Function;
class TargetData;
class 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:
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