00001
00002
00003
00004
00005
00006
00007
00008 #ifndef lestes__backend_v2__workers__liveness_analysis_g_hh__included
00009 #define lestes__backend_v2__workers__liveness_analysis_g_hh__included
00010
00011 #include <lestes/std/set.hh>
00012 #include <lestes/std/map.hh>
00013 #include <lestes/backend_v2/common.hh>
00014
00015 #include <lestes/std/objectize_macros.hh>
00016 package(lestes);
00017 package(std);
00018 class object;
00019 end_package(std);
00020 end_package(lestes);
00021
00022 package(lestes);
00023 package(backend_v2);
00024 package(structs);
00025 class func_data;
00026 end_package(structs);
00027 end_package(backend_v2);
00028 end_package(lestes);
00029
00030 package(lestes);
00031 package(backend_v2);
00032 package(intercode);
00033 class ge_operand;
00034 end_package(intercode);
00035 end_package(backend_v2);
00036 end_package(lestes);
00037
00038 package(lestes);
00039 package(backend_v2);
00040 package(intercode);
00041 class ge_operand_reg;
00042 end_package(intercode);
00043 end_package(backend_v2);
00044 end_package(lestes);
00045
00046 package(lestes);
00047 package(backend_v2);
00048 package(intercode);
00049 class ge_pi;
00050 end_package(intercode);
00051 end_package(backend_v2);
00052 end_package(lestes);
00053
00054 package(lestes);
00055 package(backend_v2);
00056 package(workers);
00057
00058
00059 class liveness_analysis;
00060 class liveness_range;
00061
00062
00063
00064 class liveness_analysis : public ::lestes::std::object {
00065 public:
00066
00067 ptr< ::lestes::backend_v2::structs::func_data > data_get() const;
00068
00069
00070 void data_set(const ptr< ::lestes::backend_v2::structs::func_data > &);
00071
00072
00073 ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_pi >, srp< ::lestes::std::pair< srp<set< srp< ::lestes::backend_v2::intercode::ge_operand_reg > > >, srp<set< srp< ::lestes::backend_v2::intercode::ge_operand_reg > > > > > > > inout_get() const;
00074
00075
00076 void inout_set(const ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_pi >, srp< ::lestes::std::pair< srp<set< srp< ::lestes::backend_v2::intercode::ge_operand_reg > > >, srp<set< srp< ::lestes::backend_v2::intercode::ge_operand_reg > > > > > > > & );
00077
00078 void process();
00079
00080 ptr<vector<srp<liveness_range> > > get_result();
00081
00082 ptr< ::lestes::backend_v2::intercode::ge_operand_reg > extract_reg_operand(ptr< ::lestes::backend_v2::intercode::ge_operand > op);
00083
00084
00085
00086 static ptr< liveness_analysis > create (
00087 ptr< ::lestes::backend_v2::structs::func_data > a__liveness_analysis__data,
00088 ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_pi >, srp< ::lestes::std::pair< srp<set< srp< ::lestes::backend_v2::intercode::ge_operand_reg > > >, srp<set< srp< ::lestes::backend_v2::intercode::ge_operand_reg > > > > > > > a__liveness_analysis__inout);
00089
00090
00091 static ptr< liveness_analysis > create (
00092 ptr< ::lestes::backend_v2::structs::func_data > a__liveness_analysis__data);
00093
00094
00095
00096
00097 virtual ptr<reflection_list> reflection_get() const;
00098
00099 virtual ptr<field_list_list> field_values_get() const;
00100
00101 protected:
00102
00103 liveness_analysis (
00104 ptr< ::lestes::backend_v2::structs::func_data > a__liveness_analysis__data,
00105 ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_pi >, srp< ::lestes::std::pair< srp<set< srp< ::lestes::backend_v2::intercode::ge_operand_reg > > >, srp<set< srp< ::lestes::backend_v2::intercode::ge_operand_reg > > > > > > > a__liveness_analysis__inout);
00106
00107
00108 virtual void gc_mark();
00109
00110 private:
00111 srp< ::lestes::backend_v2::structs::func_data > data;
00112
00113 srp< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_pi >, srp< ::lestes::std::pair< srp<set< srp< ::lestes::backend_v2::intercode::ge_operand_reg > > >, srp<set< srp< ::lestes::backend_v2::intercode::ge_operand_reg > > > > > > > inout;
00114 static ptr<reflection_list> reflection;
00115
00116 };
00117
00118
00119
00120 class liveness_range : public ::lestes::std::object {
00121 public:
00122
00123 ptr< ::lestes::backend_v2::intercode::ge_operand_reg > operand_get() const;
00124
00125
00126 void operand_set(const ptr< ::lestes::backend_v2::intercode::ge_operand_reg > &);
00127
00128
00129 ptr< ::lestes::std::vector< srp< ::lestes::backend_v2::intercode::ge_pi > > > instructions_get() const;
00130
00131
00132 void instructions_set(const ptr< ::lestes::std::vector< srp< ::lestes::backend_v2::intercode::ge_pi > > > & );
00133
00134
00135 ulint start_get() const;
00136
00137
00138 void start_set(ulint);
00139
00140
00141 ulint end_get() const;
00142
00143
00144 void end_set(ulint);
00145
00146
00147
00148 static ptr< liveness_range > create (
00149 ptr< ::lestes::backend_v2::intercode::ge_operand_reg > a__liveness_range__operand,
00150 ptr< ::lestes::std::vector< srp< ::lestes::backend_v2::intercode::ge_pi > > > a__liveness_range__instructions,
00151 ulint a__liveness_range__start,
00152 ulint a__liveness_range__end);
00153
00154
00155 static ptr< liveness_range > create (
00156 ptr< ::lestes::backend_v2::intercode::ge_operand_reg > a__liveness_range__operand,
00157 ulint a__liveness_range__start,
00158 ulint a__liveness_range__end);
00159
00160
00161
00162
00163 virtual ptr<reflection_list> reflection_get() const;
00164
00165 virtual ptr<field_list_list> field_values_get() const;
00166
00167 protected:
00168
00169 liveness_range (
00170 ptr< ::lestes::backend_v2::intercode::ge_operand_reg > a__liveness_range__operand,
00171 ptr< ::lestes::std::vector< srp< ::lestes::backend_v2::intercode::ge_pi > > > a__liveness_range__instructions,
00172 ulint a__liveness_range__start,
00173 ulint a__liveness_range__end);
00174
00175
00176 virtual void gc_mark();
00177
00178 private:
00179
00180 srp< ::lestes::backend_v2::intercode::ge_operand_reg > operand;
00181
00182 srp< ::lestes::std::vector< srp< ::lestes::backend_v2::intercode::ge_pi > > > instructions;
00183
00184 ulint start;
00185
00186 ulint end;
00187 static ptr<reflection_list> reflection;
00188
00189 };
00190
00191
00192 end_package(workers);
00193 end_package(backend_v2);
00194 end_package(lestes);
00195
00196 #endif // lestes__backend_v2__workers__liveness_analysis_g_hh__included