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
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 #define __STDC_LIMIT_MACROS
00052 #include <stdint.h>
00053 #include "ipa_cg.h"
00054 #include "ipa_summary.h"
00055 #include "ipl_summarize.h"
00056
00057
00058
00059
00060
00061 static SUMMARY_PROCEDURE*
00062 get_procedure_file_array (const IP_FILE_HDR& hdr, INT32& size)
00063 {
00064 const SUMMARY_FILE_HEADER* summary_header = IP_FILE_HDR_file_header (hdr);
00065 if (size = summary_header->Get_proc_size ()) {
00066 return (SUMMARY_PROCEDURE*)
00067 (IP_FILE_HDR_summary (hdr) + summary_header->Get_proc_offset ());
00068 }
00069 return NULL;
00070 }
00071
00072 static SUMMARY_SYMBOL*
00073 get_symbol_file_array(const IP_FILE_HDR& hdr, INT32& size)
00074 {
00075 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header(hdr);
00076 if (size = summary_header->Get_symbol_size()) {
00077 return (SUMMARY_SYMBOL *)
00078 (IP_FILE_HDR_summary (hdr) + summary_header->Get_symbol_offset());
00079 }
00080 return NULL;
00081 }
00082
00083 static SUMMARY_GLOBAL*
00084 get_global_file_array (const IP_FILE_HDR& hdr, INT32& size)
00085 {
00086 Is_True( ! IPA_Call_Graph_Built,
00087 ("IPA_get_global_file_array must use IPA_NODE when call graph is built"));
00088 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00089 if (size = summary_header->Get_global_size()) {
00090 return (SUMMARY_GLOBAL *)
00091 (IP_FILE_HDR_summary (hdr) + summary_header->Get_global_offset ());
00092 }
00093 return NULL;
00094 }
00095
00096
00097
00098
00099 SUMMARY_STRUCT_ACCESS*
00100 IPA_get_struct_access_file_array (const IP_FILE_HDR& hdr, INT32& size)
00101 {
00102 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00103 if (size = summary_header->Get_struct_access_size()) {
00104 return (SUMMARY_STRUCT_ACCESS *)
00105 (IP_FILE_HDR_summary (hdr) + summary_header->Get_struct_access_offset ());
00106 }
00107 return NULL;
00108 }
00109
00110 #ifdef KEY
00111 SUMMARY_TY_INFO*
00112 IPA_get_ty_info_file_array (const IP_FILE_HDR& hdr, INT32& size)
00113 {
00114 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00115 if (size = summary_header->Get_ty_info_size()) {
00116 return (SUMMARY_TY_INFO *)
00117 (IP_FILE_HDR_summary (hdr) + summary_header->Get_ty_info_offset ());
00118 }
00119 return NULL;
00120 }
00121 #endif
00122
00123 static SUMMARY_GLOBAL*
00124 get_global_array (const IPA_NODE* node)
00125 {
00126 if (node->Is_Preoptimized()) {
00127 SUMMARY* summary =
00128 (SUMMARY*) IPA_Call_Graph->New_Summary_Ptrs(node)->Summary();
00129 INT32 size = summary->Get_global_idx() + 1;
00130 if (size) {
00131 return summary->Get_global(0);
00132 }
00133 }
00134 else {
00135 const IP_FILE_HDR& hdr = node->File_Header();
00136 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header(hdr);
00137 INT32 size = summary_header->Get_global_size();
00138 if (size) {
00139 return (SUMMARY_GLOBAL*)
00140 (IP_FILE_HDR_summary (hdr) + summary_header->Get_global_offset());
00141 }
00142 }
00143 return NULL;
00144 }
00145
00146 static SUMMARY_PROCEDURE*
00147 get_procedure_array (const IPA_NODE* node)
00148 {
00149 INT32 size;
00150 return IPA_get_procedure_file_array (node->File_Header(), size);
00151 }
00152
00153 static SUMMARY_SYMBOL*
00154 get_symbol_array(const IPA_NODE* node)
00155 {
00156 INT32 size;
00157 return IPA_get_symbol_file_array (node->File_Header(), size);
00158 }
00159
00160 static SUMMARY_CALLSITE*
00161 get_callsite_array (const IPA_NODE* node)
00162 {
00163 if (node->Is_Preoptimized()) {
00164 SUMMARY* summary =
00165 (SUMMARY*) IPA_Call_Graph->New_Summary_Ptrs(node)->Summary();
00166 if (summary->Has_callsite_entry()) {
00167 return summary->Get_callsite(0);
00168 }
00169 }
00170 else {
00171 const IP_FILE_HDR& hdr = node->File_Header();
00172 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00173 if (summary_header->Get_callsite_size ()) {
00174 return (SUMMARY_CALLSITE *)
00175 (IP_FILE_HDR_summary (hdr) + summary_header->Get_callsite_offset());
00176 }
00177 }
00178 return NULL;
00179 }
00180
00181 static SUMMARY_FORMAL*
00182 get_formal_array (const IPA_NODE* node)
00183 {
00184 if (node->Is_Preoptimized()) {
00185 SUMMARY* summary =
00186 (SUMMARY*) IPA_Call_Graph->New_Summary_Ptrs(node)->Summary();
00187 if (summary->Has_formal_entry()) {
00188 return summary->Get_formal(0);
00189 }
00190 }
00191 else {
00192 const IP_FILE_HDR& hdr = node->File_Header();
00193 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00194 if (summary_header->Get_formal_size ()) {
00195 return (SUMMARY_FORMAL *)
00196 (IP_FILE_HDR_summary (hdr) + summary_header->Get_formal_offset ());
00197 }
00198 }
00199 return NULL;
00200 }
00201
00202 static SUMMARY_ACTUAL*
00203 get_actual_array (const IPA_NODE* node)
00204 {
00205 if (node->Is_Preoptimized()) {
00206 SUMMARY* summary =
00207 (SUMMARY*) IPA_Call_Graph->New_Summary_Ptrs(node)->Summary();
00208 if (summary->Has_actual_entry()) {
00209 return summary->Get_actual(0);
00210 }
00211 }
00212 else {
00213 const IP_FILE_HDR& hdr = node->File_Header();
00214 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00215 if (summary_header->Get_actual_size ()) {
00216 return (SUMMARY_ACTUAL *)
00217 (IP_FILE_HDR_summary (hdr) + summary_header->Get_actual_offset ());
00218 }
00219 }
00220 return NULL;
00221 }
00222
00223 SUMMARY_VALUE*
00224 IPA_get_value_file_array (const IP_FILE_HDR& hdr, INT32& size)
00225 {
00226 Is_True(! IPA_Call_Graph_Built,
00227 ("IPA_get_value_file_array must use IPA_NODE after call graph is built"));
00228 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00229 if (size = summary_header->Get_value_size ()) {
00230 return (SUMMARY_VALUE *)
00231 (IP_FILE_HDR_summary (hdr) + summary_header->Get_value_offset());
00232 }
00233 return NULL;
00234 }
00235
00236 SUMMARY_FORMAL*
00237 IPA_get_formal_file_array (const IP_FILE_HDR& hdr, INT32& size)
00238 {
00239 Is_True(! IPA_Call_Graph_Built,
00240 ("IPA_get_formal_file_array must use IPA_NODE after call graph is built"));
00241 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00242 if (size = summary_header->Get_formal_size ()) {
00243 return (SUMMARY_FORMAL *)
00244 (IP_FILE_HDR_summary (hdr) + summary_header->Get_formal_offset());
00245 }
00246 return NULL;
00247 }
00248
00249 SUMMARY_ACTUAL*
00250 IPA_get_actual_file_array (const IP_FILE_HDR& hdr, INT32& size)
00251 {
00252 Is_True(! IPA_Call_Graph_Built,
00253 ("IPA_get_actual_file_array must use IPA_NODE after call graph is built"));
00254 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00255 if (size = summary_header->Get_actual_size ()) {
00256 return (SUMMARY_ACTUAL *)
00257 (IP_FILE_HDR_summary (hdr) + summary_header->Get_actual_offset());
00258 }
00259 return NULL;
00260 }
00261
00262 SUMMARY_CALLSITE*
00263 IPA_get_callsite_file_array (const IP_FILE_HDR& hdr, INT32& size)
00264 {
00265 Is_True(! IPA_Call_Graph_Built,
00266 ("IPA_get_actual_file_array must use IPA_NODE after call graph is built"));
00267 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00268 if (size = summary_header->Get_callsite_size ()) {
00269 return (SUMMARY_CALLSITE *)
00270 (IP_FILE_HDR_summary (hdr) + summary_header->Get_callsite_offset());
00271 }
00272 return NULL;
00273 }
00274
00275 IVAR*
00276 IPA_get_ivar_file_array (const IP_FILE_HDR& hdr, INT32& size)
00277 {
00278 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00279 if (size = summary_header->Get_ivar_size ()) {
00280 return (IVAR *)
00281 (IP_FILE_HDR_summary (hdr) + summary_header->Get_ivar_offset());
00282 }
00283 return NULL;
00284 }
00285
00286 static SUMMARY_FEEDBACK*
00287 get_feedback_array (const IPA_NODE* node)
00288 {
00289 if (node->Is_Preoptimized()) {
00290 SUMMARY* summary =
00291 (SUMMARY*) IPA_Call_Graph->New_Summary_Ptrs(node)->Summary();
00292 if (summary->Has_feedback_entry()) {
00293 return summary->Get_feedback(0);
00294 }
00295 }
00296 else {
00297 const IP_FILE_HDR& hdr = node->File_Header();
00298 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00299 if (summary_header->Get_feedback_size ()) {
00300 return (SUMMARY_FEEDBACK *)
00301 (IP_FILE_HDR_summary (hdr) + summary_header->Get_feedback_offset());
00302 }
00303 }
00304 return NULL;
00305 }
00306 #if (defined(_STANDALONE_INLINER) || defined(_LIGHTWEIGHT_INLINER))
00307
00308
00309
00310
00311
00312 SUMMARY_PROCEDURE*
00313 IPA_get_procedure_file_array (const IP_FILE_HDR& hdr, INT32& size)
00314 {
00315 if (IP_FILE_HDR_file_header(hdr)) {
00316 return get_procedure_file_array(hdr, size);
00317 }
00318 else {
00319 SUMMARY* summary = (SUMMARY*) IP_FILE_HDR_summary (hdr);
00320 if (size = summary->Get_procedure_idx()+1) {
00321 return summary->Get_procedure (0);
00322 }
00323 return NULL;
00324 }
00325 }
00326
00327 SUMMARY_SYMBOL*
00328 IPA_get_symbol_file_array (const IP_FILE_HDR& hdr, INT32& size)
00329 {
00330 if (IP_FILE_HDR_file_header(hdr)) {
00331 return get_symbol_file_array(hdr, size);
00332 }
00333 else {
00334 SUMMARY* summary = (SUMMARY*) IP_FILE_HDR_summary (hdr);
00335 if (size = summary->Get_symbol_idx()+1) {
00336 return summary->Get_symbol (0);
00337 }
00338 return NULL;
00339 }
00340 }
00341
00342
00343
00344
00345
00346
00347 SUMMARY_GLOBAL*
00348 IPA_get_global_file_array (const IP_FILE_HDR& hdr, INT32& size)
00349 {
00350 return get_global_file_array(hdr, size);
00351 }
00352
00353
00354
00355
00356 SUMMARY_PROCEDURE*
00357 IPA_get_procedure_array (const IPA_NODE* node)
00358 {
00359 if (IP_FILE_HDR_file_header(node->File_Header())) {
00360 return get_procedure_array(node);
00361 }
00362 else {
00363 SUMMARY* summary = (SUMMARY*) IP_FILE_HDR_summary (node->File_Header());
00364 return (summary->Has_procedure_entry()? summary->Get_procedure (0) : NULL);
00365 }
00366 }
00367
00368 SUMMARY_SYMBOL*
00369 IPA_get_symbol_array (const IPA_NODE* node)
00370 {
00371 if (IP_FILE_HDR_file_header(node->File_Header())) {
00372 return get_symbol_array(node);
00373 }
00374 else {
00375 SUMMARY* summary = (SUMMARY*) IP_FILE_HDR_summary (node->File_Header());
00376 return (summary->Has_symbol_entry()? summary->Get_symbol (0) : NULL);
00377 }
00378 }
00379
00380 SUMMARY_GLOBAL*
00381 IPA_get_global_array (const IPA_NODE* node)
00382 {
00383 if (IP_FILE_HDR_file_header(node->File_Header())) {
00384 return get_global_array(node);
00385 }
00386 else {
00387 SUMMARY* summary = (SUMMARY*) IP_FILE_HDR_summary (node->File_Header());
00388 return (summary->Has_global_entry() ? summary->Get_global (0) : NULL);
00389 }
00390 }
00391
00392 SUMMARY_CALLSITE*
00393 IPA_get_callsite_array (const IPA_NODE* node)
00394 {
00395 if (IP_FILE_HDR_file_header(node->File_Header())) {
00396 return get_callsite_array(node);
00397 }
00398 else {
00399 SUMMARY* summary = (SUMMARY*) IP_FILE_HDR_summary (node->File_Header());
00400 return (summary->Has_callsite_entry()? summary->Get_callsite (0) : NULL);
00401 }
00402 }
00403
00404 SUMMARY_FORMAL*
00405 IPA_get_formal_array (const IPA_NODE* node)
00406 {
00407 if (IP_FILE_HDR_file_header(node->File_Header())) {
00408 return get_formal_array(node);
00409 }
00410 else {
00411 SUMMARY* summary = (SUMMARY*) IP_FILE_HDR_summary (node->File_Header());
00412 return (summary->Has_formal_entry()? summary->Get_formal (0) : NULL);
00413 }
00414 }
00415
00416 SUMMARY_ACTUAL*
00417 IPA_get_actual_array (const IPA_NODE* node)
00418 {
00419 if (IP_FILE_HDR_file_header(node->File_Header())) {
00420 return get_actual_array(node);
00421 }
00422 else {
00423 SUMMARY* summary = (SUMMARY*) IP_FILE_HDR_summary (node->File_Header());
00424 return (summary->Has_actual_entry()? summary->Get_actual (0) : NULL);
00425 }
00426 }
00427
00428 SUMMARY_FEEDBACK*
00429 IPA_get_feedback_array (const IPA_NODE* node)
00430 {
00431 if (IP_FILE_HDR_file_header(node->File_Header())) {
00432 return get_feedback_array(node);
00433 }
00434 else {
00435 SUMMARY* summary = (SUMMARY*) IP_FILE_HDR_summary (node->File_Header());
00436 return (summary->Has_feedback_entry()? summary->Get_feedback (0) : NULL);
00437 }
00438 return NULL;
00439 }
00440
00441 #else // _STANDALONE_INLINER
00442
00443
00444 #include "ipl_array_bread_write.h"
00445 #include "ipa_section_annot.h"
00446
00447
00448
00449
00450
00451 SUMMARY_PROCEDURE*
00452 IPA_get_procedure_file_array (const IP_FILE_HDR& hdr, INT32& size)
00453 {
00454 return get_procedure_file_array(hdr, size);
00455 }
00456
00457 SUMMARY_SYMBOL*
00458 IPA_get_symbol_file_array(const IP_FILE_HDR& hdr, INT32& size)
00459 {
00460 return get_symbol_file_array(hdr, size);
00461 }
00462
00463
00464
00465
00466
00467
00468 SUMMARY_COMMON*
00469 IPA_get_common_file_array (const IP_FILE_HDR& hdr, INT32& size)
00470 {
00471 Is_True( ! IPA_Call_Graph_Built,
00472 ("IPA_get_common_file_array must use IPA_NODE when call graph is built"));
00473 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header(hdr);
00474 if (size = summary_header->Get_common_size()) {
00475 return (SUMMARY_COMMON *)
00476 (IP_FILE_HDR_summary (hdr) + summary_header->Get_common_offset());
00477 }
00478 return NULL;
00479 }
00480
00481 SUMMARY_GLOBAL*
00482 IPA_get_global_file_array (const IP_FILE_HDR& hdr, INT32& size)
00483 {
00484 return get_global_file_array(hdr, size);
00485 }
00486
00487
00488
00489
00490
00491
00492
00493 SUMMARY_PROCEDURE*
00494 IPA_get_procedure_array (const IPA_NODE* node)
00495 {
00496 return get_procedure_array(node);
00497 }
00498
00499 SUMMARY_SYMBOL*
00500 IPA_get_symbol_array(const IPA_NODE* node)
00501 {
00502 return get_symbol_array(node);
00503 }
00504
00505 IVAR*
00506 IPA_get_ivar_array (const IPA_NODE* node, INT32& size)
00507 {
00508 SECTION_FILE_ANNOT* annot = IP_FILE_HDR_section_annot(node->File_Header());
00509 if (annot && annot->Get_ivar_array()) {
00510 IVAR_ARRAY* iv_array = annot->Get_ivar_array();
00511 size = iv_array->Elements();
00512 return &(*iv_array)[0];
00513 }
00514 return IPA_get_ivar_file_array (node->File_Header(), size);
00515 }
00516
00517
00518
00519
00520
00521 SUMMARY_COMMON*
00522 IPA_get_common_array (const IPA_NODE* node)
00523 {
00524 if (node->Is_Preoptimized()) {
00525 SUMMARY* summary =
00526 (SUMMARY*) IPA_Call_Graph->New_Summary_Ptrs(node)->Summary();
00527 if (summary->Has_common_entry()) {
00528 return summary->Get_common(0);
00529 }
00530 }
00531 else {
00532 const IP_FILE_HDR& hdr = node->File_Header();
00533 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00534 if (summary_header->Get_common_size ()) {
00535 return (SUMMARY_COMMON *)
00536 (IP_FILE_HDR_summary (hdr) + summary_header->Get_common_offset());
00537 }
00538 }
00539 return NULL;
00540 }
00541
00542 SUMMARY_COMMON_SHAPE*
00543 IPA_get_common_shape_array (const IPA_NODE* node)
00544 {
00545 if (node->Is_Preoptimized()) {
00546 SUMMARY* summary =
00547 (SUMMARY*) IPA_Call_Graph->New_Summary_Ptrs(node)->Summary();
00548 if (summary->Has_common_shape_entry()) {
00549 return summary->Get_common_shape(0);
00550 }
00551 }
00552 else {
00553 const IP_FILE_HDR& hdr = node->File_Header();
00554 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header(hdr);
00555 if (summary_header->Get_common_shape_size()) {
00556 return (SUMMARY_COMMON_SHAPE *)
00557 (IP_FILE_HDR_summary(hdr) + summary_header->Get_common_shape_offset());
00558 }
00559 }
00560 return NULL;
00561 }
00562
00563 SUMMARY_VALUE*
00564 IPA_get_value_array (const IPA_NODE* node)
00565 {
00566 if (node->Is_Preoptimized()) {
00567 SUMMARY* summary =
00568 (SUMMARY*) IPA_Call_Graph->New_Summary_Ptrs(node)->Summary();
00569 if (summary->Has_value_entry()) {
00570 return summary->Get_value(0);
00571 }
00572 }
00573 else {
00574 const IP_FILE_HDR& hdr = node->File_Header();
00575 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00576 if (summary_header->Get_value_size ()) {
00577 return (SUMMARY_VALUE *)
00578 (IP_FILE_HDR_summary (hdr) + summary_header->Get_value_offset());
00579 }
00580 }
00581 return NULL;
00582 }
00583
00584 SUMMARY_GLOBAL*
00585 IPA_get_global_array (const IPA_NODE* node)
00586 {
00587 return get_global_array(node);
00588 }
00589
00590 SUMMARY_CALLSITE*
00591 IPA_get_callsite_array (const IPA_NODE* node)
00592 {
00593 return get_callsite_array(node);
00594 }
00595
00596 SUMMARY_FORMAL*
00597 IPA_get_formal_array (const IPA_NODE* node)
00598 {
00599 return get_formal_array(node);
00600 }
00601
00602 SUMMARY_ACTUAL*
00603 IPA_get_actual_array (const IPA_NODE* node)
00604 {
00605 return get_actual_array(node);
00606 }
00607
00608 SUMMARY_CONTROL_DEPENDENCE*
00609 IPA_get_ctrl_dep_array (const IPA_NODE* node)
00610 {
00611 if (node->Is_Preoptimized()) {
00612 SUMMARY* summary =
00613 (SUMMARY*) IPA_Call_Graph->New_Summary_Ptrs(node)->Summary();
00614 if (summary->Has_ctrl_dep_entry()) {
00615 return summary->Get_ctrl_dep(0);
00616 }
00617 }
00618 else {
00619 const IP_FILE_HDR& hdr = node->File_Header();
00620 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00621 if (summary_header->Get_ctrl_dep_size ()) {
00622 return (SUMMARY_CONTROL_DEPENDENCE *)
00623 (IP_FILE_HDR_summary (hdr) + summary_header->Get_ctrl_dep_offset ());
00624 }
00625 }
00626 return NULL;
00627 }
00628
00629 SUMMARY_STMT*
00630 IPA_get_stmt_array (const IPA_NODE* node)
00631 {
00632 if (node->Is_Preoptimized()) {
00633 SUMMARY* summary =
00634 (SUMMARY*) IPA_Call_Graph->New_Summary_Ptrs(node)->Summary();
00635 if (summary->Has_stmt_entry()) {
00636 return summary->Get_stmt(0);
00637 }
00638 }
00639 else {
00640 const IP_FILE_HDR& hdr = node->File_Header();
00641 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00642 if (summary_header->Get_stmt_size ()) {
00643 return (SUMMARY_STMT *)
00644 (IP_FILE_HDR_summary (hdr) + summary_header->Get_stmt_offset ());
00645 }
00646 }
00647 return NULL;
00648 }
00649
00650 SUMMARY_STID*
00651 IPA_get_stid_array (const IPA_NODE* node)
00652 {
00653 if (node->Is_Preoptimized()) {
00654 SUMMARY* summary =
00655 (SUMMARY*) IPA_Call_Graph->New_Summary_Ptrs(node)->Summary();
00656 if (summary->Has_global_stid_entry()) {
00657 return summary->Get_global_stid(0);
00658 }
00659 }
00660 else {
00661 const IP_FILE_HDR& hdr = node->File_Header();
00662 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00663 if (summary_header->Get_global_stid_size ()) {
00664 return (SUMMARY_STID *)
00665 (IP_FILE_HDR_summary (hdr) + summary_header->Get_global_stid_offset());
00666 }
00667 }
00668 return NULL;
00669 }
00670
00671 SUMMARY_EXPR*
00672 IPA_get_expr_array (const IPA_NODE* node)
00673 {
00674 if (node->Is_Preoptimized()) {
00675 SUMMARY* summary =
00676 (SUMMARY*) IPA_Call_Graph->New_Summary_Ptrs(node)->Summary();
00677 if (summary->Has_expr_entry()) {
00678 return summary->Get_expr(0);
00679 }
00680 }
00681 else {
00682 const IP_FILE_HDR& hdr = node->File_Header();
00683 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00684 if (summary_header->Get_expr_size ()) {
00685 return (SUMMARY_EXPR *)
00686 (IP_FILE_HDR_summary (hdr) + summary_header->Get_expr_offset ());
00687 }
00688 }
00689 return NULL;
00690 }
00691
00692 SUMMARY_PHI*
00693 IPA_get_phi_array (const IPA_NODE* node)
00694 {
00695 if (node->Is_Preoptimized()) {
00696 SUMMARY* summary =
00697 (SUMMARY*) IPA_Call_Graph->New_Summary_Ptrs(node)->Summary();
00698 if (summary->Has_phi_entry()) {
00699 return summary->Get_phi(0);
00700 }
00701 }
00702 else {
00703 const IP_FILE_HDR& hdr = node->File_Header();
00704 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00705 if (summary_header->Get_phi_size ()) {
00706 return (SUMMARY_PHI *)
00707 (IP_FILE_HDR_summary (hdr) + summary_header->Get_phi_offset ());
00708 }
00709 }
00710 return NULL;
00711 }
00712
00713 SUMMARY_CHI*
00714 IPA_get_chi_array (const IPA_NODE* node)
00715 {
00716 if (node->Is_Preoptimized()) {
00717 SUMMARY* summary =
00718 (SUMMARY*) IPA_Call_Graph->New_Summary_Ptrs(node)->Summary();
00719 if (summary->Has_chi_entry()) {
00720 return summary->Get_chi(0);
00721 }
00722 }
00723 else {
00724 const IP_FILE_HDR& hdr = node->File_Header();
00725 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00726 if (summary_header->Get_chi_size ()) {
00727 return (SUMMARY_CHI *)
00728 (IP_FILE_HDR_summary (hdr) + summary_header->Get_chi_offset ());
00729 }
00730 }
00731 return NULL;
00732 }
00733
00734 CFG_NODE_INFO *
00735 IPA_get_cfg_node_array (const IPA_NODE* node)
00736 {
00737 if (node->Is_Preoptimized()) {
00738 ARRAY_SUMMARY_OUTPUT* array_summary = (ARRAY_SUMMARY_OUTPUT*)
00739 IPA_Call_Graph->New_Summary_Ptrs(node)->Array_Summary();
00740 if (array_summary->Get_cfg_node_count() != -1) {
00741 return array_summary->Get_cfg_node(0);
00742 }
00743 }
00744 else {
00745 const IP_FILE_HDR& hdr = node->File_Header();
00746 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00747 if (summary_header->Get_cfg_node_size ()) {
00748 return (CFG_NODE_INFO *)
00749 (IP_FILE_HDR_summary (hdr) + summary_header->Get_cfg_node_offset());
00750 }
00751 }
00752 return NULL;
00753 }
00754
00755 REGION_ARRAYS*
00756 IPA_get_region_array (const IPA_NODE* node)
00757 {
00758 if (node->Is_Preoptimized()) {
00759 ARRAY_SUMMARY_OUTPUT* array_summary = (ARRAY_SUMMARY_OUTPUT*)
00760 IPA_Call_Graph->New_Summary_Ptrs(node)->Array_Summary();
00761 if (array_summary->Get_region_count() != -1) {
00762 return array_summary->Get_region_array(0);
00763 }
00764 }
00765 else {
00766 const IP_FILE_HDR& hdr = node->File_Header();
00767 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00768 if (summary_header->Get_regions_array_size ()) {
00769 return (REGION_ARRAYS *)
00770 (IP_FILE_HDR_summary (hdr) + summary_header->Get_regions_array_offset());
00771 }
00772 }
00773 return NULL;
00774 }
00775
00776 PROJECTED_REGION*
00777 IPA_get_proj_region_array (const IPA_NODE* node)
00778 {
00779 if (node->Is_Preoptimized()) {
00780 ARRAY_SUMMARY_OUTPUT* array_summary = (ARRAY_SUMMARY_OUTPUT*)
00781 IPA_Call_Graph->New_Summary_Ptrs(node)->Array_Summary();
00782 if (array_summary->Get_projected_region_count() != -1) {
00783 return array_summary->Get_projected_region(0);
00784 }
00785 }
00786 else {
00787 const IP_FILE_HDR& hdr = node->File_Header();
00788 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00789 if (summary_header->Get_projected_region_size ()) {
00790 return (PROJECTED_REGION *) (IP_FILE_HDR_summary (hdr) +
00791 summary_header->Get_projected_region_offset());
00792 }
00793 }
00794 return NULL;
00795 }
00796
00797 PROJECTED_NODE*
00798 IPA_get_projected_node_array (const IPA_NODE* node)
00799 {
00800 if (node->Is_Preoptimized()) {
00801 ARRAY_SUMMARY_OUTPUT* array_summary = (ARRAY_SUMMARY_OUTPUT*)
00802 IPA_Call_Graph->New_Summary_Ptrs(node)->Array_Summary();
00803 if (array_summary->Get_projected_node_count() != -1) {
00804 return array_summary->Get_projected_node(0);
00805 }
00806 }
00807 else {
00808 const IP_FILE_HDR& hdr = node->File_Header();
00809 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00810 if (summary_header->Get_projected_array_size ()) {
00811 return (PROJECTED_NODE *) (IP_FILE_HDR_summary (hdr) +
00812 summary_header->Get_projected_array_offset());
00813 }
00814 }
00815 return NULL;
00816 }
00817
00818 LOOPINFO*
00819 IPA_get_loopinfo_array (const IPA_NODE* node)
00820 {
00821 if (node->Is_Preoptimized()) {
00822 ARRAY_SUMMARY_OUTPUT* array_summary = (ARRAY_SUMMARY_OUTPUT*)
00823 IPA_Call_Graph->New_Summary_Ptrs(node)->Array_Summary();
00824 if (array_summary->Get_loopinfo_count() != -1) {
00825 return array_summary->Get_loopinfo(0);
00826 }
00827 }
00828 else {
00829 const IP_FILE_HDR& hdr = node->File_Header();
00830 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00831 if (summary_header->Get_loopinfo_size ()) {
00832 return (LOOPINFO *)
00833 (IP_FILE_HDR_summary (hdr) + summary_header->Get_loopinfo_offset());
00834 }
00835 }
00836 return NULL;
00837 }
00838
00839 TERM*
00840 IPA_get_term_array (const IPA_NODE* node)
00841 {
00842 if (node->Is_Preoptimized()) {
00843 ARRAY_SUMMARY_OUTPUT* array_summary = (ARRAY_SUMMARY_OUTPUT*)
00844 IPA_Call_Graph->New_Summary_Ptrs(node)->Array_Summary();
00845 if (array_summary->Get_term_count() != -1) {
00846 return array_summary->Get_term(0);
00847 }
00848 }
00849 else {
00850 const IP_FILE_HDR& hdr = node->File_Header();
00851 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00852 if (summary_header->Get_term_array_size ()) {
00853 return (TERM *)
00854 (IP_FILE_HDR_summary (hdr) + summary_header->Get_term_array_offset());
00855 }
00856 }
00857 return NULL;
00858 }
00859
00860 SCALAR_INFO*
00861 IPA_get_scalar_array (const IPA_NODE* node)
00862 {
00863 if (node->Is_Preoptimized()) {
00864 ARRAY_SUMMARY_OUTPUT* array_summary = (ARRAY_SUMMARY_OUTPUT*)
00865 IPA_Call_Graph->New_Summary_Ptrs(node)->Array_Summary();
00866 if (array_summary->Get_scalars_count() != -1) {
00867 return array_summary->Get_scalars(0);
00868 }
00869 }
00870 else {
00871 const IP_FILE_HDR& hdr = node->File_Header();
00872 const SUMMARY_FILE_HEADER *summary_header = IP_FILE_HDR_file_header (hdr);
00873 if (summary_header->Get_scalar_node_size ()) {
00874 return (SCALAR_INFO *)
00875 (IP_FILE_HDR_summary (hdr) + summary_header->Get_scalar_offset());
00876 }
00877 }
00878 return NULL;
00879 }
00880
00881 SUMMARY_FEEDBACK*
00882 IPA_get_feedback_array (const IPA_NODE* node)
00883 {
00884 return get_feedback_array(node);
00885 }
00886 #endif // _STANDALONE_INLINER