* Remove all cfg simplification stuff for a new cfg simplify pass (todo)
[oota-llvm.git] / lib / Transforms / LevelRaise.cpp
index f336a0df468c644d94e8337e6c5f8f77c4ade1d9..cc684b5f150fa7f09d2169855a36f79dc2ac6909 100644 (file)
@@ -8,10 +8,8 @@
 
 #include "llvm/Transforms/LevelChange.h"
 #include "TransformInternals.h"
-#include "llvm/Function.h"
 #include "llvm/iOther.h"
 #include "llvm/iMemory.h"
-#include "llvm/ConstantVals.h"
 #include "llvm/Pass.h"
 #include "llvm/ConstantHandling.h"
 #include "llvm/Transforms/Scalar/DCE.h"
@@ -20,8 +18,6 @@
 #include "Support/STLExtras.h"
 #include <algorithm>
 
-#include "llvm/Assembly/Writer.h"
-
 //#define DEBUG_PEEPHOLE_INSTS 1
 
 #ifdef DEBUG_PEEPHOLE_INSTS
@@ -51,7 +47,6 @@ static inline bool isReinterpretingCast(const CastInst *CI) {
 }
 
 
-
 // Peephole optimize the following instructions:
 // %t1 = cast ? to x *
 // %t2 = add x * %SP, %t1              ;; Constant must be 2nd operand
@@ -195,26 +190,6 @@ static bool PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {
       return true;
     }
 
-    // Peephole optimize the following instructions:
-    // %tmp = cast <ty> %V to <ty2>
-    // %V   = cast <ty2> %tmp to <ty3>     ; Where ty & ty2 are same size
-    //
-    // Into: cast <ty> %V to <ty3>
-    //
-    if (SrcI)
-      if (CastInst *CSrc = dyn_cast<CastInst>(SrcI))
-        if (isReinterpretingCast(CI) + isReinterpretingCast(CSrc) < 2) {
-          // We can only do c-c elimination if, at most, one cast does a
-          // reinterpretation of the input data.
-          //
-          // If legal, make this cast refer the the original casts argument!
-          //
-          PRINT_PEEPHOLE2("cast-cast:in ", CI, CSrc);
-          CI->setOperand(0, CSrc->getOperand(0));
-          PRINT_PEEPHOLE1("cast-cast:out", CI);
-          return true;
-        }
-
     // Check to see if it's a cast of an instruction that does not depend on the
     // specific type of the operands to do it's job.
     if (!isReinterpretingCast(CI)) {
@@ -419,7 +394,7 @@ static bool PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {
 
 static bool DoRaisePass(Function *F) {
   bool Changed = false;
-  for (Method::iterator MI = F->begin(), ME = F->end(); MI != ME; ++MI) {
+  for (Function::iterator MI = F->begin(), ME = F->end(); MI != ME; ++MI) {
     BasicBlock *BB = *MI;
     BasicBlock::InstListType &BIL = BB->getInstList();
 
@@ -442,7 +417,7 @@ static bool DoRaisePass(Function *F) {
 }
 
 
-// RaisePointerReferences::doit - Raise a method representation to a higher
+// RaisePointerReferences::doit - Raise a function representation to a higher
 // level.
 //
 static bool doRPR(Function *F) {
@@ -460,7 +435,7 @@ static bool doRPR(Function *F) {
     cerr << "Looping: \n" << F;
 #endif
 
-    // Iterate over the method, refining it, until it converges on a stable
+    // Iterate over the function, refining it, until it converges on a stable
     // state
     LocalChange = false;
     while (DoRaisePass(F)) LocalChange = true;
@@ -472,8 +447,14 @@ static bool doRPR(Function *F) {
 }
 
 namespace {
-  struct RaisePointerReferences : public MethodPass {
-    virtual bool runOnMethod(Function *F) { return doRPR(F); }
+  struct RaisePointerReferences : public FunctionPass {
+    const char *getPassName() const { return "Raise Pointer References"; }
+
+    virtual bool runOnFunction(Function *F) { return doRPR(F); }
+
+    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+      AU.preservesCFG();
+    }
   };
 }