lestes::backend_v2::workers::scheduler Class Reference

Performs list scheduling on a function's body based on critical path method. More...

#include <scheduler.g.hh>

Inheritance diagram for lestes::backend_v2::workers::scheduler:

lestes::backend_v2::workers::worker_base lestes::std::object lestes::std::mem::keystone List of all members.

Public Member Functions

bool dumb_scheduling_get () const
 The method dumb_scheduling_get returns the value of the field scheduler::dumb_scheduling.
void dumb_scheduling_set (bool)
 The method dumb_scheduling_set sets the field scheduler::dumb_scheduling to the given value.
ulint current_schedule_pos_get () const
 The method current_schedule_pos_get returns the value of the field scheduler::current_schedule_pos.
void current_schedule_pos_set (ulint)
 The method current_schedule_pos_set sets the field scheduler::current_schedule_pos to the given value.
ptr< ::lestes::std::map< srp<
::lestes::backend_v2::intercode::ge_pi >,
srp< schedule_item > > > 
ge2si_get () const
 The method ge2si_get returns the value of the field scheduler::ge2si.
void ge2si_set (const ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_pi >, srp< schedule_item > > > &)
 The method ge2si_set sets the field scheduler::ge2si to the given value.
void process ()
 Schedules pseudoinstructions of a function body.
ptr< ::lestes::backend_v2::structs::func_dataget_result ()
 Returns data of the processed function with scheduled body.
ptr< vector< srp< ::lestes::backend_v2::intercode::ge_pi > > > process_bb (ptr< ::lestes::backend_v2::workers::basic_block > bb)
ptr< set< srp< ::lestes::backend_v2::workers::schedule_item > > > find_schedule_items (ptr< ::lestes::backend_v2::workers::basic_block > bb)
void find_critical_paths (ptr< set< srp< ::lestes::backend_v2::workers::schedule_item > > > items)
ptr< vector< srp< ::lestes::backend_v2::intercode::ge_pi > > > schedule_items (ptr< set< srp< schedule_item > > > items)
ptr< schedule_itemcreate_schedule_item (ptr< ::lestes::backend_v2::intercode::ge_pi > ge)
void check_waiting_set (ptr< set< srp< schedule_item > > > waiting)
bool find_dependence_loop (ptr< schedule_item > start, ptr< schedule_item > curr, ulint depth)
 Recursively searches for a dependence loops.
virtual ptr< reflection_listreflection_get () const
 for purposes of dumping
virtual ptr< field_list_listfield_values_get () const
 for purposes of dumping

Static Public Member Functions

static ptr< schedulercreate (ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data, bool a__scheduler__dumb_scheduling, ulint a__scheduler__current_schedule_pos, ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_pi >, srp< schedule_item > > > a__scheduler__ge2si)
 First generated factory method for class scheduler.
static ptr< schedulercreate (ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data)
 Second generated factory method for class scheduler.

Protected Member Functions

 scheduler (ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data, bool a__scheduler__dumb_scheduling, ulint a__scheduler__current_schedule_pos, ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_pi >, srp< schedule_item > > > a__scheduler__ge2si)
 Generated constructor for class scheduler.
virtual void gc_mark ()
 Marking routine for class scheduler.

Private Attributes

bool dumb_scheduling
 A switch that turns on/off "dumb scheduling".
ulint current_schedule_pos
 A schedule position of a currently scheduled pseudoinstruction.
srp< ::lestes::std::map< srp<
::lestes::backend_v2::intercode::ge_pi >,
srp< schedule_item > > > 
ge2si
 A map between a pseudoinstruction and a corresponding schedule_item.

Static Private Attributes

static ptr< reflection_listreflection = reflection

Detailed Description

Performs list scheduling on a function's body based on critical path method.

Definition at line 68 of file scheduler.g.hh.


Constructor & Destructor Documentation

lestes::backend_v2::workers::scheduler::scheduler ( ptr< ::lestes::backend_v2::structs::func_data a__worker_base__data,
bool  a__scheduler__dumb_scheduling,
ulint  a__scheduler__current_schedule_pos,
ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_pi >, srp< schedule_item > > >  a__scheduler__ge2si 
) [protected]

