Open64 (mfef90, whirl2f, and IR tools)  TAG: version-openad; SVN changeset: 916
wb_ipl_summary.cxx
Go to the documentation of this file.
00001 /*
00002 
00003   Copyright (C) 2000, 2001 Silicon Graphics, Inc.  All Rights Reserved.
00004 
00005   This program is free software; you can redistribute it and/or modify it
00006   under the terms of version 2 of the GNU General Public License as
00007   published by the Free Software Foundation.
00008 
00009   This program is distributed in the hope that it would be useful, but
00010   WITHOUT ANY WARRANTY; without even the implied warranty of
00011   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
00012 
00013   Further, this software is distributed without any warranty that it is
00014   free of the rightful claim of any third person regarding infringement 
00015   or the like.  Any license provided herein, whether implied or 
00016   otherwise, applies only to this software file.  Patent licenses, if 
00017   any, provided herein do not apply to combinations of this program with 
00018   other software, or any other product whatsoever.  
00019 
00020   You should have received a copy of the GNU General Public License along
00021   with this program; if not, write the Free Software Foundation, Inc., 59
00022   Temple Place - Suite 330, Boston MA 02111-1307, USA.
00023 
00024   Contact information:  Silicon Graphics, Inc., 1600 Amphitheatre Pky,
00025   Mountain View, CA 94043, or:
00026 
00027   http://www.sgi.com
00028 
00029   For further information regarding this notice, see:
00030 
00031   http://oss.sgi.com/projects/GenInfo/NoticeExplan
00032 
00033 */
00034 
00035 
00036 #include <sys/types.h>
00037 #include <elf.h>
00038 #include <ctype.h>
00039 #include "wn.h"
00040 #include "wn_map.h"
00041 #include "wn_util.h"
00042 #include <stdio.h>
00043 #include "wb_util.h"
00044 #include "dwarf_DST.h"
00045 #include "ipc_file.h"
00046 #include "ipa_summary.h"
00047 #include "opt_du.h" 
00048 #include "opt_alias_mgr.h"
00049 #include "dep_graph.h"
00050 #include "prompf.h"
00051 #include "wb_browser.h"
00052 #include "ipa_section_annot.h"
00053 #include "ipc_symtab_merge.h" 
00054 #include "ipl_summary.h" 
00055 #include "ipa_section.h" 
00056 
00057 //-----------------------------------------------------------------------
00058 // NAME: WB_BROWSER::Summary_Symbol()
00059 // CALL GRAPH BROWSER COMMAND: 'SS'
00060 // FUNCTION: Print info about i-th SUMMARY_SYMBOL.
00061 //-----------------------------------------------------------------------
00062 
00063 void WB_BROWSER::Summary_Symbol(FILE* fp, 
00064                                 INT symbol_index,
00065                                 BOOL is_list)
00066 { 
00067   if (Scalar_Summary() == NULL || symbol_index < 0 
00068       || symbol_index > Scalar_Summary()->Get_symbol_idx()) {
00069     Error_Cleanup();
00070     return; 
00071   } 
00072   SUMMARY_SYMBOL* ss = Scalar_Summary()->Get_symbol(symbol_index);
00073   char* name = ST_name(ss->St_idx());
00074   ss->WB_Print(fp, symbol_index, is_list, name, "",  Fancy_Level());
00075 } 
00076   
00077 //-----------------------------------------------------------------------
00078 // NAME: WB_BROWSER::Summary_Ivar()
00079 // CALL GRAPH BROWSER COMMAND: 'SI'
00080 // FUNCTION: Print info about IVARs.
00081 //-----------------------------------------------------------------------
00082 
00083 void WB_BROWSER::Summary_Ivar(FILE* fp, 
00084                               INT ivar_index)
00085 { 
00086   if (Array_Summary() == NULL || ivar_index < 0 
00087       || ivar_index >= Array_Summary()->Get_ivar_array_count()) {
00088     Error_Cleanup();
00089     return; 
00090   } 
00091   IVAR* ivar = Array_Summary()->Get_ivar_array(ivar_index);
00092   ivar->WB_Print(fp, ivar_index);
00093 }   
00094 
00095 //-----------------------------------------------------------------------
00096 // NAME: WB_BROWSER::Summary_Formal()
00097 // CALL GRAPH BROWSER COMMAND: 'SF'
00098 // FUNCTION: Print info about i-th SUMMARY_FORMAL.
00099 //-----------------------------------------------------------------------
00100 
00101 void WB_BROWSER::Summary_Formal(FILE* fp, 
00102                                 INT formal_index)
00103 { 
00104   if (Scalar_Summary() == NULL || formal_index < 0 
00105       || formal_index > Scalar_Summary()->Get_formal_idx()) {
00106     Error_Cleanup();
00107     return; 
00108   } 
00109   SUMMARY_FORMAL* sf = Scalar_Summary()->Get_formal(formal_index);
00110   INT symbol_index = sf->Get_symbol_index();
00111   SUMMARY_SYMBOL* ss = Scalar_Summary()->Get_symbol(symbol_index);
00112   char* name = ST_name(ss->St_idx());
00113   sf->WB_Print(fp, formal_index, name, "");
00114 } 
00115 
00116 //-----------------------------------------------------------------------
00117 // NAME: WB_BROWSER::Summary_Common()
00118 // CALL GRAPH BROWSER COMMAND: 'SC'
00119 // FUNCTION: Print info about i-th SUMMARY_COMMON.
00120 //-----------------------------------------------------------------------
00121 
00122 void WB_BROWSER::Summary_Common(FILE* fp, 
00123                                 INT common_index)
00124 { 
00125   if (Scalar_Summary() == NULL || common_index < 0 
00126       || common_index > Scalar_Summary()->Get_common_idx()) {
00127     Error_Cleanup();
00128     return; 
00129   } 
00130   SUMMARY_COMMON* sc = Scalar_Summary()->Get_common(common_index);
00131   sc->WB_Print(fp, common_index);
00132 } 
00133 
00134 //-----------------------------------------------------------------------
00135 // NAME: WB_BROWSER::Summary_Common_Shape()
00136 // CALL GRAPH BROWSER COMMAND: 'SK'
00137 // FUNCTION: Print info about i-th SUMMARY_COMMON_SHAPE.
00138 //-----------------------------------------------------------------------
00139 
00140 void WB_BROWSER::Summary_Common_Shape(FILE* fp, 
00141                                       INT common_shape_index)
00142 { 
00143   if (Scalar_Summary() == NULL || common_shape_index < 0 
00144       || common_shape_index > Scalar_Summary()->Get_common_shape_idx()) {
00145     Error_Cleanup();
00146     return; 
00147   } 
00148   SUMMARY_COMMON_SHAPE* sc = 
00149     Scalar_Summary()->Get_common_shape(common_shape_index);
00150   sc->WB_Print(fp, common_shape_index);
00151 } 
00152 
00153 //-----------------------------------------------------------------------
00154 // NAME: WB_BROWSER::Summary_Procedure()
00155 // CALL GRAPH BROWSER COMMAND: 'SP'
00156 // FUNCTION: Print info about i-th SUMMARY_PROCEDURE.
00157 //-----------------------------------------------------------------------
00158 
00159 void WB_BROWSER::Summary_Procedure(FILE* fp, 
00160                                    INT procedure_index)
00161 { 
00162   if (Scalar_Summary() == NULL || procedure_index < 0 
00163       || procedure_index > Scalar_Summary()->Get_procedure_idx()) {
00164     Error_Cleanup();
00165     return; 
00166   } 
00167   SUMMARY_PROCEDURE* sp = Scalar_Summary()->Get_procedure(procedure_index);
00168   INT symbol_index = sp->Get_symbol_index();
00169   SUMMARY_SYMBOL* ss = Scalar_Summary()->Get_symbol(symbol_index);
00170   char* name = ST_name(ss->St_idx());
00171   sp->WB_Print(fp, procedure_index, name, Fancy_Level());
00172 }  
00173 
00174 //-----------------------------------------------------------------------
00175 // NAME: WB_BROWSER::Summary_Global()
00176 // CALL GRAPH BROWSER COMMAND: 'SG'
00177 // FUNCTION: Print info about i-th SUMMARY_GLOBAL.
00178 //-----------------------------------------------------------------------
00179 
00180 void WB_BROWSER::Summary_Global(FILE* fp, 
00181                                 INT global_index)
00182 {
00183   if (Scalar_Summary() == NULL || global_index < 0 
00184       || global_index > Scalar_Summary()->Get_procedure_idx()) {
00185     Error_Cleanup();
00186     return; 
00187   } 
00188   SUMMARY_GLOBAL* sg = Scalar_Summary()->Get_global(global_index);
00189   sg->WB_Print(fp, global_index);
00190 }
00191 
00192 //-----------------------------------------------------------------------
00193 // NAME: WB_BROWSER::Summary_Callsite()
00194 // CALL GRAPH BROWSER COMMAND: 'SL'
00195 // FUNCTION: Print info about i-th SUMMARY_CALLSITE.
00196 //-----------------------------------------------------------------------
00197 
00198 void WB_BROWSER::Summary_Callsite(FILE* fp, 
00199                                   INT callsite_index)
00200 { 
00201   if (Scalar_Summary() == NULL || callsite_index < 0 
00202       || callsite_index > Scalar_Summary()->Get_callsite_idx()) {
00203     Error_Cleanup();
00204     return; 
00205   } 
00206   SUMMARY_CALLSITE* sc = Scalar_Summary()->Get_callsite(callsite_index);
00207   char* name = NULL; 
00208   if (!sc->Is_intrinsic() && !sc->Is_func_ptr()) {
00209     INT symbol_index = sc->Get_symbol_index();
00210     SUMMARY_SYMBOL* ss = Scalar_Summary()->Get_symbol(symbol_index);
00211     name = ST_name(ss->St_idx());
00212   } 
00213   sc->WB_Print(fp, callsite_index, name, "");
00214 }
00215 
00216 //-----------------------------------------------------------------------
00217 // NAME: WB_BROWSER::Summary_Control_Dependence()
00218 // CALL GRAPH BROWSER COMMAND: 'SD'
00219 // FUNCTION: Print info about i-th SUMMARY_CONTROL_DEPENDENCE.
00220 //-----------------------------------------------------------------------
00221 
00222 void WB_BROWSER::Summary_Control_Dependence(FILE* fp, 
00223                                             INT control_index)
00224 {
00225   if (Scalar_Summary() == NULL || control_index < 0 
00226       || control_index > Scalar_Summary()->Get_ctrl_dep_idx()) {
00227     Error_Cleanup();
00228     return; 
00229   } 
00230   SUMMARY_CONTROL_DEPENDENCE* sd 
00231     = Scalar_Summary()->Get_ctrl_dep(control_index);
00232   sd->WB_Print(fp, control_index);
00233 } 
00234 
00235 //-----------------------------------------------------------------------
00236 // NAME: WB_BROWSER::Summary_Actual()
00237 // CALL GRAPH BROWSER COMMAND: 'SA'
00238 // FUNCTION: Print info about i-th SUMMARY_ACTUAL.
00239 //-----------------------------------------------------------------------
00240 
00241 void WB_BROWSER::Summary_Actual(FILE* fp, 
00242                                 INT actual_index)
00243 {
00244   if (Scalar_Summary() == NULL || actual_index < 0 
00245       || actual_index > Scalar_Summary()->Get_actual_idx()) {
00246     Error_Cleanup();
00247     return; 
00248   } 
00249   SUMMARY_ACTUAL* sa = Scalar_Summary()->Get_actual(actual_index);
00250   char* name = NULL; 
00251   if (sa->Get_symbol_index() != -1) {
00252     INT symbol_index = sa->Get_symbol_index();
00253     SUMMARY_SYMBOL* ss = Scalar_Summary()->Get_symbol(symbol_index);
00254     name = ST_name(ss->St_idx());
00255   } 
00256   sa->WB_Print(fp, actual_index, name, "");
00257 }  
00258 
00259 //-----------------------------------------------------------------------
00260 // NAME: WB_BROWSER::Summary_Value()
00261 // CALL GRAPH BROWSER COMMAND: 'SV'
00262 // FUNCTION: Print info about i-th SUMMARY_VALUE.
00263 //-----------------------------------------------------------------------
00264 
00265 void WB_BROWSER::Summary_Value(FILE* fp, 
00266                                INT value_index)
00267 { 
00268   if (Scalar_Summary() == NULL || value_index < 0 
00269       || value_index > Scalar_Summary()->Get_value_idx()) {
00270     Error_Cleanup();
00271     return; 
00272   } 
00273   SUMMARY_VALUE* sv = Scalar_Summary()->Get_value(value_index);
00274   sv->WB_Print(fp, value_index);
00275 }
00276   
00277 //-----------------------------------------------------------------------
00278 // NAME: WB_BROWSER::Summary_Cfg_Node()
00279 // CALL GRAPH BROWSER COMMAND: 'Sa'
00280 // FUNCTION: Print info about i-th CFG_NODE_INFO.
00281 //-----------------------------------------------------------------------
00282 
00283 void WB_BROWSER::Summary_Cfg_Node(FILE* fp, 
00284                                   INT cfg_index)
00285 { 
00286   if (Array_Summary() == NULL || cfg_index < 0 
00287       || cfg_index >= Array_Summary()->Get_cfg_node_array_count()) {
00288     Error_Cleanup();
00289     return; 
00290   } 
00291   CFG_NODE_INFO* cfg = Array_Summary()->Get_cfg_node_array(cfg_index);
00292   cfg->WB_Print(fp, cfg_index);
00293 } 
00294 
00295 //-----------------------------------------------------------------------
00296 // NAME: WB_BROWSER::Summary_Region()
00297 // CALL GRAPH BROWSER COMMAND: 'SR'
00298 // FUNCTION: Print info about i-th REGION_ARRAYS.
00299 //-----------------------------------------------------------------------
00300 
00301 void WB_BROWSER::Summary_Region(FILE* fp, 
00302                                 INT region_index)
00303 { 
00304   if (Array_Summary() == NULL || region_index < 0 
00305       || region_index >= Array_Summary()->Get_region_array_count()) {
00306     Error_Cleanup();
00307     return; 
00308   } 
00309   REGION_ARRAYS* ra = Array_Summary()->Get_region_array(region_index);
00310   INT symbol_index = ra->Get_sym_id();
00311   SUMMARY_SYMBOL* ss = Scalar_Summary()->Get_symbol(symbol_index);
00312   char* name = ST_name(ss->St_idx());
00313   ra->WB_Print(fp, region_index, name, "");
00314 } 
00315 
00316 //-----------------------------------------------------------------------
00317 // NAME: WB_BROWSER::Summary_Region()
00318 // CALL GRAPH BROWSER COMMAND: 'Sr'
00319 // FUNCTION: Print info about i-th PROJECTED_REGION.
00320 //-----------------------------------------------------------------------
00321 
00322 void WB_BROWSER::Summary_Projected_Region(FILE* fp, 
00323                                           INT proj_region_index)
00324 { 
00325   if (Array_Summary() == NULL || proj_region_index < 0 
00326       || proj_region_index 
00327       >= Array_Summary()->Get_projected_region_array_count()) {
00328     Error_Cleanup();
00329     return; 
00330   } 
00331   PROJECTED_REGION* pr 
00332     = Array_Summary()->Get_projected_region_array(proj_region_index);
00333   pr->WB_Print(fp, proj_region_index);
00334 }
00335 
00336 //-----------------------------------------------------------------------
00337 // NAME: WB_BROWSER::Summary_Projected_Node()
00338 // CALL GRAPH BROWSER COMMAND: 'Sn'
00339 // FUNCTION: Print info about i-th PROJECTED_NODE.
00340 //-----------------------------------------------------------------------
00341 
00342 void WB_BROWSER::Summary_Projected_Node(FILE* fp, 
00343                                         INT proj_node_index)
00344 { 
00345   if (Array_Summary() == NULL || proj_node_index < 0 
00346       || proj_node_index >= Array_Summary()->Get_projected_array_count()) {
00347     Error_Cleanup();
00348     return; 
00349   } 
00350   PROJECTED_NODE* pn 
00351     = Array_Summary()->Get_projected_array(proj_node_index);
00352   pn->WB_Print(fp, proj_node_index);
00353 } 
00354 
00355 //-----------------------------------------------------------------------
00356 // NAME: WB_BROWSER::Summary_Term()
00357 // CALL GRAPH BROWSER COMMAND: 'St'
00358 // FUNCTION: Print info about i-th TERM.
00359 //-----------------------------------------------------------------------
00360 
00361 void WB_BROWSER::Summary_Term(FILE* fp, 
00362                               INT term_index)
00363 { 
00364   if (Array_Summary() == NULL || term_index < 0 
00365       || term_index >= Array_Summary()->Get_term_array_count()) {
00366     Error_Cleanup();
00367     return;
00368   }
00369   TERM* tm = Array_Summary()->Get_term_array(term_index);
00370   tm->WB_Print(fp, term_index);
00371 }
00372 
00373 //-----------------------------------------------------------------------
00374 // NAME: WB_BROWSER::Summary_Loop_Info()
00375 // CALL GRAPH BROWSER COMMAND: 'Sl'
00376 // FUNCTION: Print info about i-th LOOPINFO.
00377 //-----------------------------------------------------------------------
00378 
00379 void WB_BROWSER::Summary_Loop_Info(FILE* fp, 
00380                                    INT loop_info_index)
00381 { 
00382   if (Array_Summary() == NULL || loop_info_index < 0 
00383       || loop_info_index >= Array_Summary()->Get_loopinfo_array_count()) {
00384     Error_Cleanup();
00385     return;
00386   }
00387   LOOPINFO* li = Array_Summary()->Get_loopinfo_array(loop_info_index);
00388   li->WB_Print(fp, loop_info_index);
00389 } 
00390 
00391 //-----------------------------------------------------------------------
00392 // NAME: WB_BROWSER::Summary_Phi()
00393 // CALL GRAPH BROWSER COMMAND: 'Sp'
00394 // FUNCTION: Print info about i-th SUMMARY_PHI.
00395 //-----------------------------------------------------------------------
00396 
00397 void WB_BROWSER::Summary_Phi(FILE* fp, 
00398                              INT phi_index)
00399 { 
00400   if (Scalar_Summary() == NULL || phi_index < 0 
00401       || phi_index > Scalar_Summary()->Get_phi_idx()) {
00402     Error_Cleanup();
00403     return; 
00404   } 
00405   SUMMARY_PHI* sp = Scalar_Summary()->Get_phi(phi_index);
00406   sp->WB_Print(fp, phi_index);
00407 } 
00408 
00409 //-----------------------------------------------------------------------
00410 // NAME: WB_BROWSER::Summary_Chi()
00411 // CALL GRAPH BROWSER COMMAND: 'Sx'
00412 // FUNCTION: Print info about i-th SUMMARY_CHI.
00413 //-----------------------------------------------------------------------
00414 
00415 void WB_BROWSER::Summary_Chi(FILE* fp, 
00416                              INT chi_index)
00417 { 
00418   if (Scalar_Summary() == NULL || chi_index < 0 
00419       || chi_index > Scalar_Summary()->Get_chi_idx()) {
00420     Error_Cleanup();
00421     return; 
00422   } 
00423   SUMMARY_CHI* sc = Scalar_Summary()->Get_chi(chi_index);
00424   char* name = NULL; 
00425   if (sc->Get_symbol_index() != -1) { 
00426     INT symbol_index = sc->Get_symbol_index();
00427     SUMMARY_SYMBOL* ss = Scalar_Summary()->Get_symbol(symbol_index);
00428     name = ST_name(ss->St_idx());
00429   } 
00430   sc->WB_Print(fp, chi_index, name, "");
00431 } 
00432 
00433 //-----------------------------------------------------------------------
00434 // NAME: WB_BROWSER::Summary_Expr()
00435 // CALL GRAPH BROWSER COMMAND: 'SE'
00436 // FUNCTION: Print info about i-th SUMMARY_EXPR.
00437 //-----------------------------------------------------------------------
00438 
00439 void WB_BROWSER::Summary_Expr(FILE* fp, 
00440                               INT expr_index)
00441 { 
00442   if (Scalar_Summary() == NULL || expr_index < 0 
00443       || expr_index > Scalar_Summary()->Get_expr_idx()) {
00444     Error_Cleanup();
00445     return; 
00446   } 
00447   SUMMARY_EXPR* se = Scalar_Summary()->Get_expr(expr_index);
00448   se->WB_Print(fp, expr_index);
00449 } 
00450 
00451 //-----------------------------------------------------------------------
00452 // NAME: WB_BROWSER::Summary_Stid()
00453 // CALL GRAPH BROWSER COMMAND: 'SX'
00454 // FUNCTION: Print info about i-th SUMMARY_STID.
00455 //-----------------------------------------------------------------------
00456 
00457 void WB_BROWSER::Summary_Stid(FILE* fp, 
00458                               INT stid_index)
00459 
00460 {
00461   if (Scalar_Summary() == NULL || stid_index < 0 
00462       || stid_index > Scalar_Summary()->Get_global_stid_idx()) {
00463     Error_Cleanup();
00464     return; 
00465   } 
00466   SUMMARY_STID* stid = Scalar_Summary()->Get_global_stid(stid_index);
00467   char* name = NULL; 
00468   if (!stid->Is_array_assignment()) { 
00469     INT symbol_index = stid->Get_symbol_index();
00470     SUMMARY_SYMBOL* ss = Scalar_Summary()->Get_symbol(symbol_index);
00471     name = ST_name(ss->St_idx());
00472   } 
00473   stid->WB_Print(fp, stid_index, name, "");
00474 } 
00475 
00476 //-----------------------------------------------------------------------
00477 // NAME: WB_BROWSER::Summary_Stmt()
00478 // CALL GRAPH BROWSER COMMAND: 'SY'
00479 // FUNCTION: Print info about i-th SUMMARY_STMT.
00480 //-----------------------------------------------------------------------
00481 
00482 void WB_BROWSER::Summary_Stmt(FILE* fp, 
00483                               INT stmt_index)
00484 { 
00485   if (Scalar_Summary() == NULL || stmt_index < 0 
00486       || stmt_index > Scalar_Summary()->Get_stmt_idx()) {
00487     Error_Cleanup();
00488     return; 
00489   } 
00490   SUMMARY_STMT* stmt = Scalar_Summary()->Get_stmt(stmt_index);
00491   char* name = NULL; 
00492   if (stmt->Is_var()) { 
00493     INT symbol_index = stmt->Get_var_index();
00494     SUMMARY_SYMBOL* ss = Scalar_Summary()->Get_symbol(symbol_index);
00495     name = ST_name(ss->St_idx());
00496   } 
00497   stmt->WB_Print(fp, stmt_index, name, "");
00498 } 
00499 
00500 //-----------------------------------------------------------------------
00501 // NAME: WB_BROWSER::Summary_Feedback()
00502 // CALL GRAPH BROWSER COMMAND: 'Sf'
00503 // FUNCTION: Print info about i-th SUMMARY_FEEDBACK.
00504 //-----------------------------------------------------------------------
00505 
00506 void WB_BROWSER::Summary_Feedback(FILE* fp, 
00507                                   INT feedback_index)
00508 {
00509   if (Scalar_Summary() == NULL || feedback_index < 0 
00510       || feedback_index > Scalar_Summary()->Get_feedback_idx()) {
00511     Error_Cleanup();
00512     return; 
00513   } 
00514   SUMMARY_FEEDBACK* sf = Scalar_Summary()->Get_feedback(feedback_index);
00515   sf->WB_Print(fp, feedback_index);
00516 } 
00517 
00518 //-----------------------------------------------------------------------
00519 // NAME: WB_BROWSER::Summary_Scalar_Command()
00520 // FUNCTION: Return TRUE if the character 'ch' represents a valid scalar 
00521 //   summary command, returns FALSE otherwise. 
00522 //-----------------------------------------------------------------------
00523 
00524 BOOL WB_BROWSER::Summary_Scalar_Command(char ch)
00525 { 
00526   switch (ch) { 
00527   case 'S':
00528   case 'F':
00529   case 'G':
00530   case 'A':
00531   case 'V':
00532   case 'C':
00533   case 'K':
00534   case 'D':
00535   case 'L':
00536   case 'p': 
00537   case 'x': 
00538   case 'E':  
00539   case 'X': 
00540   case 'Y': 
00541   case 'f': 
00542   case 'P':
00543     return TRUE;
00544   default: 
00545     return FALSE;
00546   } 
00547 } 
00548 
00549 //-----------------------------------------------------------------------
00550 // NAME: WB_BROWSER::Summary_Array_Command()
00551 // FUNCTION: Return TRUE if the character 'ch' represents a valid array
00552 //   summary command, returns FALSE otherwise. 
00553 //-----------------------------------------------------------------------
00554 
00555 BOOL WB_BROWSER::Summary_Array_Command(char ch)
00556 { 
00557   switch (ch) { 
00558   case 'I': 
00559   case 'J':
00560   case 'a':
00561   case 's':
00562   case 'R': 
00563   case 'r': 
00564   case 'n':
00565   case 't':
00566   case 'l': 
00567     return TRUE;
00568   default: 
00569     return FALSE;
00570   } 
00571 } 
00572 
00573 //-----------------------------------------------------------------------
00574 // NAME: WB_BROWSER::Summary_Valid_Command()
00575 // FUNCTION: Return TRUE if the character 'ch' represents a valid summary 
00576 //   command, returns FALSE otherwise. 
00577 //-----------------------------------------------------------------------
00578 
00579 BOOL WB_BROWSER::Summary_Valid_Command(char ch)
00580 { 
00581   return (Summary_Scalar_Command(ch) || Summary_Array_Command(ch));
00582 } 
00583 
00584 //-----------------------------------------------------------------------
00585 // NAME: WB_BROWSER::Summary_Size()
00586 // FUNCTION: Return the size of the summary associated with the character
00587 //   'ch' and current IPA_NODE.
00588 //-----------------------------------------------------------------------
00589 
00590 INT WB_BROWSER::Summary_Size(char ch)
00591 { 
00592   switch (ch) { 
00593   case 'S':
00594     return Scalar_Summary()->Get_symbol_idx() + 1;
00595   case 'I':
00596     return Array_Summary()->Get_ivar_array_count();
00597   case 'F':
00598     return Scalar_Summary()->Get_formal_idx() + 1;
00599   case 'G':
00600     return Scalar_Summary()->Get_global_idx() + 1;
00601   case 'A': 
00602     return Scalar_Summary()->Get_actual_idx() + 1;
00603   case 'V': 
00604     return Scalar_Summary()->Get_value_idx() + 1;
00605   case 'C': 
00606     return Scalar_Summary()->Get_common_idx() + 1;
00607   case 'K': 
00608     return Scalar_Summary()->Get_common_shape_idx() + 1;
00609   case 'D': 
00610     return Scalar_Summary()->Get_ctrl_dep_idx() + 1;
00611   case 'L': 
00612     return Scalar_Summary()->Get_callsite_idx() + 1;
00613   case 'a': 
00614     return Array_Summary()->Get_cfg_node_array_count();
00615   case 'R': 
00616     return Array_Summary()->Get_region_array_count();
00617   case 'r': 
00618     return Array_Summary()->Get_projected_region_array_count();
00619   case 'n': 
00620     return Array_Summary()->Get_projected_array_count();
00621   case 't': 
00622     return Array_Summary()->Get_term_array_count();
00623   case 'l': 
00624     return Array_Summary()->Get_loopinfo_array_count();
00625   case 'p': 
00626     return Scalar_Summary()->Get_phi_idx() + 1;
00627   case 'x': 
00628     return Scalar_Summary()->Get_chi_idx() + 1;
00629   case 'T': 
00630     return 0; // no more tcon in summary info. 
00631   case 'E': 
00632     return Scalar_Summary()->Get_expr_idx() + 1;
00633   case 'X': 
00634     return Scalar_Summary()->Get_global_stid_idx() + 1;
00635   case 'Y': 
00636     return Scalar_Summary()->Get_stmt_idx() + 1;
00637   case 'f': 
00638     return Scalar_Summary()->Get_feedback_idx() + 1; 
00639   case 'P': 
00640     return Scalar_Summary()->Get_procedure_idx() + 1;
00641   default:
00642     FmtAssert(FALSE, ("WB_BROWSER::Summary_Size(): Unexpected command"));
00643     return -1; 
00644   }
00645 } 
00646 
00647 //-----------------------------------------------------------------------
00648 // NAME: WB_BROWSER::Summary_Single()
00649 // FUNCTION: Print summary info the 'index'-th entry in the summary 
00650 //   indicated by character 'ch'.  
00651 //-----------------------------------------------------------------------
00652 
00653 void WB_BROWSER::Summary_Single(FILE* fp, 
00654                                 char ch, 
00655                                 INT index,
00656                                 BOOL is_list)
00657 { 
00658   switch (ch) {
00659   case 'S':
00660     Summary_Symbol(fp, index, is_list);
00661     break;
00662   case 'I':
00663     Summary_Ivar(fp, index);
00664     break;
00665   case 'F':
00666     Summary_Formal(fp, index);
00667     break; 
00668   case 'G':
00669     Summary_Global(fp, index);
00670     break;
00671   case 'A': 
00672     Summary_Actual(fp, index);
00673     break;
00674   case 'V': 
00675     Summary_Value(fp, index);
00676     break; 
00677   case 'C': 
00678     Summary_Common(fp, index);
00679     break; 
00680   case 'K': 
00681     Summary_Common_Shape(fp, index); 
00682     break; 
00683   case 'D': 
00684     Summary_Control_Dependence(fp, index);
00685     break; 
00686   case 'L': 
00687     Summary_Callsite(fp, index); 
00688     break;
00689   case 'a': 
00690     Summary_Cfg_Node(fp, index);
00691     break; 
00692   case 'R': 
00693     Summary_Region(fp, index);
00694     break; 
00695   case 'r': 
00696     Summary_Projected_Region(fp, index);
00697     break; 
00698   case 'n':
00699     Summary_Projected_Node(fp, index);
00700     break; 
00701   case 't':
00702     Summary_Term(fp, index);
00703     break; 
00704   case 'l': 
00705     Summary_Loop_Info(fp, index);
00706     break; 
00707   case 'p': 
00708     Summary_Phi(fp, index); 
00709     break;
00710   case 'x': 
00711     Summary_Chi(fp, index);
00712     break;
00713   case 'T': 
00714     break; // no more tcon in summary info. 
00715   case 'X': 
00716     Summary_Stid(fp, index);
00717     break; 
00718   case 'Y': 
00719     Summary_Stmt(fp, index);
00720     break; 
00721   case 'E':
00722     Summary_Expr(fp, index);
00723     break;
00724   case 'f': 
00725     Summary_Feedback(fp, index);
00726     break; 
00727   case 'P': 
00728     Summary_Procedure(fp, index);
00729     break;
00730   default:
00731     FmtAssert(FALSE, ("WB_BROWSER::Summary_Single(): Unexpected command"));
00732     break; 
00733   }
00734 }
00735 
00736 //-----------------------------------------------------------------------
00737 // NAME: WB_BROWSER::Summary()
00738 // CALL GRAPH BROWSER COMMAND: 'S'
00739 // FUNCTION: Print summary info at this node
00740 //-----------------------------------------------------------------------
00741 
00742 void WB_BROWSER::Summary(FILE* fp)
00743 {
00744   Set_Subcommand('~');
00745   char ch = Buffer().Scan_Character();
00746   if (Summary_Valid_Command(ch)) { 
00747     if (Summary_Scalar_Command(ch) && Scalar_Summary() == NULL
00748         || Summary_Array_Command(ch) && Array_Summary() == NULL) {
00749       Error_Cleanup();
00750       return; 
00751     }  
00752     INT index = -1;
00753     INT count = Summary_Size(ch);
00754     if (Buffer().Is('[')) { 
00755       Buffer().Scan_Character();
00756       INT low_index = -1;
00757       Buffer().Scan_Integer(&low_index);
00758       if (low_index < 0 || low_index >= count) {
00759         Error_Cleanup();
00760         return; 
00761       }  
00762       char separator = Buffer().Scan_Character();
00763       switch (separator) { 
00764       case ':': {
00765         INT local_count = -1;
00766         Buffer().Scan_Integer(&local_count);
00767         if (local_count < 0 || local_count > count) {
00768           Error_Cleanup(); 
00769           return; 
00770         } 
00771         for (INT i = low_index; i < low_index + local_count; i++)
00772           Summary_Single(fp, ch, i, TRUE);  
00773         break;
00774       }
00775       case '-': {
00776         INT high_index = -1;
00777         Buffer().Scan_Integer(&high_index);
00778         if (high_index < low_index || high_index > count) {
00779           Error_Cleanup(); 
00780           return; 
00781         } 
00782         for (INT i = low_index; i <= high_index; i++)
00783           Summary_Single(fp, ch, i, TRUE);  
00784         break; 
00785       }
00786       default: 
00787         Error_Cleanup();
00788         return; 
00789       }  
00790       Buffer().Skip_Chars(1);
00791     } else if (Buffer().Is_Integer()) { 
00792       Buffer().Scan_Integer(&index);
00793       if (index < 0 || index >= count) {
00794         Error_Cleanup();
00795         return;
00796       }
00797       Summary_Single(fp, ch, index, FALSE); 
00798     } else {   
00799       for (INT i = 0; i < count; i++)
00800         Summary_Single(fp, ch, i, TRUE);
00801     } 
00802   } else if (ch == '=') { 
00803     fprintf(stdout, "Summary Locate Not Implemented\n");
00804     Buffer().Pushback_Character();
00805   } else if (ch == 'H') { 
00806     Help();
00807   } else if (ch == '\n') { 
00808     fprintf(stdout, "Missing character\n");
00809     Buffer().Pushback_Character();
00810   } else { 
00811     fprintf(stdout, "Bad character: %c\n", ch);
00812   } 
00813   Reset_Subcommand();
00814 } 
00815 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines