3 #include <boost/unordered_map.hpp>
4 #include <ProcessAstTree.h>
5 #include <AstInterface.h>
6 #include <StmtInfoCollect.h>
10 :
public ProcessAstTreeBase,
public AliasAnalysisInterface
21 void operator()( AstInterface& fa,
const AstNodePtr& program);
22 bool may_alias(AstInterface& fa,
const AstNodePtr& r1,
const AstNodePtr& r2);
26 virtual bool may_alias(
const std::string& x,
const std::string& y) = 0;
27 virtual Stmt x_eq_y(
const std::string& x,
const std::string& y) = 0;
28 virtual Stmt x_eq_addr_y(
const std::string& x,
const std::string& y) = 0;
30 const std::string& field,
31 const std::string& y) = 0;
33 const std::string& field,
34 const std::string& y) = 0;
36 const std::list<std::string>& field,
37 const std::string& y) = 0;
39 const std::list<std::string>& field,
40 const std::string& y) = 0;
42 virtual Stmt x_eq_op_y(
OpType op,
const std::string& x,
const std::list<std::string>& y) =0;
43 virtual Stmt funcdef_x(
const std::string& x,
const std::list<std::string>& params,
44 const std::list<std::string>& ouput) = 0;
45 virtual Stmt funccall_x (
const std::string& x,
const std::list<std::string>& args,
46 const std::list<std::string>& result)=0;
56 typedef boost::unordered_map<void*, VarRef, PtrAnal::hash>
NameMap;
66 void ProcessAssign( AstInterface& fa,
const AstNodePtr& mod,
const AstNodePtr& rhs,
bool readlhs=0);
67 void ProcessExpression( AstInterface& fa,
const std::string& modname,
const AstNodePtr& rhs);
68 void ProcessMod(AstInterface& fa,
const std::string& readname,
69 std::list<std::string>& fields,
const AstNodePtr& mod);
73 std::string
Get_VarName(AstInterface& fa,
const AstNodePtr& rhs);
75 virtual bool ProcessTree( AstInterface &_fa,
const AstNodePtr& s,
76 AstInterface::TraversalVisitType t);
78 {
return InterProcVariableUniqueRepr::get_unique_name(fname+
"-return",i); }
80 {
return InterProcVariableUniqueRepr::get_unique_name(fname+
"-par",i); }