#include <ge_generator.g.hh>
Inheritance diagram for lestes::backend_v2::workers::ge_generator:

Public Member Functions | |
| void | process () |
| Generates ge-level intercode for a function body in pi-level intercode. | |
| ptr< ::lestes::backend_v2::structs::func_data > | get_result () |
| Returns the function's data with generated body in ge-intercode. | |
| void | append_vector_to_list (ptr< list< srp< ::lestes::backend_v2::intercode::ge_pi > > > l, ptr< vector< srp< ::lestes::backend_v2::intercode::ge_pi > > > v) |
| virtual ptr< reflection_list > | reflection_get () const |
| for purposes of dumping | |
| virtual ptr< field_list_list > | field_values_get () const |
| for purposes of dumping | |
Static Public Member Functions | |
| static ptr< ge_generator > | create (ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data) |
| First generated factory method for class ge_generator. | |
Protected Member Functions | |
| ge_generator (ptr< ::lestes::backend_v2::structs::func_data > a__worker_base__data) | |
| Generated constructor for class ge_generator. | |
| virtual void | gc_mark () |
| Marking routine for class ge_generator. | |
Static Private Attributes | |
| static ptr< reflection_list > | reflection = reflection |
Definition at line 57 of file ge_generator.g.hh.
| lestes::backend_v2::workers::ge_generator::ge_generator | ( | ptr< ::lestes::backend_v2::structs::func_data > | a__worker_base__data | ) | [protected] |
Generated constructor for class ge_generator.
Generated constructor for class ge_generator.
Definition at line 38 of file ge_generator.g.cc.
Referenced by create().
00039 : worker_base(a__worker_base__data) 00040 {}
| void lestes::backend_v2::workers::ge_generator::process | ( | ) | [virtual] |
Generates ge-level intercode for a function body in pi-level intercode.
Implements lestes::backend_v2::workers::worker_base.
Definition at line 34 of file ge_generator.cc.
References append_vector_to_list(), lestes::backend_v2::workers::worker_base::data_get(), and lestes::msg::eolog.
00034 { 00035 00036 log << "ge-code generation - start\n" << eolog; 00037 00038 00039 ptr<visitor_pi_pi2pi_operands> pi2op = visitor_pi_pi2pi_operands::create(); 00040 ptr<visitor_pi_pi2id> pi_id_getter = visitor_pi_pi2id::create(); 00041 00042 ptr<pi_pi_list__type> pi_pi_list = data_get()->pi_body_get(); 00043 ptr<ge_pi_list__type> ge_pi_list = data_get()->ge_body_get(); 00044 00045 //Count operand uses. 00046 ptr<pi_op2count__type> op_use_count = pi_op2count__type::create(); 00047 for(pi_pi_list__type::iterator it_pi_list = pi_pi_list->begin(); it_pi_list!=pi_pi_list->end(); ++it_pi_list) { 00048 ptr<pi_pi> pi = *it_pi_list; 00049 ptr<pi_operands> ops = pi->accept_visitor_pi_pi2pi_operands_gen_base(pi2op); 00050 00051 ptr<pi_operand_vector__type> in_ops = ops->operands_input_get(); 00052 for(pi_operand_vector__type::iterator it_op = in_ops->begin(); it_op!=in_ops->end(); ++it_op) { 00053 ptr<pi_operand> op = *it_op; 00054 00055 pi_op2count__type::iterator it_search = op_use_count->find(op); 00056 00057 if ( it_search==op_use_count->end() ) { 00058 (*op_use_count)[op] = 1; 00059 } else { 00060 (*op_use_count)[op] = it_search->second + 1; 00061 } 00062 } 00063 } 00064 00065 ptr<pi_pi2ge_pi> convertor = pi_pi2ge_pi::create(op_use_count); 00066 00067 ptr<pi_pi2ge_pi_vector__type> pi2ge = pi_pi2ge_pi_vector__type::create(); 00068 //Convert sequencepoints 00069 for(pi_pi_list__type::iterator it_pi_list = pi_pi_list->begin(); it_pi_list!=pi_pi_list->end(); ++it_pi_list) { 00070 ptr<pi_pi> pi = *it_pi_list; 00071 00072 if ( (visitor_pi_pi2id::kind_type)pi->accept_visitor_pi_pi2ulint_gen_base(pi_id_getter)==visitor_pi_pi2id::PI_SP ) { 00073 ptr<ge_pi_vector__type> ge_code = pi->accept_visitor_pi_pi2ge_pi_gen_base(convertor); 00074 (*pi2ge)[pi] = ge_code; 00075 } 00076 } 00077 00078 /* 00079 Convert pseudoinstructions. 00080 Sequencepoints have to be converted before this. 00081 */ 00082 for(pi_pi_list__type::iterator it_pi_list = pi_pi_list->begin(); it_pi_list!=pi_pi_list->end(); ++it_pi_list) { 00083 ptr<pi_pi> pi = *it_pi_list; 00084 00085 ptr<ge_pi_vector__type> ge_code; 00086 00087 if ( (visitor_pi_pi2id::kind_type)pi->accept_visitor_pi_pi2ulint_gen_base(pi_id_getter)==visitor_pi_pi2id::PI_SP ) { 00088 ge_code = (*pi2ge)[pi]; 00089 } else { 00090 ge_code = pi->accept_visitor_pi_pi2ge_pi_gen_base(convertor); 00091 } 00092 00093 append_vector_to_list(ge_pi_list,ge_code); 00094 } 00095 00096 //Setup dependencies of the ge-pseudoinstructions. 00097 for(ge_pi_list__type::iterator it_ge_list = ge_pi_list->begin(); it_ge_list!=ge_pi_list->end(); ++it_ge_list) { 00098 convertor->setup_dependencies(*it_ge_list); 00099 } 00100 00101 log << "ge-code generation - end\n" << eolog; 00102 }
| ptr< func_data > lestes::backend_v2::workers::ge_generator::get_result | ( | ) | [virtual] |
Returns the function's data with generated body in ge-intercode.
Implements lestes::backend_v2::workers::worker_base.
Definition at line 107 of file ge_generator.cc.
References lestes::backend_v2::workers::worker_base::data_get().
00107 { 00108 return data_get(); 00109 }
| void lestes::backend_v2::workers::ge_generator::append_vector_to_list | ( | ptr< list< srp< ::lestes::backend_v2::intercode::ge_pi > > > | l, | |
| ptr< vector< srp< ::lestes::backend_v2::intercode::ge_pi > > > | v | |||
| ) |
Referenced by process().
| ptr< ge_generator > lestes::backend_v2::workers::ge_generator::create | ( | ptr< ::lestes::backend_v2::structs::func_data > | a__worker_base__data | ) | [static] |
First generated factory method for class ge_generator.
This factory method for class ge_generator takes values of all fields as arguments.
Definition at line 29 of file ge_generator.g.cc.
References ge_generator().
00030 { 00031 return ptr< ge_generator > ( new ge_generator(a__worker_base__data) ); 00032 }
| ptr< object::reflection_list > lestes::backend_v2::workers::ge_generator::reflection_get | ( | ) | const [virtual] |
for purposes of dumping
Reimplemented from lestes::backend_v2::workers::worker_base.
Definition at line 42 of file ge_generator.g.cc.
References lestes::std::list< T >::create(), reflection, and lestes::backend_v2::workers::worker_base::reflection_get().
00043 { 00044 if (!reflection) { 00045 typedef class_reflection::field_metadata md; 00046 typedef class_reflection::field_metadata_list mdlist; 00047 ptr<mdlist> mdl = mdlist::create(); 00048 reflection = reflection_list::create( worker_base::reflection_get() ); 00049 reflection->push_back( class_reflection::create( "ge_generator", mdl ) ); 00050 } 00051 return reflection; 00052 }
| ptr< object::field_list_list > lestes::backend_v2::workers::ge_generator::field_values_get | ( | ) | const [virtual] |
for purposes of dumping
Reimplemented from lestes::backend_v2::workers::worker_base.
Definition at line 54 of file ge_generator.g.cc.
References lestes::backend_v2::workers::worker_base::field_values_get().
00055 { 00056 ptr < field_list_list > result = worker_base::field_values_get(); 00057 return result; 00058 }
| void lestes::backend_v2::workers::ge_generator::gc_mark | ( | void | ) | [protected, virtual] |
Marking routine for class ge_generator.
Marking routine is used for garbage collection.
Reimplemented from lestes::backend_v2::workers::worker_base.
Definition at line 65 of file ge_generator.g.cc.
References lestes::backend_v2::workers::worker_base::gc_mark().
00066 { 00067 worker_base::gc_mark(); 00068 }
ptr< object::reflection_list > lestes::backend_v2::workers::ge_generator::reflection = reflection [static, private] |
Reimplemented from lestes::backend_v2::workers::worker_base.
Definition at line 86 of file ge_generator.g.hh.
Referenced by reflection_get().
1.5.1-20070107