scheduler.g.hh

Go to the documentation of this file.
00001 // This file is automatically generated, do not edit.
00002 
00003 /*!
00004         \file
00005         \author jaz
00006 */
00007 
00008 #ifndef lestes__backend_v2__workers__scheduler_g_hh__included
00009 #define lestes__backend_v2__workers__scheduler_g_hh__included
00010 
00011 #include <lestes/std/list.hh>
00012 #include <lestes/std/set.hh>
00013 #include <lestes/std/map.hh>
00014 #include <lestes/backend_v2/common.hh>
00015 #include <lestes/backend_v2/workers/worker_base.g.hh>
00016 
00017 #include <lestes/std/objectize_macros.hh>
00018 package(lestes);
00019 package(backend_v2);
00020 package(structs);
00021 class func_data;
00022 end_package(structs);
00023 end_package(backend_v2);
00024 end_package(lestes);
00025 
00026 package(lestes);
00027 package(backend_v2);
00028 package(workers);
00029 class basic_block;
00030 end_package(workers);
00031 end_package(backend_v2);
00032 end_package(lestes);
00033 
00034 package(lestes);
00035 package(backend_v2);
00036 package(intercode);
00037 class pi_pi;
00038 end_package(intercode);
00039 end_package(backend_v2);
00040 end_package(lestes);
00041 
00042 package(lestes);
00043 package(backend_v2);
00044 package(intercode);
00045 class pi_sp;
00046 end_package(intercode);
00047 end_package(backend_v2);
00048 end_package(lestes);
00049 
00050 package(lestes);
00051 package(backend_v2);
00052 package(intercode);
00053 class ge_pi;
00054 end_package(intercode);
00055 end_package(backend_v2);
00056 end_package(lestes);
00057 
00058 package(lestes);
00059 package(backend_v2);
00060 package(workers);
00061 
00062 
00063 class scheduler;
00064 class schedule_item;
00065 
00066 
00067 //! Performs list scheduling on a function's body based on critical path method.
00068 class scheduler : public worker_base {
00069 public:
00070         //! The method dumb_scheduling_get returns the value of the field scheduler::dumb_scheduling.
00071         bool dumb_scheduling_get() const;
00072 
00073         //! The method dumb_scheduling_set sets the field scheduler::dumb_scheduling to the given value.
00074         void dumb_scheduling_set(bool);
00075 
00076         //! The method current_schedule_pos_get returns the value of the field scheduler::current_schedule_pos.
00077         ulint current_schedule_pos_get() const;
00078 
00079         //! The method current_schedule_pos_set sets the field scheduler::current_schedule_pos to the given value.
00080         void current_schedule_pos_set(ulint);
00081 
00082         //! The method ge2si_get returns the value of the field scheduler::ge2si.
00083         ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_pi >, srp< schedule_item > > > ge2si_get() const;
00084 
00085         //! The method ge2si_set sets the field scheduler::ge2si to the given value.
00086         void ge2si_set(const ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_pi >, srp< schedule_item > > > & );
00087 
00088         void process();
00089 
00090         ptr< ::lestes::backend_v2::structs::func_data > get_result();
00091 
00092         ptr<vector<srp< ::lestes::backend_v2::intercode::ge_pi> > > process_bb(ptr< ::lestes::backend_v2::workers::basic_block > bb);
00093 
00094         ptr<set<srp< ::lestes::backend_v2::workers::schedule_item> > > find_schedule_items(ptr< ::lestes::backend_v2::workers::basic_block > bb);
00095 
00096         void find_critical_paths(ptr<set<srp< ::lestes::backend_v2::workers::schedule_item> > > items);
00097 
00098         ptr<vector<srp< ::lestes::backend_v2::intercode::ge_pi> > > schedule_items(ptr<set<srp<schedule_item> > > items);
00099 
00100         ptr< schedule_item > create_schedule_item(ptr< ::lestes::backend_v2::intercode::ge_pi > ge);
00101 
00102         void check_waiting_set(ptr<set<srp<schedule_item> > > waiting);
00103 
00104         bool find_dependence_loop(ptr< schedule_item > start, ptr< schedule_item > curr, ulint depth);
00105 
00106         
00107         //! First generated factory method for class scheduler.
00108         static ptr< scheduler > create (
00109                 ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data,
00110                 bool a__scheduler__dumb_scheduling,
00111                 ulint a__scheduler__current_schedule_pos,
00112                 ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_pi >, srp< schedule_item > > > a__scheduler__ge2si);
00113 
00114         //! Second generated factory method for class scheduler.
00115         static ptr< scheduler > create (
00116                 ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data);
00117 
00118         
00119 
00120         //! for purposes of dumping
00121         virtual ptr<reflection_list> reflection_get() const;
00122         //! for purposes of dumping
00123         virtual ptr<field_list_list> field_values_get() const;
00124         
00125 protected:
00126         //! Generated constructor for class scheduler.
00127         scheduler (
00128                 ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data,
00129                 bool a__scheduler__dumb_scheduling,
00130                 ulint a__scheduler__current_schedule_pos,
00131                 ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_pi >, srp< schedule_item > > > a__scheduler__ge2si);
00132 
00133         //! Marking routine for class scheduler. 
00134         virtual void gc_mark();
00135 
00136 private:
00137         /*! \brief A switch that turns on/off "dumb scheduling" 
00138 
00139         Dumb scheduling = instruction execution time is ignored; it takes care only about instruction dependencies.
00140         */
00141         bool dumb_scheduling;
00142         //! A schedule position of a currently scheduled pseudoinstruction.
00143         ulint current_schedule_pos;
00144         //! A map between a pseudoinstruction and a corresponding schedule_item.
00145         srp< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_pi >, srp< schedule_item > > >  ge2si;
00146         static ptr<reflection_list> reflection;
00147         
00148 }; // scheduler
00149 
00150 
00151 //! Represents item of a schedule.
00152 class schedule_item : public ::lestes::std::object {
00153 public:
00154         //! The method instruction_get returns the value of the field schedule_item::instruction.
00155         ptr< ::lestes::backend_v2::intercode::ge_pi > instruction_get() const;
00156 
00157         //! The method instruction_set sets the field schedule_item::instruction to the given value.
00158         void instruction_set(const ptr< ::lestes::backend_v2::intercode::ge_pi > &);
00159 
00160         //! The method in_deps_get returns the value of the field schedule_item::in_deps.
00161         ptr< ::lestes::std::set< srp< schedule_item > > > in_deps_get() const;
00162 
00163         //! The method in_deps_set sets the field schedule_item::in_deps to the given value.
00164         void in_deps_set(const ptr< ::lestes::std::set< srp< schedule_item > > > & );
00165 
00166         //! The method in_deps_copy_get returns the value of the field schedule_item::in_deps_copy.
00167         ptr< ::lestes::std::set< srp< schedule_item > > > in_deps_copy_get() const;
00168 
00169         //! The method in_deps_copy_set sets the field schedule_item::in_deps_copy to the given value.
00170         void in_deps_copy_set(const ptr< ::lestes::std::set< srp< schedule_item > > > & );
00171 
00172         //! The method out_deps_get returns the value of the field schedule_item::out_deps.
00173         ptr< ::lestes::std::set< srp< schedule_item > > > out_deps_get() const;
00174 
00175         //! The method out_deps_set sets the field schedule_item::out_deps to the given value.
00176         void out_deps_set(const ptr< ::lestes::std::set< srp< schedule_item > > > & );
00177 
00178         //! The method out_deps_copy_get returns the value of the field schedule_item::out_deps_copy.
00179         ptr< ::lestes::std::set< srp< schedule_item > > > out_deps_copy_get() const;
00180 
00181         //! The method out_deps_copy_set sets the field schedule_item::out_deps_copy to the given value.
00182         void out_deps_copy_set(const ptr< ::lestes::std::set< srp< schedule_item > > > & );
00183 
00184         //! The method etime_get returns the value of the field schedule_item::etime.
00185         ulint etime_get() const;
00186 
00187         //! The method etime_set sets the field schedule_item::etime to the given value.
00188         void etime_set(ulint);
00189 
00190         //! The method ctime_get returns the value of the field schedule_item::ctime.
00191         ulint ctime_get() const;
00192 
00193         //! The method ctime_set sets the field schedule_item::ctime to the given value.
00194         void ctime_set(ulint);
00195 
00196         //! The method start_time_get returns the value of the field schedule_item::start_time.
00197         ulint start_time_get() const;
00198 
00199         //! The method start_time_set sets the field schedule_item::start_time to the given value.
00200         void start_time_set(ulint);
00201 
00202         //! The method end_time_get returns the value of the field schedule_item::end_time.
00203         ulint end_time_get() const;
00204 
00205         //! The method end_time_set sets the field schedule_item::end_time to the given value.
00206         void end_time_set(ulint);
00207 
00208         //! The method latest_start_time_get returns the value of the field schedule_item::latest_start_time.
00209         ulint latest_start_time_get() const;
00210 
00211         //! The method latest_start_time_set sets the field schedule_item::latest_start_time to the given value.
00212         void latest_start_time_set(ulint);
00213 
00214         
00215         //! First generated factory method for class schedule_item.
00216         static ptr< schedule_item > create (
00217                 ptr< ::lestes::backend_v2::intercode::ge_pi > a__schedule_item__instruction,
00218                 ptr< ::lestes::std::set< srp< schedule_item > > > a__schedule_item__in_deps,
00219                 ptr< ::lestes::std::set< srp< schedule_item > > > a__schedule_item__in_deps_copy,
00220                 ptr< ::lestes::std::set< srp< schedule_item > > > a__schedule_item__out_deps,
00221                 ptr< ::lestes::std::set< srp< schedule_item > > > a__schedule_item__out_deps_copy,
00222                 ulint a__schedule_item__etime,
00223                 ulint a__schedule_item__ctime,
00224                 ulint a__schedule_item__start_time,
00225                 ulint a__schedule_item__end_time,
00226                 ulint a__schedule_item__latest_start_time);
00227 
00228         //! Second generated factory method for class schedule_item.
00229         static ptr< schedule_item > create (
00230                 ptr< ::lestes::backend_v2::intercode::ge_pi > a__schedule_item__instruction,
00231                 ulint a__schedule_item__etime,
00232                 ulint a__schedule_item__ctime);
00233 
00234         
00235 
00236         //! for purposes of dumping
00237         virtual ptr<reflection_list> reflection_get() const;
00238         //! for purposes of dumping
00239         virtual ptr<field_list_list> field_values_get() const;
00240         
00241 protected:
00242         //! Generated constructor for class schedule_item.
00243         schedule_item (
00244                 ptr< ::lestes::backend_v2::intercode::ge_pi > a__schedule_item__instruction,
00245                 ptr< ::lestes::std::set< srp< schedule_item > > > a__schedule_item__in_deps,
00246                 ptr< ::lestes::std::set< srp< schedule_item > > > a__schedule_item__in_deps_copy,
00247                 ptr< ::lestes::std::set< srp< schedule_item > > > a__schedule_item__out_deps,
00248                 ptr< ::lestes::std::set< srp< schedule_item > > > a__schedule_item__out_deps_copy,
00249                 ulint a__schedule_item__etime,
00250                 ulint a__schedule_item__ctime,
00251                 ulint a__schedule_item__start_time,
00252                 ulint a__schedule_item__end_time,
00253                 ulint a__schedule_item__latest_start_time);
00254 
00255         //! Marking routine for class schedule_item. 
00256         virtual void gc_mark();
00257 
00258 private:
00259         //! The pseudonstruction that is represented by this instance of schedule_item.
00260         srp< ::lestes::backend_v2::intercode::ge_pi > instruction;
00261         //! A set of schedule_items on which this item is dependent.
00262         srp< ::lestes::std::set< srp< schedule_item > > >  in_deps;
00263         //! A copy of the in_deps set.
00264         srp< ::lestes::std::set< srp< schedule_item > > >  in_deps_copy;
00265         //! A set of schedule_items that are dependent on this item.
00266         srp< ::lestes::std::set< srp< schedule_item > > >  out_deps;
00267         //! A copy of the out_deps set.
00268         srp< ::lestes::std::set< srp< schedule_item > > >  out_deps_copy;
00269         //! Execution time of the instruction.
00270         ulint etime;
00271         //! A time perid that elapses after the instruction's execution before an output operand is ready.
00272         ulint ctime;
00273         //! A start time within critical path method.
00274         ulint start_time;
00275         //! An end time within critical path method.
00276         ulint end_time;
00277         //! A latest start time within critical path method.
00278         ulint latest_start_time;
00279         static ptr<reflection_list> reflection;
00280         
00281 }; // schedule_item
00282 
00283 
00284 end_package(workers);
00285 end_package(backend_v2);
00286 end_package(lestes);
00287 
00288 #endif // lestes__backend_v2__workers__scheduler_g_hh__included

Generated on Mon Feb 12 18:23:15 2007 for lestes by doxygen 1.5.1-20070107