the inliner pass now passes targetdata down through the inliner api's
authorChris Lattner <sabre@nondot.org>
Tue, 30 Jan 2007 23:28:39 +0000 (23:28 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 30 Jan 2007 23:28:39 +0000 (23:28 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33677 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/IPO/Inliner.cpp
lib/Transforms/IPO/Inliner.h

index b7ebe7781b1f7722c732265a80428b4b8f710752..5990b65837d338622a846db3a8b5b0c68ed60743 100644 (file)
@@ -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
index c4662c1c52623d2f99ddc99e36bd8a71b571ca3a..a59f80b86d2d954ac713e2b03d93ff04c4b89c44 100644 (file)
@@ -29,6 +29,11 @@ namespace llvm {
 struct Inliner : public CallGraphSCCPass {
   Inliner();
 
+  /// 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.
+  virtual void getAnalysisUsage(AnalysisUsage &Info) const;
+
   // Main run interface method, this implements the interface required by the
   // Pass class.
   virtual bool runOnSCC(const std::vector<CallGraphNode *> &SCC);