Converted SimpleStructMutation to take TargetData as a required pass.
authorChris Lattner <sabre@nondot.org>
Thu, 26 Sep 2002 00:17:21 +0000 (00:17 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 26 Sep 2002 00:17:21 +0000 (00:17 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3932 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/IPO/SimpleStructMutation.cpp

index 022d6d822c5294b477347f92c5463e94aa9ae45a..4e21dd69a0d4838376bc42ee511a4e456a9b91b5 100644 (file)
@@ -12,7 +12,6 @@
 #include "llvm/Target/TargetData.h"
 #include "llvm/DerivedTypes.h"
 #include <algorithm>
-#include <iostream>
 using std::vector;
 using std::set;
 using std::pair;
@@ -20,8 +19,6 @@ using std::pair;
 namespace {
   struct SimpleStructMutation : public MutateStructTypes {
     enum Transform { SwapElements, SortElements };
-    const TargetData &TD;
-    SimpleStructMutation(const TargetData &td) : TD(td) {}
     
     virtual bool run(Module &M)  = 0;
 
@@ -29,6 +26,7 @@ namespace {
     // FindUsedTypes and FindUnsafePointerTypes analysis passes...
     //
     virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+      AU.addRequired<TargetData>();
       AU.addRequired<FindUsedTypes>();
       AU.addRequired<FindUnsafePointerTypes>();
       MutateStructTypes::getAnalysisUsage(AU);
@@ -39,8 +37,6 @@ namespace {
   };
 
   struct SwapStructElements : public SimpleStructMutation {
-    SwapStructElements(const TargetData &TD) : SimpleStructMutation(TD) {}
-
     virtual bool run(Module &M) {
       setTransforms(getTransforms(M, SwapElements));
       bool Changed = MutateStructTypes::run(M);
@@ -50,8 +46,6 @@ namespace {
   };
 
   struct SortStructElements : public SimpleStructMutation {
-    SortStructElements(const TargetData &TD) : SimpleStructMutation(TD) {}
-
     virtual bool run(Module &M) {
       setTransforms(getTransforms(M, SortElements));
       bool Changed = MutateStructTypes::run(M);
@@ -59,8 +53,15 @@ namespace {
       return Changed;
     }
   };
+
+  RegisterOpt<SwapStructElements> X("swapstructs",
+                                    "Swap structure types around");
+  RegisterOpt<SortStructElements> Y("sortstructs",
+                                    "Sort structure elements by size");
 }  // end anonymous namespace
 
+Pass *createSwapElementsPass() { return new SwapStructElements(); }
+Pass *createSortElementsPass() { return new SortStructElements(); }
 
 
 // PruneTypes - Given a type Ty, make sure that neither it, or one of its
@@ -168,6 +169,7 @@ SimpleStructMutation::TransformsType
   // Build up a set of structure types that we are going to modify, and
   // information describing how to modify them.
   std::map<const StructType*, vector<int> > Transforms;
+  TargetData &TD = getAnalysis<TargetData>();
 
   for (set<const StructType*>::iterator I = TypesToModify.begin(),
          E = TypesToModify.end(); I != E; ++I) {
@@ -179,20 +181,3 @@ SimpleStructMutation::TransformsType
   
   return Transforms;
 }
-
-
-Pass *createSwapElementsPass(const TargetData &TD) {
-  return new SwapStructElements(TD);
-}
-Pass *createSortElementsPass(const TargetData &TD) {
-  return new SortStructElements(TD);
-}
-
-namespace {
-  RegisterOpt<SwapStructElements> X("swapstructs",
-                                    "Swap structure types around",
-                                    createSwapElementsPass);
-  RegisterOpt<SortStructElements> Y("sortstructs",
-                                    "Sort structure elements by size",
-                                    createSortElementsPass);
-}