llvm-6502/lib/Transforms/IPO/Inliner.h
Chris Lattner 775cbdd51a Remove the "really gross hacks" that are there to deal with recursive functions.
Now we collect all of the call sites we are interested in inlining, then inline
them.  This entirely avoids issues with trying to inline a call site we got by
inlining another call site.  This also eliminates iterator invalidation issues.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12770 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-08 06:34:31 +00:00

64 lines
2.1 KiB
C++

//===- InlineCommon.h - Code common to all inliners -------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file was developed by the LLVM research group and is distributed under
// the University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file defines a simple policy-based bottom-up inliner. This file
// implements all of the boring mechanics of the bottom-up inlining, while the
// subclass determines WHAT to inline, which is the much more interesting
// component.
//
//===----------------------------------------------------------------------===//
#ifndef INLINER_H
#define INLINER_H
#define DEBUG_TYPE "inline"
#include "llvm/CallGraphSCCPass.h"
#include <set>
namespace llvm {
class CallSite;
/// Inliner - This class contains all of the helper code which is used to
/// perform the inlining operations that does not depend on the policy.
///
struct Inliner : public CallGraphSCCPass {
Inliner();
// Main run interface method, this implements the interface required by the
// Pass class.
virtual bool runOnSCC(const std::vector<CallGraphNode *> &SCC);
/// This method returns the value specified by the -inline-threshold value,
/// specified on the command line. This is typically not directly needed.
///
unsigned getInlineThreshold() const { return InlineThreshold; }
/// getInlineCost - This method must be implemented by the subclass to
/// determine the cost of inlining the specified call site. If the cost
/// returned is greater than the current inline threshold, the call site is
/// not inlined.
///
virtual int getInlineCost(CallSite CS) = 0;
/// getRecursiveInlineCost - This method can be implemented by subclasses if
/// it wants to treat calls to functions within the current SCC specially. If
/// this method is not overloaded, it just chains to getInlineCost().
///
virtual int getRecursiveInlineCost(CallSite CS);
private:
// InlineThreshold - Cache the value here for easy access.
unsigned InlineThreshold;
};
} // End llvm namespace
#endif