Replaced uses of deprecated `MachineFunction::get(BasicBlock *BB)'.
[oota-llvm.git] / lib / Target / SparcV9 / LiveVar / BBLiveVar.cpp
index 7d735b79e40b653b223b53ac9be64d158b638ad7..4b07ebc6323bb4fb346e317b91270fba1ba3243e 100644 (file)
@@ -7,9 +7,9 @@
 #include "BBLiveVar.h"
 #include "llvm/Analysis/LiveVar/FunctionLiveVarInfo.h"
 #include "llvm/CodeGen/MachineInstr.h"
+#include "llvm/CodeGen/MachineBasicBlock.h"
 #include "llvm/Support/CFG.h"
 #include "Support/SetOperations.h"
-#include <iostream>
 
 /// BROKEN: Should not include sparc stuff directly into here
 #include "../../Target/Sparc/SparcInternals.h"  //  Only for PHI defn
@@ -18,24 +18,25 @@ using std::cerr;
 
 static AnnotationID AID(AnnotationManager::getID("Analysis::BBLiveVar"));
 
-BBLiveVar *BBLiveVar::CreateOnBB(const BasicBlock *BB, unsigned POID) {
-  BBLiveVar *Result = new BBLiveVar(BB, POID);
-  BB->addAnnotation(Result);
+BBLiveVar *BBLiveVar::CreateOnBB(const BasicBlock &BB, MachineBasicBlock &MBB,
+                                 unsigned POID) {
+  BBLiveVar *Result = new BBLiveVar(BB, MBB, POID);
+  BB.addAnnotation(Result);
   return Result;
 }
 
-BBLiveVar *BBLiveVar::GetFromBB(const BasicBlock *BB) {
-  return (BBLiveVar*)BB->getAnnotation(AID);
+BBLiveVar *BBLiveVar::GetFromBB(const BasicBlock &BB) {
+  return (BBLiveVar*)BB.getAnnotation(AID);
 }
 
-void BBLiveVar::RemoveFromBB(const BasicBlock *BB) {
-  bool Deleted = BB->deleteAnnotation(AID);
+void BBLiveVar::RemoveFromBB(const BasicBlock &BB) {
+  bool Deleted = BB.deleteAnnotation(AID);
   assert(Deleted && "BBLiveVar annotation did not exist!");
 }
 
 
-BBLiveVar::BBLiveVar(const BasicBlock *bb, unsigned id)
-  : Annotation(AID), BB(bb), POID(id) {
+BBLiveVar::BBLiveVar(const BasicBlock &bb, MachineBasicBlock &mbb, unsigned id)
+  : Annotation(AID), BB(bb), MBB(mbb), POID(id) {
   InSetChanged = OutSetChanged = false;
 
   calcDefUseSets();
@@ -49,15 +50,12 @@ BBLiveVar::BBLiveVar(const BasicBlock *bb, unsigned id)
 //-----------------------------------------------------------------------------
 
 void BBLiveVar::calcDefUseSets() {
-  // get the iterator for machine instructions
-  const MachineCodeForBasicBlock &MIVec = BB->getMachineInstrVec();
-
   // iterate over all the machine instructions in BB
-  for (MachineCodeForBasicBlock::const_reverse_iterator MII = MIVec.rbegin(),
-         MIE = MIVec.rend(); MII != MIE; ++MII) {
+  for (MachineBasicBlock::const_reverse_iterator MII = MBB.rbegin(),
+         MIE = MBB.rend(); MII != MIE; ++MII) {
     const MachineInstr *MI = *MII;
     
-    if (DEBUG_LV >= LV_DEBUG_Verbose) {                            // debug msg
+    if (DEBUG_LV >= LV_DEBUG_Verbose) {
       cerr << " *Iterating over machine instr ";
       MI->dump();
       cerr << "\n";
@@ -82,13 +80,13 @@ void BBLiveVar::calcDefUseSets() {
       if (isa<BasicBlock>(Op))
        continue;             // don't process labels
 
-      if (!OpI.isDef()) {   // add to Uses only if this operand is a use
-
+      if (!OpI.isDef() || OpI.isDefAndUse()) {
+                                // add to Uses only if this operand is a use
         //
         // *** WARNING: The following code for handling dummy PHI machine
         //     instructions is untested.  The previous code was broken and I
-        //     fixed it, but it turned out to be unused as long as Phi elimination
-        //     is performed during instruction selection.
+        //     fixed it, but it turned out to be unused as long as Phi
+        //     elimination is performed during instruction selection.
         // 
         // Put Phi operands in UseSet for the incoming edge, not node.
         // They must not "hide" later defs, and must be handled specially
@@ -101,7 +99,7 @@ void BBLiveVar::calcDefUseSets() {
          
          if (DEBUG_LV >= LV_DEBUG_Verbose)
            cerr << "   - phi operand " << RAV(ArgVal) << " came from BB "
-                 << RAV(PredBB) << endl;
+                 << RAV(PredBB) << "\n";
        } // if( IsPhi )
         else {
           // It is not a Phi use: add to regular use set and remove later defs.
@@ -118,7 +116,7 @@ void BBLiveVar::calcDefUseSets() {
       if (Op->getType() == Type::LabelTy)             // don't process labels
        continue;
 
-      if (!MI->implicitRefIsDefined(i))
+      if (!MI->implicitRefIsDefined(i) || MI->implicitRefIsDefinedAndUsed(i) )
        addUse(Op);
     }
   } // for all machine instructions
@@ -129,7 +127,7 @@ void BBLiveVar::calcDefUseSets() {
 //-----------------------------------------------------------------------------
 // To add an operand which is a def
 //-----------------------------------------------------------------------------
-void  BBLiveVar::addDef(const Value *Op) {
+void BBLiveVar::addDef(const Value *Op) {
   DefSet.insert(Op);     // operand is a def - so add to def set
   InSet.erase(Op);       // this definition kills any later uses
   InSetChanged = true; 
@@ -211,9 +209,9 @@ bool BBLiveVar::applyFlowFunc() {
   //
   bool needAnotherIt = false;  
 
-  for (pred_const_iterator PI = pred_begin(BB), PE = pred_end(BB);
+  for (pred_const_iterator PI = pred_begin(&BB), PE = pred_end(&BB);
        PI != PE ; ++PI) {
-    BBLiveVar *PredLVBB = BBLiveVar::GetFromBB(*PI);
+    BBLiveVar *PredLVBB = BBLiveVar::GetFromBB(**PI);
 
     // do set union
     if (setPropagate(&PredLVBB->OutSet, &InSet, *PI)) {