Generated constructor for class scheduler.

Generated constructor for class scheduler.

Author:
lsg

Definition at line 108 of file scheduler.g.cc.

Referenced by create().

00112         : worker_base(a__worker_base__data), dumb_scheduling(a__scheduler__dumb_scheduling), current_schedule_pos(a__scheduler__current_schedule_pos), ge2si(checked(a__scheduler__ge2si))
00113 {}


Member Function Documentation

bool lestes::backend_v2::workers::scheduler::dumb_scheduling_get (  )  const

The method dumb_scheduling_get returns the value of the field scheduler::dumb_scheduling.

Returns:
The value of scheduler::dumb_scheduling.
Author:
lsg

Definition at line 30 of file scheduler.g.cc.

References dumb_scheduling.

00031 {
00032         return dumb_scheduling;
00033 }

void lestes::backend_v2::workers::scheduler::dumb_scheduling_set ( bool  x  ) 

The method dumb_scheduling_set sets the field scheduler::dumb_scheduling to the given value.

Parameters:
[in] x The new value to set scheduler::dumb_scheduling to.
Author:
lsg

Definition at line 39 of file scheduler.g.cc.

References dumb_scheduling.

00040 {
00041         scheduler::dumb_scheduling = x;
00042 }

ulint lestes::backend_v2::workers::scheduler::current_schedule_pos_get (  )  const

The method current_schedule_pos_get returns the value of the field scheduler::current_schedule_pos.

Returns:
The value of scheduler::current_schedule_pos.
Author:
lsg

Definition at line 48 of file scheduler.g.cc.

References current_schedule_pos.

00049 {
00050         return current_schedule_pos;
00051 }

void lestes::backend_v2::workers::scheduler::current_schedule_pos_set ( ulint  x  ) 

The method current_schedule_pos_set sets the field scheduler::current_schedule_pos to the given value.

Parameters:
[in] x The new value to set scheduler::current_schedule_pos to.
Author:
lsg

Definition at line 57 of file scheduler.g.cc.

References current_schedule_pos.

00058 {
00059         scheduler::current_schedule_pos = x;
00060 }

ptr<::lestes::std::map< srp<::lestes::backend_v2::intercode::ge_pi >, srp< schedule_item > > > lestes::backend_v2::workers::scheduler::ge2si_get (  )  const

The method ge2si_get returns the value of the field scheduler::ge2si.

Returns:
The value of scheduler::ge2si.
Author:
lsg

Definition at line 66 of file scheduler.g.cc.

References ge2si.

00067 {
00068         return ge2si;
00069 }

void lestes::backend_v2::workers::scheduler::ge2si_set ( const ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_pi >, srp< schedule_item > > > &  x  ) 

The method ge2si_set sets the field scheduler::ge2si to the given value.

Parameters:
[in] x The new value to set scheduler::ge2si to.
Author:
lsg

Definition at line 75 of file scheduler.g.cc.

References ge2si.

00076 {
00077         scheduler::ge2si = x;
00078 }

void lestes::backend_v2::workers::scheduler::process (  )  [virtual]

Schedules pseudoinstructions of a function body.

Implements lestes::backend_v2::workers::worker_base.

Definition at line 35 of file scheduler.cc.

References current_schedule_pos, lestes::backend_v2::workers::worker_base::data_get(), lestes::msg::eolog, and process_bb().

00035                         {
00036         schedlog << "process start\n" << eolog;
00037         
00038         ptr<ge_pi_list__type> body = ge_pi_list__type::create();
00039         
00040         current_schedule_pos = 0;
00041         
00042         ptr<bb_vector__type> bbs = data_get()->bbs_get();
00043         
00044         for(bb_vector__type::iterator it = bbs->begin(); it!=bbs->end(); ++it) {
00045                 ptr<basic_block> bb = *it;
00046                 
00047                 //Insert fsp of the basic block to the body
00048                 body->push_back(bb->fsp_get());
00049                 bb->fsp_get()->schedule_pos_set(current_schedule_pos++);
00050                 
00051                 //Insert scheduled instructions of the block to the body
00052                 ptr<ge_pi_vector__type> output = process_bb(bb);
00053                 body->insert(body->end(), output->begin(), output->end());
00054         }
00055         
00056         //Insert the last sequencepoint to the body
00057         ptr<ge_pi> lsp = bbs->back()->lsp_get();
00058         lsp->schedule_pos_set(current_schedule_pos);
00059         body->push_back(lsp);
00060         
00061         data_get()->ge_body_set(body);
00062         
00063         schedlog << "process end\n" << eolog;
00064 }

