diff options
author | Chris Lattner <sabre@nondot.org> | 2007-01-30 23:28:39 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-01-30 23:28:39 +0000 |
commit | ff2dad312883e5da91fb9f4e3619b7d095867f3b (patch) | |
tree | a4283551b12f8a97874aeea59ed0345b3dc91ece /lib/Transforms/IPO/Inliner.cpp | |
parent | 1dfdf8255e803d6376f5fe94a113f892e796ae6c (diff) | |
download | llvm-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.cpp | 17 |
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 |