order_governor.g.hh

Go to the documentation of this file.
00001 // This file is automatically generated, do not edit.
00002 
00003 /*!
00004         \file
00005         \brief Fuction body linearizator.
00006         \author jaz
00007 */
00008 
00009 #ifndef lestes__backend_v2__workers__order_governor_g_hh__included
00010 #define lestes__backend_v2__workers__order_governor_g_hh__included
00011 
00012 #include <lestes/backend_v2/common.hh>
00013 #include <lestes/std/map.hh>
00014 #include <lestes/std/vector.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(intercode);
00021 class pi_pi;
00022 end_package(intercode);
00023 end_package(backend_v2);
00024 end_package(lestes);
00025 
00026 package(lestes);
00027 package(backend_v2);
00028 package(intercode);
00029 class pi_sp;
00030 end_package(intercode);
00031 end_package(backend_v2);
00032 end_package(lestes);
00033 
00034 package(lestes);
00035 package(backend_v2);
00036 package(intercode);
00037 class pi_operand;
00038 end_package(intercode);
00039 end_package(backend_v2);
00040 end_package(lestes);
00041 
00042 package(lestes);
00043 package(backend_v2);
00044 package(structs);
00045 class func_data;
00046 end_package(structs);
00047 end_package(backend_v2);
00048 end_package(lestes);
00049 
00050 package(lestes);
00051 package(backend_v2);
00052 package(workers);
00053 
00054 
00055 class order_governor;
00056 
00057 
00058 /*! \brief Linearizes pseudopinstructions within function's body.
00059 
00060 Result of linearization is order where every pseudoinstruction is positioned
00061 between its psp and nsp sequencepoints and after origins of its operands. It means that pseudoinstruction
00062 is executed after all its origins are ready.
00063 */
00064 class order_governor : public worker_base {
00065 public:
00066         typedef ulint level_t;
00067         
00068         //! The method pis_ordered_get returns the value of the field order_governor::pis_ordered.
00069         ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > pis_ordered_get() const;
00070 
00071         //! The method pis_ordered_set sets the field order_governor::pis_ordered to the given value.
00072         void pis_ordered_set(const ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > & );
00073 
00074         //! The method pis_unordered_get returns the value of the field order_governor::pis_unordered.
00075         ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > pis_unordered_get() const;
00076 
00077         //! The method pis_unordered_set sets the field order_governor::pis_unordered to the given value.
00078         void pis_unordered_set(const ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > & );
00079 
00080         //! The method is_ordered_get returns the value of the field order_governor::is_ordered.
00081         ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_pi >, bool > > is_ordered_get() const;
00082 
00083         //! The method is_ordered_set sets the field order_governor::is_ordered to the given value.
00084         void is_ordered_set(const ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_pi >, bool > > & );
00085 
00086         void process();
00087 
00088         ptr< ::lestes::backend_v2::structs::func_data > get_result();
00089 
00090         //! Merges unordered pseudoinstructions of given level with ordered pseudoinstructions.
00091         void merge_ordered_with_unordered_level_X(level_t level_to_merge);
00092 
00093         //! Linearizes pis_ordered list.
00094         void torder_ordered();
00095 
00096         //! Tells whether origin of each operand in list is ordered.
00097         bool pi_operands_origins_ordered(ptr<vector< srp< ::lestes::backend_v2::intercode::pi_operand > > > operand_list);
00098 
00099         //! Decrease by 1 level of pseudoinstructions in a list.
00100         void renumber_levels(ptr<list< srp< ::lestes::backend_v2::intercode::pi_pi > > > pi_list);
00101 
00102         //! Tells whether a sequencepoint is psp for any of pseudoinstructions in a list.
00103         bool nsp_for_any(ptr< ::lestes::backend_v2::intercode::pi_pi > sp, ptr<list< srp< ::lestes::backend_v2::intercode::pi_pi > > > list);
00104 
00105         //! Moves pseudoinstructions with level 0 from pis_unordered to pis_ordered list.
00106         void identify_level_0();
00107 
00108         //! Linearizes sequencepoints in pis_ordered list.
00109         void linearize_ordered_sps();
00110 
00111         //! Shifts psp and nsp of pis_unordered pseudoinstructions.
00112         void shift_unordered_nsp_psp();
00113 
00114         //! Returns level of a pi_pi pseudoinstruction.
00115         lint get_pi_level(ptr< ::lestes::backend_v2::intercode::pi_pi > pi);
00116 
00117         //! Gets last pi_pi pseudoinstruction of chain where two consequent pi_pi point with psp and nsp to each other.
00118         ptr< ::lestes::backend_v2::intercode::pi_pi > conjugated_chain_end_find(ptr< ::lestes::backend_v2::intercode::pi_pi > pi);
00119 
00120         //! Gets first pi_pi pseudoinstruction of chain where two consequent pi_pi point with psp and nsp to each other.
00121         ptr< ::lestes::backend_v2::intercode::pi_pi > conjugated_chain_start_find(ptr< ::lestes::backend_v2::intercode::pi_pi > pi);
00122 
00123         
00124         //! First generated factory method for class order_governor.
00125         static ptr< order_governor > create (
00126                 ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data,
00127                 ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > a__order_governor__pis_ordered,
00128                 ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > a__order_governor__pis_unordered,
00129                 ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_pi >, bool > > a__order_governor__is_ordered);
00130 
00131         //! Second generated factory method for class order_governor.
00132         static ptr< order_governor > create (
00133                 ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data);
00134 
00135         
00136 
00137         //! for purposes of dumping
00138         virtual ptr<reflection_list> reflection_get() const;
00139         //! for purposes of dumping
00140         virtual ptr<field_list_list> field_values_get() const;
00141         
00142 protected:
00143         //! Generated constructor for class order_governor.
00144         order_governor (
00145                 ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data,
00146                 ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > a__order_governor__pis_ordered,
00147                 ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > > a__order_governor__pis_unordered,
00148                 ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_pi >, bool > > a__order_governor__is_ordered);
00149 
00150         //! Marking routine for class order_governor. 
00151         virtual void gc_mark();
00152 
00153 private:
00154         //! List of already linearized pseudoinstructions.
00155         srp< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > >  pis_ordered;
00156         //! List of not yet linerized pseudoinstructions.
00157         srp< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_pi > > >  pis_unordered;
00158         //! Map that tells whether a pseudoinstruction is already in ordered list.
00159         srp< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_pi >, bool > >  is_ordered;
00160         static ptr<reflection_list> reflection;
00161         
00162 }; // order_governor
00163 
00164 
00165 end_package(workers);
00166 end_package(backend_v2);
00167 end_package(lestes);
00168 
00169 #endif // lestes__backend_v2__workers__order_governor_g_hh__included

Generated on Mon Feb 12 18:22:45 2007 for lestes by doxygen 1.5.1-20070107