JumpFunction.hGo to the documentation of this file.00001
00002 #ifndef _JUMP_FUNCTION_H
00003 #define _JUMP_FUNCTION_H
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "../Listable.h"
00022 #include "../Collection/RefList.h"
00023 #include "../Collection/Map.h"
00024 #include "../Collection/RefSet.h"
00025 #include "../Symbol/Symbol.h"
00026 #include "../Expression/Expression.h"
00027
00028 class AliasSets;
00029 class IPCPConstants;
00030
00031 class ReturnJumpFunction : public Listable {
00032 public:
00033 ReturnJumpFunction(const RefList<Symbol> ¶m_list,
00034 const RefSet<Symbol> &used_global_vars,
00035 Map<Symbol, Expression> *old_const_mods,
00036 Map<Symbol, Expression> *new_consts);
00037 ReturnJumpFunction(const ReturnJumpFunction &other);
00038 virtual ~ReturnJumpFunction();
00039
00040 Map<Symbol, Expression> *const_mods(const List<Expression> ¶m_values,
00041 AliasSets &alias_sets) const;
00042 Map<Symbol, Expression> *const_mods(const List<Expression> ¶m_values) const;
00043
00044
00045
00046
00047
00048
00049
00050
00051 Map<Symbol, Expression> *new_consts(const List<Expression> ¶m_values,
00052 AliasSets &alias_sets) const;
00053 Map<Symbol, Expression> *new_consts(const List<Expression> ¶m_values) const;
00054
00055
00056
00057
00058
00059 virtual Listable *listable_clone() const;
00060 virtual void print(ostream &o) const;
00061 virtual int structures_OK() const;
00062
00063
00064 protected:
00065 RefList<Symbol> _param_list;
00066 RefSet<Symbol> _used_global_vars;
00067
00068 private:
00069 Map<Symbol, Expression> *_old_const_mods;
00070
00071
00072 Map<Symbol, Expression> *_new_consts;
00073
00074
00075
00076 RefSet<Symbol> *_modified_aliases(AliasSets &alias_sets) const;
00077 void _eliminate_modified_aliases(Map<Symbol, Expression> &var_mods,
00078 AliasSets &alias_sets) const;
00079 void _rename_formals(Map<Symbol, Expression> &var_mods,
00080 const List<Expression> ¶m_values) const;
00081 Map<Symbol, Expression> *_param_map(const List<Expression> ¶m_values) const;
00082 };
00083
00084 class JumpFunction : public ReturnJumpFunction {
00085 public:
00086 JumpFunction(const RefList<Symbol> ¶m_list,
00087 const RefSet<Symbol> &used_global_vars,
00088 Map<Symbol, Expression> *old_const_mods,
00089 Map<Symbol, Expression> *new_consts);
00090 JumpFunction(const JumpFunction &other);
00091 virtual ~JumpFunction();
00092
00093 IPCPConstants *constants(IPCPConstants &consts,
00094 const List<Expression> ¶m_values) const;
00095
00096
00097
00098
00099 virtual Listable *listable_clone() const;
00100
00101 private:
00102 List<Expression> *_const_param_values(const Map<Symbol,Expression> &const_map) const;
00103 };
00104
00105
00106
00107
00108
00109
00110
00111
00112 RefSet<Symbol> *modified_vars(const Map<Symbol, Expression> &var_mods);
00113
00114
00115
00116
00117
00118 Expression *subst_vars_in_expr(Expression *expr,
00119 const Map<Symbol, Expression> &subst_map);
00120
00121
00122
00123
00124 void subst_vars_in_map(Map<Symbol, Expression> &var_mods,
00125 const Map<Symbol, Expression> &subst_map);
00126
00127 #endif
|