00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #ifndef ipl_array_bread_write_INCLUDED
00042 #define ipl_array_bread_write_INCLUDED
00043
00044 #ifndef cxx_template_INCLUDED
00045 #include "cxx_template.h"
00046 #endif
00047 #ifndef cxx_hash_INCLUDED
00048 #include "cxx_hash.h"
00049 #endif
00050 #ifndef ipa_section_INCLUDED
00051 #include "ipa_section.h"
00052 #endif
00053
00054
00055 class SUMMARY_PROCEDURE;
00056 class SUMMARY_FILE_HEADER;
00057
00058
00059
00060
00061 typedef DYN_ARRAY<INT> INTEGER_ARRAY;
00062 typedef HASH_TABLE<UINT64, INTEGER_ARRAY*> TERM_HASH_TABLE;
00063
00064
00065 extern void
00066 Init_write_asections(MEM_POOL*);
00067
00068
00069
00070 extern void
00071 Map_asections(ARRAY_SUMMARY *summary, SUMMARY_PROCEDURE *p);
00072
00073
00074
00075
00076
00077 class ARRAY_SUMMARY_OUTPUT
00078 {
00079 private:
00080
00081
00082 MEM_POOL *_m;
00083
00084 TERM_ARRAY *_terms;
00085
00086 PROJECTED_ARRAY *_project_nodes;
00087
00088 PROJECTED_REGION_ARRAY *_projected_regions;
00089
00090
00091 ARRAY_OF_REGION_ARRAYS *_region_arrays;
00092
00093
00094 CFG_NODE_INFO_ARRAY *_cfg_nodes;
00095 IVAR_ARRAY *_ivars;
00096 LOOPINFO_ARRAY *_loopinfo_nodes;
00097 INT_ARRAY *_scalar_items;
00098 TERM_HASH_TABLE *_term_hash_table;
00099 INT offset_term, offset_projected_node, offset_scalars;
00100 INT offset_projected_region, offset_region, offset_cfg_node;
00101 INT offset_ivar, offset_loop_info;
00102 INT table_size;
00103
00104 public:
00105 ARRAY_SUMMARY_OUTPUT(MEM_POOL *m)
00106 {
00107 _m = m;
00108 _terms = CXX_NEW(TERM_ARRAY(m), m);
00109 _project_nodes = CXX_NEW(PROJECTED_ARRAY(m), m);
00110 _projected_regions = CXX_NEW(PROJECTED_REGION_ARRAY(m),
00111 m);
00112 _region_arrays = CXX_NEW(ARRAY_OF_REGION_ARRAYS(m), m);
00113 _cfg_nodes = CXX_NEW(CFG_NODE_INFO_ARRAY(m), m);
00114 _ivars = CXX_NEW(IVAR_ARRAY(m), m);
00115 _loopinfo_nodes = CXX_NEW(LOOPINFO_ARRAY(m), m);
00116 _scalar_items = CXX_NEW(INT_ARRAY(m), m);
00117 _term_hash_table = CXX_NEW(TERM_HASH_TABLE(200, m),m);
00118
00119 offset_term = offset_projected_node = offset_scalars = 0;
00120 offset_projected_region = offset_region = offset_cfg_node = 0;
00121 offset_ivar = offset_loop_info = 0;
00122
00123 };
00124
00125 TERM_ARRAY* Get_term_array() { return _terms;};
00126 PROJECTED_ARRAY* Get_projected_array()
00127 { return _project_nodes; };
00128 PROJECTED_REGION_ARRAY* Get_projected_region_array()
00129 { return _projected_regions;};
00130 ARRAY_OF_REGION_ARRAYS* Get_region_array()
00131 { return _region_arrays; };
00132 CFG_NODE_INFO_ARRAY *Get_cfg_node_array()
00133 { return _cfg_nodes;};
00134 IVAR_ARRAY *Get_ivar_array()
00135 { return _ivars;};
00136 INT_ARRAY *Get_scalar_array()
00137 { return _scalar_items;};
00138
00139 INT Get_term_offset() const { return offset_term;};
00140
00141 TERM *Get_term(INT i) {return &(*_terms)[i];};
00142 PROJECTED_NODE *Get_projected_node(INT i)
00143 {return &(*_project_nodes)[i];};
00144 PROJECTED_REGION *Get_projected_region(INT i)
00145 {return &(*_projected_regions)[i]; };
00146 REGION_ARRAYS* Get_region_array (INT i)
00147 {return &(*_region_arrays)[i]; };
00148 CFG_NODE_INFO* Get_cfg_node(INT i)
00149 { return &(*_cfg_nodes)[i]; };
00150 IVAR* Get_ivar(INT i) { return &(*_ivars)[i]; };
00151 LOOPINFO *Get_loopinfo(INT i)
00152 { return &(*_loopinfo_nodes)[i]; };
00153 SCALAR_INFO *Get_scalars(INT i) { return &(*_scalar_items)[i]; };
00154
00155 TERM_HASH_TABLE* Get_term_hash_table() { return _term_hash_table;};
00156
00157 INT Get_term_count() { return _terms->Lastidx(); };
00158 INT Get_projected_node_count() { return
00159 _project_nodes->Lastidx();};
00160 INT Get_projected_region_count() { return
00161 _projected_regions->Lastidx(); };
00162 INT Get_region_count() { return _region_arrays->Lastidx(); };
00163 INT Get_cfg_node_count() { return _cfg_nodes->Lastidx(); };
00164 INT Get_ivar_count() { return _ivars->Lastidx(); };
00165 INT Get_loopinfo_count() { return _loopinfo_nodes->Lastidx();};
00166 INT Get_scalars_count() { return _scalar_items->Lastidx();};
00167
00168 void Write_summary(struct output_file *fl,
00169 INT cur_sec_disp);
00170 void Trace(FILE *f, const void *sbase);
00171 void Trace(FILE *f);
00172
00173 void Print_ivar_array(FILE *f, INT size, IVAR *node);
00174 void Print_cfg_node_array(FILE *f, INT size, CFG_NODE_INFO* node);
00175 void Print_regions_array(FILE *f, INT size, REGION_ARRAYS* node);
00176 void Print_projected_region_array(FILE *f, INT size,PROJECTED_REGION *node);
00177 void Print_projected_array(FILE *f, INT size, PROJECTED_NODE* node);
00178 void Print_term_array(FILE *f, INT size, TERM *term, IVAR *ivar);
00179 void Print_loopinfo_array(FILE *f, INT size, LOOPINFO *loop_info);
00180 void Print_scalar_array(FILE *f, INT size, SCALAR_INFO* scalar);
00181 void Map_summary_info(ARRAY_SUMMARY *summary);
00182
00183
00184 INT Map_region_arrays(REGION_ARRAYS* r);
00185
00186 INT Map_projected_region(PROJECTED_REGION *proj_region);
00187 INT Map_proj_array(PROJECTED_ARRAY *p);
00188 INT Map_loop_info(LOOPINFO *l);
00189 void Map_term(TERM *t_in, TERM* t_out);
00190 void Map_ivar_array(IVAR_ARRAY* ivar);
00191
00192 void Update_array_sect_header(SUMMARY_FILE_HEADER *header_addr);
00193
00194
00195
00196
00197 INT Search_for_terms(LINEX *l);
00198 void Insert_terms(TERM* t,INT idx, INT count);
00199 UINT64 Get_key(TERM* t, INT num_terms);
00200
00201 };
00202
00203 extern ARRAY_SUMMARY_OUTPUT *Array_Summary_Output;
00204
00205 #endif
00206