defsAndUsesUnfilteredCfg.h

Go to the documentation of this file.
00001 #pragma once
00002 #include <rose.h>
00003 #include <uniqueNameTraversal.h>
00004 #include <map>
00005 #include <virtualCFG.h>
00006 
00007 namespace ssa_unfiltered_cfg
00008 {
00009 
00011     class ChildUses
00012     {
00013     private:
00015         SgVarRefExp* currentVar;
00016 
00018         std::set<SgVarRefExp*> uses;
00019 
00020     public:
00021 
00023         ChildUses() : currentVar(NULL) { }
00024 
00025         ChildUses(SgVarRefExp* useNode, SgVarRefExp* var)
00026         {
00027             uses.insert(useNode);
00028             currentVar = var;
00029         }
00030 
00035         ChildUses(const std::set<SgVarRefExp*>& useTree, SgVarRefExp* var = NULL)
00036         {
00037             uses = useTree;
00038             currentVar = var;
00039         }
00040 
00045         std::set<SgVarRefExp*>& getUses()
00046         {
00047             return uses;
00048         }
00049 
00054         void setUses(const std::set<SgVarRefExp*>& newUses)
00055         {
00056             uses = newUses;
00057         }
00058 
00059         SgVarRefExp* getCurrentVar() const
00060         {
00061             return currentVar;
00062         }
00063     };
00064 
00068     class DefsAndUsesTraversal : private AstBottomUpProcessing<ChildUses>
00069     {
00070     public:
00071 
00072         typedef std::map<CFGNode, std::set<ssa_private::UniqueNameTraversal::VarName> > CFGNodeToVarsMap;
00073 
00076         static void CollectDefsAndUses(SgNode* traversalRoot, CFGNodeToVarsMap& defs,
00077                 std::map<SgNode*, std::set<SgVarRefExp*> >& uses);
00078 
00079     private:
00081         CFGNodeToVarsMap cfgNodeToDefinedVars;
00082 
00084         std::map<SgNode*, std::set<SgVarRefExp*> > astNodeToUsedVars;
00085 
00086     public:
00087 
00096         virtual ChildUses evaluateSynthesizedAttribute(SgNode* node, SynthesizedAttributesList attrs);
00097 
00098     private:
00099 
00101         void addUsesToNode(SgNode* node, std::set<SgVarRefExp*> uses);
00102 
00104         void addDefForVarAtNode(SgVarRefExp* var, const CFGNode& node);
00105 
00106     };
00107 
00108 } //namespace ssa_unfiltered_cfg

Generated on Sat May 19 00:53:06 2012 for ROSE by  doxygen 1.4.7