summaryrefslogtreecommitdiff
path: root/lib/Transforms/IPO/Inliner.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-01-30 23:28:39 +0000
committerChris Lattner <sabre@nondot.org>2007-01-30 23:28:39 +0000
commitff2dad312883e5da91fb9f4e3619b7d095867f3b (patch)
treea4283551b12f8a97874aeea59ed0345b3dc91ece /lib/Transforms/IPO/Inliner.cpp
parent1dfdf8255e803d6376f5fe94a113f892e796ae6c (diff)
downloadllvm-ff2dad312883e5da91fb9f4e3619b7d095867f3b.tar.gz
llvm-ff2dad312883e5da91fb9f4e3619b7d095867f3b.tar.bz2
llvm-ff2dad312883e5da91fb9f4e3619b7d095867f3b.tar.xz
the inliner pass now passes targetdata down through the inliner api's
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33677 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/IPO/Inliner.cpp')
-rw-r--r--lib/Transforms/IPO/Inliner.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/lib/Transforms/IPO/Inliner.cpp b/lib/Transforms/IPO/Inliner.cpp
index b7ebe7781b..5990b65837 100644
--- a/lib/Transforms/IPO/Inliner.cpp
+++ b/lib/Transforms/IPO/Inliner.cpp
@@ -19,6 +19,7 @@
#include "llvm/Instructions.h"
#include "llvm/Analysis/CallGraph.h"
#include "llvm/Support/CallSite.h"
+#include "llvm/Target/TargetData.h"
#include "llvm/Transforms/Utils/Cloning.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
@@ -37,12 +38,21 @@ namespace {
Inliner::Inliner() : InlineThreshold(InlineLimit) {}
+/// getAnalysisUsage - For this class, we declare that we require and preserve
+/// the call graph. If the derived class implements this method, it should
+/// always explicitly call the implementation here.
+void Inliner::getAnalysisUsage(AnalysisUsage &Info) const {
+ Info.addRequired<TargetData>();
+ CallGraphSCCPass::getAnalysisUsage(Info);
+}
+
// InlineCallIfPossible - If it is possible to inline the specified call site,
// do so and update the CallGraph for this operation.
static bool InlineCallIfPossible(CallSite CS, CallGraph &CG,
- const std::set<Function*> &SCCFunctions) {
+ const std::set<Function*> &SCCFunctions,
+ const TargetData &TD) {
Function *Callee = CS.getCalledFunction();
- if (!InlineFunction(CS, &CG)) return false;
+ if (!InlineFunction(CS, &CG, &TD)) return false;
// If we inlined the last possible call site to the function, delete the
// function body now.
@@ -134,7 +144,8 @@ bool Inliner::runOnSCC(const std::vector<CallGraphNode*> &SCC) {
<< ", Call: " << *CS.getInstruction();
// Attempt to inline the function...
- if (InlineCallIfPossible(CS, CG, SCCFunctions)) {
+ if (InlineCallIfPossible(CS, CG, SCCFunctions,
+ getAnalysis<TargetData>())) {
// Remove this call site from the list. If possible, use
// swap/pop_back for efficiency, but do not use it if doing so would
// move a call site to a function in this SCC before the