ptr< func_data > lestes::backend_v2::workers::scheduler::get_result (  )  [virtual]

Returns data of the processed function with scheduled body.

Implements lestes::backend_v2::workers::worker_base.

Definition at line 398 of file scheduler.cc.

References lestes::backend_v2::workers::worker_base::data_get().

00398                                      {
00399         return data_get();
00400 }

ptr<vector<srp< ::lestes::backend_v2::intercode::ge_pi> > > lestes::backend_v2::workers::scheduler::process_bb ( ptr< ::lestes::backend_v2::workers::basic_block bb  ) 

Referenced by process().

ptr<set<srp< ::lestes::backend_v2::workers::schedule_item> > > lestes::backend_v2::workers::scheduler::find_schedule_items ( ptr< ::lestes::backend_v2::workers::basic_block bb  ) 

void lestes::backend_v2::workers::scheduler::find_critical_paths ( ptr< set< srp< ::lestes::backend_v2::workers::schedule_item > > >  items  ) 

ptr<vector<srp< ::lestes::backend_v2::intercode::ge_pi> > > lestes::backend_v2::workers::scheduler::schedule_items ( ptr< set< srp< schedule_item > > >  items  ) 

ptr< schedule_item > lestes::backend_v2::workers::scheduler::create_schedule_item ( ptr< ::lestes::backend_v2::intercode::ge_pi ge  ) 

void lestes::backend_v2::workers::scheduler::check_waiting_set ( ptr< set< srp< schedule_item > > >  waiting  ) 

bool lestes::backend_v2::workers::scheduler::find_dependence_loop ( ptr< schedule_item start,
ptr< schedule_item curr,
ulint  depth 
)

Recursively searches for a dependence loops.

NOTE: For debugging purposes.

Definition at line 183 of file scheduler.cc.

00183                                                                                                  {
00184         if ( depth > 4 ) {
00185                 return false;
00186         }
00187         
00188         ptr<si_set__type> deps = curr->in_deps_get();
00189         
00190         for(si_set__type::iterator it = deps->begin(); it!=deps->end(); ++it) {
00191                 ptr<schedule_item> dep = *it;
00192                 
00193                 if ( dep==start || find_dependence_loop(start,dep,depth+1)) {
00194                         schedlog << "find_dependence_loop found:item=" << curr->uid_get() << "\n" << eolog;
00195                         return true;
00196                 }
00197         }
00198         
00199         return false;
00200 }

ptr< scheduler > lestes::backend_v2::workers::scheduler::create ( ptr< ::lestes::backend_v2::structs::func_data a__worker_base__data,
bool  a__scheduler__dumb_scheduling,
ulint  a__scheduler__current_schedule_pos,
ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_pi >, srp< schedule_item > > >  a__scheduler__ge2si 
) [static]

First generated factory method for class scheduler.

This factory method for class scheduler takes values of all fields as arguments.

Author:
lsg

Definition at line 84 of file scheduler.g.cc.

References scheduler().

Referenced by create().

00088 {
00089         return ptr< scheduler > ( new scheduler(a__worker_base__data,
00090                 a__scheduler__dumb_scheduling,
00091                 a__scheduler__current_schedule_pos,
00092                 a__scheduler__ge2si) );
00093 }

ptr< scheduler > lestes::backend_v2::workers::scheduler::create ( ptr< ::lestes::backend_v2::structs::func_data a__worker_base__data  )  [static]

Second generated factory method for class scheduler.

This factory method for class scheduler uses initializers.

