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 static char USMID[] = "\n@(#)5.0_pl/sources/inline.c 5.8 08/09/99 17:48:48\n";
00042
00043 # include "defines.h"
00044
00045 # include "host.m"
00046 # include "host.h"
00047 # include "target.m"
00048 # include "target.h"
00049 # include "globals.m"
00050 # include "tokens.m"
00051 # include "sytb.m"
00052 # include "debug.m"
00053 # include "s_globals.m"
00054
00055 # include "globals.h"
00056 # include "tokens.h"
00057 # include "sytb.h"
00058 # include "p_globals.h"
00059 # include "s_globals.h"
00060
00061
00062 static int parallel_region;
00063 static int call_sh;
00064 static int sh_count;
00065 static int npi;
00066 static int loop_nest;
00067 static int pgm_attr_idx;
00068 static int entry_label_attr_idx;
00069 static int exit_label_attr_idx;
00070 static int call_line_number;
00071 static int call_col_number;
00072 static int number_of_actual_args;
00073 static int number_of_dummy_args;
00074 static boolean table_overflow;
00075 static boolean function_call;
00076 static boolean something_was_inlined;
00077 static boolean processing_ENTRY_called;
00078 static boolean inlinable = TRUE;
00079 static boolean noinline_in_effect;
00080 static boolean inline_in_effect;
00081 static int copy_head;
00082 static int next_label_slot;
00083 static int next_copy_out_sh_idx;
00084 static int old_label[MAX_INLINE_LABELS];
00085 static int new_label[MAX_INLINE_LABELS];
00086 static int actual_arg_attrs[MAX_INLINE_ARGS];
00087 static opnd_type flipped_opnd[MAX_INLINE_ARGS];
00088 static opnd_type actual_opnd[MAX_INLINE_ARGS];
00089 static opnd_type dummy_opnd[MAX_INLINE_ARGS];
00090 static opnd_type subscripting_tree[MAX_INLINE_ARGS];
00091 static opnd_type substringing_tree[MAX_INLINE_ARGS];
00092 static opnd_type struct_tree[MAX_INLINE_ARGS];
00093 static opnd_type substring_offset[MAX_INLINE_ARGS];
00094 static opnd_type linearized_offset[MAX_INLINE_ARGS][9];
00095 static opnd_type substring_len[MAX_INLINE_ARGS];
00096 static int copy_out_sh[MAX_INLINE_ARGS];
00097 static int next_pgm_idx[MAX_INLINED_ROUTINES];
00098 static opnd_type subscript[9];
00099 static opnd_type subscript_attr[9];
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119 boolean check_actual_and_dummy(opnd_type actual,
00120 opnd_type dummy,
00121 int arg)
00122
00123 {
00124
00125 int actual_bd_idx;
00126 int dummy_bd_idx;
00127 int i;
00128 boolean result = FALSE;
00129
00130 TRACE (Func_Entry, "check_actual_and_dummy", NULL);
00131
00132 if (inlinable) {
00133 switch(OPND_FLD(actual)) {
00134 case CN_Tbl_Idx :
00135 if (TYP_TYPE(CN_TYPE_IDX(OPND_IDX(actual))) !=
00136 TYP_TYPE(ATD_TYPE_IDX(OPND_IDX(dummy)))) {
00137 inlinable = FALSE;
00138 PRINTMSG(call_line_number,
00139 1328,
00140 Inline,
00141 call_col_number,
00142 AT_OBJ_NAME_PTR(pgm_attr_idx));
00143 }
00144 else {
00145 if ((TYP_TYPE(ATD_TYPE_IDX(OPND_IDX(dummy))) == Real ||
00146 TYP_TYPE(ATD_TYPE_IDX(OPND_IDX(dummy))) == Complex ||
00147 TYP_TYPE(ATD_TYPE_IDX(OPND_IDX(dummy))) == Integer) &&
00148 TYP_LINEAR(CN_TYPE_IDX(OPND_IDX(actual))) !=
00149 TYP_LINEAR(ATD_TYPE_IDX(OPND_IDX(dummy)))) {
00150 inlinable = FALSE;
00151 PRINTMSG(call_line_number,
00152 1328,
00153 Inline,
00154 call_col_number,
00155 AT_OBJ_NAME_PTR(pgm_attr_idx));
00156 }
00157 }
00158
00159 if (ATD_ARRAY_IDX(OPND_IDX(dummy)) != NULL_IDX) {
00160 inlinable = FALSE;
00161 PRINTMSG(call_line_number,
00162 1330,
00163 Inline,
00164 call_col_number,
00165 AT_OBJ_NAME_PTR(pgm_attr_idx));
00166 }
00167
00168 break;
00169
00170 case AT_Tbl_Idx :
00171 if (AT_OBJ_CLASS(OPND_IDX(dummy)) == Data_Obj &&
00172 AT_OBJ_CLASS(OPND_IDX(actual)) == Data_Obj) {
00173
00174 if (TYP_TYPE(ATD_TYPE_IDX(OPND_IDX(actual))) !=
00175 TYP_TYPE(ATD_TYPE_IDX(OPND_IDX(dummy)))) {
00176 inlinable = FALSE;
00177 PRINTMSG(call_line_number,
00178 1328,
00179 Inline,
00180 call_col_number,
00181 AT_OBJ_NAME_PTR(pgm_attr_idx));
00182 }
00183 else {
00184 if ((TYP_TYPE(ATD_TYPE_IDX(OPND_IDX(dummy))) == Real ||
00185 TYP_TYPE(ATD_TYPE_IDX(OPND_IDX(dummy))) == Complex ||
00186 TYP_TYPE(ATD_TYPE_IDX(OPND_IDX(dummy))) == Integer) &&
00187 TYP_LINEAR(ATD_TYPE_IDX(OPND_IDX(actual))) !=
00188 TYP_LINEAR(ATD_TYPE_IDX(OPND_IDX(dummy)))) {
00189 inlinable = FALSE;
00190 PRINTMSG(call_line_number,
00191 1328,
00192 Inline,
00193 call_col_number,
00194 AT_OBJ_NAME_PTR(pgm_attr_idx));
00195 }
00196 }
00197
00198 if ((ATD_RESHAPE_ARRAY_OPT(OPND_IDX(actual)) ||
00199 ATD_RESHAPE_ARRAY_OPT(OPND_IDX(dummy))) &&
00200 ATD_ARRAY_IDX(OPND_IDX(actual)) != NULL_IDX &&
00201 ATD_ARRAY_IDX(OPND_IDX(dummy)) != NULL_IDX &&
00202 BD_RANK(ATD_ARRAY_IDX(OPND_IDX(actual))) <
00203 BD_RANK(ATD_ARRAY_IDX(OPND_IDX(dummy)))) {
00204 inlinable = FALSE;
00205 PRINTMSG(call_line_number,
00206 1646,
00207 Error,
00208 call_col_number,
00209 AT_OBJ_NAME_PTR(OPND_IDX(actual)),
00210 AT_OBJ_NAME_PTR(OPND_IDX(dummy)));
00211 }
00212
00213 if (inlinable &&
00214 ATD_ARRAY_IDX(OPND_IDX(actual)) != NULL_IDX &&
00215 ATD_ARRAY_IDX(OPND_IDX(dummy)) != NULL_IDX &&
00216 BD_RANK(ATD_ARRAY_IDX(OPND_IDX(actual))) ==
00217 BD_RANK(ATD_ARRAY_IDX(OPND_IDX(dummy)))) {
00218
00219 actual_bd_idx = ATD_ARRAY_IDX(OPND_IDX(actual));
00220 dummy_bd_idx = ATD_ARRAY_IDX(OPND_IDX(dummy));
00221
00222 result = TRUE;
00223 for (i = 1; i < BD_RANK(dummy_bd_idx); i++) {
00224 if (!(BD_LB_FLD(actual_bd_idx, i) == CN_Tbl_Idx &&
00225 BD_LB_FLD(dummy_bd_idx, i) == CN_Tbl_Idx &&
00226 fold_relationals(BD_LB_IDX(actual_bd_idx,i),
00227 BD_LB_IDX(dummy_bd_idx,i),
00228 Eq_Opr) &&
00229 BD_UB_FLD(actual_bd_idx, i) == CN_Tbl_Idx &&
00230 BD_UB_FLD(dummy_bd_idx, i) == CN_Tbl_Idx &&
00231 fold_relationals(BD_UB_IDX(actual_bd_idx,i),
00232 BD_UB_IDX(dummy_bd_idx,i),
00233 Eq_Opr))) {
00234 result = FALSE;
00235 }
00236 }
00237
00238 if (!(BD_LB_FLD(actual_bd_idx, i) == CN_Tbl_Idx &&
00239 BD_LB_FLD(dummy_bd_idx, i) == CN_Tbl_Idx &&
00240 fold_relationals(BD_LB_IDX(actual_bd_idx,i),
00241 BD_LB_IDX(dummy_bd_idx,i),
00242 Eq_Opr))) {
00243 result = FALSE;
00244 }
00245
00246
00247
00248
00249
00250
00251 if (ATD_CLASS(OPND_IDX(actual)) == Struct_Component ||
00252 ATD_WAS_SCOPED(OPND_IDX(dummy)) ||
00253 TYP_TYPE(ATD_TYPE_IDX(OPND_IDX(actual))) == Character) {
00254 result = FALSE;
00255 }
00256 }
00257
00258 if (ATD_ARRAY_IDX(OPND_IDX(actual)) == NULL_IDX &&
00259 ATD_ARRAY_IDX(OPND_IDX(dummy)) != NULL_IDX) {
00260 inlinable = FALSE;
00261 PRINTMSG(call_line_number,
00262 1330,
00263 Inline,
00264 call_col_number,
00265 AT_OBJ_NAME_PTR(pgm_attr_idx));
00266 }
00267
00268 if (ATD_PE_ARRAY_IDX(OPND_IDX(actual)) != NULL_IDX) {
00269 inlinable = FALSE;
00270 PRINTMSG(call_line_number,
00271 1612,
00272 Inline,
00273 call_col_number,
00274 AT_OBJ_NAME_PTR(pgm_attr_idx));
00275 }
00276
00277 }
00278 break;
00279 }
00280 }
00281
00282 TRACE (Func_Exit, "check_actual_and_dummy", NULL);
00283
00284 return(result);
00285
00286 }
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309 void scalar_dope_to_scalar(int i,
00310 int *copy_out_DV_scalar,
00311 boolean dummy_referenced)
00312
00313 {
00314
00315 int asg_idx;
00316 int div_idx;
00317 int dv_deref_idx;
00318 int tmp_attr;
00319
00320
00321 TRACE (Func_Entry, "scalar_dope_to_scalar", NULL);
00322
00323 if (TYP_TYPE(ATD_TYPE_IDX(OPND_IDX(dummy_opnd[i]))) == Character &&
00324 TYP_CHAR_CLASS(ATD_TYPE_IDX(OPND_IDX(dummy_opnd[i]))) ==
00325 Assumed_Size_Char) {
00326 NTR_IR_TBL(asg_idx);
00327 IR_TYPE_IDX(asg_idx) = CG_INTEGER_DEFAULT_TYPE;
00328 IR_OPR(asg_idx) = Dv_Access_El_Len;
00329 IR_LINE_NUM(asg_idx) = call_line_number;
00330 IR_COL_NUM(asg_idx) = call_col_number;
00331 IR_FLD_L(asg_idx) = AT_Tbl_Idx;
00332 IR_IDX_L(asg_idx) = IR_IDX_L(OPND_IDX(actual_opnd[i]));
00333 IR_LINE_NUM_L(asg_idx) = call_line_number;
00334 IR_COL_NUM_L(asg_idx) = call_col_number;
00335
00336 NTR_IR_TBL(div_idx);
00337 IR_TYPE_IDX(div_idx) = CG_INTEGER_DEFAULT_TYPE;
00338 IR_OPR(div_idx) = Shiftr_Opr;
00339 IR_LINE_NUM(div_idx) = call_line_number;
00340 IR_COL_NUM(div_idx) = call_col_number;
00341 IR_FLD_L(div_idx) = IR_Tbl_Idx;
00342 IR_IDX_L(div_idx) = asg_idx;
00343 IR_LINE_NUM_L(div_idx) = call_line_number;
00344 IR_COL_NUM_L(div_idx) = call_col_number;
00345 IR_FLD_R(div_idx) = CN_Tbl_Idx;
00346 IR_IDX_R(div_idx) = CN_INTEGER_THREE_IDX;
00347 IR_LINE_NUM_R(div_idx) = call_line_number;
00348 IR_COL_NUM_R(div_idx) = call_col_number;
00349 OPND_IDX(substring_len[i]) = div_idx;
00350 OPND_FLD(substring_len[i]) = IR_Tbl_Idx;
00351 }
00352
00353 COPY_OPND(actual_opnd[i], IR_OPND_L(OPND_IDX(actual_opnd[i])));
00354
00355 NTR_IR_TBL(dv_deref_idx);
00356 IR_TYPE_IDX(dv_deref_idx) = ATD_TYPE_IDX(OPND_IDX(dummy_opnd[i]));
00357 IR_OPR(dv_deref_idx) = Dv_Deref_Opr;
00358 IR_LINE_NUM(dv_deref_idx) = call_line_number;
00359 IR_COL_NUM(dv_deref_idx) = call_col_number;
00360 IR_FLD_L(dv_deref_idx) = OPND_FLD(actual_opnd[i]);
00361 IR_IDX_L(dv_deref_idx) = OPND_IDX(actual_opnd[i]);
00362 IR_LINE_NUM_L(dv_deref_idx) = call_line_number;
00363 IR_COL_NUM_L(dv_deref_idx) = call_col_number;
00364
00365 OPND_IDX(subscripting_tree[i]) = dv_deref_idx;
00366 OPND_FLD(subscripting_tree[i]) = IR_Tbl_Idx;
00367
00368 tmp_attr = gen_compiler_tmp(call_line_number,
00369 call_col_number,
00370 Priv,
00371 TRUE);
00372 ATD_STOR_BLK_IDX(tmp_attr) = SCP_SB_STACK_IDX(curr_scp_idx);
00373 ATD_TYPE_IDX(tmp_attr) = ATD_TYPE_IDX(OPND_IDX(dummy_opnd[i]));
00374 AT_SEMANTICS_DONE(tmp_attr) = TRUE;
00375
00376 if (inlinable && dummy_referenced) {
00377 NTR_IR_TBL(asg_idx);
00378 IR_TYPE_IDX(asg_idx) = ATD_TYPE_IDX(OPND_IDX(dummy_opnd[i]));
00379 IR_OPR(asg_idx) = Asg_Opr;
00380 IR_LINE_NUM(asg_idx) = call_line_number;
00381 IR_COL_NUM(asg_idx) = call_col_number;
00382 IR_FLD_L(asg_idx) = AT_Tbl_Idx;
00383 IR_IDX_L(asg_idx) = tmp_attr;
00384 IR_LINE_NUM_L(asg_idx) = call_line_number;
00385 IR_COL_NUM_L(asg_idx) = call_col_number;
00386 IR_FLD_R(asg_idx) = OPND_FLD(subscripting_tree[i]);
00387 IR_IDX_R(asg_idx) = OPND_IDX(subscripting_tree[i]);
00388 IR_LINE_NUM_R(asg_idx) = call_line_number;
00389 IR_COL_NUM_R(asg_idx) = call_col_number;
00390
00391 curr_stmt_sh_idx = call_sh;
00392 gen_sh(Before,
00393 Assignment_Stmt,
00394 call_line_number,
00395 call_col_number,
00396 FALSE,
00397 FALSE,
00398 TRUE);
00399 SH_IR_IDX(SH_PREV_IDX(curr_stmt_sh_idx)) = asg_idx;
00400 SH_P2_SKIP_ME(SH_PREV_IDX(curr_stmt_sh_idx)) = TRUE;
00401 }
00402
00403 OPND_IDX(actual_opnd[i]) = tmp_attr;
00404 OPND_FLD(actual_opnd[i]) = AT_Tbl_Idx;
00405 *copy_out_DV_scalar = tmp_attr;
00406
00407 TRACE (Func_Exit, "scalar_dope_to_scalar", NULL);
00408
00409 return;
00410
00411 }
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436 void array_element_to_scalar(int i,
00437 int *copy_out_array_element,
00438 boolean dummy_referenced,
00439 boolean dummy_modified)
00440
00441 {
00442
00443 int l;
00444 int line;
00445 int col;
00446 int asg_idx;
00447 int attr_idx;
00448 int list_idx;
00449 int tmp_attr;
00450
00451
00452 TRACE (Func_Entry, "array_element_to_scalar", NULL);
00453 COPY_OPND(subscripting_tree[i], actual_opnd[i]);
00454
00455
00456
00457
00458
00459
00460 if (dummy_modified) {
00461 list_idx = IR_IDX_R(OPND_IDX(actual_opnd[i]));
00462 for (l = 1;
00463 l <= IR_LIST_CNT_R(OPND_IDX(actual_opnd[i]));
00464 l++) {
00465 COPY_OPND(subscript[l], IL_OPND(list_idx));
00466 list_idx = IL_NEXT_LIST_IDX(list_idx);
00467
00468 tmp_attr = gen_compiler_tmp(call_line_number,
00469 call_col_number,
00470 Priv,
00471 TRUE);
00472 ATD_STOR_BLK_IDX(tmp_attr) = SCP_SB_STACK_IDX(curr_scp_idx);
00473 ATD_TYPE_IDX(tmp_attr) = INTEGER_DEFAULT_TYPE;
00474 AT_SEMANTICS_DONE(tmp_attr) = TRUE;
00475
00476 NTR_IR_TBL(asg_idx);
00477 IR_TYPE_IDX(asg_idx) = INTEGER_DEFAULT_TYPE;
00478 IR_OPR(asg_idx) = Asg_Opr;
00479 IR_LINE_NUM(asg_idx) = call_line_number;
00480 IR_COL_NUM(asg_idx) = call_col_number;
00481 IR_FLD_L(asg_idx) = AT_Tbl_Idx;
00482 IR_IDX_L(asg_idx) = tmp_attr;
00483 IR_LINE_NUM_L(asg_idx) = call_line_number;
00484 IR_COL_NUM_L(asg_idx) = call_col_number;
00485 IR_FLD_R(asg_idx) = OPND_FLD(subscript[l]);
00486 IR_IDX_R(asg_idx) = OPND_IDX(subscript[l]);
00487 IR_LINE_NUM_R(asg_idx) = call_line_number;
00488 IR_COL_NUM_R(asg_idx) = call_col_number;
00489
00490 curr_stmt_sh_idx = call_sh;
00491 gen_sh(Before,
00492 Assignment_Stmt,
00493 call_line_number,
00494 call_col_number,
00495 FALSE,
00496 FALSE,
00497 TRUE);
00498 SH_IR_IDX(SH_PREV_IDX(curr_stmt_sh_idx)) = asg_idx;
00499 SH_P2_SKIP_ME(SH_PREV_IDX(curr_stmt_sh_idx)) = TRUE;
00500
00501 OPND_IDX(subscript_attr[l]) = tmp_attr;
00502 OPND_FLD(subscript_attr[l]) = AT_Tbl_Idx;
00503 OPND_LINE_NUM(subscript_attr[l]) = call_line_number;
00504 OPND_COL_NUM(subscript_attr[l]) = call_col_number;
00505 }
00506 }
00507
00508 tmp_attr = gen_compiler_tmp(call_line_number,
00509 call_col_number,
00510 Priv,
00511 TRUE);
00512 ATD_STOR_BLK_IDX(tmp_attr) = SCP_SB_STACK_IDX(curr_scp_idx);
00513
00514 attr_idx = find_base_attr(&actual_opnd[i],
00515 &line,
00516 &col);
00517
00518 ATD_TYPE_IDX(tmp_attr) = ATD_TYPE_IDX(attr_idx);
00519 AT_SEMANTICS_DONE(tmp_attr) = TRUE;
00520
00521 if (dummy_referenced) {
00522 NTR_IR_TBL(asg_idx);
00523 IR_TYPE_IDX(asg_idx) = ATD_TYPE_IDX(attr_idx);
00524 IR_OPR(asg_idx) = Asg_Opr;
00525 IR_LINE_NUM(asg_idx) = call_line_number;
00526 IR_COL_NUM(asg_idx) = call_col_number;
00527 IR_FLD_L(asg_idx) = AT_Tbl_Idx;
00528 IR_IDX_L(asg_idx) = tmp_attr;
00529 IR_LINE_NUM_L(asg_idx) = call_line_number;
00530 IR_COL_NUM_L(asg_idx) = call_col_number;
00531 IR_FLD_R(asg_idx) = OPND_FLD(actual_opnd[i]);
00532 IR_IDX_R(asg_idx) = OPND_IDX(actual_opnd[i]);
00533 IR_LINE_NUM_R(asg_idx) = call_line_number;
00534 IR_COL_NUM_R(asg_idx) = call_col_number;
00535
00536 curr_stmt_sh_idx = call_sh;
00537 gen_sh(Before,
00538 Assignment_Stmt,
00539 call_line_number,
00540 call_col_number,
00541 FALSE,
00542 FALSE,
00543 TRUE);
00544 SH_IR_IDX(SH_PREV_IDX(curr_stmt_sh_idx)) = asg_idx;
00545 SH_P2_SKIP_ME(SH_PREV_IDX(curr_stmt_sh_idx)) = TRUE;
00546 }
00547
00548 OPND_IDX(actual_opnd[i]) = tmp_attr;
00549 OPND_FLD(actual_opnd[i]) = AT_Tbl_Idx;
00550 *copy_out_array_element = tmp_attr;
00551
00552 TRACE (Func_Exit, "array_element_to_scalar", NULL);
00553
00554 return;
00555
00556 }
00557
00558
00559
00560
00561
00562
00563
00564
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579 void character_to_character(int i)
00580
00581 {
00582
00583 int asg_idx;
00584 int minus_idx;
00585 int substring_list_idx;
00586 int tmp_attr;
00587
00588
00589 TRACE (Func_Entry, "character_to_character", NULL);
00590
00591 COPY_OPND(substringing_tree[i], actual_opnd[i]);
00592
00593 substring_list_idx = IR_IDX_R(OPND_IDX(actual_opnd[i]));
00594 NTR_IR_TBL(minus_idx);
00595 IR_OPR(minus_idx) = Minus_Opr;
00596 IR_TYPE_IDX(minus_idx) = CG_INTEGER_DEFAULT_TYPE;
00597 IR_LINE_NUM(minus_idx) = call_line_number;
00598 IR_COL_NUM(minus_idx) = call_col_number;
00599 COPY_OPND(IR_OPND_L(minus_idx), IL_OPND(substring_list_idx));
00600 IR_LINE_NUM_L(minus_idx) = call_line_number;
00601 IR_COL_NUM_L(minus_idx) = call_col_number;
00602 IR_IDX_R(minus_idx) = CN_INTEGER_ONE_IDX;
00603 IR_FLD_R(minus_idx) = CN_Tbl_Idx;
00604 IR_LINE_NUM_R(minus_idx) = call_line_number;
00605 IR_COL_NUM_R(minus_idx) = call_col_number;
00606 OPND_IDX(substring_offset[i]) = minus_idx;
00607 OPND_FLD(substring_offset[i]) = IR_Tbl_Idx;
00608
00609 if (TYP_CHAR_CLASS(ATD_TYPE_IDX(OPND_IDX(dummy_opnd[i]))) ==
00610 Assumed_Size_Char) {
00611 substring_list_idx = IL_NEXT_LIST_IDX(substring_list_idx);
00612 substring_list_idx = IL_NEXT_LIST_IDX(substring_list_idx);
00613 COPY_OPND(substring_len[i], IL_OPND(substring_list_idx));
00614 }
00615
00616 COPY_OPND(actual_opnd[i], IR_OPND_L(OPND_IDX(actual_opnd[i])));
00617
00618 if (OPND_FLD(actual_opnd[i]) == IR_Tbl_Idx &&
00619 IR_OPR(OPND_IDX(actual_opnd[i])) == Dv_Deref_Opr) {
00620 inlinable = FALSE;
00621 PRINTMSG(call_line_number,
00622 1202,
00623 Inline,
00624 call_col_number,
00625 AT_OBJ_NAME_PTR(pgm_attr_idx),
00626 "the compiler cannot support this mapping");
00627 }
00628
00629 if (OPND_FLD(actual_opnd[i]) == IR_Tbl_Idx &&
00630 IR_OPR(OPND_IDX(actual_opnd[i])) == Subscript_Opr &&
00631 ATD_ARRAY_IDX(OPND_IDX(dummy_opnd[i])) == NULL_IDX) {
00632 inlinable = FALSE;
00633 PRINTMSG(call_line_number,
00634 1202,
00635 Inline,
00636 call_col_number,
00637 AT_OBJ_NAME_PTR(pgm_attr_idx),
00638 "the compiler cannot support this mapping");
00639 }
00640
00641 tmp_attr = gen_compiler_tmp(call_line_number,
00642 call_col_number,
00643 Priv,
00644 TRUE);
00645 ATD_STOR_BLK_IDX(tmp_attr) = SCP_SB_STACK_IDX(curr_scp_idx);
00646 ATD_TYPE_IDX(tmp_attr) = CG_INTEGER_DEFAULT_TYPE;
00647 AT_SEMANTICS_DONE(tmp_attr) = TRUE;
00648
00649 NTR_IR_TBL(asg_idx);
00650 IR_TYPE_IDX(asg_idx) = CG_INTEGER_DEFAULT_TYPE;
00651 IR_OPR(asg_idx) = Asg_Opr;
00652 IR_LINE_NUM(asg_idx) = call_line_number;
00653 IR_COL_NUM(asg_idx) = call_col_number;
00654 IR_FLD_L(asg_idx) = AT_Tbl_Idx;
00655 IR_IDX_L(asg_idx) = tmp_attr;
00656 IR_LINE_NUM_L(asg_idx) = call_line_number;
00657 IR_COL_NUM_L(asg_idx) = call_col_number;
00658 IR_FLD_R(asg_idx) = OPND_FLD(substring_offset[i]);
00659 IR_IDX_R(asg_idx) = OPND_IDX(substring_offset[i]);
00660 IR_LINE_NUM_R(asg_idx) = call_line_number;
00661 IR_COL_NUM_R(asg_idx) = call_col_number;
00662
00663 curr_stmt_sh_idx = call_sh;
00664 gen_sh(Before,
00665 Assignment_Stmt,
00666 call_line_number,
00667 call_col_number,
00668 FALSE,
00669 FALSE,
00670 TRUE);
00671 SH_IR_IDX(SH_PREV_IDX(curr_stmt_sh_idx)) = asg_idx;
00672 SH_P2_SKIP_ME(SH_PREV_IDX(curr_stmt_sh_idx)) = TRUE;
00673
00674 OPND_IDX(substring_offset[i]) = tmp_attr;
00675 OPND_FLD(substring_offset[i]) = AT_Tbl_Idx;
00676
00677 TRACE (Func_Exit, "character_to_character", NULL);
00678
00679 return;
00680
00681 }
00682
00683
00684
00685
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695
00696
00697
00698
00699
00700
00701
00702
00703
00704 int copy_sbtree(int idx,
00705 fld_type fld)
00706
00707 {
00708 id_str_type name;
00709 int i;
00710 int j;
00711 int k;
00712 int sub;
00713 int trp;
00714 int list_idx;
00715 int attr_idx;
00716 int original_idx;
00717 int cn_idx;
00718 int plus_idx;
00719 int sb_idx;
00720 int il_idx;
00721 int tmp_idx1;
00722 int tmp_idx2;
00723 int outer_sb_idx;
00724 int new_label_attr;
00725 int module_attr_idx;
00726 int name_idx;
00727 int new_root = NULL_IDX;
00728 int new_idx;
00729 int function_attr;
00730 #ifdef KEY
00731 int flipped_bd_idx = 0;
00732 #else
00733 int flipped_bd_idx;
00734 #endif
00735 int dummy_bd_idx;
00736 int new_blk;
00737 int flipped_array = 0;
00738 int type_idx2;
00739 int trail;
00740 int match = 0;
00741 boolean found;
00742 long_type cnst[MAX_WORDS_FOR_INTEGER];
00743 long_type folded_const[MAX_WORDS_FOR_NUMERIC];
00744
00745
00746 TRACE (Func_Entry, "copy_sbtree", NULL);
00747
00748 if (idx != NULL_IDX) {
00749
00750 switch(fld) {
00751
00752 case NO_Tbl_Idx :
00753 break;
00754
00755 case IR_Tbl_Idx :
00756 NTR_IR_TBL(new_root);
00757
00758
00759
00760
00761
00762
00763 if (new_root > MAX_INLINE_IR) {
00764 table_overflow = TRUE;
00765 inlinable = FALSE;
00766 }
00767
00768 COPY_TBL_NTRY(ir_tbl, new_root, idx);
00769 IR_LINE_NUM(new_root) = call_line_number;
00770 IR_COL_NUM(new_root) = call_col_number;
00771
00772 new_idx = copy_sbtree(IR_IDX_L(idx), IR_FLD_L(idx));
00773 IR_IDX_L(new_root) = new_idx;
00774 if (IR_FLD_L(idx) == AT_Tbl_Idx) {
00775 for (i = 0; i <= number_of_dummy_args; i++) {
00776 if (IR_IDX_L(idx) == OPND_IDX(dummy_opnd[i])) {
00777 match = i;
00778
00779 if ((IR_OPR(idx) == Subscript_Opr ||
00780 IR_OPR(idx) == Section_Subscript_Opr ||
00781 IR_OPR(idx) == Whole_Subscript_Opr) &&
00782 ATD_RESHAPE_ARRAY_OPT(OPND_IDX(flipped_opnd[i]))) {
00783 flipped_bd_idx =
00784 ATD_ARRAY_IDX(OPND_IDX(flipped_opnd[i]));
00785 dummy_bd_idx =
00786 ATD_ARRAY_IDX(OPND_IDX(dummy_opnd[i]));
00787
00788 if (dummy_bd_idx != NULL_IDX &&
00789 flipped_bd_idx != NULL_IDX &&
00790 BD_RANK(dummy_bd_idx) < BD_RANK(flipped_bd_idx)) {
00791 flipped_array = BD_RANK(flipped_bd_idx) -
00792 BD_RANK(dummy_bd_idx) ;
00793 }
00794 }
00795
00796 if (OPND_FLD(actual_opnd[i]) == AT_Tbl_Idx &&
00797 ATD_AUTOMATIC(OPND_IDX(actual_opnd[i]))) {
00798 COPY_OPND(IR_OPND_L(new_root), actual_opnd[i]);
00799 }
00800 else if (OPND_IDX(struct_tree[i]) != NULL_IDX) {
00801 COPY_OPND(IR_OPND_L(new_root), struct_tree[i]);
00802 }
00803 else {
00804 COPY_OPND(IR_OPND_L(new_root), actual_opnd[i]);
00805 }
00806 }
00807 }
00808
00809 if (AT_OBJ_CLASS(IR_IDX_L(idx)) == Label) {
00810 for (k = 0; k < next_label_slot; k++) {
00811 if (IR_IDX_L(idx) == old_label[k]) {
00812 break;
00813 }
00814 }
00815
00816 if (k < next_label_slot) {
00817 IR_IDX_L(new_root) = new_label[k];
00818 IR_FLD_L(new_root) = AT_Tbl_Idx;
00819 }
00820 else {
00821 old_label[next_label_slot] = IR_IDX_L(idx);
00822 new_label_attr = gen_internal_lbl(call_line_number);
00823 COPY_COMMON_ATTR_INFO(IR_IDX_L(idx),
00824 new_label_attr,
00825 Label);
00826 COPY_VARIANT_ATTR_INFO(IR_IDX_L(idx),
00827 new_label_attr,
00828 Label);
00829 AT_ATTR_LINK(new_label_attr) = NULL_IDX;
00830 new_label[next_label_slot] = new_label_attr;
00831
00832 IR_IDX_L(new_root) = new_label_attr;
00833 IR_FLD_L(new_root) = AT_Tbl_Idx;
00834
00835 if (ATL_DIRECTIVE_LIST(new_label_attr) != NULL_IDX) {
00836 il_idx = IL_IDX(ATL_DIRECTIVE_LIST(new_label_attr)) +
00837 Cache_Bypass_Dir_Idx;
00838
00839 if (IL_FLD(il_idx) == IL_Tbl_Idx) {
00840 il_idx = IL_IDX(il_idx);
00841
00842 while (il_idx != NULL_IDX) {
00843 for (i = 1; i <= number_of_dummy_args; i++) {
00844 if (OPND_IDX(dummy_opnd[i]) == IL_IDX(il_idx)){
00845 IL_IDX(il_idx) = OPND_IDX(actual_opnd[i]);
00846 break;
00847 }
00848 }
00849 il_idx = IL_NEXT_LIST_IDX(il_idx);
00850 }
00851 }
00852 }
00853
00854 next_label_slot = next_label_slot + 1;
00855 if (next_label_slot == MAX_INLINE_LABELS) {
00856 next_label_slot = next_label_slot - 1;
00857 inlinable = FALSE;
00858 table_overflow = TRUE;
00859 }
00860 }
00861 }
00862 }
00863
00864
00865 if (IR_FLD_L(idx) != IL_Tbl_Idx) {
00866 IR_LINE_NUM_L(new_root) = call_line_number;
00867 IR_COL_NUM_L(new_root) = call_col_number;
00868 }
00869
00870 if (IR_FLD_R(idx) == IL_Tbl_Idx && IR_LIST_CNT_R(idx) == 0) {
00871 new_idx = NULL_IDX;
00872 }
00873 else {
00874 new_idx = copy_sbtree(IR_IDX_R(idx), IR_FLD_R(idx));
00875 }
00876
00877 IR_IDX_R(new_root) = new_idx;
00878
00879 if (flipped_array > 0) {
00880 tmp_idx1 = NULL_IDX;
00881 tmp_idx2 = NULL_IDX;
00882
00883 il_idx = new_idx;
00884 while (il_idx != NULL_IDX) {
00885 tmp_idx1 = il_idx;
00886 il_idx = IL_NEXT_LIST_IDX(il_idx);
00887 }
00888
00889 for (i = 1; i <= flipped_array; i++) {
00890 NTR_IR_LIST_TBL(tmp_idx2);
00891 IL_FLD(tmp_idx2) = CN_Tbl_Idx;
00892 IL_IDX(tmp_idx2) = CN_INTEGER_ONE_IDX;
00893 IL_LINE_NUM(tmp_idx2) = call_line_number;
00894 IL_COL_NUM(tmp_idx2) = call_col_number;
00895 IL_PREV_LIST_IDX(tmp_idx2) = tmp_idx1;
00896 IL_NEXT_LIST_IDX(tmp_idx1) = tmp_idx2;
00897 tmp_idx1 = tmp_idx2;
00898 }
00899
00900 IR_LIST_CNT_R(new_root) = BD_RANK(flipped_bd_idx);
00901 }
00902
00903 if (IR_FLD_R(idx) == AT_Tbl_Idx) {
00904 for (i = 0; i <= number_of_dummy_args; i++) {
00905 if (IR_IDX_R(idx) == OPND_IDX(dummy_opnd[i])) {
00906 if (OPND_FLD(actual_opnd[i]) == AT_Tbl_Idx &&
00907 ATD_AUTOMATIC(OPND_IDX(actual_opnd[i]))) {
00908 COPY_OPND(IR_OPND_R(new_root), actual_opnd[i]);
00909 }
00910 else if (OPND_IDX(struct_tree[i]) != NULL_IDX) {
00911 COPY_OPND(IR_OPND_R(new_root), struct_tree[i]);
00912 }
00913 else {
00914 COPY_OPND(IR_OPND_R(new_root), actual_opnd[i]);
00915 }
00916 }
00917 }
00918
00919 if (AT_OBJ_CLASS(IR_IDX_R(idx)) == Label) {
00920 for (k = 0; k < next_label_slot; k++) {
00921 if (IR_IDX_R(idx) == old_label[k]) {
00922 break;
00923 }
00924 }
00925
00926 if (k < next_label_slot) {
00927 IR_IDX_R(new_root) = new_label[k];
00928 IR_FLD_R(new_root) = AT_Tbl_Idx;
00929 }
00930 else {
00931 old_label[next_label_slot] = IR_IDX_R(idx);
00932 new_label_attr = gen_internal_lbl(call_line_number);
00933 COPY_COMMON_ATTR_INFO(IR_IDX_R(idx),
00934 new_label_attr,
00935 Label);
00936
00937 COPY_VARIANT_ATTR_INFO(IR_IDX_R(idx),
00938 new_label_attr,
00939 Label);
00940
00941 AT_ATTR_LINK(new_label_attr) = NULL_IDX;
00942 new_label[next_label_slot] = new_label_attr;
00943
00944 IR_IDX_R(new_root) = new_label_attr;
00945 IR_FLD_R(new_root) = AT_Tbl_Idx;
00946
00947 if (ATL_DIRECTIVE_LIST(new_label_attr) != NULL_IDX) {
00948 il_idx = IL_IDX(ATL_DIRECTIVE_LIST(new_label_attr)) +
00949 Cache_Bypass_Dir_Idx;
00950
00951 if (IL_FLD(il_idx) == IL_Tbl_Idx) {
00952 il_idx = IL_IDX(il_idx);
00953
00954 while (il_idx != NULL_IDX) {
00955 for (i = 1; i <= number_of_dummy_args; i++) {
00956 if (OPND_IDX(dummy_opnd[i]) == IL_IDX(il_idx)){
00957 IL_IDX(il_idx) = OPND_IDX(actual_opnd[i]);
00958 break;
00959 }
00960 }
00961
00962 il_idx = IL_NEXT_LIST_IDX(il_idx);
00963 }
00964 }
00965 }
00966
00967 next_label_slot = next_label_slot + 1;
00968 if (next_label_slot == MAX_INLINE_LABELS) {
00969 next_label_slot = next_label_slot - 1;
00970 inlinable = FALSE;
00971 table_overflow = TRUE;
00972 }
00973 }
00974 }
00975 }
00976
00977 if (IR_FLD_R(idx) != IL_Tbl_Idx) {
00978 IR_LINE_NUM_R(new_root) = call_line_number;
00979 IR_COL_NUM_R(new_root) = call_col_number;
00980 }
00981
00982 switch (IR_OPR(idx)) {
00983 case Whole_Substring_Opr :
00984 case Substring_Opr :
00985 attr_idx = find_left_attr(&IR_OPND_L(idx));
00986 if (IR_FLD_L(idx) == AT_Tbl_Idx &&
00987 !ATD_IM_A_DOPE(attr_idx)) {
00988
00989 for (i = 0; i <= number_of_dummy_args; i++) {
00990 if (attr_idx == OPND_IDX(dummy_opnd[i])) {
00991 sub = IR_IDX_R(new_root);
00992 for (j = 1; j <= 2; j++) {
00993 NTR_IR_TBL(plus_idx);
00994 IR_OPR(plus_idx) = Plus_Opr;
00995 IR_TYPE_IDX(plus_idx) = CG_INTEGER_DEFAULT_TYPE;
00996 IR_LINE_NUM(plus_idx) = call_line_number;
00997 IR_COL_NUM(plus_idx) = call_col_number;
00998 COPY_OPND(IR_OPND_L(plus_idx), IL_OPND(sub));
00999 IR_LINE_NUM_L(plus_idx) = call_line_number;
01000 IR_COL_NUM_L(plus_idx) = call_col_number;
01001 COPY_OPND(IR_OPND_R(plus_idx),
01002 substring_offset[i]);
01003 IR_LINE_NUM_R(plus_idx) = call_line_number;
01004 IR_COL_NUM_R(plus_idx) = call_col_number;
01005
01006 IL_FLD(sub) = IR_Tbl_Idx;
01007 IL_IDX(sub) = plus_idx;
01008 sub = IL_NEXT_LIST_IDX(sub);
01009 }
01010 }
01011 }
01012 }
01013 break;
01014
01015
01016 case Whole_Subscript_Opr :
01017 case Section_Subscript_Opr :
01018 case Subscript_Opr :
01019 attr_idx = find_left_attr(&IR_OPND_L(idx));
01020 for (i = 0; i <= number_of_dummy_args; i++) {
01021 if (attr_idx == OPND_IDX(dummy_opnd[i])) {
01022 sub = IR_IDX_R(new_root);
01023 k = 1;
01024 while (sub != NULL_IDX) {
01025 if (IL_FLD(sub) == IR_Tbl_Idx &&
01026 IR_OPR(IL_IDX(sub)) == Triplet_Opr) {
01027 trp = IR_IDX_L(IL_IDX(sub));
01028 for (j = 1; j <= 2; j++) {
01029 NTR_IR_TBL(plus_idx);
01030 IR_OPR(plus_idx) = Plus_Opr;
01031 IR_TYPE_IDX(plus_idx) = CG_INTEGER_DEFAULT_TYPE;
01032 IR_LINE_NUM(plus_idx) = call_line_number;
01033 IR_COL_NUM(plus_idx) = call_col_number;
01034 COPY_OPND(IR_OPND_L(plus_idx), IL_OPND(trp));
01035 IR_LINE_NUM_L(plus_idx) = call_line_number;
01036 IR_COL_NUM_L(plus_idx) = call_col_number;
01037 COPY_OPND(IR_OPND_R(plus_idx),
01038 linearized_offset[i][k]);
01039 IR_LINE_NUM_R(plus_idx) = call_line_number;
01040 IR_COL_NUM_R(plus_idx) = call_col_number;
01041
01042 IL_FLD(trp) = IR_Tbl_Idx;
01043 IL_IDX(trp) = plus_idx;
01044 trp = IL_NEXT_LIST_IDX(trp);
01045 }
01046 }
01047 else {
01048 NTR_IR_TBL(plus_idx);
01049 IR_OPR(plus_idx) = Plus_Opr;
01050 IR_TYPE_IDX(plus_idx) = CG_INTEGER_DEFAULT_TYPE;
01051 IR_LINE_NUM(plus_idx) = call_line_number;
01052 IR_COL_NUM(plus_idx) = call_col_number;
01053 COPY_OPND(IR_OPND_L(plus_idx), IL_OPND(sub));
01054 IR_LINE_NUM_L(plus_idx) = call_line_number;
01055 IR_COL_NUM_L(plus_idx) = call_col_number;
01056 COPY_OPND(IR_OPND_R(plus_idx),
01057 linearized_offset[i][k]);
01058 IR_LINE_NUM_R(plus_idx) = call_line_number;
01059 IR_COL_NUM_R(plus_idx) = call_col_number;
01060
01061 IL_FLD(sub) = IR_Tbl_Idx;
01062 IL_IDX(sub) = plus_idx;
01063 }
01064 sub = IL_NEXT_LIST_IDX(sub);
01065 k = k + 1;
01066 }
01067 }
01068 }
01069 break;
01070
01071
01072 case Asg_Opr :
01073 if (TYP_TYPE(IR_TYPE_IDX(idx)) == CRI_Ch_Ptr ||
01074 TYP_TYPE(IR_TYPE_IDX(idx)) == CRI_Ptr) {
01075 if ((IR_FLD_R(idx) == CN_Tbl_Idx &&
01076 TYP_TYPE(CN_TYPE_IDX(IR_IDX_R(idx))) == Integer) ||
01077 (IR_FLD_R(idx) == AT_Tbl_Idx &&
01078 AT_OBJ_CLASS(idx) == Data_Obj &&
01079 TYP_TYPE(ATD_TYPE_IDX(IR_IDX_R(idx))) == Integer) ||
01080 (IR_FLD_R(idx) == IR_Tbl_Idx &&
01081 TYP_TYPE(IR_TYPE_IDX(IR_IDX_R(idx))) == Integer)) {
01082 if (inlinable) {
01083 inlinable = FALSE;
01084 PRINTMSG(call_line_number,
01085 1652,
01086 Inline,
01087 call_col_number,
01088 AT_OBJ_NAME_PTR(pgm_attr_idx));
01089 }
01090 }
01091 }
01092
01093 if (IR_FLD_L(new_root) == CN_Tbl_Idx) {
01094 if (inlinable) {
01095 inlinable = FALSE;
01096 PRINTMSG(call_line_number,
01097 1325,
01098 Inline,
01099 call_col_number,
01100 AT_OBJ_NAME_PTR(pgm_attr_idx));
01101 }
01102 }
01103
01104 if (IR_FLD_L(new_root) == AT_Tbl_Idx &&
01105 AT_OBJ_CLASS(IR_IDX_L(new_root)) == Label) {
01106 if (inlinable) {
01107 inlinable = FALSE;
01108 PRINTMSG(call_line_number,
01109 1331,
01110 Inline,
01111 call_col_number,
01112 AT_OBJ_NAME_PTR(pgm_attr_idx));
01113 }
01114 }
01115 break;
01116
01117 case User_Code_Start_Opr :
01118 IR_OPR(new_root) = Null_Opr;
01119 break;
01120
01121 case Doall_Cmic_Opr :
01122 if (parallel_region > 0) {
01123 if (inlinable) {
01124 inlinable = FALSE;
01125 PRINTMSG(call_line_number,
01126 1556,
01127 Inline,
01128 call_col_number,
01129 AT_OBJ_NAME_PTR(pgm_attr_idx));
01130 }
01131 }
01132 break;
01133
01134 case Entry_Opr :
01135 if (strcmp(AT_OBJ_NAME_PTR(pgm_attr_idx),
01136 AT_OBJ_NAME_PTR(IR_IDX_L(idx))) == 0) {
01137 processing_ENTRY_called = TRUE;
01138 IR_OPR(new_root) = Label_Opr;
01139 IR_IDX_L(new_root) = entry_label_attr_idx;
01140 }
01141 else {
01142
01143
01144
01145
01146 IR_OPR(new_root) = Null_Opr;
01147 processing_ENTRY_called = FALSE;
01148 next_pgm_idx[npi] = IR_IDX_L(idx);
01149 npi = npi + 1;
01150 }
01151 break;
01152
01153 case Init_Reloc_Opr :
01154 case Init_Opr :
01155
01156
01157
01158
01159
01160 if (!(IR_FLD_L(idx) == IR_Tbl_Idx &&
01161 IR_OPR(IR_IDX_L(idx)) == Implied_Do_Opr)) {
01162 attr_idx = find_left_attr(&IR_OPND_L(idx));
01163 sb_idx = ATD_STOR_BLK_IDX(attr_idx);
01164
01165 CREATE_ID(name, sb_name[What_Blk], sb_len[What_Blk]);
01166
01167 if (sb_idx != NULL_IDX) {
01168 if (strcmp(SB_NAME_PTR(sb_idx),
01169 (char *)&name.string) == 0) {
01170 IR_OPR(new_root) = Null_Opr;
01171 }
01172 }
01173 }
01174
01175 i = 0;
01176 while (next_pgm_idx[i] != NULL_IDX) {
01177 if (strcmp(AT_OBJ_NAME_PTR(next_pgm_idx[i]),
01178 AT_OBJ_NAME_PTR(pgm_attr_idx)) == 0) {
01179 IR_OPR(new_root) = Null_Opr;
01180 break;
01181 }
01182
01183 i = i + 1;
01184 }
01185 break;
01186
01187 case Not_Opr :
01188 if (IR_FLD_L(idx) == IR_Tbl_Idx &&
01189 IR_OPR(IR_IDX_L(idx)) == Argchck_Present_Opr) {
01190 cn_idx = set_up_logical_constant(cnst,
01191 CG_LOGICAL_DEFAULT_TYPE,
01192 FALSE_VALUE,
01193 TRUE);
01194 IR_FLD_L(new_root) = CN_Tbl_Idx;
01195 IR_IDX_L(new_root) = cn_idx;
01196 }
01197 break;
01198
01199 case Use_Opr :
01200 module_attr_idx = IR_IDX_L(idx);
01201 name_idx = NULL_IDX;
01202
01203
01204
01205
01206
01207
01208
01209
01210
01211 if (ATP_MOD_PATH_IDX(module_attr_idx) == NULL_IDX &&
01212 !srch_global_name_tbl(AT_OBJ_NAME_PTR(module_attr_idx),
01213 AT_NAME_LEN(module_attr_idx),
01214 &name_idx)) {
01215 inlinable = FALSE;
01216 PRINTMSG(call_line_number, 1346, Inline,
01217 call_col_number,
01218 AT_OBJ_NAME_PTR(pgm_attr_idx));
01219 }
01220 else if (name_idx != NULL_IDX &&
01221 GA_DEFINED(GN_ATTR_IDX(name_idx))){
01222 ATP_IN_CURRENT_COMPILE(module_attr_idx) = TRUE;
01223 }
01224 break;
01225
01226 case Clen_Opr :
01227 if (match != 0 && IR_FLD_L(idx) == AT_Tbl_Idx) {
01228 if (TYP_CHAR_CLASS(ATD_TYPE_IDX(IR_IDX_L(idx))) ==
01229 Assumed_Size_Char) {
01230 IR_OPR(new_root) = Int_Opr;
01231 COPY_OPND(IR_OPND_L(new_root), substring_len[match]);
01232 }
01233 }
01234 break;
01235
01236 case Aloc_Opr :
01237 if (match != 0 &&
01238 OPND_FLD(actual_opnd[match]) == CN_Tbl_Idx) {
01239 IR_OPR(new_root) = Const_Tmp_Loc_Opr;
01240 COPY_OPND(IR_OPND_L(new_root), actual_opnd[match]);
01241 }
01242 break;
01243
01244 case Loc_Opr :
01245 if (inlinable) {
01246 attr_idx = find_left_attr(&IR_OPND_L(idx));
01247 if (attr_idx != NULL_IDX &&
01248 AT_OBJ_CLASS(attr_idx) == Data_Obj &&
01249 ATD_IN_COMMON(attr_idx)) {
01250 inlinable = FALSE;
01251 PRINTMSG(call_line_number,
01252 1358,
01253 Inline,
01254 call_col_number,
01255 AT_OBJ_NAME_PTR(pgm_attr_idx));
01256 }
01257
01258 if (inlinable) {
01259 if (match != 0 &&
01260 OPND_FLD(actual_opnd[match]) == CN_Tbl_Idx) {
01261 inlinable = FALSE;
01262 PRINTMSG(call_line_number,
01263 1437,
01264 Inline,
01265 call_col_number,
01266 AT_OBJ_NAME_PTR(pgm_attr_idx));
01267 }
01268 }
01269 }
01270 break;
01271
01272 case Numarg_Opr :
01273 if (inlinable) {
01274 inlinable = FALSE;
01275 PRINTMSG(call_line_number,
01276 1329,
01277 Inline,
01278 call_col_number,
01279 AT_OBJ_NAME_PTR(pgm_attr_idx));
01280 }
01281 break;
01282
01283 case Integer_Cdir_Opr :
01284 if (inlinable) {
01285 inlinable = FALSE;
01286 PRINTMSG(call_line_number,
01287 1409,
01288 Inline,
01289 call_col_number,
01290 AT_OBJ_NAME_PTR(pgm_attr_idx));
01291 }
01292 break;
01293
01294 case Call_Opr :
01295 if ((AT_OBJ_NAME_PTR(IR_IDX_L(idx)))[0] != '_') {
01296 if (inlinable &&
01297 opt_flags.inline_lvl == Inline_Lvl_3 &&
01298 !ATP_INLINE_ALWAYS(pgm_attr_idx) &&
01299 !inline_in_effect) {
01300 inlinable = FALSE;
01301 PRINTMSG(call_line_number,
01302 1543,
01303 Inline,
01304 call_col_number,
01305 AT_OBJ_NAME_PTR(pgm_attr_idx));
01306 }
01307 }
01308 break;
01309
01310 case Present_Opr :
01311 if (inlinable) {
01312 inlinable = FALSE;
01313 PRINTMSG(call_line_number,
01314 1327,
01315 Inline,
01316 call_col_number,
01317 AT_OBJ_NAME_PTR(pgm_attr_idx));
01318 }
01319 break;
01320
01321 case Br_Asg_Opr :
01322 if (inlinable) {
01323 inlinable = FALSE;
01324 PRINTMSG(call_line_number,
01325 1331,
01326 Inline,
01327 call_col_number,
01328 AT_OBJ_NAME_PTR(pgm_attr_idx));
01329 }
01330 break;
01331
01332 case Return_Opr :
01333 if (IR_IDX_L(idx) != NULL_IDX) {
01334 if (inlinable) {
01335 inlinable = FALSE;
01336 PRINTMSG(call_line_number,
01337 1326,
01338 Inline,
01339 call_col_number,
01340 AT_OBJ_NAME_PTR(pgm_attr_idx));
01341 }
01342 }
01343 else {
01344 IR_OPR(new_root) = Br_Uncond_Opr;
01345 IR_IDX_R(new_root) = exit_label_attr_idx;
01346 IR_FLD_R(new_root) = AT_Tbl_Idx;
01347 }
01348 break;
01349 }
01350 break;
01351
01352 case AT_Tbl_Idx :
01353 if (AT_OBJ_CLASS(idx) == Data_Obj) {
01354 sb_idx = ATD_STOR_BLK_IDX(idx);
01355
01356
01357
01358
01359
01360
01361 if (ATD_CLASS(idx) == CRI__Pointee) {
01362 copy_sbtree(ATD_PTR_IDX(idx), AT_Tbl_Idx);
01363 }
01364
01365 if (inlinable) {
01366
01367
01368
01369
01370
01371
01372
01373
01374
01375
01376 if (ATD_CLASS(idx) == Function_Result) {
01377 function_attr = NULL_IDX;
01378
01379 if (OPND_FLD(dummy_opnd[0]) == AT_Tbl_Idx) {
01380 function_attr = OPND_IDX(dummy_opnd[0]);
01381 }
01382
01383 if (OPND_FLD(dummy_opnd[1]) == AT_Tbl_Idx &&
01384 ATD_CLASS(OPND_IDX(dummy_opnd[1])) == Function_Result) {
01385 function_attr = OPND_IDX(dummy_opnd[1]);
01386 }
01387
01388 if (function_attr != NULL_IDX) {
01389 if (idx != function_attr) {
01390 if (TYP_TYPE(ATD_TYPE_IDX(idx)) ==
01391 TYP_TYPE(ATD_TYPE_IDX(function_attr))) {
01392 inlinable = FALSE;
01393 PRINTMSG(call_line_number,
01394 1388,
01395 Inline,
01396 call_col_number,
01397 AT_OBJ_NAME_PTR(pgm_attr_idx));
01398 }
01399 }
01400 }
01401 }
01402
01403 if (ATD_CLASS(idx) == Dummy_Argument) {
01404 found = FALSE;
01405 for (i = 1; i <= number_of_dummy_args; i++) {
01406 if (OPND_IDX(dummy_opnd[i]) == idx) {
01407 found = TRUE;
01408 break;
01409 }
01410 }
01411
01412 if (processing_ENTRY_called) {
01413 if (!found && !AT_HOST_ASSOCIATED(idx)) {
01414 inlinable = FALSE;
01415 PRINTMSG(call_line_number,
01416 1345,
01417 Inline,
01418 call_col_number,
01419 AT_OBJ_NAME_PTR(pgm_attr_idx));
01420 }
01421 }
01422 }
01423
01424 if (ATD_CLASS(idx) == Compiler_Tmp &&
01425 ATD_TMP_INIT_NOT_DONE(idx)) {
01426 insert_init_stmt_for_tmp(idx);
01427 }
01428
01429 if (ATD_CLASS(idx) == CRI__Pointee &&
01430 SB_SCP_IDX(sb_idx) != curr_scp_idx) {
01431
01432
01433
01434
01435 NTR_ATTR_TBL(new_idx);
01436 COPY_ATTR_NTRY(new_idx, idx);
01437 idx = new_idx;
01438 ADD_ATTR_TO_LOCAL_LIST(idx);
01439
01440 new_blk = ntr_stor_blk_tbl(SB_NAME_PTR(sb_idx),
01441 SB_NAME_LEN(sb_idx),
01442 call_line_number,
01443 call_col_number,
01444 SB_BLK_TYPE(sb_idx));
01445
01446 COPY_TBL_NTRY(stor_blk_tbl,
01447 new_blk,
01448 sb_idx);
01449
01450 SB_SCP_IDX(new_blk) = curr_scp_idx;
01451 ATD_STOR_BLK_IDX(idx) = new_blk;
01452 }
01453
01454
01455
01456
01457
01458
01459
01460
01461
01462
01463
01464 if (sb_idx != NULL_IDX &&
01465 (SB_BLK_TYPE(sb_idx) == Common ||
01466 SB_BLK_TYPE(sb_idx) == Task_Common ||
01467 SB_BLK_TYPE(sb_idx) == Threadprivate ||
01468 SB_BLK_TYPE(sb_idx) == Static_Named ||
01469 SB_BLK_TYPE(sb_idx) == Static_Local ||
01470 SB_BLK_TYPE(sb_idx) == Static)) {
01471
01472 if (TYP_TYPE(ATD_TYPE_IDX(idx)) == CRI_Ptr ||
01473 TYP_TYPE(ATD_TYPE_IDX(idx)) == CRI_Ch_Ptr) {
01474 inlinable = FALSE;
01475 PRINTMSG(call_line_number, 1359,
01476 Inline,
01477 call_col_number,
01478 AT_OBJ_NAME_PTR(pgm_attr_idx));
01479 }
01480
01481 if (ATD_PE_ARRAY_IDX(idx) != NULL_IDX) {
01482 inlinable = FALSE;
01483 PRINTMSG(call_line_number,
01484 1613,
01485 Inline,
01486 call_col_number,
01487 AT_OBJ_NAME_PTR(pgm_attr_idx));
01488 }
01489
01490 if (SB_BLK_TYPE(sb_idx) == Static_Local ||
01491 SB_BLK_TYPE(sb_idx) == Static_Named) {
01492 SB_BLK_TYPE(sb_idx) = Common;
01493 }
01494
01495 outer_sb_idx = srch_stor_blk_tbl(SB_NAME_PTR(sb_idx),
01496 SB_NAME_LEN(sb_idx),
01497 curr_scp_idx);
01498
01499 if (outer_sb_idx != NULL_IDX) {
01500 original_idx = idx;
01501
01502 attr_idx = SB_FIRST_ATTR_IDX(outer_sb_idx);
01503
01504 while (attr_idx != NULL_IDX) {
01505 type_idx2 = CG_LOGICAL_DEFAULT_TYPE;
01506
01507
01508
01509
01510
01511
01512
01513
01514 if (idx != NULL_IDX &&
01515 ATD_OFFSET_FLD(attr_idx) == CN_Tbl_Idx &&
01516 ATD_OFFSET_FLD(idx) == CN_Tbl_Idx) {
01517 if (folder_driver(
01518 (char *)&CN_CONST(ATD_OFFSET_IDX(attr_idx)),
01519 CN_TYPE_IDX(ATD_OFFSET_IDX(attr_idx)),
01520 (char *)&CN_CONST(ATD_OFFSET_IDX(idx)),
01521 CN_TYPE_IDX(ATD_OFFSET_IDX(idx)),
01522 folded_const,
01523 &type_idx2,
01524 call_line_number,
01525 call_col_number,
01526 2,
01527 Eq_Opr)) {
01528 }
01529
01530 if (THIS_IS_TRUE(folded_const, type_idx2)) {
01531 if (ATD_ARRAY_IDX(attr_idx) == NULL_IDX &&
01532 ATD_ARRAY_IDX(idx) == NULL_IDX) {
01533 if (TYP_LINEAR(ATD_TYPE_IDX(attr_idx)) ==
01534 TYP_LINEAR(ATD_TYPE_IDX(idx))) {
01535 idx = attr_idx;
01536 }
01537 }
01538
01539 if (ATD_ARRAY_IDX(attr_idx) != NULL_IDX &&
01540 ATD_ARRAY_IDX(idx) != NULL_IDX) {
01541 if (TYP_LINEAR(ATD_TYPE_IDX(attr_idx)) ==
01542 TYP_LINEAR(ATD_TYPE_IDX(idx)) &&
01543 BD_RANK(ATD_ARRAY_IDX(attr_idx)) ==
01544 BD_RANK(ATD_ARRAY_IDX(idx))) {
01545 for (i = 1;
01546 i <= BD_RANK(ATD_ARRAY_IDX(idx));
01547 i++) {
01548
01549
01550 if (BD_XT_FLD(ATD_ARRAY_IDX(attr_idx), i) == CN_Tbl_Idx &&
01551 BD_XT_FLD(ATD_ARRAY_IDX(idx), i) == CN_Tbl_Idx) {
01552
01553 if (folder_driver(
01554 (char *)&CN_CONST(BD_XT_IDX(ATD_ARRAY_IDX(attr_idx), i)),
01555 CN_TYPE_IDX(BD_XT_IDX(ATD_ARRAY_IDX(attr_idx), i)),
01556 (char *)&CN_CONST(BD_XT_IDX(ATD_ARRAY_IDX(idx), i)),
01557 CN_TYPE_IDX(BD_XT_IDX(ATD_ARRAY_IDX(idx), i)),
01558 folded_const,
01559 &type_idx2,
01560 call_line_number,
01561 call_col_number,
01562 2,
01563 Eq_Opr)) {
01564 }
01565
01566 if (THIS_IS_TRUE(folded_const, type_idx2)) {
01567 idx = attr_idx;
01568 }
01569 }
01570
01571
01572 }
01573 }
01574 }
01575 }
01576 }
01577
01578 attr_idx = ATD_NEXT_MEMBER_IDX(attr_idx);
01579 }
01580
01581
01582
01583
01584
01585
01586 if (SB_LEN_FLD(sb_idx) == CN_Tbl_Idx &&
01587 SB_LEN_FLD(outer_sb_idx) == CN_Tbl_Idx) {
01588 type_idx2 = CG_LOGICAL_DEFAULT_TYPE;
01589
01590 if (folder_driver(
01591 (char *)&CN_CONST(SB_LEN_IDX(sb_idx)),
01592 CN_TYPE_IDX(SB_LEN_IDX(sb_idx)),
01593 (char *)&CN_CONST(SB_LEN_IDX(outer_sb_idx)),
01594 CN_TYPE_IDX(SB_LEN_IDX(outer_sb_idx)),
01595 folded_const,
01596 &type_idx2,
01597 call_line_number,
01598 call_col_number,
01599 2,
01600 Gt_Opr)) {
01601 }
01602
01603
01604 if (THIS_IS_TRUE(folded_const, type_idx2)) {
01605 if (inlinable &&
01606 (strcmp(SB_NAME_PTR(outer_sb_idx),
01607 sb_name[What_Blk]) != 0)) {
01608
01609 SB_LEN_IDX(outer_sb_idx) = SB_LEN_IDX(sb_idx);
01610 PRINTMSG(call_line_number,
01611 1524,
01612 Warning,
01613 call_col_number,
01614 SB_BLANK_COMMON(outer_sb_idx) ?
01615 "" : SB_NAME_PTR(outer_sb_idx),
01616 AT_OBJ_NAME_PTR(pgm_attr_idx));
01617 }
01618 }
01619 }
01620
01621 if (original_idx == idx) {
01622 SB_DEF_MULT_SCPS(outer_sb_idx) = TRUE;
01623 }
01624
01625 ATD_STOR_BLK_IDX(idx) = outer_sb_idx;
01626
01627
01628 if (ATD_POINTER(idx)) {
01629 inlinable = FALSE;
01630 PRINTMSG(call_line_number,
01631 1337,
01632 Inline,
01633 call_col_number,
01634 AT_OBJ_NAME_PTR(pgm_attr_idx));
01635 }
01636 }
01637 else {
01638
01639
01640
01641
01642
01643
01644
01645
01646 if (SB_SCP_IDX(sb_idx) != curr_scp_idx) {
01647 new_blk = ntr_stor_blk_tbl(SB_NAME_PTR(sb_idx),
01648 SB_NAME_LEN(sb_idx),
01649 call_line_number,
01650 call_col_number,
01651 SB_BLK_TYPE(sb_idx));
01652
01653 COPY_TBL_NTRY(stor_blk_tbl,
01654 new_blk,
01655 sb_idx);
01656
01657 SB_SCP_IDX(new_blk) = curr_scp_idx;
01658 ATD_STOR_BLK_IDX(idx) = new_blk;
01659 }
01660 }
01661 }
01662 }
01663 }
01664
01665 new_root = idx;
01666 break;
01667
01668 case CN_Tbl_Idx :
01669 new_root = idx;
01670 break;
01671
01672 case SH_Tbl_Idx :
01673 new_root = NULL_IDX;
01674 break;
01675
01676 case IL_Tbl_Idx :
01677 trail = NULL_IDX;
01678 while (idx != NULL_IDX) {
01679 NTR_IR_LIST_TBL(list_idx);
01680 COPY_OPND(IL_OPND(list_idx), IL_OPND(idx));
01681 IL_PREV_LIST_IDX(list_idx) = NULL_IDX;
01682 IL_NEXT_LIST_IDX(list_idx) = NULL_IDX;
01683
01684 if (IL_ARG_DESC_VARIANT(idx)) {
01685 IL_ARG_DESC_VARIANT(list_idx) = TRUE;
01686 IL_ARG_DESC_IDX(list_idx) = IL_ARG_DESC_IDX(idx);
01687 }
01688 else {
01689 IL_PREV_LIST_IDX(list_idx) = trail;
01690 }
01691
01692 if (trail != NULL_IDX) {
01693 IL_NEXT_LIST_IDX(trail) = list_idx;
01694 }
01695 else {
01696 new_root = list_idx;
01697 }
01698
01699 IL_PE_SUBSCRIPT(list_idx) = IL_PE_SUBSCRIPT(idx);
01700
01701 new_idx = copy_sbtree(IL_IDX(idx), IL_FLD(idx));
01702 IL_IDX(list_idx) = new_idx;
01703
01704 if (IL_FLD(idx) == AT_Tbl_Idx) {
01705 for (i = 0; i <= number_of_dummy_args; i++) {
01706 if (IL_IDX(idx) == OPND_IDX(dummy_opnd[i])) {
01707 if (OPND_FLD(actual_opnd[i]) == AT_Tbl_Idx &&
01708 ATD_AUTOMATIC(OPND_IDX(actual_opnd[i]))) {
01709 COPY_OPND(IL_OPND(list_idx), actual_opnd[i]);
01710 }
01711 else if (OPND_IDX(struct_tree[i]) != NULL_IDX) {
01712 COPY_OPND(IL_OPND(list_idx), struct_tree[i]);
01713 }
01714 else {
01715 COPY_OPND(IL_OPND(list_idx), actual_opnd[i]);
01716 }
01717 }
01718 }
01719
01720 if (AT_OBJ_CLASS(IL_IDX(idx)) == Label) {
01721 for (k = 0; k < next_label_slot; k++) {
01722 if (IL_IDX(idx) == old_label[k]) {
01723 break;
01724 }
01725 }
01726
01727 if (k < next_label_slot) {
01728 IL_IDX(list_idx) = new_label[k];
01729 IL_FLD(list_idx) = AT_Tbl_Idx;
01730 }
01731 else {
01732 old_label[next_label_slot] = IL_IDX(idx);
01733 new_label_attr = gen_internal_lbl(call_line_number);
01734 COPY_COMMON_ATTR_INFO(IL_IDX(idx),
01735 new_label_attr,
01736 Label);
01737 COPY_VARIANT_ATTR_INFO(IL_IDX(idx),
01738 new_label_attr,
01739 Label);
01740 AT_ATTR_LINK(new_label_attr) = NULL_IDX;
01741 new_label[next_label_slot] = new_label_attr;
01742
01743 IL_IDX(list_idx) = new_label_attr;
01744 IL_FLD(list_idx) = AT_Tbl_Idx;
01745
01746 if (ATL_DIRECTIVE_LIST(new_label_attr) != NULL_IDX) {
01747 il_idx = IL_IDX(ATL_DIRECTIVE_LIST(new_label_attr)) +
01748 Cache_Bypass_Dir_Idx;
01749
01750 if (IL_FLD(il_idx) == IL_Tbl_Idx) {
01751 il_idx = IL_IDX(il_idx);
01752
01753 while (il_idx != NULL_IDX) {
01754 for (i = 1; i <= number_of_dummy_args; i++) {
01755 if (OPND_IDX(dummy_opnd[i]) ==
01756 IL_IDX(il_idx)) {
01757 IL_IDX(il_idx)=OPND_IDX(actual_opnd[i]);
01758 break;
01759 }
01760 }
01761
01762 il_idx = IL_NEXT_LIST_IDX(il_idx);
01763 }
01764 }
01765 }
01766
01767 next_label_slot = next_label_slot + 1;
01768 if (next_label_slot == MAX_INLINE_LABELS) {
01769 next_label_slot = next_label_slot - 1;
01770 inlinable = FALSE;
01771 table_overflow = TRUE;
01772 }
01773 }
01774 }
01775 }
01776
01777 if (IL_FLD(idx) != IL_Tbl_Idx) {
01778 IL_LINE_NUM(list_idx) = call_line_number;
01779 IL_COL_NUM(list_idx) = call_col_number;
01780 }
01781
01782 trail = list_idx;
01783 idx = IL_NEXT_LIST_IDX(idx);
01784 }
01785 break;
01786 }
01787 }
01788
01789
01790 TRACE (Func_Exit, "copy_sbtree", NULL);
01791
01792 return(new_root);
01793
01794 }
01795
01796
01797
01798
01799
01800
01801
01802
01803
01804
01805
01806
01807
01808
01809
01810
01811
01812
01813
01814
01815
01816 void make_copy_of_routine(int original_head)
01817
01818 {
01819 int copy_trail;
01820 int original_sh;
01821 int new_sh;
01822 int new_ir;
01823
01824 TRACE (Func_Entry, "make_copy_of_routine", NULL);
01825 copy_head = NULL_IDX;
01826
01827 original_sh = original_head;
01828 copy_trail = copy_head;
01829
01830 while (original_sh != NULL_IDX) {
01831 new_sh = ntr_sh_tbl();
01832 if (copy_head == NULL_IDX) {
01833 copy_head = new_sh;
01834 }
01835 COPY_TBL_NTRY(sh_tbl, new_sh, original_sh);
01836 SH_NEXT_IDX(new_sh) = NULL_IDX;
01837 SH_PREV_IDX(new_sh) = NULL_IDX;
01838 SH_GLB_LINE(new_sh) = call_line_number;
01839 SH_COL_NUM(new_sh) = call_col_number;
01840 new_ir = copy_sbtree(SH_IR_IDX(original_sh), IR_Tbl_Idx);
01841 sh_count = sh_count + 1;
01842 SH_IR_IDX(new_sh) = new_ir;
01843
01844 SH_PREV_IDX(new_sh) = copy_trail;
01845 if (SH_PREV_IDX(new_sh) != NULL_IDX) {
01846 SH_NEXT_IDX(SH_PREV_IDX(new_sh)) = new_sh;
01847 }
01848 copy_trail = new_sh;
01849 original_sh = SH_NEXT_IDX(original_sh);
01850 }
01851
01852 TRACE (Func_Exit, "make_copy_of_routine", NULL);
01853
01854 return;
01855
01856 }
01857
01858
01859
01860
01861
01862
01863
01864
01865
01866
01867
01868
01869
01870
01871
01872
01873
01874
01875
01876
01877 void srch_for_calls(int ir_idx,
01878 fld_type field)
01879 {
01880
01881 id_str_type stor_name;
01882 int actual_arg_list_idx;
01883 int new_darg_attr;
01884 int struct_base_attr_idx = NULL_IDX;
01885 int copy_in_sh;
01886 int idx;
01887 int sub;
01888 int list_idx;
01889 int list_idx1;
01890 int list_idx2;
01891 int attr_idx;
01892 int type_idx;
01893 int loc_idx;
01894 fld_type loc_fld;
01895 int based_blk;
01896 int div_idx;
01897 int asg_idx;
01898 int new_idx;
01899 int al_idx;
01900 int tmp_al_idx;
01901 int flipped_bd_idx;
01902 int dummy_bd_idx;
01903 int actual_bd_idx;
01904 int tmp_attr;
01905 int tmp_sh;
01906 int minus_idx;
01907 int i;
01908 int j;
01909 int k;
01910 int l;
01911 int line;
01912 int col;
01913 int copy_out_array_element;
01914 int copy_out_DV_scalar;
01915 opnd_type opnd;
01916 boolean name_substitution;
01917 boolean call_by_value;
01918 boolean dummy_modified;
01919 boolean dummy_referenced;
01920
01921
01922 TRACE (Func_Entry, "srch_for_calls", NULL);
01923
01924 switch (field) {
01925 case NO_Tbl_Idx :
01926 break;
01927
01928 case AT_Tbl_Idx :
01929 break;
01930
01931 case IR_Tbl_Idx :
01932 switch (IR_OPR(ir_idx)) {
01933 case Noinline_Cdir_Opr :
01934 noinline_in_effect = TRUE;
01935 inline_in_effect = FALSE;
01936 break;
01937
01938 case Inline_Cdir_Opr :
01939 noinline_in_effect = FALSE;
01940 inline_in_effect = TRUE;
01941 break;
01942
01943 case Call_Opr :
01944 call_line_number = IR_LINE_NUM_L(SH_IR_IDX(call_sh));
01945 call_col_number = IR_COL_NUM_L(SH_IR_IDX(call_sh));
01946
01947 next_label_slot = 0;
01948 pgm_attr_idx = IR_IDX_L(ir_idx);
01949
01950
01951
01952
01953
01954
01955 if (ATP_PROC(pgm_attr_idx) != Intrin_Proc &&
01956 !SH_INLINING_ATTEMPTED(call_sh) &&
01957 AT_OBJ_NAME(pgm_attr_idx) != '$' &&
01958 AT_OBJ_NAME(pgm_attr_idx) != '_') {
01959 inlinable = !table_overflow;
01960 SH_INLINING_ATTEMPTED(call_sh) = TRUE;
01961 next_copy_out_sh_idx = 0;
01962
01963 for (i = 0; i <= 8; i++) {
01964 subscript[i] = null_opnd;
01965 subscript_attr[i] = null_opnd;
01966 }
01967
01968 for (i = 0; i <= MAX_INLINE_ARGS-1; i++) {
01969 copy_out_sh[i] = NULL_IDX;
01970 actual_arg_attrs[i] = NULL_IDX;
01971 flipped_opnd[i] = null_opnd;
01972 actual_opnd[i] = null_opnd;
01973 dummy_opnd[i] = null_opnd;
01974 struct_tree[i] = null_opnd;
01975 subscripting_tree[i] = null_opnd;
01976 substringing_tree[i] = null_opnd;
01977 OPND_IDX(substring_offset[i]) = CN_INTEGER_ZERO_IDX;
01978 OPND_FLD(substring_offset[i]) = CN_Tbl_Idx;
01979 for (k = 0; k <= 8; k++) {
01980 OPND_IDX(linearized_offset[i][k]) = CN_INTEGER_ZERO_IDX;
01981 OPND_FLD(linearized_offset[i][k]) = CN_Tbl_Idx;
01982 }
01983
01984 }
01985
01986 number_of_actual_args = IR_LIST_CNT_R(ir_idx);
01987
01988 if (cmd_line_flags.runtime_argument ||
01989 cmd_line_flags.runtime_arg_call ||
01990 cmd_line_flags.runtime_arg_count_only) {
01991 number_of_actual_args = number_of_actual_args - 1;
01992 }
01993
01994
01995
01996
01997
01998
01999 if (attr_list_tbl_idx > 60536) {
02000 inlinable = FALSE;
02001 PRINTMSG(call_line_number,
02002 1202,
02003 Inline,
02004 call_col_number,
02005 AT_OBJ_NAME_PTR(pgm_attr_idx),
02006 "internal table(s) almost full");
02007 }
02008
02009 if (inlinable && ATP_PROC(pgm_attr_idx) == Dummy_Proc) {
02010 inlinable = FALSE;
02011 PRINTMSG(call_line_number,
02012 1333,
02013 Inline,
02014 call_col_number,
02015 AT_OBJ_NAME_PTR(pgm_attr_idx));
02016 }
02017
02018 if (inlinable && ATP_ELEMENTAL(pgm_attr_idx)) {
02019 inlinable = FALSE;
02020 PRINTMSG(call_line_number,
02021 1657,
02022 Inline,
02023 call_col_number,
02024 AT_OBJ_NAME_PTR(pgm_attr_idx));
02025 }
02026
02027 if (inlinable && ATP_FIRST_SH_IDX(pgm_attr_idx) == NULL_IDX) {
02028
02029 if (! find_prog_unit_tbl(pgm_attr_idx)) {
02030 inlinable = FALSE;
02031 if (ATP_PROC(pgm_attr_idx) == Module_Proc) {
02032 PRINTMSG(call_line_number,
02033 1495,
02034 Inline,
02035 call_col_number,
02036 AT_OBJ_NAME_PTR(pgm_attr_idx));
02037 }
02038 else {
02039 PRINTMSG(call_line_number,
02040 1344,
02041 Inline,
02042 call_col_number,
02043 AT_OBJ_NAME_PTR(pgm_attr_idx));
02044 }
02045 }
02046 else {
02047 if (ATP_PGM_UNIT(pgm_attr_idx) == Function &&
02048 ATP_PGM_UNIT(AT_ATTR_LINK(pgm_attr_idx)) == Function &&
02049 ATP_RSLT_IDX(pgm_attr_idx) != NULL_IDX &&
02050 ATP_RSLT_IDX(AT_ATTR_LINK(pgm_attr_idx)) != NULL_IDX &&
02051 TYP_TYPE(ATD_TYPE_IDX(ATP_RSLT_IDX(pgm_attr_idx))) !=
02052 TYP_TYPE(ATD_TYPE_IDX(ATP_RSLT_IDX(
02053 AT_ATTR_LINK(pgm_attr_idx))))) {
02054 inlinable = FALSE;
02055 PRINTMSG(call_line_number,
02056 1425,
02057 Inline,
02058 call_col_number,
02059 AT_OBJ_NAME_PTR(pgm_attr_idx));
02060 }
02061 else {
02062 ATP_FIRST_SH_IDX(pgm_attr_idx) =
02063 ATP_FIRST_SH_IDX(AT_ATTR_LINK(pgm_attr_idx));
02064
02065 ATP_RSLT_IDX(pgm_attr_idx) =
02066 ATP_RSLT_IDX(AT_ATTR_LINK(pgm_attr_idx));
02067
02068 ATP_NUM_DARGS(pgm_attr_idx) =
02069 ATP_NUM_DARGS(AT_ATTR_LINK(pgm_attr_idx));
02070
02071 ATP_FIRST_IDX(pgm_attr_idx) =
02072 ATP_FIRST_IDX(AT_ATTR_LINK(pgm_attr_idx));
02073
02074 ATP_INLINE_NEVER(pgm_attr_idx) =
02075 ATP_INLINE_NEVER(pgm_attr_idx) ||
02076 ATP_INLINE_NEVER(AT_ATTR_LINK(pgm_attr_idx));
02077
02078 ATP_RECURSIVE(pgm_attr_idx) =
02079 ATP_RECURSIVE(pgm_attr_idx) ||
02080 ATP_RECURSIVE(AT_ATTR_LINK(pgm_attr_idx));
02081
02082 ATP_INLINE_ALWAYS(pgm_attr_idx) =
02083 ATP_INLINE_ALWAYS(pgm_attr_idx) ||
02084 ATP_INLINE_ALWAYS(AT_ATTR_LINK(pgm_attr_idx));
02085
02086 ATP_HAS_TASK_DIRS(SCP_ATTR_IDX(curr_scp_idx)) =
02087 ATP_HAS_TASK_DIRS(pgm_attr_idx) ||
02088 ATP_HAS_TASK_DIRS(AT_ATTR_LINK(pgm_attr_idx)) ||
02089 ATP_HAS_TASK_DIRS(SCP_ATTR_IDX(curr_scp_idx));
02090
02091 ATP_HAS_OVER_INDEXING(SCP_ATTR_IDX(curr_scp_idx)) =
02092 ATP_HAS_OVER_INDEXING(pgm_attr_idx) ||
02093 ATP_HAS_OVER_INDEXING(AT_ATTR_LINK(pgm_attr_idx)) ||
02094 ATP_HAS_OVER_INDEXING(SCP_ATTR_IDX(curr_scp_idx));
02095
02096 AT_ATTR_LINK(pgm_attr_idx) = NULL_IDX;
02097 }
02098 }
02099 }
02100
02101 number_of_dummy_args = ATP_NUM_DARGS(pgm_attr_idx);
02102
02103
02104
02105
02106
02107 if (function_call) {
02108 idx = SH_IR_IDX(call_sh);
02109 COPY_OPND(actual_opnd[0], IR_OPND_L(idx));
02110 OPND_IDX(dummy_opnd[0]) = ATP_RSLT_IDX(pgm_attr_idx);
02111 OPND_FLD(dummy_opnd[0]) = AT_Tbl_Idx;
02112 }
02113
02114 if (inlinable && opt_flags.inline_lvl == Inline_Lvl_1) {
02115 if (!ATP_INLINE_ALWAYS(pgm_attr_idx) &&
02116 !inline_in_effect) {
02117 inlinable = FALSE;
02118 PRINTMSG(call_line_number,
02119 1335,
02120 Inline,
02121 call_col_number,
02122 AT_OBJ_NAME_PTR(pgm_attr_idx));
02123 }
02124 }
02125
02126 if (inlinable && opt_flags.inline_lvl == Inline_Lvl_2) {
02127 if (!ATP_INLINE_ALWAYS(pgm_attr_idx) &&
02128 !inline_in_effect &&
02129 loop_nest <= 0) {
02130 inlinable = FALSE;
02131 PRINTMSG(call_line_number,
02132 1336,
02133 Inline,
02134 call_col_number,
02135 AT_OBJ_NAME_PTR(pgm_attr_idx));
02136 }
02137 }
02138
02139 if (inlinable && noinline_in_effect) {
02140 inlinable = FALSE;
02141 PRINTMSG(call_line_number,
02142 1338,
02143 Inline,
02144 call_col_number,
02145 AT_OBJ_NAME_PTR(pgm_attr_idx));
02146 }
02147
02148 if (inlinable && ATP_INLINE_NEVER(pgm_attr_idx)) {
02149 inlinable = FALSE;
02150 PRINTMSG(call_line_number,
02151 1339,
02152 Inline,
02153 call_col_number,
02154 AT_OBJ_NAME_PTR(pgm_attr_idx));
02155 }
02156
02157 if (inlinable && (number_of_dummy_args != number_of_actual_args)) {
02158 inlinable = FALSE;
02159 PRINTMSG(call_line_number,
02160 1342,
02161 Inline,
02162 call_col_number,
02163 AT_OBJ_NAME_PTR(pgm_attr_idx));
02164 }
02165
02166 if (inlinable && (number_of_actual_args >= MAX_INLINE_ARGS)) {
02167 inlinable = FALSE;
02168 PRINTMSG(call_line_number,
02169 1343,
02170 Inline,
02171 call_col_number,
02172 AT_OBJ_NAME_PTR(pgm_attr_idx));
02173 }
02174
02175 if (inlinable && ATP_RECURSIVE(pgm_attr_idx)) {
02176 inlinable = FALSE;
02177 PRINTMSG(call_line_number,
02178 1332,
02179 Inline,
02180 call_col_number,
02181 AT_OBJ_NAME_PTR(pgm_attr_idx));
02182 }
02183
02184 if (OPND_IDX(dummy_opnd[0]) != NULL_IDX &&
02185 inlinable && AT_HOST_ASSOCIATED(OPND_IDX(dummy_opnd[0]))) {
02186 inlinable = FALSE;
02187 PRINTMSG(call_line_number,
02188 1357,
02189 Inline,
02190 call_col_number,
02191 AT_OBJ_NAME_PTR(pgm_attr_idx));
02192 }
02193
02194 actual_arg_list_idx = IR_IDX_R(ir_idx);
02195 for (k = 1; k <= number_of_actual_args; k++) {
02196 attr_idx = find_base_attr(&IL_OPND(actual_arg_list_idx),
02197 &line,
02198 &col);
02199 actual_arg_attrs[k] = attr_idx;
02200 actual_arg_list_idx = IL_NEXT_LIST_IDX(actual_arg_list_idx);
02201 }
02202
02203
02204
02205
02206
02207 i = 1;
02208 j = ATP_FIRST_IDX(pgm_attr_idx);
02209 actual_arg_list_idx = IR_IDX_R(ir_idx);
02210 while (actual_arg_list_idx != NULL_IDX &&
02211 number_of_actual_args > 0 &&
02212 inlinable &&
02213 i <= number_of_actual_args) {
02214 copy_out_array_element = NULL_IDX;
02215 copy_out_DV_scalar = NULL_IDX;
02216
02217 OPND_IDX(dummy_opnd[i]) = SN_ATTR_IDX(j);
02218 OPND_FLD(dummy_opnd[i]) = AT_Tbl_Idx;
02219
02220
02221
02222
02223
02224 dummy_modified = AT_DEFINED(SN_ATTR_IDX(j)) ||
02225 AT_ACTUAL_ARG(SN_ATTR_IDX(j)) ||
02226 AT_DEF_IN_CHILD(SN_ATTR_IDX(j));
02227
02228 if (AT_OBJ_CLASS(SN_ATTR_IDX(j)) == Data_Obj &&
02229 ATD_INTENT(SN_ATTR_IDX(j)) == Intent_In) {
02230 dummy_modified = FALSE;
02231 }
02232
02233 dummy_referenced = AT_REFERENCED(SN_ATTR_IDX(j)) == Referenced;
02234
02235 if (AT_OBJ_CLASS(SN_ATTR_IDX(j)) == Data_Obj &&
02236 ATD_INTENT(SN_ATTR_IDX(j)) == Intent_Out) {
02237 dummy_referenced = FALSE;
02238 }
02239
02240
02241
02242
02243
02244
02245 if (AT_OBJ_CLASS(SN_ATTR_IDX(j)) == Data_Obj &&
02246 TYP_TYPE(ATD_TYPE_IDX(SN_ATTR_IDX(j))) == Structure) {
02247 dummy_referenced = TRUE;
02248 }
02249
02250 if (inlinable && AT_HOST_ASSOCIATED(OPND_IDX(dummy_opnd[i]))) {
02251 inlinable = FALSE;
02252 PRINTMSG(call_line_number,
02253 1341,
02254 Inline,
02255 call_col_number,
02256 AT_OBJ_NAME_PTR(pgm_attr_idx));
02257 }
02258
02259 if (inlinable && AT_OPTIONAL(OPND_IDX(dummy_opnd[i]))) {
02260 inlinable = FALSE;
02261 PRINTMSG(call_line_number,
02262 1334,
02263 Inline,
02264 call_col_number,
02265 AT_OBJ_NAME_PTR(pgm_attr_idx));
02266 }
02267
02268 if (inlinable) {
02269 if (AT_OBJ_CLASS(OPND_IDX(dummy_opnd[i])) != Data_Obj) {
02270 inlinable = FALSE;
02271 PRINTMSG(call_line_number,
02272 1340,
02273 Inline,
02274 call_col_number,
02275 AT_OBJ_NAME_PTR(pgm_attr_idx));
02276 break;
02277 }
02278 else {
02279 if (TYP_TYPE(ATD_TYPE_IDX(SN_ATTR_IDX(j))) == CRI_Ptr ||
02280 TYP_TYPE(ATD_TYPE_IDX(SN_ATTR_IDX(j))) == CRI_Ch_Ptr) {
02281 inlinable = FALSE;
02282 PRINTMSG(call_line_number,
02283 1355,
02284 Inline,
02285 call_col_number,
02286 AT_OBJ_NAME_PTR(pgm_attr_idx));
02287 }
02288
02289 if (ATD_PE_ARRAY_IDX(OPND_IDX(dummy_opnd[i])) !=NULL_IDX) {
02290 inlinable = FALSE;
02291 PRINTMSG(call_line_number,
02292 1601,
02293 Inline,
02294 call_col_number,
02295 AT_OBJ_NAME_PTR(pgm_attr_idx));
02296 }
02297 }
02298 }
02299
02300 call_by_value = FALSE;
02301 if (IL_FLD(actual_arg_list_idx) == IR_Tbl_Idx &&
02302 (IR_OPR(IL_IDX(actual_arg_list_idx)) == Aloc_Opr ||
02303 IR_OPR(IL_IDX(actual_arg_list_idx)) == Const_Tmp_Loc_Opr)) {
02304 COPY_OPND(actual_opnd[i],
02305 IR_OPND_L(IL_IDX(actual_arg_list_idx)));
02306 }
02307 else {
02308 COPY_OPND(actual_opnd[i], IL_OPND(actual_arg_list_idx));
02309
02310
02311
02312
02313
02314 if (OPND_FLD(actual_opnd[i]) == AT_Tbl_Idx) {
02315 call_by_value = TRUE;
02316 }
02317 }
02318
02319
02320
02321
02322
02323
02324
02325
02326
02327
02328
02329
02330
02331
02332
02333
02334
02335
02336
02337
02338 if (inlinable &&
02339 OPND_FLD(actual_opnd[i]) == IR_Tbl_Idx &&
02340 IR_OPR(OPND_IDX(actual_opnd[i])) == Dv_Access_Base_Addr &&
02341 ATD_ARRAY_IDX(OPND_IDX(dummy_opnd[i])) == NULL_IDX) {
02342 scalar_dope_to_scalar(i,
02343 ©_out_DV_scalar,
02344 dummy_referenced);
02345 }
02346
02347
02348
02349
02350
02351
02352
02353
02354
02355
02356
02357
02358
02359
02360
02361
02362
02363
02364
02365
02366
02367
02368
02369
02370
02371
02372
02373
02374 if (inlinable &&
02375 OPND_FLD(actual_opnd[i]) == IR_Tbl_Idx &&
02376 IR_OPR(OPND_IDX(actual_opnd[i])) == Subscript_Opr &&
02377 ATD_ARRAY_IDX(OPND_IDX(dummy_opnd[i])) == NULL_IDX) {
02378 array_element_to_scalar(i,
02379 ©_out_array_element,
02380 dummy_referenced,
02381 dummy_modified);
02382
02383 }
02384
02385
02386
02387
02388 if (inlinable &&
02389 OPND_FLD(actual_opnd[i]) == IR_Tbl_Idx &&
02390 (IR_OPR(OPND_IDX(actual_opnd[i])) == Whole_Substring_Opr ||
02391 IR_OPR(OPND_IDX(actual_opnd[i])) == Substring_Opr)) {
02392 character_to_character(i);
02393 }
02394
02395
02396
02397
02398 if (inlinable &&
02399 OPND_FLD(actual_opnd[i]) == IR_Tbl_Idx &&
02400 IR_OPR(OPND_IDX(actual_opnd[i])) == Struct_Opr) {
02401 COPY_OPND(struct_tree[i], actual_opnd[i]);
02402
02403 struct_base_attr_idx = find_base_attr(&actual_opnd[i],
02404 &line,
02405 &col);
02406
02407 COPY_OPND(actual_opnd[i],
02408 IR_OPND_L(OPND_IDX(actual_opnd[i])));
02409 }
02410
02411 if ((call_by_value && inlinable) ||
02412 (OPND_FLD(actual_opnd[i]) == IR_Tbl_Idx &&
02413 inlinable &&
02414 (IR_OPR(OPND_IDX(actual_opnd[i])) == Dv_Access_Base_Addr ||
02415 IR_OPR(OPND_IDX(actual_opnd[i])) == Subscript_Opr))) {
02416 COPY_OPND(subscripting_tree[i], actual_opnd[i]);
02417 new_darg_attr = gen_compiler_tmp(call_line_number,
02418 call_col_number,
02419 Priv, TRUE);
02420
02421 attr_idx = find_base_attr(&actual_opnd[i],
02422 &line,
02423 &col);
02424
02425 if (struct_base_attr_idx != NULL_IDX) {
02426 attr_idx = struct_base_attr_idx;
02427 }
02428
02429 OPND_IDX(flipped_opnd[i]) = attr_idx;
02430 OPND_FLD(flipped_opnd[i]) = AT_Tbl_Idx;
02431 OPND_IDX(actual_opnd[i]) = attr_idx;
02432 OPND_FLD(actual_opnd[i]) = AT_Tbl_Idx;
02433
02434 name_substitution =
02435 check_actual_and_dummy(actual_opnd[i], dummy_opnd[i], i);
02436
02437
02438
02439
02440
02441
02442
02443 for (k = 1; k <= number_of_actual_args; k++) {
02444 if (k != i &&
02445 OPND_IDX(actual_opnd[i]) == actual_arg_attrs[k]) {
02446 name_substitution = FALSE;
02447 }
02448 }
02449
02450
02451
02452
02453
02454
02455
02456 if (name_substitution) {
02457 actual_bd_idx = ATD_ARRAY_IDX(OPND_IDX(actual_opnd[i]));
02458 sub = IR_IDX_R(OPND_IDX(subscripting_tree[i]));
02459 k = 1;
02460 while (sub != NULL_IDX) {
02461 NTR_IR_TBL(minus_idx);
02462 IR_OPR(minus_idx) = Minus_Opr;
02463 IR_TYPE_IDX(minus_idx) = CG_INTEGER_DEFAULT_TYPE;
02464 IR_LINE_NUM(minus_idx) = call_line_number;
02465 IR_COL_NUM(minus_idx) = call_col_number;
02466 COPY_OPND(IR_OPND_L(minus_idx), IL_OPND(sub));
02467 IR_LINE_NUM_L(minus_idx) = call_line_number;
02468 IR_COL_NUM_L(minus_idx) = call_col_number;
02469 IR_IDX_R(minus_idx) = BD_LB_IDX(actual_bd_idx, k);
02470 IR_FLD_R(minus_idx) = BD_LB_FLD(actual_bd_idx, k);
02471 IR_LINE_NUM_R(minus_idx) = call_line_number;
02472 IR_COL_NUM_R(minus_idx) = call_col_number;
02473 OPND_IDX(linearized_offset[i][k]) = minus_idx;
02474 OPND_FLD(linearized_offset[i][k]) = IR_Tbl_Idx;
02475
02476 sub = IL_NEXT_LIST_IDX(sub);
02477 k = k + 1;
02478 }
02479 }
02480
02481
02482
02483
02484
02485 copy_in_sh = call_sh;
02486 if (!name_substitution && inlinable &&
02487 OPND_FLD(subscripting_tree[i]) == IR_Tbl_Idx &&
02488 IR_OPR(OPND_IDX(subscripting_tree[i])) == Subscript_Opr) {
02489 NTR_IR_TBL(asg_idx);
02490 IR_TYPE_IDX(asg_idx) = TYPELESS_DEFAULT_TYPE;
02491 IR_OPR(asg_idx) = Copy_In_Opr;
02492 IR_LINE_NUM(asg_idx) = call_line_number;
02493 IR_COL_NUM(asg_idx) = call_col_number;
02494 IR_FLD_L(asg_idx) = AT_Tbl_Idx;
02495 IR_IDX_L(asg_idx) = new_darg_attr;
02496 IR_FLD_R(asg_idx) = OPND_FLD(subscripting_tree[i]);
02497 IR_IDX_R(asg_idx) = OPND_IDX(subscripting_tree[i]);
02498 IR_LINE_NUM_L(asg_idx) = call_line_number;
02499 IR_COL_NUM_L(asg_idx) = call_col_number;
02500 IR_LINE_NUM_R(asg_idx) = call_line_number;
02501 IR_COL_NUM_R(asg_idx) = call_col_number;
02502
02503 curr_stmt_sh_idx = call_sh;
02504 gen_sh(Before,
02505 Assignment_Stmt,
02506 call_line_number,
02507 call_col_number,
02508 FALSE,
02509 FALSE,
02510 TRUE);
02511 SH_IR_IDX(SH_PREV_IDX(curr_stmt_sh_idx)) = asg_idx;
02512 SH_P2_SKIP_ME(SH_PREV_IDX(curr_stmt_sh_idx)) = TRUE;
02513 copy_in_sh = SH_PREV_IDX(curr_stmt_sh_idx);
02514
02515 NTR_IR_TBL(asg_idx);
02516 IR_TYPE_IDX(asg_idx) = TYPELESS_DEFAULT_TYPE;
02517 IR_OPR(asg_idx) = Copy_Out_Opr;
02518 IR_LINE_NUM(asg_idx) = call_line_number;
02519 IR_COL_NUM(asg_idx) = call_col_number;
02520 IR_FLD_L(asg_idx) = OPND_FLD(subscripting_tree[i]);
02521 IR_IDX_L(asg_idx) = OPND_IDX(subscripting_tree[i]);
02522 IR_FLD_R(asg_idx) = AT_Tbl_Idx;
02523 IR_IDX_R(asg_idx) = new_darg_attr;
02524 IR_LINE_NUM_L(asg_idx) = call_line_number;
02525 IR_COL_NUM_L(asg_idx) = call_col_number;
02526 IR_LINE_NUM_R(asg_idx) = call_line_number;
02527 IR_COL_NUM_R(asg_idx) = call_col_number;
02528
02529 curr_stmt_sh_idx = SH_NEXT_IDX(call_sh);
02530 gen_sh(Before,
02531 Assignment_Stmt,
02532 call_line_number,
02533 call_col_number,
02534 FALSE,
02535 FALSE,
02536 TRUE);
02537 SH_IR_IDX(SH_PREV_IDX(curr_stmt_sh_idx)) = asg_idx;
02538 SH_P2_SKIP_ME(SH_PREV_IDX(curr_stmt_sh_idx)) = TRUE;
02539 }
02540
02541 tmp_attr = gen_compiler_tmp(call_line_number,
02542 call_col_number,
02543 Priv, TRUE);
02544
02545 ATD_STOR_BLK_IDX(tmp_attr) = SCP_SB_STACK_IDX(curr_scp_idx);
02546 AT_SEMANTICS_DONE(tmp_attr) = TRUE;
02547 AT_DEFINED(tmp_attr) = TRUE;
02548
02549 if (TYP_TYPE(ATD_TYPE_IDX(OPND_IDX(dummy_opnd[i]))) ==
02550 Character) {
02551 ATD_TYPE_IDX(tmp_attr) = CRI_Ch_Ptr_8;
02552
02553 if (TYP_CHAR_CLASS(ATD_TYPE_IDX(OPND_IDX(dummy_opnd[i])))
02554 == Assumed_Size_Char &&
02555 OPND_FLD(subscripting_tree[i]) == IR_Tbl_Idx &&
02556 IR_OPR(OPND_IDX(subscripting_tree[i])) ==
02557 Dv_Access_Base_Addr) {
02558 NTR_IR_TBL(asg_idx);
02559 IR_TYPE_IDX(asg_idx) = CG_INTEGER_DEFAULT_TYPE;
02560 IR_OPR(asg_idx) = Dv_Access_El_Len;
02561 IR_LINE_NUM(asg_idx) = call_line_number;
02562 IR_COL_NUM(asg_idx) = call_col_number;
02563 IR_FLD_L(asg_idx) = AT_Tbl_Idx;
02564 IR_IDX_L(asg_idx) =
02565 IR_IDX_L(OPND_IDX(subscripting_tree[i]));
02566 IR_LINE_NUM_L(asg_idx) = call_line_number;
02567 IR_COL_NUM_L(asg_idx) = call_col_number;
02568
02569 NTR_IR_TBL(div_idx);
02570 IR_TYPE_IDX(div_idx) = CG_INTEGER_DEFAULT_TYPE;
02571 IR_OPR(div_idx) = Shiftr_Opr;
02572 IR_LINE_NUM(div_idx) = call_line_number;
02573 IR_COL_NUM(div_idx) = call_col_number;
02574 IR_FLD_L(div_idx) = IR_Tbl_Idx;
02575 IR_IDX_L(div_idx) = asg_idx;
02576 IR_LINE_NUM_L(div_idx) = call_line_number;
02577 IR_COL_NUM_L(div_idx) = call_col_number;
02578 IR_FLD_R(div_idx) = CN_Tbl_Idx;
02579 IR_IDX_R(div_idx) = CN_INTEGER_THREE_IDX;
02580 IR_LINE_NUM_R(div_idx) = call_line_number;
02581 IR_COL_NUM_R(div_idx) = call_col_number;
02582 OPND_IDX(substring_len[i]) = div_idx;
02583 OPND_FLD(substring_len[i]) = IR_Tbl_Idx;
02584 }
02585 }
02586 else {
02587 ATD_TYPE_IDX(tmp_attr) = CG_INTEGER_DEFAULT_TYPE;
02588 }
02589
02590 COPY_COMMON_ATTR_INFO(OPND_IDX(dummy_opnd[i]),
02591 new_darg_attr,
02592 Data_Obj);
02593
02594 COPY_VARIANT_ATTR_INFO(OPND_IDX(dummy_opnd[i]),
02595 new_darg_attr,
02596 Data_Obj);
02597
02598 if ((OPND_IDX(flipped_opnd[i]) != NULL_IDX) &&
02599 ATD_RESHAPE_ARRAY_OPT(OPND_IDX(flipped_opnd[i]))) {
02600 flipped_bd_idx = ATD_ARRAY_IDX(OPND_IDX(flipped_opnd[i]));
02601 dummy_bd_idx = ATD_ARRAY_IDX(OPND_IDX(dummy_opnd[i]));
02602
02603 if (BD_RANK(flipped_bd_idx) > BD_RANK(dummy_bd_idx)) {
02604
02605
02606
02607
02608
02609
02610
02611
02612
02613 ATD_ARRAY_IDX(new_darg_attr) =
02614 ATD_ARRAY_IDX(OPND_IDX(flipped_opnd[i]));
02615 ATD_RESHAPE_ARRAY_IDX(new_darg_attr) =
02616 ATD_RESHAPE_ARRAY_IDX(OPND_IDX(flipped_opnd[i]));
02617
02618 ATD_RESHAPE_ARRAY_OPT(new_darg_attr) = TRUE;
02619
02620 }
02621 else {
02622
02623
02624
02625
02626 ATD_RESHAPE_ARRAY_IDX(new_darg_attr) =
02627 ATD_RESHAPE_ARRAY_IDX(OPND_IDX(dummy_opnd[i]));
02628 }
02629
02630 if (ATD_RESHAPE_ARRAY_OPT(new_darg_attr)) {
02631
02632
02633
02634
02635
02636 NTR_ATTR_LIST_TBL(tmp_al_idx);
02637 AL_ATTR_IDX(tmp_al_idx) = new_darg_attr;
02638 al_idx = SCP_RESHAPE_ARRAY_LIST(curr_scp_idx);
02639 SCP_RESHAPE_ARRAY_LIST(curr_scp_idx) = tmp_al_idx;
02640 AL_NEXT_IDX(tmp_al_idx) = al_idx;
02641 }
02642 }
02643
02644
02645 loc_fld = IR_Tbl_Idx;
02646 NTR_IR_TBL(loc_idx);
02647 IR_OPR(loc_idx) = Aloc_Opr;
02648 IR_TYPE_IDX(loc_idx) = ATD_TYPE_IDX(tmp_attr);
02649 IR_LINE_NUM(loc_idx) = call_line_number;
02650 IR_COL_NUM(loc_idx) = call_col_number;
02651
02652 if (ATD_TYPE_IDX(tmp_attr) == CRI_Ch_Ptr_8) {
02653 IR_IDX_L(loc_idx) = OPND_IDX(substringing_tree[i]);
02654 IR_FLD_L(loc_idx) = OPND_FLD(substringing_tree[i]);
02655
02656
02657
02658
02659
02660
02661 for (k = 0; k <= MAX_INLINE_ARGS-1; k++) {
02662 OPND_IDX(substring_offset[k]) = CN_INTEGER_ZERO_IDX;
02663 OPND_FLD(substring_offset[k]) = CN_Tbl_Idx;
02664 }
02665
02666 if (TYP_CHAR_CLASS(ATD_TYPE_IDX(new_darg_attr)) ==
02667 Assumed_Size_Char) {
02668 CLEAR_TBL_NTRY(type_tbl, TYP_WORK_IDX);
02669 TYP_TYPE(TYP_WORK_IDX) = Character;
02670 TYP_LINEAR(TYP_WORK_IDX) = CHARACTER_DEFAULT_TYPE;
02671 TYP_CHAR_CLASS(TYP_WORK_IDX) = Const_Len_Char;
02672 TYP_RESOLVED(TYP_WORK_IDX) = TRUE;
02673 type_idx = ntr_type_tbl();
02674 ATD_TYPE_IDX(new_darg_attr) = type_idx;
02675
02676 TYP_FLD(ATD_TYPE_IDX(new_darg_attr)) =
02677 TYP_FLD(ATD_TYPE_IDX(OPND_IDX(actual_opnd[i])));
02678 TYP_IDX(ATD_TYPE_IDX(new_darg_attr)) =
02679 TYP_IDX(ATD_TYPE_IDX(OPND_IDX(actual_opnd[i])));
02680 TYP_CHAR_CLASS(ATD_TYPE_IDX(new_darg_attr)) =
02681 TYP_CHAR_CLASS(ATD_TYPE_IDX(OPND_IDX(actual_opnd[i])));
02682 }
02683 }
02684 else {
02685 IR_IDX_L(loc_idx) = OPND_IDX(subscripting_tree[i]);
02686 IR_FLD_L(loc_idx) = OPND_FLD(subscripting_tree[i]);
02687 }
02688
02689 IR_LINE_NUM_L(loc_idx) = call_line_number;
02690 IR_COL_NUM_L(loc_idx) = call_col_number;
02691
02692 if (IR_OPR(OPND_IDX(subscripting_tree[i])) ==
02693 Dv_Access_Base_Addr ||
02694 call_by_value) {
02695 loc_idx = OPND_IDX(subscripting_tree[i]);
02696 loc_fld = OPND_FLD(subscripting_tree[i]);
02697 }
02698
02699 AT_ATTR_LINK(new_darg_attr) = NULL_IDX;
02700 AT_COMPILER_GEND(new_darg_attr) = TRUE;
02701 AT_DEFINED(new_darg_attr) = TRUE;
02702 AT_IS_DARG(new_darg_attr) = FALSE;
02703 ATD_CLASS(new_darg_attr) = Variable;
02704 ATD_AUTOMATIC(new_darg_attr) = TRUE;
02705 ATD_AUTO_BASE_IDX(new_darg_attr) = tmp_attr;
02706 CREATE_ID(stor_name, sb_name[Based_Blk], sb_len[Based_Blk]);
02707 based_blk = ntr_stor_blk_tbl(stor_name.string,
02708 sb_len[Based_Blk],
02709 call_line_number,
02710 call_col_number,
02711 Based);
02712 ATD_STOR_BLK_IDX(new_darg_attr) = based_blk;
02713 if (name_substitution) {
02714
02715 }
02716 else {
02717 OPND_IDX(actual_opnd[i]) = new_darg_attr;
02718 OPND_FLD(actual_opnd[i]) = AT_Tbl_Idx;
02719 }
02720
02721 if (inlinable && !name_substitution) {
02722 NTR_IR_TBL(asg_idx);
02723 IR_TYPE_IDX(asg_idx) = ATD_TYPE_IDX(tmp_attr);
02724 IR_OPR(asg_idx) = Asg_Opr;
02725 IR_LINE_NUM(asg_idx) = call_line_number;
02726 IR_COL_NUM(asg_idx) = call_col_number;
02727 IR_FLD_L(asg_idx) = AT_Tbl_Idx;
02728 IR_IDX_L(asg_idx) = tmp_attr;
02729 IR_LINE_NUM_L(asg_idx) = call_line_number;
02730 IR_COL_NUM_L(asg_idx) = call_col_number;
02731 IR_FLD_R(asg_idx) = loc_fld;
02732 IR_IDX_R(asg_idx) = loc_idx;
02733 IR_LINE_NUM_R(asg_idx) = call_line_number;
02734 IR_COL_NUM_R(asg_idx) = call_col_number;
02735
02736 curr_stmt_sh_idx = copy_in_sh;
02737 gen_sh(Before,
02738 Assignment_Stmt,
02739 call_line_number,
02740 call_col_number,
02741 FALSE,
02742 FALSE,
02743 TRUE);
02744 SH_IR_IDX(SH_PREV_IDX(curr_stmt_sh_idx)) = asg_idx;
02745 SH_P2_SKIP_ME(SH_PREV_IDX(curr_stmt_sh_idx)) = TRUE;
02746 }
02747 }
02748
02749 if (inlinable &&
02750 dummy_modified &&
02751 copy_out_array_element != NULL_IDX) {
02752 NTR_IR_TBL(asg_idx);
02753 IR_TYPE_IDX(asg_idx) = ATD_TYPE_IDX(copy_out_array_element);
02754 IR_OPR(asg_idx) = Asg_Opr;
02755 IR_LINE_NUM(asg_idx) = call_line_number;
02756 IR_COL_NUM(asg_idx) = call_col_number;
02757 IR_FLD_L(asg_idx) = OPND_FLD(subscripting_tree[i]);
02758 copy_subtree(&(subscripting_tree[i]), &opnd);
02759 COPY_OPND(IR_OPND_L(asg_idx), opnd);
02760 new_idx = OPND_IDX(opnd);
02761 l = 1;
02762 list_idx = IR_IDX_R(new_idx);
02763 while (OPND_IDX(subscript_attr[l]) != NULL_IDX) {
02764 COPY_OPND(IL_OPND(list_idx), subscript_attr[l]);
02765 l = l + 1;
02766 list_idx = IL_NEXT_LIST_IDX(list_idx);
02767 }
02768
02769 IR_FLD_R(asg_idx) = AT_Tbl_Idx;
02770 IR_IDX_R(asg_idx) = copy_out_array_element;
02771 IR_LINE_NUM_L(asg_idx) = call_line_number;
02772 IR_COL_NUM_L(asg_idx) = call_col_number;
02773 IR_LINE_NUM_R(asg_idx) = call_line_number;
02774 IR_COL_NUM_R(asg_idx) = call_col_number;
02775
02776 curr_stmt_sh_idx = SH_NEXT_IDX(call_sh);
02777 gen_sh(Before,
02778 Assignment_Stmt,
02779 call_line_number,
02780 call_col_number,
02781 FALSE,
02782 FALSE,
02783 TRUE);
02784
02785 copy_out_sh[next_copy_out_sh_idx] =
02786 SH_PREV_IDX(curr_stmt_sh_idx);
02787 next_copy_out_sh_idx = next_copy_out_sh_idx + 1;
02788
02789 SH_IR_IDX(SH_PREV_IDX(curr_stmt_sh_idx)) = asg_idx;
02790 SH_P2_SKIP_ME(SH_PREV_IDX(curr_stmt_sh_idx)) = TRUE;
02791 }
02792
02793 if (inlinable &&
02794 dummy_modified &&
02795 copy_out_DV_scalar != NULL_IDX) {
02796 NTR_IR_TBL(asg_idx);
02797 IR_TYPE_IDX(asg_idx) = ATD_TYPE_IDX(copy_out_DV_scalar);
02798 IR_OPR(asg_idx) = Asg_Opr;
02799 IR_LINE_NUM(asg_idx) = call_line_number;
02800 IR_COL_NUM(asg_idx) = call_col_number;
02801 IR_FLD_L(asg_idx) = OPND_FLD(subscripting_tree[i]);
02802 IR_IDX_L(asg_idx) = OPND_IDX(subscripting_tree[i]);
02803 IR_FLD_R(asg_idx) = AT_Tbl_Idx;
02804 IR_IDX_R(asg_idx) = copy_out_DV_scalar;
02805 IR_LINE_NUM_L(asg_idx) = call_line_number;
02806 IR_COL_NUM_L(asg_idx) = call_col_number;
02807 IR_LINE_NUM_R(asg_idx) = call_line_number;
02808 IR_COL_NUM_R(asg_idx) = call_col_number;
02809
02810 curr_stmt_sh_idx = SH_NEXT_IDX(call_sh);
02811 gen_sh(Before,
02812 Assignment_Stmt,
02813 call_line_number,
02814 call_col_number,
02815 FALSE,
02816 FALSE,
02817 TRUE);
02818
02819 copy_out_sh[next_copy_out_sh_idx] =
02820 SH_PREV_IDX(curr_stmt_sh_idx);
02821 next_copy_out_sh_idx = next_copy_out_sh_idx + 1;
02822
02823 SH_IR_IDX(SH_PREV_IDX(curr_stmt_sh_idx)) = asg_idx;
02824 SH_P2_SKIP_ME(SH_PREV_IDX(curr_stmt_sh_idx)) = TRUE;
02825 }
02826
02827
02828
02829
02830
02831 if (inlinable &&
02832 OPND_FLD(actual_opnd[i]) == AT_Tbl_Idx &&
02833 AT_OBJ_CLASS(OPND_IDX(actual_opnd[i])) == Data_Obj &&
02834 ATD_IM_A_DOPE(OPND_IDX(actual_opnd[i]))) {
02835
02836 tmp_sh = call_sh;
02837 while (tmp_sh != NULL_IDX) {
02838 if (IR_OPR(SH_IR_IDX(tmp_sh)) == Dv_Whole_Copy_Opr ||
02839 IR_OPR(SH_IR_IDX(tmp_sh)) == Dv_Def_Asg_Opr) {
02840 attr_idx = find_left_attr(&IR_OPND_L(SH_IR_IDX(tmp_sh)));
02841 if (attr_idx == OPND_IDX(actual_opnd[i])) {
02842
02843 if (IR_OPR(SH_IR_IDX(tmp_sh)) == Dv_Def_Asg_Opr) {
02844 attr_idx =
02845 find_left_attr(
02846 &IL_OPND(IR_IDX_L(IR_IDX_R(SH_IR_IDX(tmp_sh)))));
02847 }
02848 else {
02849 attr_idx =
02850 find_left_attr(&IR_OPND_R(SH_IR_IDX(tmp_sh)));
02851 }
02852
02853 tmp_attr = NULL_IDX;
02854 if (IR_FLD_R(SH_IR_IDX(tmp_sh)) == IR_Tbl_Idx &&
02855 IR_OPR(IR_IDX_R(SH_IR_IDX(tmp_sh)))==Struct_Opr) {
02856 tmp_attr =
02857 find_base_attr(&IR_OPND_R(SH_IR_IDX(tmp_sh)),
02858 &line,
02859 &col);
02860 }
02861
02862 if (attr_idx != NULL_IDX &&
02863 attr_idx != OPND_IDX(actual_opnd[i])) {
02864 NTR_ATTR_LIST_TBL(list_idx1);
02865 AL_ATTR_IDX(list_idx1) = attr_idx;
02866 ATD_DV_ALIAS(OPND_IDX(actual_opnd[i])) = list_idx1;
02867
02868 if (tmp_attr != NULL_IDX) {
02869 NTR_ATTR_LIST_TBL(list_idx2);
02870 AL_ATTR_IDX(list_idx2) = tmp_attr;
02871 AL_NEXT_IDX(list_idx1) = list_idx2;
02872 }
02873 }
02874 break;
02875 }
02876 }
02877 tmp_sh = SH_PREV_IDX(tmp_sh);
02878 }
02879 }
02880
02881 if (OPND_FLD(actual_opnd[i]) == AT_Tbl_Idx &&
02882 struct_base_attr_idx != NULL_IDX &&
02883 TYP_TYPE(ATD_TYPE_IDX(OPND_IDX(actual_opnd[i]))) ==
02884 Structure) {
02885 OPND_IDX(actual_opnd[i]) = struct_base_attr_idx;
02886 OPND_FLD(actual_opnd[i]) = AT_Tbl_Idx;
02887 }
02888
02889 check_actual_and_dummy(actual_opnd[i], dummy_opnd[i], i);
02890
02891 actual_arg_list_idx = IL_NEXT_LIST_IDX(actual_arg_list_idx);
02892 i = i + 1;
02893 j = j + 1;
02894 struct_base_attr_idx = NULL_IDX;
02895 }
02896
02897
02898
02899
02900 sh_count = 0;
02901 processing_ENTRY_called = FALSE;
02902 if (inlinable) {
02903 entry_label_attr_idx = gen_internal_lbl(call_line_number);
02904 exit_label_attr_idx = gen_internal_lbl(call_line_number);
02905 make_copy_of_routine(ATP_FIRST_SH_IDX(pgm_attr_idx));
02906 }
02907
02908
02909
02910
02911
02912
02913
02914
02915
02916 if (!ATP_INLINE_ALWAYS(pgm_attr_idx)) {
02917 if (sh_count > 350) {
02918 inlinable = FALSE;
02919 PRINTMSG(call_line_number,
02920 1347,
02921 Inline,
02922 call_col_number,
02923 AT_OBJ_NAME_PTR(pgm_attr_idx));
02924 }
02925 }
02926
02927
02928
02929
02930
02931
02932
02933 if (npi > (MAX_INLINED_ROUTINES - 5) || table_overflow) {
02934 inlinable = FALSE;
02935 PRINTMSG(call_line_number,
02936 1202,
02937 Inline,
02938 call_col_number,
02939 AT_OBJ_NAME_PTR(pgm_attr_idx),
02940 "internal table(s) almost full");
02941 }
02942
02943
02944
02945
02946
02947
02948
02949
02950
02951 if (inlinable) {
02952 NTR_IR_TBL(asg_idx);
02953 IR_TYPE_IDX(asg_idx) = TYPELESS_DEFAULT_TYPE;
02954 IR_OPR(asg_idx) = Br_Uncond_Opr;
02955 IR_LINE_NUM(asg_idx) = call_line_number;
02956 IR_COL_NUM(asg_idx) = call_col_number;
02957 IR_OPND_L(asg_idx) = null_opnd;
02958 IR_FLD_R(asg_idx) = AT_Tbl_Idx;
02959 IR_IDX_R(asg_idx) = entry_label_attr_idx;
02960 IR_LINE_NUM_R(asg_idx) = call_line_number;
02961 IR_COL_NUM_R(asg_idx) = call_col_number;
02962 curr_stmt_sh_idx = call_sh;
02963 gen_sh(Before,
02964 Goto_Stmt,
02965 call_line_number,
02966 call_col_number,
02967 FALSE,
02968 FALSE,
02969 TRUE);
02970 SH_IR_IDX(SH_PREV_IDX(curr_stmt_sh_idx)) = asg_idx;
02971 SH_P2_SKIP_ME(SH_PREV_IDX(curr_stmt_sh_idx)) = TRUE;
02972
02973
02974 NTR_IR_TBL(asg_idx);
02975 IR_TYPE_IDX(asg_idx) = TYPELESS_DEFAULT_TYPE;
02976 IR_OPR(asg_idx) = Label_Opr;
02977 IR_LINE_NUM(asg_idx) = call_line_number;
02978 IR_COL_NUM(asg_idx) = call_col_number;
02979 IR_FLD_L(asg_idx) = AT_Tbl_Idx;
02980 IR_IDX_L(asg_idx) = exit_label_attr_idx;
02981 IR_OPND_R(asg_idx) = null_opnd;
02982 IR_LINE_NUM_L(asg_idx) = call_line_number;
02983 IR_COL_NUM_L(asg_idx) = call_col_number;
02984 curr_stmt_sh_idx = call_sh;
02985 gen_sh(After,
02986 Continue_Stmt,
02987 call_line_number,
02988 call_col_number,
02989 FALSE,
02990 TRUE,
02991 TRUE);
02992 SH_IR_IDX(curr_stmt_sh_idx) = asg_idx;
02993 SH_P2_SKIP_ME(curr_stmt_sh_idx) = TRUE;
02994
02995 curr_stmt_sh_idx = call_sh;
02996 insert_sh_chain_before(copy_head);
02997
02998 something_was_inlined = TRUE;
02999 SH_IR_IDX(call_sh) = Null_Opr;
03000
03001 next_pgm_idx[npi] = pgm_attr_idx;
03002 npi = npi + 1;
03003
03004 PRINTMSG(call_line_number,
03005 1204,
03006 Inline,
03007 call_col_number,
03008 AT_OBJ_NAME_PTR(pgm_attr_idx));
03009 }
03010 else {
03011
03012
03013
03014
03015
03016
03017
03018 for (i = 0; i <= MAX_INLINE_ARGS-1; i++) {
03019 if (copy_out_sh[i] != NULL_IDX) {
03020 SH_IR_IDX(copy_out_sh[i]) = Null_Opr;
03021 }
03022 }
03023 }
03024 }
03025 break;
03026
03027 default :
03028 function_call = TRUE;
03029 srch_for_calls(IR_IDX_L(ir_idx), IR_FLD_L(ir_idx));
03030 function_call = FALSE;
03031
03032 function_call = TRUE;
03033 srch_for_calls(IR_IDX_R(ir_idx), IR_FLD_R(ir_idx));
03034 function_call = FALSE;
03035 break;
03036 }
03037 break;
03038
03039 default :
03040 break;
03041 }
03042
03043 TRACE (Func_Exit, "srch_for_calls", NULL);
03044
03045 return;
03046
03047 }
03048
03049
03050
03051
03052
03053
03054
03055
03056
03057
03058
03059
03060
03061
03062
03063
03064
03065
03066
03067
03068
03069
03070 void inline_processing(int first_sh_idx)
03071
03072 {
03073 int sh;
03074 int i;
03075 int save_curr_stmt_sh_idx;
03076 int save_curr_scp_idx;
03077 int ncs = 0;
03078 int child_scopes[MAX_INLINED_ROUTINES];
03079
03080
03081 TRACE (Func_Entry, "inline_processing", NULL);
03082
03083 for (i = 0; i <= MAX_INLINED_ROUTINES-1; i++) {
03084 child_scopes[i] = NULL_IDX;
03085 }
03086 save_curr_stmt_sh_idx = curr_stmt_sh_idx;
03087 save_curr_scp_idx = curr_scp_idx;
03088
03089 PROCESS_CHILD:
03090
03091 PROCESS_SIBLING:
03092
03093 table_overflow = FALSE;
03094
03095 npi = 0;
03096 for (i = 0; i <= MAX_INLINED_ROUTINES-1; i++) {
03097 next_pgm_idx[i] = NULL_IDX;
03098 }
03099
03100 ANOTHER_PASS:
03101
03102 inline_in_effect = FALSE;
03103 noinline_in_effect = FALSE;
03104 something_was_inlined = FALSE;
03105 loop_nest = 0;
03106 parallel_region = 0;
03107
03108 sh = first_sh_idx;
03109
03110 while (sh != NULL_IDX) {
03111 if (SH_IR_IDX(sh) != NULL_IDX) {
03112 if (IR_OPR(SH_IR_IDX(sh)) == Loop_Info_Opr) {
03113 loop_nest = loop_nest + 1;
03114 }
03115 else if (SH_PARENT_BLK_IDX(sh) != NULL_IDX &&
03116 SH_STMT_TYPE(sh) == Continue_Stmt &&
03117 IR_OPR(SH_IR_IDX(SH_PARENT_BLK_IDX(sh))) == Loop_Info_Opr) {
03118 loop_nest = loop_nest - 1;
03119 }
03120
03121 if (IR_OPR(SH_IR_IDX(sh)) == Doall_Cmic_Opr) {
03122 parallel_region = parallel_region + 1;
03123 }
03124
03125 if (SH_DOALL_LOOP_END(sh)) {
03126 parallel_region = parallel_region - 1;
03127 }
03128
03129 call_sh = sh;
03130 srch_for_calls(SH_IR_IDX(sh), IR_Tbl_Idx);
03131 }
03132
03133 sh = SH_NEXT_IDX(sh);
03134 }
03135
03136 if (something_was_inlined) {
03137 goto ANOTHER_PASS;
03138 }
03139
03140
03141
03142
03143
03144
03145 if (SCP_FIRST_CHILD_IDX(curr_scp_idx) != NULL_IDX) {
03146 ncs = ncs + 1;
03147 if (ncs >= MAX_INLINED_ROUTINES) {
03148 PRINTMSG(call_line_number,
03149 1315,
03150 Internal,
03151 call_col_number);
03152 }
03153 child_scopes[ncs] = SCP_FIRST_CHILD_IDX(curr_scp_idx);
03154 }
03155
03156
03157
03158
03159
03160 if (SCP_SIBLING_IDX(curr_scp_idx) != NULL_IDX) {
03161 curr_scp_idx = SCP_SIBLING_IDX(curr_scp_idx);
03162 first_sh_idx = SCP_FIRST_SH_IDX(curr_scp_idx);
03163 goto PROCESS_SIBLING;
03164 }
03165
03166
03167
03168
03169 for (i = 1; i <= MAX_INLINED_ROUTINES-1; i++) {
03170 if (child_scopes[i] != NULL_IDX) {
03171 curr_scp_idx = child_scopes[i];
03172 first_sh_idx = SCP_FIRST_SH_IDX(curr_scp_idx);
03173 child_scopes[i] = NULL_IDX;
03174 goto PROCESS_CHILD;
03175 }
03176 }
03177
03178 curr_stmt_sh_idx = save_curr_stmt_sh_idx;
03179 curr_scp_idx = save_curr_scp_idx;
03180
03181 TRACE (Func_Exit, "inline_processing", NULL);
03182
03183 return;
03184
03185 }
03186
03187