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