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 #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 "dwarf_DST.h"
00044 #include "ipc_file.h"
00045 #include "ipc_symtab_merge.h"
00046 #include "ipa_section.h"
00047
00048
00049
00050
00051
00052
00053 void SUMMARY_SYMBOL::WB_Print(FILE* fp,
00054 INT symbol_index,
00055 BOOL is_list,
00056 char* name,
00057 char* func_name,
00058 INT fancy_level)
00059 {
00060 if (func_name == NULL || func_name[0] == '\0') {
00061 fprintf(fp, "SYMBOL[%d]: \"%s\" ", symbol_index, name);
00062 } else {
00063 fprintf(fp, "SYMBOL[%d]: \"%s\":\"%s\" ", symbol_index, name, func_name);
00064 }
00065 if (fancy_level >= 2)
00066 fprintf(fp, "ST_IDX(%d) ", St_idx());
00067 fprintf(fp, "%sLOCAL %sSTATIC %sPASSED %sARRAY %s", Is_local() ? "" :
00068 "non-", Is_static() ? "" : "non-", Is_parm() ? "" : "non-",
00069 Is_array() ? "" : "non-", Is_common() ? "COMMON " : "");
00070 if (Is_common_block())
00071 fprintf(fp, "COMMON-BLOCK ");
00072 if (Is_function())
00073 fprintf(fp, "FUNCTION ");
00074 if (Get_btype() == MTYPE_UNKNOWN)
00075 fprintf(fp, "BTYPE(UNKNOWN) ");
00076 else
00077 fprintf(fp, "BTYPE(%s) ", MTYPE_name(Get_btype()));
00078 if (Is_formal())
00079 fprintf(fp, "FORMAL[%d]", Get_findex());
00080 fprintf(fp, "\n");
00081 if (!is_list || fancy_level >= 2) {
00082 fprintf(fp, " ");
00083 fprintf(fp, "ADDRESS: ");
00084 if (Is_addr_saved())
00085 fprintf(fp, "ADDR_SAVED ");
00086 if (Is_addr_f90_target())
00087 fprintf(fp, "ADDR_F90_TARGET ");
00088 if (Is_addr_passed())
00089 fprintf(fp, "ADDR_PASSED ");
00090 if (Is_addr_passed_inliner())
00091 fprintf(fp, "ADDR_PASSED_INLINE ");
00092 fprintf(fp, "\n");
00093 fprintf(fp, " ");
00094 fprintf(fp, "MOD/REF: ");
00095 if (Is_imod())
00096 fprintf(fp, "IMOD ");
00097 if (Is_dmod())
00098 fprintf(fp, "DMOD ");
00099 if (Is_iref())
00100 fprintf(fp, "IREF ");
00101 if (Is_aref())
00102 fprintf(fp, "AREF ");
00103 if (Is_dref())
00104 fprintf(fp, "DREF ");
00105 if (Is_cref())
00106 fprintf(fp, "CREF ");
00107 if (Is_cdref_preg_only())
00108 fprintf(fp, "CREF_PREG_ONLY ");
00109 if (Is_ikill())
00110 fprintf(fp, "IKILL ");
00111 if (Is_dkill())
00112 fprintf(fp, "DKILL ");
00113 if (Is_cmod())
00114 fprintf(fp, "CMOD ");
00115 if (Is_modcount())
00116 fprintf(fp, "MODCOUNT ");
00117 if (Is_parm())
00118 fprintf(fp, "PARM ");
00119 if (Is_ref())
00120 fprintf(fp, "REF ");
00121 if (Is_modref())
00122 fprintf(fp, "MODREF_ANY ");
00123 fprintf(fp, "\n");
00124 }
00125 }
00126
00127
00128
00129
00130
00131
00132 void IVAR::WB_Print(FILE* fp,
00133 INT ivar_index)
00134 {
00135 fprintf(fp, "IVAR[%d]: ", ivar_index);
00136 if (Is_Formal()) {
00137 fprintf(fp, "FORMAL_POSITION(%d) OFFSET(%d) MTYPE(%s)\n",
00138 Formal_Position(), Offset(), Machine_Types[Mtype()].name);
00139 } else {
00140 fprintf(fp, "GLOBAL(%s) OFFSET(%d) MTYPE(%s)\n",
00141 ST_name(St_Idx()), Offset(), Machine_Types[Mtype()].name);
00142 }
00143 }
00144
00145
00146
00147
00148
00149
00150 void SUMMARY_FORMAL::WB_Print(FILE* fp,
00151 INT formal_index,
00152 char* name,
00153 char* func_name)
00154 {
00155 if (func_name == NULL || func_name[0] == '\0') {
00156 fprintf(fp, "FORMAL[%d]: SYMBOL[%d] REGION[%d] \"%s\" POSITION(%d) ",
00157 formal_index, Get_symbol_index(), Get_region_index(),
00158 name, Get_position());
00159 fprintf(fp, "MTYPE(%s) ", MTYPE_name(Get_machine_type()));
00160 } else {
00161 fprintf(fp, "FORMAL[%d]: SYMBOL[%d] REGION[%d] \"%s\":\"%s\" POSITION(%d) ", formal_index, Get_symbol_index(), Get_region_index(),
00162 name, func_name, Get_position());
00163 fprintf(fp, "MTYPE(%s) ", MTYPE_name(Get_machine_type()));
00164 }
00165 if (Is_ref_parm())
00166 fprintf(fp, "REF ");
00167 if (Is_var_dim_array())
00168 fprintf(fp, "VAR_DIM_ARRAY ");
00169 fprintf(fp, "\n");
00170 }
00171
00172
00173
00174
00175
00176
00177 void SUMMARY_COMMON::WB_Print(FILE* fp,
00178 INT common_index)
00179 {
00180 fprintf(fp, "COMMON[%d]: SYMBOL[%d] COMMON_SHAPE[%d:%d]",
00181 common_index, Get_symbol_index(), Get_common_shape_index(),
00182 Get_common_shape_count());
00183 fprintf(fp, "\n");
00184 }
00185
00186
00187
00188
00189
00190
00191 void SUMMARY_COMMON_SHAPE::WB_Print(FILE* fp,
00192 INT common_shape_index)
00193 {
00194 fprintf(fp, "COMMON_SHAPE[%d]: SYMBOL[%d] ",
00195 common_shape_index, Get_symbol_index());
00196 if (Is_kind_scalar()) {
00197 fprintf(fp, "Scalar ELEMENT_SIZE(%d) OFFSET(%lld) ",
00198 Get_element_size(), Get_offset());
00199 } else if (Is_kind_array()) {
00200 fprintf(fp, "Array ");
00201 if (Is_symbolic_bounds())
00202 fprintf(fp, "<SYMBOLIC_BOUNDS> ");
00203 else
00204 fprintf(fp, "ELEMENT_SIZE(%d) DIM_COUNT(%d) [%d:%d:%d] ",
00205 Get_element_size(), Get_dim_count(), Get_lower(),
00206 Get_upper(), Get_stride());
00207 }
00208 fprintf(fp, "\n");
00209 }
00210
00211
00212
00213
00214
00215
00216 void SUMMARY_PROCEDURE::WB_Print(FILE* fp,
00217 INT procedure_index,
00218 char* name,
00219 INT fancy_level)
00220 {
00221 INT symbol_index = Get_symbol_index();
00222 fprintf(fp, "PROCEDURE[%d]: SYMBOL[%d] \"%s\" ", procedure_index,
00223 symbol_index, name);
00224 if (Get_formal_count() > 0)
00225 fprintf(fp, "FORMAL[%d:%d] ", Get_formal_index(),
00226 Get_formal_count());
00227 if (Get_global_count() > 0)
00228 fprintf(fp, "GLOBAL[%d:%d] ", Get_global_index(),
00229 Get_global_count());
00230 if (Get_callsite_count() > 0)
00231 fprintf(fp, "CALLSITE[%d:%d] ", Get_callsite_index(),
00232 Get_callsite_count());
00233 if (Get_ctrl_dep_count() > 0)
00234 fprintf(fp, "CTRL_DEP[%d:%d] ", Get_ctrl_dep_index(),
00235 Get_ctrl_dep_count());
00236 if (Get_array_section_count() > 0)
00237 fprintf(fp, "CFG_NODE[%d:%d] ", Get_array_section_index(),
00238 Get_array_section_count());
00239 fprintf(fp, "\n ");
00240 fprintf(fp, "X(VALUE[%d:%d]) X(EXPR[%d:%d]) ", Get_ex_value_index(),
00241 Get_ex_value_count(), Get_ex_expr_index(), Get_ex_expr_count());
00242 if (fancy_level >= 2) {
00243 if (Is_may_inline())
00244 fprintf(fp, "MAY_INLINE ");
00245 if (Is_must_inline())
00246 fprintf(fp, "MUST_INLINE ");
00247 if (Is_no_inline())
00248 fprintf(fp, "NO_INLINE ");
00249 if (Is_varargs())
00250 fprintf(fp, "VARARGS ");
00251 if (Is_alt_entry())
00252 fprintf(fp, "IS_ALT_ENTRY ");
00253 if (Has_alt_entry())
00254 fprintf(fp, "HAS_ALT_ENTRY ");
00255 if (Has_pstatic())
00256 fprintf(fp, "PSTATIC ");
00257 if (Is_no_delete())
00258 fprintf(fp, "NO_DELETE ");
00259 if (Is_block_data())
00260 fprintf(fp, "BLOCK_DATA ");
00261 if (Is_direct_mod_ref())
00262 fprintf(fp, "DIRECT_MOD_REF ");
00263 if (Is_exc_inline())
00264 fprintf(fp, "EXC_INLINE ");
00265 if (Has_addr_taken_reset())
00266 fprintf(fp, "ADDR_TAKEN_RESET ");
00267 if (Has_PU_freq())
00268 fprintf(fp, "PU_FREQ ");
00269 if (Has_formal_pragma())
00270 fprintf(fp, "FORMAL_PRAGMA ");
00271 if (Has_parallel_pragma())
00272 fprintf(fp, "PARALLEL_PRAGMA ");
00273 if (Has_parallel_region_pragma())
00274 fprintf(fp, "PARALLEL_REGION_PRAGMA ");
00275 if (Has_fstatic())
00276 fprintf(fp, "FSTATIC ");
00277 if (Use_lowered_return_preg())
00278 fprintf(fp, "LOWERED_RETURN_PREG ");
00279 if (Has_unknown_calls())
00280 fprintf(fp, "UNKNOWN_CALLS ");
00281 if (Has_incomplete_array_info())
00282 fprintf(fp, "INCOMPLETE_ARRAY_INFO ");
00283 if (Has_mp_needs_lno())
00284 fprintf(fp, "MP_NEEDS_LNO ");
00285 if (Has_exc_try())
00286 fprintf(fp, "EXC_TRY ");
00287 if (Has_side_effect())
00288 fprintf(fp, "SIDE_EFFECT ");
00289 if (Has_messy_regions())
00290 fprintf(fp, "MESSY_REGIONS ");
00291 if (Has_early_returns())
00292 fprintf(fp, "EARLY_RETURNS ");
00293 }
00294 fprintf(fp, "\n");
00295 }
00296
00297
00298
00299
00300
00301
00302 void SUMMARY_GLOBAL::WB_Print(FILE* fp,
00303 INT global_index)
00304 {
00305 fprintf(fp, "GLOBAL[%d]: SYMBOL[%d] MODS(%d) REFS(%d) ",
00306 global_index, Get_symbol_index(), Get_modcount(),
00307 Get_refcount());
00308 if (Is_imod())
00309 fprintf(fp, "IMOD ");
00310 if (Is_dmod())
00311 fprintf(fp, "DMOD ");
00312 if (Is_iref())
00313 fprintf(fp, "IREF ");
00314 if (Is_dref())
00315 fprintf(fp, "DREF ");
00316 if (Is_ikill())
00317 fprintf(fp, "IKILL ");
00318 if (Is_dkill())
00319 fprintf(fp, "DKILL ");
00320 fprintf(fp, "\n");
00321 }
00322
00323
00324
00325
00326
00327
00328 void SUMMARY_CALLSITE::WB_Print(FILE* fp,
00329 INT callsite_index,
00330 char* name,
00331 char* func_name)
00332 {
00333 fprintf(fp, "CALLSITE[%d]: ACTUAL[%d:%d] MAP_ID(%d) ", callsite_index,
00334 Get_actual_index(), Get_param_count(), Get_map_id());
00335 if (Is_intrinsic())
00336 fprintf(fp, "<INTRINSIC>");
00337 else if (Is_func_ptr())
00338 fprintf(fp, "<FUNC_PTR> VALUE[%d]", Get_value_index());
00339 else {
00340 if (func_name == NULL || func_name[0] == '\0')
00341 fprintf(fp, "SYMBOL[%d] \"%s\" ", Get_symbol_index(), name);
00342 else
00343 fprintf(fp, "SYMBOL[%d] \"%s\":\"%s\" ", Get_symbol_index(),
00344 name, func_name);
00345 }
00346 if (Is_must_inline())
00347 fprintf(fp, "MUST_INLINE");
00348 if (Is_no_inline())
00349 fprintf(fp, "NO_INLINE");
00350 fprintf(fp, "\n");
00351 }
00352
00353
00354
00355
00356
00357
00358 void SUMMARY_CONTROL_DEPENDENCE::WB_Print(FILE* fp,
00359 INT control_index)
00360 {
00361 if (Is_entry()) {
00362 fprintf(fp, "CTRL_DEP[%d]: <ENTRY> STMT[%d:%d] ", control_index,
00363 Get_true_stmt_index(), Get_true_count());
00364 } else if (Is_if_stmt()) {
00365 fprintf(fp, "CTRL_DEP[%d]: <IF_STMT> MAP_ID(%d) ", control_index,
00366 Get_map_id());
00367 fprintf(fp, "<TRUE> STMTS[%d:%d] <FALSE> STMTS[%d:%d] ",
00368 Get_true_stmt_index(), Get_true_count(),
00369 Get_false_stmt_index(), Get_false_count());
00370 } else if (Is_do_loop()) {
00371 fprintf(fp, "CTRL_DEP[%d]: <DO_LOOP> MAP_ID(%d) STMTS[%d:%d] ",
00372 control_index, Get_map_id(), Get_true_stmt_index(),
00373 Get_true_count());
00374 }
00375 fprintf(fp, "\n");
00376 }
00377
00378
00379
00380
00381
00382
00383 void SUMMARY_ACTUAL::WB_Print(FILE* fp,
00384 INT actual_index,
00385 char* name,
00386 char* func_name)
00387 {
00388 fprintf(fp, "ACTUAL[%d]: ", actual_index);
00389 if (Pass_type_name() != NULL) {
00390 switch (Get_pass_type()) {
00391 case PASS_UNKNOWN:
00392 fprintf(fp, "PASS(UNKNOWN) ");
00393 break;
00394 case PASS_LDID:
00395 fprintf(fp, "PASS(LDID) ");
00396 break;
00397 case PASS_LOAD:
00398 fprintf(fp, "PASS(LOAD) ");
00399 break;
00400 case PASS_MLOAD:
00401 fprintf(fp, "PASS(MLOAD) ");
00402 break;
00403 case PASS_LDA:
00404 fprintf(fp, "PASS(LDA) ");
00405 break;
00406 case PASS_ARRAY_SECTION:
00407 fprintf(fp, "PASS(ARRAY) ");
00408 break;
00409 }
00410 }
00411 if (Get_symbol_index() != -1) {
00412 if (func_name == NULL || func_name[0] == '\0')
00413 fprintf(fp, "SYMBOL[%d] \"%s\" ", Get_symbol_index(), name);
00414 else
00415 fprintf(fp, "SYMBOL[%d] \"%s\":\"%s\" ", Get_symbol_index(), name,
00416 func_name);
00417 }
00418 if (Get_value_index() != -1)
00419 fprintf(fp, "VALUE[%d] ", Get_value_index());
00420 if (Get_index() != -1)
00421 if (Get_pass_type())
00422 fprintf(fp, "REGION[%d] ", Get_index());
00423 else
00424 fprintf(fp, "SCALAR[%d] ", Get_index());
00425 fprintf(fp, "\n");
00426 }
00427
00428
00429
00430
00431
00432
00433 void SUMMARY_VALUE::WB_Print(FILE* fp,
00434 INT value_index)
00435 {
00436 fprintf(fp, "VALUE[%d]: ", value_index);
00437 if (Get_mtype() != MTYPE_UNKNOWN)
00438 fprintf(fp, "%s ", MTYPE_name(Get_mtype()));
00439 if (Is_unknown())
00440 fprintf(fp, "UNKNOWN");
00441 else if (Is_int_const())
00442 fprintf(fp, "(%lld) ", Get_int_const_value());
00443 else if (Is_two_consts())
00444 fprintf(fp, "(%d,%d) ",
00445 Get_first_of_two_values(), Get_second_of_two_values());
00446 else if (Is_const_st())
00447 fprintf(fp, "CONST");
00448 else if (Is_formal())
00449 fprintf(fp, "FORMAL[%d] ", Get_formal_index());
00450 else if (Is_global()) {
00451 if (Is_global_st_idx())
00452 fprintf(fp, "GLOBAL(ST_IDX(%d)) ", Get_global_st_idx());
00453 else
00454 fprintf(fp, "GLOBAL(SYMBOL[%d]) ", Get_global_index());
00455 } else if (Is_symbol())
00456 fprintf(fp, "SYMBOL[%d] ", Get_symbol_index());
00457 else if (Is_expr())
00458 fprintf(fp, "EXPR[%d] ", Get_expr_index());
00459 else if (Is_phi())
00460 fprintf(fp, "PHI[%d] ", Get_phi_index());
00461 else if (Is_chi())
00462 fprintf(fp, "CHI[%d] ", Get_chi_index());
00463 else if (Is_callsite())
00464 fprintf(fp, "CALLSITE[%d] ", Get_callsite_index());
00465 else if (Is_not_const())
00466 fprintf(fp, "NOT_CONST");
00467 fprintf(fp, "\n");
00468 }
00469
00470
00471
00472
00473
00474
00475 void CFG_NODE_INFO::WB_Print(FILE* fp,
00476 INT cfg_index)
00477 {
00478 fprintf(fp, "CFG_NODE[%d]: ", cfg_index);
00479 if (Is_do_loop()) {
00480 fprintf(fp, "DO_LOOP: INDEX(%d) ", Get_loop_index());
00481 } else if (Is_if()) {
00482 fprintf(fp, "IF: ELSE_INDEX(%d) ", Get_else_index());
00483 } else if (Is_else()) {
00484 fprintf(fp, "IF: IF_INDEX(%d) ", Get_if_index());
00485 } else if (Is_entry()) {
00486 fprintf(fp, "ENTRY: ");
00487 } else {
00488 fprintf(fp, "<UNKNOWN>: ");
00489 }
00490 fprintf(fp, "CFG_INDEX(%d) ", Get_cd_index());
00491 if (Has_calls())
00492 fprintf(fp, "HAS_CALLS ");
00493 if (Get_def_count() > 0)
00494 fprintf(fp, "DEF REGION[%d:%d] ", Get_def_index(),
00495 Get_def_count());
00496 if (Get_use_count() > 0)
00497 fprintf(fp, "USE REGION[%d:%d] ", Get_use_index(),
00498 Get_use_count());
00499 if (Get_param_count() > 0)
00500 fprintf(fp, "PARAM REGION[%d:%d] ", Get_param_index(),
00501 Get_param_count());
00502 if (Get_formal_count() > 0)
00503 fprintf(fp, "FORMAL REGION[%d:%d] ", Get_formal_index(),
00504 Get_formal_count());
00505 if (Get_scalar_count() > 0)
00506 fprintf(fp, "SCALAR[%d:%d] ", Get_scalar_index(),
00507 Get_scalar_count());
00508 fprintf(fp, "\n");
00509 }
00510
00511
00512
00513
00514
00515
00516 void SCALAR_INFO::WB_Print(FILE* fp,
00517 INT scalar_index,
00518 char* name,
00519 char* func_name)
00520 {
00521 if (func_name == NULL || func_name[0] == '\0')
00522 fprintf(fp, "SCALAR[%d]: SYMBOL[%d] \"%s\" ",
00523 scalar_index, Get_id(), name);
00524 else
00525 fprintf(fp, "SCALAR[%d]: SYMBOL[%d] \"%s\":\"%s\" ",
00526 scalar_index, Get_id(), name, func_name);
00527 if (Get_callsite_id() != -1)
00528 fprintf(fp, "CALLSITE[%d] ", Get_callsite_id());
00529 if (Is_may_kill())
00530 fprintf(fp, "MAY_KILL ");
00531 if (Is_may_use())
00532 fprintf(fp, "MAY_USE ");
00533 if (Is_may_reduc())
00534 fprintf(fp, "MAY_REDUC ");
00535 if (Is_kill())
00536 fprintf(fp, "KILL ");
00537 if (Is_use())
00538 fprintf(fp, "USE ");
00539 if (Is_euse())
00540 fprintf(fp, "EUSE ");
00541 if (Is_call_euse())
00542 fprintf(fp, "CALL_EUSE ");
00543 if (Is_reduc())
00544 fprintf(fp, "REDUC ");
00545 if (Is_array_reduc())
00546 fprintf(fp, "ARRAY_REDUC ");
00547 if (Is_array_may_reduc())
00548 fprintf(fp, "ARRAY_MAY_REDUC ");
00549 if (Is_passed_ref())
00550 fprintf(fp, "PASSED ");
00551 if (Is_may_passed_ref())
00552 fprintf(fp, "MAY_PASS ");
00553 fprintf(fp, "\n");
00554 }
00555
00556
00557
00558
00559
00560
00561 void REGION_ARRAYS::WB_Print(FILE* fp,
00562 INT region_index,
00563 char* name,
00564 char* func_name)
00565 {
00566 if (func_name == NULL || func_name[0] == '\0')
00567 fprintf(fp, "REGION[%d]: SYMBOL[%d] \"%s\" ", region_index,
00568 Get_sym_id(), name);
00569 else
00570 fprintf(fp, "REGION[%d]: SYMBOL[%d] \"%s\":\"%s\" ", region_index,
00571 Get_sym_id(), name, func_name);
00572 fprintf(fp, "PROJ_REGION[%d:%d] ", Get_idx(), Get_count());
00573 if (Get_element_size() != 0)
00574 fprintf(fp, "ELEMENT_SIZE(%d) ", Get_element_size());
00575 if (Is_use())
00576 fprintf(fp, "USE ");
00577 else if (Is_def())
00578 fprintf(fp, "DEF ");
00579 else if (Is_passed())
00580 fprintf(fp, "PASSED ");
00581 else if (Is_may_def())
00582 fprintf(fp, "MAY_DEF ");
00583 else if (Is_may_use())
00584 fprintf(fp, "MAY_USE ");
00585 else if (Is_formal())
00586 fprintf(fp, "FORMAL ");
00587 if (Is_bad_alias())
00588 fprintf(fp, "<BAD_ALIAS>");
00589 if (Is_loop_invariant())
00590 fprintf(fp, "<LOOP_INVARIANT>");
00591 fprintf(fp, "\n");
00592 }
00593
00594
00595
00596
00597
00598
00599 void PROJECTED_REGION::WB_Print(FILE* fp,
00600 INT proj_region_index)
00601 {
00602 fprintf(fp, "PROJ_REGION[%d]: ", proj_region_index);
00603 fprintf(fp, "PROJ_NODE[%d:%d] ", Get_id(),
00604 Get_num_dims());
00605 fprintf(fp, "DEPTH(%d) ", Get_depth());
00606 if (Is_messy_region())
00607 fprintf(fp, "<MESSY> ");
00608 if (Is_unprojected_region())
00609 fprintf(fp, "<UNPROJECTED> ");
00610 if (Is_may_kill()) {
00611 fprintf(fp, "MAY_KILL ");
00612 } else if (Is_may_use()) {
00613 fprintf(fp, "MAY_USE ");
00614 } else if (Is_passed()) {
00615 fprintf(fp, " ");
00616 fprintf(fp, "\n");
00617 fprintf(fp, "PASSED ");
00618 fprintf(fp, "CALLSITE[%d] ", Get_callsite_id());
00619 fprintf(fp, "ACTUAL_POSITION(%d) ", Get_actual_id());
00620 } else if (Is_formal()) {
00621 fprintf(fp, "FORMAL ");
00622 }
00623 fprintf(fp, "\n");
00624 }
00625
00626
00627
00628
00629
00630
00631 void PROJECTED_NODE::WB_Print(FILE* fp,
00632 INT proj_node_index)
00633 {
00634 fprintf(fp, "PROJ_NODE[%d]: ", proj_node_index);
00635 if (Is_unprojected()) {
00636 fprintf(fp, "<UNPROJECTED> TERM[%d:%d] ",
00637 Get_lb_term_index(), Get_lb_term_count());
00638 } else {
00639 if (Is_messy_lb())
00640 fprintf(fp, "LB <MESSY> ");
00641 else
00642 fprintf(fp, "LB TERM[%d:%d] ", Get_lb_term_index(),
00643 Get_lb_term_count());
00644 if (Is_messy_ub())
00645 fprintf(fp, "UB <MESSY> ");
00646 else
00647 fprintf(fp, "UB TERM[%d:%d] ", Get_ub_term_index(),
00648 Get_ub_term_count());
00649 if (Is_messy_step())
00650 fprintf(fp, "STEP <MESSY> ");
00651 else
00652 fprintf(fp, "STEP TERM[%d:%d] ", Get_step_term_index(),
00653 Get_step_term_count());
00654 if (Get_segment_length_term_count() > 0)
00655 fprintf(fp, "SL TERM[%d:%d] ", Get_segment_length_term_index(),
00656 Get_segment_length_term_count());
00657 if (Get_segment_stride_term_count() > 0)
00658 fprintf(fp, "SS TERM[%d:%d] ", Get_segment_stride_term_index(),
00659 Get_segment_stride_term_count());
00660 }
00661 if (Is_assumed_shape())
00662 fprintf(fp, "<ASSUMED_SHAPE> ");
00663 fprintf(fp, "\n");
00664 }
00665
00666
00667
00668
00669
00670
00671 void TERM::WB_Print(FILE* fp,
00672 INT term_index)
00673 {
00674 fprintf(fp, "TERM[%d]: ", term_index);
00675 switch (Get_type()) {
00676 case LTKIND_NONE:
00677 fprintf(fp, "NONE ");
00678 break;
00679 case LTKIND_CONST:
00680 fprintf(fp, "CONST(%d)", Get_coeff());
00681 break;
00682 case LTKIND_LINDEX:
00683 fprintf(fp, "LINDEX(%d) * (%d) ", Get_desc(), Get_coeff());
00684 break;
00685 case LTKIND_SUBSCR:
00686 fprintf(fp, "SUBSCR(%d) * (%d) ", Get_desc(), Get_coeff());
00687 break;
00688 case LTKIND_IV:
00689 fprintf(fp, "IVAR[%d] * (%d) ", Get_desc(), Get_coeff());
00690 break;
00691 default:
00692 fprintf(fp, " ");
00693 break;
00694 }
00695 fprintf(fp, "\n");
00696 }
00697
00698
00699
00700
00701
00702
00703 void LOOPINFO::WB_Print(FILE* fp,
00704 INT loop_info_index)
00705 {
00706 fprintf(fp, "LOOP[%d]: ", loop_info_index);
00707 if (Is_messy_lb())
00708 fprintf(fp, "LB <MESSY> ");
00709 else
00710 fprintf(fp, "LB TERM[%d:%d] ", Get_lb_term_index(),
00711 Get_lb_term_count());
00712 if (Is_messy_ub())
00713 fprintf(fp, "UB <MESSY> ");
00714 else
00715 fprintf(fp, "UB TERM[%d:%d] ", Get_ub_term_index(),
00716 Get_ub_term_count());
00717 if (Is_messy_step())
00718 fprintf(fp, "STEP <MESSY> ");
00719 else
00720 fprintf(fp, "STEP TERM[%d:%d] ", Get_step_term_index(),
00721 Get_step_term_count());
00722 fprintf(fp, "NEST_LEVEL(%d)\n", Get_nest_level());
00723 }
00724
00725
00726
00727
00728
00729
00730 void SUMMARY_PHI::WB_Print(FILE* fp,
00731 INT phi_index)
00732 {
00733 fprintf(fp, "PHI[%d]: ", phi_index);
00734 for (INT i = 0; i < 2; i++) {
00735 fprintf(fp, "(");
00736 fprintf(fp, "CTRL_DEP[%d] ", Get_ctrl_dep_index(i));
00737 fprintf(fp, "%s", Get_branch(i) ? "T " : "F ");
00738 if (Is_value(i))
00739 fprintf(fp, "VALUE[%d]", Get_node_index(i));
00740 if (Is_expr(i))
00741 fprintf(fp, "EXPR[%d]", Get_node_index(i));
00742 if (Is_phi(i))
00743 fprintf(fp, "PHI[%d]", Get_node_index(i));
00744 if (Is_chi(i))
00745 fprintf(fp, "CHI[%d]", Get_node_index(i));
00746 fprintf(fp, ") ");
00747 }
00748 fprintf(fp, "\n");
00749 }
00750
00751
00752
00753
00754
00755
00756 void SUMMARY_CHI::WB_Print(FILE* fp,
00757 INT chi_index,
00758 char* name,
00759 char* func_name)
00760 {
00761 fprintf(fp, "CHI[%d]: CALLSITE[%d] ", chi_index, Get_call_index());
00762 if (Get_symbol_index() != -1) {
00763 if (func_name == NULL || func_name[0] == '\0')
00764 fprintf(fp, "SYMBOL[%d] \"%s\" ", Get_symbol_index(), name);
00765 else
00766 fprintf(fp, "SYMBOL[%d] \"%s\":\"%s\" ", Get_symbol_index(),
00767 name, func_name);
00768 }
00769 if (Is_chi_value())
00770 fprintf(fp, "VALUE[%d] ", Get_node_index());
00771 if (Is_chi_phi())
00772 fprintf(fp, "PHI[%d] ", Get_node_index());
00773 if (Is_chi_expr())
00774 fprintf(fp, "EXPR[%d] ", Get_node_index());
00775 if (Is_chi_chi())
00776 fprintf(fp, "CHI[%d] ", Get_node_index());
00777 fprintf(fp, "\n");
00778 }
00779
00780
00781
00782
00783
00784
00785 void SUMMARY_EXPR::Node(FILE* fp,
00786 INT kid)
00787 {
00788 if (Is_expr_value(kid))
00789 fprintf(fp, "VALUE[%d] ", Get_node_index(kid));
00790 if (Is_expr_phi(kid))
00791 fprintf(fp, "PHI[%d] ", Get_node_index(kid));
00792 if (Is_expr_expr(kid))
00793 fprintf(fp, "EXPR[%d] ", Get_node_index(kid));
00794 if (Is_expr_chi(kid))
00795 fprintf(fp, "CHI[%d] ", Get_node_index(kid));
00796 }
00797
00798
00799
00800
00801
00802
00803 void SUMMARY_EXPR::WB_Print(FILE* fp,
00804 INT expr_index)
00805 {
00806 fprintf(fp, "EXPR[%d]: ", expr_index);
00807 if (Is_expr_unknown()) {
00808 fprintf(fp, "<UNKNOWN>\n");
00809 return;
00810 }
00811 fprintf(fp, "%s ", Get_mtype() == MTYPE_UNKNOWN
00812 ? "?" : MTYPE_name(Get_mtype()));
00813 fputs(OPCODE_name(Get_opcode()), fp);
00814 fprintf(fp, " ");
00815 if (Has_const_operand()) {
00816 if (Get_kid() == 0) {
00817 Node(fp, 0);
00818 if (OPCODE_nkids(Get_opcode()) == 2)
00819 fprintf(fp, "%lld ", Get_const_value());
00820 } else {
00821 fprintf(fp, "%lld ", Get_const_value());
00822 Node(fp, 0);
00823 }
00824 } else {
00825 Node(fp, 0);
00826 Node(fp, 1);
00827 }
00828 if (Is_trip_count())
00829 fprintf(fp, " <TRIP COUNT> ");
00830 fprintf(fp, "\n");
00831 }
00832
00833
00834
00835
00836
00837
00838 void SUMMARY_STID::WB_Print(FILE* fp,
00839 INT stid_index,
00840 char* name,
00841 char* func_name)
00842 {
00843 fprintf(fp, "STID[%d]: ", stid_index);
00844 if (func_name == NULL || func_name[0] == '\0')
00845 fprintf(fp, "Scalar SYMBOL[%d] \"%s\" ",
00846 Get_symbol_index(), name);
00847 else
00848 fprintf(fp, "Scalar SYMBOL[%d] \"%s\":\"%s\" ",
00849 Get_symbol_index(), name, func_name);
00850 if (Get_value_index() != -1)
00851 fprintf(fp, "VALUE[%d] ", Get_value_index());
00852 if (Is_always_executed())
00853 fprintf(fp, "<ALWAYS EXECUTED> ");
00854 fprintf(fp, "\n");
00855 }
00856
00857
00858
00859
00860
00861
00862 void SUMMARY_STMT::WB_Print(FILE* fp,
00863 INT stmt_index,
00864 char* name,
00865 char* func_name)
00866 {
00867 fprintf(fp, "STMT[%d]: ", stmt_index);
00868 if (Is_expr())
00869 fprintf(fp, "EXPR[%d] ", Get_expr_index());
00870 else if (Is_var()) {
00871 if (func_name == NULL || func_name[0] == '\0')
00872 fprintf(fp, "SYMBOL[%d] \"%s\" ", Get_var_index(), name);
00873 else
00874 fprintf(fp, "SYMBOL[%d] \"%s\":\"%s\" ", Get_var_index(),
00875 name, func_name);
00876 fprintf(fp, "MOD_COUNT(%d) REF_COUNT(%d) ADDR_TAKEN_COUNT(%d) ",
00877 Get_write_count(), Get_ref_count(),
00878 Get_addr_taken_count());
00879 } else if (Is_call())
00880 fprintf(fp, "CALLSITE[%d] ", Get_call_index());
00881 else if (Is_cond())
00882 fprintf(fp, "CTRL_DEP[%d] ", Get_cond_index());
00883 else if (Is_array_ref())
00884 fprintf(fp, "ARRAY MAP_ID(%d) ", Get_array_ref_map_id());
00885 else if (Is_stid())
00886 fprintf(fp, "STID[%d] ", Get_stid_index());
00887 else
00888 fprintf(fp, "UNKNOWN_TYPE ");
00889 fprintf(fp, "\n");
00890 }
00891
00892
00893
00894
00895
00896
00897 void SUMMARY_FEEDBACK::WB_Print(FILE* fp,
00898 INT feedback_index)
00899 {
00900 fprintf(fp, "FEEDBACK[%d]: ", feedback_index);
00901 fprintf(fp, "CYCLE(%f) FREQ(%f) BB_COUNT(%d) STMT_COUNT(%d) ",
00902 Get_cycle_count().Value(), Get_frequency_count().Value(),
00903 Get_effective_bb_count(), Get_effective_stmt_count());
00904 fprintf(fp, "\n");
00905 }