ROSE  0.9.6a
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
reachingDef.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <boost/shared_ptr.hpp>
4 #include <map>
5 #include <set>
6 #include <rose.h>
7 #include "dataflowCfgFilter.h"
8 
10 {
11 public:
12 
13  enum Type
14  {
17 
20 
23  EXPANDED_DEF
24  };
25 
26  typedef boost::shared_ptr<ReachingDef> ReachingDefPtr;
27 
28  typedef FilteredCFGEdge<ssa_private::DataflowCfgFilter> FilteredCfgEdge;
29 
30 private:
33 
36  std::map<ReachingDefPtr, std::set<FilteredCfgEdge> > parentDefs;
37 
41 
44 
45 public:
46 
47  //---------CONSTRUCTORS---------
48 
50  ReachingDef(SgNode* defNode, Type type);
51 
52  //---------ACCESSORS---------
53 
55  bool isPhiFunction() const;
56 
59  const std::map<ReachingDefPtr, std::set<FilteredCfgEdge> >& getJoinedDefs() const;
60 
63  SgNode* getDefinitionNode() const;
64 
66  std::set<SgNode*> getActualDefinitions() const;
67 
70  int getRenamingNumber() const;
71 
74  bool isOriginalDef() const
75  {
76  return defType == ORIGINAL_DEF;
77  }
78 
79  bool operator==(const ReachingDef& other) const;
80 
81  //---------MODIFIERS---------
82 
84  void setDefinitionNode(SgNode* defNode);
85 
87  void addJoinedDef(ReachingDefPtr newDef, FilteredCfgEdge edge);
88 
90  void setRenamingNumber(int n);
91 };