Author:
lsg

Definition at line 99 of file scheduler.g.cc.

References create(), and scheduler().

00100 {
00101         return ptr< scheduler > ( new scheduler(a__worker_base__data, false, 0, ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_pi >, srp< schedule_item > > ::create()) );
00102 }

ptr< object::reflection_list > lestes::backend_v2::workers::scheduler::reflection_get (  )  const [virtual]

for purposes of dumping

Reimplemented from lestes::backend_v2::workers::worker_base.

Definition at line 115 of file scheduler.g.cc.

References lestes::std::list< T >::create(), reflection, and lestes::backend_v2::workers::worker_base::reflection_get().

00116 {
00117         if (!reflection) {
00118                 typedef class_reflection::field_metadata md;
00119                 typedef class_reflection::field_metadata_list mdlist;
00120                 ptr<mdlist> mdl = mdlist::create();
00121                 mdl->push_back( md::create( "dumb_scheduling", "bool" ) );
00122                 mdl->push_back( md::create( "current_schedule_pos", "ulint" ) );
00123                 mdl->push_back( md::create( "ge2si", "map&lt; srp&lt; ::lestes::backend_v2::intercode::ge_pi &gt;, srp&lt; schedule_item &gt; &gt;" ) );
00124                 reflection = reflection_list::create( worker_base::reflection_get() );
00125                 reflection->push_back( class_reflection::create( "scheduler", mdl ) );
00126         }
00127         return reflection;
00128 }

ptr< object::field_list_list > lestes::backend_v2::workers::scheduler::field_values_get (  )  const [virtual]

for purposes of dumping

Reimplemented from lestes::backend_v2::workers::worker_base.

Definition at line 130 of file scheduler.g.cc.

References lestes::std::list< T >::create(), and lestes::backend_v2::workers::worker_base::field_values_get().

00131 {
00132         ptr < field_list_list > result = worker_base::field_values_get();
00133         result->push_back( value_list::create() );
00134         result->back()->push_back( objectize< bool > ::create( this->dumb_scheduling ) );
00135         result->push_back( value_list::create() );
00136         result->back()->push_back( objectize< ulint > ::create( this->current_schedule_pos ) );
00137         result->push_back( value_list::create() );
00138         result->back()->push_back( this->ge2si );
00139         return result;
00140 }

void lestes::backend_v2::workers::scheduler::gc_mark ( void   )  [protected, virtual]

Marking routine for class scheduler.

Marking routine is used for garbage collection.

Author:
lsg

Reimplemented from lestes::backend_v2::workers::worker_base.

Definition at line 147 of file scheduler.g.cc.

References lestes::backend_v2::workers::worker_base::gc_mark().

00148 {
00149         worker_base::gc_mark();
00150 }


Member Data Documentation

bool lestes::backend_v2::workers::scheduler::dumb_scheduling [private]

A switch that turns on/off "dumb scheduling".

Dumb scheduling = instruction execution time is ignored; it takes care only about instruction dependencies.

Definition at line 141 of file scheduler.g.hh.

Referenced by dumb_scheduling_get(), and dumb_scheduling_set().

ulint lestes::backend_v2::workers::scheduler::current_schedule_pos [private]

A schedule position of a currently scheduled pseudoinstruction.

Definition at line 143 of file scheduler.g.hh.

Referenced by current_schedule_pos_get(), current_schedule_pos_set(), and process().

srp< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::ge_pi >, srp< schedule_item > > > lestes::backend_v2::workers::scheduler::ge2si [private]

A map between a pseudoinstruction and a corresponding schedule_item.

Definition at line 145 of file scheduler.g.hh.

Referenced by ge2si_get(), and ge2si_set().

ptr< object::reflection_list > lestes::backend_v2::workers::scheduler::reflection = reflection [static, private]

Reimplemented from lestes::backend_v2::workers::worker_base.

Definition at line 146 of file scheduler.g.hh.

Referenced by reflection_get().


The documentation for this class was generated from the following files:
Generated on Mon Feb 12 18:24:11 2007 for lestes by doxygen 1.5.1-20070107