00001
00002
00003
00004
00005
00006
00007
00008 #ifndef lestes__backend_v2__workers__bb_finder_g_hh__included
00009 #define lestes__backend_v2__workers__bb_finder_g_hh__included
00010
00011 #include <lestes/std/list.hh>
00012 #include <lestes/backend_v2/common.hh>
00013 #include <lestes/backend_v2/workers/worker_base.g.hh>
00014
00015 #include <lestes/std/objectize_macros.hh>
00016 package(lestes);
00017 package(backend_v2);
00018 package(structs);
00019 class func_data;
00020 end_package(structs);
00021 end_package(backend_v2);
00022 end_package(lestes);
00023
00024 package(lestes);
00025 package(backend_v2);
00026 package(intercode);
00027 class ge_pi;
00028 end_package(intercode);
00029 end_package(backend_v2);
00030 end_package(lestes);
00031
00032 package(lestes);
00033 package(backend_v2);
00034 package(intercode);
00035 class ge_sp;
00036 end_package(intercode);
00037 end_package(backend_v2);
00038 end_package(lestes);
00039
00040 package(lestes);
00041 package(backend_v2);
00042 package(workers);
00043
00044
00045 class bb_finder;
00046 class basic_block;
00047
00048
00049
00050 class bb_finder : public worker_base {
00051 public:
00052 void process();
00053
00054 ptr< ::lestes::backend_v2::structs::func_data > get_result();
00055
00056 bool is_instruction_safe(ptr< ::lestes::backend_v2::intercode::ge_pi > ge);
00057
00058 ptr< basic_block > join_blocks(ptr< basic_block > bb1, ptr< basic_block > bb2);
00059
00060
00061
00062 static ptr< bb_finder > create (
00063 ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data);
00064
00065
00066
00067
00068 virtual ptr<reflection_list> reflection_get() const;
00069
00070 virtual ptr<field_list_list> field_values_get() const;
00071
00072 protected:
00073
00074 bb_finder (
00075 ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data);
00076
00077
00078 virtual void gc_mark();
00079
00080 private:
00081 static ptr<reflection_list> reflection;
00082
00083 };
00084
00085
00086
00087
00088
00089
00090 class basic_block : public ::lestes::std::object {
00091 public:
00092
00093 ptr< ::lestes::backend_v2::intercode::ge_sp > fsp_get() const;
00094
00095
00096 void fsp_set(const ptr< ::lestes::backend_v2::intercode::ge_sp > &);
00097
00098
00099 ptr< ::lestes::backend_v2::intercode::ge_sp > lsp_get() const;
00100
00101
00102 void lsp_set(const ptr< ::lestes::backend_v2::intercode::ge_sp > &);
00103
00104
00105 ptr< ::lestes::std::vector< srp< ::lestes::backend_v2::intercode::ge_pi > > > instructions_get() const;
00106
00107
00108 void instructions_set(const ptr< ::lestes::std::vector< srp< ::lestes::backend_v2::intercode::ge_pi > > > & );
00109
00110
00111
00112 static ptr< basic_block > create (
00113 ptr< ::lestes::backend_v2::intercode::ge_sp > a__basic_block__fsp,
00114 ptr< ::lestes::backend_v2::intercode::ge_sp > a__basic_block__lsp,
00115 ptr< ::lestes::std::vector< srp< ::lestes::backend_v2::intercode::ge_pi > > > a__basic_block__instructions);
00116
00117
00118 static ptr< basic_block > create (
00119 );
00120
00121
00122
00123
00124 virtual ptr<reflection_list> reflection_get() const;
00125
00126 virtual ptr<field_list_list> field_values_get() const;
00127
00128 protected:
00129
00130 basic_block (
00131 ptr< ::lestes::backend_v2::intercode::ge_sp > a__basic_block__fsp,
00132 ptr< ::lestes::backend_v2::intercode::ge_sp > a__basic_block__lsp,
00133 ptr< ::lestes::std::vector< srp< ::lestes::backend_v2::intercode::ge_pi > > > a__basic_block__instructions);
00134
00135
00136 virtual void gc_mark();
00137
00138 private:
00139
00140 srp< ::lestes::backend_v2::intercode::ge_sp > fsp;
00141
00142 srp< ::lestes::backend_v2::intercode::ge_sp > lsp;
00143
00144 srp< ::lestes::std::vector< srp< ::lestes::backend_v2::intercode::ge_pi > > > instructions;
00145 static ptr<reflection_list> reflection;
00146
00147 };
00148
00149
00150 end_package(workers);
00151 end_package(backend_v2);
00152 end_package(lestes);
00153
00154 #endif // lestes__backend_v2__workers__bb_finder_g_hh__included