Pull predecessor and successor iterators out of the CFG*.h files, and plop them into
[oota-llvm.git] / lib / Target / SparcV9 / LiveVar / BBLiveVar.h
1 /* Title:   BBLiveVar.h                  -*- C++ -*-
2    Author:  Ruchira Sasanka
3    Date:    Jun 30, 01
4    Purpose: This is a wrapper class for BasicBlock which is used by live 
5             variable anaysis.
6 */
7
8 #ifndef LIVE_VAR_BB_H
9 #define LIVE_VAR_BB_H
10
11 #include "LiveVarSet.h"
12 #include "LiveVarMap.h"
13
14 #include "llvm/BasicBlock.h"
15 #include "llvm/Instruction.h"
16 #include "llvm/Type.h"
17 #include "llvm/iOther.h"
18
19
20 class BBLiveVar 
21 {
22   const BasicBlock* BaseBB;     // pointer to BasicBlock
23   unsigned int POId;            // Post-Order ID
24
25   LiveVarSet DefSet;            // Def set for LV analysis
26   LiveVarSet InSet, OutSet;     // In & Out for LV analysis
27   bool InSetChanged, OutSetChanged;   // set if the InSet/OutSet is modified
28
29                                 // map that contains phi args->BB they came
30                                 // set by calcDefUseSets & used by setPropagate
31   hash_map<const Value *, const BasicBlock *, hashFuncValue> PhiArgMap;  
32
33   // method to propogate an InSet to OutSet of a predecessor
34   bool setPropagate( LiveVarSet *const OutSetOfPred, 
35                      const LiveVarSet *const InSetOfThisBB,
36                      const BasicBlock *const PredBB);
37
38  public:
39
40   BBLiveVar( const BasicBlock* baseBB, unsigned int POId);
41
42   inline bool isInSetChanged() const { return InSetChanged; }    
43   inline bool isOutSetChanged() const { return OutSetChanged; }
44
45   inline unsigned int getPOId() const { return POId; }
46
47   void calcDefUseSets() ;         // calculates the Def & Use sets for this BB
48   bool  applyTransferFunc();      // calcultes the In in terms of Out 
49
50   // calculates Out set using In sets of the predecessors
51   bool applyFlowFunc(BBToBBLiveVarMapType LVMap);    
52
53   inline const LiveVarSet* getOutSet()  const { return &OutSet; }
54   inline const LiveVarSet*  getInSet() const { return &InSet; }
55
56   void printAllSets() const;      // for printing Def/In/Out sets
57   void printInOutSets() const;    // for printing In/Out sets
58
59   ~BBLiveVar() { }                // nothing to do since only composite objects
60
61
62
63 };
64
65
66
67
68
69
70
71 #endif
72