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 #define __STDC_LIMIT_MACROS
00041 #include <stdint.h>
00042 #include <sys/types.h>
00043 #if defined(BUILD_OS_DARWIN)
00044 #include <darwin_elf.h>
00045 #else
00046 #include <elf.h>
00047 #endif
00048 #include <ctype.h>
00049 #include "wn.h"
00050 #include "wn_map.h"
00051 #include "wn_util.h"
00052 #include <stdio.h>
00053 #include "wb_util.h"
00054 #include "dwarf_DST.h"
00055 #include "ipc_file.h"
00056 #include "ipa_summary.h"
00057 #include "cg_browser.h"
00058 #include "ipa_section_annot.h"
00059 #include "ipc_symtab_merge.h"
00060
00061
00062
00063
00064
00065
00066
00067 void CG_BROWSER::Summary_Symbol(FILE* fp,
00068 INT symbol_index,
00069 BOOL is_list)
00070 {
00071 SUMMARY_SYMBOL* symbol_array = IPA_get_symbol_array(Cnode());
00072 SUMMARY_SYMBOL* ss = &symbol_array[symbol_index];
00073 char* func_name = NULL;
00074 char* name = Symbol_Name(symbol_index, &func_name);
00075 ss->WB_Print(fp, symbol_index, is_list, name, func_name, Fancy_Level());
00076 }
00077
00078
00079
00080
00081
00082
00083
00084 void CG_BROWSER::Summary_Ivar(FILE* fp,
00085 INT ivar_index)
00086 {
00087 INT32 ivar_count;
00088 IVAR* ivar = IPA_get_ivar_array(Cnode(), ivar_count) + ivar_index;
00089 ivar->WB_Print(fp, ivar_index);
00090 }
00091
00092
00093
00094
00095
00096
00097
00098 void CG_BROWSER::Summary_Formal(FILE* fp,
00099 INT formal_index)
00100 {
00101 SUMMARY_FORMAL* formal_array = IPA_get_formal_array(Cnode());
00102 SUMMARY_FORMAL* sf = &formal_array[formal_index];
00103 char* func_name = NULL;
00104 char* name = Symbol_Name(sf->Get_symbol_index(), &func_name);
00105 sf->WB_Print(fp, formal_index, name, func_name);
00106 }
00107
00108
00109
00110
00111
00112
00113
00114 void CG_BROWSER::Summary_Common(FILE* fp,
00115 INT common_index)
00116 {
00117 SUMMARY_COMMON* common_array = IPA_get_common_array(Cnode());
00118 SUMMARY_COMMON* sc = &common_array[common_index];
00119 sc->WB_Print(fp, common_index);
00120 }
00121
00122
00123
00124
00125
00126
00127
00128 void CG_BROWSER::Summary_Common_Shape(FILE* fp,
00129 INT common_shape_index)
00130 {
00131 SUMMARY_COMMON_SHAPE* common_shape_array
00132 = IPA_get_common_shape_array(Cnode());
00133 SUMMARY_COMMON_SHAPE* scs = &common_shape_array[common_shape_index];
00134 scs->WB_Print(fp, common_shape_index);
00135 }
00136
00137
00138
00139
00140
00141
00142
00143 void CG_BROWSER::Summary_Procedure(FILE* fp,
00144 INT procedure_index)
00145 {
00146 SUMMARY_PROCEDURE* procedure_array = IPA_get_procedure_array(Cnode());
00147 SUMMARY_PROCEDURE* sp = &procedure_array[procedure_index];
00148 INT symbol_index = sp->Get_symbol_index();
00149 sp->WB_Print(fp, procedure_index, Symbol_Name(symbol_index), Fancy_Level());
00150 }
00151
00152
00153
00154
00155
00156
00157
00158 void CG_BROWSER::Summary_Global(FILE* fp,
00159 INT global_index)
00160 {
00161 SUMMARY_GLOBAL* global_array = IPA_get_global_array(Cnode());
00162 SUMMARY_GLOBAL* sg = &global_array[global_index];
00163 sg->WB_Print(fp, global_index);
00164 }
00165
00166
00167
00168
00169
00170
00171
00172 void CG_BROWSER::Summary_Callsite(FILE* fp,
00173 INT callsite_index)
00174 {
00175 SUMMARY_CALLSITE* callsite_array = IPA_get_callsite_array(Cnode());
00176 SUMMARY_CALLSITE* sc = &callsite_array[callsite_index];
00177 char* func_name = NULL;
00178 char* name = NULL;
00179 if (!sc->Is_intrinsic() && !sc->Is_func_ptr())
00180 name = Symbol_Name(sc->Get_symbol_index(), &func_name);
00181 sc->WB_Print(fp, callsite_index, name, func_name);
00182 }
00183
00184
00185
00186
00187
00188
00189
00190 void CG_BROWSER::Summary_Control_Dependence(FILE* fp,
00191 INT control_index)
00192 {
00193 SUMMARY_CONTROL_DEPENDENCE* control_array
00194 = IPA_get_ctrl_dep_array(Cnode());
00195 SUMMARY_CONTROL_DEPENDENCE* sc = &control_array[control_index];
00196 sc->WB_Print(fp, control_index);
00197 }
00198
00199
00200
00201
00202
00203
00204
00205 void CG_BROWSER::Summary_Actual(FILE* fp,
00206 INT actual_index)
00207 {
00208 SUMMARY_ACTUAL* actual_array = IPA_get_actual_array(Cnode());
00209 SUMMARY_ACTUAL* aa = &actual_array[actual_index];
00210 char* func_name = NULL;
00211 char* name = NULL;
00212 if (aa->Get_symbol_index() != -1)
00213 name = Symbol_Name(aa->Get_symbol_index(), &func_name);
00214 aa->WB_Print(fp, actual_index, name, func_name);
00215 }
00216
00217
00218
00219
00220
00221
00222
00223 void CG_BROWSER::Summary_Value(FILE* fp,
00224 INT value_index)
00225 {
00226 SUMMARY_VALUE* value_array = IPA_get_value_array(Cnode());
00227 SUMMARY_VALUE* sv = &value_array[value_index];
00228 sv->WB_Print(fp, value_index);
00229 }
00230
00231
00232
00233
00234
00235
00236
00237 void CG_BROWSER::Summary_Cfg_Node(FILE* fp,
00238 INT cfg_index)
00239 {
00240 CFG_NODE_INFO* cfg_array = IPA_get_cfg_node_array(Cnode());
00241 CFG_NODE_INFO* cfg = &cfg_array[cfg_index];
00242 cfg->WB_Print(fp, cfg_index);
00243 }
00244
00245
00246
00247
00248
00249
00250
00251 void CG_BROWSER::Summary_Scalar(FILE* fp,
00252 INT scalar_index)
00253 {
00254 SCALAR_INFO* scalar_array = IPA_get_scalar_array(Cnode());
00255 SCALAR_INFO* si = &scalar_array[scalar_index];
00256 char* func_name = NULL;
00257 char* name = Symbol_Name(si->Get_id(), &func_name);
00258 si->WB_Print(fp, scalar_index, name, func_name);
00259 }
00260
00261
00262
00263
00264
00265
00266
00267 void CG_BROWSER::Summary_Region(FILE* fp,
00268 INT region_index)
00269 {
00270 REGION_ARRAYS* region_array = IPA_get_region_array(Cnode());
00271 REGION_ARRAYS* ra = ®ion_array[region_index];
00272 char* func_name = NULL;
00273 char* name = Symbol_Name(ra->Get_sym_id(), &func_name);
00274 ra->WB_Print(fp, region_index, name, func_name);
00275 }
00276
00277
00278
00279
00280
00281
00282
00283 void CG_BROWSER::Summary_Projected_Region(FILE* fp,
00284 INT proj_region_index)
00285 {
00286 PROJECTED_REGION* proj_region_array
00287 = IPA_get_proj_region_array(Cnode());
00288 PROJECTED_REGION* pr = &proj_region_array[proj_region_index];
00289 pr->WB_Print(fp, proj_region_index);
00290 }
00291
00292
00293
00294
00295
00296
00297
00298 void CG_BROWSER::Summary_Projected_Node(FILE* fp,
00299 INT proj_node_index)
00300 {
00301 PROJECTED_NODE* proj_node_array
00302 = IPA_get_projected_node_array(Cnode());
00303 PROJECTED_NODE* pn = &proj_node_array[proj_node_index];
00304 pn->WB_Print(fp, proj_node_index);
00305 }
00306
00307
00308
00309
00310
00311
00312
00313 void CG_BROWSER::Summary_Term(FILE* fp,
00314 INT term_index)
00315 {
00316 TERM* term_array = IPA_get_term_array(Cnode());
00317 TERM* tm = &term_array[term_index];
00318 tm->WB_Print(fp, term_index);
00319 }
00320
00321
00322
00323
00324
00325
00326
00327 void CG_BROWSER::Summary_Loop_Info(FILE* fp,
00328 INT loop_info_index)
00329 {
00330 LOOPINFO* loopinfo_array = IPA_get_loopinfo_array(Cnode());
00331 LOOPINFO* li = &loopinfo_array[loop_info_index];
00332 li->WB_Print(fp, loop_info_index);
00333 }
00334
00335
00336
00337
00338
00339
00340
00341 void CG_BROWSER::Summary_Phi(FILE* fp,
00342 INT phi_index)
00343 {
00344 SUMMARY_PHI* phi_array = IPA_get_phi_array(Cnode());
00345 SUMMARY_PHI* phi = &phi_array[phi_index];
00346 phi->WB_Print(fp, phi_index);
00347 }
00348
00349
00350
00351
00352
00353
00354
00355 void CG_BROWSER::Summary_Chi(FILE* fp,
00356 INT chi_index)
00357 {
00358 SUMMARY_CHI* chi_array = IPA_get_chi_array(Cnode());
00359 SUMMARY_CHI* chi = &chi_array[chi_index];
00360 char* func_name = NULL;
00361 char* name = NULL;
00362 if (chi->Get_symbol_index() != -1)
00363 name = Symbol_Name(chi->Get_symbol_index(), &func_name);
00364 chi->WB_Print(fp, chi_index, name, func_name);
00365 }
00366
00367
00368
00369
00370
00371
00372 void CG_BROWSER::Summary_Expr_Node(FILE* fp,
00373 SUMMARY_EXPR* expr,
00374 INT kid)
00375 {
00376 expr->Node(fp, kid);
00377 }
00378
00379
00380
00381
00382
00383
00384
00385 void CG_BROWSER::Summary_Expr(FILE* fp,
00386 INT expr_index)
00387 {
00388 SUMMARY_EXPR* expr_array = IPA_get_expr_array(Cnode());
00389 SUMMARY_EXPR* expr = &expr_array[expr_index];
00390 expr->WB_Print(fp, expr_index);
00391 }
00392
00393
00394
00395
00396
00397
00398
00399 void CG_BROWSER::Summary_Stid(FILE* fp,
00400 INT stid_index)
00401
00402 {
00403 SUMMARY_STID* stid_array = IPA_get_stid_array(Cnode());
00404 SUMMARY_STID* stid = &stid_array[stid_index];
00405 fprintf(fp, "STID[%d]: ", stid_index);
00406 char* func_name = NULL;
00407 char* name = Symbol_Name(stid->Get_symbol_index(), &func_name);
00408 stid->WB_Print(fp, stid_index, name, func_name);
00409 }
00410
00411
00412
00413
00414
00415
00416
00417 void CG_BROWSER::Summary_Stmt(FILE* fp,
00418 INT stmt_index)
00419 {
00420 SUMMARY_STMT* stmt_array = IPA_get_stmt_array(Cnode());
00421 SUMMARY_STMT* stmt = &stmt_array[stmt_index];
00422 char* func_name = NULL;
00423 char* name = NULL;
00424 if (stmt->Is_var())
00425 name = Symbol_Name(stmt->Get_var_index(), &func_name);
00426 stmt->WB_Print(fp, stmt_index, name, func_name);
00427 }
00428
00429
00430
00431
00432
00433
00434
00435 void CG_BROWSER::Summary_Feedback(FILE* fp,
00436 INT feedback_index)
00437 {
00438 SUMMARY_FEEDBACK* feedback_array = IPA_get_feedback_array(Cnode());
00439 SUMMARY_FEEDBACK* feedback = &feedback_array[Cnode()->File_Index()];
00440 feedback->WB_Print(fp, feedback_index);
00441 }
00442
00443
00444
00445
00446
00447
00448
00449 BOOL CG_BROWSER::Summary_Valid_Command(char ch)
00450 {
00451 switch (ch) {
00452 case 'S':
00453 case 'I':
00454 case 'F':
00455 case 'G':
00456 case 'A':
00457 case 'V':
00458 case 'C':
00459 case 'K':
00460 case 'D':
00461 case 'L':
00462 case 'a':
00463 case 's':
00464 case 'R':
00465 case 'r':
00466 case 'n':
00467 case 't':
00468 case 'l':
00469 case 'p':
00470 case 'x':
00471 case 'T':
00472 case 'E':
00473 case 'X':
00474 case 'Y':
00475 case 'f':
00476 case 'P':
00477 return TRUE;
00478 default:
00479 return FALSE;
00480 }
00481 }
00482
00483
00484
00485
00486
00487
00488
00489 INT CG_BROWSER::Summary_Size(char ch)
00490 {
00491 SUMMARY_FILE_HEADER* file_header =
00492 IP_FILE_HDR_file_header(Cnode()->File_Header());
00493 switch (ch) {
00494 case 'S':
00495 return file_header->Get_symbol_size();
00496 case 'I':
00497 return file_header->Get_ivar_size();
00498 case 'F':
00499 return file_header->Get_formal_size();
00500 case 'G':
00501 return file_header->Get_global_size();
00502 case 'A':
00503 return file_header->Get_actual_size();
00504 case 'V':
00505 return file_header->Get_value_size();
00506 case 'C':
00507 return file_header->Get_common_size();
00508 case 'K':
00509 return file_header->Get_common_shape_size();
00510 case 'D':
00511 return file_header->Get_ctrl_dep_size();
00512 case 'L':
00513 return file_header->Get_callsite_size();
00514 case 'a':
00515 return file_header->Get_cfg_node_size();
00516 case 's':
00517 return file_header->Get_scalar_node_size();
00518 case 'R':
00519 return file_header->Get_regions_array_size();
00520 case 'r':
00521 return file_header->Get_projected_region_size();
00522 case 'n':
00523 return file_header->Get_projected_array_size();
00524 case 't':
00525 return file_header->Get_term_array_size();
00526 case 'l':
00527 return file_header->Get_loopinfo_size();
00528 case 'p':
00529 return file_header->Get_phi_size();
00530 case 'x':
00531 return file_header->Get_chi_size();
00532 case 'T':
00533 return 0;
00534 case 'E':
00535 return file_header->Get_expr_size();
00536 case 'X':
00537 return file_header->Get_global_stid_size();
00538 case 'Y':
00539 return file_header->Get_stmt_size();
00540 case 'f':
00541 return file_header->Get_feedback_size();
00542 case 'P':
00543 return file_header->Get_proc_size();
00544 default:
00545 FmtAssert(FALSE, ("CG_BROWSER::Summary_Size(): Unexpected command"));
00546 return -1;
00547 }
00548 }
00549
00550
00551
00552
00553
00554
00555
00556 void CG_BROWSER::Summary_Single(FILE* fp,
00557 char ch,
00558 INT index,
00559 BOOL is_list)
00560 {
00561 switch (ch) {
00562 case 'S':
00563 Summary_Symbol(fp, index, is_list);
00564 break;
00565 case 'I':
00566 Summary_Ivar(fp, index);
00567 break;
00568 case 'F':
00569 Summary_Formal(fp, index);
00570 break;
00571 case 'G':
00572 Summary_Global(fp, index);
00573 break;
00574 case 'A':
00575 Summary_Actual(fp, index);
00576 break;
00577 case 'V':
00578 Summary_Value(fp, index);
00579 break;
00580 case 'C':
00581 Summary_Common(fp, index);
00582 break;
00583 case 'K':
00584 Summary_Common_Shape(fp, index);
00585 break;
00586 case 'D':
00587 Summary_Control_Dependence(fp, index);
00588 break;
00589 case 'L':
00590 Summary_Callsite(fp, index);
00591 break;
00592 case 'a':
00593 Summary_Cfg_Node(fp, index);
00594 break;
00595 case 's':
00596 Summary_Scalar(fp, index);
00597 break;
00598 case 'R':
00599 Summary_Region(fp, index);
00600 break;
00601 case 'r':
00602 Summary_Projected_Region(fp, index);
00603 break;
00604 case 'n':
00605 Summary_Projected_Node(fp, index);
00606 break;
00607 case 't':
00608 Summary_Term(fp, index);
00609 break;
00610 case 'l':
00611 Summary_Loop_Info(fp, index);
00612 break;
00613 case 'p':
00614 Summary_Phi(fp, index);
00615 break;
00616 case 'x':
00617 Summary_Chi(fp, index);
00618 break;
00619 case 'T':
00620 break;
00621 case 'X':
00622 Summary_Stid(fp, index);
00623 break;
00624 case 'Y':
00625 Summary_Stmt(fp, index);
00626 break;
00627 case 'E':
00628 Summary_Expr(fp, index);
00629 break;
00630 case 'f':
00631 Summary_Feedback(fp, index);
00632 break;
00633 case 'P':
00634 Summary_Procedure(fp, index);
00635 break;
00636 default:
00637 FmtAssert(FALSE, ("CG_BROWSER::Summary_Single(): Unexpected command"));
00638 break;
00639 }
00640 }
00641
00642
00643
00644
00645
00646
00647
00648 void CG_BROWSER::Summary(FILE* fp)
00649 {
00650 if (Bad_File()) {
00651 Error_Cleanup();
00652 return;
00653 }
00654 Set_Subcommand('S');
00655 char ch = Buffer().Scan_Character();
00656 if (Summary_Valid_Command(ch)) {
00657 INT index = -1;
00658 INT count = Summary_Size(ch);
00659 if (Buffer().Is('[')) {
00660 Buffer().Scan_Character();
00661 INT low_index = -1;
00662 Buffer().Scan_Integer(&low_index);
00663 if (low_index < 0 || low_index >= count) {
00664 Error_Cleanup();
00665 return;
00666 }
00667 char separator = Buffer().Scan_Character();
00668 switch (separator) {
00669 case ':': {
00670 INT local_count = -1;
00671 Buffer().Scan_Integer(&local_count);
00672 if (local_count < 0 || local_count > count) {
00673 Error_Cleanup();
00674 return;
00675 }
00676 for (INT i = low_index; i < low_index + local_count; i++)
00677 Summary_Single(fp, ch, i, TRUE);
00678 break;
00679 }
00680 case '-': {
00681 INT high_index = -1;
00682 Buffer().Scan_Integer(&high_index);
00683 if (high_index < low_index || high_index > count) {
00684 Error_Cleanup();
00685 return;
00686 }
00687 for (INT i = low_index; i <= high_index; i++)
00688 Summary_Single(fp, ch, i, TRUE);
00689 break;
00690 }
00691 default:
00692 Error_Cleanup();
00693 return;
00694 }
00695 Buffer().Skip_Chars(1);
00696 } else if (Buffer().Is_Integer()) {
00697 Buffer().Scan_Integer(&index);
00698 if (index < 0 || index >= count) {
00699 Error_Cleanup();
00700 return;
00701 }
00702 Summary_Single(fp, ch, index, FALSE);
00703 } else {
00704 for (INT i = 0; i < count; i++)
00705 Summary_Single(fp, ch, i, TRUE);
00706 }
00707 } else if (ch == '=') {
00708 Summary_Locate(stdout);
00709 } else if (ch == 'H') {
00710 Help();
00711 } else if (ch == '\n') {
00712 fprintf(stdout, "Missing character\n");
00713 Buffer().Pushback_Character();
00714 } else {
00715 fprintf(stdout, "Bad character: %c\n", ch);
00716 }
00717 Reset_Subcommand();
00718 }
00719
00720
00721
00722
00723
00724
00725
00726 void CG_BROWSER::Summary_Locate(FILE* fp)
00727 {
00728 if (Bad_File()) {
00729 Error_Cleanup();
00730 return;
00731 }
00732 INT summary_address;
00733 Buffer().Scan_HexInteger(&summary_address);
00734 SUMMARY_SYMBOL* symbol_array = IPA_get_symbol_array(Cnode());
00735 INT32 size = Summary_Size('S');
00736 INT i = (SUMMARY_SYMBOL*)(INTPTR)summary_address - symbol_array;
00737 if (i >= 0 && i < size) {
00738 Summary_Symbol(fp, i, FALSE);
00739 return;
00740 }
00741 IVAR* ivar_array = IPA_get_ivar_file_array(Cnode()->File_Header(), size);
00742 i = (IVAR*)(INTPTR) summary_address - ivar_array;
00743 if (i >= 0 && i < size) {
00744 Summary_Ivar(fp, i);
00745 return;
00746 }
00747 SUMMARY_FORMAL* formal_array = IPA_get_formal_array(Cnode());
00748 size = Summary_Size('F');
00749 i = (SUMMARY_FORMAL*)(INTPTR) summary_address - formal_array;
00750 if (i >= 0 && i < size) {
00751 Summary_Formal(fp, i);
00752 return;
00753 }
00754 SUMMARY_GLOBAL* global_array = IPA_get_global_array(Cnode());
00755 size = Summary_Size('G');
00756 i = (SUMMARY_GLOBAL*)(INTPTR) summary_address - global_array;
00757 if (i >= 0 && i < size) {
00758 Summary_Global(fp, i);
00759 return;
00760 }
00761 SUMMARY_ACTUAL* actual_array = IPA_get_actual_array(Cnode());
00762 size = Summary_Size('A');
00763 i = (SUMMARY_ACTUAL*)(INTPTR) summary_address - actual_array;
00764 if (i >= 0 && i < size) {
00765 Summary_Actual(fp, i);
00766 return;
00767 }
00768 SUMMARY_VALUE* value_array = IPA_get_value_array(Cnode());
00769 size = Summary_Size('V');
00770 i = (SUMMARY_VALUE*)(INTPTR) summary_address - value_array;
00771 if (i >= 0 && i < size) {
00772 Summary_Value(fp, i);
00773 return;
00774 }
00775 SUMMARY_COMMON* common_array = IPA_get_common_array(Cnode());
00776 size = Summary_Size('C');
00777 i = (SUMMARY_COMMON*)(INTPTR) summary_address - common_array;
00778 if (i >= 0 && i < size) {
00779 Summary_Common(fp, i);
00780 return;
00781 }
00782 SUMMARY_COMMON_SHAPE* common_shape_array
00783 = IPA_get_common_shape_array(Cnode());
00784 size = Summary_Size('K');
00785 i = (SUMMARY_COMMON_SHAPE*)(INTPTR) summary_address - common_shape_array;
00786 if (i >= 0 && i < size) {
00787 Summary_Common_Shape(fp, i);
00788 return;
00789 }
00790 SUMMARY_CONTROL_DEPENDENCE* control_array
00791 = IPA_get_ctrl_dep_array(Cnode());
00792 size = Summary_Size('D');
00793 i = (SUMMARY_CONTROL_DEPENDENCE*)(INTPTR) summary_address - control_array;
00794 if (i >= 0 && i < size) {
00795 Summary_Control_Dependence(fp, i);
00796 return;
00797 }
00798 SUMMARY_CALLSITE* callsite_array = IPA_get_callsite_array(Cnode());
00799 size = Summary_Size('L');
00800 i = (SUMMARY_CALLSITE*)(INTPTR) summary_address - callsite_array;
00801 if (i >= 0 && i < size) {
00802 Summary_Callsite(fp, i);
00803 return;
00804 }
00805 CFG_NODE_INFO* cfg_array = IPA_get_cfg_node_array(Cnode());
00806 size = Summary_Size('a');
00807 i = (CFG_NODE_INFO*)(INTPTR) summary_address - cfg_array;
00808 if (i >= 0 && i < size) {
00809 Summary_Cfg_Node(fp, i);
00810 return;
00811 }
00812 SCALAR_INFO* scalar_array = IPA_get_scalar_array(Cnode());
00813 size = Summary_Size('s');
00814 i = (SCALAR_INFO*)(INTPTR) summary_address - scalar_array;
00815 if (i >= 0 && i < size) {
00816 Summary_Scalar(fp, i);
00817 return;
00818 }
00819 REGION_ARRAYS* region_array = IPA_get_region_array(Cnode());
00820 size = Summary_Size('R');
00821 i = (REGION_ARRAYS*)(INTPTR) summary_address - region_array;
00822 if (i >= 0 && i < size) {
00823 Summary_Region(fp, i);
00824 return;
00825 }
00826 PROJECTED_REGION* proj_region_array
00827 = IPA_get_proj_region_array(Cnode());
00828 size = Summary_Size('r');
00829 i = (PROJECTED_REGION*)(INTPTR) summary_address - proj_region_array;
00830 if (i >= 0 && i < size) {
00831 Summary_Projected_Region(fp, i);
00832 return;
00833 }
00834 PROJECTED_NODE* proj_node_array
00835 = IPA_get_projected_node_array(Cnode());
00836 size = Summary_Size('n');
00837 i = (PROJECTED_NODE*)(INTPTR) summary_address - proj_node_array;
00838 if (i >= 0 && i < size) {
00839 Summary_Projected_Node(fp, i);
00840 return;
00841 }
00842 TERM* term_array = IPA_get_term_array(Cnode());
00843 size = Summary_Size('t');
00844 i = (TERM*)(INTPTR) summary_address - term_array;
00845 if (i >= 0 && i < size) {
00846 Summary_Term(fp, i);
00847 return;
00848 }
00849 LOOPINFO* loopinfo_array = IPA_get_loopinfo_array(Cnode());
00850 size = Summary_Size('l');
00851 i = (LOOPINFO*)(INTPTR) summary_address - loopinfo_array;
00852 if (i >= 0 && i < size) {
00853 Summary_Loop_Info(fp, i);
00854 return;
00855 }
00856 SUMMARY_PROCEDURE* procedure_array = IPA_get_procedure_array(Cnode());
00857 size = Summary_Size('P');
00858 i = (SUMMARY_PROCEDURE*)(INTPTR) summary_address - procedure_array;
00859 if (i >= 0 && i < size) {
00860 Summary_Procedure(fp, i);
00861 return;
00862 }
00863 SUMMARY_PHI* phi_array = IPA_get_phi_array(Cnode());
00864 size = Summary_Size('p');
00865 i = (SUMMARY_PHI*)(INTPTR) summary_address - phi_array;
00866 if (i >= 0 && i < size) {
00867 Summary_Phi(fp, i);
00868 return;
00869 }
00870 SUMMARY_CHI* chi_array = IPA_get_chi_array(Cnode());
00871 size = Summary_Size('x');
00872 i = (SUMMARY_CHI*)(INTPTR) summary_address - chi_array;
00873 if (i >= 0 && i < size) {
00874 Summary_Chi(fp, i);
00875 return;
00876 }
00877 SUMMARY_EXPR* expr_array = IPA_get_expr_array(Cnode());
00878 size = Summary_Size('E');
00879 i = (SUMMARY_EXPR*)(INTPTR) summary_address - expr_array;
00880 if (i >= 0 && i < size) {
00881 Summary_Expr(fp, i);
00882 return;
00883 }
00884 SUMMARY_STID* stid_array = IPA_get_stid_array(Cnode());
00885 size = Summary_Size('X');
00886 i = (SUMMARY_STID*)(INTPTR) summary_address - stid_array;
00887 if (i >= 0 && i < size) {
00888 Summary_Stid(fp, i);
00889 return;
00890 }
00891 SUMMARY_STMT* stmt_array = IPA_get_stmt_array(Cnode());
00892 size = Summary_Size('Y');
00893 i = (SUMMARY_STMT*)(INTPTR) summary_address - stmt_array;
00894 if (i >= 0 && i < size) {
00895 Summary_Stmt(fp, i);
00896 return;
00897 }
00898 SUMMARY_FEEDBACK* feedback_array = IPA_get_feedback_array(Cnode());
00899 size = Summary_Size('f');
00900 i = (SUMMARY_FEEDBACK*)(INTPTR) summary_address - feedback_array;
00901 if (i >= 0 && i < size) {
00902 Summary_Feedback(fp, i);
00903 return;
00904 }
00905 Error_Cleanup();
00906 }
00907