linscan_regalloc.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__linscan_regalloc_g_hh__included
00009 #define lestes__backend_v2__workers__linscan_regalloc_g_hh__included
00010 
00011 #include <lestes/std/list.hh>
00012 #include <lestes/std/set.hh>
00013 #include <lestes/backend_v2/common.hh>
00014 #include <lestes/backend_v2/workers/worker_base.g.hh>
00015 
00016 #include <lestes/std/objectize_macros.hh>
00017 package(lestes);
00018 package(backend_v2);
00019 package(structs);
00020 class func_data;
00021 end_package(structs);
00022 end_package(backend_v2);
00023 end_package(lestes);
00024 
00025 package(lestes);
00026 package(backend_v2);
00027 package(intercode);
00028 class ge_pi;
00029 end_package(intercode);
00030 end_package(backend_v2);
00031 end_package(lestes);
00032 
00033 package(lestes);
00034 package(backend_v2);
00035 package(intercode);
00036 class ge_operand_mem;
00037 end_package(intercode);
00038 end_package(backend_v2);
00039 end_package(lestes);
00040 
00041 package(lestes);
00042 package(backend_v2);
00043 package(intercode);
00044 class ge_operand_reg;
00045 end_package(intercode);
00046 end_package(backend_v2);
00047 end_package(lestes);
00048 
00049 package(lestes);
00050 package(backend_v2);
00051 package(workers);
00052 class alloc_interval;
00053 end_package(workers);
00054 end_package(backend_v2);
00055 end_package(lestes);
00056 
00057 package(lestes);
00058 package(md);
00059 package(instructions);
00060 class tm_instr_op_reg_base;
00061 end_package(instructions);
00062 end_package(md);
00063 end_package(lestes);
00064 
00065 package(lestes);
00066 package(md);
00067 package(registers);
00068 class tm_register;
00069 end_package(registers);
00070 end_package(md);
00071 end_package(lestes);
00072 
00073 package(lestes);
00074 package(backend_v2);
00075 package(workers);
00076 
00077 
00078 class linscan_regalloc;
00079 
00080 
00081 //! Provides a linearscan register allocation.
00082 class linscan_regalloc : public worker_base {
00083 public:
00084         //! The method active_intervals_get returns the value of the field linscan_regalloc::active_intervals.
00085         ptr< ::lestes::std::vector< srp< ::lestes::backend_v2::workers::alloc_interval > > > active_intervals_get() const;
00086 
00087         //! The method active_intervals_set sets the field linscan_regalloc::active_intervals to the given value.
00088         void active_intervals_set(const ptr< ::lestes::std::vector< srp< ::lestes::backend_v2::workers::alloc_interval > > > & );
00089 
00090         //! The method expired_intervals_get returns the value of the field linscan_regalloc::expired_intervals.
00091         ptr< ::lestes::std::vector< srp< ::lestes::backend_v2::workers::alloc_interval > > > expired_intervals_get() const;
00092 
00093         //! The method expired_intervals_set sets the field linscan_regalloc::expired_intervals to the given value.
00094         void expired_intervals_set(const ptr< ::lestes::std::vector< srp< ::lestes::backend_v2::workers::alloc_interval > > > & );
00095 
00096         //! The method waiting_intervals_get returns the value of the field linscan_regalloc::waiting_intervals.
00097         ptr< ::lestes::std::vector< srp< ::lestes::backend_v2::workers::alloc_interval > > > waiting_intervals_get() const;
00098 
00099         //! The method waiting_intervals_set sets the field linscan_regalloc::waiting_intervals to the given value.
00100         void waiting_intervals_set(const ptr< ::lestes::std::vector< srp< ::lestes::backend_v2::workers::alloc_interval > > > & );
00101 
00102         //! The method register_owners_get returns the value of the field linscan_regalloc::register_owners.
00103         ptr< ::lestes::std::map< ulint, srp< ::lestes::backend_v2::workers::alloc_interval > > > register_owners_get() const;
00104 
00105         //! The method register_owners_set sets the field linscan_regalloc::register_owners to the given value.
00106         void register_owners_set(const ptr< ::lestes::std::map< ulint, srp< ::lestes::backend_v2::workers::alloc_interval > > > & );
00107 
00108         //! The method free_registers_get returns the value of the field linscan_regalloc::free_registers.
00109         ptr< ::lestes::std::set< ulint > > free_registers_get() const;
00110 
00111         //! The method free_registers_set sets the field linscan_regalloc::free_registers to the given value.
00112         void free_registers_set(const ptr< ::lestes::std::set< ulint > > & );
00113 
00114         //! The method used_registers_get returns the value of the field linscan_regalloc::used_registers.
00115         ptr< ::lestes::std::set< ulint > > used_registers_get() const;
00116 
00117         //! The method used_registers_set sets the field linscan_regalloc::used_registers to the given value.
00118         void used_registers_set(const ptr< ::lestes::std::set< ulint > > & );
00119 
00120         //! The method all_registers_get returns the value of the field linscan_regalloc::all_registers.
00121         ptr< ::lestes::std::set< ulint > > all_registers_get() const;
00122 
00123         //! The method all_registers_set sets the field linscan_regalloc::all_registers to the given value.
00124         void all_registers_set(const ptr< ::lestes::std::set< ulint > > & );
00125 
00126         //! The method destroyers_get returns the value of the field linscan_regalloc::destroyers.
00127         ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_operand_reg >, srp< ::lestes::md::registers::tm_register > > > destroyers_get() const;
00128 
00129         //! The method destroyers_set sets the field linscan_regalloc::destroyers to the given value.
00130         void destroyers_set(const ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_operand_reg >, srp< ::lestes::md::registers::tm_register > > > & );
00131 
00132         void process();
00133 
00134         ptr< ::lestes::backend_v2::structs::func_data > get_result();
00135 
00136         ptr<set<ulint> > ge_pi__get_allowed_regs_for_op(ptr< ::lestes::backend_v2::intercode::ge_pi > ge, ptr< ::lestes::backend_v2::intercode::ge_operand_reg > op);
00137 
00138         ptr< ::lestes::md::instructions::tm_instr_op_reg_base > ge_pi__find_tm_op_by_ge_op(ptr< ::lestes::backend_v2::intercode::ge_pi > ge, ptr< ::lestes::backend_v2::intercode::ge_operand_reg > op);
00139 
00140         ptr< ::lestes::md::registers::tm_register > get_free_register(ptr< ::lestes::backend_v2::workers::alloc_interval > interval);
00141 
00142         void set_register_owner(ptr< ::lestes::md::registers::tm_register > reg, ptr< ::lestes::backend_v2::workers::alloc_interval > interval);
00143 
00144         void expire_old_intervals(ptr< ::lestes::backend_v2::workers::alloc_interval > curr_interval);
00145 
00146         void setup_registers();
00147 
00148         void find_free_registers();
00149 
00150         void set_registers_to_operands();
00151 
00152         void set_interval_dependencies();
00153 
00154         ptr< ::lestes::md::registers::tm_register > get_destroyed_register(ptr< ::lestes::backend_v2::intercode::ge_operand_reg > op);
00155 
00156         void set_destroyed_register(ptr< ::lestes::backend_v2::intercode::ge_pi > ge, ptr< ::lestes::backend_v2::intercode::ge_operand_reg > op, ptr< ::lestes::md::registers::tm_register > reg);
00157 
00158         
00159         //! First generated factory method for class linscan_regalloc.
00160         static ptr< linscan_regalloc > create (
00161                 ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data,
00162                 ptr< ::lestes::std::vector< srp< ::lestes::backend_v2::workers::alloc_interval > > > a__linscan_regalloc__active_intervals,
00163                 ptr< ::lestes::std::vector< srp< ::lestes::backend_v2::workers::alloc_interval > > > a__linscan_regalloc__expired_intervals,
00164                 ptr< ::lestes::std::vector< srp< ::lestes::backend_v2::workers::alloc_interval > > > a__linscan_regalloc__waiting_intervals,
00165                 ptr< ::lestes::std::map< ulint, srp< ::lestes::backend_v2::workers::alloc_interval > > > a__linscan_regalloc__register_owners,
00166                 ptr< ::lestes::std::set< ulint > > a__linscan_regalloc__free_registers,
00167                 ptr< ::lestes::std::set< ulint > > a__linscan_regalloc__used_registers,
00168                 ptr< ::lestes::std::set< ulint > > a__linscan_regalloc__all_registers,
00169                 ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_operand_reg >, srp< ::lestes::md::registers::tm_register > > > a__linscan_regalloc__destroyers);
00170 
00171         //! Second generated factory method for class linscan_regalloc.
00172         static ptr< linscan_regalloc > create (
00173                 ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data);
00174 
00175         
00176 
00177         //! for purposes of dumping
00178         virtual ptr<reflection_list> reflection_get() const;
00179         //! for purposes of dumping
00180         virtual ptr<field_list_list> field_values_get() const;
00181         
00182 protected:
00183         //! Generated constructor for class linscan_regalloc.
00184         linscan_regalloc (
00185                 ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data,
00186                 ptr< ::lestes::std::vector< srp< ::lestes::backend_v2::workers::alloc_interval > > > a__linscan_regalloc__active_intervals,
00187                 ptr< ::lestes::std::vector< srp< ::lestes::backend_v2::workers::alloc_interval > > > a__linscan_regalloc__expired_intervals,
00188                 ptr< ::lestes::std::vector< srp< ::lestes::backend_v2::workers::alloc_interval > > > a__linscan_regalloc__waiting_intervals,
00189                 ptr< ::lestes::std::map< ulint, srp< ::lestes::backend_v2::workers::alloc_interval > > > a__linscan_regalloc__register_owners,
00190                 ptr< ::lestes::std::set< ulint > > a__linscan_regalloc__free_registers,
00191                 ptr< ::lestes::std::set< ulint > > a__linscan_regalloc__used_registers,
00192                 ptr< ::lestes::std::set< ulint > > a__linscan_regalloc__all_registers,
00193                 ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_operand_reg >, srp< ::lestes::md::registers::tm_register > > > a__linscan_regalloc__destroyers);
00194 
00195         //! Marking routine for class linscan_regalloc. 
00196         virtual void gc_mark();
00197 
00198 private:
00199         //! A list of active intervals.
00200         srp< ::lestes::std::vector< srp< ::lestes::backend_v2::workers::alloc_interval > > >  active_intervals;
00201         //! A list of already processed intervals.
00202         srp< ::lestes::std::vector< srp< ::lestes::backend_v2::workers::alloc_interval > > >  expired_intervals;
00203         //! A list of intervals witing for processing.
00204         srp< ::lestes::std::vector< srp< ::lestes::backend_v2::workers::alloc_interval > > >  waiting_intervals;
00205         //! A map that holds information about which interval has which register allocated.
00206         srp< ::lestes::std::map< ulint, srp< ::lestes::backend_v2::workers::alloc_interval > > >  register_owners;
00207         //! A set of free registers.
00208         srp< ::lestes::std::set< ulint > >  free_registers;
00209         //! A set of used registers.
00210         srp< ::lestes::std::set< ulint > >  used_registers;
00211         //! A set of all the registers that machine description contains.
00212         srp< ::lestes::std::set< ulint > >  all_registers;
00213         //! A map that holds information about whitch register is destroyed by which operand.
00214         srp< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_operand_reg >, srp< ::lestes::md::registers::tm_register > > >  destroyers;
00215         static ptr<reflection_list> reflection;
00216         
00217 }; // linscan_regalloc
00218 
00219 
00220 end_package(workers);
00221 end_package(backend_v2);
00222 end_package(lestes);
00223 
00224 #endif // lestes__backend_v2__workers__linscan_regalloc_g_hh__included

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