Open64 (mfef90, whirl2f, and IR tools)
TAG: version-openad; SVN changeset: 916
|
00001 /* 00002 00003 Copyright (C) 2000, 2001 Silicon Graphics, Inc. All Rights Reserved. 00004 00005 This program is free software; you can redistribute it and/or modify it 00006 under the terms of version 2 of the GNU General Public License as 00007 published by the Free Software Foundation. 00008 00009 This program is distributed in the hope that it would be useful, but 00010 WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00012 00013 Further, this software is distributed without any warranty that it is 00014 free of the rightful claim of any third person regarding infringement 00015 or the like. Any license provided herein, whether implied or 00016 otherwise, applies only to this software file. Patent licenses, if 00017 any, provided herein do not apply to combinations of this program with 00018 other software, or any other product whatsoever. 00019 00020 You should have received a copy of the GNU General Public License along 00021 with this program; if not, write the Free Software Foundation, Inc., 59 00022 Temple Place - Suite 330, Boston MA 02111-1307, USA. 00023 00024 Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pky, 00025 Mountain View, CA 94043, or: 00026 00027 http://www.sgi.com 00028 00029 For further information regarding this notice, see: 00030 00031 http://oss.sgi.com/projects/GenInfo/NoticeExplan 00032 00033 */ 00034 00035 00036 00037 /* USMID: "\n@(#)5.0_pl/sources/i_cvrt.c 5.34 10/28/99 10:03:56\n" */ 00038 00039 # include "defines.h" /* Machine dependent ifdefs */ 00040 00041 # include "host.m" /* Host machine dependent macros.*/ 00042 # include "host.h" /* Host machine dependent header.*/ 00043 # include "target.m" /* Target machine dependent macros.*/ 00044 # include "target.h" /* Target machine dependent header.*/ 00045 00046 # include "globals.m" 00047 # include "tokens.m" 00048 # include "sytb.m" 00049 # include "debug.m" 00050 # include "s_globals.m" 00051 # include "i_cvrt.m" 00052 00053 # include "globals.h" 00054 # include "tokens.h" 00055 # include "sytb.h" 00056 # include "p_globals.h" 00057 # include "s_globals.h" 00058 # include "i_cvrt.h" 00059 00060 00061 /*****************************************************************\ 00062 |* Function prototypes of static functions declared in this file *| 00063 \*****************************************************************/ 00064 00065 static void allocate_pdg_link_tbls(void); 00066 static void clean_pdg_link_tbls_for_nested_pu(void); 00067 static void cvrt_exp_to_pdg(int, fld_type); 00068 static void cvrt_ir_to_pdg(int); 00069 static void cvrt_proc_to_pdg(char *,boolean); 00070 static void cvrt_sytb_to_pdg(void); 00071 static void finish_symbolic_expr(void); 00072 static TYPE get_basic_type(int, int, int); 00073 static TYPE get_type_desc(int); 00074 static void send_attr_ntry(int); 00075 static void send_darg_list(int, int); 00076 static TYPE send_derived_type(int,int); 00077 static void send_dummy_procedure(int); 00078 static void send_label(int); 00079 static void send_label_def(int); 00080 static void send_mod_file_name(void); 00081 static void send_namelist_group(int,int); 00082 static void send_interface_list(int); 00083 static TYPE send_non_standard_aligned_type(int, int); 00084 static void send_procedure(int, int, int); 00085 static void send_stor_blk(int, int *); 00086 00087 /*****************************************************************\ 00088 |* Static data used in this module. *| 00089 \*****************************************************************/ 00090 00091 static pdg_type_tbl_type *RESTRICT pdg_type_tbl; 00092 00093 static int data_value_idx; 00094 static int global_attr_idx; 00095 static int blank_pad_text; 00096 static int data_attr; 00097 static int data_character_bit_length; 00098 static boolean stack_data_object; 00099 static boolean whole_subscript; 00100 static boolean whole_substring; 00101 static boolean stack_data_constant; 00102 static boolean symbolic_constant_expr; 00103 static int processing_call; 00104 static int user_call; 00105 static int io_ctl_list; 00106 static int is_subscript; 00107 static int nested_array = 0 ; 00108 static int curr_sh; 00109 static int io_type; 00110 static int case_cmic_vpr_idx; 00111 static int guard_cmic_vpr_idx; 00112 static int doparallel_cmic_vpr_idx; 00113 static int parallel_cmic_vpr_idx; 00114 static boolean processing_io_stmt; 00115 static TYPE null_type; 00116 static TYPE pdg_type_void; 00117 static int pdg_type_tbl_idx; 00118 static int pdg_type_tbl_inc; 00119 static int pdg_type_tbl_init_size; 00120 static int pdg_type_tbl_limit = (1 << 16) - 1; 00121 static int pdg_type_tbl_num_wds = HOST_BYTES_TO_WORDS( 00122 (sizeof(pdg_type_tbl_type))); 00123 static int pdg_type_tbl_size; 00124 static int pdg_type_tbl_largest_idx; 00125 00126 static int pdg_basic_type[Num_Basic_Types] = { 00127 Integral, 00128 L_ogical, 00129 Floating_Pt, 00130 C_omplex, 00131 CRI_Pointer, 00132 BT_func_ptr, 00133 CRI_Pointer_Char, 00134 T_ypeless, 00135 Char_Fortran, 00136 S_tructure}; 00137 00138 static char *p_proc[] = { 00139 "Unknown_Proc", 00140 "Extern_Proc", 00141 "Intern_Proc_Ref", 00142 "Dummy_Proc", 00143 "Intern_Proc", 00144 "Imported_Proc", 00145 "Module_Proc", 00146 "Intrin_src_Proc"}; 00147 00148 static char *p_obj_sym_class[] = { 00149 "Unknown_Sym", 00150 "User_Variable", 00151 "Dummy_Arg", 00152 "Function_Rslt", 00153 "Compiler_Temp", 00154 "Cray_Pointee", 00155 "Component", 00156 "Vector_Temp", 00157 "Vector_Maskk", 00158 "Vector_Iota", 00159 "MPP_Object", 00160 "Call_Dummy", 00161 "Dummy_Procedure", 00162 "Hosted_User_Variable", 00163 "Hosted_Dummy_Arg", 00164 "Scratch_Symbol", 00165 "Hosted_Dummy_Procedure", 00166 "Hosted_Compiler_Temp", 00167 "Name" }; 00168 00169 static char *p_return[] = { 00170 "Unknown_Return", 00171 "Normal_Return", 00172 "Void_Return", 00173 "Alternate_Return" }; 00174 00175 static char *p_atp_pgm_unit[] = { 00176 "Pgm_Unknown", 00177 "C Function", 00178 "ERROR", 00179 "Function", 00180 "Subroutine", 00181 "Program", 00182 "Blockdata", 00183 "Module" }; 00184 00185 static char *p_boolean[] = { 00186 "F", 00187 "T"}; 00188 00189 static char *p_label[] = { 00190 "Lbl_Unknown", 00191 "Lbl_User", 00192 "Lbl_Format", 00193 "Lbl_Internal", 00194 "Lbl_Debug", 00195 "Lbl_Cstrct" }; 00196 00197 static char *p_dbg_label[] = { 00198 "Ldbg_None", 00199 "Ldbg_Stmt_Lbl", 00200 "Ldbg_Exit_Point", 00201 "Ldbg_End_Prologue", 00202 "Ldbg_Start_Epilogue", 00203 "Ldbg_Construct_Name", 00204 "Ldbg_Loop_Lbl", 00205 "Ldbg_User_Lbl" }; 00206 00207 static char *p_intent[] = { 00208 "Intent_Unseen", 00209 "Intent_In", 00210 "Intent_Out", 00211 "Intent_Inout" }; 00212 00213 static char *p_io[] = { 00214 "Write", 00215 "Read", 00216 "Write_Namelist", 00217 "Read_Namelist" }; 00218 00219 static char *p_sequence[] = { 00220 "Unknown_Seq", 00221 "Unsequenced", 00222 "Numeric_Seq", 00223 "Char_Seq", 00224 "Mixed_Seq" }; 00225 00226 static char *p_sb_blk_type_str[] = { 00227 "Unknown", 00228 "Static", 00229 "Stack", 00230 "Formal", 00231 "Common", 00232 "Extern", 00233 "Exported", 00234 "Task_Common", 00235 "Soft_External", 00236 "Global_Breg", 00237 "Global_Treg", 00238 "Static_Named", 00239 "Based", 00240 "Equivalenced", 00241 "Restricted", 00242 "Distributed", 00243 "LM_Static", 00244 "LM_Common", 00245 "LM_Extern", 00246 "Auxiliary", 00247 "Static_Local", 00248 "Non_Local_Stack", 00249 "Non_Local_Formal", 00250 "Hosted_Stack", 00251 "Threadprivate", 00252 "Coment" }; 00253 00254 static char *p_table_type[] = { 00255 "Unknown", 00256 "Basic", 00257 "Pointer", 00258 "Array", 00259 "Function" }; 00260 00261 static char *p_distribution[] = { 00262 "No_Distribution", 00263 "Block_Distribution", 00264 "Cyclic_Distribution", 00265 "Star_Distribution" }; 00266 00267 static char *p_basic_type[] = { 00268 "Unknown", 00269 "Logical", 00270 "Typeless", 00271 "Void", 00272 "Char_Fortran", 00273 "Char_C", 00274 "Struct", 00275 "Union", 00276 "Integral", 00277 "Floating_Pt", 00278 "Complex", 00279 "Cray_Pointer", 00280 "Cray_Pointer_Ch", 00281 "Cray_Parcel" }; 00282 00283 static char *p_const_class[] = { 00284 "No_Const", 00285 "Arith_Const", 00286 "Addr_Const", 00287 "Pattern_Const", 00288 "Array_Const", 00289 "Struct_Const", 00290 "Null_Arg_Const" }; 00291 00292 static char *p_tasking_context[] = { 00293 "Context_None", 00294 "Context_Private", 00295 "Context_Shared", 00296 "Context_Value", 00297 "Context_Iterate", 00298 "Context_Getfirst", 00299 "Context_Control", 00300 "Context_Induction", 00301 "Context_PE_Res_Func", 00302 "Context_PE_Res_Loop", 00303 "Context_Lastlocal", 00304 "Context_Affinity", 00305 "Context_Nest", 00306 "Context_Lastthread", 00307 "Context_Omp_Reduction_Max", 00308 "Context_Omp_Reduction_Min", 00309 "Context_Omp_Reduction_Band", 00310 "Context_Omp_Reduction_Bor", 00311 "Context_Omp_Reduction_Bneqv", 00312 "Context_Omp_Reduction_Plus", 00313 "Context_Omp_Reduction_Mult", 00314 "Context_Omp_Reduction_Minus", 00315 "Context_Omp_Reduction_And", 00316 "Context_Omp_Reduction_Or", 00317 "Context_Omp_Reduction_Eqv", 00318 "Context_Omp_Reduction_Neqv", 00319 "Context_Omp_Private", 00320 "Context_Omp_Shared", 00321 "Context_Omp_Firstprivate", 00322 "Context_Omp_Lastprivate", 00323 "Context_Omp_Copyprivate", 00324 "Context_Omp_Copyin", 00325 "Context_Omp_Affinity", 00326 "Context_Omp_Nest", 00327 "Context_Omp_Flush", 00328 00329 /* eraxxon: OpenAD directive */ 00330 "Context_OpenAD_XXX", 00331 "Context_OpenAD_Dependent", 00332 "Context_OpenAD_Independent", 00333 "Context_OpenAD_Simple" 00334 }; 00335 00336 int pdg_align[8] = {0, /* Signifies no alignment */ 00337 Bit_Align, 00338 Byte_Align, 00339 Parcel_Align, 00340 HWord_Align, 00341 Word_Align, 00342 DWord_Align, 00343 FWord_Align 00344 }; 00345 00346 00347 /******************************************************************************\ 00348 |* *| 00349 |* Description: *| 00350 |* Perform blank padding for a user implied DO. *| 00351 |* *| 00352 |* Input parameters: *| 00353 |* NONE *| 00354 |* *| 00355 |* Output parameters: *| 00356 |* NONE *| 00357 |* *| 00358 |* Returns: *| 00359 |* NOTHING *| 00360 |* *| 00361 \******************************************************************************/ 00362 void blank_padding (long64 pad, 00363 long64 offset) 00364 00365 { 00366 # if defined(_HOST_LITTLE_ENDIAN) 00367 long a_blank = (long)' '; 00368 #else 00369 long a_blank = (long)' ' << (sizeof(long)*CHAR_BIT - CHAR_BIT); 00370 # endif 00371 TYPE basic; 00372 00373 00374 TRACE (Func_Entry, "blank_padding", NULL); 00375 00376 /* stack a blank */ 00377 00378 basic = get_basic_type(Character_1, Align_Bit, NULL_IDX); 00379 00380 PDG_DBG_PRINT_START 00381 PDG_DBG_PRINT_C("fei_constant"); 00382 PDG_DBG_PRINT_T("(1) type", basic); 00383 PDG_DBG_PRINT_S("(2) const class", p_const_class[Pattern_Const]); 00384 PDG_DBG_PRINT_LD("(3) const", a_blank); 00385 PDG_DBG_PRINT_D("(4) bit length", CHAR_BIT); 00386 PDG_DBG_PRINT_END 00387 00388 # ifdef _ENABLE_FEI 00389 fei_constant(basic, Pattern_Const, (char *) &a_blank, (long64) CHAR_BIT); 00390 # endif 00391 00392 PDG_DBG_PRINT_START 00393 PDG_DBG_PRINT_C("fei_static_next_simple_init"); 00394 PDG_DBG_PRINT_D("(1) CHAR_BIT", CHAR_BIT); 00395 PDG_DBG_PRINT_LLD("(2) pad", pad); 00396 PDG_DBG_PRINT_LLD("(3) offset", offset); 00397 PDG_DBG_PRINT_D("(4) unused", 0); 00398 PDG_DBG_PRINT_END 00399 00400 # ifdef _ENABLE_FEI 00401 fei_static_next_simple_init((long64) CHAR_BIT, 00402 pad, 00403 offset, 00404 0); 00405 # endif 00406 00407 TRACE (Func_Exit, "blank_padding", NULL); 00408 00409 return; 00410 } /* blank_padding */ 00411 00412 00413 00414 00415 00416 /******************************************************************************\ 00417 |* *| 00418 |* Description: *| 00419 |* Start up the interface. *| 00420 |* *| 00421 |* Input parameters: *| 00422 |* none *| 00423 |* *| 00424 |* Output parameters: *| 00425 |* none *| 00426 |* *| 00427 |* Returns: nothing *| 00428 |* *| 00429 \******************************************************************************/ 00430 00431 void init_PDGCS(void) 00432 00433 { 00434 char *code_file_name; 00435 char compiler_name[8]; 00436 long flags = 0; 00437 char path_name[MAX_FILE_NAME_SIZE]; 00438 extern char release_level[8]; 00439 extern char *command_name; 00440 00441 TRACE (Func_Entry, "init_PDGCS", NULL); 00442 00443 if (dump_flags.preinline) { 00444 code_file_name = NULL; 00445 } 00446 else if (binary_output) { 00447 code_file_name = bin_file; 00448 } 00449 else if (assembly_output) { 00450 code_file_name = assembly_file; 00451 } 00452 else { 00453 return; /* No binary or cal output - exit */ 00454 } 00455 00456 /* Need to open the debug file if dumping the PDGCS interface calls. */ 00457 if (dump_flags.pdgcs) { 00458 init_debug_file(); 00459 } 00460 00461 getcwd (path_name, MAX_FILE_NAME_SIZE); 00462 00463 compiler_name[0] = 'C'; 00464 compiler_name[1] = 'F'; 00465 compiler_name[2] = 'T'; 00466 compiler_name[3] = '9'; 00467 compiler_name[4] = '0'; 00468 compiler_name[5] = NULL_CHAR; 00469 00470 00471 flags = flags | 00472 ((long) cmd_line_flags.dalign << PDGCS_INITIALIZE_DOUBLE_ALIGN)| 00473 ((long) assembly_output << PDGCS_INITIALIZE_OBJ_FILE)| 00474 ((long) (cmd_line_flags.debug_lvl == Debug_Lvl_1) 00475 << PDGCS_INITIALIZE_PART_DEBUG)| 00476 ((long) (cmd_line_flags.debug_lvl == Debug_Lvl_2) 00477 << PDGCS_INITIALIZE_OPT_DEBUG)| 00478 ((long) on_off_flags.atexpert << PDGCS_INITIALIZE_ATEXPERT)| 00479 ((long) on_off_flags.upper_case_names << PDGCS_INITIALIZE_KERNEL)| 00480 ((long) (cmd_line_flags.debug_lvl <= Debug_Lvl_2) 00481 << PDGCS_INITIALIZE_DBG_TABLES)| 00482 ((long) (!on_off_flags.round_mult_operations) 00483 << PDGCS_INITIALIZE_TRUNCATE)| 00484 (!((cif_flags & MESSAGE_RECS) || opt_flags.msgs) 00485 << PDGCS_INITIALIZE_NO_OPT_MSGS)| 00486 ((long) (cmd_line_flags.solaris_profile || on_off_flags.flowtrace_option) 00487 << PDGCS_INITIALIZE_FLOWTRACE)| 00488 ((long) (opt_flags.unroll_lvl == Unroll_Lvl_2) 00489 << PDGCS_INITIALIZE_MEM_HIER_OPT)| 00490 ((long) cmd_line_flags.small_pic_model << PDGCS_INITIALIZE_SMALL_PIC)| 00491 ((long) cmd_line_flags.large_pic_model << PDGCS_INITIALIZE_BIG_PIC)| 00492 (!opt_flags.neg_msgs << PDGCS_INITIALIZE_NO_NEG_MSGS)| 00493 ((long) dump_flags.mp << PDGCS_INITIALIZE_MP)| 00494 ((long) on_off_flags.MPP_apprentice << PDGCS_INITIALIZE_APPRENTICE)| 00495 ((long) on_off_flags.shared_to_private_coer<< PDGCS_INITIALIZE_S2P_COERCE)| 00496 ((long) opt_flags.jump << PDGCS_INITIALIZE_CCG_JUMPS)| 00497 ((long) opt_flags.opt_info << PDGCS_INITIALIZE_OPT_INFO)| 00498 ((long) on_off_flags.integer_1_and_2 << PDGCS_INITIALIZE_INTEGER_1_2)| 00499 (((long) opt_flags.split_lvl == Split_Lvl_2) 00500 << PDGCS_INITIALIZE_STREAMSPLIT); 00501 00502 PDG_DBG_PRINT_START 00503 PDG_DBG_PRINT_C("PDGCS_initialize"); 00504 PDG_DBG_PRINT_S("compiler_name", compiler_name); 00505 PDG_DBG_PRINT_S("(1) language", "PDGCS_Fortran_90"); 00506 PDG_DBG_PRINT_LO("(2) flags", flags); 00507 PDG_DBG_PRINT_S("(3) command_name", command_name); 00508 PDG_DBG_PRINT_S("(4) release_level", release_level); 00509 PDG_DBG_PRINT_S("(5) code_file_name", code_file_name); 00510 PDG_DBG_PRINT_S("(6) list_file_name", (char *) &assembly_listing_file); 00511 PDG_DBG_PRINT_D("(7) trunc bits", cmd_line_flags.truncate_bits); 00512 PDG_DBG_PRINT_LD("(8) CCG flags", ccg_dump_flags); 00513 PDG_DBG_PRINT_S("(9) src_path_name", get_src_path_name()); 00514 PDG_DBG_PRINT_S("(10) cif_file_name", (char *) &cif_name); 00515 PDG_DBG_PRINT_S("(11) debug_file_name", (char *) &debug_file_name); 00516 PDG_DBG_PRINT_LD("(12) debug file ptr", (long) debug_file); 00517 PDG_DBG_PRINT_LD("(13) cif file ptr", (long) cif_actual_file); 00518 PDG_DBG_PRINT_S("(14) GL_FILE_NAME", GL_FILE_NAME_PTR(1)); 00519 PDG_DBG_PRINT_S("(15) path name", path_name); 00520 PDG_DBG_PRINT_D("(16) N$PE", cmd_line_flags.MPP_num_pes); 00521 PDG_DBG_PRINT_D("(17) meta test", dump_flags.pvp_test); 00522 PDG_DBG_PRINT_END 00523 00524 # ifdef _ENABLE_FEI 00525 PDGCS_initialize(Fortran_90, 00526 flags, 00527 command_name, 00528 release_level, 00529 code_file_name, 00530 (char *)&assembly_listing_file, 00531 cmd_line_flags.truncate_bits, 00532 ccg_dump_flags, 00533 get_src_path_name(), 00534 (char *)&cif_name, 00535 (char *)&debug_file_name, 00536 debug_file, 00537 cif_actual_file, 00538 GL_FILE_NAME_PTR(1), 00539 path_name, 00540 cmd_line_flags.MPP_num_pes, 00541 dump_flags.pvp_test); 00542 # endif 00543 00544 00545 TRACE (Func_Exit, "init_PDGCS", NULL); 00546 00547 return; 00548 00549 } /* init_PDGCS */ 00550 00551 00552 00553 00554 /******************************************************************************\ 00555 |* *| 00556 |* Description: *| 00557 |* This does initialization, calls the routines to pass the symbol *| 00558 |* and the IR to PDG. It then does cleanup. This routine should *| 00559 |* handle internal program units. (Whichever way it's decided). *| 00560 |* *| 00561 |* Input parameters: *| 00562 |* NONE *| 00563 |* *| 00564 |* Output parameters: *| 00565 |* NONE *| 00566 |* *| 00567 |* Returns: *| 00568 |* NOTHING *| 00569 |* *| 00570 \******************************************************************************/ 00571 void cvrt_to_pdg (char *compiler_gen_date) 00572 00573 { 00574 int align; 00575 int i; 00576 int bit_size; 00577 int flags; 00578 00579 # if defined(_TARGET_OS_MAX) || defined(_TARGET_OS_UNICOS) 00580 int child_idx; 00581 # endif 00582 00583 00584 TRACE (Func_Entry, "cvrt_to_pdg", NULL); 00585 00586 /* This drives the PDGCS interface for a program unit. It is called once */ 00587 /* for each BLOCKDATA, PROGRAM, SUBROUTINE, MODULE, external SUBROUTINE or */ 00588 /* external FUNCTION. */ 00589 00590 /* Initialize variables and tables here. */ 00591 00592 case_cmic_vpr_idx = NULL_IDX; 00593 guard_cmic_vpr_idx = NULL_IDX; 00594 00595 init_directive(3); 00596 00597 for (i = 1; i <= global_line_tbl_idx; i++) { 00598 PDG_DBG_PRINT_START 00599 PDG_DBG_PRINT_C("cwh_add_to_used_files_table"); 00600 PDG_DBG_PRINT_S("(1) path", GL_FILE_NAME_PTR(i)); 00601 PDG_DBG_PRINT_D("(2) one", 1); 00602 PDG_DBG_PRINT_END 00603 00604 # if defined(GENERATE_WHIRL) 00605 cwh_add_to_used_files_table(GL_FILE_NAME_PTR(i), 1); 00606 # endif 00607 } 00608 00609 PDG_DBG_PRINT_START 00610 PDG_DBG_PRINT_C("fei_descriptor"); 00611 PDG_DBG_PRINT_O("(1) flags", 0); 00612 PDG_DBG_PRINT_S("(2) table type", p_table_type[Basic]); 00613 PDG_DBG_PRINT_D("(3) bit_size", 0); 00614 PDG_DBG_PRINT_S("(4) basic type", p_basic_type[V_oid]); 00615 PDG_DBG_PRINT_D("(5) aux info", 0); 00616 PDG_DBG_PRINT_D("(6) alignment", 0); 00617 PDG_DBG_PRINT_END 00618 # ifdef _ENABLE_FEI 00619 pdg_type_void = fei_descriptor(0, 00620 Basic, 00621 0, 00622 V_oid, 00623 0, 00624 0); 00625 # endif 00626 PDG_DBG_PRINT_START 00627 PDG_DBG_PRINT_T("(r) type", pdg_type_void); 00628 PDG_DBG_PRINT_END 00629 00630 pgm_unit_start_line = SH_GLB_LINE(SCP_FIRST_SH_IDX(curr_scp_idx)); 00631 00632 # if defined(_TARGET_OS_MAX) || defined(_TARGET_OS_UNICOS) 00633 00634 /* On Cray systems, */ 00635 /* Modules must go thru first, because MODULE PDT's must be first. Clear */ 00636 /* SCP_FIRST_CHILD_IDX for the module, so its children do not get sent */ 00637 /* thru. (cvrt_proc_to_pdg finds the innermost child and sends it first.) */ 00638 /* After the module is sent thru, send all its children via the normal */ 00639 /* order. Then when that's thru send the module information table. */ 00640 00641 if (ATP_PGM_UNIT(SCP_ATTR_IDX(curr_scp_idx)) == Module ) { 00642 00643 00644 child_idx = SCP_FIRST_CHILD_IDX(curr_scp_idx); 00645 SCP_FIRST_CHILD_IDX(curr_scp_idx) = NULL_IDX; 00646 00647 cvrt_proc_to_pdg(compiler_gen_date,FALSE); 00648 00649 if (child_idx != NULL_IDX) { 00650 curr_scp_idx = child_idx; 00651 cvrt_proc_to_pdg(compiler_gen_date,TRUE); 00652 } 00653 00654 curr_scp_idx = MAIN_SCP_IDX; 00655 00656 if (on_off_flags.module_to_mod) { 00657 send_mod_file_name(); /* Sends the file name */ 00658 create_mod_info_tbl(); /* Creates the table. */ 00659 output_mod_info_file(); /* Writes the table. */ 00660 } 00661 else { /* Cray and MPP go out in a special &%% module because of segldr.*/ 00662 send_mod_file_name(); 00663 } 00664 free_tables(); 00665 } 00666 else { 00667 cvrt_proc_to_pdg(compiler_gen_date,FALSE); 00668 } 00669 00670 # else 00671 cvrt_proc_to_pdg(compiler_gen_date,FALSE); 00672 # endif 00673 00674 TBL_FREE(pdg_link_tbl); 00675 TBL_FREE(pdg_type_tbl); 00676 00677 TRACE (Func_Exit, "cvrt_to_pdg", NULL); 00678 00679 return; 00680 00681 } /* cvrt_to_pdg */ 00682 00683 00684 00685 /******************************************************************************\ 00686 |* *| 00687 |* Description: *| 00688 |* This does initialization, calls the routines to pass the symbol *| 00689 |* and the IR to PDG. It then does cleanup. *| 00690 |* *| 00691 |* Input parameters: *| 00692 |* NONE *| 00693 |* *| 00694 |* Output parameters: *| 00695 |* NONE *| 00696 |* *| 00697 |* Returns: *| 00698 |* NOTHING *| 00699 |* *| 00700 \******************************************************************************/ 00701 static void cvrt_proc_to_pdg (char *compiler_gen_date,boolean is_child) 00702 00703 { 00704 boolean check_scp = TRUE; 00705 int ismodule = 0; 00706 int mobes_sades; 00707 char *name_ptr; 00708 long opt_flag; 00709 int pgm_attr_idx; 00710 int pgm_code = 0; 00711 int pgm_data = 0; 00712 int save_curr_scp_idx; 00713 int w2f_types=0; 00714 00715 extern void dim_reshape_pass_driver(void); 00716 extern void runtime_ptr_chk_driver(void); 00717 00718 TRACE (Func_Entry, "cvrt_proc_to_pdg", NULL); 00719 00720 PROCESS_SIBLING: 00721 00722 /* The innermost children go thru the interface first. The external */ 00723 /* procedure goes thru last. */ 00724 00725 00726 /* since in *.w2f.f we add an extra module "w2f__types" 00727 * to fix real kind problems,we don't want to generate 00728 * a PU in WHIRL representation,so if the PU is a module 00729 * named "w2f__types" then igore it in cvrt-to-PDG processing 00730 * ---------fzhao 00731 */ 00732 00733 pgm_attr_idx = SCP_ATTR_IDX(curr_scp_idx); 00734 name_ptr = &name_pool[ATP_EXT_NAME_IDX(pgm_attr_idx)].name_char; 00735 00736 if (ATP_PGM_UNIT(pgm_attr_idx)==Module && 00737 strncmp("w2f__types",name_ptr,10)==0){ 00738 w2f_types =1; 00739 goto HERE1; 00740 } 00741 00742 if (!is_child ) /* do not re-allocate the table for nested PUs--FMZ */ 00743 allocate_pdg_link_tbls(); 00744 00745 if (SCP_FIRST_CHILD_IDX(curr_scp_idx) != NULL_IDX) { 00746 save_curr_scp_idx = curr_scp_idx; 00747 curr_scp_idx = SCP_FIRST_CHILD_IDX(curr_scp_idx); 00748 cvrt_proc_to_pdg(compiler_gen_date ,TRUE); 00749 curr_scp_idx = save_curr_scp_idx; 00750 } 00751 00752 if (opt_flags.reshape) { 00753 dim_reshape_pass_driver(); 00754 } 00755 00756 if (cmd_line_flags.runtime_ptr_chk) { 00757 runtime_ptr_chk_driver(); 00758 } 00759 00760 clean_pdg_link_tbls_for_nested_pu(); 00761 00762 /* 00763 allocate_pdg_link_tbls(); 00764 */ 00765 00766 /* pgm_attr_idx = SCP_ATTR_IDX(curr_scp_idx); */ 00767 00768 ATP_SCP_ALIVE(pgm_attr_idx) = TRUE; 00769 stmt_start_line = SH_GLB_LINE(SCP_FIRST_SH_IDX(curr_scp_idx)); 00770 stmt_start_col = 0; 00771 00772 cvrt_sytb_to_pdg(); 00773 00774 /* name_ptr = &name_pool[ATP_EXT_NAME_IDX(pgm_attr_idx)].name_char; */ 00775 00776 PDG_DBG_PRINT_START 00777 PDG_DBG_PRINT_C("PDGCS_comp_unit"); 00778 PDG_DBG_PRINT_S("(1) name_ptr", name_ptr); 00779 PDG_DBG_PRINT_D("(2) unused", 0); 00780 PDG_DBG_PRINT_END 00781 00782 # ifdef _ENABLE_FEI 00783 PDGCS_comp_unit(name_ptr, NULL_IDX); 00784 # endif 00785 00786 opt_flag = 00787 ((long) opt_flags.aggress << PDGCS_NEW_PROC_IGNORE_THROTTLE)| 00788 ((long) (cmd_line_flags.debug_lvl != Debug_Lvl_0) 00789 << PDGCS_NEW_PROC_ELIM_DEAD_CODE)| 00790 ((long) opt_flags.pattern << PDGCS_NEW_PROC_PATTERN_MATCHING)| 00791 ((long) on_off_flags.reciprical_divide << PDGCS_NEW_PROC_IEEE_RECIPS)| 00792 ((long) (opt_flags.task_lvl == Task_Lvl_3) 00793 << PDGCS_NEW_PROC_TASK_INNER_LOOPS)| 00794 ((long) cmd_line_flags.runtime_conformance << PDGCS_NEW_PROC_CONFORM_CHECK)| 00795 ((long) opt_flags.ieeeconform << PDGCS_NEW_PROC_IEEE_CONFORM)| 00796 ((long) cmd_line_flags.do_UDB_checks << PDGCS_NEW_PROC_DO_UBD_ANALYSIS); 00797 00798 send_attr_ntry(pgm_attr_idx); 00799 00800 mobes_sades = ATP_USES_EREGS(pgm_attr_idx) ? 512 : 0; 00801 00802 PDG_DBG_PRINT_START 00803 PDG_DBG_PRINT_C("PDGCS_new_proc"); 00804 PDG_DBG_PRINT_D("(1) num ir", 2000); 00805 PDG_DBG_PRINT_LD("(2) PDG_AT_IDX", PDG_AT_IDX(pgm_attr_idx)); 00806 PDG_DBG_PRINT_D("(3) alt entries", SCP_ALT_ENTRY_CNT(curr_scp_idx)); 00807 PDG_DBG_PRINT_D("(4) scalar level", opt_flags.scalar_lvl); 00808 PDG_DBG_PRINT_D("(5) vector level", opt_flags.vector_lvl); 00809 PDG_DBG_PRINT_D("(6) task level", opt_flags.task_lvl); 00810 PDG_DBG_PRINT_LO("(7) flags", opt_flag); 00811 PDG_DBG_PRINT_D("(8) user mobes", mobes_sades); 00812 PDG_DBG_PRINT_D("(9) user sades", mobes_sades); 00813 PDG_DBG_PRINT_D("(10) pipeline level", opt_flags.pipeline_lvl); 00814 PDG_DBG_PRINT_D("(11) stream level", opt_flags.stream_lvl); 00815 PDG_DBG_PRINT_END 00816 00817 00818 # ifdef _ENABLE_FEI 00819 if (ATP_PGM_UNIT(pgm_attr_idx)==Module) 00820 ismodule=1; 00821 if (ATP_PGM_UNIT(pgm_attr_idx)==Blockdata) 00822 ismodule=2; 00823 PDGCS_new_proc(2000, 00824 PDG_AT_IDX(pgm_attr_idx), 00825 SCP_ALT_ENTRY_CNT(curr_scp_idx), 00826 opt_flags.scalar_lvl, 00827 opt_flags.vector_lvl, 00828 opt_flags.task_lvl, 00829 opt_flag, 00830 mobes_sades, 00831 mobes_sades, 00832 opt_flags.pipeline_lvl, 00833 opt_flags.stream_lvl, 00834 ismodule); 00835 # endif 00836 00837 cvrt_ir_to_pdg(curr_scp_idx); 00838 00839 ATP_SCP_ALIVE(pgm_attr_idx) = FALSE; 00840 00841 if (cmd_line_flags.debug_lvl <= Debug_Lvl_2) { 00842 PDG_DBG_PRINT_START 00843 PDG_DBG_PRINT_C("PDGCS_debug_init"); 00844 PDG_DBG_PRINT_S("(1) src path name", get_src_path_name()); 00845 PDG_DBG_PRINT_S("(2) gen date", compiler_gen_date); 00846 PDG_DBG_PRINT_END 00847 00848 # ifdef _ENABLE_FEI 00849 PDGCS_debug_init(get_src_path_name(), 00850 compiler_gen_date); 00851 # endif 00852 } 00853 00854 PDG_DBG_PRINT_START 00855 # ifdef _DEBUG 00856 fflush(debug_file); 00857 # endif 00858 PDG_DBG_PRINT_END 00859 00860 /* 00861 If this is the outermost parent scope and this is not a module, 00862 free all the tables. 00863 */ 00864 00865 if (curr_scp_idx == MAIN_SCP_IDX && 00866 (ATP_PGM_UNIT(SCP_ATTR_IDX(curr_scp_idx)) != Module )) { /* ???? */ 00867 free_tables(); 00868 check_scp = FALSE; /* Tables are gone */ 00869 } 00870 00871 HERE1: 00872 # if !defined(_TARGET_OS_MAX) && !defined(_TARGET_OS_UNICOS) 00873 if (curr_scp_idx == MAIN_SCP_IDX && 00874 ATP_PGM_UNIT(SCP_ATTR_IDX(curr_scp_idx)) == Module) { 00875 00876 /* Cray and MPP go out in a special &%% module because of segldr. */ 00877 if (!w2f_types) 00878 send_mod_file_name(); /* Sends the file name */ 00879 create_mod_info_tbl(); /* Creates the table. */ 00880 output_mod_info_file(); /* Writes the table. */ 00881 free_tables(); 00882 check_scp = FALSE; /* Tables are gone */ 00883 } 00884 # endif 00885 00886 if (w2f_types) 00887 goto HERE; 00888 00889 PDG_DBG_PRINT_START 00890 PDG_DBG_PRINT_C("PDGCS_do_proc"); 00891 PDG_DBG_PRINT_END 00892 00893 # ifdef _ENABLE_FEI 00894 PDGCS_do_proc(); /* Start up the backend */ 00895 # endif 00896 00897 PDG_DBG_PRINT_START 00898 PDG_DBG_PRINT_C("PDGCS_end_procs"); 00899 PDG_DBG_PRINT_D("(1) pgm_code", pgm_code); 00900 PDG_DBG_PRINT_D("(2) pgm_data", pgm_data); 00901 PDG_DBG_PRINT_END 00902 00903 # ifdef _ENABLE_FEI 00904 PDGCS_end_procs(&pgm_code, 00905 &pgm_data); 00906 # endif 00907 00908 PDG_DBG_PRINT_START 00909 PDG_DBG_PRINT_D("(r) pgm_code", pgm_code); 00910 PDG_DBG_PRINT_D("(r) pgm_data", pgm_data); 00911 PDG_DBG_PRINT_END 00912 00913 00914 00915 code_size = code_size + pgm_code; 00916 data_size = data_size + pgm_data; 00917 00918 PDG_DBG_PRINT_START 00919 PDG_DBG_PRINT_C("PDGCS_end_comp_unit"); 00920 PDG_DBG_PRINT_END 00921 00922 # ifdef _ENABLE_FEI 00923 PDGCS_end_comp_unit(); 00924 # endif 00925 00926 HERE: 00927 00928 if (check_scp && SCP_SIBLING_IDX(curr_scp_idx) != NULL_IDX) { 00929 curr_scp_idx = SCP_SIBLING_IDX(curr_scp_idx); 00930 goto PROCESS_SIBLING; 00931 } 00932 00933 TRACE (Func_Exit, "cvrt_proc_to_pdg", NULL); 00934 00935 return; 00936 00937 } /* cvrt_proc_to_pdg */ 00938 00939 00940 00941 /******************************************************************************\ 00942 |* *| 00943 |* Description: *| 00944 |* Get the next data value from the constant list following a data *| 00945 |* statement. *| 00946 |* *| 00947 |* Input parameters: *| 00948 |* NONE *| 00949 |* *| 00950 |* Output parameters: *| 00951 |* NONE *| 00952 |* *| 00953 |* Returns: *| 00954 |* NOTHING *| 00955 |* *| 00956 \******************************************************************************/ 00957 void push_data_value (int t_idx) 00958 00959 { 00960 char *new_str_ptr; 00961 char *old_str_ptr; 00962 boolean ignore_types; 00963 long_type target_length; 00964 int idx; 00965 int l_idx; 00966 fld_type fld; 00967 int cn_idx; 00968 int type_idx; 00969 int new_str_idx; 00970 long64 len; 00971 long64 rep_count; 00972 long64 stride; 00973 long64 padd = 0; 00974 long64 num_chars; 00975 int i; 00976 00977 00978 TRACE (Func_Entry, "push_data_value", NULL); 00979 00980 if (IL_LIST_CNT(data_value_idx) == 0) { 00981 data_value_idx = IL_NEXT_LIST_IDX(data_value_idx); 00982 } 00983 00984 IL_LIST_CNT(data_value_idx) = IL_LIST_CNT(data_value_idx) - 1; 00985 00986 /* stack the linearizable object */ 00987 00988 data_attr = NULL_IDX; 00989 stack_data_object = TRUE; 00990 cvrt_exp_to_pdg(IL_IDX(t_idx), 00991 IL_FLD(t_idx)); 00992 stack_data_object = FALSE; 00993 00994 ignore_types = FALSE; 00995 00996 switch (IL_FLD(data_value_idx)) { 00997 00998 case CN_Tbl_Idx : 00999 idx = IL_IDX(data_value_idx); 01000 fld = IL_FLD(data_value_idx); 01001 rep_count = (long64) 1; 01002 stride = (long64) 0; 01003 cn_idx = IL_IDX(data_value_idx); 01004 01005 if (TYP_TYPE(CN_TYPE_IDX(idx)) == Typeless || 01006 (TYP_TYPE(CN_TYPE_IDX(idx)) == Character && 01007 TYP_TYPE(ATD_TYPE_IDX(data_attr)) != Character)) { 01008 ignore_types = TRUE; 01009 } 01010 break; 01011 01012 case IR_Tbl_Idx : 01013 if (IR_FLD_R(IL_IDX(data_value_idx)) == CN_Tbl_Idx) { 01014 idx = IR_IDX_R(IL_IDX(data_value_idx)); 01015 fld = IR_FLD_R(IL_IDX(data_value_idx)); 01016 rep_count = (long64) 1; 01017 stride = (long64) 0; 01018 cn_idx = IR_IDX_R(IL_IDX(data_value_idx)); 01019 01020 if (TYP_TYPE(CN_TYPE_IDX(idx)) == Typeless || 01021 (TYP_TYPE(CN_TYPE_IDX(idx)) == Character && 01022 TYP_TYPE(ATD_TYPE_IDX(data_attr)) != Character)) { 01023 ignore_types = TRUE; 01024 } 01025 } 01026 else { /* we have a Mult_Opr - blank pad here */ 01027 idx = IR_IDX_R(IR_IDX_R(IL_IDX(data_value_idx))); 01028 fld = IR_FLD_R(IR_IDX_R(IL_IDX(data_value_idx))); 01029 rep_count = CN_INT_TO_C(IR_IDX_L(IR_IDX_R(IL_IDX(data_value_idx)))); 01030 stride = (long64) CHAR_BIT; 01031 cn_idx = CN_INTEGER_ZERO_IDX; 01032 } 01033 break; 01034 } 01035 01036 01037 if ((TYP_TYPE(CN_TYPE_IDX(cn_idx)) == Character) && 01038 ((IR_OPR(blank_pad_text) == Whole_Substring_Opr) || 01039 (IR_OPR(blank_pad_text) == Substring_Opr))) { 01040 num_chars = CN_INT_TO_C(TYP_IDX(CN_TYPE_IDX(cn_idx))); 01041 l_idx = IR_IDX_R(blank_pad_text); /* first list item */ 01042 l_idx = IL_NEXT_LIST_IDX(l_idx); /* second list item */ 01043 l_idx = IL_NEXT_LIST_IDX(l_idx); /* third list item */ 01044 padd = CN_INT_TO_C(IL_IDX(l_idx)); 01045 padd = padd - num_chars; 01046 } 01047 01048 if (padd < 0) { /* need to truncate constant */ 01049 01050 /* JEFFL - Why does target_length come out of the table */ 01051 /* and go back in with no changes? */ 01052 /* Also target_len will not hold a 64 bit int */ 01053 /* on a 32 bit platform. It needs too. */ 01054 01055 target_length = CN_CONST(IL_IDX(l_idx)); 01056 CLEAR_TBL_NTRY(type_tbl, TYP_WORK_IDX); 01057 TYP_TYPE(TYP_WORK_IDX) = Character; 01058 TYP_LINEAR(TYP_WORK_IDX) = CHARACTER_DEFAULT_TYPE; 01059 TYP_CHAR_CLASS(TYP_WORK_IDX) = Const_Len_Char; 01060 TYP_FLD(TYP_WORK_IDX) = CN_Tbl_Idx; 01061 TYP_IDX(TYP_WORK_IDX) = ntr_const_tbl(CG_INTEGER_DEFAULT_TYPE, 01062 FALSE, 01063 &target_length); 01064 type_idx = ntr_type_tbl(); 01065 01066 new_str_idx = ntr_const_tbl(type_idx, TRUE, NULL); 01067 new_str_ptr = (char *) &CN_CONST(new_str_idx); 01068 old_str_ptr = (char *) &CN_CONST(idx); 01069 len = CN_INT_TO_C(TYP_IDX(type_idx)); 01070 01071 for (i = 0; i < len; i++) { 01072 new_str_ptr[i] = old_str_ptr[i]; 01073 } 01074 01075 idx = new_str_idx; 01076 } 01077 01078 /* stack the constant */ 01079 stack_data_constant = TRUE; 01080 cvrt_exp_to_pdg(idx, fld); 01081 stack_data_constant = FALSE; 01082 01083 PDG_DBG_PRINT_START 01084 PDG_DBG_PRINT_C("fei_static_simple_init"); 01085 PDG_DBG_PRINT_LLD("(1) rep_count", rep_count); 01086 PDG_DBG_PRINT_LLD("(2) stride", stride); 01087 PDG_DBG_PRINT_D("(3) ignore_types", ignore_types); 01088 PDG_DBG_PRINT_D("(4) unused", 0); 01089 PDG_DBG_PRINT_END 01090 01091 # ifdef _ENABLE_FEI 01092 fei_static_simple_init(rep_count, 01093 stride, 01094 ignore_types, 01095 0); 01096 # endif 01097 01098 if (padd > 0) { /* if blank padding necessary on a user implied DO */ 01099 blank_padding(padd, (long64) (num_chars * CHAR_BIT)); 01100 } 01101 01102 TRACE (Func_Exit, "push_data_value", NULL); 01103 01104 return; 01105 01106 } /* push_data_value */ 01107 01108 01109 /******************************************************************************\ 01110 |* *| 01111 |* Description: *| 01112 |* *| 01113 |* Input parameters: *| 01114 |* NONE *| 01115 |* *| 01116 |* Output parameters: *| 01117 |* NONE *| 01118 |* *| 01119 |* Returns: *| 01120 |* NOTHING *| 01121 |* *| 01122 \******************************************************************************/ 01123 static void cvrt_sytb_to_pdg(void) 01124 { 01125 int al_idx; 01126 int attr_idx; 01127 int name_idx; 01128 int unused; 01129 int scp_idx; 01130 01131 01132 TRACE (Func_Entry, "cvrt_sytb_to_pdg", NULL); 01133 01134 /* Need PDG symbols for current program unit and all the parents, because */ 01135 /* send_stor_blk may use them. Assign PDG symbol ids, but do not send */ 01136 /* them over until the rest of the symbols have been sent thru. This is */ 01137 /* because the Dummy Args may have been host associated and need to go */ 01138 /* through first so the defined, and inner_ref, def flags are set */ 01139 /* correctly. */ 01140 01141 scp_idx = curr_scp_idx; 01142 01143 while (scp_idx != NULL_IDX) { 01144 attr_idx = SCP_ATTR_IDX(scp_idx); 01145 01146 if (ATP_PGM_UNIT(attr_idx) == Module && scp_idx != curr_scp_idx) { 01147 break; /* DO NOT SEND a parent across if it is a module. */ 01148 } 01149 01150 if (AT_OBJ_CLASS(attr_idx) == Pgm_Unit) { 01151 PDG_DBG_PRINT_START 01152 PDG_DBG_PRINT_C("fei_next_func_idx"); 01153 PDG_DBG_PRINT_END 01154 # ifdef _ENABLE_FEI 01155 PDG_AT_IDX(attr_idx) = fei_next_func_idx(ATP_PGM_UNIT(attr_idx), 01156 ATP_PROC(attr_idx), 01157 ATP_ALT_ENTRY(attr_idx)); 01158 # endif 01159 PDG_DBG_PRINT_START 01160 PDG_DBG_PRINT_LD("(r) PDG_AT_IDX", PDG_AT_IDX(attr_idx)); 01161 PDG_DBG_PRINT_END 01162 } 01163 else { 01164 PDG_DBG_PRINT_START 01165 PDG_DBG_PRINT_C("fei_next_symbol"); 01166 PDG_DBG_PRINT_END 01167 # ifdef _ENABLE_FEI 01168 PDG_AT_IDX(attr_idx) = fei_next_symbol(TRUE); 01169 # endif 01170 PDG_DBG_PRINT_START 01171 PDG_DBG_PRINT_LD("(r) PDG_AT_IDX", PDG_AT_IDX(attr_idx)); 01172 PDG_DBG_PRINT_END 01173 } 01174 01175 al_idx = SCP_ENTRY_IDX(scp_idx); 01176 while (al_idx != NULL_IDX) { 01177 attr_idx = AL_ATTR_IDX(al_idx); 01178 01179 if (AT_OBJ_CLASS(attr_idx) == Pgm_Unit) { 01180 PDG_DBG_PRINT_START 01181 PDG_DBG_PRINT_C("fei_next_func_idx"); 01182 PDG_DBG_PRINT_END 01183 # ifdef _ENABLE_FEI 01184 PDG_AT_IDX(attr_idx) = fei_next_func_idx(ATP_PGM_UNIT(attr_idx), 01185 ATP_PROC(attr_idx), 01186 ATP_ALT_ENTRY(attr_idx)); 01187 # endif 01188 PDG_DBG_PRINT_START 01189 PDG_DBG_PRINT_LD("(r) PDG_AT_IDX", PDG_AT_IDX(attr_idx)); 01190 PDG_DBG_PRINT_END 01191 } 01192 else { 01193 PDG_DBG_PRINT_START 01194 PDG_DBG_PRINT_C("fei_next_symbol"); 01195 PDG_DBG_PRINT_END 01196 # ifdef _ENABLE_FEI 01197 PDG_AT_IDX(attr_idx) = fei_next_symbol(TRUE); 01198 # endif 01199 PDG_DBG_PRINT_START 01200 PDG_DBG_PRINT_LD("(r) PDG_AT_IDX", PDG_AT_IDX(attr_idx)); 01201 PDG_DBG_PRINT_END 01202 } 01203 al_idx = AL_NEXT_IDX(al_idx); 01204 } 01205 scp_idx = SCP_PARENT_IDX(scp_idx); 01206 } 01207 01208 /* 01209 A stack segment must go over first for CCG. If there is a host stack 01210 for this program unit, send it first. The second argument is a pointer 01211 to a symbol class. This will not be used because the STACK is in the 01212 current scope. Pass a zero'd out integer field. 01213 */ 01214 if (SCP_PARENT_IDX(curr_scp_idx) != NULL_IDX && 01215 SCP_SB_HOSTED_STACK_IDX(SCP_PARENT_IDX(curr_scp_idx)) != NULL_IDX) { 01216 send_stor_blk(SCP_SB_HOSTED_STACK_IDX(SCP_PARENT_IDX(curr_scp_idx)), 01217 &unused); 01218 } 01219 else if (SCP_SB_HOSTED_STACK_IDX(curr_scp_idx) != NULL_IDX) { 01220 send_stor_blk(SCP_SB_HOSTED_STACK_IDX(curr_scp_idx), 01221 &unused); 01222 } 01223 else { 01224 send_stor_blk(SCP_SB_STACK_IDX(curr_scp_idx), 01225 &unused); 01226 } 01227 01228 /* 01229 Sends main entry point, alternate entry points, function 01230 results, all dummy arguments, and any accessed derived types. 01231 */ 01232 send_procedure(SCP_ATTR_IDX(curr_scp_idx), 01233 SCP_ENTRY_IDX(curr_scp_idx), 01234 Definition); 01235 01236 for (name_idx = SCP_LN_FW_IDX(curr_scp_idx) + 1; 01237 name_idx < SCP_LN_LW_IDX(curr_scp_idx); name_idx++) { 01238 attr_idx = LN_ATTR_IDX(name_idx); 01239 send_attr_ntry(attr_idx); 01240 } 01241 01242 al_idx = SCP_ATTR_LIST(curr_scp_idx); 01243 while (al_idx != NULL_IDX) { 01244 send_attr_ntry(AL_ATTR_IDX(al_idx)); 01245 al_idx = AL_NEXT_IDX(al_idx); 01246 } 01247 01248 /* Send all parent procedures. */ 01249 scp_idx = SCP_PARENT_IDX(curr_scp_idx); 01250 while (scp_idx != NULL_IDX) { 01251 01252 send_procedure(SCP_ATTR_IDX(scp_idx), 01253 SCP_ENTRY_IDX(scp_idx), 01254 Parent); 01255 01256 scp_idx = SCP_PARENT_IDX(scp_idx); 01257 } 01258 01259 TRACE (Func_Exit, "cvrt_sytb_to_pdg", NULL); 01260 01261 return; 01262 01263 } /* cvrt_sytb_to_pdg */ 01264 01265 01266 /******************************************************************************\ 01267 |* *| 01268 |* Description: *| 01269 |* *| 01270 |* Input parameters: *| 01271 |* NONE *| 01272 |* *| 01273 |* Output parameters: *| 01274 |* NONE *| 01275 |* *| 01276 |* Returns: *| 01277 |* NOTHING *| 01278 |* *| 01279 \******************************************************************************/ 01280 static void cvrt_exp_to_pdg(int ir_idx, 01281 fld_type field) 01282 { 01283 01284 static boolean high_range_present; 01285 static boolean low_range_present; 01286 static boolean member; 01287 static boolean static_initialization; 01288 01289 long_type loc_value[MAX_WORDS_FOR_NUMERIC]; 01290 int attr_idx; 01291 int type_idx; 01292 int base_attr; 01293 TYPE basic; 01294 int col; 01295 TYPE arg_type; 01296 INT32 big_int; 01297 long64 bit_length = 0; 01298 boolean bound_chk; 01299 int bound_idx = 0; 01300 int cn_idx; 01301 int idx; 01302 int constant_class; 01303 int count; 01304 int dim = 0; 01305 int co_dim = 0; 01306 long64 end; 01307 long64 flags = 0; 01308 int j; 01309 long64 i; 01310 boolean ignore_types; 01311 long64 inc; 01312 opnd_type l_opnd; 01313 int first_task_idx = NULL_IDX; 01314 int last_task_idx = NULL_IDX; 01315 int line; 01316 int list_array[OPEN_MP_LIST_CNT]; 01317 int list_cnt = 0; 01318 int list_idx1; 01319 int list_idx2; 01320 int list_idx3; 01321 int list_idx4; 01322 int name_idx; 01323 int next_idx; 01324 int number_actual_args; 01325 long64 offset; 01326 int path_idx; 01327 long pdg_cn_idx; 01328 long64 rep_count; 01329 int return_kind; 01330 boolean save_symbolic_constant_expr; 01331 int search_idx; 01332 int ss; 01333 long64 start; 01334 INT64 static_subscripts[7]; 01335 long64 stride; 01336 int t_idx; 01337 int task_tbl_idx; 01338 int task_maxcpus_idx; 01339 int task_wdist_idx; 01340 long which; 01341 long assertion; 01342 int task_if_idx = 0; 01343 char *criticalname = 0; 01344 long level = 0; 01345 long span = 1; 01346 long point = 0; 01347 long scheduletype = 0; 01348 int schedulechunk = 0; 01349 long schedtype = 0; 01350 long chunkcount = 0; 01351 long threadcount = 0; 01352 long datacount = 0; 01353 long reductioncount = 0; 01354 long ontocount = 0; 01355 long ordered = 0; 01356 long defaultt = 0; 01357 long nowait = 0; 01358 long varcount = 0; 01359 long C_value = 0; 01360 long prefetch_manual = 0; 01361 long prefetch_array = 0; 01362 int redistribute_array = 0; 01363 long context = -1; 01364 long prefetch_size = -1; 01365 long prefetch_kind = -1; 01366 int stride_list = 0; 01367 int level_list = 0; 01368 int cyclic_list = 0; 01369 int onto_list = 0; 01370 long n1 = 0; 01371 long n2 = 0; 01372 long cyclic_exists = 0; 01373 long onto_exists = 0; 01374 int tmp_ir_idx; 01375 int trip; 01376 TYPE type_desc; 01377 boolean unused; 01378 long64 vv; 01379 int fld; 01380 boolean EXPAND = FALSE; 01381 size_offset_type offset1; 01382 size_offset_type offset2; 01383 opnd_type opnd; 01384 size_offset_type result; 01385 int pe_bd_idx = 0; 01386 long64 arith_constant[4]; 01387 int arg_idx; 01388 int lhs_idx; 01389 int mask_idx; 01390 int proc_idx; 01391 int rhs_idx; 01392 int rename_only_num = 0; 01393 int ro_idx ; 01394 int onlyPredicate = 0; 01395 INTPTR oldpdgatidx; 01396 int listnum = 0; 01397 01398 TRACE (Func_Entry, "cvrt_exp_to_pdg", NULL); 01399 01400 switch (field) { 01401 01402 case NO_Tbl_Idx : 01403 01404 if (processing_call > 0) { 01405 PDG_DBG_PRINT_START 01406 PDG_DBG_PRINT_C("fei_null_expr"); 01407 PDG_DBG_PRINT_END 01408 01409 # ifdef _ENABLE_FEI 01410 if (!is_subscript) 01411 fei_null_expr(); 01412 else 01413 fei_implicit_expr(); 01414 01415 # endif 01416 } else 01417 if (is_subscript) 01418 fei_implicit_expr(); 01419 01420 break; 01421 01422 01423 case IMPLICIT_Tbl_Idx: 01424 fei_implicit_expr(); 01425 break; 01426 01427 case SB_Tbl_Idx : 01428 PDG_DBG_PRINT_START 01429 PDG_DBG_PRINT_C("fei_seg_ref"); 01430 PDG_DBG_PRINT_S("SB_NAME_PTR", SB_NAME_PTR(ir_idx)); 01431 PDG_DBG_PRINT_LD("(1) PDG_SB_IDX", PDG_SB_IDX(ir_idx)); 01432 PDG_DBG_PRINT_END 01433 01434 # if defined(GENERATE_WHIRL) 01435 # ifdef _ENABLE_FEI 01436 fei_seg_ref(PDG_SB_IDX(ir_idx)); 01437 # endif 01438 # endif 01439 break; 01440 01441 01442 case CN_Tbl_Idx : 01443 constant_class = Arith_Const; 01444 01445 if (data_attr != NULL_IDX && 01446 stack_data_constant && 01447 (TYP_TYPE(CN_TYPE_IDX(ir_idx)) == Integer || 01448 TYP_TYPE(CN_TYPE_IDX(ir_idx)) == Real || 01449 TYP_TYPE(CN_TYPE_IDX(ir_idx)) == Complex) && 01450 TYP_LINEAR(ATD_TYPE_IDX(data_attr)) != CRI_Ptr_8 && 01451 TYP_LINEAR(ATD_TYPE_IDX(data_attr)) != CRI_Ch_Ptr_8 && 01452 TYP_LINEAR(ATD_TYPE_IDX(data_attr)) != 01453 TYP_LINEAR(CN_TYPE_IDX(ir_idx))) { 01454 /* PDGCS does not like it if the value is not the same size as the */ 01455 /* target; for example, the value is a double precision constant and */ 01456 /* the target is a single precision variable. So explicitly convert */ 01457 /* the value to the type and kind type parameter of the target for */ 01458 /* all combinations to be consistent. */ 01459 01460 type_idx = ATD_TYPE_IDX(data_attr); 01461 line = 1; col = 1; 01462 if (folder_driver( (char *) &CN_CONST(ir_idx), 01463 CN_TYPE_IDX(ir_idx), 01464 NULL, 01465 NULL_IDX, 01466 loc_value, 01467 &type_idx, 01468 line, 01469 col, 01470 1, 01471 Cvrt_Opr)) 01472 ir_idx = ntr_const_tbl(type_idx, 01473 FALSE, 01474 loc_value); 01475 } 01476 01477 01478 switch (TYP_TYPE(CN_TYPE_IDX(ir_idx))) { 01479 case Character : 01480 bit_length = CN_INT_TO_C(TYP_IDX(CN_TYPE_IDX(ir_idx))); 01481 01482 if (stack_data_constant && 01483 data_character_bit_length != 0 && 01484 IL_FLD(data_character_bit_length) == CN_Tbl_Idx) { 01485 bit_length = CN_INT_TO_C(IL_IDX(data_character_bit_length)); 01486 PDG_CN_IDX(ir_idx) = 0; 01487 } 01488 01489 constant_class = Pattern_Const; 01490 bit_length = bit_length * CHAR_BIT; 01491 data_character_bit_length = 0; 01492 break; 01493 01494 case Typeless : 01495 bit_length = TYP_BIT_LEN(CN_TYPE_IDX(ir_idx)); 01496 constant_class = Pattern_Const; 01497 01498 /* 01499 If the length of the typeless constant is TBPW, 01500 make the constant an arithmetic constant. 01501 */ 01502 if (/* bit_length == TARGET_BITS_PER_WORD || */ 01503 TYP_LINEAR(CN_TYPE_IDX(ir_idx)) == Typeless_4 || 01504 TYP_LINEAR(CN_TYPE_IDX(ir_idx)) == Typeless_8) { 01505 constant_class = Arith_Const; 01506 } 01507 break; 01508 } 01509 01510 /* 01511 If the constant has never been created; or, we have exceeded the 01512 size of the link table, we want to call fei_constant. 01513 fei_constant will create a new constant and stack it on the 01514 expression stack. A call to fei_push_arith_con or fei_push_pattern_con 01515 assumes that the constant was already created and we can just stack 01516 the saved index for that particular constant. 01517 */ 01518 01519 if (PDG_CN_IDX(ir_idx) == 0 || ir_idx >= pdg_link_tbl_size) { 01520 basic = get_basic_type(CN_TYPE_IDX(ir_idx), 0, NULL_IDX); 01521 01522 01523 if (symbolic_constant_expr) { 01524 PDG_DBG_PRINT_START 01525 PDG_DBG_PRINT_C("fei_arith_con"); 01526 PDG_DBG_PRINT_T("(1) type", basic); 01527 #if defined(_HOST32) && defined(_TARGET64) 01528 PDG_DBG_PRINT_VD("(2) const", CN_CONST(ir_idx)); 01529 #else 01530 PDG_DBG_PRINT_LVD("(2) const", CN_CONST(ir_idx)); 01531 #endif 01532 PDG_DBG_PRINT_END 01533 01534 # ifdef _ENABLE_FEI 01535 PDG_CN_IDX(ir_idx) = fei_arith_con(basic, 01536 (long *)&CN_CONST(ir_idx)); 01537 # endif 01538 PDG_DBG_PRINT_START 01539 PDG_DBG_PRINT_LD("(r) PDG_CN_IDX", PDG_CN_IDX(ir_idx)); 01540 PDG_DBG_PRINT_END 01541 01542 PDG_DBG_PRINT_START 01543 PDG_DBG_PRINT_C("npex_constant"); 01544 PDG_DBG_PRINT_LD("(1) PDG_CN_IDX", PDG_CN_IDX(ir_idx)); 01545 PDG_DBG_PRINT_END 01546 01547 # ifdef _ENABLE_FEI 01548 npex_constant(PDG_CN_IDX(ir_idx)); 01549 # endif 01550 } 01551 else { 01552 PDG_DBG_PRINT_START 01553 PDG_DBG_PRINT_C("fei_constant"); 01554 PDG_DBG_PRINT_T("(1) type", basic); 01555 #if defined(_HOST32) && defined(_TARGET64) 01556 PDG_DBG_PRINT_S("(2) class", p_const_class[constant_class]); 01557 PDG_DBG_PRINT_VD("(3) const", CN_CONST(ir_idx)); 01558 PDG_DBG_PRINT_VD("(4) bit length", bit_length); 01559 #else 01560 PDG_DBG_PRINT_S("(2) class", p_const_class[constant_class]); 01561 PDG_DBG_PRINT_LVD("(3) const", CN_CONST(ir_idx)); 01562 PDG_DBG_PRINT_LLD("(4) bit length", bit_length); 01563 #endif 01564 PDG_DBG_PRINT_END 01565 01566 # ifdef _ENABLE_FEI 01567 01568 # if defined(_TARGET_SV2) 01569 if (constant_class == Arith_Const) { 01570 if (TYP_LINEAR(CN_TYPE_IDX(ir_idx)) == Complex_4 || 01571 TYP_LINEAR(CN_TYPE_IDX(ir_idx)) == Integer_8 || 01572 TYP_LINEAR(CN_TYPE_IDX(ir_idx)) == Real_8) { 01573 /* pack the constant up into one 64 bit word */ 01574 arith_constant[0] = CN_CONST(ir_idx); 01575 arith_constant[0] = arith_constant[0] << 32; 01576 arith_constant[0] |= CP_CONSTANT(CN_POOL_IDX(ir_idx) + 1); 01577 } 01578 else if (TYP_LINEAR(CN_TYPE_IDX(ir_idx)) == Complex_8 || 01579 TYP_LINEAR(CN_TYPE_IDX(ir_idx)) == Real_16) { 01580 /* pack the constant up into two 64 bit words */ 01581 arith_constant[0] = CN_CONST(ir_idx); 01582 arith_constant[0] = arith_constant[0] << 32; 01583 arith_constant[0] |= CP_CONSTANT(CN_POOL_IDX(ir_idx) + 1); 01584 arith_constant[1] = CP_CONSTANT(CN_POOL_IDX(ir_idx) + 2); 01585 arith_constant[1] = arith_constant[1] << 32; 01586 arith_constant[1] |= CP_CONSTANT(CN_POOL_IDX(ir_idx) + 3); 01587 } 01588 else if (TYP_LINEAR(CN_TYPE_IDX(ir_idx)) == Complex_16) { 01589 /* pack the constant up into four 64 bit words */ 01590 arith_constant[0] = CN_CONST(ir_idx); 01591 arith_constant[0] = arith_constant[0] << 32; 01592 arith_constant[0] |= CP_CONSTANT(CN_POOL_IDX(ir_idx) + 1); 01593 arith_constant[1] = CP_CONSTANT(CN_POOL_IDX(ir_idx) + 2); 01594 arith_constant[1] = arith_constant[1] << 32; 01595 arith_constant[1] |= CP_CONSTANT(CN_POOL_IDX(ir_idx) + 3); 01596 arith_constant[2] = CP_CONSTANT(CN_POOL_IDX(ir_idx) + 4); 01597 arith_constant[2] = arith_constant[2] << 32; 01598 arith_constant[2] |= CP_CONSTANT(CN_POOL_IDX(ir_idx) + 5); 01599 arith_constant[3] = CP_CONSTANT(CN_POOL_IDX(ir_idx) + 6); 01600 arith_constant[3] = arith_constant[3] << 32; 01601 arith_constant[3] |= CP_CONSTANT(CN_POOL_IDX(ir_idx) + 7); 01602 } 01603 else { 01604 arith_constant[0] = CN_CONST(ir_idx); 01605 } 01606 01607 pdg_cn_idx = fei_constant(basic, 01608 constant_class, 01609 (char *) &arith_constant, 01610 bit_length); 01611 } 01612 else { /* Pattern_Const */ 01613 pdg_cn_idx = fei_constant(basic, 01614 constant_class, 01615 (char *) &CN_CONST(ir_idx), 01616 bit_length); 01617 } 01618 01619 # elif defined(_TARGET_OS_MAX) /* JEFFL */ 01620 if (TYP_LINEAR(CN_TYPE_IDX(ir_idx)) == Complex_4) { 01621 /* pack the complex constant up into one word */ 01622 i = CN_CONST(ir_idx) << 32; 01623 i |= CP_CONSTANT(CN_POOL_IDX(ir_idx) + 1); 01624 pdg_cn_idx = fei_constant(basic, 01625 constant_class, 01626 (char *) &i, 01627 bit_length); 01628 } 01629 else { 01630 pdg_cn_idx = fei_constant(basic, 01631 constant_class, 01632 (char *) &CN_CONST(ir_idx), 01633 bit_length); 01634 } 01635 # else 01636 pdg_cn_idx = fei_constant(basic, 01637 constant_class, 01638 (char *) &CN_CONST(ir_idx), 01639 bit_length); 01640 # endif 01641 01642 # endif 01643 PDG_DBG_PRINT_START 01644 PDG_DBG_PRINT_LD("(r) PDG_CN_IDX", pdg_cn_idx); 01645 PDG_DBG_PRINT_END 01646 01647 if (ir_idx < pdg_link_tbl_size) { 01648 PDG_CN_IDX(ir_idx) = pdg_cn_idx; 01649 } 01650 } 01651 } 01652 else { 01653 if (constant_class == Pattern_Const) { 01654 PDG_DBG_PRINT_START 01655 PDG_DBG_PRINT_C("fei_push_pattern_con"); 01656 PDG_DBG_PRINT_LD("(1) PDG_CN_IDX", PDG_CN_IDX(ir_idx)); 01657 PDG_DBG_PRINT_END 01658 01659 # ifdef _ENABLE_FEI 01660 fei_push_pattern_con(PDG_CN_IDX(ir_idx)); 01661 # endif 01662 } 01663 else if (symbolic_constant_expr) { 01664 PDG_DBG_PRINT_START 01665 PDG_DBG_PRINT_C("npex_constant"); 01666 PDG_DBG_PRINT_LD("(1) PDG_CN_IDX", PDG_CN_IDX(ir_idx)); 01667 PDG_DBG_PRINT_END 01668 01669 # ifdef _ENABLE_FEI 01670 npex_constant(PDG_CN_IDX(ir_idx)); 01671 # endif 01672 } 01673 else { 01674 PDG_DBG_PRINT_START 01675 PDG_DBG_PRINT_C("fei_push_arith_con"); 01676 PDG_DBG_PRINT_LD("(1) PDG_CN_IDX", PDG_CN_IDX(ir_idx)); 01677 PDG_DBG_PRINT_END 01678 01679 # ifdef _ENABLE_FEI 01680 fei_push_arith_con(PDG_CN_IDX(ir_idx)); 01681 # endif 01682 } 01683 } 01684 break; 01685 01686 01687 case IL_Tbl_Idx : 01688 01689 while (ir_idx != NULL_IDX){ 01690 int keep_user_call; 01691 keep_user_call = user_call; 01692 #ifdef SOURCE_TO_SOURCE 01693 if (user_call) { 01694 if (IL_FLD(ir_idx) == IR_Tbl_Idx && 01695 IR_OPR(IL_IDX(ir_idx))==Kwd_Opr) { 01696 ; 01697 } 01698 else { 01699 fei_null_expr(); 01700 } 01701 } 01702 #endif 01703 user_call = 0 ; 01704 cvrt_exp_to_pdg(IL_IDX(ir_idx), 01705 IL_FLD(ir_idx)); 01706 user_call = keep_user_call; 01707 01708 if (processing_call) 01709 fei_arg_associate(IL_ARG_MULTI_FLAGS(ir_idx)); 01710 01711 ir_idx = IL_NEXT_LIST_IDX(ir_idx); 01712 } 01713 01714 break; 01715 01716 01717 case AT_Tbl_Idx : 01718 send_attr_ntry(ir_idx); 01719 01720 # if defined(_TARGET_OS_MAX) 01721 01722 if (AT_OBJ_CLASS(ir_idx) == Data_Obj && ATD_SYMBOLIC_CONSTANT(ir_idx)) { 01723 01724 if (ATD_CLASS(ir_idx) == Variable) { /* N$PEs */ 01725 01726 if (symbolic_constant_expr) { 01727 PDG_DBG_PRINT_START 01728 PDG_DBG_PRINT_C("npex_npes"); 01729 PDG_DBG_PRINT_END 01730 01731 # ifdef _ENABLE_FEI 01732 npex_npes(); 01733 # endif 01734 } 01735 else { 01736 PDG_DBG_PRINT_START 01737 PDG_DBG_PRINT_C("fei_n_pes"); 01738 PDG_DBG_PRINT_END 01739 01740 # ifdef _ENABLE_FEI 01741 fei_n_pes(); 01742 # endif 01743 } 01744 } 01745 else { 01746 01747 if (symbolic_constant_expr) { 01748 PDG_DBG_PRINT_START 01749 PDG_DBG_PRINT_C("npex_push"); 01750 PDG_DBG_PRINT_D("(1) PDG_AT_IDX", PDG_AT_IDX(ir_idx)); 01751 PDG_DBG_PRINT_END 01752 01753 # ifdef _ENABLE_FEI 01754 npex_push(PDG_AT_IDX(ir_idx)); 01755 # endif 01756 } 01757 else { 01758 PDG_DBG_PRINT_START 01759 PDG_DBG_PRINT_C("npex_to_expr"); 01760 PDG_DBG_PRINT_D("PDG_AT_IDX", PDG_AT_IDX(ir_idx)); 01761 PDG_DBG_PRINT_END 01762 01763 # ifdef _ENABLE_FEI 01764 npex_to_expr(PDG_AT_IDX(ir_idx)); 01765 # endif 01766 } 01767 } 01768 break; 01769 } 01770 # endif 01771 01772 01773 if (AT_OBJ_CLASS(ir_idx) == Data_Obj) { 01774 if (ATD_CLASS(ir_idx) == Compiler_Tmp && 01775 ATD_TMP_INIT_NOT_DONE(ir_idx)) { 01776 insert_init_stmt_for_tmp(ir_idx); 01777 } 01778 01779 if (data_attr == NULL_IDX) { 01780 data_attr = ir_idx; 01781 } 01782 01783 if (stack_data_object && member) { 01784 PDG_DBG_PRINT_START 01785 PDG_DBG_PRINT_C("fei_static_member"); 01786 PDG_DBG_PRINT_S("AT_OBJ_NAME", AT_OBJ_NAME_PTR(ir_idx)); 01787 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", PDG_AT_IDX(ir_idx)); 01788 PDG_DBG_PRINT_END 01789 01790 # ifdef _ENABLE_FEI 01791 fei_static_member(PDG_AT_IDX(ir_idx)); 01792 # endif 01793 } 01794 else if (stack_data_object) { 01795 PDG_DBG_PRINT_START 01796 PDG_DBG_PRINT_C("fei_static_base"); 01797 PDG_DBG_PRINT_S("AT_OBJ_NAME", AT_OBJ_NAME_PTR(ir_idx)); 01798 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", PDG_AT_IDX(ir_idx)); 01799 PDG_DBG_PRINT_END 01800 01801 # ifdef _ENABLE_FEI 01802 fei_static_base(PDG_AT_IDX(ir_idx)); 01803 # endif 01804 } 01805 else if (member) { 01806 PDG_DBG_PRINT_START 01807 PDG_DBG_PRINT_C("fei_member_ref"); 01808 PDG_DBG_PRINT_S("AT_OBJ_NAME", AT_OBJ_NAME_PTR(ir_idx)); 01809 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", PDG_AT_IDX(ir_idx)); 01810 PDG_DBG_PRINT_END 01811 01812 # ifdef _ENABLE_FEI 01813 fei_member_ref(PDG_AT_IDX(ir_idx)); 01814 # endif 01815 } 01816 else { 01817 PDG_DBG_PRINT_START 01818 PDG_DBG_PRINT_C("fei_object_ref"); 01819 PDG_DBG_PRINT_S("AT_OBJ_NAME", AT_OBJ_NAME_PTR(ir_idx)); 01820 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", PDG_AT_IDX(ir_idx)); 01821 PDG_DBG_PRINT_D("(2) whole_subscript", whole_subscript); 01822 PDG_DBG_PRINT_D("(3) whole_substring", whole_substring); 01823 PDG_DBG_PRINT_END 01824 01825 # ifdef _ENABLE_FEI 01826 fei_object_ref(PDG_AT_IDX(ir_idx), 01827 whole_subscript, 01828 whole_substring); 01829 # endif 01830 } 01831 } 01832 else if (AT_OBJ_CLASS(ir_idx) == Namelist_Grp) { 01833 PDG_DBG_PRINT_START 01834 PDG_DBG_PRINT_C("fei_namelist_ref"); 01835 PDG_DBG_PRINT_S("AT_OBJ_NAME", AT_OBJ_NAME_PTR(ir_idx)); 01836 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", PDG_AT_IDX(ir_idx)); 01837 PDG_DBG_PRINT_END 01838 01839 # ifdef _ENABLE_FEI 01840 fei_namelist_ref(PDG_AT_IDX(ir_idx)); 01841 # endif 01842 } 01843 else if (AT_OBJ_CLASS(ir_idx) == Pgm_Unit && 01844 ATP_PROC(ir_idx) == Dummy_Proc) { 01845 PDG_DBG_PRINT_START 01846 PDG_DBG_PRINT_C("fei_object_ref"); 01847 PDG_DBG_PRINT_S("AT_OBJ_NAME", AT_OBJ_NAME_PTR(ir_idx)); 01848 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", PDG_AT_IDX(ir_idx)); 01849 PDG_DBG_PRINT_D("(2) whole_subscript", whole_subscript); 01850 PDG_DBG_PRINT_D("(3) whole_substring", whole_substring); 01851 PDG_DBG_PRINT_END 01852 01853 # ifdef _ENABLE_FEI 01854 fei_object_ref(PDG_AT_IDX(ir_idx), 01855 whole_subscript, 01856 whole_substring); 01857 # endif 01858 } 01859 else if (AT_OBJ_CLASS(ir_idx) == Pgm_Unit) { 01860 PDG_DBG_PRINT_START 01861 PDG_DBG_PRINT_C("fei_function_ref"); 01862 PDG_DBG_PRINT_S("AT_OBJ_NAME", AT_OBJ_NAME_PTR(ir_idx)); 01863 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", PDG_AT_IDX(ir_idx)); 01864 PDG_DBG_PRINT_END 01865 01866 # ifdef _ENABLE_FEI 01867 fei_function_ref(PDG_AT_IDX(ir_idx)); 01868 # endif 01869 } 01870 else if (AT_OBJ_CLASS(ir_idx) == Label) { 01871 PDG_DBG_PRINT_START 01872 PDG_DBG_PRINT_C("fei_label_ref"); 01873 PDG_DBG_PRINT_S("AT_OBJ_NAME", AT_OBJ_NAME_PTR(ir_idx)); 01874 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", PDG_AT_IDX(ir_idx)); 01875 PDG_DBG_PRINT_END 01876 01877 # ifdef _ENABLE_FEI 01878 fei_label_ref(PDG_AT_IDX(ir_idx)); 01879 # endif 01880 } 01881 01882 break; 01883 01884 01885 01886 case IR_Tbl_Idx : 01887 01888 # if 0 01889 # ifdef _DEBUG 01890 if (IR_TYPE_IDX(ir_idx) == NULL_IDX) { 01891 print_ir(ir_idx); 01892 PRINTMSG(IR_LINE_NUM(ir_idx), 993, Internal, 01893 IR_COL_NUM(ir_idx)); 01894 } 01895 01896 if (IR_LINE_NUM(ir_idx) <= 0) { 01897 print_ir(ir_idx); 01898 PRINTMSG(1, 1150, Internal, IR_COL_NUM(ir_idx)); 01899 } 01900 01901 if ((IR_FLD_L(ir_idx) == AT_Tbl_Idx || 01902 IR_FLD_L(ir_idx) == CN_Tbl_Idx) && 01903 IR_LINE_NUM_L(ir_idx) <= 0) { 01904 print_ir(ir_idx); 01905 PRINTMSG(1, 1150, Internal, IR_COL_NUM(ir_idx)); 01906 } 01907 01908 if ((IR_FLD_R(ir_idx) == AT_Tbl_Idx || 01909 IR_FLD_R(ir_idx) == CN_Tbl_Idx) && 01910 IR_LINE_NUM_R(ir_idx) <= 0) { 01911 01912 print_ir(ir_idx); 01913 PRINTMSG(1, 1150, Internal, IR_COL_NUM(ir_idx)); 01914 } 01915 01916 if (IR_FLD_L(ir_idx) == IL_Tbl_Idx) { 01917 list_idx1 = IR_IDX_L(ir_idx); 01918 01919 while (list_idx1) { 01920 if ((IL_FLD(list_idx1) == AT_Tbl_Idx || 01921 IL_FLD(list_idx1) == CN_Tbl_Idx) && 01922 IL_LINE_NUM(list_idx1) <= 0) { 01923 01924 print_ir(ir_idx); 01925 PRINTMSG(1, 1150, Internal, IR_COL_NUM(ir_idx)); 01926 } 01927 list_idx1 = IL_NEXT_LIST_IDX(list_idx1); 01928 } 01929 } 01930 01931 if (IR_FLD_R(ir_idx) == IL_Tbl_Idx) { 01932 list_idx1 = IR_IDX_R(ir_idx); 01933 01934 while (list_idx1) { 01935 if ((IL_FLD(list_idx1) == AT_Tbl_Idx || 01936 IL_FLD(list_idx1) == CN_Tbl_Idx) && 01937 IL_LINE_NUM(list_idx1) <= 0) { 01938 01939 print_ir(ir_idx); 01940 PRINTMSG(1, 1150, Internal, IR_COL_NUM(ir_idx)); 01941 } 01942 list_idx1 = IL_NEXT_LIST_IDX(list_idx1); 01943 } 01944 } 01945 # endif 01946 01947 # endif 01948 switch (IR_OPR(ir_idx)) { 01949 01950 case Stmt_Expansion_Opr: 01951 # ifdef _DEBUG 01952 PRINTMSG(IR_LINE_NUM(ir_idx), 626, Internal, IR_COL_NUM(ir_idx), 01953 "no Stmt_Expansion_Opr", "cvrt_exp_to_pdg"); 01954 # endif 01955 /* send the left opnd anyway */ 01956 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 01957 IR_FLD_L(ir_idx)); 01958 break; 01959 01960 case Case_Range_Opr : 01961 if (IR_IDX_L(ir_idx) == NULL_IDX) { 01962 low_range_present = FALSE; 01963 } 01964 else { 01965 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 01966 IR_FLD_L(ir_idx)); 01967 low_range_present = TRUE; 01968 } 01969 01970 if (IR_IDX_R(ir_idx) == NULL_IDX) { 01971 high_range_present = FALSE; 01972 } 01973 else { 01974 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 01975 IR_FLD_R(ir_idx)); 01976 high_range_present = TRUE; 01977 } 01978 break; 01979 01980 01981 01982 01983 case Case_Opr : 01984 if (IR_IDX_L(ir_idx) != NULL_IDX) { 01985 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 01986 IR_FLD_L(ir_idx)); 01987 01988 big_int = CN_INT_TO_C(IR_IDX_R(ir_idx)); 01989 01990 PDG_DBG_PRINT_START 01991 PDG_DBG_PRINT_C("fei_new_select_case"); 01992 PDG_DBG_PRINT_S("(1) low_range", p_boolean[low_range_present]); 01993 PDG_DBG_PRINT_S("(2) high_range", p_boolean[high_range_present]); 01994 #if defined(_HOST32) && defined(_TARGET64) 01995 PDG_DBG_PRINT_D("(3) const", big_int); 01996 #else 01997 PDG_DBG_PRINT_VD("(3) const", big_int); 01998 #endif 01999 PDG_DBG_PRINT_END 02000 02001 02002 # ifdef _ENABLE_FEI 02003 fei_new_select_case(low_range_present, 02004 high_range_present, 02005 big_int); 02006 # endif 02007 low_range_present = FALSE; 02008 high_range_present = FALSE; 02009 } 02010 break; 02011 02012 02013 02014 02015 02016 case Select_Opr : 02017 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02018 IR_FLD_L(ir_idx)); 02019 02020 list_idx1 = IR_IDX_R(ir_idx); /* num cases */ 02021 list_idx2 = IL_NEXT_LIST_IDX(list_idx1); /* branch around label */ 02022 list_idx3 = IL_NEXT_LIST_IDX(list_idx2); /* default label */ 02023 02024 if (IR_LIST_CNT_R(ir_idx) == 2) { 02025 list_idx3 = list_idx2; 02026 } 02027 02028 send_attr_ntry(IL_IDX(list_idx3)); 02029 big_int = CN_INT_TO_C(IL_IDX(list_idx1)); 02030 02031 02032 PDG_DBG_PRINT_START 02033 PDG_DBG_PRINT_C("fei_new_select"); 02034 #if defined(_HOST32) && defined(_TARGET64) 02035 PDG_DBG_PRINT_D("(1) num cases", big_int); 02036 #else 02037 PDG_DBG_PRINT_VD("(1) num cases", big_int); 02038 #endif 02039 PDG_DBG_PRINT_LD("(2) default label", PDG_AT_IDX(IL_IDX(list_idx3))); 02040 PDG_DBG_PRINT_LD("(3) br around lbl", PDG_AT_IDX(IL_IDX(list_idx2))); 02041 PDG_DBG_PRINT_END 02042 02043 # ifdef _ENABLE_FEI 02044 fei_new_select(big_int, 02045 PDG_AT_IDX(IL_IDX(list_idx3)), 02046 PDG_AT_IDX(IL_IDX(list_idx2))); 02047 # endif 02048 break; 02049 02050 02051 02052 case Ptr_Asg_Opr : 02053 if ((IR_FLD_L(ir_idx) == AT_Tbl_Idx) && 02054 (AT_OBJ_CLASS(IR_IDX_L(ir_idx)) == Label)) { 02055 02056 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 02057 IR_FLD_R(ir_idx)); 02058 02059 PDG_DBG_PRINT_START 02060 PDG_DBG_PRINT_C("fei_label_addr"); 02061 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", PDG_AT_IDX(IR_IDX_L(ir_idx))); 02062 PDG_DBG_PRINT_END 02063 02064 # ifdef _ENABLE_FEI 02065 fei_label_addr(PDG_AT_IDX(IR_IDX_L(ir_idx))); 02066 # endif 02067 } 02068 else { 02069 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02070 IR_FLD_L(ir_idx)); 02071 02072 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 02073 IR_FLD_R(ir_idx)); 02074 } 02075 02076 PDG_DBG_PRINT_START 02077 PDG_DBG_PRINT_C("fei_pstore"); 02078 PDG_DBG_PRINT_END 02079 02080 # ifdef _ENABLE_FEI 02081 fei_pstore(pdg_type_void); 02082 # endif 02083 break; 02084 02085 02086 02087 #if 0 02088 case Ptr_Asg_Opr : 02089 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02090 IR_FLD_L(ir_idx)); 02091 02092 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 02093 IR_FLD_R(ir_idx)); 02094 02095 PDG_DBG_PRINT_START 02096 PDG_DBG_PRINT_C("fei_dv_ptr_asg"); 02097 PDG_DBG_PRINT_END 02098 02099 # ifdef _ENABLE_FEI 02100 fei_dv_ptr_asg(); 02101 # endif 02102 break; 02103 #endif 02104 02105 02106 case Array_Construct_Opr: 02107 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 02108 IR_FLD_R(ir_idx)); 02109 02110 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0,NULL_IDX); 02111 02112 PDG_DBG_PRINT_START 02113 PDG_DBG_PRINT_C("fei_array_construct"); 02114 PDG_DBG_PRINT_END 02115 02116 # ifdef _ENABLE_FEI 02117 fei_array_construct(IR_LIST_CNT_R(ir_idx),basic); 02118 #endif 02119 break; 02120 02121 02122 case Length_Opr : 02123 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02124 IR_FLD_L(ir_idx)); 02125 02126 PDG_DBG_PRINT_START 02127 PDG_DBG_PRINT_C("fei_length"); 02128 PDG_DBG_PRINT_END 02129 02130 # ifdef _ENABLE_FEI 02131 fei_length(); 02132 # endif 02133 break; 02134 02135 02136 02137 02138 case Getpos_Opr : 02139 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02140 IR_FLD_L(ir_idx)); 02141 02142 PDG_DBG_PRINT_START 02143 PDG_DBG_PRINT_C("fei_getpos"); 02144 PDG_DBG_PRINT_END 02145 02146 # ifdef _ENABLE_FEI 02147 fei_getpos(); 02148 # endif 02149 break; 02150 02151 02152 02153 case Unit_Opr : 02154 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02155 IR_FLD_L(ir_idx)); 02156 02157 PDG_DBG_PRINT_START 02158 PDG_DBG_PRINT_C("fei_unit"); 02159 PDG_DBG_PRINT_END 02160 02161 # ifdef _ENABLE_FEI 02162 fei_unit(); 02163 # endif 02164 break; 02165 02166 02167 02168 02169 02170 02171 case Index_Opr : 02172 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02173 IR_FLD_L(ir_idx)); 02174 02175 PDG_DBG_PRINT_START 02176 PDG_DBG_PRINT_C("fei_index"); 02177 PDG_DBG_PRINT_END 02178 02179 # ifdef _ENABLE_FEI 02180 fei_index(); 02181 # endif 02182 break; 02183 02184 02185 02186 02187 case Cmplx_Opr : 02188 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02189 IR_FLD_L(ir_idx)); 02190 02191 basic = get_basic_type(IR_TYPE_IDX(ir_idx), 0, NULL_IDX); 02192 02193 PDG_DBG_PRINT_START 02194 PDG_DBG_PRINT_C("fei_complex"); 02195 PDG_DBG_PRINT_END 02196 02197 # ifdef _ENABLE_FEI 02198 fei_complex(basic); 02199 # endif 02200 break; 02201 02202 02203 02204 02205 case Concat_Opr : 02206 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02207 IR_FLD_L(ir_idx)); 02208 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02209 02210 PDG_DBG_PRINT_START 02211 PDG_DBG_PRINT_C("fei_concat"); 02212 PDG_DBG_PRINT_D("(1) num ops", IR_LIST_CNT_L(ir_idx)); 02213 PDG_DBG_PRINT_END 02214 02215 # ifdef _ENABLE_FEI 02216 fei_concat(IR_LIST_CNT_L(ir_idx)); 02217 # endif 02218 break; 02219 02220 02221 02222 02223 02224 02225 02226 case Lock_Release_Opr : 02227 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02228 IR_FLD_L(ir_idx)); 02229 02230 PDG_DBG_PRINT_START 02231 PDG_DBG_PRINT_C("fei_lock_release"); 02232 PDG_DBG_PRINT_END 02233 02234 # if defined(GENERATE_WHIRL) 02235 # ifdef _ENABLE_FEI 02236 fei_lock_release(); 02237 # endif 02238 # endif 02239 02240 break; 02241 02242 02243 02244 02245 case Omp_Test_Lock_Opr : 02246 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02247 IR_FLD_L(ir_idx)); 02248 02249 PDG_DBG_PRINT_START 02250 PDG_DBG_PRINT_C("fei_omp_test_lock"); 02251 PDG_DBG_PRINT_END 02252 02253 # ifdef _ENABLE_FEI 02254 fei_omp_test_lock(); 02255 # endif 02256 break; 02257 02258 02259 02260 02261 case Omp_Set_Lock_Opr : 02262 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02263 IR_FLD_L(ir_idx)); 02264 02265 PDG_DBG_PRINT_START 02266 PDG_DBG_PRINT_C("fei_omp_set_lock"); 02267 PDG_DBG_PRINT_END 02268 02269 # ifdef _ENABLE_FEI 02270 fei_omp_set_lock(); 02271 # endif 02272 break; 02273 02274 02275 02276 02277 02278 case Omp_Unset_Lock_Opr : 02279 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02280 IR_FLD_L(ir_idx)); 02281 02282 PDG_DBG_PRINT_START 02283 PDG_DBG_PRINT_C("fei_omp_unset_lock"); 02284 PDG_DBG_PRINT_END 02285 02286 # ifdef _ENABLE_FEI 02287 fei_omp_unset_lock(); 02288 # endif 02289 break; 02290 02291 02292 02293 02294 02295 02296 case Synchronize_Opr : 02297 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02298 IR_FLD_L(ir_idx)); 02299 02300 PDG_DBG_PRINT_START 02301 PDG_DBG_PRINT_C("fei_synchronize"); 02302 PDG_DBG_PRINT_END 02303 02304 # if defined(GENERATE_WHIRL) 02305 # ifdef _ENABLE_FEI 02306 fei_synchronize(); 02307 # endif 02308 # endif 02309 02310 break; 02311 02312 02313 02314 02315 case Compare_And_Swap_Opr : 02316 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02317 IR_FLD_L(ir_idx)); 02318 02319 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02320 02321 PDG_DBG_PRINT_START 02322 PDG_DBG_PRINT_C("fei_compare_and_swap"); 02323 PDG_DBG_PRINT_END 02324 02325 # if defined(GENERATE_WHIRL) 02326 # ifdef _ENABLE_FEI 02327 fei_compare_and_swap(basic); 02328 # endif 02329 # endif 02330 02331 break; 02332 02333 02334 02335 02336 case Lock_Test_And_Set_Opr : 02337 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02338 IR_FLD_L(ir_idx)); 02339 02340 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02341 02342 PDG_DBG_PRINT_START 02343 PDG_DBG_PRINT_C("fei_lock_test_and_set"); 02344 PDG_DBG_PRINT_END 02345 02346 # if defined(GENERATE_WHIRL) 02347 # ifdef _ENABLE_FEI 02348 fei_lock_test_and_set(basic); 02349 # endif 02350 # endif 02351 02352 break; 02353 02354 02355 02356 02357 02358 case Fetch_And_Add_Opr : 02359 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02360 IR_FLD_L(ir_idx)); 02361 02362 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02363 02364 PDG_DBG_PRINT_START 02365 PDG_DBG_PRINT_C("fei_fetch_and_add"); 02366 PDG_DBG_PRINT_END 02367 02368 # if defined(GENERATE_WHIRL) 02369 # ifdef _ENABLE_FEI 02370 fei_fetch_and_add(basic); 02371 # endif 02372 # endif 02373 02374 break; 02375 02376 02377 02378 02379 case Add_And_Fetch_Opr : 02380 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02381 IR_FLD_L(ir_idx)); 02382 02383 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02384 02385 PDG_DBG_PRINT_START 02386 PDG_DBG_PRINT_C("fei_add_and_fetch"); 02387 PDG_DBG_PRINT_END 02388 02389 # if defined(GENERATE_WHIRL) 02390 # ifdef _ENABLE_FEI 02391 fei_add_and_fetch(basic); 02392 # endif 02393 # endif 02394 02395 break; 02396 02397 02398 02399 02400 02401 case Fetch_And_And_Opr : 02402 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02403 IR_FLD_L(ir_idx)); 02404 02405 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02406 02407 PDG_DBG_PRINT_START 02408 PDG_DBG_PRINT_C("fei_fetch_and_and"); 02409 PDG_DBG_PRINT_END 02410 02411 # if defined(GENERATE_WHIRL) 02412 # ifdef _ENABLE_FEI 02413 fei_fetch_and_and(basic); 02414 # endif 02415 # endif 02416 02417 break; 02418 02419 02420 02421 02422 02423 case And_And_Fetch_Opr : 02424 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02425 IR_FLD_L(ir_idx)); 02426 02427 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02428 02429 PDG_DBG_PRINT_START 02430 PDG_DBG_PRINT_C("fei_and_and_fetch"); 02431 PDG_DBG_PRINT_END 02432 02433 # if defined(GENERATE_WHIRL) 02434 # ifdef _ENABLE_FEI 02435 fei_and_and_fetch(basic); 02436 # endif 02437 # endif 02438 02439 break; 02440 02441 02442 02443 02444 02445 case Fetch_And_Nand_Opr : 02446 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02447 IR_FLD_L(ir_idx)); 02448 02449 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02450 02451 PDG_DBG_PRINT_START 02452 PDG_DBG_PRINT_C("fei_fetch_and_nand"); 02453 PDG_DBG_PRINT_END 02454 02455 # if defined(GENERATE_WHIRL) 02456 # ifdef _ENABLE_FEI 02457 fei_fetch_and_nand(basic); 02458 # endif 02459 # endif 02460 02461 break; 02462 02463 02464 02465 02466 02467 case Nand_And_Fetch_Opr : 02468 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02469 IR_FLD_L(ir_idx)); 02470 02471 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02472 02473 PDG_DBG_PRINT_START 02474 PDG_DBG_PRINT_C("fei_nand_and_fetch"); 02475 PDG_DBG_PRINT_END 02476 02477 # if defined(GENERATE_WHIRL) 02478 # ifdef _ENABLE_FEI 02479 fei_nand_and_fetch(basic); 02480 # endif 02481 # endif 02482 02483 break; 02484 02485 02486 02487 02488 02489 02490 case Fetch_And_Or_Opr : 02491 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02492 IR_FLD_L(ir_idx)); 02493 02494 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02495 02496 PDG_DBG_PRINT_START 02497 PDG_DBG_PRINT_C("fei_fetch_and_or"); 02498 PDG_DBG_PRINT_END 02499 02500 # if defined(GENERATE_WHIRL) 02501 # ifdef _ENABLE_FEI 02502 fei_fetch_and_or(basic); 02503 # endif 02504 # endif 02505 02506 break; 02507 02508 02509 02510 02511 case Or_And_Fetch_Opr : 02512 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02513 IR_FLD_L(ir_idx)); 02514 02515 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02516 02517 PDG_DBG_PRINT_START 02518 PDG_DBG_PRINT_C("fei_or_and_fetch"); 02519 PDG_DBG_PRINT_END 02520 02521 # if defined(GENERATE_WHIRL) 02522 # ifdef _ENABLE_FEI 02523 fei_or_and_fetch(basic); 02524 # endif 02525 # endif 02526 02527 break; 02528 02529 02530 02531 02532 case Fetch_And_Sub_Opr : 02533 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02534 IR_FLD_L(ir_idx)); 02535 02536 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02537 02538 PDG_DBG_PRINT_START 02539 PDG_DBG_PRINT_C("fei_fetch_sub_add"); 02540 PDG_DBG_PRINT_END 02541 02542 # if defined(GENERATE_WHIRL) 02543 # ifdef _ENABLE_FEI 02544 fei_fetch_and_sub(basic); 02545 # endif 02546 # endif 02547 02548 break; 02549 02550 02551 02552 02553 case Sub_And_Fetch_Opr : 02554 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02555 IR_FLD_L(ir_idx)); 02556 02557 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02558 02559 PDG_DBG_PRINT_START 02560 PDG_DBG_PRINT_C("fei_sub_and_fetch"); 02561 PDG_DBG_PRINT_END 02562 02563 # if defined(GENERATE_WHIRL) 02564 # ifdef _ENABLE_FEI 02565 fei_sub_and_fetch(basic); 02566 # endif 02567 # endif 02568 02569 break; 02570 02571 02572 02573 02574 02575 02576 case Fetch_And_Xor_Opr : 02577 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02578 IR_FLD_L(ir_idx)); 02579 02580 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02581 02582 PDG_DBG_PRINT_START 02583 PDG_DBG_PRINT_C("fei_fetch_and_xor"); 02584 PDG_DBG_PRINT_END 02585 02586 # if defined(GENERATE_WHIRL) 02587 # ifdef _ENABLE_FEI 02588 fei_fetch_and_xor(basic); 02589 # endif 02590 # endif 02591 02592 break; 02593 02594 02595 02596 02597 case Xor_And_Fetch_Opr : 02598 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02599 IR_FLD_L(ir_idx)); 02600 02601 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02602 02603 PDG_DBG_PRINT_START 02604 PDG_DBG_PRINT_C("fei_xor_and_fetch"); 02605 PDG_DBG_PRINT_END 02606 02607 # if defined(GENERATE_WHIRL) 02608 # ifdef _ENABLE_FEI 02609 fei_xor_and_fetch(basic); 02610 # endif 02611 # endif 02612 02613 break; 02614 02615 02616 02617 02618 02619 02620 02621 02622 case Mmx_Opr : 02623 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02624 IR_FLD_L(ir_idx)); 02625 02626 PDG_DBG_PRINT_START 02627 PDG_DBG_PRINT_C("fei_mbmx"); 02628 PDG_DBG_PRINT_END 02629 02630 # ifdef _ENABLE_FEI 02631 fei_mbmx(); 02632 # endif 02633 02634 break; 02635 02636 02637 02638 02639 02640 02641 case Mldmx_Opr : 02642 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02643 IR_FLD_L(ir_idx)); 02644 02645 PDG_DBG_PRINT_START 02646 PDG_DBG_PRINT_C("fei_mbmxl"); 02647 PDG_DBG_PRINT_END 02648 02649 # ifdef _ENABLE_FEI 02650 fei_mbmxl(); 02651 # endif 02652 02653 break; 02654 02655 02656 02657 02658 02659 02660 02661 case Mld_Opr : 02662 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02663 IR_FLD_L(ir_idx)); 02664 02665 PDG_DBG_PRINT_START 02666 PDG_DBG_PRINT_C("fei_mbld"); 02667 PDG_DBG_PRINT_END 02668 02669 # ifdef _ENABLE_FEI 02670 fei_mbld(); 02671 # endif 02672 02673 break; 02674 02675 02676 02677 02678 02679 02680 02681 case Mul_Opr : 02682 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02683 IR_FLD_L(ir_idx)); 02684 02685 PDG_DBG_PRINT_START 02686 PDG_DBG_PRINT_C("fei_mbul"); 02687 PDG_DBG_PRINT_END 02688 02689 # ifdef _ENABLE_FEI 02690 fei_mbul(); 02691 # endif 02692 break; 02693 02694 02695 02696 02697 02698 02699 case Mcbl_Opr : 02700 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02701 IR_FLD_L(ir_idx)); 02702 02703 PDG_DBG_PRINT_START 02704 PDG_DBG_PRINT_C("fei_mbclr"); 02705 PDG_DBG_PRINT_END 02706 02707 # ifdef _ENABLE_FEI 02708 fei_mbclr(); 02709 # endif 02710 02711 break; 02712 02713 02714 02715 02716 02717 02718 02719 02720 case Real_Div_To_Int_Opr : 02721 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02722 IR_FLD_L(ir_idx)); 02723 02724 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 02725 IR_FLD_R(ir_idx)); 02726 02727 PDG_DBG_PRINT_START 02728 PDG_DBG_PRINT_C("fei_ridiv"); 02729 PDG_DBG_PRINT_END 02730 02731 # ifdef _ENABLE_FEI 02732 fei_ridiv(); 02733 # endif 02734 02735 break; 02736 02737 02738 02739 02740 02741 02742 02743 02744 02745 02746 02747 case Modulo_Opr : 02748 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02749 IR_FLD_L(ir_idx)); 02750 02751 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02752 02753 PDG_DBG_PRINT_START 02754 PDG_DBG_PRINT_C("fei_modulo"); 02755 PDG_DBG_PRINT_END 02756 02757 # ifdef _ENABLE_FEI 02758 fei_modulo(basic); 02759 # endif 02760 02761 break; 02762 02763 02764 02765 02766 02767 02768 02769 02770 case Len_Trim_Opr : 02771 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02772 IR_FLD_L(ir_idx)); 02773 02774 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02775 02776 PDG_DBG_PRINT_START 02777 PDG_DBG_PRINT_C("fei_len_trim"); 02778 PDG_DBG_PRINT_END 02779 02780 # ifdef _ENABLE_FEI 02781 fei_len_trim(); 02782 # endif 02783 02784 break; 02785 02786 02787 02788 02789 02790 02791 02792 case Nearest_Opr : 02793 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02794 IR_FLD_L(ir_idx)); 02795 02796 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02797 02798 PDG_DBG_PRINT_START 02799 PDG_DBG_PRINT_C("fei_near"); 02800 PDG_DBG_PRINT_END 02801 02802 # ifdef _ENABLE_FEI 02803 fei_near(basic); 02804 # endif 02805 02806 break; 02807 02808 02809 02810 02811 02812 02813 case Rrspacing_Opr : 02814 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02815 IR_FLD_L(ir_idx)); 02816 02817 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02818 02819 PDG_DBG_PRINT_START 02820 PDG_DBG_PRINT_C("fei_rrspace"); 02821 PDG_DBG_PRINT_END 02822 02823 # ifdef _ENABLE_FEI 02824 fei_rrspace(basic); 02825 # endif 02826 02827 break; 02828 02829 02830 02831 02832 02833 02834 case Scale_Opr : 02835 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02836 IR_FLD_L(ir_idx)); 02837 02838 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02839 02840 PDG_DBG_PRINT_START 02841 PDG_DBG_PRINT_C("fei_scale"); 02842 PDG_DBG_PRINT_END 02843 02844 # ifdef _ENABLE_FEI 02845 fei_scale(basic); 02846 # endif 02847 02848 break; 02849 02850 02851 02852 02853 02854 02855 case Scan_Opr : 02856 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02857 IR_FLD_L(ir_idx)); 02858 02859 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02860 02861 PDG_DBG_PRINT_START 02862 PDG_DBG_PRINT_C("fei_scan"); 02863 PDG_DBG_PRINT_END 02864 02865 # ifdef _ENABLE_FEI 02866 fei_scan(basic); 02867 # endif 02868 02869 break; 02870 02871 02872 02873 02874 02875 02876 02877 case Set_Exponent_Opr : 02878 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02879 IR_FLD_L(ir_idx)); 02880 02881 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02882 02883 PDG_DBG_PRINT_START 02884 PDG_DBG_PRINT_C("fei_set_exponent"); 02885 PDG_DBG_PRINT_END 02886 02887 # ifdef _ENABLE_FEI 02888 fei_set_exponent(basic); 02889 # endif 02890 02891 break; 02892 02893 02894 02895 02896 02897 02898 02899 case Verify_Opr : 02900 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02901 IR_FLD_L(ir_idx)); 02902 02903 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02904 02905 PDG_DBG_PRINT_START 02906 PDG_DBG_PRINT_C("fei_verify"); 02907 PDG_DBG_PRINT_END 02908 02909 # ifdef _ENABLE_FEI 02910 fei_verify(basic); 02911 # endif 02912 02913 break; 02914 02915 02916 02917 02918 02919 02920 02921 02922 02923 case Spacing_Opr : 02924 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02925 IR_FLD_L(ir_idx)); 02926 02927 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02928 02929 PDG_DBG_PRINT_START 02930 PDG_DBG_PRINT_C("fei_space"); 02931 PDG_DBG_PRINT_END 02932 02933 # ifdef _ENABLE_FEI 02934 fei_space(basic); 02935 # endif 02936 02937 break; 02938 02939 02940 02941 02942 02943 02944 02945 02946 case Ceiling_Opr : 02947 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02948 IR_FLD_L(ir_idx)); 02949 02950 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02951 02952 PDG_DBG_PRINT_START 02953 PDG_DBG_PRINT_C("fei_ceiling"); 02954 PDG_DBG_PRINT_END 02955 02956 # ifdef _ENABLE_FEI 02957 fei_ceiling(basic); 02958 # endif 02959 02960 break; 02961 02962 02963 02964 02965 02966 02967 02968 case Adjustl_Opr : 02969 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02970 IR_FLD_L(ir_idx)); 02971 02972 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02973 02974 PDG_DBG_PRINT_START 02975 PDG_DBG_PRINT_C("fei_adjustl"); 02976 PDG_DBG_PRINT_END 02977 02978 # ifdef _ENABLE_FEI 02979 fei_adjustl(basic); 02980 # endif 02981 02982 break; 02983 02984 02985 02986 02987 02988 case Adjustr_Opr : 02989 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 02990 IR_FLD_L(ir_idx)); 02991 02992 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 02993 02994 PDG_DBG_PRINT_START 02995 PDG_DBG_PRINT_C("fei_adjustr"); 02996 PDG_DBG_PRINT_END 02997 02998 # ifdef _ENABLE_FEI 02999 fei_adjustr(basic); 03000 # endif 03001 03002 break; 03003 03004 03005 03006 03007 03008 03009 case Exponent_Opr : 03010 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 03011 IR_FLD_L(ir_idx)); 03012 03013 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 03014 03015 PDG_DBG_PRINT_START 03016 PDG_DBG_PRINT_C("fei_exponent"); 03017 PDG_DBG_PRINT_END 03018 03019 # ifdef _ENABLE_FEI 03020 fei_exponent(basic); 03021 # endif 03022 03023 break; 03024 03025 03026 03027 03028 03029 case Fraction_Opr : 03030 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 03031 IR_FLD_L(ir_idx)); 03032 03033 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 03034 03035 PDG_DBG_PRINT_START 03036 PDG_DBG_PRINT_C("fei_fraction"); 03037 PDG_DBG_PRINT_END 03038 03039 # ifdef _ENABLE_FEI 03040 fei_fraction(); 03041 # endif 03042 03043 break; 03044 03045 03046 03047 03048 03049 03050 03051 03052 case Cvmgt_Opr : 03053 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 03054 IR_FLD_L(ir_idx)); 03055 03056 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 03057 03058 PDG_DBG_PRINT_START 03059 PDG_DBG_PRINT_C("fei_select"); 03060 PDG_DBG_PRINT_END 03061 03062 # ifdef _ENABLE_FEI 03063 fei_select(basic); 03064 # endif 03065 03066 break; 03067 03068 03069 03070 03071 03072 case Csmg_Opr : 03073 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 03074 IR_FLD_L(ir_idx)); 03075 03076 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 03077 03078 PDG_DBG_PRINT_START 03079 PDG_DBG_PRINT_C("fei_mbits"); 03080 PDG_DBG_PRINT_END 03081 03082 03083 # ifdef _ENABLE_FEI 03084 fei_mbits(basic); 03085 # endif 03086 03087 break; 03088 03089 03090 03091 03092 03093 03094 case Rtc_Opr : 03095 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 03096 03097 PDG_DBG_PRINT_START 03098 PDG_DBG_PRINT_C("fei_rtc"); 03099 PDG_DBG_PRINT_END 03100 03101 # ifdef _ENABLE_FEI 03102 fei_rtc(basic); 03103 # endif 03104 03105 break; 03106 03107 03108 03109 03110 case My_Pe_Opr : 03111 PDG_DBG_PRINT_START 03112 PDG_DBG_PRINT_C("fei_my_pe"); 03113 PDG_DBG_PRINT_END 03114 03115 # ifdef _ENABLE_FEI 03116 fei_my_pe(); 03117 # endif 03118 03119 break; 03120 03121 03122 03123 03124 03125 case Numarg_Opr : 03126 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 03127 IR_FLD_L(ir_idx)); 03128 03129 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 03130 03131 PDG_DBG_PRINT_START 03132 PDG_DBG_PRINT_C("fei_numargs"); 03133 PDG_DBG_PRINT_END 03134 03135 # ifdef _ENABLE_FEI 03136 fei_numargs(basic); 03137 # endif 03138 03139 break; 03140 03141 03142 03143 03144 03145 03146 # ifdef _HIGH_LEVEL_DO_LOOP_FORM 03147 03148 case Loop_Info_Opr : 03149 switch (SH_STMT_TYPE(curr_sh)) { 03150 case Do_Iterative_Stmt : 03151 03152 /* SH for the stmt that ends the loop. */ 03153 03154 line = (IR_FLD_L(ir_idx) == SH_Tbl_Idx) ? 03155 SH_GLB_LINE(IR_IDX_L(ir_idx)) : 0; 03156 03157 if (IL_FLD(IR_IDX_R(ir_idx)) == IL_Tbl_Idx) { 03158 idx = IL_IDX(IR_IDX_R(ir_idx)); 03159 } 03160 else { 03161 idx = IR_IDX_R(ir_idx); 03162 } 03163 cvrt_exp_to_pdg(IL_IDX(idx), /* LCV */ 03164 IL_FLD(idx)); 03165 03166 idx = IL_NEXT_LIST_IDX(idx); 03167 cvrt_exp_to_pdg(IL_IDX(idx), /* stack start */ 03168 IL_FLD(idx)); 03169 03170 idx = IL_NEXT_LIST_IDX(idx); 03171 cvrt_exp_to_pdg(IL_IDX(idx), /* stack end */ 03172 IL_FLD(idx)); 03173 03174 idx = IL_NEXT_LIST_IDX(idx); 03175 cvrt_exp_to_pdg(IL_IDX(idx), /* stack inc */ 03176 IL_FLD(idx)); 03177 03178 03179 PDG_DBG_PRINT_START 03180 PDG_DBG_PRINT_C("fei_doloop"); 03181 PDG_DBG_PRINT_D("(1) line", line); 03182 PDG_DBG_PRINT_END 03183 03184 # ifdef _ENABLE_FEI 03185 fei_doloop(line); 03186 # endif 03187 break; 03188 03189 03190 case Do_While_Stmt : 03191 idx = IR_IDX_R(ir_idx); 03192 cvrt_exp_to_pdg(IL_IDX(idx), /* condition */ 03193 IL_FLD(idx)); 03194 03195 PDG_DBG_PRINT_START 03196 PDG_DBG_PRINT_C("fei_dowhile"); 03197 PDG_DBG_PRINT_END 03198 03199 # ifdef _ENABLE_FEI 03200 fei_dowhile(); 03201 # endif 03202 break; 03203 03204 03205 case Do_Infinite_Stmt : 03206 PDG_DBG_PRINT_START 03207 PDG_DBG_PRINT_C("fei_doforever"); 03208 PDG_DBG_PRINT_END 03209 03210 # ifdef _ENABLE_FEI 03211 fei_doforever(); 03212 # endif 03213 break; 03214 03215 } 03216 break; 03217 03218 03219 03220 03221 case Loop_End_Opr : 03222 PDG_DBG_PRINT_START 03223 PDG_DBG_PRINT_C("fei_enddo"); 03224 PDG_DBG_PRINT_END 03225 03226 # ifdef _ENABLE_FEI 03227 fei_enddo(); 03228 # endif 03229 break; 03230 # endif 03231 03232 03233 03234 03235 03236 # if defined(GENERATE_WHIRL) 03237 case Mvbits_Opr : 03238 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 03239 IR_FLD_L(ir_idx)); 03240 03241 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 03242 IR_FLD_R(ir_idx)); 03243 03244 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 03245 03246 PDG_DBG_PRINT_START 03247 PDG_DBG_PRINT_C("fei_mvbits"); 03248 PDG_DBG_PRINT_END 03249 03250 # ifdef _ENABLE_FEI 03251 fei_mvbits(basic); 03252 # endif 03253 03254 break; 03255 03256 03257 case Ishftc_Opr : 03258 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 03259 IR_FLD_L(ir_idx)); 03260 03261 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 03262 03263 PDG_DBG_PRINT_START 03264 PDG_DBG_PRINT_C("fei_ishftc"); 03265 PDG_DBG_PRINT_END 03266 03267 # ifdef _ENABLE_FEI 03268 fei_ishftc(basic); 03269 # endif 03270 03271 break; 03272 03273 03274 03275 case Ibits_Opr : 03276 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 03277 IR_FLD_L(ir_idx)); 03278 03279 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 03280 03281 PDG_DBG_PRINT_START 03282 PDG_DBG_PRINT_C("fei_ibits"); 03283 PDG_DBG_PRINT_END 03284 03285 # ifdef _ENABLE_FEI 03286 fei_ibits(basic); 03287 # endif 03288 03289 break; 03290 # endif 03291 03292 03293 03294 03295 case Abs_Opr : 03296 case Paren_Opr : 03297 case Const_Tmp_Loc_Opr : 03298 case Loc_Opr : 03299 case Ieee_Finite_Opr : 03300 case Ieee_Is_Nan_Opr : 03301 case Ieee_Class_Opr : 03302 case Uplus_Opr : 03303 case Uminus_Opr : 03304 case Not_Opr : 03305 case Bnot_Opr : 03306 case Floor_Opr : 03307 case Clen_Opr : 03308 case Conjg_Opr : 03309 case Mask_Opr : 03310 case Int_Opr : 03311 case Logical_Opr : 03312 case Real_Opr : 03313 case Ichar_Opr : 03314 case Char_Opr : 03315 case Cvrt_Opr : 03316 case Cvrt_Unsigned_Opr : 03317 case Ranget_Opr : 03318 case Ranset_Opr : 03319 case Dim_Opr : 03320 case Aint_Opr : 03321 case Leadz_Opr : 03322 case Poppar_Opr : 03323 case Popcnt_Opr : 03324 case Nint_Opr : 03325 case Anint_Opr : 03326 case Sign_Opr : 03327 case Cot_Opr : 03328 case Exp_Opr : 03329 case Sqrt_Opr : 03330 case Acos_Opr : 03331 case Asin_Opr : 03332 case Atan_Opr : 03333 case Aimag_Opr : 03334 case Atan2_Opr : 03335 case Cosh_Opr : 03336 case Sinh_Opr : 03337 case Tanh_Opr : 03338 case Cos_Opr : 03339 case Sin_Opr : 03340 case Tan_Opr : 03341 case Log_E_Opr : 03342 case Log_10_Opr : 03343 case Cosd_Opr : 03344 case Sind_Opr : 03345 case Tand_Opr : 03346 case Acosd_Opr : 03347 case Asind_Opr : 03348 case Atand_Opr : 03349 case Atan2d_Opr : 03350 03351 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 03352 IR_FLD_L(ir_idx)); 03353 03354 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 03355 03356 switch (IR_OPR(ir_idx)) { 03357 case Abs_Opr : 03358 PDG_DBG_PRINT_START 03359 PDG_DBG_PRINT_C("fei_abs"); 03360 PDG_DBG_PRINT_END 03361 # ifdef _ENABLE_FEI 03362 fei_abs(basic); 03363 # endif 03364 break; 03365 03366 case Paren_Opr : 03367 PDG_DBG_PRINT_START 03368 PDG_DBG_PRINT_C("fei_paren"); 03369 PDG_DBG_PRINT_END 03370 # ifdef _ENABLE_FEI 03371 fei_paren(basic,processing_call); 03372 # endif 03373 break; 03374 03375 case Const_Tmp_Loc_Opr : 03376 PDG_DBG_PRINT_START 03377 PDG_DBG_PRINT_C("fei_addr_con"); 03378 PDG_DBG_PRINT_END 03379 # ifdef _ENABLE_FEI 03380 fei_addr_con(basic); 03381 # endif 03382 break; 03383 03384 case Loc_Opr : 03385 PDG_DBG_PRINT_START 03386 PDG_DBG_PRINT_C("fei_addr"); 03387 PDG_DBG_PRINT_END 03388 # ifdef _ENABLE_FEI 03389 fei_addr(basic); 03390 # endif 03391 break; 03392 03393 case Ieee_Finite_Opr : 03394 PDG_DBG_PRINT_START 03395 PDG_DBG_PRINT_C("fei_isfinite"); 03396 PDG_DBG_PRINT_END 03397 # ifdef _ENABLE_FEI 03398 fei_isfinite(basic); 03399 # endif 03400 break; 03401 03402 case Ieee_Is_Nan_Opr : 03403 PDG_DBG_PRINT_START 03404 PDG_DBG_PRINT_C("fei_isnan"); 03405 PDG_DBG_PRINT_END 03406 # ifdef _ENABLE_FEI 03407 fei_isnan(basic); 03408 # endif 03409 break; 03410 03411 case Ieee_Class_Opr : 03412 PDG_DBG_PRINT_START 03413 PDG_DBG_PRINT_C("fei_fpclass"); 03414 PDG_DBG_PRINT_END 03415 # ifdef _ENABLE_FEI 03416 fei_fpclass(basic); 03417 # endif 03418 break; 03419 03420 case Uplus_Opr : 03421 break; 03422 03423 case Uminus_Opr : 03424 PDG_DBG_PRINT_START 03425 PDG_DBG_PRINT_C("fei_uminus"); 03426 PDG_DBG_PRINT_END 03427 # ifdef _ENABLE_FEI 03428 fei_uminus(basic); 03429 # endif 03430 break; 03431 03432 case Not_Opr : 03433 PDG_DBG_PRINT_START 03434 PDG_DBG_PRINT_C("fei_lneg"); 03435 PDG_DBG_PRINT_END 03436 # ifdef _ENABLE_FEI 03437 fei_lneg(basic); 03438 # endif 03439 break; 03440 03441 case Bnot_Opr : 03442 PDG_DBG_PRINT_START 03443 PDG_DBG_PRINT_C("fei_bneg"); 03444 PDG_DBG_PRINT_END 03445 # ifdef _ENABLE_FEI 03446 fei_bneg(basic); 03447 # endif 03448 break; 03449 03450 case Floor_Opr : 03451 PDG_DBG_PRINT_START 03452 PDG_DBG_PRINT_C("fei_floor"); 03453 PDG_DBG_PRINT_END 03454 # ifdef _ENABLE_FEI 03455 fei_floor(basic); 03456 # endif 03457 break; 03458 03459 case Clen_Opr : 03460 03461 PDG_DBG_PRINT_START 03462 PDG_DBG_PRINT_C("fei_len"); 03463 PDG_DBG_PRINT_END 03464 # ifdef _ENABLE_FEI 03465 /* fei_len(basic); */ 03466 fei_len(); 03467 # endif 03468 break; 03469 03470 case Conjg_Opr : 03471 PDG_DBG_PRINT_START 03472 PDG_DBG_PRINT_C("fei_conjg"); 03473 PDG_DBG_PRINT_END 03474 # ifdef _ENABLE_FEI 03475 fei_conjg(basic); 03476 # endif 03477 break; 03478 03479 case Mask_Opr : 03480 PDG_DBG_PRINT_START 03481 PDG_DBG_PRINT_C("fei_mask"); 03482 PDG_DBG_PRINT_END 03483 # ifdef _ENABLE_FEI 03484 fei_mask(basic); 03485 # endif 03486 break; 03487 03488 case Int_Opr : 03489 case Logical_Opr : 03490 case Real_Opr : 03491 case Ichar_Opr : 03492 case Char_Opr : 03493 case Cvrt_Opr : 03494 case Cvrt_Unsigned_Opr : 03495 PDG_DBG_PRINT_START 03496 PDG_DBG_PRINT_C("fei_cvtop"); 03497 PDG_DBG_PRINT_END 03498 # ifdef _ENABLE_FEI 03499 fei_cvtop(basic); 03500 # endif 03501 break; 03502 03503 case Ranget_Opr : 03504 PDG_DBG_PRINT_START 03505 PDG_DBG_PRINT_C("fei_ranget"); 03506 PDG_DBG_PRINT_END 03507 # ifdef _ENABLE_FEI 03508 fei_ranget(basic); 03509 # endif 03510 break; 03511 03512 case Ranset_Opr : 03513 PDG_DBG_PRINT_START 03514 PDG_DBG_PRINT_C("fei_ranset"); 03515 PDG_DBG_PRINT_END 03516 # ifdef _ENABLE_FEI 03517 fei_ranset(basic); 03518 # endif 03519 break; 03520 03521 case Dim_Opr : 03522 PDG_DBG_PRINT_START 03523 PDG_DBG_PRINT_C("fei_pos_diff"); 03524 PDG_DBG_PRINT_END 03525 # ifdef _ENABLE_FEI 03526 fei_pos_diff(basic); 03527 # endif 03528 break; 03529 03530 case Aint_Opr : 03531 PDG_DBG_PRINT_START 03532 PDG_DBG_PRINT_C("fei_trunc"); 03533 PDG_DBG_PRINT_END 03534 # ifdef _ENABLE_FEI 03535 fei_trunc(basic); 03536 # endif 03537 break; 03538 03539 case Leadz_Opr : 03540 arg_type = null_type; 03541 03542 # if defined(GENERATE_WHIRL) 03543 if (IR_FLD_L(ir_idx) == IL_Tbl_Idx) { 03544 arg_idx = IR_IDX_L(ir_idx); 03545 03546 if (IL_FLD(arg_idx) == AT_Tbl_Idx) { 03547 if (AT_OBJ_CLASS(IL_IDX(arg_idx)) == Data_Obj) { 03548 arg_type = get_basic_type(ATD_TYPE_IDX(IL_IDX(arg_idx)), 03549 0, 03550 NULL_IDX); 03551 } 03552 } 03553 else if (IL_FLD(arg_idx) == CN_Tbl_Idx) { 03554 arg_type = get_basic_type(CN_TYPE_IDX(IL_IDX(arg_idx)), 03555 0, 03556 NULL_IDX); 03557 } 03558 else if (IL_FLD(arg_idx) == IR_Tbl_Idx) { 03559 arg_type = get_basic_type(IR_TYPE_IDX(IL_IDX(arg_idx)), 03560 0, 03561 NULL_IDX); 03562 } 03563 } 03564 # endif 03565 03566 PDG_DBG_PRINT_START 03567 PDG_DBG_PRINT_C("fei_leadz"); 03568 PDG_DBG_PRINT_END 03569 # ifdef _ENABLE_FEI 03570 fei_leadz(basic, arg_type); 03571 # endif 03572 break; 03573 03574 case Poppar_Opr : 03575 arg_type = null_type; 03576 03577 # if defined(GENERATE_WHIRL) 03578 if (IR_FLD_L(ir_idx) == IL_Tbl_Idx) { 03579 arg_idx = IR_IDX_L(ir_idx); 03580 03581 if (IL_FLD(arg_idx) == AT_Tbl_Idx) { 03582 if (AT_OBJ_CLASS(IL_IDX(arg_idx)) == Data_Obj) { 03583 arg_type = get_basic_type(ATD_TYPE_IDX(IL_IDX(arg_idx)), 03584 0, 03585 NULL_IDX); 03586 } 03587 } 03588 else if (IL_FLD(arg_idx) == CN_Tbl_Idx) { 03589 arg_type = get_basic_type(CN_TYPE_IDX(IL_IDX(arg_idx)), 03590 0, 03591 NULL_IDX); 03592 } 03593 else if (IL_FLD(arg_idx) == IR_Tbl_Idx) { 03594 arg_type = get_basic_type(IR_TYPE_IDX(IL_IDX(arg_idx)), 03595 0, 03596 NULL_IDX); 03597 } 03598 } 03599 # endif 03600 03601 PDG_DBG_PRINT_START 03602 PDG_DBG_PRINT_C("fei_poppar"); 03603 PDG_DBG_PRINT_END 03604 # ifdef _ENABLE_FEI 03605 fei_poppar(basic, arg_type); 03606 # endif 03607 break; 03608 03609 case Popcnt_Opr : 03610 arg_type = null_type; 03611 03612 # if defined(GENERATE_WHIRL) 03613 if (IR_FLD_L(ir_idx) == IL_Tbl_Idx) { 03614 arg_idx = IR_IDX_L(ir_idx); 03615 03616 if (IL_FLD(arg_idx) == AT_Tbl_Idx) { 03617 if (AT_OBJ_CLASS(IL_IDX(arg_idx)) == Data_Obj) { 03618 arg_type = get_basic_type(ATD_TYPE_IDX(IL_IDX(arg_idx)), 03619 0, 03620 NULL_IDX); 03621 } 03622 } 03623 else if (IL_FLD(arg_idx) == CN_Tbl_Idx) { 03624 arg_type = get_basic_type(CN_TYPE_IDX(IL_IDX(arg_idx)), 03625 0, 03626 NULL_IDX); 03627 } 03628 else if (IL_FLD(arg_idx) == IR_Tbl_Idx) { 03629 arg_type = get_basic_type(IR_TYPE_IDX(IL_IDX(arg_idx)), 03630 0, 03631 NULL_IDX); 03632 } 03633 } 03634 # endif 03635 03636 PDG_DBG_PRINT_START 03637 PDG_DBG_PRINT_C("fei_popcnt"); 03638 PDG_DBG_PRINT_END 03639 # ifdef _ENABLE_FEI 03640 fei_popcnt(basic, arg_type); 03641 # endif 03642 break; 03643 03644 case Nint_Opr : 03645 case Anint_Opr : 03646 PDG_DBG_PRINT_START 03647 PDG_DBG_PRINT_C("fei_round"); 03648 PDG_DBG_PRINT_END 03649 # ifdef _ENABLE_FEI 03650 fei_round(basic); 03651 # endif 03652 break; 03653 03654 case Sign_Opr : 03655 PDG_DBG_PRINT_START 03656 PDG_DBG_PRINT_C("fei_sign_xfer"); 03657 PDG_DBG_PRINT_END 03658 # ifdef _ENABLE_FEI 03659 fei_sign_xfer(basic); 03660 # endif 03661 break; 03662 03663 case Cot_Opr : 03664 PDG_DBG_PRINT_START 03665 PDG_DBG_PRINT_C("fei_cot"); 03666 PDG_DBG_PRINT_END 03667 # ifdef _ENABLE_FEI 03668 fei_cot(basic); 03669 # endif 03670 break; 03671 03672 case Exp_Opr : 03673 PDG_DBG_PRINT_START 03674 PDG_DBG_PRINT_C("fei_exp"); 03675 PDG_DBG_PRINT_END 03676 # ifdef _ENABLE_FEI 03677 fei_exp(basic); 03678 # endif 03679 break; 03680 03681 case Sqrt_Opr : 03682 PDG_DBG_PRINT_START 03683 PDG_DBG_PRINT_C("fei_sqrt"); 03684 PDG_DBG_PRINT_END 03685 # ifdef _ENABLE_FEI 03686 fei_sqrt(basic); 03687 # endif 03688 break; 03689 03690 case Acos_Opr : 03691 PDG_DBG_PRINT_START 03692 PDG_DBG_PRINT_C("fei_acos"); 03693 PDG_DBG_PRINT_END 03694 # ifdef _ENABLE_FEI 03695 fei_acos(basic); 03696 # endif 03697 break; 03698 03699 case Asin_Opr : 03700 PDG_DBG_PRINT_START 03701 PDG_DBG_PRINT_C("fei_asin"); 03702 PDG_DBG_PRINT_END 03703 # ifdef _ENABLE_FEI 03704 fei_asin(basic); 03705 # endif 03706 break; 03707 03708 case Atan_Opr : 03709 PDG_DBG_PRINT_START 03710 PDG_DBG_PRINT_C("fei_atan"); 03711 PDG_DBG_PRINT_END 03712 # ifdef _ENABLE_FEI 03713 fei_atan(basic); 03714 # endif 03715 break; 03716 03717 case Aimag_Opr : 03718 PDG_DBG_PRINT_START 03719 PDG_DBG_PRINT_C("fei_imag"); 03720 PDG_DBG_PRINT_END 03721 # ifdef _ENABLE_FEI 03722 fei_imag(basic); 03723 # endif 03724 break; 03725 03726 case Atan2_Opr : 03727 PDG_DBG_PRINT_START 03728 PDG_DBG_PRINT_C("fei_atan2"); 03729 PDG_DBG_PRINT_END 03730 # ifdef _ENABLE_FEI 03731 fei_atan2(basic); 03732 # endif 03733 break; 03734 03735 case Cosh_Opr : 03736 PDG_DBG_PRINT_START 03737 PDG_DBG_PRINT_C("fei_cosh"); 03738 PDG_DBG_PRINT_END 03739 # ifdef _ENABLE_FEI 03740 fei_cosh(basic); 03741 # endif 03742 break; 03743 03744 case Sinh_Opr : 03745 PDG_DBG_PRINT_START 03746 PDG_DBG_PRINT_C("fei_sinh"); 03747 PDG_DBG_PRINT_END 03748 # ifdef _ENABLE_FEI 03749 fei_sinh(basic); 03750 # endif 03751 break; 03752 03753 case Tanh_Opr : 03754 PDG_DBG_PRINT_START 03755 PDG_DBG_PRINT_C("fei_tanh"); 03756 PDG_DBG_PRINT_END 03757 # ifdef _ENABLE_FEI 03758 fei_tanh(basic); 03759 # endif 03760 break; 03761 03762 case Cos_Opr : 03763 PDG_DBG_PRINT_START 03764 PDG_DBG_PRINT_C("fei_cos"); 03765 PDG_DBG_PRINT_END 03766 # ifdef _ENABLE_FEI 03767 fei_cos(basic); 03768 # endif 03769 break; 03770 03771 case Sin_Opr : 03772 PDG_DBG_PRINT_START 03773 PDG_DBG_PRINT_C("fei_sin"); 03774 PDG_DBG_PRINT_END 03775 # ifdef _ENABLE_FEI 03776 fei_sin(basic); 03777 # endif 03778 break; 03779 03780 case Tan_Opr : 03781 PDG_DBG_PRINT_START 03782 PDG_DBG_PRINT_C("fei_tan"); 03783 PDG_DBG_PRINT_END 03784 # ifdef _ENABLE_FEI 03785 fei_tan(basic); 03786 # endif 03787 break; 03788 03789 case Log_E_Opr : 03790 PDG_DBG_PRINT_START 03791 PDG_DBG_PRINT_C("fei_log"); 03792 PDG_DBG_PRINT_END 03793 # ifdef _ENABLE_FEI 03794 fei_log(basic); 03795 # endif 03796 break; 03797 03798 case Log_10_Opr : 03799 PDG_DBG_PRINT_START 03800 PDG_DBG_PRINT_C("fei_log10"); 03801 PDG_DBG_PRINT_END 03802 # ifdef _ENABLE_FEI 03803 fei_log10(basic); 03804 # endif 03805 break; 03806 03807 case Cosd_Opr : 03808 PDG_DBG_PRINT_START 03809 PDG_DBG_PRINT_C("fei_cosd"); 03810 PDG_DBG_PRINT_END 03811 # ifdef _ENABLE_FEI 03812 fei_cosd(basic); 03813 # endif 03814 break; 03815 03816 case Sind_Opr : 03817 PDG_DBG_PRINT_START 03818 PDG_DBG_PRINT_C("fei_sind"); 03819 PDG_DBG_PRINT_END 03820 # ifdef _ENABLE_FEI 03821 fei_sind(basic); 03822 # endif 03823 break; 03824 03825 case Tand_Opr : 03826 PDG_DBG_PRINT_START 03827 PDG_DBG_PRINT_C("fei_tand"); 03828 PDG_DBG_PRINT_END 03829 # ifdef _ENABLE_FEI 03830 fei_tand(basic); 03831 # endif 03832 break; 03833 03834 case Acosd_Opr : 03835 PDG_DBG_PRINT_START 03836 PDG_DBG_PRINT_C("fei_acosd"); 03837 PDG_DBG_PRINT_END 03838 # ifdef _ENABLE_FEI 03839 fei_acosd(basic); 03840 # endif 03841 break; 03842 03843 case Asind_Opr : 03844 PDG_DBG_PRINT_START 03845 PDG_DBG_PRINT_C("fei_asind"); 03846 PDG_DBG_PRINT_END 03847 # ifdef _ENABLE_FEI 03848 fei_asind(basic); 03849 # endif 03850 break; 03851 03852 case Atand_Opr : 03853 PDG_DBG_PRINT_START 03854 PDG_DBG_PRINT_C("fei_atand"); 03855 PDG_DBG_PRINT_END 03856 # ifdef _ENABLE_FEI 03857 fei_atand(basic); 03858 # endif 03859 break; 03860 03861 case Atan2d_Opr : 03862 PDG_DBG_PRINT_START 03863 PDG_DBG_PRINT_C("fei_atan2d"); 03864 PDG_DBG_PRINT_END 03865 # ifdef _ENABLE_FEI 03866 fei_atan2d(basic); 03867 # endif 03868 break; 03869 } 03870 break; 03871 03872 03873 03874 03875 03876 03877 03878 case Alt_Return_Opr : 03879 case Asg_Opr : 03880 case Dv_Whole_Copy_Opr : 03881 case Dv_Def_Asg_Opr : 03882 03883 if ((IR_FLD_L(ir_idx) == AT_Tbl_Idx) && 03884 (AT_OBJ_CLASS(IR_IDX_L(ir_idx)) == Label)) { 03885 03886 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 03887 IR_FLD_R(ir_idx)); 03888 03889 PDG_DBG_PRINT_START 03890 PDG_DBG_PRINT_C("fei_label_addr"); 03891 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", PDG_AT_IDX(IR_IDX_L(ir_idx))); 03892 PDG_DBG_PRINT_END 03893 03894 # ifdef _ENABLE_FEI 03895 fei_label_addr(PDG_AT_IDX(IR_IDX_L(ir_idx))); 03896 # endif 03897 } 03898 else { 03899 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 03900 IR_FLD_L(ir_idx)); 03901 03902 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 03903 IR_FLD_R(ir_idx)); 03904 } 03905 03906 PDG_DBG_PRINT_START 03907 PDG_DBG_PRINT_C("fei_store"); 03908 PDG_DBG_PRINT_END 03909 03910 # ifdef _ENABLE_FEI 03911 fei_store(pdg_type_void); 03912 # endif 03913 break; 03914 03915 03916 03917 03918 03919 case Flat_Array_Asg_Opr : 03920 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 03921 IR_FLD_L(ir_idx)); 03922 03923 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 03924 IR_FLD_R(ir_idx)); 03925 03926 PDG_DBG_PRINT_START 03927 PDG_DBG_PRINT_C("fei_non_conform_store"); 03928 PDG_DBG_PRINT_END 03929 03930 # ifdef _ENABLE_FEI 03931 fei_non_conform_store(pdg_type_void); 03932 # endif 03933 break; 03934 03935 03936 # ifdef _SAVE_IO_STMT 03937 case Start_Io_Opr : 03938 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 03939 IR_FLD_L(ir_idx)); 03940 03941 PDG_DBG_PRINT_START 03942 PDG_DBG_PRINT_C("fei_start_ioblock"); 03943 PDG_DBG_PRINT_END 03944 03945 # ifdef _ENABLE_FEI 03946 fei_start_ioblock(); 03947 # endif 03948 break; 03949 03950 03951 03952 case End_Io_Opr : 03953 PDG_DBG_PRINT_START 03954 PDG_DBG_PRINT_C("fei_end_ioblock"); 03955 PDG_DBG_PRINT_END 03956 03957 # ifdef _ENABLE_FEI 03958 fei_end_ioblock(); 03959 # endif 03960 break; 03961 # endif 03962 03963 03964 03965 03966 case Readsm_Opr : 03967 PDG_DBG_PRINT_START 03968 PDG_DBG_PRINT_C("fei_readsm"); 03969 PDG_DBG_PRINT_END 03970 03971 # ifdef _ENABLE_FEI 03972 fei_readsm(); 03973 # endif 03974 break; 03975 03976 03977 03978 case Read_Unformatted_Opr : 03979 io_type = READ_STMT; 03980 03981 processing_call = processing_call + 1; 03982 processing_io_stmt = TRUE; 03983 03984 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 03985 IR_FLD_L(ir_idx)); 03986 03987 PDG_DBG_PRINT_START 03988 PDG_DBG_PRINT_C("fei_control_list"); 03989 PDG_DBG_PRINT_S("(1) io_type", p_io[io_type]); 03990 PDG_DBG_PRINT_END 03991 03992 # ifdef _ENABLE_FEI 03993 fei_control_list(io_type); 03994 # endif 03995 03996 io_ctl_list = TRUE; 03997 03998 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 03999 IR_FLD_R(ir_idx)); 04000 04001 io_ctl_list = FALSE; 04002 04003 if (IR_IDX_R(ir_idx) != NULL_IDX) { 04004 list_cnt = IR_LIST_CNT_R(ir_idx); 04005 04006 PDG_DBG_PRINT_START 04007 PDG_DBG_PRINT_C("fei_IO_list"); 04008 PDG_DBG_PRINT_D("(1) list_cnt", list_cnt); 04009 PDG_DBG_PRINT_S("(2) io_type", p_io[io_type]); 04010 PDG_DBG_PRINT_END 04011 04012 # ifdef _ENABLE_FEI 04013 fei_IO_list(list_cnt, io_type); 04014 # endif 04015 } 04016 04017 PDG_DBG_PRINT_START 04018 PDG_DBG_PRINT_C("fei_unformatted_read"); 04019 PDG_DBG_PRINT_END 04020 04021 # ifdef _ENABLE_FEI 04022 fei_unformatted_read(); 04023 # endif 04024 04025 processing_io_stmt = FALSE; 04026 processing_call = processing_call - 1; 04027 break; 04028 04029 04030 04031 04032 04033 case Backspace_Opr: 04034 # if defined(_FILE_IO_OPRS) 04035 processing_call = processing_call + 1; 04036 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 04037 IR_FLD_L(ir_idx)); 04038 04039 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 04040 IR_FLD_R(ir_idx)); 04041 04042 PDG_DBG_PRINT_START 04043 PDG_DBG_PRINT_C("fei_backspace"); 04044 PDG_DBG_PRINT_END 04045 04046 fei_backspace(); 04047 processing_call = processing_call - 1; 04048 # endif 04049 break; 04050 04051 04052 04053 04054 case Close_Opr: 04055 # if defined(_FILE_IO_OPRS) 04056 processing_call = processing_call + 1; 04057 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 04058 IR_FLD_L(ir_idx)); 04059 04060 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 04061 IR_FLD_R(ir_idx)); 04062 04063 PDG_DBG_PRINT_START 04064 PDG_DBG_PRINT_C("fei_close"); 04065 PDG_DBG_PRINT_END 04066 04067 fei_close(); 04068 processing_call = processing_call - 1; 04069 # endif 04070 break; 04071 04072 04073 04074 04075 04076 case Endfile_Opr: 04077 # if defined(_FILE_IO_OPRS) 04078 processing_call = processing_call + 1; 04079 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 04080 IR_FLD_L(ir_idx)); 04081 04082 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 04083 IR_FLD_R(ir_idx)); 04084 04085 PDG_DBG_PRINT_START 04086 PDG_DBG_PRINT_C("fei_endfile"); 04087 PDG_DBG_PRINT_END 04088 04089 fei_endfile(); 04090 processing_call = processing_call - 1; 04091 # endif 04092 break; 04093 04094 04095 04096 04097 04098 case Inquire_Opr: 04099 # if defined(_FILE_IO_OPRS) 04100 processing_call = processing_call + 1; 04101 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 04102 IR_FLD_L(ir_idx)); 04103 04104 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 04105 IR_FLD_R(ir_idx)); 04106 04107 PDG_DBG_PRINT_START 04108 PDG_DBG_PRINT_C("fei_inquire"); 04109 PDG_DBG_PRINT_END 04110 04111 fei_inquire(); 04112 processing_call = processing_call - 1; 04113 # endif 04114 break; 04115 04116 04117 04118 04119 04120 case Open_Opr: 04121 # if defined(_FILE_IO_OPRS) 04122 processing_call = processing_call + 1; 04123 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 04124 IR_FLD_L(ir_idx)); 04125 04126 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 04127 IR_FLD_R(ir_idx)); 04128 04129 PDG_DBG_PRINT_START 04130 PDG_DBG_PRINT_C("fei_open"); 04131 PDG_DBG_PRINT_END 04132 04133 fei_open(); 04134 processing_call = processing_call - 1; 04135 # endif 04136 break; 04137 04138 04139 04140 04141 case Rewind_Opr: 04142 # if defined(_FILE_IO_OPRS) 04143 processing_call = processing_call + 1; 04144 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 04145 IR_FLD_L(ir_idx)); 04146 04147 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 04148 IR_FLD_R(ir_idx)); 04149 04150 PDG_DBG_PRINT_START 04151 PDG_DBG_PRINT_C("fei_rewind"); 04152 PDG_DBG_PRINT_END 04153 04154 fei_rewind(); 04155 processing_call = processing_call - 1; 04156 # endif 04157 break; 04158 04159 04160 case Io_Item_Type_Code_Opr: 04161 make_io_type_code(IR_TYPE_IDX(ir_idx), loc_value); 04162 basic = get_basic_type(IO_TYPE_CODE_TYPE, 04163 type_alignment_tbl[IO_TYPE_CODE_TYPE], 04164 NULL_IDX); 04165 04166 PDG_DBG_PRINT_START 04167 PDG_DBG_PRINT_C("fei_arith_con"); 04168 PDG_DBG_PRINT_T("(1) type", basic); 04169 #if defined(_HOST32) && defined(_TARGET64) 04170 PDG_DBG_PRINT_VD("(2) value", loc_value[0]); 04171 #else 04172 PDG_DBG_PRINT_LVD("(2) value", loc_value[0]); 04173 #endif 04174 PDG_DBG_PRINT_END 04175 04176 # ifdef _ENABLE_FEI 04177 pdg_cn_idx = fei_arith_con(basic, (long *)loc_value); 04178 # endif 04179 PDG_DBG_PRINT_START 04180 PDG_DBG_PRINT_LD("(r) PDG_CN_IDX", pdg_cn_idx); 04181 PDG_DBG_PRINT_END 04182 04183 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 04184 IR_FLD_L(ir_idx)); 04185 04186 04187 PDG_DBG_PRINT_START 04188 PDG_DBG_PRINT_C("fei_push_arith_con"); 04189 PDG_DBG_PRINT_LD("(1) PDG_CN_IDX", pdg_cn_idx); 04190 PDG_DBG_PRINT_END 04191 04192 # ifdef _ENABLE_FEI 04193 fei_push_arith_con(pdg_cn_idx); 04194 # endif 04195 04196 PDG_DBG_PRINT_START 04197 PDG_DBG_PRINT_C("fei_iotype"); 04198 PDG_DBG_PRINT_END 04199 04200 # ifdef _ENABLE_FEI 04201 fei_iotype(); 04202 # endif 04203 break; 04204 04205 04206 04207 case Write_Unformatted_Opr : 04208 io_type = WRITE_STMT; 04209 processing_call = processing_call + 1; 04210 processing_io_stmt = TRUE; 04211 io_ctl_list = TRUE; 04212 04213 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 04214 IR_FLD_L(ir_idx)); 04215 04216 PDG_DBG_PRINT_START 04217 PDG_DBG_PRINT_C("fei_control_list"); 04218 PDG_DBG_PRINT_S("(1) io_type", p_io[io_type]); 04219 PDG_DBG_PRINT_END 04220 04221 # ifdef _ENABLE_FEI 04222 fei_control_list(io_type); 04223 # endif 04224 io_ctl_list = FALSE; 04225 04226 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 04227 IR_FLD_R(ir_idx)); 04228 /* io_ctl_list = FALSE; */ 04229 04230 if (IR_IDX_R(ir_idx) != NULL_IDX) { 04231 list_cnt = IR_LIST_CNT_R(ir_idx); 04232 04233 PDG_DBG_PRINT_START 04234 PDG_DBG_PRINT_C("fei_IO_list"); 04235 PDG_DBG_PRINT_D("(1) list_cnt", list_cnt); 04236 PDG_DBG_PRINT_S("(2) io_type", p_io[io_type]); 04237 PDG_DBG_PRINT_END 04238 04239 # ifdef _ENABLE_FEI 04240 fei_IO_list(list_cnt, io_type); 04241 # endif 04242 } 04243 04244 PDG_DBG_PRINT_START 04245 PDG_DBG_PRINT_C("fei_unformatted_write"); 04246 PDG_DBG_PRINT_END 04247 04248 # ifdef _ENABLE_FEI 04249 fei_unformatted_write(); 04250 # endif 04251 04252 processing_io_stmt = FALSE; 04253 processing_call = processing_call - 1; 04254 break; 04255 04256 04257 04258 04259 case Read_Namelist_Opr : 04260 io_type = READ_NML_STMT; 04261 # if !(defined(_TARGET_OS_IRIX) || defined(_TARGET_OS_LINUX)) 04262 /* remove the namelist group attr from the format item */ 04263 list_idx1 = IR_IDX_L(ir_idx); 04264 for (i = 0; i < 7; i++) { 04265 list_idx1 = IL_NEXT_LIST_IDX(list_idx1); 04266 } 04267 04268 IL_FLD(list_idx1) = NO_Tbl_Idx; 04269 IL_IDX(list_idx1) = NULL_IDX; 04270 # endif 04271 04272 processing_call = processing_call + 1; 04273 processing_io_stmt = TRUE; 04274 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 04275 IR_FLD_L(ir_idx)); 04276 04277 PDG_DBG_PRINT_START 04278 PDG_DBG_PRINT_C("fei_control_list"); 04279 PDG_DBG_PRINT_S("(1) io_type", p_io[io_type]); 04280 PDG_DBG_PRINT_END 04281 04282 # ifdef _ENABLE_FEI 04283 fei_control_list(io_type); 04284 # endif 04285 io_ctl_list = TRUE; 04286 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 04287 IR_FLD_R(ir_idx)); 04288 04289 io_ctl_list = FALSE; 04290 04291 if (IR_IDX_R(ir_idx) != NULL_IDX) { 04292 list_cnt = IR_LIST_CNT_R(ir_idx); 04293 04294 PDG_DBG_PRINT_START 04295 PDG_DBG_PRINT_C("fei_IO_list"); 04296 PDG_DBG_PRINT_D("(1) list_cnt", list_cnt); 04297 PDG_DBG_PRINT_S("(2) io_type", p_io[io_type]); 04298 PDG_DBG_PRINT_END 04299 04300 # ifdef _ENABLE_FEI 04301 fei_IO_list(list_cnt, io_type); 04302 # endif 04303 } 04304 04305 PDG_DBG_PRINT_START 04306 PDG_DBG_PRINT_C("fei_namelist_read"); 04307 PDG_DBG_PRINT_END 04308 04309 # ifdef _ENABLE_FEI 04310 fei_namelist_read(); 04311 # endif 04312 04313 processing_io_stmt = FALSE; 04314 processing_call = processing_call - 1; 04315 break; 04316 04317 04318 04319 04320 04321 04322 case Write_Namelist_Opr : 04323 io_type = WRITE_NML_STMT; 04324 04325 # if !(defined(_TARGET_OS_IRIX) || defined(_TARGET_OS_LINUX)) 04326 /* remove the namelist group attr from the format item */ 04327 list_idx1 = IR_IDX_L(ir_idx); 04328 for (i = 0; i < 7; i++) { 04329 list_idx1 = IL_NEXT_LIST_IDX(list_idx1); 04330 } 04331 04332 IL_FLD(list_idx1) = NO_Tbl_Idx; 04333 IL_IDX(list_idx1) = NULL_IDX; 04334 # endif 04335 04336 processing_call = processing_call + 1; 04337 processing_io_stmt = TRUE; 04338 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 04339 IR_FLD_L(ir_idx)); 04340 04341 PDG_DBG_PRINT_START 04342 PDG_DBG_PRINT_C("fei_control_list"); 04343 PDG_DBG_PRINT_S("(1) io_type", p_io[io_type]); 04344 PDG_DBG_PRINT_END 04345 04346 # ifdef _ENABLE_FEI 04347 fei_control_list(io_type); 04348 # endif 04349 io_ctl_list = TRUE; 04350 04351 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 04352 IR_FLD_R(ir_idx)); 04353 io_ctl_list = FALSE; 04354 04355 if (IR_IDX_R(ir_idx) != NULL_IDX) { 04356 list_cnt = IR_LIST_CNT_R(ir_idx); 04357 04358 PDG_DBG_PRINT_START 04359 PDG_DBG_PRINT_C("fei_IO_list"); 04360 PDG_DBG_PRINT_D("(1) list count", list_cnt); 04361 PDG_DBG_PRINT_S("(2) io_type", p_io[io_type]); 04362 PDG_DBG_PRINT_END 04363 04364 # ifdef _ENABLE_FEI 04365 fei_IO_list(list_cnt, io_type); 04366 # endif 04367 } 04368 04369 PDG_DBG_PRINT_START 04370 PDG_DBG_PRINT_C("fei_namelist_write"); 04371 PDG_DBG_PRINT_END 04372 04373 # ifdef _ENABLE_FEI 04374 fei_namelist_write(); 04375 # endif 04376 04377 processing_io_stmt = FALSE; 04378 processing_call = processing_call - 1; 04379 break; 04380 04381 04382 04383 04384 04385 case Read_Formatted_Opr : 04386 io_type = READ_STMT; 04387 processing_call = processing_call + 1; 04388 processing_io_stmt = TRUE; 04389 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 04390 IR_FLD_L(ir_idx)); 04391 04392 PDG_DBG_PRINT_START 04393 PDG_DBG_PRINT_C("fei_control_list"); 04394 PDG_DBG_PRINT_S("(1) io_type", p_io[io_type]); 04395 PDG_DBG_PRINT_END 04396 04397 # ifdef _ENABLE_FEI 04398 fei_control_list(io_type); 04399 # endif 04400 /* io_ctl_list = TRUE; */ 04401 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 04402 IR_FLD_R(ir_idx)); 04403 /* io_ctl_list = FALSE; */ 04404 04405 if (IR_IDX_R(ir_idx) != NULL_IDX) { 04406 list_cnt = IR_LIST_CNT_R(ir_idx); 04407 04408 PDG_DBG_PRINT_START 04409 PDG_DBG_PRINT_C("fei_IO_list"); 04410 PDG_DBG_PRINT_D("(1) list_cnt", list_cnt); 04411 PDG_DBG_PRINT_S("(2) io_type", p_io[io_type]); 04412 PDG_DBG_PRINT_END 04413 04414 # ifdef _ENABLE_FEI 04415 fei_IO_list(list_cnt, io_type); 04416 # endif 04417 } 04418 04419 PDG_DBG_PRINT_START 04420 PDG_DBG_PRINT_C("fei_formatted_read"); 04421 PDG_DBG_PRINT_END 04422 04423 # ifdef _ENABLE_FEI 04424 fei_formatted_read(); 04425 # endif 04426 04427 processing_io_stmt = FALSE; 04428 processing_call = processing_call - 1; 04429 break; 04430 04431 04432 04433 04434 04435 04436 case Write_Formatted_Opr : 04437 io_type = WRITE_STMT; 04438 processing_call = processing_call + 1; 04439 processing_io_stmt = TRUE; 04440 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 04441 IR_FLD_L(ir_idx)); 04442 04443 PDG_DBG_PRINT_START 04444 PDG_DBG_PRINT_C("fei_control_list"); 04445 PDG_DBG_PRINT_S("(1) io_type", p_io[io_type]); 04446 PDG_DBG_PRINT_END 04447 04448 # ifdef _ENABLE_FEI 04449 fei_control_list(io_type); 04450 # endif 04451 /* io_ctl_list = TRUE; */ 04452 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 04453 IR_FLD_R(ir_idx)); 04454 /* io_ctl_list = FALSE; */ 04455 04456 if (IR_IDX_R(ir_idx) != NULL_IDX) { 04457 list_cnt = IR_LIST_CNT_R(ir_idx); 04458 04459 PDG_DBG_PRINT_START 04460 PDG_DBG_PRINT_C("fei_IO_list"); 04461 PDG_DBG_PRINT_D("(1) list_cnt", list_cnt); 04462 PDG_DBG_PRINT_S("(2) io_type", p_io[io_type]); 04463 PDG_DBG_PRINT_END 04464 04465 # ifdef _ENABLE_FEI 04466 fei_IO_list(list_cnt, io_type); 04467 # endif 04468 } 04469 04470 PDG_DBG_PRINT_START 04471 PDG_DBG_PRINT_C("fei_formatted_write"); 04472 PDG_DBG_PRINT_END 04473 04474 # ifdef _ENABLE_FEI 04475 fei_formatted_write(); 04476 # endif 04477 04478 processing_io_stmt = FALSE; 04479 processing_call = processing_call - 1; 04480 break; 04481 04482 04483 04484 04485 04486 case Inquire_Iolength_Opr: 04487 io_type = WRITE_STMT; 04488 processing_call = processing_call + 1; 04489 processing_io_stmt = TRUE; 04490 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 04491 IR_FLD_L(ir_idx)); 04492 04493 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 04494 IR_FLD_R(ir_idx)); 04495 04496 if (IR_IDX_R(ir_idx) != NULL_IDX) { 04497 list_cnt = IR_LIST_CNT_R(ir_idx); 04498 04499 PDG_DBG_PRINT_START 04500 PDG_DBG_PRINT_C("fei_IO_list"); 04501 PDG_DBG_PRINT_D("(1) list_cnt", list_cnt); 04502 PDG_DBG_PRINT_S("(2) io_type", p_io[io_type]); 04503 PDG_DBG_PRINT_END 04504 04505 # ifdef _ENABLE_FEI 04506 fei_IO_list(list_cnt, io_type); 04507 # endif 04508 } 04509 04510 PDG_DBG_PRINT_START 04511 PDG_DBG_PRINT_C("fei_iolength"); 04512 PDG_DBG_PRINT_END 04513 04514 # ifdef _ENABLE_FEI 04515 fei_iolength(); 04516 # endif 04517 04518 processing_io_stmt = FALSE; 04519 processing_call = processing_call - 1; 04520 break; 04521 04522 04523 04524 04525 04526 04527 04528 04529 04530 04531 04532 04533 case Fcd_Opr : 04534 case Int_Mult_Upper_Opr : 04535 case Ieee_Unordered_Opr : 04536 case Ieee_Remainder_Opr : 04537 case Ieee_Real_Opr : 04538 case Ieee_Int_Opr : 04539 case Ieee_Copy_Sign_Opr : 04540 case Ieee_Exponent_Opr : 04541 case Ieee_Next_After_Opr : 04542 case Ieee_Binary_Scale_Opr : 04543 case Mod_Opr : 04544 case Eq_Opr : 04545 case Ne_Opr : 04546 case Lg_Opr : 04547 case Lt_Opr : 04548 case Llt_Opr : 04549 case Le_Opr : 04550 case Lle_Opr : 04551 case Gt_Opr : 04552 case Lgt_Opr : 04553 case Ge_Opr : 04554 case Lge_Opr : 04555 case And_Opr : 04556 case Band_Opr : 04557 case Or_Opr : 04558 case Bor_Opr : 04559 case Eqv_Opr : 04560 case Neqv_Opr : 04561 case Bneqv_Opr : 04562 case Beqv_Opr : 04563 case Plus_Opr : 04564 case Minus_Opr : 04565 case Div_Opr : 04566 case Mult_Opr : 04567 case Dprod_Opr : 04568 case Power_Opr : 04569 case Shifta_Opr : 04570 case Shiftr_Opr : 04571 case Shiftl_Opr : 04572 case Shift_Opr : 04573 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 04574 IR_FLD_L(ir_idx)); 04575 04576 if (IR_FLD_R(ir_idx) != NO_Tbl_Idx) { 04577 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 04578 IR_FLD_R(ir_idx)); 04579 } 04580 04581 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 04582 04583 switch (IR_OPR(ir_idx)) { 04584 case Fcd_Opr : 04585 PDG_DBG_PRINT_START 04586 PDG_DBG_PRINT_C("fei_fcd"); 04587 PDG_DBG_PRINT_END 04588 # ifdef _ENABLE_FEI 04589 fei_fcd(basic); 04590 # endif 04591 break; 04592 04593 case Int_Mult_Upper_Opr : 04594 PDG_DBG_PRINT_START 04595 PDG_DBG_PRINT_C("fei_multiply_high"); 04596 PDG_DBG_PRINT_END 04597 # ifdef _ENABLE_FEI 04598 fei_multiply_high(basic); 04599 # endif 04600 break; 04601 04602 case Ieee_Unordered_Opr : 04603 PDG_DBG_PRINT_START 04604 PDG_DBG_PRINT_C("fei_isunordered"); 04605 PDG_DBG_PRINT_END 04606 # ifdef _ENABLE_FEI 04607 fei_isunordered(basic); 04608 # endif 04609 break; 04610 04611 case Ieee_Remainder_Opr : 04612 PDG_DBG_PRINT_START 04613 PDG_DBG_PRINT_C("fei_remainder"); 04614 PDG_DBG_PRINT_END 04615 # ifdef _ENABLE_FEI 04616 fei_remainder(basic); 04617 # endif 04618 break; 04619 04620 case Ieee_Real_Opr : 04621 PDG_DBG_PRINT_START 04622 PDG_DBG_PRINT_C("fei_ieee_round"); 04623 PDG_DBG_PRINT_END 04624 # ifdef _ENABLE_FEI 04625 fei_ieee_round(basic); 04626 # endif 04627 break; 04628 04629 case Ieee_Int_Opr : 04630 PDG_DBG_PRINT_START 04631 PDG_DBG_PRINT_C("fei_ieee_trunc"); 04632 PDG_DBG_PRINT_END 04633 # ifdef _ENABLE_FEI 04634 fei_ieee_trunc(basic); 04635 # endif 04636 break; 04637 04638 case Ieee_Copy_Sign_Opr : 04639 # if defined(GENERATE_WHIRL) 04640 PDG_DBG_PRINT_START 04641 PDG_DBG_PRINT_C("fei_ieee_sign_xfer"); 04642 PDG_DBG_PRINT_END 04643 # ifdef _ENABLE_FEI 04644 fei_ieee_sign_xfer(basic); 04645 # endif 04646 # else 04647 PDG_DBG_PRINT_START 04648 PDG_DBG_PRINT_C("fei_sign_xfer"); 04649 PDG_DBG_PRINT_END 04650 # ifdef _ENABLE_FEI 04651 fei_sign_xfer(basic); 04652 # endif 04653 # endif 04654 break; 04655 04656 case Ieee_Exponent_Opr : 04657 PDG_DBG_PRINT_START 04658 PDG_DBG_PRINT_C("fei_logb"); 04659 PDG_DBG_PRINT_END 04660 # ifdef _ENABLE_FEI 04661 fei_logb(basic); 04662 # endif 04663 break; 04664 04665 case Ieee_Next_After_Opr : 04666 PDG_DBG_PRINT_START 04667 PDG_DBG_PRINT_C("fei_nextafter"); 04668 PDG_DBG_PRINT_END 04669 # ifdef _ENABLE_FEI 04670 fei_nextafter(basic); 04671 # endif 04672 break; 04673 04674 case Ieee_Binary_Scale_Opr : 04675 PDG_DBG_PRINT_START 04676 PDG_DBG_PRINT_C("fei_scalb"); 04677 PDG_DBG_PRINT_END 04678 # ifdef _ENABLE_FEI 04679 fei_scalb(basic); 04680 # endif 04681 break; 04682 04683 case Mod_Opr : 04684 PDG_DBG_PRINT_START 04685 PDG_DBG_PRINT_C("fei_mod"); 04686 PDG_DBG_PRINT_END 04687 # ifdef _ENABLE_FEI 04688 fei_mod(basic); 04689 # endif 04690 break; 04691 04692 case Eq_Opr : 04693 PDG_DBG_PRINT_START 04694 PDG_DBG_PRINT_C("fei_eq"); 04695 PDG_DBG_PRINT_END 04696 # ifdef _ENABLE_FEI 04697 fei_eq(basic); 04698 # endif 04699 break; 04700 04701 case Ne_Opr : 04702 PDG_DBG_PRINT_START 04703 PDG_DBG_PRINT_C("fei_ne"); 04704 PDG_DBG_PRINT_END 04705 # ifdef _ENABLE_FEI 04706 fei_ne(basic); 04707 # endif 04708 break; 04709 04710 case Lg_Opr : 04711 PDG_DBG_PRINT_START 04712 PDG_DBG_PRINT_C("fei_islg"); 04713 PDG_DBG_PRINT_END 04714 # ifdef _ENABLE_FEI 04715 fei_islg(basic); 04716 # endif 04717 break; 04718 04719 case Lt_Opr : 04720 case Llt_Opr : 04721 PDG_DBG_PRINT_START 04722 PDG_DBG_PRINT_C("fei_lt"); 04723 PDG_DBG_PRINT_END 04724 # ifdef _ENABLE_FEI 04725 fei_lt(basic); 04726 # endif 04727 break; 04728 04729 case Le_Opr : 04730 case Lle_Opr : 04731 PDG_DBG_PRINT_START 04732 PDG_DBG_PRINT_C("fei_le"); 04733 PDG_DBG_PRINT_END 04734 # ifdef _ENABLE_FEI 04735 fei_le(basic); 04736 # endif 04737 break; 04738 04739 case Gt_Opr : 04740 case Lgt_Opr : 04741 PDG_DBG_PRINT_START 04742 PDG_DBG_PRINT_C("fei_gt"); 04743 PDG_DBG_PRINT_END 04744 # ifdef _ENABLE_FEI 04745 fei_gt(basic); 04746 # endif 04747 break; 04748 04749 case Ge_Opr : 04750 case Lge_Opr : 04751 PDG_DBG_PRINT_START 04752 PDG_DBG_PRINT_C("fei_ge"); 04753 PDG_DBG_PRINT_END 04754 # ifdef _ENABLE_FEI 04755 fei_ge(basic); 04756 # endif 04757 break; 04758 04759 case And_Opr : 04760 PDG_DBG_PRINT_START 04761 PDG_DBG_PRINT_C("fei_land"); 04762 PDG_DBG_PRINT_END 04763 # ifdef _ENABLE_FEI 04764 fei_land(basic); 04765 # endif 04766 break; 04767 04768 case Band_Opr : 04769 PDG_DBG_PRINT_START 04770 PDG_DBG_PRINT_C("fei_and"); 04771 PDG_DBG_PRINT_END 04772 # ifdef _ENABLE_FEI 04773 fei_and(basic); 04774 # endif 04775 break; 04776 04777 case Or_Opr : 04778 PDG_DBG_PRINT_START 04779 PDG_DBG_PRINT_C("fei_lor"); 04780 PDG_DBG_PRINT_END 04781 # ifdef _ENABLE_FEI 04782 fei_lor(basic); 04783 # endif 04784 break; 04785 04786 case Bor_Opr : 04787 PDG_DBG_PRINT_START 04788 PDG_DBG_PRINT_C("fei_or"); 04789 PDG_DBG_PRINT_END 04790 # ifdef _ENABLE_FEI 04791 fei_or(basic); 04792 # endif 04793 break; 04794 04795 case Eqv_Opr : 04796 PDG_DBG_PRINT_START 04797 PDG_DBG_PRINT_C("fei_leqv"); 04798 PDG_DBG_PRINT_END 04799 # ifdef _ENABLE_FEI 04800 fei_leqv(basic); 04801 # endif 04802 break; 04803 04804 case Neqv_Opr : 04805 PDG_DBG_PRINT_START 04806 PDG_DBG_PRINT_C("fei_lxor"); 04807 PDG_DBG_PRINT_END 04808 # ifdef _ENABLE_FEI 04809 fei_lxor(basic); 04810 # endif 04811 break; 04812 04813 case Bneqv_Opr : 04814 PDG_DBG_PRINT_START 04815 PDG_DBG_PRINT_C("fei_xor"); 04816 PDG_DBG_PRINT_END 04817 # ifdef _ENABLE_FEI 04818 fei_xor(basic); 04819 # endif 04820 break; 04821 04822 case Beqv_Opr : 04823 PDG_DBG_PRINT_START 04824 PDG_DBG_PRINT_C("fei_eqv"); 04825 PDG_DBG_PRINT_END 04826 # ifdef _ENABLE_FEI 04827 fei_eqv(basic); 04828 # endif 04829 break; 04830 04831 case Plus_Opr : 04832 PDG_DBG_PRINT_START 04833 PDG_DBG_PRINT_C("fei_plus"); 04834 PDG_DBG_PRINT_END 04835 # ifdef _ENABLE_FEI 04836 fei_plus(basic); 04837 # endif 04838 break; 04839 04840 case Minus_Opr : 04841 PDG_DBG_PRINT_START 04842 PDG_DBG_PRINT_C("fei_minus"); 04843 PDG_DBG_PRINT_END 04844 # ifdef _ENABLE_FEI 04845 fei_minus(basic); 04846 # endif 04847 break; 04848 04849 case Div_Opr : 04850 PDG_DBG_PRINT_START 04851 PDG_DBG_PRINT_C("fei_div"); 04852 PDG_DBG_PRINT_END 04853 # ifdef _ENABLE_FEI 04854 fei_div(basic); 04855 # endif 04856 break; 04857 04858 case Mult_Opr : 04859 case Dprod_Opr : 04860 PDG_DBG_PRINT_START 04861 PDG_DBG_PRINT_C("fei_mult"); 04862 PDG_DBG_PRINT_END 04863 # ifdef _ENABLE_FEI 04864 fei_mult(basic); 04865 # endif 04866 break; 04867 04868 case Power_Opr : 04869 PDG_DBG_PRINT_START 04870 PDG_DBG_PRINT_C("fei_exponentiate"); 04871 PDG_DBG_PRINT_END 04872 # ifdef _ENABLE_FEI 04873 fei_exponentiate(basic); 04874 # endif 04875 break; 04876 04877 case Shifta_Opr : 04878 PDG_DBG_PRINT_START 04879 PDG_DBG_PRINT_C("fei_ashift"); 04880 PDG_DBG_PRINT_END 04881 # ifdef _ENABLE_FEI 04882 fei_ashift(basic); 04883 # endif 04884 break; 04885 04886 case Shiftr_Opr : 04887 PDG_DBG_PRINT_START 04888 PDG_DBG_PRINT_C("fei_rshift"); 04889 PDG_DBG_PRINT_END 04890 # ifdef _ENABLE_FEI 04891 fei_rshift(basic); 04892 # endif 04893 break; 04894 04895 case Shiftl_Opr : 04896 PDG_DBG_PRINT_START 04897 PDG_DBG_PRINT_C("fei_lshift"); 04898 PDG_DBG_PRINT_END 04899 # ifdef _ENABLE_FEI 04900 fei_lshift(basic); 04901 # endif 04902 break; 04903 04904 case Shift_Opr : 04905 PDG_DBG_PRINT_START 04906 PDG_DBG_PRINT_C("fei_new_binop_cshift"); 04907 PDG_DBG_PRINT_END 04908 # ifdef _ENABLE_FEI 04909 fei_new_binop_cshift(basic); 04910 # endif 04911 break; 04912 04913 } 04914 break; 04915 04916 04917 04918 04919 04920 04921 04922 04923 04924 04925 04926 04927 case Entry_Opr : 04928 if (ATP_ALT_ENTRY(IR_IDX_L(ir_idx))) { 04929 PDG_DBG_PRINT_START 04930 PDG_DBG_PRINT_C("fei_entry_pt"); 04931 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", PDG_AT_IDX(IR_IDX_L(ir_idx))); 04932 PDG_DBG_PRINT_END 04933 04934 # ifdef _ENABLE_FEI 04935 fei_entry_pt(PDG_AT_IDX(IR_IDX_L(ir_idx))); 04936 # endif 04937 } 04938 break; 04939 04940 04941 case Label_Opr : 04942 attr_idx = IR_IDX_L(ir_idx); 04943 04944 if (ATL_CLASS(attr_idx) == Lbl_Format || 04945 (ATL_CLASS(attr_idx) <= Lbl_User && !ATL_EXECUTABLE(attr_idx))) { 04946 /* Intentionally blank */ 04947 } 04948 else { 04949 send_label_def(ir_idx); 04950 } 04951 break; 04952 04953 04954 04955 case Whole_Substring_Opr : 04956 case Substring_Opr : 04957 whole_substring = IR_OPR(ir_idx) == Whole_Substring_Opr; 04958 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 04959 IR_FLD_L(ir_idx)); 04960 whole_substring = FALSE; 04961 04962 bound_chk = cmd_line_flags.runtime_substring; 04963 04964 if (IR_BOUNDS_DONE(ir_idx)) { 04965 bound_chk = FALSE; 04966 } 04967 04968 04969 list_idx1 = IR_IDX_R(ir_idx); 04970 list_idx2 = IL_NEXT_LIST_IDX(list_idx1); 04971 list_idx3 = IL_NEXT_LIST_IDX(list_idx2); 04972 04973 if (stack_data_object) { 04974 big_int = CN_INT_TO_C(IL_IDX(list_idx1)); 04975 04976 PDG_DBG_PRINT_START 04977 PDG_DBG_PRINT_C("fei_static_substr"); 04978 #if defined(_HOST32) && defined(_TARGET64) 04979 PDG_DBG_PRINT_D("(1) constant", big_int); 04980 #else 04981 PDG_DBG_PRINT_VD("(1) constant", big_int); 04982 #endif 04983 PDG_DBG_PRINT_END 04984 04985 # ifdef _ENABLE_FEI 04986 fei_static_substr(big_int); 04987 # endif 04988 04989 data_character_bit_length = list_idx3; 04990 break; 04991 } 04992 04993 cvrt_exp_to_pdg(IL_IDX(list_idx1), 04994 IL_FLD(list_idx1)); 04995 04996 /* The third value is the length. */ 04997 cvrt_exp_to_pdg(IL_IDX(list_idx3), 04998 IL_FLD(list_idx3)); 04999 05000 PDG_DBG_PRINT_START 05001 PDG_DBG_PRINT_C("fei_substr"); 05002 PDG_DBG_PRINT_D("(1) bound_chk", bound_chk); 05003 PDG_DBG_PRINT_END 05004 05005 # ifdef _ENABLE_FEI 05006 fei_substr(bound_chk); 05007 # endif 05008 break; 05009 05010 05011 05012 05013 05014 case Return_Opr : 05015 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05016 IR_FLD_L(ir_idx)); 05017 05018 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 05019 IR_FLD_R(ir_idx)); 05020 05021 if (IR_IDX_L(ir_idx) != NULL_IDX) { 05022 return_kind = Alternate_Return; 05023 } 05024 else if (IR_IDX_R(ir_idx) != NULL_IDX) { 05025 return_kind = Normal_Return; 05026 } 05027 else { 05028 return_kind = Void_Return; 05029 } 05030 05031 PDG_DBG_PRINT_START 05032 PDG_DBG_PRINT_C("fei_return"); 05033 PDG_DBG_PRINT_S("(1) return_kind", p_return[return_kind]); 05034 PDG_DBG_PRINT_T("(2) type", pdg_type_void); 05035 PDG_DBG_PRINT_END 05036 05037 # ifdef _ENABLE_FEI 05038 fei_return(return_kind, pdg_type_void); 05039 # endif 05040 break; 05041 05042 05043 05044 05045 case Stop_Opr: 05046 # ifdef _STOP_IS_OPR 05047 /* stop code is in list item on right */ 05048 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 05049 IR_FLD_R(ir_idx)); 05050 05051 PDG_DBG_PRINT_START 05052 PDG_DBG_PRINT_C("fei_stop"); 05053 PDG_DBG_PRINT_END 05054 05055 # ifdef _ENABLE_FEI 05056 fei_stop(); 05057 # endif 05058 05059 # else 05060 PRINTMSG(IR_LINE_NUM(ir_idx), 626, Internal, 05061 IR_COL_NUM(ir_idx), 05062 "no Stop_Opr", "cvrt_exp_to_pdg"); 05063 # endif 05064 break; 05065 05066 05067 05068 05069 05070 05071 case Matmul_Opr : 05072 case Spread_Opr : 05073 case Reshape_Opr : 05074 case Transpose_Opr : 05075 case Sum_Opr : 05076 case Eoshift_Opr : 05077 case Maxval_Opr : 05078 case Minval_Opr : 05079 case Maxloc_Opr : 05080 case Minloc_Opr : 05081 case All_Opr : 05082 case Any_Opr : 05083 case Count_Opr : 05084 case Product_Opr : 05085 case Unpack_Opr : 05086 case Pack_Opr : 05087 case Cshift_Opr : 05088 case Dot_Product_Opr : 05089 case Dot_Product_Logical_Opr : 05090 processing_call = processing_call + 1; 05091 05092 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05093 IR_FLD_L(ir_idx)); 05094 05095 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 05096 05097 switch (IR_OPR(ir_idx)) { 05098 case Matmul_Opr : 05099 PDG_DBG_PRINT_START 05100 PDG_DBG_PRINT_C("fei_matmul"); 05101 PDG_DBG_PRINT_END 05102 # ifdef _ENABLE_FEI 05103 fei_matmul(basic); 05104 # endif 05105 break; 05106 05107 case Spread_Opr : 05108 PDG_DBG_PRINT_START 05109 PDG_DBG_PRINT_C("fei_spread"); 05110 PDG_DBG_PRINT_END 05111 # ifdef _ENABLE_FEI 05112 fei_spread(basic); 05113 # endif 05114 break; 05115 05116 case Reshape_Opr : 05117 PDG_DBG_PRINT_START 05118 PDG_DBG_PRINT_C("fei_reshape"); 05119 PDG_DBG_PRINT_END 05120 # ifdef _ENABLE_FEI 05121 fei_reshape(basic); 05122 # endif 05123 break; 05124 05125 case Transpose_Opr : 05126 PDG_DBG_PRINT_START 05127 PDG_DBG_PRINT_C("fei_transpose"); 05128 PDG_DBG_PRINT_END 05129 # ifdef _ENABLE_FEI 05130 fei_transpose(basic); 05131 # endif 05132 break; 05133 05134 case Sum_Opr : 05135 PDG_DBG_PRINT_START 05136 PDG_DBG_PRINT_C("fei_sum"); 05137 PDG_DBG_PRINT_END 05138 # ifdef _ENABLE_FEI 05139 fei_sum(basic); 05140 # endif 05141 break; 05142 05143 case Eoshift_Opr : 05144 PDG_DBG_PRINT_START 05145 PDG_DBG_PRINT_C("fei_eoshift"); 05146 PDG_DBG_PRINT_END 05147 # ifdef _ENABLE_FEI 05148 fei_eoshift(basic); 05149 # endif 05150 break; 05151 05152 case Maxval_Opr : 05153 PDG_DBG_PRINT_START 05154 PDG_DBG_PRINT_C("fei_maxval"); 05155 PDG_DBG_PRINT_END 05156 # ifdef _ENABLE_FEI 05157 fei_maxval(basic); 05158 # endif 05159 break; 05160 05161 case Minval_Opr : 05162 PDG_DBG_PRINT_START 05163 PDG_DBG_PRINT_C("fei_minval"); 05164 PDG_DBG_PRINT_END 05165 # ifdef _ENABLE_FEI 05166 fei_minval(basic); 05167 # endif 05168 break; 05169 05170 case Maxloc_Opr : 05171 PDG_DBG_PRINT_START 05172 PDG_DBG_PRINT_C("fei__maxloc"); 05173 PDG_DBG_PRINT_END 05174 # ifdef _ENABLE_FEI 05175 fei__maxloc(basic); 05176 # endif 05177 break; 05178 05179 case Minloc_Opr : 05180 PDG_DBG_PRINT_START 05181 PDG_DBG_PRINT_C("fei__minloc"); 05182 PDG_DBG_PRINT_END 05183 # ifdef _ENABLE_FEI 05184 fei__minloc(basic); 05185 # endif 05186 break; 05187 05188 case All_Opr : 05189 PDG_DBG_PRINT_START 05190 PDG_DBG_PRINT_C("fei_all"); 05191 PDG_DBG_PRINT_END 05192 # ifdef _ENABLE_FEI 05193 fei_all(basic); 05194 # endif 05195 break; 05196 05197 case Any_Opr : 05198 PDG_DBG_PRINT_START 05199 PDG_DBG_PRINT_C("fei_any"); 05200 PDG_DBG_PRINT_END 05201 # ifdef _ENABLE_FEI 05202 fei_any(basic); 05203 # endif 05204 break; 05205 05206 case Count_Opr : 05207 PDG_DBG_PRINT_START 05208 PDG_DBG_PRINT_C("fei_count"); 05209 PDG_DBG_PRINT_END 05210 # ifdef _ENABLE_FEI 05211 fei_count(basic); 05212 # endif 05213 break; 05214 05215 case Product_Opr : 05216 PDG_DBG_PRINT_START 05217 PDG_DBG_PRINT_C("fei_product"); 05218 PDG_DBG_PRINT_END 05219 # ifdef _ENABLE_FEI 05220 fei_product(basic); 05221 # endif 05222 break; 05223 05224 case Unpack_Opr : 05225 PDG_DBG_PRINT_START 05226 PDG_DBG_PRINT_C("fei_unpack"); 05227 PDG_DBG_PRINT_END 05228 # ifdef _ENABLE_FEI 05229 fei_unpack(basic); 05230 # endif 05231 break; 05232 05233 case Pack_Opr : 05234 PDG_DBG_PRINT_START 05235 PDG_DBG_PRINT_C("fei_pack"); 05236 PDG_DBG_PRINT_END 05237 # ifdef _ENABLE_FEI 05238 fei_pack(basic); 05239 # endif 05240 break; 05241 05242 case Cshift_Opr : 05243 PDG_DBG_PRINT_START 05244 PDG_DBG_PRINT_C("fei_cshift"); 05245 PDG_DBG_PRINT_END 05246 # ifdef _ENABLE_FEI 05247 fei_cshift(basic); 05248 # endif 05249 break; 05250 05251 case Dot_Product_Opr : 05252 PDG_DBG_PRINT_START 05253 PDG_DBG_PRINT_C("fei_dot_product"); 05254 PDG_DBG_PRINT_END 05255 # ifdef _ENABLE_FEI 05256 fei_dot_product(basic); 05257 # endif 05258 break; 05259 05260 case Dot_Product_Logical_Opr : 05261 PDG_DBG_PRINT_START 05262 PDG_DBG_PRINT_C("fei_dot_product_logical)"); 05263 PDG_DBG_PRINT_END 05264 # if defined(GENERATE_WHIRL) 05265 # ifdef _ENABLE_FEI 05266 fei_dot_product_logical(basic); 05267 # endif 05268 # endif 05269 break; 05270 } 05271 05272 processing_call = processing_call - 1; 05273 break; 05274 05275 05276 05277 05278 05279 05280 05281 05282 05283 05284 05285 05286 case Memory_Barrier_Opr : 05287 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05288 IR_FLD_L(ir_idx)); 05289 05290 PDG_DBG_PRINT_START 05291 PDG_DBG_PRINT_C("fei_loc_cmr"); 05292 PDG_DBG_PRINT_END 05293 05294 # ifdef _ENABLE_FEI 05295 fei_loc_cmr(); 05296 # endif 05297 break; 05298 05299 05300 05301 05302 05303 case Write_Memory_Barrier_Opr : 05304 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05305 IR_FLD_L(ir_idx)); 05306 05307 PDG_DBG_PRINT_START 05308 PDG_DBG_PRINT_C("fei_wmb"); 05309 PDG_DBG_PRINT_END 05310 05311 # ifdef _ENABLE_FEI 05312 fei_wmb(); 05313 # endif 05314 break; 05315 05316 05317 05318 05319 05320 05321 case Remote_Write_Barrier_Opr : 05322 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05323 IR_FLD_L(ir_idx)); 05324 05325 PDG_DBG_PRINT_START 05326 PDG_DBG_PRINT_C("fei_rem_cmr"); 05327 PDG_DBG_PRINT_END 05328 05329 # ifdef _ENABLE_FEI 05330 fei_rem_cmr(); 05331 # endif 05332 break; 05333 05334 05335 05336 05337 05338 05339 05340 case Get_Ieee_Status_Opr : 05341 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05342 IR_FLD_L(ir_idx)); 05343 05344 PDG_DBG_PRINT_START 05345 PDG_DBG_PRINT_C("fei_readsr"); 05346 PDG_DBG_PRINT_END 05347 05348 # ifdef _ENABLE_FEI 05349 fei_readsr(); 05350 # endif 05351 break; 05352 05353 05354 05355 05356 05357 case Set_Ieee_Status_Opr : 05358 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05359 IR_FLD_L(ir_idx)); 05360 05361 PDG_DBG_PRINT_START 05362 PDG_DBG_PRINT_C("fei_set_ieee_stat"); 05363 PDG_DBG_PRINT_END 05364 05365 # ifdef _ENABLE_FEI 05366 fei_set_ieee_stat(); 05367 # endif 05368 break; 05369 05370 05371 05372 05373 05374 case Get_Ieee_Exceptions_Opr : 05375 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05376 IR_FLD_L(ir_idx)); 05377 05378 PDG_DBG_PRINT_START 05379 PDG_DBG_PRINT_C("fei_get_all_estat"); 05380 PDG_DBG_PRINT_END 05381 05382 # ifdef _ENABLE_FEI 05383 fei_get_all_estat(); 05384 # endif 05385 break; 05386 05387 05388 05389 05390 05391 case Set_Ieee_Exceptions_Opr : 05392 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05393 IR_FLD_L(ir_idx)); 05394 05395 PDG_DBG_PRINT_START 05396 PDG_DBG_PRINT_C("fei_set_all_estat"); 05397 PDG_DBG_PRINT_END 05398 05399 # ifdef _ENABLE_FEI 05400 fei_set_all_estat(); 05401 # endif 05402 break; 05403 05404 05405 05406 05407 05408 case Test_Ieee_Exception_Opr : 05409 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05410 IR_FLD_L(ir_idx)); 05411 05412 PDG_DBG_PRINT_START 05413 PDG_DBG_PRINT_C("fei_test_estat"); 05414 PDG_DBG_PRINT_END 05415 05416 # ifdef _ENABLE_FEI 05417 fei_test_estat(); 05418 # endif 05419 break; 05420 05421 05422 05423 05424 05425 case Clear_Ieee_Exception_Opr : 05426 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05427 IR_FLD_L(ir_idx)); 05428 05429 PDG_DBG_PRINT_START 05430 PDG_DBG_PRINT_C("fei_set_estat"); 05431 PDG_DBG_PRINT_END 05432 05433 # ifdef _ENABLE_FEI 05434 fei_set_estat(); 05435 # endif 05436 break; 05437 05438 05439 05440 05441 05442 case Set_Ieee_Exception_Opr : 05443 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05444 IR_FLD_L(ir_idx)); 05445 05446 PDG_DBG_PRINT_START 05447 PDG_DBG_PRINT_C("fei_set_estat"); 05448 PDG_DBG_PRINT_END 05449 05450 # ifdef _ENABLE_FEI 05451 fei_set_estat(); 05452 # endif 05453 break; 05454 05455 05456 05457 05458 05459 case Get_Ieee_Interrupts_Opr : 05460 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05461 IR_FLD_L(ir_idx)); 05462 05463 PDG_DBG_PRINT_START 05464 PDG_DBG_PRINT_C("fei_get_interupt"); 05465 PDG_DBG_PRINT_END 05466 05467 # ifdef _ENABLE_FEI 05468 fei_get_interupt(); 05469 # endif 05470 break; 05471 05472 05473 05474 05475 case Set_Ieee_Interrupts_Opr : 05476 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05477 IR_FLD_L(ir_idx)); 05478 05479 PDG_DBG_PRINT_START 05480 PDG_DBG_PRINT_C("fei_set_interupt"); 05481 PDG_DBG_PRINT_END 05482 05483 # ifdef _ENABLE_FEI 05484 fei_set_interupt(); 05485 # endif 05486 break; 05487 05488 05489 05490 05491 05492 case Test_Ieee_Interrupt_Opr : 05493 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05494 IR_FLD_L(ir_idx)); 05495 05496 PDG_DBG_PRINT_START 05497 PDG_DBG_PRINT_C("fei_test_interupt"); 05498 PDG_DBG_PRINT_END 05499 05500 # ifdef _ENABLE_FEI 05501 fei_test_interupt(); 05502 # endif 05503 break; 05504 05505 05506 05507 05508 05509 05510 05511 05512 case Enable_Ieee_Interrupt_Opr : 05513 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05514 IR_FLD_L(ir_idx)); 05515 05516 PDG_DBG_PRINT_START 05517 PDG_DBG_PRINT_C("fei_enbl_interupt"); 05518 PDG_DBG_PRINT_END 05519 05520 # ifdef _ENABLE_FEI 05521 fei_enbl_interupt(); 05522 # endif 05523 break; 05524 05525 05526 05527 05528 05529 05530 05531 case Disable_Ieee_Interrupt_Opr : 05532 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05533 IR_FLD_L(ir_idx)); 05534 05535 PDG_DBG_PRINT_START 05536 PDG_DBG_PRINT_C("fei_dsbl_interupt"); 05537 PDG_DBG_PRINT_END 05538 05539 # ifdef _ENABLE_FEI 05540 fei_dsbl_interupt(); 05541 # endif 05542 break; 05543 05544 05545 05546 05547 05548 case Get_Ieee_Rounding_Mode_Opr : 05549 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05550 IR_FLD_L(ir_idx)); 05551 05552 PDG_DBG_PRINT_START 05553 PDG_DBG_PRINT_C("fei_get_rmode"); 05554 PDG_DBG_PRINT_END 05555 05556 # ifdef _ENABLE_FEI 05557 fei_get_rmode(); 05558 # endif 05559 break; 05560 05561 05562 05563 05564 case Set_Ieee_Rounding_Mode_Opr : 05565 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05566 IR_FLD_L(ir_idx)); 05567 05568 PDG_DBG_PRINT_START 05569 PDG_DBG_PRINT_C("fei_set_rmode"); 05570 PDG_DBG_PRINT_END 05571 05572 # ifdef _ENABLE_FEI 05573 fei_set_rmode(); 05574 # endif 05575 break; 05576 05577 05578 05579 05580 05581 05582 05583 05584 05585 05586 05587 05588 05589 05590 05591 05592 05593 05594 05595 05596 05597 05598 case Alloc_Opr : 05599 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05600 IR_FLD_L(ir_idx)); 05601 05602 PDG_DBG_PRINT_START 05603 PDG_DBG_PRINT_C("fei_alloc"); 05604 PDG_DBG_PRINT_END 05605 05606 # ifdef _ENABLE_FEI 05607 fei_alloc(); 05608 # endif 05609 break; 05610 05611 05612 05613 05614 case Malloc_Opr : 05615 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05616 IR_FLD_L(ir_idx)); 05617 05618 PDG_DBG_PRINT_START 05619 PDG_DBG_PRINT_C("fei_malloc"); 05620 PDG_DBG_PRINT_END 05621 05622 # ifdef _ENABLE_FEI 05623 # if defined(GENERATE_WHIRL) 05624 fei_malloc(); 05625 # endif 05626 # endif 05627 break; 05628 05629 05630 05631 05632 05633 case SSD_Alloc_Opr : 05634 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05635 IR_FLD_L(ir_idx)); 05636 05637 PDG_DBG_PRINT_START 05638 PDG_DBG_PRINT_C("fei_ssd_alloc"); 05639 PDG_DBG_PRINT_END 05640 05641 # ifdef _ENABLE_FEI 05642 fei_ssd_alloc(); 05643 # endif 05644 break; 05645 05646 05647 05648 05649 case Symmetric_Alloc_Opr : 05650 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05651 IR_FLD_L(ir_idx)); 05652 05653 PDG_DBG_PRINT_START 05654 PDG_DBG_PRINT_C("fei_mpp_symmetric_alloc"); 05655 PDG_DBG_PRINT_END 05656 05657 # ifdef _ENABLE_FEI 05658 fei_mpp_symmetric_alloc(); 05659 # endif 05660 break; 05661 05662 05663 05664 05665 05666 case Dealloc_Opr : 05667 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05668 IR_FLD_L(ir_idx)); 05669 05670 PDG_DBG_PRINT_START 05671 PDG_DBG_PRINT_C("fei_free"); 05672 PDG_DBG_PRINT_END 05673 05674 # ifdef _ENABLE_FEI 05675 fei_free(); 05676 # endif 05677 break; 05678 05679 05680 05681 05682 case Free_Opr : 05683 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05684 IR_FLD_L(ir_idx)); 05685 05686 PDG_DBG_PRINT_START 05687 PDG_DBG_PRINT_C("fei_mfree"); 05688 PDG_DBG_PRINT_END 05689 05690 # ifdef _ENABLE_FEI 05691 # if defined(GENERATE_WHIRL) 05692 fei_mfree(); 05693 # endif 05694 # endif 05695 break; 05696 05697 05698 05699 05700 05701 05702 case SSD_Dealloc_Opr : 05703 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05704 IR_FLD_L(ir_idx)); 05705 05706 PDG_DBG_PRINT_START 05707 PDG_DBG_PRINT_C("fei_ssd_free"); 05708 PDG_DBG_PRINT_END 05709 05710 # ifdef _ENABLE_FEI 05711 fei_ssd_free(); 05712 # endif 05713 break; 05714 05715 05716 05717 case Symmetric_Dealloc_Opr : 05718 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05719 IR_FLD_L(ir_idx)); 05720 05721 PDG_DBG_PRINT_START 05722 PDG_DBG_PRINT_C("fei_mpp_symmetric_free"); 05723 PDG_DBG_PRINT_END 05724 05725 # ifdef _ENABLE_FEI 05726 fei_mpp_symmetric_free(); 05727 # endif 05728 break; 05729 05730 05731 05732 05733 case Copyin_Bound_Opr : 05734 # if defined(GENERATE_WHIRL) 05735 send_attr_ntry(IR_IDX_L(ir_idx)); 05736 05737 PDG_DBG_PRINT_START 05738 PDG_DBG_PRINT_C("fei_copyin_bound"); 05739 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", PDG_AT_IDX(IR_IDX_L(ir_idx))); 05740 PDG_DBG_PRINT_END 05741 05742 # ifdef _ENABLE_FEI 05743 fei_copyin_bound(PDG_AT_IDX(IR_IDX_L(ir_idx))); 05744 # endif 05745 # endif 05746 break; 05747 05748 05749 05750 case Copy_In_Opr : 05751 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05752 IR_FLD_L(ir_idx)); 05753 05754 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 05755 IR_FLD_R(ir_idx)); 05756 05757 PDG_DBG_PRINT_START 05758 PDG_DBG_PRINT_C("fei_copyin"); 05759 PDG_DBG_PRINT_END 05760 05761 # ifdef _ENABLE_FEI 05762 fei_copyin(); 05763 # endif 05764 break; 05765 05766 05767 05768 05769 05770 05771 case Copy_Out_Opr : 05772 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05773 IR_FLD_L(ir_idx)); 05774 05775 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 05776 IR_FLD_R(ir_idx)); 05777 05778 PDG_DBG_PRINT_START 05779 PDG_DBG_PRINT_C("fei_copyout"); 05780 PDG_DBG_PRINT_END 05781 05782 # ifdef _ENABLE_FEI 05783 fei_copyout(); 05784 # endif 05785 break; 05786 05787 case Kwd_Opr: /*FMZ August 2005 */ 05788 #ifdef SOURCE_TO_SOURCE 05789 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), /* Kwd */ 05790 IR_FLD_L(ir_idx)); 05791 #endif 05792 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), /* argument */ 05793 IR_FLD_R(ir_idx)); 05794 break; 05795 05796 case Struct_Opr : 05797 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05798 IR_FLD_L(ir_idx)); 05799 05800 data_attr = NULL_IDX; 05801 member = TRUE; 05802 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 05803 IR_FLD_R(ir_idx)); 05804 member = FALSE; 05805 05806 if (stack_data_object) { 05807 break; 05808 } 05809 05810 if (IR_FLD_L(ir_idx)==AT_Tbl_Idx ) 05811 type_idx = ATD_TYPE_IDX(IR_IDX_L(ir_idx)); 05812 else 05813 type_idx = IR_TYPE_IDX(IR_IDX_L(ir_idx)); 05814 05815 basic = get_basic_type(type_idx,0, NULL_IDX); 05816 05817 PDG_DBG_PRINT_START 05818 PDG_DBG_PRINT_C("fei_field_dot"); 05819 PDG_DBG_PRINT_END 05820 05821 # ifdef _ENABLE_FEI 05822 # if 0 05823 fei_field_dot(null_type); 05824 # else 05825 fei_field_dot(basic); 05826 # endif 05827 05828 # endif 05829 05830 break; 05831 05832 05833 05834 05835 05836 05837 case Triplet_Opr : 05838 05839 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 05840 IR_FLD_L(ir_idx)); 05841 05842 PDG_DBG_PRINT_START 05843 PDG_DBG_PRINT_C("fei_subscr_triplet"); 05844 PDG_DBG_PRINT_END 05845 05846 # ifdef _ENABLE_FEI 05847 /* fei_subscr_triplet(pdg_type_void); */ 05848 fei_subscr_src_triplet(pdg_type_void); 05849 # endif 05850 break; 05851 05852 05853 05854 05855 case Max_Opr : 05856 case Min_Opr : 05857 tmp_ir_idx = IR_IDX_L(ir_idx); 05858 count = 0; 05859 while (tmp_ir_idx != NULL_IDX) { 05860 if (IL_IDX(tmp_ir_idx) != NULL_IDX) { 05861 cvrt_exp_to_pdg(IL_IDX(tmp_ir_idx), 05862 IL_FLD(tmp_ir_idx)); 05863 05864 count = count + 1; 05865 } 05866 tmp_ir_idx = IL_NEXT_LIST_IDX(tmp_ir_idx); 05867 } 05868 05869 basic = get_basic_type(IR_TYPE_IDX(ir_idx),0, NULL_IDX); 05870 05871 if (IR_OPR(ir_idx) == Min_Opr) { 05872 PDG_DBG_PRINT_START 05873 PDG_DBG_PRINT_C("fei_min"); 05874 PDG_DBG_PRINT_D("(1) count", count); 05875 PDG_DBG_PRINT_T("(2) type", basic); 05876 PDG_DBG_PRINT_END 05877 # ifdef _ENABLE_FEI 05878 fei_min(count, basic); 05879 # endif 05880 } 05881 else { 05882 PDG_DBG_PRINT_START 05883 PDG_DBG_PRINT_C("fei_max"); 05884 PDG_DBG_PRINT_D("(1) count", count); 05885 PDG_DBG_PRINT_T("(2) type", basic); 05886 PDG_DBG_PRINT_END 05887 # ifdef _ENABLE_FEI 05888 fei_max(count, basic); 05889 # endif 05890 } 05891 break; 05892 05893 05894 05895 05896 05897 05898 05899 case Implied_Do_Opr : 05900 if (processing_io_stmt) 05901 { 05902 if (static_initialization) { 05903 /* skip over DO control variable before starting loop */ 05904 search_idx = IL_NEXT_LIST_IDX(IR_IDX_R(ir_idx)); 05905 05906 trip = 1; 05907 while (trip != 4) { 05908 if (trip == 1) { /* start */ 05909 COPY_OPND(l_opnd, IL_OPND(search_idx)); 05910 vv = 1; 05911 cn_idx = get_next_array_expr_element(&l_opnd, &vv); 05912 COPY_OPND(IL_OPND(search_idx), l_opnd); 05913 start = CN_INT_TO_C(cn_idx); 05914 } 05915 05916 if (trip == 2) { /* end */ 05917 COPY_OPND(l_opnd, IL_OPND(search_idx)); 05918 vv = 1; 05919 cn_idx = get_next_array_expr_element(&l_opnd, &vv); 05920 COPY_OPND(IL_OPND(search_idx), l_opnd); 05921 end = CN_INT_TO_C(cn_idx); 05922 } 05923 05924 if (trip == 3) { /* inc */ 05925 COPY_OPND(l_opnd, IL_OPND(search_idx)); 05926 vv = 1; 05927 cn_idx = get_next_array_expr_element(&l_opnd, &vv); 05928 COPY_OPND(IL_OPND(search_idx), l_opnd); 05929 inc = CN_INT_TO_C(cn_idx); 05930 } 05931 05932 trip = trip + 1; 05933 search_idx = IL_NEXT_LIST_IDX(search_idx); 05934 } 05935 05936 /* Save the guts of the LCV attr. Store them in a constant entry */ 05937 /* pointed to by ATD_TMP_IDX. */ 05938 05939 GET_LCV_CONST(IL_IDX(IR_IDX_R(ir_idx)), 05940 loc_value[0], /* target constant */ 05941 num_host_wds[TYP_LINEAR( 05942 ATD_TYPE_IDX(IL_IDX(IR_IDX_R(ir_idx))))]); 05943 05944 ATD_FLD(IL_IDX(IR_IDX_R(ir_idx))) = CN_Tbl_Idx; 05945 ATD_TMP_IDX(IL_IDX(IR_IDX_R(ir_idx))) = 05946 ntr_const_tbl(ATD_TYPE_IDX(IL_IDX(IR_IDX_R(ir_idx))), 05947 FALSE, 05948 loc_value); 05949 05950 if (inc > 0) { /* run the loop forward */ 05951 for (i = start; i <= end; i = i + inc) { 05952 05953 if (search_idx == NULL_IDX) { 05954 cn_idx = C_INT_TO_CN(NULL_IDX, i); /* Macro sets type */ 05955 } 05956 else { 05957 COPY_OPND(l_opnd, IL_OPND(search_idx)); 05958 vv = i; 05959 cn_idx = get_next_array_expr_element(&l_opnd, &vv); 05960 COPY_OPND(IL_OPND(search_idx), l_opnd); 05961 } 05962 05963 SET_LCV_CONST(IL_IDX(IR_IDX_R(ir_idx)), 05964 CN_CONST(cn_idx), 05965 num_host_wds[TYP_LINEAR( 05966 ATD_TYPE_IDX(IL_IDX(IR_IDX_R(ir_idx))))]); 05967 05968 t_idx = IR_IDX_L(ir_idx); 05969 while (t_idx != NULL_IDX) { 05970 05971 if ((IL_FLD(t_idx) == IR_Tbl_Idx) && 05972 (IR_OPR(IL_IDX(t_idx)) == Implied_Do_Opr)) { 05973 cvrt_exp_to_pdg(IL_IDX(t_idx), 05974 IL_FLD(t_idx)); 05975 } 05976 else { 05977 blank_pad_text = IL_IDX(t_idx); 05978 push_data_value(t_idx); 05979 } 05980 05981 t_idx = IL_NEXT_LIST_IDX(t_idx); 05982 } 05983 } 05984 } 05985 else { /* increment is <= 0 */ 05986 for (i = start; i >= end; i = i + inc) { 05987 05988 if (search_idx == NULL_IDX) { 05989 cn_idx = C_INT_TO_CN(NULL_IDX, i); /* Macro sets type */ 05990 } 05991 else { 05992 COPY_OPND(l_opnd, IL_OPND(search_idx)); 05993 vv = i; 05994 cn_idx = get_next_array_expr_element(&l_opnd, &vv); 05995 COPY_OPND(IL_OPND(search_idx), l_opnd); 05996 } 05997 05998 SET_LCV_CONST(IL_IDX(IR_IDX_R(ir_idx)), 05999 CN_CONST(cn_idx), 06000 num_host_wds[TYP_LINEAR( 06001 ATD_TYPE_IDX(IL_IDX(IR_IDX_R(ir_idx))))]); 06002 06003 t_idx = IR_IDX_L(ir_idx); 06004 while (t_idx != NULL_IDX) { 06005 06006 if ((IL_FLD(t_idx) == IR_Tbl_Idx) && 06007 (IR_OPR(IL_IDX(t_idx)) == Implied_Do_Opr)) { 06008 cvrt_exp_to_pdg(IL_IDX(t_idx), 06009 IL_FLD(t_idx)); 06010 } 06011 else { 06012 blank_pad_text = IL_IDX(t_idx); 06013 push_data_value(t_idx); 06014 } 06015 06016 t_idx = IL_NEXT_LIST_IDX(t_idx); 06017 } 06018 } 06019 } 06020 06021 /* Restore the guts of the LCV temp attr. */ 06022 SET_LCV_CONST(IL_IDX(IR_IDX_R(ir_idx)), 06023 CN_CONST(ATD_TMP_IDX(IL_IDX(IR_IDX_R(ir_idx)))), 06024 num_host_wds[TYP_LINEAR( 06025 ATD_TYPE_IDX(IL_IDX(IR_IDX_R(ir_idx))))]); 06026 06027 } 06028 else { 06029 search_idx = IR_IDX_R(ir_idx); 06030 while (search_idx != NULL_IDX) { 06031 cvrt_exp_to_pdg(IL_IDX(search_idx), 06032 IL_FLD(search_idx)); 06033 06034 search_idx = IL_NEXT_LIST_IDX(search_idx); 06035 } 06036 06037 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 06038 IR_FLD_L(ir_idx)); 06039 06040 PDG_DBG_PRINT_START 06041 PDG_DBG_PRINT_C("fei_IO_list"); 06042 PDG_DBG_PRINT_D("(1) list count", IR_LIST_CNT_L(ir_idx)); 06043 PDG_DBG_PRINT_S("(2) io_type", p_io[io_type]); 06044 PDG_DBG_PRINT_END 06045 06046 # ifdef _ENABLE_FEI 06047 fei_IO_list(IR_LIST_CNT_L(ir_idx), io_type); 06048 # endif 06049 06050 PDG_DBG_PRINT_START 06051 PDG_DBG_PRINT_C("fei_implied_do"); 06052 PDG_DBG_PRINT_END 06053 06054 # ifdef _ENABLE_FEI 06055 fei_implied_do(); 06056 # endif 06057 06058 } 06059 } 06060 else /*not in IO stmt,therefore don't generate IO_ITEM */ 06061 06062 { 06063 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 06064 IR_FLD_L(ir_idx)); 06065 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 06066 IR_FLD_R(ir_idx)); 06067 06068 PDG_DBG_PRINT_START 06069 PDG_DBG_PRINT_C("fei_noio_implied_do"); 06070 PDG_DBG_PRINT_END 06071 06072 # ifdef _ENABLE_FEI 06073 fei_noio_implied_do(); 06074 # endif 06075 06076 } 06077 break; 06078 06079 06080 06081 06082 06083 case Init_Opr : 06084 if ((IR_FLD_L(ir_idx) == IR_Tbl_Idx) && 06085 (IR_OPR(IR_IDX_L(ir_idx)) == Implied_Do_Opr)) { 06086 06087 static_initialization = TRUE; 06088 06089 data_value_idx = IR_IDX_R(ir_idx); 06090 while (data_value_idx != NULL_IDX) { 06091 if (IL_FLD(data_value_idx) == IR_Tbl_Idx) { 06092 IL_LIST_CNT(data_value_idx) = 06093 CN_INT_TO_C(IR_IDX_L(IL_IDX(data_value_idx))); 06094 } 06095 else { 06096 IL_LIST_CNT(data_value_idx) = 1; 06097 } 06098 data_value_idx = IL_NEXT_LIST_IDX(data_value_idx); 06099 } 06100 data_value_idx = IR_IDX_R(ir_idx); 06101 06102 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 06103 IR_FLD_L(ir_idx)); 06104 06105 static_initialization = FALSE; 06106 } 06107 else { 06108 data_attr = NULL_IDX; 06109 stack_data_object = TRUE; 06110 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), /* stack the object */ 06111 IR_FLD_L(ir_idx)); 06112 stack_data_object = FALSE; 06113 06114 list_idx1 = IR_IDX_R(ir_idx); 06115 stack_data_constant = TRUE; 06116 cvrt_exp_to_pdg(IL_IDX(list_idx1), /* stack the constant */ 06117 IL_FLD(list_idx1)); 06118 stack_data_constant = FALSE; 06119 06120 list_idx2 = IL_NEXT_LIST_IDX(list_idx1); 06121 list_idx3 = IL_NEXT_LIST_IDX(list_idx2); 06122 06123 if (TYP_TYPE(CN_TYPE_IDX(IL_IDX(list_idx1))) == Typeless || 06124 (TYP_TYPE(CN_TYPE_IDX(IL_IDX(list_idx1))) == Character && 06125 TYP_TYPE(ATD_TYPE_IDX(data_attr)) != Character)) { 06126 ignore_types = TRUE; 06127 } 06128 else { 06129 ignore_types = FALSE; 06130 } 06131 rep_count = CN_INT_TO_C(IL_IDX(list_idx2)); 06132 stride = CN_INT_TO_C(IL_IDX(list_idx3)); 06133 06134 # if defined(_TARGET_OS_MAX) || defined(_HOST32) 06135 06136 /* JEFFL - Is this necessary for HOST32 ? */ 06137 if (TYP_LINEAR(CN_TYPE_IDX(IL_IDX(list_idx3))) != Integer_8) { 06138 SIGN_EXTEND(stride); 06139 } 06140 # endif 06141 06142 PDG_DBG_PRINT_START 06143 PDG_DBG_PRINT_C("fei_static_simple_init"); 06144 PDG_DBG_PRINT_LLD("(1) rep_count", rep_count); 06145 PDG_DBG_PRINT_LLD("(2) stride", stride); 06146 PDG_DBG_PRINT_D("(3) ignore_types", ignore_types); 06147 PDG_DBG_PRINT_D("(4) unused", 0); 06148 PDG_DBG_PRINT_END 06149 06150 # ifdef _ENABLE_FEI 06151 fei_static_simple_init(rep_count, 06152 stride, 06153 ignore_types, 06154 0); 06155 # endif 06156 } 06157 06158 break; 06159 06160 06161 06162 case Init_Reloc_Opr : 06163 data_attr = NULL_IDX; 06164 stack_data_object = TRUE; 06165 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), /* stack the object */ 06166 IR_FLD_L(ir_idx)); 06167 stack_data_object = FALSE; 06168 06169 offset = 0; 06170 06171 # ifdef _INIT_RELOC_BASE_OFFSET 06172 06173 offset2.idx = IL_IDX(IL_NEXT_LIST_IDX(IR_IDX_R(ir_idx))); 06174 offset2.fld = IL_FLD(IL_NEXT_LIST_IDX(IR_IDX_R(ir_idx))); 06175 06176 COPY_OPND(opnd, IL_OPND(IR_IDX_R(ir_idx))); 06177 attr_idx = find_left_attr(&opnd); 06178 send_attr_ntry(attr_idx); 06179 offset1.idx = ATD_OFFSET_IDX(attr_idx); 06180 offset1.fld = ATD_OFFSET_FLD(attr_idx); 06181 result.idx = ATD_OFFSET_IDX( 06182 SB_FIRST_ATTR_IDX(ATD_STOR_BLK_IDX(attr_idx))); 06183 result.fld = ATD_OFFSET_FLD( 06184 SB_FIRST_ATTR_IDX(ATD_STOR_BLK_IDX(attr_idx))); 06185 06186 size_offset_binary_calc(&offset1, &result, Minus_Opr, &result); 06187 size_offset_binary_calc(&offset2, &result, Plus_Opr, &result); 06188 06189 /* Someday this may not be a constant. (KAYKAY) */ 06190 06191 if (result.fld == CN_Tbl_Idx) { 06192 offset = CN_INT_TO_C(CN_CONST(result.idx)); 06193 06194 # if defined(_TARGET_OS_MAX) || defined(_HOST32) /* JEFFL - BRIANJ */ 06195 if (TYP_LINEAR(CN_TYPE_IDX(result.idx)) != Integer_8) { 06196 SIGN_EXTEND(offset); 06197 } 06198 # endif 06199 } 06200 else { 06201 offset = F_INT_TO_C(result.constant, TYP_LINEAR(result.type_idx)); 06202 } 06203 06204 attr_idx = SB_FIRST_ATTR_IDX(ATD_STOR_BLK_IDX(attr_idx)); 06205 send_attr_ntry(attr_idx); 06206 06207 OPND_FLD(opnd) = AT_Tbl_Idx; 06208 OPND_IDX(opnd) = attr_idx; 06209 OPND_LINE_NUM(opnd) = IR_LINE_NUM(ir_idx); 06210 OPND_COL_NUM(opnd) = IR_COL_NUM(ir_idx); 06211 06212 if (TYP_TYPE(ATD_TYPE_IDX(attr_idx)) == Character) { 06213 unused = gen_whole_substring(&opnd, 0); 06214 } 06215 06216 /* assumes there is a loc or aloc on top */ 06217 COPY_OPND(IR_OPND_L(IL_IDX(IR_IDX_R(ir_idx))), opnd); 06218 # endif 06219 06220 cvrt_exp_to_pdg(IL_IDX(IR_IDX_R(ir_idx)), 06221 IL_FLD(IR_IDX_R(ir_idx))); 06222 06223 PDG_DBG_PRINT_START 06224 PDG_DBG_PRINT_C("fei_static_simple_reloc_init"); 06225 PDG_DBG_PRINT_LLD("(1) offset", offset); 06226 PDG_DBG_PRINT_LLD("(2) rep count", (long64) 1); 06227 PDG_DBG_PRINT_D("(3) stride", TARGET_BITS_PER_WORD); 06228 PDG_DBG_PRINT_LLD("(4) bit size", (long64) 0); 06229 PDG_DBG_PRINT_D("(5) ignore_types", 1); 06230 PDG_DBG_PRINT_END 06231 06232 # ifdef _ENABLE_FEI 06233 fei_static_simple_reloc_init(offset, 06234 (long64) 1, 06235 (long64) TARGET_BITS_PER_WORD, 06236 (long64) 0, 06237 1); 06238 # endif 06239 break; 06240 06241 06242 06243 case Whole_Subscript_Opr : 06244 case Section_Subscript_Opr: 06245 case Subscript_Opr : 06246 nested_array++; 06247 if (!is_subscript) 06248 is_subscript = TRUE; 06249 06250 whole_subscript = IR_WHOLE_ARRAY(ir_idx); 06251 06252 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 06253 IR_FLD_L(ir_idx)); 06254 06255 whole_subscript = FALSE; 06256 06257 06258 if (IR_OPR(ir_idx) == Whole_Subscript_Opr && 06259 !processing_io_stmt && 06260 IR_CONTIG_ARRAY(ir_idx) != 0 ) { 06261 06262 /* this is a contiguous array. */ 06263 /* call fei_as_ref and ignore subscripts */ 06264 06265 PDG_DBG_PRINT_START 06266 PDG_DBG_PRINT_C("fei_as_ref"); 06267 PDG_DBG_PRINT_END 06268 06269 # ifdef _ENABLE_FEI 06270 fei_as_ref(null_type); 06271 # endif 06272 break; 06273 } 06274 06275 if (IR_OPR(ir_idx) == Whole_Subscript_Opr && 06276 processing_call) { 06277 is_subscript = FALSE; 06278 nested_array = 0; 06279 break; 06280 } 06281 06282 attr_idx = find_base_attr(&IR_OPND_L(ir_idx), &line, &col); 06283 bound_idx = ATD_ARRAY_IDX(attr_idx); 06284 # if defined(COARRAY_FORTRAN) 06285 pe_bd_idx = ATD_PE_ARRAY_IDX(attr_idx); 06286 # endif 06287 06288 base_attr = find_left_attr(&(IR_OPND_L(ir_idx))); 06289 06290 bound_chk = (cdir_switches.bounds || 06291 ATD_BOUNDS_CHECK(base_attr)) && 06292 !ATD_NOBOUNDS_CHECK(base_attr); 06293 06294 bound_chk &= ! (IR_WHOLE_ARRAY(ir_idx)); 06295 06296 if (IR_BOUNDS_DONE(ir_idx)) { 06297 bound_chk = FALSE; 06298 } 06299 06300 next_idx = IR_IDX_R(ir_idx); 06301 dim = IR_LIST_CNT_R(ir_idx); 06302 /* while (dim != 1) { */ 06303 while (dim > 1) { 06304 next_idx = IL_NEXT_LIST_IDX(next_idx); 06305 dim = dim - 1; 06306 } 06307 06308 /* dim = IR_LIST_CNT_R(ir_idx); */ 06309 dim = BD_RANK(bound_idx); 06310 ss = 0; 06311 06312 # if defined(COARRAY_FORTRAN) 06313 /* co_dim could be 0 if the coarray referenced without co_rank */ 06314 /* co_dim = BD_RANK(pe_bd_idx); */ 06315 06316 co_dim = IR_LIST_CNT_R(ir_idx)-BD_RANK(bound_idx); 06317 06318 while (co_dim > 0) { 06319 06320 if (stack_data_object) { 06321 COPY_OPND(l_opnd, IL_OPND(next_idx)); 06322 /* l_opnd will always be a scalar expression here */ 06323 vv = 1; 06324 cn_idx = get_next_array_expr_element(&l_opnd, &vv); 06325 COPY_OPND(IL_OPND(next_idx), l_opnd); 06326 static_subscripts[ss] = CN_INT_TO_C(cn_idx); 06327 06328 # if defined(_TARGET_OS_MAX) || defined(_HOST32) /* JEFFL */ 06329 if (TYP_LINEAR(CN_TYPE_IDX(cn_idx)) != Integer_8) { 06330 SIGN_EXTEND(static_subscripts[ss]); 06331 } 06332 # endif 06333 goto CONTINUE_CO; 06334 } 06335 06336 cvrt_exp_to_pdg(IL_IDX(next_idx), 06337 IL_FLD(next_idx)); 06338 06339 if (ATD_IM_A_DOPE(attr_idx)) { 06340 cvrt_exp_to_pdg(IR_IDX_L(IR_IDX_L(ir_idx)), 06341 IR_FLD_L(IR_IDX_L(ir_idx))); 06342 06343 PDG_DBG_PRINT_START 06344 PDG_DBG_PRINT_C("fei_get_dv_low_bnd"); 06345 PDG_DBG_PRINT_D("(1) dim", dim); 06346 PDG_DBG_PRINT_D("(2) expand immed", EXPAND); 06347 PDG_DBG_PRINT_END 06348 # ifdef _ENABLE_FEI 06349 fei_get_dv_low_bnd(dim, EXPAND); 06350 # endif 06351 } 06352 # if defined(COARRAY_FORTRAN) && defined(_TARGET_OS_MAX) 06353 else if (IL_PE_SUBSCRIPT(next_idx)) { 06354 cvrt_exp_to_pdg(CN_INTEGER_ONE_IDX, 06355 CN_Tbl_Idx); 06356 } 06357 # endif 06358 else { 06359 if (BD_ARRAY_CLASS(pe_bd_idx)!= Deferred_Shape && 06360 BD_ARRAY_CLASS(pe_bd_idx)!= Deferred_Shape1) 06361 06362 cvrt_exp_to_pdg(BD_LB_IDX(pe_bd_idx, co_dim), 06363 BD_LB_FLD(pe_bd_idx, co_dim)); 06364 else fei_implicit_expr(); 06365 } 06366 06367 if (ATD_IM_A_DOPE(attr_idx)) { 06368 cvrt_exp_to_pdg(IR_IDX_L(IR_IDX_L(ir_idx)), 06369 IR_FLD_L(IR_IDX_L(ir_idx))); 06370 06371 PDG_DBG_PRINT_START 06372 PDG_DBG_PRINT_C("fei_get_dv_extent"); 06373 PDG_DBG_PRINT_D("(1) dim", dim); 06374 PDG_DBG_PRINT_D("(2) expand immed", EXPAND); 06375 PDG_DBG_PRINT_END 06376 # ifdef _ENABLE_FEI 06377 fei_get_dv_extent(dim, EXPAND); 06378 # endif 06379 } 06380 # if defined(COARRAY_FORTRAN) && defined(_TARGET_OS_MAX) 06381 else if (IL_PE_SUBSCRIPT(next_idx)) { 06382 cvrt_exp_to_pdg(BD_LEN_IDX(pe_bd_idx), 06383 BD_LEN_FLD(pe_bd_idx)); 06384 } 06385 # endif 06386 else { 06387 if (BD_ARRAY_CLASS(pe_bd_idx)!= Deferred_Shape && 06388 BD_ARRAY_CLASS(pe_bd_idx)!= Deferred_Shape1) 06389 cvrt_exp_to_pdg(BD_XT_IDX(pe_bd_idx, co_dim), 06390 BD_XT_FLD(pe_bd_idx, co_dim)); 06391 else fei_implicit_expr(); 06392 } 06393 06394 if (ATD_IM_A_DOPE(attr_idx)) { 06395 cvrt_exp_to_pdg(IR_IDX_L(IR_IDX_L(ir_idx)), 06396 IR_FLD_L(IR_IDX_L(ir_idx))); 06397 06398 PDG_DBG_PRINT_START 06399 PDG_DBG_PRINT_C("fei_get_dv_str_mult"); 06400 PDG_DBG_PRINT_D("(1) dim", dim); 06401 PDG_DBG_PRINT_D("(2) expand immed", EXPAND); 06402 PDG_DBG_PRINT_END 06403 # ifdef _ENABLE_FEI 06404 fei_get_dv_str_mult(dim, EXPAND); 06405 # endif 06406 } 06407 # if defined(_EXTENDED_CRI_CHAR_POINTER) 06408 else if (AT_OBJ_CLASS(attr_idx) == Data_Obj && 06409 ATD_CLASS(attr_idx) == CRI_Pointee && 06410 TYP_TYPE(ATD_TYPE_IDX(attr_idx)) == Character && 06411 TYP_CHAR_CLASS(ATD_TYPE_IDX(attr_idx)) == 06412 Assumed_Size_Char) { 06413 cvrt_exp_to_pdg(BD_SM_IDX(pe_bd_idx, co_dim), 06414 BD_SM_FLD(pe_bd_idx, co_dim)); 06415 06416 cvrt_exp_to_pdg(attr_idx, AT_Tbl_Idx); 06417 06418 basic = get_basic_type(ATD_TYPE_IDX(attr_idx), 06419 ATD_ALIGNMENT(attr_idx), 06420 attr_idx); 06421 06422 PDG_DBG_PRINT_START 06423 PDG_DBG_PRINT_C("fei_len"); 06424 PDG_DBG_PRINT_END 06425 06426 # ifdef _ENABLE_FEI 06427 /* fei_len(basic); */ 06428 fei_len(); 06429 # endif 06430 06431 basic = get_basic_type(INTEGER_DEFAULT_TYPE, 06432 type_alignment_tbl[INTEGER_DEFAULT_TYPE], 06433 NULL_IDX); 06434 06435 PDG_DBG_PRINT_START 06436 PDG_DBG_PRINT_C("fei_mult"); 06437 PDG_DBG_PRINT_END 06438 06439 # ifdef _ENABLE_FEI 06440 fei_mult(basic); 06441 # endif 06442 } 06443 # endif 06444 # if defined(COARRAY_FORTRAN) && defined(_TARGET_OS_MAX) 06445 else if (IL_PE_SUBSCRIPT(next_idx)) { 06446 cvrt_exp_to_pdg(CN_INTEGER_ONE_IDX, 06447 CN_Tbl_Idx); 06448 } 06449 # endif 06450 else { 06451 if (BD_ARRAY_CLASS(pe_bd_idx)!= Deferred_Shape && 06452 BD_ARRAY_CLASS(pe_bd_idx)!= Deferred_Shape1) 06453 06454 cvrt_exp_to_pdg(BD_SM_IDX(pe_bd_idx, co_dim), 06455 BD_SM_FLD(pe_bd_idx, co_dim)); 06456 else fei_implicit_expr(); 06457 } 06458 06459 if (BD_ARRAY_CLASS(pe_bd_idx) == Assumed_Size) { 06460 if (BD_RANK(pe_bd_idx) == IR_LIST_CNT_R(ir_idx) && ss == 0) { 06461 bound_chk = FALSE; 06462 } 06463 } 06464 06465 PDG_DBG_PRINT_START 06466 PDG_DBG_PRINT_C("fei_subscr_size"); 06467 PDG_DBG_PRINT_T("(1) type", pdg_type_void); 06468 PDG_DBG_PRINT_D("(2) bound_chk", bound_chk); 06469 PDG_DBG_PRINT_END 06470 # ifdef _ENABLE_FEI 06471 fei_subscr_size(pdg_type_void, bound_chk); 06472 # endif 06473 06474 if (ATD_IM_A_DOPE(attr_idx)) { 06475 PDG_DBG_PRINT_START 06476 PDG_DBG_PRINT_C("fei_nseq_subscr"); 06477 PDG_DBG_PRINT_T("(1) type", null_type); 06478 PDG_DBG_PRINT_END 06479 # ifdef _ENABLE_FEI 06480 fei_nseq_subscr(null_type); 06481 # endif 06482 } 06483 else { 06484 PDG_DBG_PRINT_START 06485 PDG_DBG_PRINT_C("fei_seq_subscr"); 06486 PDG_DBG_PRINT_T("(1) type", null_type); 06487 PDG_DBG_PRINT_END 06488 # ifdef _ENABLE_FEI 06489 fei_seq_subscr(null_type,IR_LIST_CNT_R(ir_idx)); 06490 # endif 06491 } 06492 06493 CONTINUE_CO: 06494 next_idx = IL_PREV_LIST_IDX(next_idx); 06495 co_dim =co_dim - 1; 06496 ss = ss + 1; 06497 } 06498 06499 # endif /*COARRAY */ 06500 06501 while (dim > 0) { 06502 06503 if (stack_data_object) { 06504 COPY_OPND(l_opnd, IL_OPND(next_idx)); 06505 /* l_opnd will always be a scalar expression here */ 06506 vv = 1; 06507 cn_idx = get_next_array_expr_element(&l_opnd, &vv); 06508 COPY_OPND(IL_OPND(next_idx), l_opnd); 06509 static_subscripts[ss] = CN_INT_TO_C(cn_idx); 06510 06511 # if defined(_TARGET_OS_MAX) || defined(_HOST32) /* JEFFL */ 06512 if (TYP_LINEAR(CN_TYPE_IDX(cn_idx)) != Integer_8) { 06513 SIGN_EXTEND(static_subscripts[ss]); 06514 } 06515 # endif 06516 goto CONTINUE; 06517 } 06518 06519 cvrt_exp_to_pdg(IL_IDX(next_idx), 06520 IL_FLD(next_idx)); 06521 06522 if (ATD_IM_A_DOPE(attr_idx)) { 06523 cvrt_exp_to_pdg(IR_IDX_L(IR_IDX_L(ir_idx)), 06524 IR_FLD_L(IR_IDX_L(ir_idx))); 06525 06526 PDG_DBG_PRINT_START 06527 PDG_DBG_PRINT_C("fei_get_dv_low_bnd"); 06528 PDG_DBG_PRINT_D("(1) dim", dim); 06529 PDG_DBG_PRINT_D("(2) expand immed", EXPAND); 06530 PDG_DBG_PRINT_END 06531 # ifdef _ENABLE_FEI 06532 fei_get_dv_low_bnd(dim, EXPAND); 06533 # endif 06534 } 06535 # if defined(COARRAY_FORTRAN) && defined(_TARGET_OS_MAX) 06536 else if (IL_PE_SUBSCRIPT(next_idx)) { 06537 cvrt_exp_to_pdg(CN_INTEGER_ONE_IDX, 06538 CN_Tbl_Idx); 06539 } 06540 # endif 06541 else { 06542 if (BD_ARRAY_CLASS(bound_idx)!= Deferred_Shape && 06543 BD_ARRAY_CLASS(bound_idx)!= Deferred_Shape1) 06544 06545 cvrt_exp_to_pdg(BD_LB_IDX(bound_idx, dim), 06546 BD_LB_FLD(bound_idx, dim)); 06547 else fei_implicit_expr(); 06548 } 06549 06550 if (ATD_IM_A_DOPE(attr_idx)) { 06551 cvrt_exp_to_pdg(IR_IDX_L(IR_IDX_L(ir_idx)), 06552 IR_FLD_L(IR_IDX_L(ir_idx))); 06553 06554 PDG_DBG_PRINT_START 06555 PDG_DBG_PRINT_C("fei_get_dv_extent"); 06556 PDG_DBG_PRINT_D("(1) dim", dim); 06557 PDG_DBG_PRINT_D("(2) expand immed", EXPAND); 06558 PDG_DBG_PRINT_END 06559 # ifdef _ENABLE_FEI 06560 fei_get_dv_extent(dim, EXPAND); 06561 # endif 06562 } 06563 # if defined(COARRAY_FORTRAN) && defined(_TARGET_OS_MAX) 06564 else if (IL_PE_SUBSCRIPT(next_idx)) { 06565 cvrt_exp_to_pdg(BD_LEN_IDX(pe_bd_idx), 06566 BD_LEN_FLD(pe_bd_idx)); 06567 } 06568 # endif 06569 else { 06570 if (BD_ARRAY_CLASS(bound_idx)!= Deferred_Shape && 06571 BD_ARRAY_CLASS(bound_idx)!= Deferred_Shape1) 06572 if (BD_XT_IDX(bound_idx, dim)) 06573 cvrt_exp_to_pdg(BD_XT_IDX(bound_idx, dim), 06574 BD_XT_FLD(bound_idx, dim)); 06575 else fei_implicit_expr(); 06576 else fei_implicit_expr(); 06577 } 06578 06579 if (ATD_IM_A_DOPE(attr_idx)) { 06580 cvrt_exp_to_pdg(IR_IDX_L(IR_IDX_L(ir_idx)), 06581 IR_FLD_L(IR_IDX_L(ir_idx))); 06582 06583 PDG_DBG_PRINT_START 06584 PDG_DBG_PRINT_C("fei_get_dv_str_mult"); 06585 PDG_DBG_PRINT_D("(1) dim", dim); 06586 PDG_DBG_PRINT_D("(2) expand immed", EXPAND); 06587 PDG_DBG_PRINT_END 06588 # ifdef _ENABLE_FEI 06589 fei_get_dv_str_mult(dim, EXPAND); 06590 # endif 06591 } 06592 # if defined(_EXTENDED_CRI_CHAR_POINTER) 06593 else if (AT_OBJ_CLASS(attr_idx) == Data_Obj && 06594 ATD_CLASS(attr_idx) == CRI_Pointee && 06595 TYP_TYPE(ATD_TYPE_IDX(attr_idx)) == Character && 06596 TYP_CHAR_CLASS(ATD_TYPE_IDX(attr_idx)) == 06597 Assumed_Size_Char) { 06598 cvrt_exp_to_pdg(BD_SM_IDX(bound_idx, dim), 06599 BD_SM_FLD(bound_idx, dim)); 06600 06601 cvrt_exp_to_pdg(attr_idx, AT_Tbl_Idx); 06602 06603 basic = get_basic_type(ATD_TYPE_IDX(attr_idx), 06604 ATD_ALIGNMENT(attr_idx), 06605 attr_idx); 06606 06607 PDG_DBG_PRINT_START 06608 PDG_DBG_PRINT_C("fei_len"); 06609 PDG_DBG_PRINT_END 06610 06611 # ifdef _ENABLE_FEI 06612 /* fei_len(basic); */ 06613 fei_len(); 06614 # endif 06615 06616 basic = get_basic_type(INTEGER_DEFAULT_TYPE, 06617 type_alignment_tbl[INTEGER_DEFAULT_TYPE], 06618 NULL_IDX); 06619 06620 PDG_DBG_PRINT_START 06621 PDG_DBG_PRINT_C("fei_mult"); 06622 PDG_DBG_PRINT_END 06623 06624 # ifdef _ENABLE_FEI 06625 fei_mult(basic); 06626 # endif 06627 } 06628 # endif 06629 # if defined(COARRAY_FORTRAN) && defined(_TARGET_OS_MAX) 06630 else if (IL_PE_SUBSCRIPT(next_idx)) { 06631 cvrt_exp_to_pdg(CN_INTEGER_ONE_IDX, 06632 CN_Tbl_Idx); 06633 } 06634 # endif 06635 else { 06636 if (BD_ARRAY_CLASS(bound_idx)!= Deferred_Shape && 06637 BD_ARRAY_CLASS(bound_idx)!= Deferred_Shape1) 06638 06639 cvrt_exp_to_pdg(BD_SM_IDX(bound_idx, dim), 06640 BD_SM_FLD(bound_idx, dim)); 06641 else fei_implicit_expr(); 06642 } 06643 06644 if (BD_ARRAY_CLASS(bound_idx) == Assumed_Size) { 06645 if (BD_RANK(bound_idx) == IR_LIST_CNT_R(ir_idx) && ss == 0) { 06646 bound_chk = FALSE; 06647 } 06648 } 06649 06650 PDG_DBG_PRINT_START 06651 PDG_DBG_PRINT_C("fei_subscr_size"); 06652 PDG_DBG_PRINT_T("(1) type", pdg_type_void); 06653 PDG_DBG_PRINT_D("(2) bound_chk", bound_chk); 06654 PDG_DBG_PRINT_END 06655 # ifdef _ENABLE_FEI 06656 fei_subscr_size(pdg_type_void, bound_chk); 06657 # endif 06658 06659 if (ATD_IM_A_DOPE(attr_idx)) { 06660 PDG_DBG_PRINT_START 06661 PDG_DBG_PRINT_C("fei_nseq_subscr"); 06662 PDG_DBG_PRINT_T("(1) type", null_type); 06663 PDG_DBG_PRINT_END 06664 # ifdef _ENABLE_FEI 06665 fei_nseq_subscr(null_type); 06666 # endif 06667 } 06668 else { 06669 PDG_DBG_PRINT_START 06670 PDG_DBG_PRINT_C("fei_seq_subscr"); 06671 PDG_DBG_PRINT_T("(1) type", null_type); 06672 PDG_DBG_PRINT_END 06673 # ifdef _ENABLE_FEI 06674 fei_seq_subscr(null_type,IR_LIST_CNT_R(ir_idx)); 06675 # endif 06676 } 06677 06678 CONTINUE: 06679 next_idx = IL_PREV_LIST_IDX(next_idx); 06680 dim = dim - 1; 06681 ss = ss + 1; 06682 } 06683 06684 06685 if (stack_data_object) { 06686 PDG_DBG_PRINT_START 06687 PDG_DBG_PRINT_C("fei_static_subscripts"); 06688 for (i = 0; i < ss; i++) { 06689 PDG_DBG_PRINT_LLD("static subscript", static_subscripts[i]); 06690 } 06691 PDG_DBG_PRINT_END 06692 06693 # ifdef _ENABLE_FEI 06694 fei_static_subscripts(static_subscripts); 06695 # endif 06696 } 06697 06698 nested_array--; 06699 if (!nested_array) 06700 is_subscript = FALSE; 06701 06702 break; 06703 06704 case Present_Opr : 06705 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 06706 IR_FLD_L(ir_idx)); 06707 06708 PDG_DBG_PRINT_START 06709 PDG_DBG_PRINT_C("fei_present"); 06710 PDG_DBG_PRINT_END 06711 06712 # ifdef _ENABLE_FEI 06713 fei_present(); 06714 # endif 06715 break; 06716 06717 06718 06719 06720 case Argchck_Present_Opr : 06721 PDG_DBG_PRINT_START 06722 PDG_DBG_PRINT_C("fei_argchk"); 06723 PDG_DBG_PRINT_END 06724 06725 # ifdef _ENABLE_FEI 06726 fei_argchk(); 06727 # endif 06728 06729 break; 06730 06731 06732 06733 06734 case Argchck_Loc_Opr : 06735 PDG_DBG_PRINT_START 06736 PDG_DBG_PRINT_C("fei_argloc"); 06737 PDG_DBG_PRINT_END 06738 06739 # ifdef _ENABLE_FEI 06740 fei_argloc(); 06741 # endif 06742 06743 break; 06744 06745 06746 06747 06748 06749 case Aloc_Opr : 06750 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 06751 IR_FLD_L(ir_idx)); 06752 06753 global_attr_idx = NULL_IDX; 06754 global_attr_idx = find_left_attr(&(IR_OPND_L(ir_idx))); 06755 basic = get_basic_type(IR_TYPE_IDX(ir_idx), 0, NULL_IDX); 06756 global_attr_idx = NULL_IDX; 06757 06758 PDG_DBG_PRINT_START 06759 PDG_DBG_PRINT_C("fei_arg_addr"); 06760 PDG_DBG_PRINT_END 06761 06762 # ifdef _ENABLE_FEI 06763 fei_arg_addr(basic); 06764 # endif 06765 break; 06766 06767 06768 case Alloc_Obj_Opr: 06769 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 06770 IR_FLD_L(ir_idx)); 06771 break; 06772 06773 06774 case Dv_Deref_Opr : 06775 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 06776 IR_FLD_L(ir_idx)); 06777 06778 PDG_DBG_PRINT_START 06779 PDG_DBG_PRINT_C("fei_dv_deref"); 06780 PDG_DBG_PRINT_END 06781 06782 # ifdef _ENABLE_FEI 06783 fei_dv_deref(null_type); 06784 # endif 06785 break; 06786 06787 06788 06789 06790 06791 case Dv_Whole_Def_Opr : 06792 processing_call = processing_call + 1; 06793 06794 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 06795 IR_FLD_L(ir_idx)); 06796 06797 PDG_DBG_PRINT_START 06798 PDG_DBG_PRINT_C("fei_dv_def"); 06799 PDG_DBG_PRINT_D("dim", IR_DV_DIM(ir_idx)); 06800 PDG_DBG_PRINT_END 06801 06802 # ifdef _ENABLE_FEI 06803 fei_dv_def(IR_DV_DIM(ir_idx)); 06804 # endif 06805 processing_call = processing_call - 1; 06806 break; 06807 06808 06809 06810 06811 06812 06813 06814 06815 case Dv_Access_Stride_Mult : 06816 case Dv_Access_Extent : 06817 case Dv_Access_Low_Bound : 06818 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 06819 IR_FLD_L(ir_idx)); 06820 06821 switch (IR_OPR(ir_idx)) { 06822 case Dv_Access_Stride_Mult : 06823 PDG_DBG_PRINT_START 06824 PDG_DBG_PRINT_C("fei_get_dv_str_mult"); 06825 PDG_DBG_PRINT_D("(1) dim", IR_DV_DIM(ir_idx)); 06826 PDG_DBG_PRINT_D("(2) expand", EXPAND); 06827 PDG_DBG_PRINT_END 06828 # ifdef _ENABLE_FEI 06829 fei_get_dv_str_mult(IR_DV_DIM(ir_idx), EXPAND); 06830 # endif 06831 break; 06832 06833 case Dv_Access_Extent : 06834 PDG_DBG_PRINT_START 06835 PDG_DBG_PRINT_C("fei_get_dv_extent"); 06836 PDG_DBG_PRINT_D("(1) dim", IR_DV_DIM(ir_idx)); 06837 PDG_DBG_PRINT_D("(2) expand", EXPAND); 06838 PDG_DBG_PRINT_END 06839 # ifdef _ENABLE_FEI 06840 fei_get_dv_extent(IR_DV_DIM(ir_idx), EXPAND); 06841 # endif 06842 break; 06843 06844 case Dv_Access_Low_Bound : 06845 PDG_DBG_PRINT_START 06846 PDG_DBG_PRINT_C("fei_get_dv_low_bnd"); 06847 PDG_DBG_PRINT_D("(1) dim", IR_DV_DIM(ir_idx)); 06848 PDG_DBG_PRINT_D("(2) expand", EXPAND); 06849 PDG_DBG_PRINT_END 06850 # ifdef _ENABLE_FEI 06851 fei_get_dv_low_bnd(IR_DV_DIM(ir_idx), EXPAND); 06852 # endif 06853 break; 06854 } 06855 break; 06856 06857 06858 06859 06860 06861 06862 06863 06864 case Dv_Set_Stride_Mult : 06865 case Dv_Set_Extent : 06866 case Dv_Set_Low_Bound : 06867 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 06868 IR_FLD_L(ir_idx)); 06869 06870 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 06871 IR_FLD_R(ir_idx)); 06872 06873 switch (IR_OPR(ir_idx)) { 06874 case Dv_Set_Stride_Mult : 06875 PDG_DBG_PRINT_START 06876 PDG_DBG_PRINT_C("fei_set_dv_str_mult"); 06877 PDG_DBG_PRINT_D("(1) dim", IR_DV_DIM(ir_idx)); 06878 PDG_DBG_PRINT_END 06879 # ifdef _ENABLE_FEI 06880 fei_set_dv_str_mult(IR_DV_DIM(ir_idx)); 06881 # endif 06882 break; 06883 06884 case Dv_Set_Extent : 06885 PDG_DBG_PRINT_START 06886 PDG_DBG_PRINT_C("fei_set_dv_extent"); 06887 PDG_DBG_PRINT_D("(1) dim", IR_DV_DIM(ir_idx)); 06888 PDG_DBG_PRINT_END 06889 # ifdef _ENABLE_FEI 06890 fei_set_dv_extent(IR_DV_DIM(ir_idx)); 06891 # endif 06892 break; 06893 06894 case Dv_Set_Low_Bound : 06895 PDG_DBG_PRINT_START 06896 PDG_DBG_PRINT_C("fei_set_dv_low_bnd"); 06897 PDG_DBG_PRINT_D("(1) dim", IR_DV_DIM(ir_idx)); 06898 PDG_DBG_PRINT_END 06899 # ifdef _ENABLE_FEI 06900 fei_set_dv_low_bnd(IR_DV_DIM(ir_idx)); 06901 # endif 06902 break; 06903 } 06904 break; 06905 06906 06907 06908 06909 06910 06911 06912 case Dv_Set_Base_Addr : 06913 case Dv_Set_El_Len : 06914 case Dv_Set_Assoc : 06915 case Dv_Set_Ptr_Alloc : 06916 case Dv_Set_P_Or_A : 06917 case Dv_Set_A_Contig : 06918 case Dv_Set_N_Dim : 06919 case Dv_Set_Typ_Code : 06920 case Dv_Set_Orig_Base : 06921 case Dv_Set_Orig_Size : 06922 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 06923 IR_FLD_L(ir_idx)); 06924 06925 if (IR_FLD_R(ir_idx) != NO_Tbl_Idx) { 06926 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 06927 IR_FLD_R(ir_idx)); 06928 } 06929 06930 switch (IR_OPR(ir_idx)) { 06931 case Dv_Set_Base_Addr : 06932 fld = 1; 06933 break; 06934 case Dv_Set_El_Len : 06935 fld = 2; 06936 break; 06937 case Dv_Set_Assoc : 06938 fld = 3; 06939 break; 06940 case Dv_Set_Ptr_Alloc : 06941 fld = 4; 06942 break; 06943 case Dv_Set_P_Or_A : 06944 fld = 5; 06945 break; 06946 case Dv_Set_A_Contig : 06947 fld = 6; 06948 break; 06949 case Dv_Set_N_Dim : 06950 fld = 7; 06951 break; 06952 case Dv_Set_Typ_Code : 06953 fld = 8; 06954 break; 06955 case Dv_Set_Orig_Base : 06956 fld = 9; 06957 break; 06958 case Dv_Set_Orig_Size : 06959 fld = 10; 06960 break; 06961 } 06962 06963 PDG_DBG_PRINT_START 06964 PDG_DBG_PRINT_C("fei_set_dv_hdr_fld"); 06965 PDG_DBG_PRINT_D("(1) field num", fld); 06966 PDG_DBG_PRINT_END 06967 # ifdef _ENABLE_FEI 06968 fei_set_dv_hdr_fld(fld); 06969 # endif 06970 break; 06971 06972 06973 06974 06975 06976 case Dv_Access_Base_Addr : 06977 case Dv_Access_El_Len : 06978 case Dv_Access_Assoc : 06979 case Dv_Access_Ptr_Alloc : 06980 case Dv_Access_P_Or_A : 06981 case Dv_Access_A_Contig : 06982 case Dv_Access_N_Dim : 06983 case Dv_Access_Typ_Code : 06984 case Dv_Access_Orig_Base : 06985 case Dv_Access_Orig_Size : 06986 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 06987 IR_FLD_L(ir_idx)); 06988 06989 if (IR_FLD_R(ir_idx) != NO_Tbl_Idx) { 06990 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 06991 IR_FLD_R(ir_idx)); 06992 } 06993 06994 switch (IR_OPR(ir_idx)) { 06995 case Dv_Access_Base_Addr : 06996 fld = 1; 06997 break; 06998 case Dv_Access_El_Len : 06999 fld = 2; 07000 break; 07001 case Dv_Access_Assoc : 07002 fld = 3; 07003 break; 07004 case Dv_Access_Ptr_Alloc : 07005 fld = 4; 07006 break; 07007 case Dv_Access_P_Or_A : 07008 fld = 5; 07009 break; 07010 case Dv_Access_A_Contig : 07011 fld = 6; 07012 break; 07013 case Dv_Access_N_Dim : 07014 fld = 7; 07015 break; 07016 case Dv_Access_Typ_Code : 07017 fld = 8; 07018 break; 07019 case Dv_Access_Orig_Base : 07020 fld = 9; 07021 break; 07022 case Dv_Access_Orig_Size : 07023 fld = 10; 07024 break; 07025 } 07026 07027 PDG_DBG_PRINT_START 07028 PDG_DBG_PRINT_C("fei_get_dv_hdr_fld"); 07029 PDG_DBG_PRINT_D("(1) field num", fld); 07030 PDG_DBG_PRINT_END 07031 # ifdef _ENABLE_FEI 07032 fei_get_dv_hdr_fld(fld); 07033 # endif 07034 break; 07035 07036 07037 07038 07039 07040 case Allocate_Opr : 07041 case Deallocate_Opr : 07042 /* do the right side first */ 07043 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 07044 IR_FLD_R(ir_idx)); 07045 07046 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 07047 IR_FLD_L(ir_idx)); 07048 07049 PDG_DBG_PRINT_START 07050 PDG_DBG_PRINT_C("fei_allocate"); 07051 PDG_DBG_PRINT_D("(1) list count", IR_LIST_CNT_L(ir_idx) + 3); 07052 PDG_DBG_PRINT_END 07053 07054 # ifdef _ENABLE_FEI 07055 fei_allocate(IR_LIST_CNT_L(ir_idx) + 3); 07056 # endif 07057 break; 07058 07059 07060 07061 case Call_Opr : 07062 processing_call = processing_call + 1; 07063 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 07064 IR_FLD_L(ir_idx)); 07065 07066 if (IR_IDX_R(ir_idx) != NULL_IDX && 07067 IR_LIST_CNT_R(ir_idx) > 0) { 07068 user_call = 1; 07069 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 07070 IR_FLD_R(ir_idx)); 07071 user_call = 0; 07072 } 07073 07074 if (IR_IDX_R(ir_idx) == NULL_IDX) { 07075 number_actual_args = 0; 07076 } 07077 else { 07078 number_actual_args = IR_LIST_CNT_R(ir_idx); 07079 } 07080 07081 if (ATP_PGM_UNIT(IR_IDX_L(ir_idx)) == Subroutine ) { /* || */ 07082 /* ATP_EXTRA_DARG(IR_IDX_L(ir_idx))) */ 07083 type_desc = pdg_type_void; 07084 07085 if (ATP_HAS_ALT_RETURN(IR_IDX_L(ir_idx))) { 07086 type_desc = get_basic_type(CG_INTEGER_DEFAULT_TYPE, 07087 type_alignment_tbl[CG_INTEGER_DEFAULT_TYPE], 07088 NULL_IDX); 07089 } 07090 } 07091 else { 07092 type_desc = get_type_desc(IR_IDX_L(ir_idx)); 07093 } 07094 07095 flags = 0; 07096 flags |= ATP_DOES_NOT_RETURN(IR_IDX_L(ir_idx)) 07097 << FEI_CALL_DOES_NOT_RETURN; 07098 07099 /* Always pass FALSE for the alternate return argument. PDGCS does */ 07100 /* not use this for Fortran 90. */ 07101 07102 PDG_DBG_PRINT_START 07103 PDG_DBG_PRINT_C("fei_call"); 07104 PDG_DBG_PRINT_S("AT_OBJ_NAME", AT_OBJ_NAME_PTR(IR_IDX_L(ir_idx))); 07105 PDG_DBG_PRINT_D("(1) num actual args", number_actual_args); 07106 PDG_DBG_PRINT_T("(2) type", type_desc); 07107 PDG_DBG_PRINT_S("(3) call type", "By_Value"); 07108 PDG_DBG_PRINT_S("(4) alt return", p_boolean[FALSE]); 07109 PDG_DBG_PRINT_D("(5) IR_INLINE_STATE", IR_INLINE_STATE(ir_idx)); 07110 PDG_DBG_PRINT_LLO("(6) flags", flags); 07111 PDG_DBG_PRINT_END 07112 07113 # ifdef _ENABLE_FEI 07114 fei_call(number_actual_args, 07115 type_desc, 07116 By_Value_Call, 07117 FALSE, 07118 IR_INLINE_STATE(ir_idx), 07119 flags); 07120 # endif 07121 processing_call = processing_call - 1; 07122 break; 07123 07124 07125 07126 case Br_Uncond_Opr : 07127 send_attr_ntry(IR_IDX_R(ir_idx)); 07128 07129 PDG_DBG_PRINT_START 07130 PDG_DBG_PRINT_C("fei_goto"); 07131 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", PDG_AT_IDX(IR_IDX_R(ir_idx))); 07132 PDG_DBG_PRINT_END 07133 07134 # ifdef _ENABLE_FEI 07135 fei_goto(PDG_AT_IDX(IR_IDX_R(ir_idx))); 07136 # endif 07137 break; 07138 07139 07140 07141 07142 07143 case Br_True_Opr : 07144 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 07145 IR_FLD_L(ir_idx)); 07146 07147 send_attr_ntry(IR_IDX_R(ir_idx)); 07148 07149 PDG_DBG_PRINT_START 07150 PDG_DBG_PRINT_C("fei_brtrue"); 07151 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", PDG_AT_IDX(IR_IDX_R(ir_idx))); 07152 PDG_DBG_PRINT_END 07153 07154 # ifdef _ENABLE_FEI 07155 fei_brtrue(PDG_AT_IDX(IR_IDX_R(ir_idx))); 07156 # endif 07157 break; 07158 07159 07160 case If_Opr: 07161 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 07162 IR_FLD_L(ir_idx)); 07163 07164 PDG_DBG_PRINT_START 07165 PDG_DBG_PRINT_C("fei_if"); 07166 PDG_DBG_PRINT_END 07167 # ifdef _HIGH_LEVEL_IF_FORM 07168 # ifdef _ENABLE_FEI 07169 fei_if(); 07170 # endif 07171 # endif 07172 break; 07173 07174 07175 case Else_Opr: 07176 07177 PDG_DBG_PRINT_START 07178 PDG_DBG_PRINT_C("fei_else"); 07179 PDG_DBG_PRINT_END 07180 # ifdef _HIGH_LEVEL_IF_FORM 07181 # ifdef _ENABLE_FEI 07182 fei_else(); 07183 # endif 07184 # endif 07185 break; 07186 07187 case Endif_Opr: 07188 07189 PDG_DBG_PRINT_START 07190 PDG_DBG_PRINT_C("fei_endif"); 07191 PDG_DBG_PRINT_END 07192 # ifdef _HIGH_LEVEL_IF_FORM 07193 # ifdef _ENABLE_FEI 07194 fei_endif(); 07195 # endif 07196 # endif 07197 break; 07198 07199 07200 07201 case Br_Aif_Opr : 07202 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 07203 IR_FLD_L(ir_idx)); 07204 07205 send_attr_ntry(IL_IDX(IR_IDX_R(ir_idx))); 07206 07207 send_attr_ntry(IL_IDX(IL_NEXT_LIST_IDX(IR_IDX_R(ir_idx)))); 07208 07209 send_attr_ntry(IL_IDX(IL_NEXT_LIST_IDX( 07210 IL_NEXT_LIST_IDX(IR_IDX_R(ir_idx))))); 07211 07212 PDG_DBG_PRINT_START 07213 PDG_DBG_PRINT_C("fei_arith_goto"); 07214 PDG_DBG_PRINT_LD("label idx1", PDG_AT_IDX(IL_IDX(IR_IDX_R(ir_idx)))); 07215 PDG_DBG_PRINT_LD("label idx2", PDG_AT_IDX(IL_IDX(IL_NEXT_LIST_IDX( 07216 IR_IDX_R(ir_idx))))); 07217 PDG_DBG_PRINT_LD("label idx3", PDG_AT_IDX(IL_IDX(IL_NEXT_LIST_IDX( 07218 IL_NEXT_LIST_IDX(IR_IDX_R(ir_idx)))))); 07219 PDG_DBG_PRINT_END 07220 07221 # ifdef _ENABLE_FEI 07222 fei_arith_goto( 07223 PDG_AT_IDX(IL_IDX(IR_IDX_R(ir_idx))), 07224 PDG_AT_IDX(IL_IDX(IL_NEXT_LIST_IDX(IR_IDX_R(ir_idx)))), 07225 PDG_AT_IDX(IL_IDX(IL_NEXT_LIST_IDX( 07226 IL_NEXT_LIST_IDX(IR_IDX_R(ir_idx)))))); 07227 # endif 07228 break; 07229 07230 07231 07232 07233 07234 case Br_Asg_Opr : 07235 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 07236 IR_FLD_L(ir_idx)); 07237 07238 list_cnt = 0; 07239 i = SCP_ASSIGN_LBL_CHAIN(curr_scp_idx); 07240 07241 while (i != NULL_IDX) { 07242 send_attr_ntry(i); 07243 07244 PDG_DBG_PRINT_START 07245 PDG_DBG_PRINT_C("fei_label_ref"); 07246 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", PDG_AT_IDX(i)); 07247 PDG_DBG_PRINT_END 07248 07249 # ifdef _ENABLE_FEI 07250 fei_label_ref(PDG_AT_IDX(i)); 07251 # endif 07252 07253 list_cnt = list_cnt + 1; 07254 i = ATL_NEXT_ASG_LBL_IDX(i); 07255 } 07256 07257 PDG_DBG_PRINT_START 07258 PDG_DBG_PRINT_C("fei_indirect_goto"); 07259 PDG_DBG_PRINT_D("(1) list_cnt", list_cnt); 07260 PDG_DBG_PRINT_D("(2) TRUE", TRUE); 07261 PDG_DBG_PRINT_END 07262 07263 # ifdef _ENABLE_FEI 07264 fei_indirect_goto(list_cnt, TRUE); 07265 # endif 07266 break; 07267 07268 07269 07270 07271 case Br_Index_Opr : 07272 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 07273 IR_FLD_L(ir_idx)); 07274 07275 list_cnt = IR_LIST_CNT_R(ir_idx); 07276 tmp_ir_idx = IR_IDX_R(ir_idx); 07277 07278 for (i = 0; i < list_cnt; i++) { 07279 send_attr_ntry(IL_IDX(tmp_ir_idx)); 07280 07281 PDG_DBG_PRINT_START 07282 PDG_DBG_PRINT_C("fei_label_ref"); 07283 PDG_DBG_PRINT_LD("(1) label idx", PDG_AT_IDX(IL_IDX(tmp_ir_idx))); 07284 PDG_DBG_PRINT_END 07285 07286 # ifdef _ENABLE_FEI 07287 fei_label_ref(PDG_AT_IDX(IL_IDX(tmp_ir_idx))); 07288 # endif 07289 tmp_ir_idx = IL_NEXT_LIST_IDX(tmp_ir_idx); 07290 } 07291 07292 PDG_DBG_PRINT_START 07293 PDG_DBG_PRINT_C("fei_indirect_goto"); 07294 PDG_DBG_PRINT_D("(1) list cnt", list_cnt); 07295 PDG_DBG_PRINT_D("(2) FALSE", FALSE); 07296 PDG_DBG_PRINT_END 07297 07298 # ifdef _ENABLE_FEI 07299 fei_indirect_goto(list_cnt, FALSE); 07300 # endif 07301 break; 07302 07303 07304 07305 07306 07307 07308 case Where_Opr : 07309 if (IR_LIST_CNT_L(ir_idx) == 4) { 07310 /* defined assignment */ 07311 # if defined(GENERATE_WHIRL) 07312 proc_idx = IR_IDX_L(ir_idx); 07313 lhs_idx = IL_NEXT_LIST_IDX(proc_idx); 07314 mask_idx = IL_NEXT_LIST_IDX(lhs_idx); 07315 rhs_idx = IL_NEXT_LIST_IDX(mask_idx); 07316 cvrt_exp_to_pdg(IL_IDX(proc_idx), 07317 IL_FLD(proc_idx)); 07318 07319 cvrt_exp_to_pdg(IL_IDX(lhs_idx), 07320 IL_FLD(lhs_idx)); 07321 07322 cvrt_exp_to_pdg(IL_IDX(rhs_idx), 07323 IL_FLD(rhs_idx)); 07324 07325 cvrt_exp_to_pdg(IL_IDX(mask_idx), 07326 IL_FLD(mask_idx)); 07327 # else 07328 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 07329 IR_FLD_L(ir_idx)); 07330 # endif 07331 07332 PDG_DBG_PRINT_START 07333 PDG_DBG_PRINT_C("fei_where"); 07334 PDG_DBG_PRINT_END 07335 07336 # ifdef _ENABLE_FEI 07337 fei_where(TRUE, IR_INLINE_STATE(ir_idx)); 07338 # endif 07339 } 07340 else { 07341 # if defined(GENERATE_WHIRL) 07342 lhs_idx = IR_IDX_L(ir_idx); 07343 mask_idx = IL_NEXT_LIST_IDX(lhs_idx); 07344 rhs_idx = IL_NEXT_LIST_IDX(mask_idx); 07345 cvrt_exp_to_pdg(IL_IDX(lhs_idx), 07346 IL_FLD(lhs_idx)); 07347 07348 cvrt_exp_to_pdg(IL_IDX(rhs_idx), 07349 IL_FLD(rhs_idx)); 07350 07351 cvrt_exp_to_pdg(IL_IDX(mask_idx), 07352 IL_FLD(mask_idx)); 07353 # else 07354 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 07355 IR_FLD_L(ir_idx)); 07356 # endif 07357 07358 PDG_DBG_PRINT_START 07359 PDG_DBG_PRINT_C("fei_where"); 07360 PDG_DBG_PRINT_END 07361 07362 # ifdef _ENABLE_FEI 07363 fei_where(FALSE, 0); 07364 # endif 07365 } 07366 break; 07367 07368 07369 case Where_Cnstrct_Opr: 07370 case Else_Where_Mask_Opr: 07371 case Else_Where_Opr: 07372 /* these are ignored */ 07373 break; 07374 07375 07376 case Bounds_Cdir_Opr : 07377 case Nobounds_Cdir_Opr : 07378 bounds_cdir_handler(ir_idx); 07379 break; 07380 07381 07382 07383 07384 07385 case Case_Cmic_Opr: 07386 PDG_DBG_PRINT_START 07387 PDG_DBG_PRINT_C("fei_par_case"); 07388 PDG_DBG_PRINT_D("(1) cmic vpr idx", case_cmic_vpr_idx); 07389 PDG_DBG_PRINT_D("(2) line num", IR_LINE_NUM(ir_idx)); 07390 PDG_DBG_PRINT_END 07391 07392 # ifdef _ENABLE_FEI 07393 task_tbl_idx = fei_par_case(case_cmic_vpr_idx, 07394 IR_LINE_NUM(ir_idx)); 07395 # endif 07396 07397 if (case_cmic_vpr_idx == NULL_IDX) { 07398 case_cmic_vpr_idx = task_tbl_idx; 07399 } 07400 break; 07401 07402 07403 07404 07405 07406 07407 07408 case Endcase_Cmic_Opr: 07409 PDG_DBG_PRINT_START 07410 PDG_DBG_PRINT_C("fei_par_endcase"); 07411 PDG_DBG_PRINT_D("(1) cmic vpr idx", case_cmic_vpr_idx); 07412 PDG_DBG_PRINT_D("(2) line num", IR_LINE_NUM(ir_idx)); 07413 PDG_DBG_PRINT_END 07414 07415 # ifdef _ENABLE_FEI 07416 fei_par_endcase(case_cmic_vpr_idx, IR_LINE_NUM(ir_idx)); 07417 # endif 07418 07419 case_cmic_vpr_idx = NULL_IDX; 07420 break; 07421 07422 07423 07424 07425 case Send_Cmic_Opr: 07426 if (IR_FLD_L(ir_idx) == CN_Tbl_Idx || 07427 IR_FLD_L(ir_idx) == AT_Tbl_Idx) { 07428 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 07429 IR_FLD_L(ir_idx)); 07430 point = 1; 07431 } 07432 07433 /* process IF clause */ 07434 if (IR_FLD_R(ir_idx) == AT_Tbl_Idx) { 07435 send_attr_ntry(IR_IDX_R(ir_idx)); 07436 task_if_idx = PDG_AT_IDX(IR_IDX_R(ir_idx)); 07437 } 07438 07439 PDG_DBG_PRINT_START 07440 PDG_DBG_PRINT_C("fei_task_send"); 07441 PDG_DBG_PRINT_LD("(1) point", point); 07442 PDG_DBG_PRINT_D("(2) task_if_idx", task_if_idx); 07443 PDG_DBG_PRINT_END 07444 07445 # ifdef _ENABLE_FEI 07446 fei_task_send(point, task_if_idx); 07447 # endif 07448 07449 break; 07450 07451 07452 07453 07454 case Wait_Cmic_Opr: 07455 if (IR_FLD_L(ir_idx) == CN_Tbl_Idx || 07456 IR_FLD_L(ir_idx) == AT_Tbl_Idx) { 07457 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 07458 IR_FLD_L(ir_idx)); 07459 point = 1; 07460 } 07461 07462 if (IR_FLD_R(ir_idx) == CN_Tbl_Idx) { 07463 span = (long) CN_INT_TO_C(IR_IDX_R(ir_idx)); 07464 } 07465 07466 PDG_DBG_PRINT_START 07467 PDG_DBG_PRINT_C("fei_task_wait"); 07468 PDG_DBG_PRINT_LD("(1) point", point); 07469 PDG_DBG_PRINT_LD("(2) span", span); 07470 PDG_DBG_PRINT_END 07471 07472 # ifdef _ENABLE_FEI 07473 fei_task_wait(point, span); 07474 # endif 07475 07476 break; 07477 07478 07479 07480 case Guard_Cmic_Opr: 07481 if (IR_FLD_L(ir_idx) == AT_Tbl_Idx) { 07482 send_attr_ntry(IR_IDX_L(ir_idx)); 07483 } 07484 07485 PDG_DBG_PRINT_START 07486 PDG_DBG_PRINT_C("fei_guard"); 07487 PDG_DBG_PRINT_LD("(1) idx", (IR_FLD_L(ir_idx) == NO_Tbl_Idx) ? 07488 0 : PDG_AT_IDX(IR_IDX_L(ir_idx))); 07489 PDG_DBG_PRINT_D("(2) line num", IR_LINE_NUM(ir_idx)); 07490 PDG_DBG_PRINT_END 07491 07492 # ifdef _ENABLE_FEI 07493 guard_cmic_vpr_idx = fei_guard((IR_FLD_L(ir_idx) == NO_Tbl_Idx) ? 07494 0 : PDG_AT_IDX(IR_IDX_L(ir_idx)), 07495 IR_LINE_NUM(ir_idx)); 07496 # endif 07497 07498 break; 07499 07500 07501 07502 07503 07504 07505 case Endguard_Cmic_Opr: 07506 if (IR_FLD_L(ir_idx) == AT_Tbl_Idx) { 07507 send_attr_ntry(IR_IDX_L(ir_idx)); 07508 } 07509 07510 PDG_DBG_PRINT_START 07511 PDG_DBG_PRINT_C("fei_endguard"); 07512 PDG_DBG_PRINT_LD("(1) guard idx", (IR_FLD_L(ir_idx) == NO_Tbl_Idx) ? 0 : 07513 PDG_AT_IDX(IR_IDX_L(ir_idx))); 07514 PDG_DBG_PRINT_D("(2) line num", IR_LINE_NUM(ir_idx)); 07515 PDG_DBG_PRINT_END 07516 07517 # ifdef _ENABLE_FEI 07518 fei_endguard(guard_cmic_vpr_idx, 07519 (IR_FLD_L(ir_idx) == NO_Tbl_Idx) ? 0 : 07520 PDG_AT_IDX(IR_IDX_L(ir_idx)), 07521 IR_LINE_NUM(ir_idx)); 07522 # endif 07523 07524 guard_cmic_vpr_idx = NULL_IDX; 07525 break; 07526 07527 07528 07529 07530 07531 case Numcpus_Cmic_Opr : 07532 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 07533 IR_FLD_L(ir_idx)); 07534 07535 PDG_DBG_PRINT_START 07536 PDG_DBG_PRINT_C("fei_numcpus"); 07537 PDG_DBG_PRINT_D("(1) line num", IR_LINE_NUM(ir_idx)); 07538 PDG_DBG_PRINT_END 07539 07540 # ifdef _ENABLE_FEI 07541 fei_numcpus(IR_LINE_NUM(ir_idx)); 07542 # endif 07543 break; 07544 07545 07546 07547 07548 07549 07550 case Ranf_Opr : 07551 basic = get_basic_type(IR_TYPE_IDX(ir_idx), 0, NULL_IDX); 07552 07553 PDG_DBG_PRINT_START 07554 PDG_DBG_PRINT_C("fei_ranf"); 07555 PDG_DBG_PRINT_END 07556 07557 # ifdef _ENABLE_FEI 07558 fei_ranf(basic); 07559 # endif 07560 07561 break; 07562 07563 07564 07565 07566 07567 07568 07569 case Regionbegin_Star_Opr: 07570 case Regionend_Star_Opr: 07571 case End_Critical_Section_Par_Opr: 07572 case End_Parallel_Par_Opr: 07573 case Section_Par_Opr: 07574 case Barrier_Par_Opr: 07575 switch (IR_OPR(ir_idx)) { 07576 case Regionbegin_Star_Opr: 07577 PDG_DBG_PRINT_START 07578 PDG_DBG_PRINT_C("fei_regionbegin"); 07579 PDG_DBG_PRINT_END 07580 # if defined(GENERATE_WHIRL) 07581 # ifdef _ENABLE_FEI 07582 fei_regionbegin(); 07583 # endif 07584 # endif 07585 break; 07586 07587 case Regionend_Star_Opr : 07588 PDG_DBG_PRINT_START 07589 PDG_DBG_PRINT_C("fei_regionend"); 07590 PDG_DBG_PRINT_END 07591 # if defined(GENERATE_WHIRL) 07592 # ifdef _ENABLE_FEI 07593 fei_regionend(); 07594 # endif 07595 # endif 07596 break; 07597 07598 case End_Critical_Section_Par_Opr : 07599 PDG_DBG_PRINT_START 07600 PDG_DBG_PRINT_C("fei_endcriticalsection"); 07601 PDG_DBG_PRINT_END 07602 # if defined(GENERATE_WHIRL) 07603 # ifdef _ENABLE_FEI 07604 fei_endcriticalsection(); 07605 # endif 07606 # endif 07607 break; 07608 07609 case End_Parallel_Par_Opr : 07610 PDG_DBG_PRINT_START 07611 PDG_DBG_PRINT_C("fei_endparallel"); 07612 PDG_DBG_PRINT_END 07613 # if defined(GENERATE_WHIRL) 07614 # ifdef _ENABLE_FEI 07615 fei_endparallel(); 07616 # endif 07617 # endif 07618 break; 07619 07620 case Section_Par_Opr : 07621 PDG_DBG_PRINT_START 07622 PDG_DBG_PRINT_C("fei_section"); 07623 PDG_DBG_PRINT_END 07624 # if defined(GENERATE_WHIRL) 07625 # ifdef _ENABLE_FEI 07626 fei_section(); 07627 # endif 07628 # endif 07629 break; 07630 07631 case Barrier_Par_Opr : 07632 PDG_DBG_PRINT_START 07633 PDG_DBG_PRINT_C("fei_barrier"); 07634 PDG_DBG_PRINT_END 07635 # ifdef _ENABLE_FEI 07636 # if defined(GENERATE_WHIRL) 07637 fei_barrier(); 07638 # endif 07639 # endif 07640 break; 07641 } 07642 break; 07643 07644 07645 07646 07647 07648 07649 07650 07651 07652 07653 case End_Pdo_Par_Opr: 07654 if (IR_FLD_L(ir_idx) == CN_Tbl_Idx) { 07655 nowait = (long) CN_INT_TO_C(IR_IDX_L(ir_idx)); 07656 } 07657 07658 PDG_DBG_PRINT_START 07659 PDG_DBG_PRINT_C("fei_endpdo"); 07660 PDG_DBG_PRINT_LD("(1) nowait", nowait); 07661 PDG_DBG_PRINT_END 07662 07663 07664 # if defined(GENERATE_WHIRL) 07665 # ifdef _ENABLE_FEI 07666 fei_endpdo(nowait); 07667 # endif 07668 # endif 07669 break; 07670 07671 07672 07673 07674 case End_Psection_Par_Opr: 07675 if (IR_FLD_L(ir_idx) == CN_Tbl_Idx) { 07676 nowait = (long) CN_INT_TO_C(IR_IDX_L(ir_idx)); 07677 } 07678 07679 PDG_DBG_PRINT_START 07680 PDG_DBG_PRINT_C("fei_endpsection"); 07681 PDG_DBG_PRINT_LD("(1) nowait", nowait); 07682 PDG_DBG_PRINT_END 07683 07684 07685 # if defined(GENERATE_WHIRL) 07686 # ifdef _ENABLE_FEI 07687 fei_endpsection(nowait); 07688 # endif 07689 # endif 07690 break; 07691 07692 07693 07694 case End_Singleprocess_Par_Opr: 07695 if (IR_FLD_L(ir_idx) == CN_Tbl_Idx) { 07696 nowait = (long) CN_INT_TO_C(IR_IDX_L(ir_idx)); 07697 } 07698 07699 PDG_DBG_PRINT_START 07700 PDG_DBG_PRINT_C("fei_endsingleprocess"); 07701 PDG_DBG_PRINT_LD("(1) nowait", nowait); 07702 PDG_DBG_PRINT_END 07703 07704 07705 # if defined(GENERATE_WHIRL) 07706 # ifdef _ENABLE_FEI 07707 fei_endsingleprocess(nowait); 07708 # endif 07709 # endif 07710 break; 07711 07712 07713 07714 07715 case Critical_Section_Par_Opr: 07716 if (IR_FLD_L(ir_idx) != NO_Tbl_Idx) { 07717 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 07718 IR_FLD_L(ir_idx)); 07719 varcount = 1; 07720 } 07721 07722 PDG_DBG_PRINT_START 07723 PDG_DBG_PRINT_C("fei_criticalsection"); 07724 PDG_DBG_PRINT_LD("(1) varcount", varcount); 07725 PDG_DBG_PRINT_END 07726 07727 07728 # if defined(GENERATE_WHIRL) 07729 # ifdef _ENABLE_FEI 07730 fei_criticalsection(varcount); 07731 # endif 07732 # endif 07733 break; 07734 07735 07736 case User_Code_Start_Opr: 07737 PDG_DBG_PRINT_START 07738 PDG_DBG_PRINT_C("fei_user_code_start"); 07739 PDG_DBG_PRINT_END 07740 07741 # if defined(GENERATE_WHIRL) 07742 # ifdef _ENABLE_FEI 07743 fei_user_code_start(); 07744 # endif 07745 # endif 07746 break; 07747 07748 07749 07750 case Psection_Par_Opr: 07751 case Singleprocess_Par_Opr: 07752 case Parallel_Do_Par_Opr: 07753 case Parallel_Par_Opr: 07754 case Pdo_Par_Opr: 07755 case Doacross_Dollar_Opr: 07756 list_idx1 = IR_IDX_L(ir_idx); 07757 07758 for (i = 0; i < MP_DIR_LIST_CNT; i++) { 07759 list_array[i] = list_idx1; 07760 list_idx1 = IL_NEXT_LIST_IDX(list_idx1); 07761 } 07762 07763 07764 /* process IF clause */ 07765 if (IL_FLD(list_array[MP_DIR_IF_IDX]) == NO_Tbl_Idx) { 07766 task_if_idx = 0; 07767 } 07768 else { 07769 send_attr_ntry(IL_IDX(list_array[MP_DIR_IF_IDX])); 07770 task_if_idx = PDG_AT_IDX(IL_IDX(list_array[MP_DIR_IF_IDX])); 07771 } 07772 07773 07774 /* process ORDERED clause */ 07775 if (IL_FLD(list_array[MP_DIR_ORDERED_IDX]) == CN_Tbl_Idx) { 07776 ordered = (long) CN_INT_TO_C(IL_IDX(list_array[MP_DIR_ORDERED_IDX])); 07777 } 07778 07779 07780 /* process SCHEDTYPE clause */ 07781 if (IL_FLD(list_array[MP_DIR_MP_SCHEDTYPE_IDX]) == CN_Tbl_Idx) { 07782 schedtype = (long) 07783 CN_INT_TO_C(IL_IDX(list_array[MP_DIR_MP_SCHEDTYPE_IDX])); 07784 } 07785 07786 07787 /* process LASTTHREAD clause */ 07788 if (IL_FLD(list_array[MP_DIR_LASTTHREAD_IDX]) == AT_Tbl_Idx) { 07789 send_attr_ntry(IL_IDX(list_array[MP_DIR_LASTTHREAD_IDX])); 07790 07791 PDG_DBG_PRINT_START 07792 PDG_DBG_PRINT_C("fei_task_var"); 07793 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 07794 PDG_AT_IDX(IL_IDX(list_array[MP_DIR_LASTTHREAD_IDX]))); 07795 PDG_DBG_PRINT_S("(2) context", 07796 p_tasking_context[Context_Lastthread]); 07797 PDG_DBG_PRINT_END 07798 07799 # ifdef _ENABLE_FEI 07800 last_task_idx = fei_task_var( 07801 PDG_AT_IDX(IL_IDX(list_array[MP_DIR_LASTTHREAD_IDX])), 07802 Context_Lastthread); 07803 # endif 07804 } 07805 07806 07807 /* process SHARED clause */ 07808 if (IL_FLD(list_array[MP_DIR_SHARE_IDX]) == IL_Tbl_Idx) { 07809 list_idx2 = IL_IDX(list_array[MP_DIR_SHARE_IDX]); 07810 07811 while (list_idx2) { 07812 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 07813 send_attr_ntry(IL_IDX(list_idx2)); 07814 07815 PDG_DBG_PRINT_START 07816 PDG_DBG_PRINT_C("fei_task_var"); 07817 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 07818 PDG_AT_IDX(IL_IDX(list_idx2))); 07819 PDG_DBG_PRINT_S("(2) context", 07820 p_tasking_context[Context_Shared]); 07821 07822 PDG_DBG_PRINT_END 07823 07824 # ifdef _ENABLE_FEI 07825 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 07826 Context_Shared); 07827 # endif 07828 07829 } 07830 07831 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 07832 } 07833 } 07834 07835 07836 /* process LASTLOCAL clause */ 07837 if (IL_FLD(list_array[MP_DIR_LASTLOCAL_IDX]) == IL_Tbl_Idx) { 07838 list_idx2 = IL_IDX(list_array[MP_DIR_LASTLOCAL_IDX]); 07839 07840 while (list_idx2) { 07841 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 07842 send_attr_ntry(IL_IDX(list_idx2)); 07843 07844 PDG_DBG_PRINT_START 07845 PDG_DBG_PRINT_C("fei_task_var"); 07846 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 07847 PDG_AT_IDX(IL_IDX(list_idx2))); 07848 PDG_DBG_PRINT_S("(2) context", 07849 p_tasking_context[Context_Lastlocal]); 07850 07851 PDG_DBG_PRINT_END 07852 07853 # ifdef _ENABLE_FEI 07854 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 07855 Context_Lastlocal); 07856 # endif 07857 07858 } 07859 07860 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 07861 } 07862 } 07863 07864 07865 07866 07867 07868 07869 /* process PRIVATE clause */ 07870 if (IL_FLD(list_array[MP_DIR_LOCAL_IDX]) == IL_Tbl_Idx) { 07871 list_idx2 = IL_IDX(list_array[MP_DIR_LOCAL_IDX]); 07872 07873 while (list_idx2) { 07874 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 07875 send_attr_ntry(IL_IDX(list_idx2)); 07876 07877 PDG_DBG_PRINT_START 07878 PDG_DBG_PRINT_C("fei_task_var"); 07879 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 07880 PDG_AT_IDX(IL_IDX(list_idx2))); 07881 PDG_DBG_PRINT_S("(2) context", 07882 p_tasking_context[Context_Private]); 07883 07884 PDG_DBG_PRINT_END 07885 07886 # ifdef _ENABLE_FEI 07887 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 07888 Context_Private); 07889 # endif 07890 07891 } 07892 07893 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 07894 } 07895 } 07896 07897 07898 07899 07900 /* process NEST clause */ 07901 if (IL_FLD(list_array[MP_DIR_NEST_IDX]) == IL_Tbl_Idx) { 07902 list_idx2 = IL_IDX(list_array[MP_DIR_NEST_IDX]); 07903 07904 while (list_idx2) { 07905 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 07906 send_attr_ntry(IL_IDX(list_idx2)); 07907 07908 PDG_DBG_PRINT_START 07909 PDG_DBG_PRINT_C("fei_task_var"); 07910 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 07911 PDG_AT_IDX(IL_IDX(list_idx2))); 07912 PDG_DBG_PRINT_S("(2) context", 07913 p_tasking_context[Context_Nest]); 07914 PDG_DBG_PRINT_END 07915 07916 # ifdef _ENABLE_FEI 07917 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 07918 Context_Nest); 07919 # endif 07920 07921 } 07922 07923 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 07924 } 07925 } 07926 07927 07928 07929 /* process AFFINITY clause */ 07930 if (IL_FLD(list_array[MP_DIR_AFFINITY_IDX]) == IL_Tbl_Idx) { 07931 list_idx2 = IL_IDX(list_array[MP_DIR_AFFINITY_IDX]); 07932 07933 while (list_idx2 != NULL_IDX) { 07934 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 07935 send_attr_ntry(IL_IDX(list_idx2)); 07936 07937 PDG_DBG_PRINT_START 07938 PDG_DBG_PRINT_C("fei_task_var"); 07939 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 07940 PDG_AT_IDX(IL_IDX(list_idx2))); 07941 PDG_DBG_PRINT_S("(2) context", 07942 p_tasking_context[Context_Affinity]); 07943 PDG_DBG_PRINT_END 07944 07945 # ifdef _ENABLE_FEI 07946 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 07947 Context_Affinity); 07948 # endif 07949 07950 } 07951 07952 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 07953 } 07954 07955 cvrt_exp_to_pdg(IL_IDX(list_array[MP_DIR_THREAD_DATA_IDX]), 07956 IL_FLD(list_array[MP_DIR_THREAD_DATA_IDX])); 07957 07958 cvrt_exp_to_pdg(IL_IDX(list_array[MP_DIR_THREAD_DATA_IDX]), 07959 IL_FLD(list_array[MP_DIR_THREAD_DATA_IDX])); 07960 07961 which = (long) CN_INT_TO_C(IL_IDX(list_array[MP_DIR_IS_THREAD_IDX])); 07962 07963 if (which == 1) { 07964 threadcount = 1; 07965 } 07966 else { 07967 datacount = 1; 07968 } 07969 } 07970 07971 07972 07973 07974 /* process ONTO clause */ 07975 if (IL_FLD(list_array[MP_DIR_ONTO_IDX]) == IL_Tbl_Idx) { 07976 list_idx2 = IL_IDX(list_array[MP_DIR_ONTO_IDX]); 07977 07978 ontocount = 0; 07979 while (list_idx2 != NULL_IDX) { 07980 cvrt_exp_to_pdg(IL_IDX(list_idx2), 07981 IL_FLD(list_idx2)); 07982 07983 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 07984 ontocount = ontocount + 1; 07985 } 07986 } 07987 07988 07989 07990 07991 /* process REDUCTION clause */ 07992 if (IL_FLD(list_array[MP_DIR_REDUCTION_IDX]) == IL_Tbl_Idx) { 07993 list_idx2 = IL_IDX(list_array[MP_DIR_REDUCTION_IDX]); 07994 07995 reductioncount = 0; 07996 while (list_idx2 != NULL_IDX) { 07997 cvrt_exp_to_pdg(IL_IDX(list_idx2), 07998 IL_FLD(list_idx2)); 07999 08000 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 08001 reductioncount = reductioncount + 1; 08002 } 08003 } 08004 08005 08006 08007 /* process CHUNK clause */ 08008 if (IL_FLD(list_array[MP_DIR_CHUNK_IDX]) != NO_Tbl_Idx) { 08009 cvrt_exp_to_pdg(IL_IDX(list_array[MP_DIR_CHUNK_IDX]), 08010 IL_FLD(list_array[MP_DIR_CHUNK_IDX])); 08011 chunkcount = 1; 08012 } 08013 08014 08015 08016 switch (IR_OPR(ir_idx)) { 08017 08018 case Doacross_Dollar_Opr : 08019 PDG_DBG_PRINT_START 08020 PDG_DBG_PRINT_C("fei_doacross"); 08021 PDG_DBG_PRINT_D("(1) if idx", task_if_idx); 08022 PDG_DBG_PRINT_LD("(2) schedtype", schedtype); 08023 PDG_DBG_PRINT_LD("(3) threadcount", threadcount); 08024 PDG_DBG_PRINT_LD("(4) datacount", datacount); 08025 PDG_DBG_PRINT_LD("(5) ontocount", ontocount); 08026 PDG_DBG_PRINT_LD("(6) reductioncount", reductioncount); 08027 PDG_DBG_PRINT_LD("(7) chunkcount", chunkcount); 08028 PDG_DBG_PRINT_END 08029 08030 # if defined(GENERATE_WHIRL) 08031 # ifdef _ENABLE_FEI 08032 fei_doacross(task_if_idx, 08033 schedtype, 08034 threadcount, 08035 datacount, 08036 ontocount, 08037 reductioncount, 08038 chunkcount); 08039 08040 # endif 08041 # endif 08042 break; 08043 08044 08045 08046 case Pdo_Par_Opr : 08047 PDG_DBG_PRINT_START 08048 PDG_DBG_PRINT_C("fei_pdo"); 08049 PDG_DBG_PRINT_LD("(1) schedtype", schedtype); 08050 PDG_DBG_PRINT_LD("(2) ordered", ordered); 08051 PDG_DBG_PRINT_LD("(3) threadcount", threadcount); 08052 PDG_DBG_PRINT_LD("(4) datacount", datacount); 08053 PDG_DBG_PRINT_LD("(5) ontocount", ontocount); 08054 PDG_DBG_PRINT_LD("(6) reductioncount", reductioncount); 08055 PDG_DBG_PRINT_LD("(7) chunkcount", chunkcount); 08056 PDG_DBG_PRINT_END 08057 08058 # if defined(GENERATE_WHIRL) 08059 # ifdef _ENABLE_FEI 08060 fei_pdo(schedtype, 08061 ordered, 08062 threadcount, 08063 datacount, 08064 ontocount, 08065 reductioncount, 08066 chunkcount); 08067 # endif 08068 # endif 08069 break; 08070 08071 08072 08073 case Parallel_Do_Par_Opr : 08074 PDG_DBG_PRINT_START 08075 PDG_DBG_PRINT_C("fei_paralleldo"); 08076 PDG_DBG_PRINT_D("(1) if idx", task_if_idx); 08077 PDG_DBG_PRINT_LD("(2) schedtype", schedtype); 08078 PDG_DBG_PRINT_LD("(3) threadcount", threadcount); 08079 PDG_DBG_PRINT_LD("(4) datacount", datacount); 08080 PDG_DBG_PRINT_LD("(5) ontocount", ontocount); 08081 PDG_DBG_PRINT_LD("(6) reductioncount", reductioncount); 08082 PDG_DBG_PRINT_LD("(7) chunkcount", chunkcount); 08083 PDG_DBG_PRINT_END 08084 08085 08086 # if defined(GENERATE_WHIRL) 08087 # ifdef _ENABLE_FEI 08088 fei_paralleldo(task_if_idx, 08089 schedtype, 08090 threadcount, 08091 datacount, 08092 ontocount, 08093 reductioncount, 08094 chunkcount); 08095 # endif 08096 # endif 08097 break; 08098 08099 08100 08101 08102 case Parallel_Par_Opr : 08103 PDG_DBG_PRINT_START 08104 PDG_DBG_PRINT_C("fei_parallel"); 08105 PDG_DBG_PRINT_D("(1) if idx", task_if_idx); 08106 PDG_DBG_PRINT_END 08107 08108 08109 # if defined(GENERATE_WHIRL) 08110 # ifdef _ENABLE_FEI 08111 fei_parallel(task_if_idx); 08112 # endif 08113 # endif 08114 break; 08115 08116 08117 08118 case Singleprocess_Par_Opr : 08119 PDG_DBG_PRINT_START 08120 PDG_DBG_PRINT_C("fei_singleprocess"); 08121 PDG_DBG_PRINT_END 08122 08123 08124 # if defined(GENERATE_WHIRL) 08125 # ifdef _ENABLE_FEI 08126 fei_singleprocess(); 08127 # endif 08128 # endif 08129 break; 08130 08131 08132 08133 08134 case Psection_Par_Opr: 08135 PDG_DBG_PRINT_START 08136 PDG_DBG_PRINT_C("fei_psection"); 08137 PDG_DBG_PRINT_END 08138 08139 08140 # if defined(GENERATE_WHIRL) 08141 # ifdef _ENABLE_FEI 08142 fei_psection(); 08143 # endif 08144 # endif 08145 break; 08146 08147 } 08148 break; 08149 08150 08151 08152 08153 08154 case Concurrentize_Star_Opr: 08155 PDG_DBG_PRINT_START 08156 PDG_DBG_PRINT_C("fei_concurrentize"); 08157 PDG_DBG_PRINT_D("(1) state", TRUE); 08158 PDG_DBG_PRINT_END 08159 08160 # if defined(GENERATE_WHIRL) 08161 # ifdef _ENABLE_FEI 08162 fei_concurrentize(TRUE); 08163 # endif 08164 # endif 08165 08166 break; 08167 08168 08169 08170 08171 08172 case Noconcurrentize_Star_Opr: 08173 PDG_DBG_PRINT_START 08174 PDG_DBG_PRINT_C("fei_concurrentize"); 08175 PDG_DBG_PRINT_D("(1) state", FALSE); 08176 PDG_DBG_PRINT_END 08177 08178 # if defined(GENERATE_WHIRL) 08179 # ifdef _ENABLE_FEI 08180 fei_concurrentize(FALSE); 08181 # endif 08182 # endif 08183 08184 break; 08185 08186 08187 08188 08189 08190 08191 08192 08193 case Interchange_Dir_Opr: 08194 08195 # if defined(GENERATE_WHIRL) 08196 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 08197 IR_FLD_L(ir_idx)); 08198 08199 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 08200 IR_FLD_R(ir_idx)); 08201 08202 PDG_DBG_PRINT_START 08203 PDG_DBG_PRINT_C("fei_interchange"); 08204 PDG_DBG_PRINT_D("(1) expressions", IR_LIST_CNT_L(ir_idx)); 08205 PDG_DBG_PRINT_END 08206 08207 # ifdef _ENABLE_FEI 08208 fei_interchange(IR_LIST_CNT_L(ir_idx)); 08209 # endif 08210 # endif 08211 break; 08212 08213 08214 08215 08216 08217 08218 case Blockable_Dir_Opr: 08219 08220 # if defined(GENERATE_WHIRL) 08221 08222 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 08223 IR_FLD_L(ir_idx)); 08224 08225 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 08226 IR_FLD_R(ir_idx)); 08227 08228 PDG_DBG_PRINT_START 08229 PDG_DBG_PRINT_C("fei_blockable"); 08230 PDG_DBG_PRINT_D("(1) expressions", IR_LIST_CNT_L(ir_idx)); 08231 PDG_DBG_PRINT_END 08232 08233 # ifdef _ENABLE_FEI 08234 fei_blockable(IR_LIST_CNT_L(ir_idx)); 08235 # endif 08236 # endif 08237 break; 08238 08239 08240 08241 case Fission_Star_Opr: 08242 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 08243 IR_FLD_L(ir_idx)); 08244 08245 PDG_DBG_PRINT_START 08246 PDG_DBG_PRINT_C("fei_fission"); 08247 PDG_DBG_PRINT_END 08248 08249 # if defined(GENERATE_WHIRL) 08250 # ifdef _ENABLE_FEI 08251 fei_fission(); 08252 # endif 08253 # endif 08254 break; 08255 08256 08257 08258 08259 case Flush_Star_Opr: 08260 list_cnt = 0; 08261 if (IR_FLD_L(ir_idx) == IL_Tbl_Idx) { 08262 list_cnt = IR_LIST_CNT_L(ir_idx); 08263 } 08264 08265 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 08266 IR_FLD_L(ir_idx)); 08267 08268 PDG_DBG_PRINT_START 08269 PDG_DBG_PRINT_C("fei_flush"); 08270 PDG_DBG_PRINT_D("(1) list_cnt", list_cnt); 08271 PDG_DBG_PRINT_END 08272 08273 08274 # if defined(GENERATE_WHIRL) 08275 # ifdef _ENABLE_FEI 08276 fei_flush(list_cnt); 08277 # endif 08278 # endif 08279 break; 08280 08281 case Fuse_Star_Opr: 08282 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 08283 IR_FLD_L(ir_idx)); 08284 08285 if (IR_FLD_R(ir_idx) == CN_Tbl_Idx) { 08286 level = (long) CN_INT_TO_C(IR_IDX_R(ir_idx)); 08287 } 08288 08289 PDG_DBG_PRINT_START 08290 PDG_DBG_PRINT_C("fei_fuse"); 08291 PDG_DBG_PRINT_LD("(1) level", level); 08292 PDG_DBG_PRINT_END 08293 08294 # if defined(GENERATE_WHIRL) 08295 # ifdef _ENABLE_FEI 08296 fei_fuse(level); 08297 # endif 08298 # endif 08299 break; 08300 08301 08302 08303 08304 08305 08306 08307 08308 case Assert_Star_Opr: 08309 assertion = (long) CN_INT_TO_C(IR_IDX_L(ir_idx)); 08310 08311 if (IR_FLD_R(ir_idx) == NO_Tbl_Idx) { 08312 count = 0; 08313 } 08314 else if (IR_FLD_R(ir_idx) == IL_Tbl_Idx) { 08315 count = IR_LIST_CNT_R(ir_idx); 08316 } 08317 else { 08318 count = 1; 08319 } 08320 08321 if (IR_FLD_R(ir_idx) != NO_Tbl_Idx) { 08322 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 08323 IR_FLD_R(ir_idx)); 08324 } 08325 08326 PDG_DBG_PRINT_START 08327 PDG_DBG_PRINT_C("fei_assert"); 08328 PDG_DBG_PRINT_LD("(1) assertion", assertion); 08329 PDG_DBG_PRINT_D("(2) count ", count); 08330 PDG_DBG_PRINT_END 08331 08332 # if defined(GENERATE_WHIRL) 08333 # ifdef _ENABLE_FEI 08334 fei_assert(assertion, count); 08335 # endif 08336 # endif 08337 break; 08338 08339 08340 08341 08342 08343 case Unroll_Star_Opr: 08344 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 08345 IR_FLD_L(ir_idx)); 08346 08347 PDG_DBG_PRINT_START 08348 PDG_DBG_PRINT_C("fei_unroll"); 08349 PDG_DBG_PRINT_END 08350 08351 # if defined(GENERATE_WHIRL) 08352 # ifdef _ENABLE_FEI 08353 fei_unroll(); 08354 # endif 08355 # endif 08356 break; 08357 08358 08359 08360 08361 08362 case Section_Nongp_Star_Opr: 08363 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 08364 IR_FLD_L(ir_idx)); 08365 08366 PDG_DBG_PRINT_START 08367 PDG_DBG_PRINT_C("fei_section_nongp"); 08368 PDG_DBG_PRINT_D("(1) list count", IR_LIST_CNT_L(ir_idx)); 08369 PDG_DBG_PRINT_END 08370 08371 # if defined(GENERATE_WHIRL) 08372 # ifdef _ENABLE_FEI 08373 fei_section_nongp(IR_LIST_CNT_L(ir_idx)); 08374 # endif 08375 # endif 08376 break; 08377 08378 08379 08380 08381 08382 08383 case Section_Gp_Star_Opr: 08384 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 08385 IR_FLD_L(ir_idx)); 08386 08387 PDG_DBG_PRINT_START 08388 PDG_DBG_PRINT_C("fei_section_gp"); 08389 PDG_DBG_PRINT_D("(1) list count", IR_LIST_CNT_L(ir_idx)); 08390 PDG_DBG_PRINT_END 08391 08392 # if defined(GENERATE_WHIRL) 08393 # ifdef _ENABLE_FEI 08394 fei_section_gp(IR_LIST_CNT_L(ir_idx)); 08395 # endif 08396 # endif 08397 break; 08398 08399 08400 08401 08402 08403 case Copyin_Dollar_Opr: 08404 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 08405 IR_FLD_L(ir_idx)); 08406 08407 PDG_DBG_PRINT_START 08408 PDG_DBG_PRINT_C("fei_copy_in"); 08409 PDG_DBG_PRINT_D("(1) list count", IR_LIST_CNT_L(ir_idx)); 08410 PDG_DBG_PRINT_END 08411 08412 # if defined(GENERATE_WHIRL) 08413 # ifdef _ENABLE_FEI 08414 fei_copy_in(IR_LIST_CNT_L(ir_idx)); 08415 # endif 08416 # endif 08417 break; 08418 08419 08420 08421 08422 08423 08424 08425 08426 08427 case Align_Symbol_Star_Opr: 08428 if (IR_FLD_L(ir_idx) == NO_Tbl_Idx) { 08429 list_cnt = 0; 08430 } 08431 else { 08432 list_cnt = 1; 08433 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 08434 IR_FLD_L(ir_idx)); 08435 } 08436 08437 if (IR_FLD_R(ir_idx) == CN_Tbl_Idx) { 08438 C_value = (long) CN_INT_TO_C(IR_IDX_R(ir_idx)); 08439 } 08440 08441 PDG_DBG_PRINT_START 08442 PDG_DBG_PRINT_C("fei_align_symbol"); 08443 PDG_DBG_PRINT_D("(1) list_cnt", list_cnt); 08444 PDG_DBG_PRINT_LD("(2) C_value", C_value); 08445 PDG_DBG_PRINT_END 08446 08447 08448 # if defined(GENERATE_WHIRL) 08449 # ifdef _ENABLE_FEI 08450 fei_align_symbol(list_cnt, C_value); 08451 # endif 08452 # endif 08453 08454 break; 08455 08456 08457 08458 08459 08460 case Fill_Symbol_Star_Opr: 08461 if (IR_FLD_L(ir_idx) == NO_Tbl_Idx) { 08462 list_cnt = 0; 08463 } 08464 else { 08465 list_cnt = 1; 08466 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 08467 IR_FLD_L(ir_idx)); 08468 } 08469 08470 if (IR_FLD_R(ir_idx) == CN_Tbl_Idx) { 08471 C_value = (long) CN_INT_TO_C(IR_IDX_R(ir_idx)); 08472 } 08473 08474 PDG_DBG_PRINT_START 08475 PDG_DBG_PRINT_C("fei_fill_symbol"); 08476 PDG_DBG_PRINT_D("(1) list_cnt", list_cnt); 08477 PDG_DBG_PRINT_LD("(2) C_value", C_value); 08478 PDG_DBG_PRINT_END 08479 08480 08481 # if defined(GENERATE_WHIRL) 08482 # ifdef _ENABLE_FEI 08483 fei_fill_symbol(list_cnt, C_value); 08484 # endif 08485 # endif 08486 break; 08487 08488 08489 08490 08491 08492 08493 08494 case Blockingsize_Dir_Opr: 08495 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 08496 IR_FLD_L(ir_idx)); 08497 08498 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 08499 IR_FLD_R(ir_idx)); 08500 08501 PDG_DBG_PRINT_START 08502 PDG_DBG_PRINT_C("fei_blocking_size"); 08503 PDG_DBG_PRINT_END 08504 08505 # if !defined(_TARGET_OS_MAX) 08506 # ifdef _ENABLE_FEI 08507 fei_blocking_size(); 08508 # endif 08509 # endif 08510 break; 08511 08512 08513 08514 08515 case Purpleconditional_Star_Opr: 08516 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 08517 IR_FLD_L(ir_idx)); 08518 08519 PDG_DBG_PRINT_START 08520 PDG_DBG_PRINT_C("fei_purple_conditional"); 08521 PDG_DBG_PRINT_END 08522 08523 # if defined(GENERATE_WHIRL) 08524 # ifdef _ENABLE_FEI 08525 fei_purple_conditional(); 08526 # endif 08527 # endif 08528 break; 08529 08530 08531 08532 08533 08534 08535 case Opaque_Star_Opr: 08536 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 08537 IR_FLD_L(ir_idx)); 08538 08539 PDG_DBG_PRINT_START 08540 PDG_DBG_PRINT_C("fei_opaque"); 08541 PDG_DBG_PRINT_END 08542 08543 # if defined(GENERATE_WHIRL) 08544 # ifdef _ENABLE_FEI 08545 fei_opaque(); 08546 # endif 08547 # endif 08548 break; 08549 08550 08551 08552 08553 08554 08555 08556 case Purpleunconditional_Star_Opr: 08557 PDG_DBG_PRINT_START 08558 PDG_DBG_PRINT_C("fei_purple_unconditional"); 08559 PDG_DBG_PRINT_END 08560 08561 # if defined(GENERATE_WHIRL) 08562 # ifdef _ENABLE_FEI 08563 fei_purple_unconditional(); 08564 # endif 08565 # endif 08566 break; 08567 08568 08569 08570 08571 case Dynamic_Dollar_Opr: 08572 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 08573 IR_FLD_L(ir_idx)); 08574 08575 list_cnt = IR_LIST_CNT_L(ir_idx); 08576 08577 PDG_DBG_PRINT_START 08578 PDG_DBG_PRINT_C("fei_dynamic"); 08579 PDG_DBG_PRINT_D("(1) list count", list_cnt); 08580 PDG_DBG_PRINT_END 08581 08582 # if defined(GENERATE_WHIRL) 08583 # ifdef _ENABLE_FEI 08584 fei_dynamic(list_cnt); 08585 # endif 08586 # endif 08587 break; 08588 08589 08590 08591 08592 08593 case Page_Place_Dollar_Opr: 08594 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 08595 IR_FLD_L(ir_idx)); 08596 08597 PDG_DBG_PRINT_START 08598 PDG_DBG_PRINT_C("fei_page_place"); 08599 PDG_DBG_PRINT_END 08600 08601 # if defined(GENERATE_WHIRL) 08602 # ifdef _ENABLE_FEI 08603 fei_page_place(); 08604 # endif 08605 # endif 08606 break; 08607 08608 08609 08610 08611 case Prefetch_Manual_Star_Opr: 08612 if (IR_FLD_L(ir_idx) == CN_Tbl_Idx) { 08613 prefetch_manual = (long) CN_INT_TO_C(IR_IDX_L(ir_idx)); 08614 } 08615 08616 PDG_DBG_PRINT_START 08617 PDG_DBG_PRINT_C("fei_prefetch_manual"); 08618 PDG_DBG_PRINT_LD("(1) prefetch_manual", prefetch_manual); 08619 PDG_DBG_PRINT_END 08620 08621 # if defined(GENERATE_WHIRL) 08622 # ifdef _ENABLE_FEI 08623 fei_prefetch_manual(prefetch_manual); 08624 # endif 08625 # endif 08626 break; 08627 08628 08629 08630 08631 08632 08633 case Prefetch_Star_Opr: 08634 if (IR_FLD_L(ir_idx) == CN_Tbl_Idx) { 08635 n1 = (long) CN_INT_TO_C(IR_IDX_L(ir_idx)); 08636 } 08637 08638 if (IR_FLD_R(ir_idx) == CN_Tbl_Idx) { 08639 n2 = (long) CN_INT_TO_C(IR_IDX_R(ir_idx)); 08640 } 08641 08642 PDG_DBG_PRINT_START 08643 PDG_DBG_PRINT_C("fei_prefetch"); 08644 PDG_DBG_PRINT_LD("(1) n1", n1); 08645 PDG_DBG_PRINT_LD("(2) n2", n2); 08646 PDG_DBG_PRINT_END 08647 08648 # if defined(GENERATE_WHIRL) 08649 # ifdef _ENABLE_FEI 08650 fei_prefetch(n1, n2); 08651 # endif 08652 # endif 08653 break; 08654 08655 08656 08657 08658 08659 08660 case Prefetch_Ref_Disable_Star_Opr: 08661 if (IR_FLD_L(ir_idx) == AT_Tbl_Idx) { 08662 send_attr_ntry(IR_IDX_L(ir_idx)); 08663 prefetch_array = (long) PDG_AT_IDX(IR_IDX_L(ir_idx)); 08664 } 08665 08666 if (IR_FLD_R(ir_idx) == CN_Tbl_Idx) { 08667 prefetch_size = (long) CN_INT_TO_C(IR_IDX_R(ir_idx)); 08668 } 08669 08670 PDG_DBG_PRINT_START 08671 PDG_DBG_PRINT_C("fei_prefetch_ref_disable"); 08672 PDG_DBG_PRINT_LD("(1) prefetch_array", prefetch_array); 08673 PDG_DBG_PRINT_LD("(2) prefetch_size", prefetch_size); 08674 PDG_DBG_PRINT_END 08675 08676 # if defined(GENERATE_WHIRL) 08677 # ifdef _ENABLE_FEI 08678 fei_prefetch_ref_disable(prefetch_array, prefetch_size); 08679 # endif 08680 # endif 08681 break; 08682 08683 08684 08685 08686 08687 08688 08689 case Prefetch_Ref_Star_Opr: 08690 list_idx1 = IR_IDX_L(ir_idx); 08691 08692 for (i = 0; i < 5; i++) { 08693 list_array[i] = list_idx1; 08694 list_idx1 = IL_NEXT_LIST_IDX(list_idx1); 08695 } 08696 08697 /* stack the array reference */ 08698 cvrt_exp_to_pdg(IL_IDX(list_array[0]), 08699 IL_FLD(list_array[0])); 08700 08701 /* stack the stride list - 1 or 2 items in list */ 08702 cvrt_exp_to_pdg(IL_IDX(list_array[1]), 08703 IL_FLD(list_array[1])); 08704 if (IL_FLD(list_array[1]) != NO_Tbl_Idx) { 08705 stride_list = IL_LIST_CNT(list_array[1]); 08706 } 08707 08708 /* stack the level list - 1 or 2 items in list */ 08709 cvrt_exp_to_pdg(IL_IDX(list_array[2]), 08710 IL_FLD(list_array[2])); 08711 if (IL_FLD(list_array[2]) != NO_Tbl_Idx) { 08712 level_list = IL_LIST_CNT(list_array[2]); 08713 } 08714 08715 if (IL_FLD(list_array[3]) == CN_Tbl_Idx) { 08716 prefetch_kind = (long) CN_INT_TO_C(IL_IDX(list_array[3])); 08717 } 08718 08719 if (IL_FLD(list_array[4]) == CN_Tbl_Idx) { 08720 prefetch_size = (long) CN_INT_TO_C(IL_IDX(list_array[4])); 08721 } 08722 08723 PDG_DBG_PRINT_START 08724 PDG_DBG_PRINT_C("fei_prefetch_ref"); 08725 PDG_DBG_PRINT_D("(1) stride_list", stride_list); 08726 PDG_DBG_PRINT_D("(2) level_list", level_list); 08727 PDG_DBG_PRINT_LD("(3) prefetch_kind", prefetch_kind); 08728 PDG_DBG_PRINT_LD("(4) prefetch_size", prefetch_size); 08729 PDG_DBG_PRINT_END 08730 08731 # if defined(GENERATE_WHIRL) 08732 # ifdef _ENABLE_FEI 08733 fei_prefetch_ref(stride_list, 08734 level_list, 08735 prefetch_kind, 08736 prefetch_size); 08737 # endif 08738 # endif 08739 08740 break; 08741 08742 08743 08744 08745 08746 08747 case Redistribute_Dollar_Opr: 08748 if (IR_FLD_L(ir_idx) == AT_Tbl_Idx) { 08749 send_attr_ntry(IR_IDX_L(ir_idx)); 08750 redistribute_array = PDG_AT_IDX(IR_IDX_L(ir_idx)); 08751 } 08752 08753 cyclic_list = IR_IDX_R(ir_idx); 08754 list_cnt = IL_LIST_CNT(cyclic_list); 08755 onto_list = IL_NEXT_LIST_IDX(cyclic_list); 08756 cyclic_list = IL_IDX(cyclic_list); 08757 08758 if (onto_list) { 08759 onto_list = IL_IDX(onto_list); 08760 } 08761 08762 for (j = 1; j <= list_cnt; j++) { 08763 cyclic_exists = 0; 08764 onto_exists = 0; 08765 08766 if (onto_list) { 08767 cvrt_exp_to_pdg(IL_IDX(onto_list), 08768 IL_FLD(onto_list)); 08769 if (IL_FLD(onto_list) != NO_Tbl_Idx) { 08770 onto_exists = 1; 08771 } 08772 } 08773 08774 cvrt_exp_to_pdg(IL_IDX(cyclic_list), 08775 IL_FLD(cyclic_list)); 08776 if (IL_FLD(cyclic_list) != NO_Tbl_Idx) { 08777 cyclic_exists = 1; 08778 } 08779 08780 PDG_DBG_PRINT_START 08781 PDG_DBG_PRINT_C("fei_redistribute"); 08782 PDG_DBG_PRINT_S("AT_OBJ_NAME", 08783 AT_OBJ_NAME_PTR(IR_IDX_L(ir_idx))); 08784 PDG_DBG_PRINT_D("(1) array", redistribute_array); 08785 PDG_DBG_PRINT_D("(2) dimension", j); 08786 PDG_DBG_PRINT_D("(3) distribution", IL_DISTRIBUTION(cyclic_list)); 08787 PDG_DBG_PRINT_LD("(4) cyclic_exists", cyclic_exists); 08788 PDG_DBG_PRINT_LD("(5) onto_exists", onto_exists); 08789 PDG_DBG_PRINT_END 08790 08791 # if defined(GENERATE_WHIRL) 08792 # ifdef _ENABLE_FEI 08793 fei_redistribute(redistribute_array, 08794 j, 08795 IL_DISTRIBUTION(cyclic_list), 08796 cyclic_exists, 08797 onto_exists); 08798 # endif 08799 # endif 08800 cyclic_list = IL_NEXT_LIST_IDX(cyclic_list); 08801 08802 if (onto_list) { 08803 onto_list = IL_NEXT_LIST_IDX(onto_list); 08804 } 08805 } 08806 break; 08807 08808 08809 08810 case Doall_Cmic_Opr: 08811 list_idx1 = IR_IDX_L(ir_idx); 08812 08813 for (i = 0; i < 10; i++) { 08814 list_array[i] = list_idx1; 08815 list_idx1 = IL_NEXT_LIST_IDX(list_idx1); 08816 } 08817 08818 first_task_idx = NULL_IDX; 08819 last_task_idx = first_task_idx; 08820 08821 /* process SHARED list */ 08822 08823 if (IL_FLD(list_array[1]) == IL_Tbl_Idx) { 08824 list_idx2 = IL_IDX(list_array[1]); 08825 08826 while (list_idx2) { 08827 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 08828 send_attr_ntry(IL_IDX(list_idx2)); 08829 08830 PDG_DBG_PRINT_START 08831 PDG_DBG_PRINT_C("fei_task_var"); 08832 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 08833 PDG_AT_IDX(IL_IDX(list_idx2))); 08834 PDG_DBG_PRINT_S("(2) context", 08835 p_tasking_context[Context_Shared]); 08836 PDG_DBG_PRINT_END 08837 08838 # ifdef _ENABLE_FEI 08839 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 08840 Context_Shared); 08841 # endif 08842 08843 if (first_task_idx == NULL_IDX) { 08844 first_task_idx = last_task_idx; 08845 } 08846 } 08847 08848 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 08849 } 08850 } 08851 08852 /* process PRIVATE list */ 08853 08854 if (IL_FLD(list_array[2]) == IL_Tbl_Idx) { 08855 list_idx2 = IL_IDX(list_array[2]); 08856 08857 idx = Context_Private; 08858 # if defined(GENERATE_WHIRL) 08859 if (IL_FLD(list_array[6]) == CN_Tbl_Idx) { /* SAVELAST */ 08860 idx = Context_Lastlocal; 08861 } 08862 # endif 08863 08864 while (list_idx2) { 08865 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 08866 send_attr_ntry(IL_IDX(list_idx2)); 08867 08868 PDG_DBG_PRINT_START 08869 PDG_DBG_PRINT_C("fei_task_var"); 08870 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 08871 PDG_AT_IDX(IL_IDX(list_idx2))); 08872 PDG_DBG_PRINT_S("(2) context", p_tasking_context[idx]); 08873 PDG_DBG_PRINT_END 08874 08875 # ifdef _ENABLE_FEI 08876 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 08877 idx); 08878 # endif 08879 08880 if (first_task_idx == NULL_IDX) { 08881 first_task_idx = last_task_idx; 08882 } 08883 } 08884 08885 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 08886 } 08887 } 08888 08889 /* process GETFIRST list */ 08890 08891 if (IL_FLD(list_array[3]) == IL_Tbl_Idx) { 08892 list_idx2 = IL_IDX(list_array[3]); 08893 08894 while (list_idx2) { 08895 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 08896 send_attr_ntry(IL_IDX(list_idx2)); 08897 08898 PDG_DBG_PRINT_START 08899 PDG_DBG_PRINT_C("fei_task_var"); 08900 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 08901 PDG_AT_IDX(IL_IDX(list_idx2))); 08902 PDG_DBG_PRINT_S("(2) context", 08903 p_tasking_context[Context_Getfirst]); 08904 PDG_DBG_PRINT_END 08905 08906 # ifdef _ENABLE_FEI 08907 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 08908 Context_Getfirst); 08909 # endif 08910 08911 if (first_task_idx == NULL_IDX) { 08912 first_task_idx = last_task_idx; 08913 } 08914 } 08915 08916 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 08917 } 08918 } 08919 08920 08921 /* process CONTROL list */ 08922 08923 if (IL_FLD(list_array[5]) == IL_Tbl_Idx) { 08924 list_idx2 = IL_IDX(list_array[5]); 08925 08926 while (list_idx2) { 08927 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 08928 send_attr_ntry(IL_IDX(list_idx2)); 08929 08930 PDG_DBG_PRINT_START 08931 PDG_DBG_PRINT_C("fei_task_var"); 08932 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 08933 PDG_AT_IDX(IL_IDX(list_idx2))); 08934 PDG_DBG_PRINT_S("(2) context", 08935 p_tasking_context[Context_Control]); 08936 PDG_DBG_PRINT_END 08937 08938 # ifdef _ENABLE_FEI 08939 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 08940 Context_Control); 08941 # endif 08942 08943 if (first_task_idx == NULL_IDX) { 08944 first_task_idx = last_task_idx; 08945 } 08946 } 08947 08948 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 08949 } 08950 } 08951 08952 j = 0; 08953 08954 if (IL_FLD(list_array[4]) == CN_Tbl_Idx) { 08955 /* AUTOSCOPE */ 08956 j = j + 2; 08957 } 08958 08959 if (IL_FLD(list_array[6]) == CN_Tbl_Idx) { 08960 /* SAVELAST */ 08961 j = j + 1; 08962 } 08963 08964 if (IL_FLD(list_array[0]) == NO_Tbl_Idx) { 08965 task_if_idx = 0; 08966 } 08967 else { 08968 send_attr_ntry(IL_IDX(list_array[0])); 08969 task_if_idx = PDG_AT_IDX(IL_IDX(list_array[0])); 08970 } 08971 08972 if (IL_FLD(list_array[7]) == NO_Tbl_Idx) { 08973 task_maxcpus_idx = 0; 08974 } 08975 else { 08976 send_attr_ntry(IL_IDX(list_array[7])); 08977 task_maxcpus_idx = PDG_AT_IDX(IL_IDX(list_array[7])); 08978 } 08979 08980 if (IL_FLD(list_array[9]) == NO_Tbl_Idx) { 08981 task_wdist_idx = 0; 08982 } 08983 else { 08984 send_attr_ntry(IL_IDX(list_array[9])); 08985 task_wdist_idx = PDG_AT_IDX(IL_IDX(list_array[9])); 08986 } 08987 08988 send_attr_ntry(IR_IDX_R(ir_idx)); 08989 big_int = CN_INT_TO_C(IL_IDX(list_array[8])); 08990 08991 PDG_DBG_PRINT_START 08992 PDG_DBG_PRINT_C("fei_doall"); 08993 PDG_DBG_PRINT_D("(1) if idx", task_if_idx); 08994 PDG_DBG_PRINT_D("(2) maxcpus idx", task_maxcpus_idx); 08995 PDG_DBG_PRINT_D("(3) first task idx", first_task_idx); 08996 PDG_DBG_PRINT_D("(4) last task idx", last_task_idx); 08997 PDG_DBG_PRINT_LD("(5) obj idx", PDG_AT_IDX(IR_IDX_R(ir_idx))); 08998 #if defined(_HOST32) && defined(_TARGET64) 08999 PDG_DBG_PRINT_D("(6) const", big_int); 09000 #else 09001 PDG_DBG_PRINT_VD("(6) const", big_int); 09002 #endif 09003 PDG_DBG_PRINT_D("(7) wdist idx", task_wdist_idx); 09004 PDG_DBG_PRINT_D("(8) ", j); 09005 PDG_DBG_PRINT_D("(9) line num", IR_LINE_NUM(ir_idx)); 09006 PDG_DBG_PRINT_END 09007 09008 # ifdef _ENABLE_FEI 09009 fei_doall(task_if_idx, 09010 task_maxcpus_idx, 09011 first_task_idx, 09012 last_task_idx, 09013 PDG_AT_IDX(IR_IDX_R(ir_idx)), 09014 big_int, 09015 task_wdist_idx, 09016 j, 09017 IR_LINE_NUM(ir_idx)); 09018 # endif 09019 09020 break; 09021 09022 09023 09024 09025 09026 case Doparallel_Cmic_Opr: 09027 list_idx1 = IR_IDX_L(ir_idx); 09028 09029 for (i = 0; i < 2; i++) { 09030 list_array[i] = list_idx1; 09031 list_idx1 = IL_NEXT_LIST_IDX(list_idx1); 09032 } 09033 09034 if (IL_FLD(list_array[1]) == NO_Tbl_Idx) { 09035 task_wdist_idx = 0; 09036 } 09037 else { 09038 send_attr_ntry(IL_IDX(list_array[1])); 09039 task_wdist_idx = PDG_AT_IDX(IL_IDX(list_array[1])); 09040 } 09041 09042 send_attr_ntry(IR_IDX_R(ir_idx)); 09043 big_int = CN_INT_TO_C(IL_IDX(list_array[0])); 09044 09045 PDG_DBG_PRINT_START 09046 PDG_DBG_PRINT_C("fei_doparallel"); 09047 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", PDG_AT_IDX(IR_IDX_R(ir_idx))); 09048 #if defined(_HOST32) && defined(_TARGET64) 09049 PDG_DBG_PRINT_D("(2) const", big_int); 09050 #else 09051 PDG_DBG_PRINT_VD("(2) const", big_int); 09052 #endif 09053 PDG_DBG_PRINT_D("(3) task idx", task_wdist_idx); 09054 PDG_DBG_PRINT_D("(4) line num", IR_LINE_NUM(ir_idx)); 09055 PDG_DBG_PRINT_END 09056 09057 09058 # ifdef _ENABLE_FEI 09059 doparallel_cmic_vpr_idx = 09060 fei_doparallel(PDG_AT_IDX(IR_IDX_R(ir_idx)), 09061 big_int, 09062 task_wdist_idx, 09063 IR_LINE_NUM(ir_idx)); 09064 # endif 09065 09066 break; 09067 09068 09069 09070 09071 case Enddo_Cmic_Opr: 09072 09073 if (IR_FLD_L(ir_idx) == CN_Tbl_Idx) { 09074 nowait = (long) CN_INT_TO_C(IR_IDX_L(ir_idx)); 09075 } 09076 09077 PDG_DBG_PRINT_START 09078 PDG_DBG_PRINT_C("fei_task_endloop"); 09079 PDG_DBG_PRINT_D("(1) pdg idx", doparallel_cmic_vpr_idx); 09080 PDG_DBG_PRINT_D("(2) line num", IR_LINE_NUM(ir_idx)); 09081 PDG_DBG_PRINT_LD("(3) nowait", nowait); 09082 PDG_DBG_PRINT_END 09083 09084 # ifdef _ENABLE_FEI 09085 fei_task_endloop(doparallel_cmic_vpr_idx, 09086 IR_LINE_NUM(ir_idx), 09087 nowait); 09088 # endif 09089 doparallel_cmic_vpr_idx = NULL_IDX; 09090 break; 09091 09092 09093 09094 09095 09096 09097 case Parallel_Cmic_Opr: 09098 list_idx1 = IR_IDX_L(ir_idx); 09099 09100 for (i = 0; i < 7; i++) { 09101 list_array[i] = list_idx1; 09102 list_idx1 = IL_NEXT_LIST_IDX(list_idx1); 09103 } 09104 09105 first_task_idx = NULL_IDX; 09106 09107 /* process SHARED list */ 09108 09109 if (IL_FLD(list_array[1]) == IL_Tbl_Idx) { 09110 list_idx2 = IL_IDX(list_array[1]); 09111 09112 while (list_idx2) { 09113 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 09114 send_attr_ntry(IL_IDX(list_idx2)); 09115 09116 PDG_DBG_PRINT_START 09117 PDG_DBG_PRINT_C("fei_task_var"); 09118 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 09119 PDG_AT_IDX(IL_IDX(list_idx2))); 09120 PDG_DBG_PRINT_S("(2) context", 09121 p_tasking_context[Context_Shared]); 09122 PDG_DBG_PRINT_END 09123 09124 # ifdef _ENABLE_FEI 09125 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 09126 Context_Shared); 09127 # endif 09128 09129 if (first_task_idx == NULL_IDX) { 09130 first_task_idx = last_task_idx; 09131 } 09132 } 09133 09134 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 09135 } 09136 } 09137 09138 /* process PRIVATE list */ 09139 09140 if (IL_FLD(list_array[2]) == IL_Tbl_Idx) { 09141 list_idx2 = IL_IDX(list_array[2]); 09142 09143 while (list_idx2) { 09144 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 09145 send_attr_ntry(IL_IDX(list_idx2)); 09146 09147 PDG_DBG_PRINT_START 09148 PDG_DBG_PRINT_C("fei_task_var"); 09149 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 09150 PDG_AT_IDX(IL_IDX(list_idx2))); 09151 PDG_DBG_PRINT_S("(2) context", 09152 p_tasking_context[Context_Private]); 09153 PDG_DBG_PRINT_END 09154 09155 # ifdef _ENABLE_FEI 09156 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 09157 Context_Private); 09158 # endif 09159 09160 if (first_task_idx == NULL_IDX) { 09161 first_task_idx = last_task_idx; 09162 } 09163 } 09164 09165 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 09166 } 09167 } 09168 09169 /* process GETFIRST list */ 09170 09171 if (IL_FLD(list_array[3]) == IL_Tbl_Idx) { 09172 list_idx2 = IL_IDX(list_array[3]); 09173 09174 while (list_idx2) { 09175 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 09176 send_attr_ntry(IL_IDX(list_idx2)); 09177 09178 PDG_DBG_PRINT_START 09179 PDG_DBG_PRINT_C("fei_task_var"); 09180 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 09181 PDG_AT_IDX(IL_IDX(list_idx2))); 09182 PDG_DBG_PRINT_S("(2) context", 09183 p_tasking_context[Context_Getfirst]); 09184 PDG_DBG_PRINT_END 09185 09186 # ifdef _ENABLE_FEI 09187 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 09188 Context_Getfirst); 09189 # endif 09190 09191 if (first_task_idx == NULL_IDX) { 09192 first_task_idx = last_task_idx; 09193 } 09194 } 09195 09196 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 09197 } 09198 } 09199 09200 /* process CONTROL list */ 09201 09202 if (IL_FLD(list_array[5]) == IL_Tbl_Idx) { 09203 list_idx2 = IL_IDX(list_array[5]); 09204 09205 while (list_idx2) { 09206 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 09207 send_attr_ntry(IL_IDX(list_idx2)); 09208 09209 PDG_DBG_PRINT_START 09210 PDG_DBG_PRINT_C("fei_task_var"); 09211 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 09212 PDG_AT_IDX(IL_IDX(list_idx2))); 09213 PDG_DBG_PRINT_S("(2) context", 09214 p_tasking_context[Context_Control]); 09215 PDG_DBG_PRINT_END 09216 09217 # ifdef _ENABLE_FEI 09218 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 09219 Context_Control); 09220 # endif 09221 09222 if (first_task_idx == NULL_IDX) { 09223 first_task_idx = last_task_idx; 09224 } 09225 } 09226 09227 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 09228 } 09229 } 09230 09231 i = 0L; 09232 09233 if (IL_FLD(list_array[4]) == CN_Tbl_Idx) { 09234 i = 2; 09235 } 09236 09237 if (IL_FLD(list_array[0]) == NO_Tbl_Idx) { 09238 task_if_idx = 0; 09239 } 09240 else { 09241 send_attr_ntry(IL_IDX(list_array[0])); 09242 task_if_idx = PDG_AT_IDX(IL_IDX(list_array[0])); 09243 } 09244 09245 if (IL_FLD(list_array[6]) == NO_Tbl_Idx) { 09246 task_maxcpus_idx = 0; 09247 } 09248 else { 09249 send_attr_ntry(IL_IDX(list_array[6])); 09250 task_maxcpus_idx = PDG_AT_IDX(IL_IDX(list_array[6])); 09251 } 09252 09253 PDG_DBG_PRINT_START 09254 PDG_DBG_PRINT_C("fei_parallel_region"); 09255 PDG_DBG_PRINT_D("(1) if idx", task_if_idx); 09256 PDG_DBG_PRINT_D("(2) maxcpus idx", task_maxcpus_idx); 09257 PDG_DBG_PRINT_D("(3) first task idx", first_task_idx); 09258 PDG_DBG_PRINT_D("(4) last task idx", last_task_idx); 09259 PDG_DBG_PRINT_D("(5) line num", IR_LINE_NUM(ir_idx)); 09260 PDG_DBG_PRINT_D("(6) ", (int) i); 09261 PDG_DBG_PRINT_END 09262 09263 # ifdef _ENABLE_FEI 09264 parallel_cmic_vpr_idx = fei_parallel_region(task_if_idx, 09265 task_maxcpus_idx, 09266 first_task_idx, 09267 last_task_idx, 09268 IR_LINE_NUM(ir_idx), 09269 i); 09270 # endif 09271 09272 break; 09273 09274 09275 09276 09277 09278 case Endparallel_Cmic_Opr: 09279 PDG_DBG_PRINT_START 09280 PDG_DBG_PRINT_C("fei_endparallel_region"); 09281 PDG_DBG_PRINT_D("(1) cmic vpr idx", doparallel_cmic_vpr_idx); 09282 PDG_DBG_PRINT_D("(2) line num", IR_LINE_NUM(ir_idx)); 09283 PDG_DBG_PRINT_END 09284 09285 # ifdef _ENABLE_FEI 09286 fei_endparallel_region(parallel_cmic_vpr_idx, IR_LINE_NUM(ir_idx)); 09287 # endif 09288 parallel_cmic_vpr_idx = NULL_IDX; 09289 break; 09290 09291 09292 09293 09294 09295 case Suppress_Opr: 09296 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 09297 IR_FLD_L(ir_idx)); 09298 09299 send_label_def(ir_idx); 09300 break; 09301 09302 09303 case Use_Opr: 09304 09305 /* we add a use stmt "use w2f__types" in *.w2f.f files 09306 * we don't want this stmt appearing in the WHIRL representation 09307 * when recompile the generated code,so just igore the stmt 09308 * "use w2f__types" in cvrt_to_PDG processing 09309 * ------fzhao 09310 */ 09311 09312 if (strncasecmp("w2f__types",AT_OBJ_NAME_PTR(IR_IDX_L(ir_idx)),10) == 0) 09313 break; 09314 09315 09316 if (ATP_USE_LIST(IR_IDX_L(ir_idx)) != NULL_IDX) { 09317 ro_idx = ATP_USE_LIST(IR_IDX_L(ir_idx)); 09318 while (ro_idx != NULL_IDX) { 09319 fei_rename_list(&name_pool[AT_NAME_IDX(RO_NAME_ATTR(ro_idx))].name_char); 09320 09321 ++rename_only_num; 09322 fei_rename_list(&name_pool[AT_ORIG_NAME_IDX(RO_NAME_ATTR(ro_idx))].name_char); 09323 ++rename_only_num; 09324 ro_idx = RO_NEXT_IDX(ro_idx); 09325 } 09326 } 09327 09328 09329 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 09330 IR_FLD_L(ir_idx)); 09331 if (ATP_USE_TYPE(IR_IDX_L(ir_idx)) == Use_Only) 09332 onlyPredicate = 1; 09333 09334 fei_use(rename_only_num,onlyPredicate); 09335 09336 # if defined(_MODULE_TO_DOT_o) 09337 if (!on_off_flags.module_to_mod && 09338 # else 09339 if ( 09340 # endif 09341 !ATP_IN_CURRENT_COMPILE(IR_IDX_L(ir_idx))) { 09342 09343 09344 PDG_DBG_PRINT_START 09345 PDG_DBG_PRINT_C("fei_next_name"); 09346 PDG_DBG_PRINT_D("(1) logical", TRUE); 09347 PDG_DBG_PRINT_END 09348 09349 # ifdef _ENABLE_FEI 09350 path_idx = fei_next_name(TRUE); 09351 # endif 09352 09353 PDG_DBG_PRINT_START 09354 PDG_DBG_PRINT_C("fei_name"); 09355 PDG_DBG_PRINT_S("(1) name_ptr", 09356 &name_pool[ATP_MOD_PATH_IDX(IR_IDX_L(ir_idx))].name_char); 09357 PDG_DBG_PRINT_D("(2) unused", 0); 09358 PDG_DBG_PRINT_D("(3) unused", 0); 09359 PDG_DBG_PRINT_D("(4) unused", 0); 09360 PDG_DBG_PRINT_D("(5) index to use", path_idx); 09361 PDG_DBG_PRINT_END 09362 09363 # ifdef _ENABLE_FEI 09364 09365 fei_name(&name_pool[ATP_MOD_PATH_IDX(IR_IDX_L(ir_idx))].name_char, 09366 0, 09367 0, 09368 0, 09369 path_idx); 09370 # endif 09371 09372 09373 PDG_DBG_PRINT_START 09374 PDG_DBG_PRINT_C("fei_next_name"); 09375 PDG_DBG_PRINT_D("(1) logical", TRUE); 09376 PDG_DBG_PRINT_END 09377 09378 # ifdef _ENABLE_FEI 09379 name_idx = fei_next_name(TRUE); 09380 # endif 09381 09382 PDG_DBG_PRINT_START 09383 PDG_DBG_PRINT_C("fei_name"); 09384 PDG_DBG_PRINT_S("(1) AT_OBJ_NAME", 09385 AT_OBJ_NAME_PTR(IR_IDX_L(ir_idx))); 09386 PDG_DBG_PRINT_D("(2) unused", 0); 09387 PDG_DBG_PRINT_D("(3) unused", 0); 09388 PDG_DBG_PRINT_D("(4) unused", 0); 09389 PDG_DBG_PRINT_D("(5) index to use", name_idx); 09390 PDG_DBG_PRINT_END 09391 09392 # ifdef _ENABLE_FEI 09393 fei_name(AT_OBJ_NAME_PTR(IR_IDX_L(ir_idx)), 09394 0, 09395 0, 09396 0, 09397 name_idx); 09398 # endif 09399 09400 name_idx = fei_next_name(TRUE); 09401 09402 09403 PDG_DBG_PRINT_START 09404 PDG_DBG_PRINT_C("fei_add_use_path"); 09405 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 09406 PDG_AT_IDX(SCP_ATTR_IDX(curr_scp_idx))); 09407 PDG_DBG_PRINT_D("(2) path index", path_idx); 09408 PDG_DBG_PRINT_D("(3) name index", name_idx); 09409 PDG_DBG_PRINT_END 09410 09411 # ifdef _ENABLE_FEI 09412 fei_add_use_path(PDG_AT_IDX(SCP_ATTR_IDX(curr_scp_idx)), 09413 path_idx, 09414 name_idx); 09415 09416 #if 0 09417 /* here add send all rename as ST item 09418 here add fei_use(module_name,boolen with only or not) 09419 */ 09420 if (ATP_USE_LIST(IR_IDX_L(ir_idx) != NULL_IDX)) 09421 printf("rename_only_list?\n"); 09422 #endif 09423 09424 09425 # endif 09426 } 09427 break; 09428 09429 09430 09431 09432 case Symbolic_Mult_Opr: 09433 save_symbolic_constant_expr = symbolic_constant_expr; 09434 symbolic_constant_expr = TRUE; 09435 09436 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 09437 IR_FLD_L(ir_idx)); 09438 09439 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 09440 IR_FLD_R(ir_idx)); 09441 09442 PDG_DBG_PRINT_START 09443 PDG_DBG_PRINT_C("npex_mult"); 09444 PDG_DBG_PRINT_END 09445 09446 # ifdef _ENABLE_FEI 09447 npex_mult(); 09448 # endif 09449 09450 symbolic_constant_expr = save_symbolic_constant_expr; 09451 09452 if (!symbolic_constant_expr) { 09453 finish_symbolic_expr(); 09454 } 09455 break; 09456 09457 09458 09459 09460 09461 case Symbolic_Div_Opr: 09462 save_symbolic_constant_expr = symbolic_constant_expr; 09463 symbolic_constant_expr = TRUE; 09464 09465 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 09466 IR_FLD_L(ir_idx)); 09467 09468 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 09469 IR_FLD_R(ir_idx)); 09470 09471 PDG_DBG_PRINT_START 09472 PDG_DBG_PRINT_C("npex_div"); 09473 PDG_DBG_PRINT_END 09474 09475 # ifdef _ENABLE_FEI 09476 npex_div(); 09477 # endif 09478 09479 symbolic_constant_expr = save_symbolic_constant_expr; 09480 09481 if (!symbolic_constant_expr) { 09482 finish_symbolic_expr(); 09483 } 09484 break; 09485 09486 09487 09488 09489 case Symbolic_Plus_Opr: 09490 save_symbolic_constant_expr = symbolic_constant_expr; 09491 symbolic_constant_expr = TRUE; 09492 09493 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 09494 IR_FLD_L(ir_idx)); 09495 09496 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 09497 IR_FLD_R(ir_idx)); 09498 09499 PDG_DBG_PRINT_START 09500 PDG_DBG_PRINT_C("npex_plus"); 09501 PDG_DBG_PRINT_END 09502 09503 # ifdef _ENABLE_FEI 09504 npex_plus(); 09505 # endif 09506 09507 symbolic_constant_expr = save_symbolic_constant_expr; 09508 09509 if (!symbolic_constant_expr) { 09510 finish_symbolic_expr(); 09511 } 09512 break; 09513 09514 09515 09516 09517 09518 case Symbolic_Minus_Opr: 09519 save_symbolic_constant_expr = symbolic_constant_expr; 09520 symbolic_constant_expr = TRUE; 09521 09522 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 09523 IR_FLD_L(ir_idx)); 09524 09525 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 09526 IR_FLD_R(ir_idx)); 09527 09528 PDG_DBG_PRINT_START 09529 PDG_DBG_PRINT_C("npex_minus"); 09530 PDG_DBG_PRINT_END 09531 09532 # ifdef _ENABLE_FEI 09533 npex_minus(); 09534 # endif 09535 09536 symbolic_constant_expr = save_symbolic_constant_expr; 09537 09538 if (!symbolic_constant_expr) { 09539 finish_symbolic_expr(); 09540 } 09541 break; 09542 09543 09544 09545 09546 09547 case Symbolic_Uminus_Opr : 09548 save_symbolic_constant_expr = symbolic_constant_expr; 09549 symbolic_constant_expr = TRUE; 09550 09551 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 09552 IR_FLD_L(ir_idx)); 09553 09554 PDG_DBG_PRINT_START 09555 PDG_DBG_PRINT_C("npex_uminus"); 09556 PDG_DBG_PRINT_END 09557 09558 # ifdef _ENABLE_FEI 09559 npex_uminus(); 09560 # endif 09561 09562 symbolic_constant_expr = save_symbolic_constant_expr; 09563 09564 if (!symbolic_constant_expr) { 09565 finish_symbolic_expr(); 09566 } 09567 break; 09568 09569 09570 09571 09572 case Symbolic_Uplus_Opr : 09573 save_symbolic_constant_expr = symbolic_constant_expr; 09574 symbolic_constant_expr = TRUE; 09575 09576 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 09577 IR_FLD_L(ir_idx)); 09578 09579 09580 symbolic_constant_expr = save_symbolic_constant_expr; 09581 09582 if (!symbolic_constant_expr) { 09583 finish_symbolic_expr(); 09584 } 09585 break; 09586 09587 09588 09589 09590 case Symbolic_Mod_Opr: 09591 save_symbolic_constant_expr = symbolic_constant_expr; 09592 symbolic_constant_expr = TRUE; 09593 09594 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 09595 IR_FLD_L(ir_idx)); 09596 09597 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 09598 IR_FLD_R(ir_idx)); 09599 09600 PDG_DBG_PRINT_START 09601 PDG_DBG_PRINT_C("npex_mod"); 09602 PDG_DBG_PRINT_END 09603 09604 # ifdef _ENABLE_FEI 09605 npex_mod(); 09606 # endif 09607 09608 symbolic_constant_expr = save_symbolic_constant_expr; 09609 09610 if (!symbolic_constant_expr) { 09611 finish_symbolic_expr(); 09612 } 09613 break; 09614 09615 09616 09617 09618 case Symbolic_Shiftr_Opr: 09619 save_symbolic_constant_expr = symbolic_constant_expr; 09620 symbolic_constant_expr = TRUE; 09621 09622 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 09623 IR_FLD_L(ir_idx)); 09624 09625 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 09626 IR_FLD_R(ir_idx)); 09627 09628 PDG_DBG_PRINT_START 09629 PDG_DBG_PRINT_C("npex_shiftr"); 09630 PDG_DBG_PRINT_END 09631 09632 # ifdef _ENABLE_FEI 09633 npex_shiftr(); 09634 # endif 09635 09636 symbolic_constant_expr = save_symbolic_constant_expr; 09637 09638 if (!symbolic_constant_expr) { 09639 finish_symbolic_expr(); 09640 } 09641 break; 09642 09643 09644 09645 09646 09647 case Symbolic_Shiftl_Opr: 09648 save_symbolic_constant_expr = symbolic_constant_expr; 09649 symbolic_constant_expr = TRUE; 09650 09651 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 09652 IR_FLD_L(ir_idx)); 09653 09654 cvrt_exp_to_pdg(IR_IDX_R(ir_idx), 09655 IR_FLD_R(ir_idx)); 09656 09657 PDG_DBG_PRINT_START 09658 PDG_DBG_PRINT_C("npex_shiftl"); 09659 PDG_DBG_PRINT_END 09660 09661 # ifdef _ENABLE_FEI 09662 npex_shiftl(); 09663 # endif 09664 09665 symbolic_constant_expr = save_symbolic_constant_expr; 09666 09667 if (!symbolic_constant_expr) { 09668 finish_symbolic_expr(); 09669 } 09670 break; 09671 09672 09673 09674 09675 09676 case Symbolic_Max_Opr : 09677 save_symbolic_constant_expr = symbolic_constant_expr; 09678 symbolic_constant_expr = TRUE; 09679 09680 tmp_ir_idx = IR_IDX_L(ir_idx); 09681 count = 0; 09682 09683 while (tmp_ir_idx != NULL_IDX) { 09684 09685 if (IL_IDX(tmp_ir_idx) != NULL_IDX) { 09686 cvrt_exp_to_pdg(IL_IDX(tmp_ir_idx), 09687 IL_FLD(tmp_ir_idx)); 09688 count += 1; 09689 } 09690 tmp_ir_idx = IL_NEXT_LIST_IDX(tmp_ir_idx); 09691 } 09692 09693 09694 PDG_DBG_PRINT_START 09695 PDG_DBG_PRINT_C("npex_max"); 09696 PDG_DBG_PRINT_END 09697 09698 # ifdef _TARGET_OS_MAX 09699 # ifdef _ENABLE_FEI 09700 npex_max(); 09701 # endif 09702 # endif 09703 09704 symbolic_constant_expr = save_symbolic_constant_expr; 09705 09706 if (!symbolic_constant_expr) { 09707 finish_symbolic_expr(); 09708 } 09709 break; 09710 09711 09712 09713 09714 09715 case Symbolic_Min_Opr : 09716 save_symbolic_constant_expr = symbolic_constant_expr; 09717 symbolic_constant_expr = TRUE; 09718 09719 tmp_ir_idx = IR_IDX_L(ir_idx); 09720 count = 0; 09721 09722 while (tmp_ir_idx != NULL_IDX) { 09723 09724 if (IL_IDX(tmp_ir_idx) != NULL_IDX) { 09725 cvrt_exp_to_pdg(IL_IDX(tmp_ir_idx), 09726 IL_FLD(tmp_ir_idx)); 09727 count += 1; 09728 } 09729 tmp_ir_idx = IL_NEXT_LIST_IDX(tmp_ir_idx); 09730 } 09731 09732 09733 PDG_DBG_PRINT_START 09734 PDG_DBG_PRINT_C("npex_min"); 09735 PDG_DBG_PRINT_END 09736 09737 # ifdef _TARGET_OS_MAX 09738 # ifdef _ENABLE_FEI 09739 npex_min(); 09740 # endif 09741 # endif 09742 09743 symbolic_constant_expr = save_symbolic_constant_expr; 09744 09745 if (!symbolic_constant_expr) { 09746 finish_symbolic_expr(); 09747 } 09748 break; 09749 09750 09751 09752 case Parallel_Open_Mp_Opr: 09753 case Do_Open_Mp_Opr: 09754 case Sections_Open_Mp_Opr: 09755 case Single_Open_Mp_Opr: 09756 case Paralleldo_Open_Mp_Opr: 09757 case Parallelsections_Open_Mp_Opr: 09758 case Parallelworkshare_Open_Mp_Opr: 09759 case Endsingle_Open_Mp_Opr: 09760 case Flush_Open_Mp_Opr: 09761 list_idx1 = IR_IDX_L(ir_idx); 09762 09763 for (i = 0; i < OPEN_MP_LIST_CNT; i++) { 09764 list_array[i] = list_idx1; 09765 list_idx1 = IL_NEXT_LIST_IDX(list_idx1); 09766 } 09767 09768 09769 /* process IF clause */ 09770 if (IL_FLD(list_array[OPEN_MP_IF_IDX]) == AT_Tbl_Idx) { 09771 send_attr_ntry(IL_IDX(list_array[OPEN_MP_IF_IDX])); 09772 task_if_idx = PDG_AT_IDX(IL_IDX(list_array[OPEN_MP_IF_IDX])); 09773 } 09774 09775 09776 09777 09778 /* process PRIVATE clause */ 09779 if (IL_FLD(list_array[OPEN_MP_PRIVATE_IDX]) == IL_Tbl_Idx) { 09780 list_idx2 = IL_IDX(list_array[OPEN_MP_PRIVATE_IDX]); 09781 09782 while (list_idx2) { 09783 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 09784 send_attr_ntry(IL_IDX(list_idx2)); 09785 09786 PDG_DBG_PRINT_START 09787 PDG_DBG_PRINT_C("fei_task_var"); 09788 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 09789 PDG_AT_IDX(IL_IDX(list_idx2))); 09790 PDG_DBG_PRINT_S("(2) context", 09791 p_tasking_context[Context_Omp_Private]); 09792 PDG_DBG_PRINT_END 09793 09794 # ifdef _ENABLE_FEI 09795 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 09796 Context_Omp_Private); 09797 # endif 09798 09799 } 09800 09801 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 09802 } 09803 } 09804 09805 09806 09807 /* process SHARED clause */ 09808 if (IL_FLD(list_array[OPEN_MP_SHARED_IDX]) == IL_Tbl_Idx) { 09809 list_idx2 = IL_IDX(list_array[OPEN_MP_SHARED_IDX]); 09810 09811 while (list_idx2) { 09812 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 09813 send_attr_ntry(IL_IDX(list_idx2)); 09814 09815 PDG_DBG_PRINT_START 09816 PDG_DBG_PRINT_C("fei_task_var"); 09817 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 09818 PDG_AT_IDX(IL_IDX(list_idx2))); 09819 PDG_DBG_PRINT_S("(2) context", 09820 p_tasking_context[Context_Omp_Shared]); 09821 PDG_DBG_PRINT_END 09822 09823 # ifdef _ENABLE_FEI 09824 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 09825 Context_Omp_Shared); 09826 # endif 09827 09828 } 09829 09830 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 09831 } 09832 } 09833 09834 09835 09836 /* process FIRSTPRIVATE clause */ 09837 if (IL_FLD(list_array[OPEN_MP_FIRSTPRIVATE_IDX]) == IL_Tbl_Idx) { 09838 list_idx2 = IL_IDX(list_array[OPEN_MP_FIRSTPRIVATE_IDX]); 09839 09840 while (list_idx2) { 09841 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 09842 send_attr_ntry(IL_IDX(list_idx2)); 09843 09844 PDG_DBG_PRINT_START 09845 PDG_DBG_PRINT_C("fei_task_var"); 09846 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 09847 PDG_AT_IDX(IL_IDX(list_idx2))); 09848 PDG_DBG_PRINT_S("(2) context", 09849 p_tasking_context[Context_Omp_Firstprivate]); 09850 PDG_DBG_PRINT_END 09851 09852 # ifdef _ENABLE_FEI 09853 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 09854 Context_Omp_Firstprivate); 09855 # endif 09856 09857 } 09858 09859 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 09860 } 09861 } 09862 09863 09864 09865 /* process DEFAULT clause */ 09866 if (IL_FLD(list_array[OPEN_MP_DEFAULT_IDX]) == CN_Tbl_Idx) { 09867 defaultt =(long)CN_INT_TO_C(IL_IDX(list_array[OPEN_MP_DEFAULT_IDX])); 09868 } 09869 09870 09871 09872 09873 /* process COPYIN clause */ 09874 if (IL_FLD(list_array[OPEN_MP_COPYIN_IDX]) == IL_Tbl_Idx) { 09875 list_idx2 = IL_IDX(list_array[OPEN_MP_COPYIN_IDX]); 09876 09877 while (list_idx2) { 09878 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 09879 send_attr_ntry(IL_IDX(list_idx2)); 09880 09881 PDG_DBG_PRINT_START 09882 PDG_DBG_PRINT_C("fei_task_var"); 09883 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 09884 PDG_AT_IDX(IL_IDX(list_idx2))); 09885 PDG_DBG_PRINT_S("(2) context", 09886 p_tasking_context[Context_Omp_Copyin]); 09887 PDG_DBG_PRINT_END 09888 09889 # ifdef _ENABLE_FEI 09890 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 09891 Context_Omp_Copyin); 09892 # endif 09893 09894 } 09895 09896 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 09897 } 09898 } 09899 09900 09901 09902 09903 09904 /* process REDUCTION clause */ 09905 if (IL_FLD(list_array[OPEN_MP_REDUCTION_OPR_IDX]) == IL_Tbl_Idx && 09906 IL_FLD(list_array[OPEN_MP_REDUCTION_LIST_IDX]) == IL_Tbl_Idx) { 09907 list_idx2 = IL_IDX(list_array[OPEN_MP_REDUCTION_OPR_IDX]); 09908 list_idx3 = IL_IDX(list_array[OPEN_MP_REDUCTION_LIST_IDX]); 09909 09910 while (list_idx2) { 09911 if (IL_FLD(list_idx2) == IR_Tbl_Idx && 09912 IL_FLD(list_idx3) == IL_Tbl_Idx) { 09913 list_idx4 = IL_IDX(list_idx3); 09914 while (list_idx4) { 09915 09916 switch (IR_OPR(IL_IDX(list_idx2))) { 09917 case Max_Opr : 09918 context = Context_Omp_Reduction_Max; 09919 break; 09920 case Min_Opr : 09921 context = Context_Omp_Reduction_Min; 09922 break; 09923 case Band_Opr : 09924 context = Context_Omp_Reduction_Band; 09925 break; 09926 case Bor_Opr : 09927 context = Context_Omp_Reduction_Bor; 09928 break; 09929 case Bneqv_Opr : 09930 context = Context_Omp_Reduction_Bneqv; 09931 break; 09932 case Plus_Opr : 09933 context = Context_Omp_Reduction_Plus; 09934 break; 09935 case Mult_Opr : 09936 context = Context_Omp_Reduction_Mult; 09937 break; 09938 case Minus_Opr : 09939 context = Context_Omp_Reduction_Minus; 09940 break; 09941 case And_Opr : 09942 context = Context_Omp_Reduction_And; 09943 break; 09944 case Or_Opr : 09945 context = Context_Omp_Reduction_Or; 09946 break; 09947 case Eqv_Opr : 09948 context = Context_Omp_Reduction_Eqv; 09949 break; 09950 case Neqv_Opr : 09951 context = Context_Omp_Reduction_Neqv; 09952 break; 09953 } 09954 09955 if (IL_FLD(list_idx4) == AT_Tbl_Idx) { 09956 send_attr_ntry(IL_IDX(list_idx4)); 09957 09958 PDG_DBG_PRINT_START 09959 PDG_DBG_PRINT_C("fei_task_var"); 09960 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 09961 PDG_AT_IDX(IL_IDX(list_idx4))); 09962 PDG_DBG_PRINT_S("(2) context", 09963 p_tasking_context[context]); 09964 PDG_DBG_PRINT_END 09965 09966 # ifdef _ENABLE_FEI 09967 last_task_idx = fei_task_var( 09968 PDG_AT_IDX(IL_IDX(list_idx4)), 09969 context); 09970 # endif 09971 } 09972 list_idx4 = IL_NEXT_LIST_IDX(list_idx4); 09973 } 09974 } 09975 09976 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 09977 list_idx3 = IL_NEXT_LIST_IDX(list_idx3); 09978 } 09979 } 09980 09981 09982 09983 09984 09985 09986 /* process LASTPRIVATE clause */ 09987 if (IL_FLD(list_array[OPEN_MP_LASTPRIVATE_IDX]) == IL_Tbl_Idx) { 09988 list_idx2 = IL_IDX(list_array[OPEN_MP_LASTPRIVATE_IDX]); 09989 09990 while (list_idx2) { 09991 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 09992 send_attr_ntry(IL_IDX(list_idx2)); 09993 09994 PDG_DBG_PRINT_START 09995 PDG_DBG_PRINT_C("fei_task_var"); 09996 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 09997 PDG_AT_IDX(IL_IDX(list_idx2))); 09998 PDG_DBG_PRINT_S("(2) context", 09999 p_tasking_context[Context_Omp_Lastprivate]); 10000 PDG_DBG_PRINT_END 10001 10002 # ifdef _ENABLE_FEI 10003 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 10004 Context_Omp_Lastprivate); 10005 # endif 10006 10007 } 10008 10009 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 10010 } 10011 } 10012 10013 10014 10015 10016 /* process ORDERED clause */ 10017 if (IL_FLD(list_array[OPEN_MP_ORDERED_IDX]) == CN_Tbl_Idx) { 10018 ordered = (long)CN_INT_TO_C(IL_IDX(list_array[OPEN_MP_ORDERED_IDX])); 10019 } 10020 10021 10022 10023 /* process SCHEDULE (type) clause */ 10024 if (IL_FLD(list_array[OPEN_MP_SCHEDULE_TYPE_IDX]) == CN_Tbl_Idx) { 10025 scheduletype = (long) 10026 CN_INT_TO_C(IL_IDX(list_array[OPEN_MP_SCHEDULE_TYPE_IDX])); 10027 } 10028 10029 10030 10031 /* process SCHEDULE (chunk) clause */ 10032 if (IL_FLD(list_array[OPEN_MP_SCHEDULE_CHUNK_IDX]) == AT_Tbl_Idx) { 10033 send_attr_ntry(IL_IDX(list_array[OPEN_MP_SCHEDULE_CHUNK_IDX])); 10034 schedulechunk = 10035 PDG_AT_IDX(IL_IDX(list_array[OPEN_MP_SCHEDULE_CHUNK_IDX])); 10036 } 10037 10038 10039 10040 /* process NEST clause */ 10041 if (IL_FLD(list_array[OPEN_MP_NEST_IDX]) == IL_Tbl_Idx) { 10042 list_idx2 = IL_IDX(list_array[OPEN_MP_NEST_IDX]); 10043 10044 while (list_idx2) { 10045 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 10046 send_attr_ntry(IL_IDX(list_idx2)); 10047 10048 PDG_DBG_PRINT_START 10049 PDG_DBG_PRINT_C("fei_task_var"); 10050 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 10051 PDG_AT_IDX(IL_IDX(list_idx2))); 10052 PDG_DBG_PRINT_S("(2) context", 10053 p_tasking_context[Context_Omp_Nest]); 10054 PDG_DBG_PRINT_END 10055 10056 # ifdef _ENABLE_FEI 10057 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 10058 Context_Omp_Nest); 10059 # endif 10060 10061 } 10062 10063 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 10064 } 10065 } 10066 10067 10068 10069 /* process AFFINITY clause */ 10070 if (IL_FLD(list_array[OPEN_MP_AFFINITY_IDX]) == IL_Tbl_Idx) { 10071 list_idx2 = IL_IDX(list_array[OPEN_MP_AFFINITY_IDX]); 10072 10073 while (list_idx2 != NULL_IDX) { 10074 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 10075 send_attr_ntry(IL_IDX(list_idx2)); 10076 10077 PDG_DBG_PRINT_START 10078 PDG_DBG_PRINT_C("fei_task_var"); 10079 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 10080 PDG_AT_IDX(IL_IDX(list_idx2))); 10081 PDG_DBG_PRINT_S("(2) context", 10082 p_tasking_context[Context_Omp_Affinity]); 10083 PDG_DBG_PRINT_END 10084 10085 # ifdef _ENABLE_FEI 10086 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 10087 Context_Omp_Affinity); 10088 # endif 10089 10090 } 10091 10092 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 10093 } 10094 10095 cvrt_exp_to_pdg(IL_IDX(list_array[OPEN_MP_THREAD_DATA_IDX]), 10096 IL_FLD(list_array[OPEN_MP_THREAD_DATA_IDX])); 10097 10098 cvrt_exp_to_pdg(IL_IDX(list_array[OPEN_MP_THREAD_DATA_IDX]), 10099 IL_FLD(list_array[OPEN_MP_THREAD_DATA_IDX])); 10100 10101 which = (long)CN_INT_TO_C(IL_IDX(list_array[OPEN_MP_IS_THREAD_IDX])); 10102 if (which == 1) { 10103 threadcount = 1; 10104 } 10105 else { 10106 datacount = 1; 10107 } 10108 } 10109 10110 10111 10112 10113 /* process ONTO clause */ 10114 if (IL_FLD(list_array[OPEN_MP_ONTO_IDX]) == IL_Tbl_Idx) { 10115 list_idx2 = IL_IDX(list_array[OPEN_MP_ONTO_IDX]); 10116 10117 ontocount = 0; 10118 while (list_idx2 != NULL_IDX) { 10119 cvrt_exp_to_pdg(IL_IDX(list_idx2), 10120 IL_FLD(list_idx2)); 10121 10122 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 10123 ontocount = ontocount + 1; 10124 } 10125 } 10126 10127 10128 10129 /* process COPYPRIVATE clause */ 10130 if (IL_FLD(list_array[OPEN_MP_COPYPRIVATE_IDX]) == IL_Tbl_Idx) { 10131 list_idx2 = IL_IDX(list_array[OPEN_MP_COPYPRIVATE_IDX]); 10132 10133 while (list_idx2) { 10134 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 10135 send_attr_ntry(IL_IDX(list_idx2)); 10136 10137 PDG_DBG_PRINT_START 10138 PDG_DBG_PRINT_C("fei_task_var"); 10139 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 10140 PDG_AT_IDX(IL_IDX(list_idx2))); 10141 PDG_DBG_PRINT_S("(2) context", 10142 p_tasking_context[Context_Omp_Copyprivate]); 10143 PDG_DBG_PRINT_END 10144 10145 # ifdef _ENABLE_FEI 10146 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 10147 Context_Omp_Copyprivate); 10148 # endif 10149 10150 } 10151 10152 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 10153 } 10154 } 10155 10156 10157 10158 /* process FLUSH clause */ 10159 /* there is no FLUSH clause in OpenMP ([email protected]) */ 10160 /* we fake this clause in order to treat FLUSH directive the same as the others */ 10161 if (IL_FLD(list_array[OPEN_MP_FLUSH_IDX]) == IL_Tbl_Idx) { 10162 list_idx2 = IL_IDX(list_array[OPEN_MP_FLUSH_IDX]); 10163 10164 while (list_idx2) { 10165 if (IL_FLD(list_idx2) == AT_Tbl_Idx) { 10166 send_attr_ntry(IL_IDX(list_idx2)); 10167 10168 PDG_DBG_PRINT_START 10169 PDG_DBG_PRINT_C("fei_task_var"); 10170 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 10171 PDG_AT_IDX(IL_IDX(list_idx2))); 10172 PDG_DBG_PRINT_S("(2) context", 10173 p_tasking_context[Context_Omp_Flush]); 10174 PDG_DBG_PRINT_END 10175 10176 # ifdef _ENABLE_FEI 10177 last_task_idx = fei_task_var(PDG_AT_IDX(IL_IDX(list_idx2)), 10178 Context_Omp_Flush); 10179 # endif 10180 10181 } 10182 10183 list_idx2 = IL_NEXT_LIST_IDX(list_idx2); 10184 } 10185 } 10186 10187 10188 10189 10190 10191 switch (IR_OPR(ir_idx)) { 10192 10193 case Parallel_Open_Mp_Opr: 10194 PDG_DBG_PRINT_START 10195 PDG_DBG_PRINT_C("fei_parallel_open_mp"); 10196 PDG_DBG_PRINT_D("(1) if idx", task_if_idx); 10197 PDG_DBG_PRINT_LD("(2) defaultt", defaultt); 10198 PDG_DBG_PRINT_END 10199 10200 # ifdef _ENABLE_FEI 10201 fei_parallel_open_mp(task_if_idx, 10202 defaultt); 10203 10204 # endif 10205 break; 10206 10207 10208 10209 case Do_Open_Mp_Opr: 10210 PDG_DBG_PRINT_START 10211 PDG_DBG_PRINT_C("fei_do_open_mp"); 10212 PDG_DBG_PRINT_LD("(1) ordered", ordered); 10213 PDG_DBG_PRINT_LD("(2) scheduletype", scheduletype); 10214 PDG_DBG_PRINT_D("(3) schedulechunk", schedulechunk); 10215 PDG_DBG_PRINT_LD("(4) threadcount", threadcount); 10216 PDG_DBG_PRINT_LD("(5) datacount", datacount); 10217 PDG_DBG_PRINT_LD("(6) ontocount", ontocount); 10218 PDG_DBG_PRINT_END 10219 10220 # ifdef _ENABLE_FEI 10221 fei_do_open_mp(ordered, 10222 scheduletype, 10223 schedulechunk, 10224 threadcount, 10225 datacount, 10226 ontocount); 10227 # endif 10228 break; 10229 10230 10231 10232 case Sections_Open_Mp_Opr: 10233 PDG_DBG_PRINT_START 10234 PDG_DBG_PRINT_C("fei_sections_open_mp"); 10235 PDG_DBG_PRINT_END 10236 10237 10238 # ifdef _ENABLE_FEI 10239 fei_sections_open_mp(); 10240 # endif 10241 break; 10242 10243 10244 10245 case Single_Open_Mp_Opr: 10246 PDG_DBG_PRINT_START 10247 PDG_DBG_PRINT_C("fei_single_open_mp"); 10248 PDG_DBG_PRINT_END 10249 10250 10251 # ifdef _ENABLE_FEI 10252 fei_single_open_mp(); 10253 # endif 10254 break; 10255 10256 10257 10258 case Paralleldo_Open_Mp_Opr: 10259 PDG_DBG_PRINT_START 10260 PDG_DBG_PRINT_C("fei_paralleldo_open_mp"); 10261 PDG_DBG_PRINT_D("(1) if idx", task_if_idx); 10262 PDG_DBG_PRINT_LD("(2) defaultt", defaultt); 10263 PDG_DBG_PRINT_LD("(3) ordered", ordered); 10264 PDG_DBG_PRINT_LD("(4) scheduletype", scheduletype); 10265 PDG_DBG_PRINT_D("(5) schedulechunk", schedulechunk); 10266 PDG_DBG_PRINT_LD("(6) threadcount", threadcount); 10267 PDG_DBG_PRINT_LD("(7) datacount", datacount); 10268 PDG_DBG_PRINT_LD("(8) ontocount", ontocount); 10269 PDG_DBG_PRINT_END 10270 10271 10272 # ifdef _ENABLE_FEI 10273 fei_paralleldo_open_mp(task_if_idx, 10274 defaultt, 10275 ordered, 10276 scheduletype, 10277 schedulechunk, 10278 threadcount, 10279 datacount, 10280 ontocount); 10281 # endif 10282 break; 10283 10284 10285 10286 case Parallelsections_Open_Mp_Opr: 10287 PDG_DBG_PRINT_START 10288 PDG_DBG_PRINT_C("fei_parallelsections_open_mp"); 10289 PDG_DBG_PRINT_D("(1) if idx", task_if_idx); 10290 PDG_DBG_PRINT_LD("(2) defaultt", defaultt); 10291 PDG_DBG_PRINT_END 10292 10293 10294 # ifdef _ENABLE_FEI 10295 fei_parallelsections_open_mp(task_if_idx, 10296 defaultt); 10297 # endif 10298 break; 10299 10300 10301 10302 case Parallelworkshare_Open_Mp_Opr: 10303 PDG_DBG_PRINT_START 10304 PDG_DBG_PRINT_C("fei_parallelworkshare_open_mp"); 10305 PDG_DBG_PRINT_D("(1) if idx", task_if_idx); 10306 PDG_DBG_PRINT_LD("(2) defaultt", defaultt); 10307 PDG_DBG_PRINT_END 10308 10309 10310 # ifdef _ENABLE_FEI 10311 fei_parallelworkshare_open_mp(task_if_idx, 10312 defaultt); 10313 # endif 10314 break; 10315 10316 10317 10318 case Workshare_Open_Mp_Opr: 10319 PDG_DBG_PRINT_START 10320 PDG_DBG_PRINT_C("fei_workshare_open_mp"); 10321 PDG_DBG_PRINT_END 10322 10323 10324 # ifdef _ENABLE_FEI 10325 fei_workshare_open_mp(); 10326 # endif 10327 break; 10328 10329 10330 10331 case Endsingle_Open_Mp_Opr: 10332 PDG_DBG_PRINT_START 10333 PDG_DBG_PRINT_C("fei_endsingle_open_mp"); 10334 PDG_DBG_PRINT_LD("(1) nowait", nowait); 10335 PDG_DBG_PRINT_END 10336 10337 10338 # ifdef _ENABLE_FEI 10339 fei_endsingle_open_mp(nowait); 10340 # endif 10341 break; 10342 10343 10344 10345 case Flush_Open_Mp_Opr: 10346 PDG_DBG_PRINT_START 10347 PDG_DBG_PRINT_C("fei_flush_open_mp"); 10348 PDG_DBG_PRINT_D("(1) list_cnt", list_cnt); 10349 PDG_DBG_PRINT_END 10350 10351 10352 # ifdef _ENABLE_FEI 10353 fei_flush_open_mp(); 10354 # endif 10355 break; 10356 } 10357 break; 10358 10359 10360 10361 10362 case Barrier_Open_Mp_Opr: 10363 PDG_DBG_PRINT_START 10364 PDG_DBG_PRINT_C("fei_barrier_open_mp"); 10365 PDG_DBG_PRINT_END 10366 10367 10368 # ifdef _ENABLE_FEI 10369 fei_barrier_open_mp(); 10370 # endif 10371 break; 10372 10373 10374 10375 case Master_Open_Mp_Opr: 10376 PDG_DBG_PRINT_START 10377 PDG_DBG_PRINT_C("fei_master_open_mp"); 10378 PDG_DBG_PRINT_END 10379 10380 10381 # ifdef _ENABLE_FEI 10382 fei_master_open_mp(); 10383 # endif 10384 break; 10385 10386 10387 10388 case Workshare_Open_Mp_Opr: 10389 PDG_DBG_PRINT_START 10390 PDG_DBG_PRINT_C("fei_workshare_open_mp"); 10391 PDG_DBG_PRINT_END 10392 10393 10394 # ifdef _ENABLE_FEI 10395 fei_workshare_open_mp(); 10396 # endif 10397 break; 10398 10399 10400 10401 case Endmaster_Open_Mp_Opr: 10402 PDG_DBG_PRINT_START 10403 PDG_DBG_PRINT_C("fei_endmaster_open_mp"); 10404 PDG_DBG_PRINT_END 10405 10406 10407 # ifdef _ENABLE_FEI 10408 fei_endmaster_open_mp(); 10409 # endif 10410 break; 10411 10412 10413 10414 case Ordered_Open_Mp_Opr: 10415 PDG_DBG_PRINT_START 10416 PDG_DBG_PRINT_C("fei_ordered_open_mp"); 10417 PDG_DBG_PRINT_END 10418 10419 10420 # ifdef _ENABLE_FEI 10421 fei_ordered_open_mp(); 10422 # endif 10423 break; 10424 10425 10426 10427 case Endordered_Open_Mp_Opr: 10428 PDG_DBG_PRINT_START 10429 PDG_DBG_PRINT_C("fei_endordered_open_mp"); 10430 PDG_DBG_PRINT_END 10431 10432 10433 # ifdef _ENABLE_FEI 10434 fei_endordered_open_mp(); 10435 # endif 10436 break; 10437 10438 10439 10440 case Endparalleldo_Open_Mp_Opr: 10441 PDG_DBG_PRINT_START 10442 PDG_DBG_PRINT_C("fei_endparalleldo_open_mp"); 10443 PDG_DBG_PRINT_END 10444 10445 10446 # ifdef _ENABLE_FEI 10447 fei_endparalleldo_open_mp(); 10448 # endif 10449 break; 10450 10451 10452 10453 case Endparallel_Open_Mp_Opr: 10454 PDG_DBG_PRINT_START 10455 PDG_DBG_PRINT_C("fei_endparallel_open_mp"); 10456 PDG_DBG_PRINT_END 10457 10458 10459 # ifdef _ENABLE_FEI 10460 fei_endparallel_open_mp(); 10461 # endif 10462 break; 10463 10464 10465 10466 case Endparallelsections_Open_Mp_Opr: 10467 PDG_DBG_PRINT_START 10468 PDG_DBG_PRINT_C("fei_endparallelsections_open_mp"); 10469 PDG_DBG_PRINT_END 10470 10471 10472 # ifdef _ENABLE_FEI 10473 fei_endparallelsections_open_mp(); 10474 # endif 10475 break; 10476 10477 10478 10479 case Endparallelworkshare_Open_Mp_Opr: 10480 PDG_DBG_PRINT_START 10481 PDG_DBG_PRINT_C("fei_endparallelworkshare_open_mp"); 10482 PDG_DBG_PRINT_END 10483 10484 10485 # ifdef _ENABLE_FEI 10486 fei_endparallelworkshare_open_mp(); 10487 # endif 10488 break; 10489 10490 10491 10492 case Section_Open_Mp_Opr: 10493 PDG_DBG_PRINT_START 10494 PDG_DBG_PRINT_C("fei_section_open_mp"); 10495 PDG_DBG_PRINT_END 10496 10497 10498 # ifdef _ENABLE_FEI 10499 fei_section_open_mp(); 10500 # endif 10501 break; 10502 10503 10504 10505 case Enddo_Open_Mp_Opr: 10506 if (IR_FLD_L(ir_idx) == CN_Tbl_Idx) { 10507 nowait = (long) CN_INT_TO_C(IR_IDX_L(ir_idx)); 10508 } 10509 10510 PDG_DBG_PRINT_START 10511 PDG_DBG_PRINT_C("fei_enddo_open_mp"); 10512 PDG_DBG_PRINT_LD("(1) nowait", nowait); 10513 PDG_DBG_PRINT_END 10514 10515 10516 # ifdef _ENABLE_FEI 10517 fei_enddo_open_mp(nowait); 10518 # endif 10519 break; 10520 10521 10522 10523 case Endsections_Open_Mp_Opr: 10524 if (IR_FLD_L(ir_idx) == CN_Tbl_Idx) { 10525 nowait = (long) CN_INT_TO_C(IR_IDX_L(ir_idx)); 10526 } 10527 10528 PDG_DBG_PRINT_START 10529 PDG_DBG_PRINT_C("fei_endsections_open_mp"); 10530 PDG_DBG_PRINT_LD("(1) nowait", nowait); 10531 PDG_DBG_PRINT_END 10532 10533 10534 # ifdef _ENABLE_FEI 10535 fei_endsections_open_mp(nowait); 10536 # endif 10537 break; 10538 10539 10540 10541 10542 case Endworkshare_Open_Mp_Opr: 10543 if (IR_FLD_L(ir_idx) == CN_Tbl_Idx) { 10544 nowait = (long) CN_INT_TO_C(IR_IDX_L(ir_idx)); 10545 } 10546 10547 PDG_DBG_PRINT_START 10548 PDG_DBG_PRINT_C("fei_endworkshare_open_mp"); 10549 PDG_DBG_PRINT_LD("(1) nowait", nowait); 10550 PDG_DBG_PRINT_END 10551 10552 10553 # ifdef _ENABLE_FEI 10554 fei_endworkshare_open_mp(nowait); 10555 # endif 10556 break; 10557 10558 10559 10560 10561 case Critical_Open_Mp_Opr: 10562 if (IR_FLD_L(ir_idx) == CN_Tbl_Idx) { 10563 criticalname = (char *) &CN_CONST(IR_IDX_L(ir_idx)); 10564 } 10565 10566 PDG_DBG_PRINT_START 10567 PDG_DBG_PRINT_C("fei_critical_open_mp"); 10568 PDG_DBG_PRINT_S("(1) criticalname", criticalname); 10569 PDG_DBG_PRINT_END 10570 10571 10572 # ifdef _ENABLE_FEI 10573 fei_critical_open_mp(criticalname); 10574 # endif 10575 break; 10576 10577 10578 10579 case Atomic_Open_Mp_Opr: 10580 PDG_DBG_PRINT_START 10581 PDG_DBG_PRINT_C("fei_atomic_open_mp"); 10582 PDG_DBG_PRINT_END 10583 10584 10585 # ifdef _ENABLE_FEI 10586 fei_atomic_open_mp(); 10587 # endif 10588 break; 10589 10590 10591 10592 10593 case Endcritical_Open_Mp_Opr: 10594 if (IR_FLD_L(ir_idx) == CN_Tbl_Idx) { 10595 criticalname = (char *) &CN_CONST(IR_IDX_L(ir_idx)); 10596 } 10597 10598 PDG_DBG_PRINT_START 10599 PDG_DBG_PRINT_C("fei_endcritical_open_mp"); 10600 PDG_DBG_PRINT_S("(1) criticalname", criticalname); 10601 PDG_DBG_PRINT_END 10602 10603 10604 # ifdef _ENABLE_FEI 10605 fei_endcritical_open_mp(criticalname); 10606 # endif 10607 break; 10608 10609 10610 10611 /* eraxxon: OpenAD directive */ 10612 case XXX_OpenAD_Opr: { 10613 char* str; 10614 if (IR_FLD_L(ir_idx) == CN_Tbl_Idx) { 10615 str = (char *) &CN_CONST(IR_IDX_L(ir_idx)); 10616 } 10617 10618 PDG_DBG_PRINT_START 10619 PDG_DBG_PRINT_C("fei_xxx_openad"); 10620 PDG_DBG_PRINT_S("(1) string", str); 10621 PDG_DBG_PRINT_END 10622 10623 # ifdef _ENABLE_FEI 10624 fei_xxx_openad(str); 10625 # endif 10626 break; 10627 } 10628 10629 case Dependent_OpenAD_Opr: 10630 case Independent_OpenAD_Opr: { 10631 operator_type op = Dependent_OpenAD_Opr; 10632 CONTEXT_TYPE ctxt = Context_OpenAD_Dependent; 10633 if (IR_OPR(ir_idx) == Independent_OpenAD_Opr) { 10634 op = Independent_OpenAD_Opr; 10635 ctxt = Context_OpenAD_Independent; 10636 } 10637 10638 /* The list should be of length 1 */ 10639 list_idx1 = IR_IDX_L(ir_idx); 10640 list_idx2 = IL_IDX(list_idx1); 10641 10642 send_attr_ntry(list_idx2); 10643 10644 PDG_DBG_PRINT_START 10645 PDG_DBG_PRINT_C("fei_task_var"); 10646 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", PDG_AT_IDX(list_idx2)); 10647 PDG_DBG_PRINT_S("(2) context", p_tasking_context[ctxt]); 10648 PDG_DBG_PRINT_END 10649 10650 # ifdef _ENABLE_FEI 10651 last_task_idx = fei_task_var(PDG_AT_IDX(list_idx2), ctxt); 10652 # endif 10653 10654 PDG_DBG_PRINT_START 10655 PDG_DBG_PRINT_C("fei_dependent_independent_openad"); 10656 PDG_DBG_PRINT_END 10657 10658 # ifdef _ENABLE_FEI 10659 fei_dependent_independent_openad(); 10660 # endif 10661 break; 10662 } 10663 10664 10665 case Simple_OpenAD_Opr: 10666 case EndSimple_OpenAD_Opr: 10667 /* FIXME */ 10668 break; 10669 10670 10671 case Nullify_Opr: 10672 cvrt_exp_to_pdg(IR_IDX_L(ir_idx), 10673 IR_FLD_L(ir_idx)); 10674 10675 ir_idx = IR_IDX_L(ir_idx); 10676 10677 while (ir_idx !=NULL_IDX) { 10678 ir_idx = IL_NEXT_LIST_IDX(ir_idx); 10679 ++listnum; 10680 } 10681 10682 10683 fei_nullify(listnum); 10684 break; 10685 10686 10687 } 10688 } 10689 10690 10691 TRACE (Func_Exit, "cvrt_exp_to_pdg", NULL); 10692 10693 return; 10694 10695 } /* cvrt_exp_to_pdg */ 10696 10697 10698 10699 /******************************************************************************\ 10700 |* *| 10701 |* Description: *| 10702 |* *| 10703 |* Input parameters: *| 10704 |* NONE *| 10705 |* *| 10706 |* Output parameters: *| 10707 |* NONE *| 10708 |* *| 10709 |* Returns: *| 10710 |* NOTHING *| 10711 |* *| 10712 \******************************************************************************/ 10713 static void finish_symbolic_expr() 10714 { 10715 int npex_expr_idx; 10716 10717 10718 TRACE (Func_Entry, "finish_symbolic_expr", NULL); 10719 10720 PDG_DBG_PRINT_START 10721 PDG_DBG_PRINT_C("npex_end"); 10722 PDG_DBG_PRINT_END 10723 10724 # ifdef _ENABLE_FEI 10725 npex_expr_idx = npex_end(); 10726 # endif 10727 10728 PDG_DBG_PRINT_START 10729 PDG_DBG_PRINT_D("(r) npex_expr_idx", npex_expr_idx); 10730 PDG_DBG_PRINT_END 10731 10732 PDG_DBG_PRINT_START 10733 PDG_DBG_PRINT_C("npex_to_expr"); 10734 PDG_DBG_PRINT_D("npex_expr_idx", npex_expr_idx); 10735 PDG_DBG_PRINT_END 10736 10737 # ifdef _ENABLE_FEI 10738 npex_to_expr(npex_expr_idx); 10739 # endif 10740 10741 TRACE (Func_Exit, "finish_symbolic_expr", NULL); 10742 10743 return; 10744 10745 } /* finish_symbolic_expr */ 10746 10747 10748 /******************************************************************************\ 10749 |* *| 10750 |* Description: *| 10751 |* *| 10752 |* Input parameters: *| 10753 |* NONE *| 10754 |* *| 10755 |* Output parameters: *| 10756 |* NONE *| 10757 |* *| 10758 |* Returns: *| 10759 |* NOTHING *| 10760 |* *| 10761 \******************************************************************************/ 10762 static void cvrt_ir_to_pdg(int scp_idx) 10763 { 10764 long flag; 10765 10766 10767 TRACE (Func_Entry, "cvrt_ir_to_pdg", NULL); 10768 10769 curr_sh = SCP_FIRST_SH_IDX(scp_idx); 10770 10771 PDG_DBG_PRINT_START 10772 PDG_DBG_PRINT_C("fei_proc_body"); 10773 PDG_DBG_PRINT_D("(1) SH_GLB_LINE", SH_GLB_LINE(curr_sh)); 10774 PDG_DBG_PRINT_END 10775 10776 # ifdef _ENABLE_FEI 10777 fei_proc_body(SH_GLB_LINE(curr_sh)); 10778 # endif 10779 10780 while (curr_sh != NULL_IDX) { 10781 10782 flag = ((long) (SH_STMT_TYPE(curr_sh) == Automatic_Base_Calc_Stmt) 10783 << FEI_STMT_ARY_BASE); 10784 10785 flag = flag | ((long) (SH_STMT_TYPE(curr_sh) == Automatic_Base_Size_Stmt) 10786 << FEI_STMT_ARY_SIZE); 10787 10788 flag = flag | ((long) SH_COMPILER_GEN(curr_sh) << FEI_STMT_INTERNAL); 10789 10790 PDG_DBG_PRINT_START 10791 PDG_DBG_PRINT_C("fei_stmt"); 10792 PDG_DBG_PRINT_D("(1) SH_GLB_LINE", SH_GLB_LINE(curr_sh)); 10793 PDG_DBG_PRINT_LO("(2) flags", flag); 10794 PDG_DBG_PRINT_END 10795 10796 # ifdef _ENABLE_FEI 10797 fei_stmt(SH_GLB_LINE(curr_sh), flag); 10798 # endif 10799 10800 if (SH_IR_IDX(curr_sh) != NULL_IDX) { 10801 stmt_start_line = SH_GLB_LINE(curr_sh); 10802 cvrt_exp_to_pdg(SH_IR_IDX(curr_sh), IR_Tbl_Idx); 10803 } 10804 10805 curr_sh = SH_NEXT_IDX(curr_sh); 10806 } 10807 10808 TRACE (Func_Exit, "cvrt_ir_to_pdg", NULL); 10809 10810 return; 10811 10812 } /* cvrt_ir_to_pdg */ 10813 10814 10815 10816 /******************************************************************************\ 10817 |* *| 10818 |* Description: *| 10819 |* *| 10820 |* Input parameters: *| 10821 |* NONE *| 10822 |* *| 10823 |* Output parameters: *| 10824 |* NONE *| 10825 |* *| 10826 |* Returns: *| 10827 |* NOTHING *| 10828 |* *| 10829 \******************************************************************************/ 10830 10831 static TYPE get_basic_type(int type_idx, 10832 int alignment, 10833 int input_attr_idx) 10834 10835 { 10836 int align; 10837 long64 bit_size; 10838 INTPTR cdx; 10839 int flags = 0; 10840 TYPE idx; 10841 10842 # if !defined(_ALTERNATIVE_INTERFACE_FOR_POINTEES) 10843 int attr_idx; 10844 int p_idx; 10845 int save_pdg_at_idx; 10846 # endif 10847 int dt_attr_idx; 10848 10849 10850 TRACE (Func_Entry, "get_basic_type", NULL); 10851 10852 /* The concept of alignment is only implmented for IRIX platforms */ 10853 /* Compare the alignment being passed in with the default alignment */ 10854 /* for the type. If the alignment coming in is less than the default */ 10855 /* alignment, call fei_descriptor with the smaller alignment. */ 10856 10857 idx = null_type; 10858 10859 if (input_attr_idx != NULL_IDX && ATD_VOLATILE(input_attr_idx)) { 10860 flags = flags | (1 << FEI_DESCRIPTOR_VOLAT_C); 10861 } 10862 10863 switch (TYP_TYPE(type_idx)) { 10864 10865 case Typeless: 10866 align = pdg_align[type_alignment_tbl[Long_Typeless]]; 10867 10868 PDG_DBG_PRINT_START 10869 PDG_DBG_PRINT_C("fei_descriptor"); 10870 PDG_DBG_PRINT_O("(1) flags", flags); 10871 PDG_DBG_PRINT_S("(2) table type", p_table_type[Basic]); 10872 PDG_DBG_PRINT_LLD("(3) bit len", TYP_BIT_LEN(type_idx)); 10873 PDG_DBG_PRINT_S("(4) basic type", p_basic_type[T_ypeless]); 10874 PDG_DBG_PRINT_D("(5) aux info", 0); 10875 PDG_DBG_PRINT_D("(6) alignment", align); 10876 PDG_DBG_PRINT_END 10877 # ifdef _ENABLE_FEI 10878 idx = fei_descriptor(flags, 10879 Basic, 10880 TYP_BIT_LEN(type_idx), /* JEFFL bit_len is 64 now */ 10881 T_ypeless, 10882 0, 10883 align); 10884 # endif 10885 PDG_DBG_PRINT_START 10886 PDG_DBG_PRINT_T("(r) type", idx); 10887 PDG_DBG_PRINT_END 10888 break; 10889 10890 10891 10892 case CRI_Parcel_Ptr: 10893 if (global_attr_idx == NULL_IDX) { 10894 PRINTMSG(1, 993, Internal, 1); 10895 } 10896 10897 # ifdef _ALTERNATIVE_INTERFACE_FOR_POINTEES 10898 PDG_DBG_PRINT_START 10899 PDG_DBG_PRINT_C("fei_descriptor"); 10900 PDG_DBG_PRINT_O("(1) flags", flags); 10901 PDG_DBG_PRINT_S("(2) table type", p_table_type[Func_tion]); 10902 PDG_DBG_PRINT_LD("(3) PDG_AT_IDX", PDG_AT_IDX(global_attr_idx)); 10903 PDG_DBG_PRINT_S("(4) basic type", p_basic_type[BT_func_ptr]); 10904 PDG_DBG_PRINT_D("(5) aux info", 0); 10905 PDG_DBG_PRINT_D("(6) alignment", 0); 10906 PDG_DBG_PRINT_END 10907 # ifdef _ENABLE_FEI 10908 idx = fei_descriptor(flags, 10909 Func_tion, 10910 PDG_AT_IDX(global_attr_idx), 10911 BT_func_ptr, 10912 0, 10913 0); 10914 # endif 10915 PDG_DBG_PRINT_START 10916 PDG_DBG_PRINT_T("(r) type", idx); 10917 PDG_DBG_PRINT_END 10918 10919 # else 10920 10921 attr_idx = global_attr_idx; 10922 save_pdg_at_idx = PDG_AT_IDX(attr_idx); 10923 PDG_AT_IDX(attr_idx) = NULL_IDX; 10924 10925 send_procedure(attr_idx, 10926 NULL_IDX, /* No alt entries or parent procs */ 10927 Definition); 10928 10929 PDG_DBG_PRINT_START 10930 PDG_DBG_PRINT_C("fei_pointee"); 10931 PDG_DBG_PRINT_T("(1) type", pdg_type_void); 10932 PDG_DBG_PRINT_END 10933 # ifdef _ENABLE_FEI 10934 p_idx = fei_pointee(pdg_type_void); 10935 # endif 10936 PDG_DBG_PRINT_START 10937 PDG_DBG_PRINT_D("(r) p_idx", p_idx); 10938 PDG_DBG_PRINT_END 10939 10940 10941 10942 PDG_DBG_PRINT_START 10943 PDG_DBG_PRINT_C("fei_descriptor"); 10944 PDG_DBG_PRINT_O("(1) flags", flags); 10945 PDG_DBG_PRINT_S("(2) table type", p_table_type[Func_tion]); 10946 PDG_DBG_PRINT_D("(3) PDG_AT_IDX", PDG_AT_IDX(attr_idx)); 10947 PDG_DBG_PRINT_S("(4) basic type", p_basic_type[V_oid]); 10948 PDG_DBG_PRINT_D("(5) aux info", p_idx); 10949 PDG_DBG_PRINT_D("(6) alignment", 0); 10950 PDG_DBG_PRINT_END 10951 # ifdef _ENABLE_FEI 10952 idx = fei_descriptor(flags, 10953 Func_tion, 10954 PDG_AT_IDX(attr_idx), 10955 V_oid, 10956 p_idx, 10957 0); 10958 # endif 10959 PDG_DBG_PRINT_START 10960 PDG_DBG_PRINT_T("(r) type", idx); 10961 PDG_DBG_PRINT_END 10962 10963 10964 10965 10966 PDG_DBG_PRINT_START 10967 PDG_DBG_PRINT_C("fei_pointee"); 10968 PDG_DBG_PRINT_T("(1) idx", idx); 10969 PDG_DBG_PRINT_END 10970 # ifdef _ENABLE_FEI 10971 p_idx = fei_pointee(idx); 10972 # endif 10973 PDG_DBG_PRINT_START 10974 PDG_DBG_PRINT_D("(r) p_idx", p_idx); 10975 PDG_DBG_PRINT_END 10976 10977 10978 10979 10980 PDG_DBG_PRINT_START 10981 PDG_DBG_PRINT_C("fei_descriptor"); 10982 PDG_DBG_PRINT_O("(1) flags", flags); 10983 PDG_DBG_PRINT_S("(2) table type", p_table_type[Pointer]); 10984 PDG_DBG_PRINT_D("(3) p_idx", p_idx); 10985 PDG_DBG_PRINT_S("(4) basic type", p_basic_type[V_oid]); 10986 PDG_DBG_PRINT_D("(5) aux info", 0); 10987 PDG_DBG_PRINT_D("(6) alignment", 0); 10988 PDG_DBG_PRINT_END 10989 # ifdef _ENABLE_FEI 10990 idx = fei_descriptor(flags, 10991 Pointer, 10992 p_idx, 10993 V_oid, 10994 0, 10995 0); 10996 # endif 10997 PDG_DBG_PRINT_START 10998 PDG_DBG_PRINT_T("(r) type", idx); 10999 PDG_DBG_PRINT_END 11000 11001 PDG_AT_IDX(attr_idx) = save_pdg_at_idx; 11002 # endif 11003 break; 11004 11005 11006 11007 case Integer: 11008 case Logical: 11009 case Real: 11010 case Complex: 11011 case CRI_Ch_Ptr: 11012 idx = send_non_standard_aligned_type(alignment, type_idx); 11013 break; 11014 11015 11016 case Character: 11017 switch (TYP_CHAR_CLASS(type_idx)) { 11018 case Assumed_Size_Char: 11019 case Var_Len_Char: 11020 if (global_attr_idx != NULL_IDX) { 11021 if (ATD_CLASS(global_attr_idx) == CRI__Pointee && 11022 ATD_PTR_IDX(global_attr_idx) != NULL_IDX) { 11023 global_attr_idx = ATD_PTR_IDX(global_attr_idx); 11024 } 11025 11026 if (ATD_STOR_BLK_IDX(global_attr_idx) != NULL_IDX && 11027 SB_SCP_IDX(ATD_STOR_BLK_IDX(global_attr_idx)) != curr_scp_idx) { 11028 flags = flags | (1 << FEI_DESCRIPTOR_HOSTED_TYPE); 11029 } 11030 } 11031 11032 send_attr_ntry(TYP_IDX(type_idx)); 11033 flags = flags | (1 << FEI_DESCRIPTOR_AUTO_F); 11034 11035 PDG_DBG_PRINT_START 11036 PDG_DBG_PRINT_C("fei_descriptor"); 11037 PDG_DBG_PRINT_O("(1) flags", flags); 11038 PDG_DBG_PRINT_S("(2) table type", p_table_type[Basic]); 11039 PDG_DBG_PRINT_LD("(3) PDG_AT_IDX", PDG_AT_IDX(TYP_IDX(type_idx))); 11040 PDG_DBG_PRINT_S("(4) basic type", p_basic_type[Char_Fortran]); 11041 PDG_DBG_PRINT_D("(5) aux info", CHAR_BIT); 11042 PDG_DBG_PRINT_D("(6) alignment", Align_Bit); 11043 PDG_DBG_PRINT_END 11044 # ifdef _ENABLE_FEI 11045 idx = fei_descriptor(flags, 11046 Basic, 11047 PDG_AT_IDX(TYP_IDX(type_idx)), 11048 Char_Fortran, 11049 CHAR_BIT, 11050 Align_Bit); 11051 # endif 11052 PDG_DBG_PRINT_START 11053 PDG_DBG_PRINT_T("(r) type", idx); 11054 PDG_DBG_PRINT_END 11055 break; 11056 11057 11058 case Const_Len_Char: 11059 if (global_attr_idx != NULL_IDX) { 11060 if (ATD_CLASS(global_attr_idx) == CRI__Pointee && 11061 ATD_PTR_IDX(global_attr_idx) != NULL_IDX) { 11062 global_attr_idx = ATD_PTR_IDX(global_attr_idx); 11063 } 11064 11065 if (ATD_STOR_BLK_IDX(global_attr_idx) != NULL_IDX && 11066 SB_SCP_IDX(ATD_STOR_BLK_IDX(global_attr_idx)) != curr_scp_idx) { 11067 flags = flags | (1 << FEI_DESCRIPTOR_HOSTED_TYPE); 11068 } 11069 } 11070 bit_size = CN_INT_TO_C(TYP_IDX(type_idx)); 11071 bit_size = bit_size * CHAR_BIT; 11072 11073 idx = get_basic_type(Integer_8,type_alignment_tbl[Integer_8],NULL_IDX); 11074 11075 PDG_DBG_PRINT_START 11076 PDG_DBG_PRINT_C("fei_arith_con"); 11077 PDG_DBG_PRINT_T("(1) type", idx); 11078 PDG_DBG_PRINT_LLD("(2) bit_size", bit_size); 11079 PDG_DBG_PRINT_END 11080 # ifdef _ENABLE_FEI 11081 cdx = fei_arith_con(idx, (long *)&bit_size); 11082 # endif 11083 PDG_DBG_PRINT_START 11084 PDG_DBG_PRINT_LD("(r) PDG_CN_IDX", cdx); 11085 PDG_DBG_PRINT_END 11086 11087 11088 PDG_DBG_PRINT_START 11089 PDG_DBG_PRINT_C("fei_descriptor"); 11090 PDG_DBG_PRINT_O("(1) flags", flags); 11091 PDG_DBG_PRINT_S("(2) table type", p_table_type[Basic]); 11092 PDG_DBG_PRINT_LD("(3) PDG_CN_IDX", cdx); 11093 PDG_DBG_PRINT_S("(4) basic type", p_basic_type[Char_Fortran]); 11094 PDG_DBG_PRINT_D("(5) aux info", CHAR_BIT); 11095 PDG_DBG_PRINT_D("(6) alignment", Align_Bit); 11096 PDG_DBG_PRINT_END 11097 # ifdef _ENABLE_FEI 11098 idx = fei_descriptor(flags, 11099 Basic, 11100 cdx, 11101 Char_Fortran, 11102 CHAR_BIT, 11103 Align_Bit); 11104 # endif 11105 PDG_DBG_PRINT_START 11106 PDG_DBG_PRINT_T("(r) type", idx); 11107 PDG_DBG_PRINT_END 11108 break; 11109 } 11110 break; 11111 11112 11113 case Structure: 11114 dt_attr_idx = TYP_IDX(type_idx); 11115 if (curr_scp_idx==ATT_SCP_IDX(dt_attr_idx)) 11116 idx = send_derived_type(type_idx,FALSE); 11117 else 11118 idx = send_derived_type(type_idx,TRUE); 11119 break; 11120 11121 11122 case CRI_Ptr: 11123 # ifdef _TARGET32 11124 if (TYP_PTR_INCREMENT(type_idx) > TARGET_BITS_PER_WORD) { 11125 PDG_DBG_PRINT_START 11126 PDG_DBG_PRINT_C("fei_descriptor"); 11127 PDG_DBG_PRINT_O("(1) flags", flags); 11128 PDG_DBG_PRINT_S("(2) table type", p_table_type[Basic]); 11129 PDG_DBG_PRINT_D("(3) bit_size", storage_bit_size_tbl[CRI_Ptr_8]); 11130 PDG_DBG_PRINT_S("(4) basic type", p_basic_type[CRI_Pointer]); 11131 PDG_DBG_PRINT_D("(5) aux info", DWord_Align); 11132 PDG_DBG_PRINT_D("(6) alignment", 0); 11133 PDG_DBG_PRINT_END 11134 # ifdef _ENABLE_FEI 11135 idx = fei_descriptor(flags, 11136 Basic, 11137 storage_bit_size_tbl[CRI_Ptr_8], 11138 CRI_Pointer, 11139 DWord_Align, 11140 0); 11141 # endif 11142 PDG_DBG_PRINT_START 11143 PDG_DBG_PRINT_T("(r) type", idx); 11144 PDG_DBG_PRINT_END 11145 } 11146 else 11147 # endif 11148 11149 if (TYP_PTR_INCREMENT(type_idx) >= TARGET_BITS_PER_WORD) { 11150 PDG_DBG_PRINT_START 11151 PDG_DBG_PRINT_C("fei_descriptor"); 11152 PDG_DBG_PRINT_O("(1) flags", flags); 11153 PDG_DBG_PRINT_S("(2) table type", p_table_type[Basic]); 11154 PDG_DBG_PRINT_D("(3) unused", 0); 11155 PDG_DBG_PRINT_S("(4) basic type", p_basic_type[CRI_Pointer]); 11156 PDG_DBG_PRINT_D("(5) aux info", Word_Align); 11157 PDG_DBG_PRINT_D("(6) alignment", 0); 11158 PDG_DBG_PRINT_END 11159 # ifdef _ENABLE_FEI 11160 idx = fei_descriptor(flags, 11161 Basic, 11162 0, 11163 CRI_Pointer, 11164 Word_Align, 11165 0); 11166 # endif 11167 PDG_DBG_PRINT_START 11168 PDG_DBG_PRINT_T("(r) type", idx); 11169 PDG_DBG_PRINT_END 11170 } 11171 else { 11172 PDG_DBG_PRINT_START 11173 PDG_DBG_PRINT_C("fei_descriptor"); 11174 PDG_DBG_PRINT_O("(1) flags", flags); 11175 PDG_DBG_PRINT_S("(2) table type", p_table_type[Basic]); 11176 PDG_DBG_PRINT_D("(3) unused", 0); 11177 PDG_DBG_PRINT_S("(4) basic type", p_basic_type[CRI_Pointer]); 11178 PDG_DBG_PRINT_D("(5) aux info", HWord_Align); 11179 PDG_DBG_PRINT_D("(6) alignment", 0); 11180 PDG_DBG_PRINT_END 11181 # ifdef _ENABLE_FEI 11182 idx = fei_descriptor(flags, 11183 Basic, 11184 0, 11185 CRI_Pointer, 11186 HWord_Align, 11187 0); 11188 # endif 11189 PDG_DBG_PRINT_START 11190 PDG_DBG_PRINT_T("(r) type", idx); 11191 PDG_DBG_PRINT_END 11192 } 11193 break; 11194 11195 } 11196 11197 TRACE (Func_Exit, "get_basic_type", NULL); 11198 11199 return(idx); 11200 11201 } /* get_basic_type */ 11202 11203 11204 #if 0 11205 inline void 11206 Set_TY_is_f90_pointer (TY& ty) { ty.flags |= TY_IS_F90_POINTER; } 11207 #endif 11208 11209 11210 11211 /******************************************************************************\ 11212 |* *| 11213 |* Description: *| 11214 |* *| 11215 |* Input parameters: *| 11216 |* NONE *| 11217 |* *| 11218 |* Output parameters: *| 11219 |* NONE *| 11220 |* *| 11221 |* Returns: *| 11222 |* NOTHING *| 11223 |* *| 11224 \******************************************************************************/ 11225 11226 static TYPE get_type_desc(int input_idx) 11227 { 11228 int bd_idx = 0; 11229 int dist_idx; 11230 int distribution = 0; 11231 int kind_type = 0; 11232 int attr_idx; 11233 int temp_attr_idx; 11234 int basic_type; 11235 long64 extent; 11236 int i = 1; 11237 long64 lbound; 11238 long64 ubound; 11239 int flag = 0; 11240 boolean lb_vble = FALSE; 11241 boolean lb_symcon = FALSE; 11242 boolean ub_vble = FALSE; 11243 boolean ub_symcon = FALSE; 11244 boolean xt_vble = FALSE; 11245 boolean xt_symcon = FALSE; 11246 boolean lb_empty = FALSE; 11247 boolean ub_empty = FALSE; 11248 boolean xt_empty = FALSE; 11249 /* boolean ub_star = FALSE; */ 11250 long pdg_array_idx; 11251 int rank; 11252 size_offset_type size; 11253 long64 span; 11254 boolean template_tmp = FALSE; 11255 int tmp_idx; 11256 int type_flag = 0; 11257 TYPE type_idx; 11258 11259 int pe_bd_idx = 0; 11260 11261 11262 TRACE (Func_Entry, "get_type_desc", NULL); 11263 11264 type_idx = null_type; 11265 11266 switch (AT_OBJ_CLASS(input_idx)) { 11267 case Data_Obj: 11268 attr_idx = input_idx; 11269 global_attr_idx = attr_idx; 11270 type_idx = get_basic_type(ATD_TYPE_IDX(attr_idx), 11271 ATD_ALIGNMENT(attr_idx), 11272 attr_idx); 11273 11274 global_attr_idx = NULL_IDX; 11275 break; 11276 11277 case Pgm_Unit: 11278 if (ATP_PGM_UNIT(input_idx) == Function) { 11279 attr_idx = ATP_RSLT_IDX(input_idx); 11280 11281 /* If this is an array or character, the tmps are just templates. */ 11282 /* They are never defined or referenced in the IR. We need to send */ 11283 /* over the referenced tmps to PDGCS. Put them in the current */ 11284 /* stack block so that they do not end up causing host association. */ 11285 /* Or in the case of functions defined in interface blocks, they */ 11286 /* do not have valid storage. Have to restore storage, in case */ 11287 /* this is an internal or module procedure. The storage must be */ 11288 /* correct when that routine is sent across. */ 11289 11290 if (ATP_EXPL_ITRFC(input_idx) && !ATP_SCP_ALIVE(input_idx)) { 11291 template_tmp = TRUE; 11292 11293 if (TYP_TYPE(ATD_TYPE_IDX(attr_idx)) == Character && 11294 TYP_CHAR_CLASS(ATD_TYPE_IDX(attr_idx)) != Const_Len_Char && 11295 PDG_AT_IDX(TYP_IDX(ATD_TYPE_IDX(attr_idx))) == NULL_IDX) { 11296 tmp_idx = TYP_IDX(ATD_TYPE_IDX(attr_idx)); 11297 COPY_ATTR_NTRY(AT_WORK_IDX, tmp_idx); 11298 AT_REFERENCED(tmp_idx) = Referenced; 11299 ATD_OFFSET_ASSIGNED(tmp_idx) = FALSE; 11300 ATD_STOR_BLK_IDX(tmp_idx) = SCP_SB_STACK_IDX(curr_scp_idx); 11301 send_attr_ntry(tmp_idx); 11302 COPY_ATTR_NTRY(tmp_idx, AT_WORK_IDX); 11303 } 11304 } 11305 11306 type_idx = get_basic_type(ATD_TYPE_IDX(attr_idx), 11307 ATD_ALIGNMENT(attr_idx), 11308 attr_idx); 11309 } 11310 else { 11311 type_idx = pdg_type_void; 11312 goto EXIT; 11313 } 11314 break; 11315 } /* switch */ 11316 11317 fei_init_global_vars(); 11318 if (ATD_IM_A_DOPE(attr_idx)) { 11319 rank = (ATD_ARRAY_IDX(attr_idx) == NULL_IDX) ? 0 : 11320 BD_RANK(ATD_ARRAY_IDX(attr_idx)); 11321 11322 if (ATD_STOR_BLK_IDX(attr_idx) != NULL_IDX && 11323 SB_SCP_IDX(ATD_STOR_BLK_IDX(attr_idx)) != curr_scp_idx) { 11324 type_flag = type_flag | (1 << FEI_DOPE_VECTOR_HOSTED_TYPE); 11325 } 11326 11327 type_flag = type_flag | 11328 (ATD_POINTER(attr_idx) << FEI_DOPE_VECTOR_POINTER); 11329 11330 PDG_DBG_PRINT_START 11331 PDG_DBG_PRINT_C("fei_dope_vector"); 11332 PDG_DBG_PRINT_D("(1) rank", rank); 11333 PDG_DBG_PRINT_T("(2) type", type_idx); 11334 PDG_DBG_PRINT_O("(3) flags", type_flag); 11335 PDG_DBG_PRINT_END 11336 11337 # ifdef _ENABLE_FEI 11338 # endif 11339 } 11340 else if (ATD_ARRAY_IDX(attr_idx) != NULL_IDX) { 11341 bd_idx = ATD_ARRAY_IDX(attr_idx); 11342 dist_idx = ATD_DISTRIBUTION_IDX(attr_idx); 11343 basic_type = pdg_basic_type[TYP_TYPE(ATD_TYPE_IDX(attr_idx))]; 11344 11345 switch (TYP_LINEAR(ATD_TYPE_IDX(attr_idx))) { 11346 case Integer_1: 11347 case Logical_1: 11348 kind_type = 1; 11349 break; 11350 11351 case Integer_2: 11352 case Logical_2: 11353 kind_type = 2; 11354 break; 11355 11356 case Integer_4: 11357 case Logical_4: 11358 case Complex_4: 11359 case Real_4: 11360 kind_type = 4; 11361 break; 11362 11363 case Integer_8: 11364 case Logical_8: 11365 case Complex_8: 11366 case Real_8: 11367 kind_type = 8; 11368 break; 11369 11370 case Complex_16: 11371 case Real_16: 11372 kind_type = 16; 11373 break; 11374 } 11375 11376 temp_attr_idx = attr_idx; 11377 11378 if (ATD_CLASS(attr_idx) == CRI__Pointee && 11379 ATD_PTR_IDX(attr_idx) != NULL_IDX) { 11380 temp_attr_idx = ATD_PTR_IDX(attr_idx); 11381 } 11382 else if (ATD_AUTOMATIC(attr_idx) && 11383 ATD_AUTO_BASE_IDX(attr_idx) != NULL_IDX) { 11384 temp_attr_idx = ATD_AUTO_BASE_IDX(attr_idx); 11385 } 11386 11387 if (ATD_STOR_BLK_IDX(temp_attr_idx) != NULL_IDX && 11388 SB_SCP_IDX(ATD_STOR_BLK_IDX(temp_attr_idx)) != curr_scp_idx) { 11389 type_flag = type_flag | (1 << FEI_DESCRIPTOR_HOSTED_TYPE); 11390 } 11391 11392 size = stor_bit_size_of(attr_idx, FALSE, FALSE); 11393 11394 if (size.fld == CN_Tbl_Idx) { 11395 span = CN_INT_TO_C(size.idx); 11396 } 11397 else { 11398 span = F_INT_TO_C(size.constant, TYP_LINEAR(size.type_idx)); 11399 } 11400 11401 # ifdef _DEBUG 11402 if (! BD_RESOLVED(bd_idx)) { 11403 PRINTMSG(1, 626, Internal, 1, 11404 "resolved bounds entry", 11405 "get_type_desc"); 11406 } 11407 # endif 11408 11409 pe_bd_idx = ATD_PE_ARRAY_IDX(attr_idx); 11410 11411 for (i = 1; i <= BD_RANK(bd_idx); i++) { 11412 11413 if (BD_LB_FLD(bd_idx, i) == NO_Tbl_Idx) 11414 { 11415 lb_empty = TRUE; 11416 } 11417 11418 else { 11419 11420 if (BD_LB_FLD(bd_idx, i) == CN_Tbl_Idx) { 11421 lbound = CN_INT_TO_C(BD_LB_IDX(bd_idx, i)); 11422 lb_vble = FALSE; 11423 } 11424 else { 11425 lbound = BD_LB_IDX(bd_idx, i); 11426 lb_vble = TRUE; 11427 11428 # ifdef _TARGET_OS_MAX 11429 lb_symcon = ATD_SYMBOLIC_CONSTANT(lbound); 11430 lb_vble = !ATD_SYMBOLIC_CONSTANT(lbound); 11431 # endif 11432 11433 if (PDG_AT_IDX(lbound) == NULL_IDX) { 11434 11435 if (template_tmp) { 11436 COPY_ATTR_NTRY(AT_WORK_IDX, lbound); 11437 AT_REFERENCED(lbound) = Referenced; 11438 ATD_OFFSET_ASSIGNED(lbound) = FALSE; 11439 ATD_STOR_BLK_IDX(lbound) = SCP_SB_STACK_IDX(curr_scp_idx); 11440 send_attr_ntry(lbound); 11441 COPY_ATTR_NTRY(lbound, AT_WORK_IDX); 11442 } 11443 else { 11444 send_attr_ntry(lbound); 11445 } 11446 } 11447 lbound = PDG_AT_IDX(lbound); 11448 } 11449 } 11450 if (BD_UB_FLD(bd_idx, i) == NO_Tbl_Idx) { 11451 11452 ub_empty = TRUE; 11453 } 11454 else { 11455 if (BD_UB_FLD(bd_idx, i) == CN_Tbl_Idx) { 11456 ubound = CN_INT_TO_C(BD_UB_IDX(bd_idx, i)); 11457 ub_vble = FALSE; 11458 } 11459 else { 11460 ubound = BD_UB_IDX(bd_idx, i); 11461 ub_vble = TRUE; 11462 11463 # ifdef _TARGET_OS_MAX 11464 ub_symcon = ATD_SYMBOLIC_CONSTANT(ubound); 11465 ub_vble = !ATD_SYMBOLIC_CONSTANT(ubound); 11466 # endif 11467 11468 if (PDG_AT_IDX(ubound) == NULL_IDX) { 11469 11470 if (template_tmp) { 11471 COPY_ATTR_NTRY(AT_WORK_IDX, ubound); 11472 AT_REFERENCED(ubound) = Referenced; 11473 ATD_OFFSET_ASSIGNED(ubound) = FALSE; 11474 ATD_STOR_BLK_IDX(ubound) = SCP_SB_STACK_IDX(curr_scp_idx); 11475 send_attr_ntry(ubound); 11476 COPY_ATTR_NTRY(ubound, AT_WORK_IDX); 11477 } 11478 else { 11479 send_attr_ntry(ubound); 11480 } 11481 } 11482 ubound = PDG_AT_IDX(ubound); 11483 } 11484 } 11485 11486 if (BD_XT_FLD(bd_idx,i) == NO_Tbl_Idx) { 11487 xt_empty = TRUE; 11488 span = (long64) 0; 11489 } 11490 else { 11491 if (BD_XT_FLD(bd_idx, i) == CN_Tbl_Idx) { 11492 if (BD_XT_IDX(bd_idx,i)) 11493 extent = CN_INT_TO_C(BD_XT_IDX(bd_idx, i)); 11494 else 11495 extent = BD_XT_IDX(bd_idx,i); 11496 11497 xt_vble = FALSE; 11498 span = extent * span; 11499 } 11500 else { 11501 extent = BD_XT_IDX(bd_idx, i); 11502 xt_vble = TRUE; 11503 11504 # ifdef _TARGET_OS_MAX 11505 xt_symcon = ATD_SYMBOLIC_CONSTANT(extent); 11506 xt_vble = !ATD_SYMBOLIC_CONSTANT(extent); 11507 # endif 11508 11509 if (PDG_AT_IDX(extent) == NULL_IDX) { 11510 11511 if (template_tmp) { 11512 COPY_ATTR_NTRY(AT_WORK_IDX, extent); 11513 AT_REFERENCED(extent) = Referenced; 11514 ATD_OFFSET_ASSIGNED(extent) = FALSE; 11515 ATD_STOR_BLK_IDX(extent) = SCP_SB_STACK_IDX(curr_scp_idx); 11516 send_attr_ntry(extent); 11517 COPY_ATTR_NTRY(extent, AT_WORK_IDX); 11518 } 11519 else { 11520 send_attr_ntry(extent); 11521 } 11522 } 11523 extent = PDG_AT_IDX(extent); 11524 span = (long64) 0; 11525 } 11526 } 11527 11528 flag = (lb_symcon << FEI_ARRAY_DIMEN_SCON_LB)| 11529 (lb_vble << FEI_ARRAY_DIMEN_VARY_LB)| 11530 (ub_symcon << FEI_ARRAY_DIMEN_SCON_UB)| 11531 (ub_vble << FEI_ARRAY_DIMEN_VARY_UB)| 11532 (xt_symcon << FEI_ARRAY_DIMEN_SCON_EXT)| 11533 (xt_vble << FEI_ARRAY_DIMEN_VARY_EXT)| 11534 (lb_empty << FEI_ARRAY_DIMEN_EMPTY_LB)| 11535 (xt_empty << FEI_ARRAY_DIMEN_EMPTY_EXT)| 11536 (ub_empty << FEI_ARRAY_DIMEN_EMPTY_UB); 11537 11538 flag |= (BD_FLOW_DEPENDENT(bd_idx) << FEI_ARRAY_DIMEN_FLOW_DEPENDENT); 11539 11540 11541 temp_attr_idx = attr_idx; 11542 if (ATD_CLASS(attr_idx) == CRI__Pointee && 11543 ATD_PTR_IDX(attr_idx) != NULL_IDX) { 11544 temp_attr_idx = ATD_PTR_IDX(attr_idx); 11545 } 11546 11547 if (ATD_STOR_BLK_IDX(temp_attr_idx) != NULL_IDX && 11548 SB_SCP_IDX(ATD_STOR_BLK_IDX(temp_attr_idx)) != curr_scp_idx) { 11549 flag = flag | (1 << FEI_ARRAY_DIMEN_HOSTED_TYPE); 11550 } 11551 11552 if (dist_idx != NULL_IDX) { 11553 if (BD_CYCLIC_IDX(dist_idx, i) != NULL_IDX) { 11554 cvrt_exp_to_pdg(BD_CYCLIC_IDX(dist_idx, i), 11555 BD_CYCLIC_FLD(dist_idx, i)); 11556 flag = flag | (1 << FEI_ARRAY_DIMEN_DIST_EXPR); 11557 } 11558 11559 if (BD_ONTO_IDX(dist_idx, i) != NULL_IDX) { 11560 cvrt_exp_to_pdg(BD_ONTO_IDX(dist_idx, i), 11561 BD_ONTO_FLD(dist_idx, i)); 11562 flag = flag | (1 << FEI_ARRAY_DIMEN_ONTO_EXPR); 11563 } 11564 11565 distribution = BD_DISTRIBUTION(dist_idx, i); 11566 11567 flag = flag | (BD_DISTRIBUTE_RESHAPE(dist_idx) << 11568 FEI_ARRAY_DIMEN_DIST_RESHAPE); 11569 } 11570 11571 PDG_DBG_PRINT_START 11572 PDG_DBG_PRINT_C("fei_array_dimen"); 11573 PDG_DBG_PRINT_O("(1) flags", flag); 11574 PDG_DBG_PRINT_LLD("(2) lbound", lbound); 11575 PDG_DBG_PRINT_LLD("(3) extent", extent); 11576 PDG_DBG_PRINT_D("(4) rank", i); 11577 PDG_DBG_PRINT_T("(5) type", type_idx); 11578 PDG_DBG_PRINT_LLD("(6) span", span); 11579 PDG_DBG_PRINT_S("(7) distribution", p_distribution[distribution]); 11580 PDG_DBG_PRINT_LLD("(8) ubound", ubound); 11581 PDG_DBG_PRINT_END 11582 11583 # ifdef _ENABLE_FEI 11584 pdg_array_idx = fei_array_dimen(flag, 11585 lbound, 11586 extent, 11587 i, 11588 type_idx, 11589 span, 11590 distribution, 11591 ubound); 11592 # endif 11593 11594 # if defined(GENERATE_WHIRL) 11595 if (i == BD_RANK(bd_idx) && pe_bd_idx == 0) { 11596 # endif 11597 PDG_DBG_PRINT_START 11598 PDG_DBG_PRINT_C("fei_descriptor"); 11599 PDG_DBG_PRINT_O("(1) flags", type_flag); 11600 PDG_DBG_PRINT_S("(2) table type", p_table_type[Array]); 11601 PDG_DBG_PRINT_LD("(3) pdg_array_idx", pdg_array_idx); 11602 PDG_DBG_PRINT_S("(4) basic type", p_basic_type[basic_type]); 11603 PDG_DBG_PRINT_D("(5) aux info", kind_type); 11604 PDG_DBG_PRINT_D("(6) alignment",pdg_align[ATD_ALIGNMENT(attr_idx)]); 11605 PDG_DBG_PRINT_END 11606 # ifdef _ENABLE_FEI 11607 11608 /* 11609 * add flags for different type of array---fzhao 11610 */ 11611 if (ATD_ARRAY_IDX(attr_idx) != NULL_IDX) { 11612 11613 switch (BD_ARRAY_CLASS(ATD_ARRAY_IDX(attr_idx))) { 11614 case Assumed_Size: 11615 type_flag = type_flag | ( 1 << FEI_ASSUMED_SIZE_ARRAY); 11616 break; 11617 11618 case Assumed_Shape: 11619 type_flag = type_flag | ( 1 << FEI_ASSUMD_SHAPE_ARRAY); 11620 break; 11621 11622 case Deferred_Shape1: 11623 type_flag = type_flag | (1 << FEI_DEFERRED_SHAPE_ARRAY); 11624 break; 11625 11626 case Deferred_Shape: 11627 type_flag = type_flag | (1 << FEI_DEFERRED_SHAPE_ARRAY); 11628 break; 11629 } 11630 } 11631 11632 type_idx = fei_descriptor(type_flag, 11633 Array, 11634 pdg_array_idx, 11635 basic_type, 11636 kind_type, 11637 pdg_align[ATD_ALIGNMENT(attr_idx)]); 11638 # endif 11639 PDG_DBG_PRINT_START 11640 PDG_DBG_PRINT_T("(r) type", type_idx); 11641 PDG_DBG_PRINT_END 11642 11643 # if defined(GENERATE_WHIRL) 11644 } 11645 # endif 11646 } 11647 } 11648 11649 # if defined(COARRAY_FORTRAN) 11650 11651 pe_bd_idx = ATD_PE_ARRAY_IDX(attr_idx); 11652 if (pe_bd_idx) { 11653 dist_idx = ATD_DISTRIBUTION_IDX(attr_idx); 11654 basic_type = pdg_basic_type[TYP_TYPE(ATD_TYPE_IDX(attr_idx))]; 11655 11656 switch (TYP_LINEAR(ATD_TYPE_IDX(attr_idx))) { 11657 case Integer_1: 11658 case Logical_1: 11659 kind_type = 1; 11660 break; 11661 11662 case Integer_2: 11663 case Logical_2: 11664 kind_type = 2; 11665 break; 11666 11667 case Integer_4: 11668 case Logical_4: 11669 case Complex_4: 11670 case Real_4: 11671 kind_type = 4; 11672 break; 11673 11674 case Integer_8: 11675 case Logical_8: 11676 case Complex_8: 11677 case Real_8: 11678 kind_type = 8; 11679 break; 11680 11681 case Complex_16: 11682 case Real_16: 11683 kind_type = 16; 11684 break; 11685 } 11686 11687 11688 temp_attr_idx = attr_idx; 11689 11690 if (ATD_CLASS(attr_idx) == CRI__Pointee && 11691 ATD_PTR_IDX(attr_idx) != NULL_IDX) { 11692 temp_attr_idx = ATD_PTR_IDX(attr_idx); 11693 } 11694 else if (ATD_AUTOMATIC(attr_idx) && 11695 ATD_AUTO_BASE_IDX(attr_idx) != NULL_IDX) { 11696 temp_attr_idx = ATD_AUTO_BASE_IDX(attr_idx); 11697 } 11698 11699 if (ATD_STOR_BLK_IDX(temp_attr_idx) != NULL_IDX && 11700 SB_SCP_IDX(ATD_STOR_BLK_IDX(temp_attr_idx)) != curr_scp_idx) { 11701 type_flag = type_flag | (1 << FEI_DESCRIPTOR_HOSTED_TYPE); 11702 } 11703 11704 size = stor_bit_size_of(attr_idx, FALSE, FALSE); 11705 11706 if (size.fld == CN_Tbl_Idx) { 11707 span = CN_INT_TO_C(size.idx); 11708 } 11709 else { 11710 span = F_INT_TO_C(size.constant, TYP_LINEAR(size.type_idx)); 11711 } 11712 11713 # ifdef _DEBUG 11714 if (! BD_RESOLVED(pe_bd_idx)) { 11715 PRINTMSG(1, 626, Internal, 1, 11716 "resolved bounds entry", 11717 "get_type_desc"); 11718 } 11719 # endif 11720 11721 for (i = 1; i <= BD_RANK(pe_bd_idx); i++) { 11722 11723 if (BD_LB_FLD(pe_bd_idx, i) == NO_Tbl_Idx) 11724 { 11725 lb_empty = TRUE; 11726 } 11727 11728 else { 11729 11730 if (BD_LB_FLD(pe_bd_idx, i) == CN_Tbl_Idx) { 11731 lbound = CN_INT_TO_C(BD_LB_IDX(pe_bd_idx, i)); 11732 lb_vble = FALSE; 11733 } 11734 else { 11735 lbound = BD_LB_IDX(pe_bd_idx, i); 11736 lb_vble = TRUE; 11737 11738 # ifdef _TARGET_OS_MAX 11739 lb_symcon = ATD_SYMBOLIC_CONSTANT(lbound); 11740 lb_vble = !ATD_SYMBOLIC_CONSTANT(lbound); 11741 # endif 11742 11743 if (PDG_AT_IDX(lbound) == NULL_IDX) { 11744 11745 if (template_tmp) { 11746 COPY_ATTR_NTRY(AT_WORK_IDX, lbound); 11747 AT_REFERENCED(lbound) = Referenced; 11748 ATD_OFFSET_ASSIGNED(lbound) = FALSE; 11749 ATD_STOR_BLK_IDX(lbound) = SCP_SB_STACK_IDX(curr_scp_idx); 11750 send_attr_ntry(lbound); 11751 COPY_ATTR_NTRY(lbound, AT_WORK_IDX); 11752 } 11753 else { 11754 send_attr_ntry(lbound); 11755 } 11756 } 11757 lbound = PDG_AT_IDX(lbound); 11758 } 11759 } 11760 if (BD_UB_FLD(pe_bd_idx, i) == NO_Tbl_Idx) { 11761 11762 ub_empty = TRUE; 11763 } 11764 else { 11765 if (BD_UB_FLD(pe_bd_idx, i) == CN_Tbl_Idx) { 11766 ubound = CN_INT_TO_C(BD_UB_IDX(pe_bd_idx, i)); 11767 ub_vble = FALSE; 11768 } 11769 else { 11770 ubound = BD_UB_IDX(pe_bd_idx, i); 11771 ub_vble = TRUE; 11772 11773 # ifdef _TARGET_OS_MAX 11774 ub_symcon = ATD_SYMBOLIC_CONSTANT(ubound); 11775 ub_vble = !ATD_SYMBOLIC_CONSTANT(ubound); 11776 # endif 11777 11778 if (PDG_AT_IDX(ubound) == NULL_IDX) { 11779 11780 if (template_tmp) { 11781 COPY_ATTR_NTRY(AT_WORK_IDX, ubound); 11782 AT_REFERENCED(ubound) = Referenced; 11783 ATD_OFFSET_ASSIGNED(ubound) = FALSE; 11784 ATD_STOR_BLK_IDX(ubound) = SCP_SB_STACK_IDX(curr_scp_idx); 11785 send_attr_ntry(ubound); 11786 COPY_ATTR_NTRY(ubound, AT_WORK_IDX); 11787 } 11788 else { 11789 send_attr_ntry(ubound); 11790 } 11791 } 11792 ubound = PDG_AT_IDX(ubound); 11793 } 11794 } 11795 11796 if (BD_XT_FLD(pe_bd_idx,i) == NO_Tbl_Idx) { 11797 xt_empty = TRUE; 11798 span = (long64) 0; 11799 } 11800 else { 11801 if (BD_XT_FLD(pe_bd_idx, i) == CN_Tbl_Idx) { 11802 extent = CN_INT_TO_C(BD_XT_IDX(pe_bd_idx, i)); 11803 xt_vble = FALSE; 11804 span = extent * span; 11805 } 11806 else { 11807 extent = BD_XT_IDX(pe_bd_idx, i); 11808 xt_vble = TRUE; 11809 11810 # ifdef _TARGET_OS_MAX 11811 xt_symcon = ATD_SYMBOLIC_CONSTANT(extent); 11812 xt_vble = !ATD_SYMBOLIC_CONSTANT(extent); 11813 # endif 11814 11815 if (PDG_AT_IDX(extent) == NULL_IDX) { 11816 11817 if (template_tmp) { 11818 COPY_ATTR_NTRY(AT_WORK_IDX, extent); 11819 AT_REFERENCED(extent) = Referenced; 11820 ATD_OFFSET_ASSIGNED(extent) = FALSE; 11821 ATD_STOR_BLK_IDX(extent) = SCP_SB_STACK_IDX(curr_scp_idx); 11822 send_attr_ntry(extent); 11823 COPY_ATTR_NTRY(extent, AT_WORK_IDX); 11824 } 11825 else { 11826 send_attr_ntry(extent); 11827 } 11828 } 11829 extent = PDG_AT_IDX(extent); 11830 span = (long64) 0; 11831 } 11832 } 11833 11834 flag = (lb_symcon << FEI_ARRAY_DIMEN_SCON_LB)| 11835 (lb_vble << FEI_ARRAY_DIMEN_VARY_LB)| 11836 (ub_symcon << FEI_ARRAY_DIMEN_SCON_UB)| 11837 (ub_vble << FEI_ARRAY_DIMEN_VARY_UB)| 11838 (xt_symcon << FEI_ARRAY_DIMEN_SCON_EXT)| 11839 (xt_vble << FEI_ARRAY_DIMEN_VARY_EXT)| 11840 (lb_empty << FEI_ARRAY_DIMEN_EMPTY_LB)| 11841 (xt_empty << FEI_ARRAY_DIMEN_EMPTY_EXT)| 11842 (ub_empty << FEI_ARRAY_DIMEN_EMPTY_UB); 11843 11844 flag |= (BD_FLOW_DEPENDENT(pe_bd_idx) << FEI_ARRAY_DIMEN_FLOW_DEPENDENT); 11845 11846 temp_attr_idx = attr_idx; 11847 if (ATD_CLASS(attr_idx) == CRI__Pointee && 11848 ATD_PTR_IDX(attr_idx) != NULL_IDX) { 11849 temp_attr_idx = ATD_PTR_IDX(attr_idx); 11850 } 11851 11852 if (ATD_STOR_BLK_IDX(temp_attr_idx) != NULL_IDX && 11853 SB_SCP_IDX(ATD_STOR_BLK_IDX(temp_attr_idx)) != curr_scp_idx) { 11854 flag = flag | (1 << FEI_ARRAY_DIMEN_HOSTED_TYPE); 11855 } 11856 11857 if (dist_idx != NULL_IDX) { 11858 if (BD_CYCLIC_IDX(dist_idx, i) != NULL_IDX) { 11859 cvrt_exp_to_pdg(BD_CYCLIC_IDX(dist_idx, i), 11860 BD_CYCLIC_FLD(dist_idx, i)); 11861 flag = flag | (1 << FEI_ARRAY_DIMEN_DIST_EXPR); 11862 } 11863 11864 if (BD_ONTO_IDX(dist_idx, i) != NULL_IDX) { 11865 cvrt_exp_to_pdg(BD_ONTO_IDX(dist_idx, i), 11866 BD_ONTO_FLD(dist_idx, i)); 11867 flag = flag | (1 << FEI_ARRAY_DIMEN_ONTO_EXPR); 11868 } 11869 11870 distribution = BD_DISTRIBUTION(dist_idx, i); 11871 11872 flag = flag | (BD_DISTRIBUTE_RESHAPE(dist_idx) << 11873 FEI_ARRAY_DIMEN_DIST_RESHAPE); 11874 } 11875 11876 11877 PDG_DBG_PRINT_START 11878 PDG_DBG_PRINT_C("fei_co_array_dimen"); 11879 PDG_DBG_PRINT_O("(1) flags", flag); 11880 PDG_DBG_PRINT_LLD("(2) lbound", lbound); 11881 PDG_DBG_PRINT_LLD("(3) extent", extent); 11882 PDG_DBG_PRINT_D("(4) rank", i); 11883 PDG_DBG_PRINT_T("(5) type", type_idx); 11884 PDG_DBG_PRINT_LLD("(6) span", span); 11885 PDG_DBG_PRINT_S("(7) distribution", p_distribution[distribution]); 11886 PDG_DBG_PRINT_LLD("(8) ubound", ubound); 11887 PDG_DBG_PRINT_END 11888 11889 # ifdef _ENABLE_FEI 11890 pdg_array_idx = fei_co_array_dimen(flag, 11891 lbound, 11892 extent, 11893 bd_idx?BD_RANK(bd_idx):-1, 11894 i, 11895 type_idx, 11896 span, 11897 distribution, 11898 ubound); 11899 # endif 11900 11901 if (i == BD_RANK(pe_bd_idx)) { 11902 11903 PDG_DBG_PRINT_START 11904 PDG_DBG_PRINT_C("fei_descriptor"); 11905 PDG_DBG_PRINT_O("(1) flags", type_flag); 11906 PDG_DBG_PRINT_S("(2) table type", p_table_type[Array]); 11907 PDG_DBG_PRINT_LD("(3) pdg_array_idx", pdg_array_idx); 11908 PDG_DBG_PRINT_S("(4) basic type", p_basic_type[basic_type]); 11909 PDG_DBG_PRINT_D("(5) aux info", kind_type); 11910 PDG_DBG_PRINT_D("(6) alignment", pdg_align[ATD_ALIGNMENT(attr_idx)]); 11911 PDG_DBG_PRINT_END 11912 # ifdef _ENABLE_FEI 11913 11914 /* 11915 * add flags for different type of array---fzhao 11916 */ 11917 if (ATD_ARRAY_IDX(attr_idx) != NULL_IDX) { 11918 11919 switch (BD_ARRAY_CLASS(ATD_ARRAY_IDX(attr_idx))) { 11920 case Assumed_Size: 11921 type_flag = type_flag | ( 1 << FEI_ASSUMED_SIZE_ARRAY); 11922 break; 11923 11924 case Assumed_Shape: 11925 type_flag = type_flag | ( 1 << FEI_ASSUMD_SHAPE_ARRAY); 11926 break; 11927 11928 case Deferred_Shape1: 11929 type_flag = type_flag | (1 << FEI_DEFERRED_SHAPE_ARRAY); 11930 break; 11931 11932 case Deferred_Shape: 11933 type_flag = type_flag | (1 << FEI_DEFERRED_SHAPE_ARRAY); 11934 break; 11935 } 11936 } 11937 11938 type_idx = fei_descriptor(type_flag, 11939 Array, 11940 pdg_array_idx, 11941 basic_type, 11942 kind_type, 11943 pdg_align[ATD_ALIGNMENT(attr_idx)]); 11944 # endif 11945 PDG_DBG_PRINT_START 11946 PDG_DBG_PRINT_T("(r) type", type_idx); 11947 PDG_DBG_PRINT_END 11948 } 11949 } 11950 } 11951 # endif 11952 11953 EXIT: 11954 11955 TRACE (Func_Exit, "get_type_desc", NULL); 11956 11957 return(type_idx); 11958 11959 } /* get_type_desc */ 11960 11961 11962 /******************************************************************************\ 11963 |* *| 11964 |* Description: *| 11965 |* *| 11966 |* Input parameters: *| 11967 |* NONE *| 11968 |* *| 11969 |* Output parameters: *| 11970 |* NONE *| 11971 |* *| 11972 |* Returns: *| 11973 |* NOTHING *| 11974 |* *| 11975 \******************************************************************************/ 11976 static void send_stor_blk(int sb_idx, 11977 int *pdg_sym_class) 11978 11979 { 11980 long64 blk_len = (long64) 0; 11981 int flag; 11982 int host_sb_idx = NULL_IDX; 11983 int local_sb_idx; 11984 char *name_ptr; 11985 int parent_idx; 11986 sb_type_type sb_type; 11987 11988 # if defined(GENERATE_WHIRL) 11989 int i; 11990 char new_name[256]; 11991 # endif 11992 11993 11994 TRACE (Func_Entry, "send_stor_blk", NULL); 11995 11996 if (sb_idx == NULL_IDX) { 11997 goto EXIT; 11998 } 11999 12000 sb_type = SB_BLK_TYPE(sb_idx); 12001 12002 flag = (SB_MODULE(sb_idx) << FEI_SEG_MODULE) | 12003 (SB_SAVED(sb_idx) << FEI_SEG_SAVED) | 12004 (SB_EQUIVALENCED(sb_idx) << FEI_SEG_EQUIVALENCED) | 12005 (SB_DUPLICATE_COMMON(sb_idx) << FEI_SEG_DUPLICATE) | 12006 (SB_VOLATILE(sb_idx) << FEI_SEG_VOLATILE) | 12007 (SB_SYMMETRIC(sb_idx) << FEI_SEG_SHARED); 12008 if (SB_MODULE_IDX (sb_idx)!=NULL_IDX) 12009 flag |= 1 << FEI_SEG_EXTERNAL; 12010 12011 if (sb_type == Threadprivate) { 12012 sb_type = Common; 12013 flag |= 1 << FEI_SEG_THREADPRIVATE; 12014 } 12015 12016 if (sb_type == Coment) { 12017 *pdg_sym_class = Name; 12018 } 12019 12020 switch (SB_LEN_FLD(sb_idx)) { 12021 case CN_Tbl_Idx : 12022 blk_len = CN_INT_TO_C(SB_LEN_IDX(sb_idx)); 12023 break; 12024 12025 case AT_Tbl_Idx : 12026 flag = flag | (1 << FEI_SEG_SCON_LEN); 12027 send_attr_ntry(SB_LEN_IDX(sb_idx)); 12028 blk_len = (long64) PDG_AT_IDX(SB_LEN_IDX(sb_idx)); 12029 break; 12030 } 12031 12032 if (SB_SCP_IDX(sb_idx) != curr_scp_idx) { 12033 12034 if (SB_HOSTED_STACK(sb_idx)) { 12035 sb_type = Non_Local_Stack; 12036 *pdg_sym_class = Hosted_User_Variable; 12037 } 12038 else if (sb_type == Formal) { 12039 sb_type = Non_Local_Formal; 12040 *pdg_sym_class = Hosted_Dummy_Arg; 12041 } 12042 else if (sb_type == Based ||sb_type ==Static) { 12043 12044 12045 *pdg_sym_class = Hosted_User_Variable; 12046 } 12047 else if (PDG_SB_IDX(sb_idx) == NULL_IDX) { 12048 12049 /* Find this block in the local scope. It must be there, */ 12050 /* because it was moved in during attr_link_resolution. */ 12051 local_sb_idx = srch_stor_blk_tbl(SB_NAME_PTR(sb_idx), 12052 SB_NAME_LEN(sb_idx), 12053 curr_scp_idx); 12054 12055 /* local_sb_idx could be NULL if we have a leftover */ 12056 /* storage block from an inlined routine. */ 12057 if (local_sb_idx != NULL_IDX) { 12058 if (PDG_SB_IDX(local_sb_idx) != NULL_IDX) { 12059 PDG_SB_IDX(sb_idx) = PDG_SB_IDX(local_sb_idx); 12060 } 12061 else { 12062 host_sb_idx = sb_idx; 12063 sb_idx = local_sb_idx; 12064 } 12065 } 12066 } 12067 } 12068 else if (SB_HOSTED_STACK(sb_idx)) { 12069 sb_type = Hosted_Stack; 12070 } 12071 12072 if (PDG_SB_IDX(sb_idx) != NULL_IDX) { 12073 goto EXIT; 12074 } 12075 12076 name_ptr = SB_NAME_PTR(sb_idx); 12077 12078 if (sb_type == Task_Common) { /* -a taskcommon switches */ 12079 /* Intentionally blank. */ 12080 } 12081 else if (SB_MODULE(sb_idx)) { /* Module data is Common data. */ 12082 /* sb_type = Common; */ 12083 sb_type = ZModule; 12084 } 12085 else if (sb_type == Static) { 12086 if (SB_HOSTED_STATIC(sb_idx)) { /* Hosted static data is common. */ 12087 flag = flag | (1 << FEI_SEG_DUPLICATE); 12088 sb_type = Common; 12089 } 12090 else { 12091 sb_type = Static_Local; 12092 } 12093 } 12094 12095 /* All local static blocks are converted to a new kind of */ 12096 /* storage class for PDGCS. Basically, the storage class is */ 12097 /* optimized as local common; but, externalized by the loader. */ 12098 12099 if ((opt_flags.inline_lvl > Inline_Lvl_0 || opt_flags.modinline) && 12100 (sb_type == Static_Local || sb_type == Static_Named)) { 12101 flag = flag | (1 << FEI_SEG_LOCAL_COMMON); 12102 } 12103 12104 if (sb_type == Common || sb_type == Task_Common 12105 || sb_type == ZModule ) { 12106 12107 # if defined(GENERATE_WHIRL) 12108 if (! SB_BLANK_COMMON(sb_idx) && 12109 ! SB_NAME_IN_STONE(sb_idx)) { 12110 12111 /* Need all common block names lower case with a trailing _, */ 12112 /* except blank common. */ 12113 12114 for (i = 0; i < SB_NAME_LEN(sb_idx); i++) { 12115 new_name[i] = tolower(name_ptr[i]); 12116 } 12117 12118 new_name[i] = '_'; 12119 12120 for (i = SB_NAME_LEN(sb_idx) + 1; i < 256; i++) { 12121 new_name[i] = '\0'; 12122 } 12123 name_ptr = &new_name[0]; 12124 } 12125 # endif 12126 12127 parent_idx = NULL_IDX; 12128 } 12129 else { 12130 parent_idx = PDG_AT_IDX(SCP_ATTR_IDX(SB_SCP_IDX(sb_idx))); 12131 } 12132 12133 PDG_DBG_PRINT_START 12134 PDG_DBG_PRINT_C("fei_seg"); 12135 PDG_DBG_PRINT_S("(1) name_ptr", name_ptr); 12136 PDG_DBG_PRINT_S("(2) segment type", p_sb_blk_type_str[sb_type]); 12137 PDG_DBG_PRINT_S("(3) parent_idx", 12138 AT_OBJ_NAME_PTR(SCP_ATTR_IDX(SB_SCP_IDX(sb_idx)))); 12139 PDG_DBG_PRINT_D("(4) unused", 0); 12140 PDG_DBG_PRINT_D("(5) unused", 0); 12141 PDG_DBG_PRINT_O("(6) flags", flag); 12142 PDG_DBG_PRINT_D("(7) unused", 0); 12143 PDG_DBG_PRINT_LLD("(8) blk_len", blk_len); 12144 PDG_DBG_PRINT_END 12145 12146 # ifdef _ENABLE_FEI 12147 PDG_SB_IDX(sb_idx) = fei_seg(name_ptr, 12148 sb_type, 12149 parent_idx, 12150 0, 12151 0, 12152 flag, 12153 0, 12154 blk_len); 12155 # endif 12156 12157 PDG_DBG_PRINT_START 12158 PDG_DBG_PRINT_LD("(r) PDG_SB_IDX", PDG_SB_IDX(sb_idx)); 12159 PDG_DBG_PRINT_END 12160 12161 if (host_sb_idx != NULL_IDX) { 12162 PDG_SB_IDX(host_sb_idx) = PDG_SB_IDX(sb_idx); 12163 } 12164 12165 EXIT: 12166 12167 TRACE (Func_Exit, "send_stor_blk", NULL); 12168 12169 return; 12170 12171 } /* send_stor_blk */ 12172 12173 12174 12175 /******************************************************************************\ 12176 |* *| 12177 |* Description: *| 12178 |* send_dummy_procedure sends a dummy procedure. *| 12179 |* *| 12180 |* Input parameters: *| 12181 |* attr_idx -> Index of attr entry for the dummy procedure. *| 12182 |* *| 12183 |* Output parameters: *| 12184 |* NONE *| 12185 |* *| 12186 |* Returns: *| 12187 |* NOTHING *| 12188 |* *| 12189 \******************************************************************************/ 12190 static void send_dummy_procedure(int attr_idx) 12191 12192 { 12193 long64 flag; 12194 long64 size; 12195 size_offset_type stor_size; 12196 TYPE type_idx; 12197 int class; 12198 12199 12200 TRACE (Func_Entry, "send_dummy_procedure", NULL); 12201 12202 send_stor_blk(SCP_SB_DARG_IDX(curr_scp_idx), &class); 12203 12204 class = Dummy_Procedure; 12205 12206 # if defined(GENERATE_WHIRL) 12207 if (curr_scp_idx != ATP_SCP_IDX(attr_idx)) { 12208 class = Hosted_Dummy_Procedure; 12209 } 12210 # endif 12211 12212 if (ATP_RSLT_IDX(attr_idx) == NULL_IDX) { 12213 type_idx = get_type_desc(attr_idx); 12214 } 12215 else { 12216 type_idx = get_type_desc(ATP_RSLT_IDX(attr_idx)); 12217 } 12218 12219 if (ATP_PGM_UNIT(attr_idx) == Function && 12220 TYP_TYPE(ATD_TYPE_IDX(ATP_RSLT_IDX(attr_idx))) == Character) { 12221 stor_size = stor_bit_size_of(attr_idx, FALSE, FALSE); 12222 12223 if (stor_size.fld == CN_Tbl_Idx) { 12224 size = CN_INT_TO_C(stor_size.idx); 12225 } 12226 else { 12227 size = F_INT_TO_C(stor_size.constant, TYP_LINEAR(stor_size.type_idx)); 12228 } 12229 } 12230 else { 12231 size = (long64) TARGET_BITS_PER_WORD; 12232 } 12233 12234 12235 flag = ((long64) AT_REF_IN_CHILD(attr_idx) << FEI_OBJECT_INNER_REF) | 12236 ((long64) AT_DEF_IN_CHILD(attr_idx) << FEI_OBJECT_INNER_DEF) | 12237 ((long64) AT_DEFINED(attr_idx) << FEI_OBJECT_DEFINED); 12238 12239 PDG_DBG_PRINT_START 12240 PDG_DBG_PRINT_C("fei_object"); 12241 PDG_DBG_PRINT_S("(1) AT_OBJ_NAME", AT_OBJ_NAME_PTR(attr_idx)); 12242 PDG_DBG_PRINT_T("(2) type", type_idx); 12243 PDG_DBG_PRINT_LLO("(3) flags", flag); 12244 PDG_DBG_PRINT_S("(4) symbol class", p_obj_sym_class[class]); 12245 PDG_DBG_PRINT_S("(5) block", SB_NAME_PTR(SCP_SB_DARG_IDX(curr_scp_idx))); 12246 PDG_DBG_PRINT_D("(6) unused", 0); 12247 PDG_DBG_PRINT_D("(7) unused", 0); 12248 PDG_DBG_PRINT_D("(8) unused", 0); 12249 PDG_DBG_PRINT_S("(9) intent", p_intent[Intent_Inout]); 12250 PDG_DBG_PRINT_LLD("(10) bit size", size); 12251 PDG_DBG_PRINT_D("(11) unused", 0); 12252 PDG_DBG_PRINT_D("(12) storage align", Word_Align); 12253 PDG_DBG_PRINT_D("(13) unused", 0); 12254 PDG_DBG_PRINT_D("(14) unused", 0); 12255 PDG_DBG_PRINT_D("(15) unused", 0); 12256 PDG_DBG_PRINT_D("(16) def line", AT_DEF_LINE(attr_idx)); 12257 PDG_DBG_PRINT_END 12258 12259 # ifdef _ENABLE_FEI 12260 PDG_AT_IDX(attr_idx) = fei_object(AT_OBJ_NAME_PTR(attr_idx), 12261 type_idx, 12262 flag, 12263 class, 12264 PDG_SB_IDX(SCP_SB_DARG_IDX(curr_scp_idx)), 12265 0, 12266 0, 12267 0, 12268 Intent_Inout, 12269 size, 12270 0, 12271 Word_Align, 12272 0, 12273 0, 12274 0, 12275 AT_DEF_LINE(attr_idx), 12276 0); 12277 # endif 12278 12279 PDG_DBG_PRINT_START 12280 PDG_DBG_PRINT_LD("(r) PDG_AT_IDX", PDG_AT_IDX(attr_idx)); 12281 PDG_DBG_PRINT_END 12282 12283 TRACE (Func_Exit, "send_dummy_procedure", NULL); 12284 12285 return; 12286 12287 } /* send_dummy_procedure */ 12288 12289 12290 12291 /******************************************************************************\ 12292 |* *| 12293 |* Description: *| 12294 |* Calls fei_proc to add an entry point of the routine. It also *| 12295 |* handles all the dummy arguments and the function result. *| 12296 |* *| 12297 |* Input parameters: *| 12298 |* attr_idx -> Attr index of entry point. *| 12299 |* alt_entry_idx -> If ATP_ALT_ENTRY, this is the PDG_AT_IDX of the main *| 12300 |* entry point for the alternate entry point. If *| 12301 |* !ATP_ALT_ENTRY and this field is not NULL_IDX this *| 12302 |* is the SCP_ENTRY_IDX for the entry point. *| 12303 |* pdg_sym_idx -> Pdgcs symbol table index where PDGCS should put this *| 12304 |* should put this entry point. *| 12305 |* call_type -> This is an enum and can be a Definition, Parent or *| 12306 |* Imported. These determine which PDGCS inteface *| 12307 |* routine to call and what arguments need to be sent. *| 12308 |* *| 12309 |* Output parameters: *| 12310 |* NONE *| 12311 |* *| 12312 |* Returns: *| 12313 |* NOTHING *| 12314 |* *| 12315 \******************************************************************************/ 12316 static void send_procedure(int attr_idx, 12317 int alt_entry_idx, 12318 int call_type) 12319 12320 { 12321 int darg_pdg_sn_fw_idx = NULL_IDX; 12322 boolean pure; 12323 long64 flag3 = (long64) 0; 12324 int main_entry_idx; 12325 char *name_ptr; 12326 int num_dargs = 0; 12327 int parent_idx; 12328 int pdg_alt_entry_idx = NULL_IDX; 12329 int pgm_unit; 12330 int prev_idx; 12331 int proc; 12332 TYPE type_desc; 12333 int in_interface = ATP_IN_INTERFACE_BLK(attr_idx); 12334 12335 12336 TRACE (Func_Entry, "send_procedure", NULL); 12337 12338 if (call_type == Imported) { 12339 if (ATP_PROC(attr_idx) == Dummy_Proc) { 12340 send_dummy_procedure(attr_idx); 12341 goto EXIT; 12342 } 12343 12344 if (AT_USE_ASSOCIATED(attr_idx) && 12345 AT_REFERENCED(attr_idx) == Not_Referenced && 12346 ATP_IN_INTERFACE_BLK(attr_idx) && 12347 ATP_EXPL_ITRFC(attr_idx) && 12348 ATP_PROC(attr_idx) == Extern_Proc) { 12349 name_ptr = &name_pool[ATP_EXT_NAME_IDX(attr_idx)].name_char; 12350 if (strcmp(AT_OBJ_NAME_PTR(SCP_ATTR_IDX(curr_scp_idx)), 12351 name_ptr) == 0) { 12352 /* 12353 We have a routine being USE associated that is 12354 defined in an INTERFACE block only. The backend must not 12355 see this. 12356 */ 12357 goto EXIT; 12358 } 12359 } 12360 } 12361 12362 pgm_unit = ATP_PGM_UNIT(attr_idx); 12363 name_ptr = &name_pool[ATP_EXT_NAME_IDX(attr_idx)].name_char; 12364 parent_idx = NULL_IDX; 12365 12366 12367 pure = ATP_NOSIDE_EFFECTS(attr_idx) || 12368 ATP_PURE(attr_idx) || 12369 ATP_ELEMENTAL(attr_idx); 12370 12371 flag3 = 12372 ((long64) ATP_VFUNCTION(attr_idx) << FEI_PROC_VFUNC)| 12373 ((long64) pure << FEI_PROC_CNGA)| 12374 ((long64) pure << FEI_PROC_CNAA)| 12375 ((long64) pure << FEI_PROC_CNGO)| 12376 ((long64) pure << FEI_PROC_RNGO)| 12377 ((long64) !SCP_DOES_IO(curr_scp_idx) << FEI_PROC_NOIO)| 12378 ((long64) !SCP_HAS_CALLS(curr_scp_idx) << FEI_PROC_NOCALLS)| 12379 ((long64) ATP_ALL_INTENT_IN(attr_idx) << FEI_PROC_DNDA)| 12380 ((long64) ATP_RECURSIVE(attr_idx) << FEI_PROC_RECURSE)| 12381 ((long64) ATP_HAS_TASK_DIRS(SCP_ATTR_IDX(curr_scp_idx)) 12382 << FEI_PROC_MICROTASK)| 12383 ((long64) opt_flags.taskinner << FEI_PROC_TASKINNER)| 12384 ((long64) !opt_flags.threshold << FEI_PROC_NOTHRESHOLDS)| 12385 ((long64) 1 << FEI_PROC_TOLERANT)| 12386 ((long64) on_off_flags.alloc_autos_on_stack << FEI_PROC_LIMHEAP)| 12387 ((long64) ATP_DCL_EXTERNAL(attr_idx) << FEI_PROC_IMMORT)| 12388 ((long64) ATP_EXTRA_DARG(attr_idx) << FEI_PROC_HASRSLT)| 12389 ((long64) on_off_flags.indef_init << FEI_PROC_INDEFSTK)| 12390 ((long64) (cmd_line_flags.solaris_profile | cdir_switches.flow) 12391 << FEI_PROC_DOFLOWTR)| 12392 ((long64) opt_flags.zeroinc << FEI_PROC_ZEROINC)| 12393 ((long64) ATP_ALIGN(attr_idx) << FEI_PROC_ALGNINST)| 12394 ((long64) ATP_NAME_IN_STONE(attr_idx) << FEI_PROC_PERM_NAME)| 12395 ((long64) on_off_flags.round_mult_operations << FEI_PROC_STRROUND)| 12396 ((long64) !on_off_flags.round_mult_operations << FEI_PROC_TRUNCATE)| 12397 ((long64) (opt_flags.over_index | 12398 ATP_HAS_OVER_INDEXING(SCP_ATTR_IDX(curr_scp_idx))) 12399 << FEI_PROC_NCOADDR)| 12400 ((long64) ((ATP_PGM_UNIT(attr_idx) == Function) & on_off_flags.recursive) 12401 << FEI_PROC_RECURSE)| 12402 ((long64) ((ATP_PGM_UNIT(attr_idx) == Subroutine) & on_off_flags.recursive) 12403 << FEI_PROC_RECURSE)| 12404 ((long64) ((attr_idx == SCP_ATTR_IDX(curr_scp_idx)) & 12405 (ATP_PGM_UNIT(attr_idx) == Module)) 12406 << FEI_PROC_MOD_FIRST)| 12407 ((long64) ((attr_idx == SCP_ATTR_IDX(curr_scp_idx)) & 12408 (ATP_PROC(attr_idx) == Module_Proc)) 12409 << FEI_PROC_MOD_JUST)| 12410 ((long64) (attr_idx == AT_WORK_IDX) << FEI_PROC_MOD_LAST)| 12411 ((long64) ATP_ARGCHCK_CALL(attr_idx) << FEI_PROC_ARG_CHECK)| 12412 ((long64) on_off_flags.zero_init << FEI_PROC_ZERO_INIT)| 12413 ((long64) ATP_OPTIONAL_DIR(attr_idx) << FEI_PROC_OPTIONAL_DIR)| 12414 ((long64) (call_type == Definition) << FEI_PROC_DEFINITION)| 12415 ((long64) (call_type == In_Interface) << FEI_PROC_IN_INTERFACE) | 12416 ((long64) (call_type == Imported) << FEI_PROC_IMPORTED)| 12417 ((long64) AT_MODULE_OBJECT(attr_idx) << FEI_PROC_MODULE)| 12418 ((long64) (AT_MODULE_IDX(attr_idx)) << FEI_PROC_M_IMPORTED)| 12419 ((long64) (call_type == Parent) << FEI_PROC_PARENT)| 12420 ((long64) (ATP_NOSIDE_EFFECTS(attr_idx) | ATP_PURE(attr_idx)) 12421 << FEI_PROC_NOSIDE_EFFECTS)| 12422 ((long64) ATP_ELEMENTAL(attr_idx) << FEI_PROC_ELEMENTAL); 12423 12424 if (ATP_PGM_UNIT(attr_idx) == Module && 12425 (ATP_SCP_IDX(attr_idx) != curr_scp_idx || 12426 !ATP_IN_CURRENT_COMPILE(attr_idx))) { 12427 flag3 = flag3 | ((long64) 1 << FEI_PROC_IMMORT); 12428 } 12429 12430 12431 if (call_type == Definition || call_type == Parent ||call_type == In_Interface) { 12432 if (SCP_ALT_ENTRY_CNT(ATP_SCP_IDX(attr_idx)) > 0) { 12433 flag3 = flag3 | ((long64) 1 << FEI_PROC_HAS_ALT_ENTRY); 12434 } 12435 12436 if (ATP_SGI_GLOBAL_INLINE(attr_idx)) { 12437 flag3 = flag3 | ((long64) 1 << FEI_PROC_GLOBAL_INLINE); 12438 } 12439 12440 proc = ATP_PROC(attr_idx); 12441 if (SCP_PARENT_IDX(curr_scp_idx) != NULL_IDX && 12442 (ATP_PGM_UNIT(SCP_ATTR_IDX(SCP_PARENT_IDX(curr_scp_idx))) != Module 12443 || TRUE)) { 12444 12445 12446 parent_idx = PDG_AT_IDX(SCP_ATTR_IDX(SCP_PARENT_IDX(curr_scp_idx))); 12447 } 12448 12449 if (ATP_PROC(attr_idx) == Unknown_Proc || 12450 ATP_PROC(attr_idx) == Module_Proc ) { 12451 proc = Extern_Proc; 12452 } 12453 12454 if (ATP_PROC(attr_idx) == Intrin_Proc) 12455 proc = Intrin_src_Proc; 12456 12457 if (alt_entry_idx != NULL_IDX) { 12458 if (ATP_ALT_ENTRY(attr_idx)) { 12459 pdg_alt_entry_idx = alt_entry_idx; 12460 flag3 = flag3 | ((long64) 1 << FEI_PROC_ENTRY); 12461 } 12462 else { 12463 PDG_DBG_PRINT_START 12464 PDG_DBG_PRINT_C("fei_next_name"); 12465 PDG_DBG_PRINT_D("(1) logical", TRUE); 12466 PDG_DBG_PRINT_END 12467 12468 # ifdef _ENABLE_FEI 12469 pdg_alt_entry_idx = fei_next_name(TRUE); 12470 # endif 12471 } 12472 } 12473 12474 if (ATP_PROC(attr_idx) == Intern_Proc) { 12475 pdg_alt_entry_idx = parent_idx; 12476 } 12477 } 12478 else if (ATP_PROC(attr_idx) == Intrin_Proc) 12479 { 12480 if (ATP_INTRIN_ENUM(attr_idx)==Sync_Images_Intrinsic || 12481 ATP_INTRIN_ENUM(attr_idx)==Rem_Images_Intrinsic || 12482 ATP_INTRIN_ENUM(attr_idx)==Log2_Images_Intrinsic || 12483 ATP_INTRIN_ENUM(attr_idx)==This_Image_Intrinsic || 12484 ATP_INTRIN_ENUM(attr_idx)==Num_Images_Intrinsic) 12485 proc = Imported_Proc; /*June*/ 12486 else proc = Intrin_src_Proc; 12487 } 12488 12489 else 12490 { 12491 proc = (ATP_PROC(attr_idx) == Intern_Proc) ? Intern_Proc_Refd : 12492 Imported_Proc; 12493 12494 if (attr_idx == glb_tbl_idx[Buffer_In_Attr_Idx]) { 12495 flag3 = flag3 | ((long64) 1 << FEI_PROC_BUFIN); 12496 } 12497 else if (attr_idx == glb_tbl_idx[Buffer_Out_Attr_Idx]) { 12498 flag3 = flag3 | ((long64) 1 << FEI_PROC_BUFOUT); 12499 } 12500 } 12501 12502 switch (pgm_unit) { 12503 12504 case Module: 12505 case Blockdata: 12506 case Program: 12507 case Pgm_Unknown: 12508 type_desc = pdg_type_void; 12509 break; 12510 12511 12512 case Subroutine: 12513 num_dargs = (call_type == Imported) ? 0 : ATP_NUM_DARGS(attr_idx); 12514 12515 if (ATP_HAS_ALT_RETURN(attr_idx)) { 12516 pgm_unit = Function; 12517 type_desc = get_basic_type(CG_INTEGER_DEFAULT_TYPE, 12518 type_alignment_tbl[CG_INTEGER_DEFAULT_TYPE], 12519 NULL_IDX); 12520 } 12521 else { 12522 type_desc = pdg_type_void; 12523 } 12524 break; 12525 12526 12527 case Function: 12528 num_dargs = (call_type == Imported) ? 0 : ATP_NUM_DARGS(attr_idx); 12529 12530 # if 0 12531 if (ATP_EXTRA_DARG(attr_idx)) { 12532 pgm_unit = Subroutine; 12533 type_desc = pdg_type_void; 12534 } 12535 else 12536 # endif 12537 /* 12538 Need to send the attr_idx to 12539 get_type_desc, because we need 12540 to determine if these bounds are 12541 template bounds or real bounds. 12542 */ 12543 type_desc = get_type_desc(attr_idx); 12544 12545 if (call_type == Definition || 12546 call_type == In_Interface || 12547 (call_type == Parent && 12548 SB_HOSTED_STACK(ATD_STOR_BLK_IDX(ATP_RSLT_IDX(attr_idx))))) { 12549 12550 /* 12551 Send the function result if this is a definition or if the 12552 result has been host associated. The result gets host 12553 associated if a reference is made to the function or the 12554 result and they have the same name. Since at the symbol 12555 table level we don't know if the function is being called 12556 or if the result is being host associated, we assume that 12557 both things are happening. 12558 */ 12559 12560 if (!ATP_EXTRA_DARG(attr_idx)) 12561 send_attr_ntry(ATP_RSLT_IDX(attr_idx)); 12562 12563 } 12564 break; 12565 } 12566 12567 if (num_dargs != 0) { 12568 PDG_DBG_PRINT_START 12569 PDG_DBG_PRINT_C("fei_next_name"); 12570 PDG_DBG_PRINT_D("(1) logical", TRUE); 12571 PDG_DBG_PRINT_END 12572 12573 # ifdef _ENABLE_FEI 12574 darg_pdg_sn_fw_idx = fei_next_name(TRUE); 12575 # endif 12576 } 12577 12578 PDG_DBG_PRINT_START 12579 PDG_DBG_PRINT_C("fei_proc"); 12580 PDG_DBG_PRINT_S("(1) name_ptr", name_ptr); 12581 PDG_DBG_PRINT_D("(2) AT_DEF_LINE", AT_DEF_LINE(attr_idx)); 12582 PDG_DBG_PRINT_S("(3) pgm_unit", p_atp_pgm_unit[pgm_unit]); 12583 PDG_DBG_PRINT_S("(4) proc", p_proc[proc]); 12584 PDG_DBG_PRINT_D("(5) num_dargs", num_dargs); 12585 PDG_DBG_PRINT_D("(6) parent_idx", parent_idx); 12586 PDG_DBG_PRINT_D("(7) pdg darg list", darg_pdg_sn_fw_idx); 12587 PDG_DBG_PRINT_D("(8) alt link idx", pdg_alt_entry_idx); 12588 PDG_DBG_PRINT_T("(9) type", type_desc); 12589 PDG_DBG_PRINT_LD("(10) PDG_AT_IDX", PDG_AT_IDX(attr_idx)); 12590 PDG_DBG_PRINT_LLO("(11) flags", flag3); 12591 PDG_DBG_PRINT_END 12592 # ifdef _ENABLE_FEI 12593 PDG_AT_IDX(attr_idx) = fei_proc(name_ptr, 12594 AT_DEF_LINE(attr_idx), 12595 pgm_unit, 12596 proc, 12597 num_dargs, 12598 parent_idx, 12599 darg_pdg_sn_fw_idx, 12600 pdg_alt_entry_idx, 12601 type_desc, 12602 PDG_AT_IDX(attr_idx), 12603 flag3, 12604 in_interface, 12605 /* since no flag bit for coarray concurrent, we need 12606 to add this one more argument---FMZ 12607 */ 12608 ATP_COARRAY_CONCURRENT(attr_idx)); 12609 # endif 12610 12611 PDG_DBG_PRINT_START 12612 PDG_DBG_PRINT_LD("(r) PDG_AT_IDX", PDG_AT_IDX(attr_idx)); 12613 PDG_DBG_PRINT_END 12614 12615 12616 12617 if (cmd_line_flags.debug_lvl <= Debug_Lvl_2) { 12618 if (ATP_PROC(attr_idx) == Intrin_Proc && FALSE) { 12619 if (ATP_INTERFACE_IDX(attr_idx) != NULL_IDX) { 12620 PDG_DBG_PRINT_START 12621 PDG_DBG_PRINT_C("fei_smt_actual_to_generic"); 12622 PDG_DBG_PRINT_LD("PDG_AT_IDX", PDG_AT_IDX(attr_idx)); 12623 PDG_DBG_PRINT_END 12624 12625 # ifdef _ENABLE_FEI 12626 fei_smt_actual_to_generic(PDG_AT_IDX(attr_idx), 12627 AT_OBJ_NAME_PTR(ATP_INTERFACE_IDX(attr_idx))); 12628 # endif 12629 } 12630 } 12631 12632 if (ATP_EXT_NAME_IDX(attr_idx) != AT_NAME_IDX(attr_idx)) { 12633 /* These may be the same even though indexes are different */ 12634 12635 PDG_DBG_PRINT_START 12636 PDG_DBG_PRINT_C("fei_smt_original_to_qualified"); 12637 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", PDG_AT_IDX(attr_idx)); 12638 PDG_DBG_PRINT_S("(2) AT_OBJ_NAME", AT_OBJ_NAME_PTR(attr_idx)); 12639 PDG_DBG_PRINT_END 12640 12641 # ifdef _ENABLE_FEI 12642 fei_smt_original_to_qualified(PDG_AT_IDX(attr_idx), 12643 AT_OBJ_NAME_PTR(attr_idx)); 12644 # endif 12645 } 12646 } 12647 12648 if (num_dargs != 0) { 12649 send_darg_list(attr_idx, darg_pdg_sn_fw_idx); 12650 } 12651 12652 if (alt_entry_idx != NULL_IDX && !ATP_ALT_ENTRY(attr_idx)) { 12653 12654 /* This is a main entry for a definition or a parent. */ 12655 /* Send the alternate entries. */ 12656 12657 prev_idx = NULL_IDX; 12658 main_entry_idx = attr_idx; 12659 12660 while (alt_entry_idx != NULL_IDX) { 12661 attr_idx = AL_ATTR_IDX(alt_entry_idx); 12662 12663 /* Send entry name, result name, and dummy args. Need to */ 12664 /* set ATP_SCP_ALIVE, so if there are any bounds tmps, */ 12665 /* they get the correct storage block. If not, they will */ 12666 /* look like they are host associated. */ 12667 12668 ATP_SCP_ALIVE(attr_idx) = TRUE; 12669 12670 send_procedure(attr_idx, 12671 PDG_AT_IDX(main_entry_idx), 12672 call_type); 12673 12674 ATP_SCP_ALIVE(attr_idx) = FALSE; 12675 12676 name_ptr = &name_pool[ATP_EXT_NAME_IDX(attr_idx)].name_char; 12677 12678 /* prev_idx is a pdgcs index to the name being entered */ 12679 /* in the pdgcs secondary name table. */ 12680 12681 PDG_DBG_PRINT_START 12682 PDG_DBG_PRINT_C("fei_name"); 12683 PDG_DBG_PRINT_S("(1) name_ptr", name_ptr); 12684 PDG_DBG_PRINT_S("(2) table", "PDGCS_Function"); 12685 PDG_DBG_PRINT_LD("(3) PDG_AT_IDX", PDG_AT_IDX(attr_idx)); 12686 PDG_DBG_PRINT_D("(4) prev_idx", prev_idx); 12687 PDG_DBG_PRINT_D("(5) pdg_alt_entry_idx", pdg_alt_entry_idx); 12688 PDG_DBG_PRINT_END 12689 12690 # ifdef _ENABLE_FEI 12691 prev_idx = fei_name(name_ptr, 12692 Sym_Function, 12693 PDG_AT_IDX(attr_idx), 12694 prev_idx, 12695 pdg_alt_entry_idx); 12696 # endif 12697 alt_entry_idx = AL_NEXT_IDX(alt_entry_idx); 12698 12699 if (alt_entry_idx != NULL_IDX) { 12700 PDG_DBG_PRINT_START 12701 PDG_DBG_PRINT_C("fei_next_name"); 12702 PDG_DBG_PRINT_D("(1) logical", TRUE); 12703 PDG_DBG_PRINT_END 12704 12705 # ifdef _ENABLE_FEI 12706 pdg_alt_entry_idx = fei_next_name(TRUE); 12707 # endif 12708 } 12709 } 12710 } 12711 12712 EXIT: 12713 12714 TRACE (Func_Exit, "send_procedure", NULL); 12715 12716 return; 12717 12718 } /* send_procedure */ 12719 12720 12721 12722 /******************************************************************************\ 12723 |* *| 12724 |* Description: *| 12725 |* *| 12726 |* Input parameters: *| 12727 |* NONE *| 12728 |* *| 12729 |* Output parameters: *| 12730 |* NONE *| 12731 |* *| 12732 |* Returns: *| 12733 |* NOTHING *| 12734 |* *| 12735 \******************************************************************************/ 12736 static TYPE send_derived_type(int type_idx, INT32 nested_attr) 12737 12738 { 12739 int attr_idx; 12740 int cpnt_idx; 12741 int dt_attr_idx; 12742 long flag = 0; 12743 int dt_idx; 12744 int prev_idx; 12745 int sequence; 12746 int sn_idx; 12747 long64 size; 12748 TYPE pdg_type_idx; 12749 12750 12751 TRACE (Func_Entry, "send_derived_type", NULL); 12752 12753 dt_attr_idx = TYP_IDX(type_idx); 12754 12755 while (AT_ATTR_LINK(dt_attr_idx) != NULL_IDX) { 12756 dt_attr_idx = AT_ATTR_LINK(dt_attr_idx); 12757 } 12758 12759 if (PDG_AT_IDX(dt_attr_idx) != NULL_IDX) { 12760 pdg_type_idx = pdg_type_tbl[PDG_AT_TYP_IDX(dt_attr_idx)]; 12761 pdg_type_tbl[type_idx] = pdg_type_idx; 12762 goto EXIT; 12763 } 12764 12765 /* add if dt_attr_idx is imported by use statement, 12766 * check if there is type table entry in whirl, if there is 12767 * a type table entry, just get set pdg_type_idx ---FMZ 12768 */ 12769 if (AT_MODULE_IDX(dt_attr_idx)) { 12770 send_attr_ntry(AT_MODULE_IDX(dt_attr_idx)); 12771 dt_idx = fei_imported_type(AT_OBJ_NAME_PTR(dt_attr_idx), 12772 PDG_AT_IDX(AT_MODULE_IDX(dt_attr_idx))); 12773 if (dt_idx) { 12774 pdg_type_idx = fei_get_pdg_type(dt_idx,Basic, 12775 S_tructure, 12776 ATT_NUM_CPNTS(dt_attr_idx)); 12777 pdg_type_tbl[type_idx] = pdg_type_idx; 12778 PDG_AT_IDX(dt_attr_idx) = dt_idx; 12779 PDG_AT_TYP_IDX(dt_attr_idx) = type_idx; 12780 12781 dt_attr_idx = TYP_IDX(type_idx); 12782 12783 while (AT_ATTR_LINK(dt_attr_idx) != NULL_IDX) { 12784 PDG_AT_IDX(dt_attr_idx) = dt_idx; 12785 dt_attr_idx = AT_ATTR_LINK(dt_attr_idx); 12786 } 12787 /* return pdg_type_idx; */ 12788 goto COMPONT; 12789 } 12790 } 12791 # if 0 /*August 2002*/ 12792 flag = ((long) (ATT_SCP_IDX(dt_attr_idx) != curr_scp_idx) 12793 << FEI_NEXT_TYPE_IDX_HOSTED_TYPE); 12794 #endif 12795 12796 #if 0 12797 PDG_DBG_PRINT_START 12798 PDG_DBG_PRINT_C("fei_next_name"); 12799 PDG_DBG_PRINT_D("(1) logical", TRUE); 12800 PDG_DBG_PRINT_END 12801 12802 # ifdef _ENABLE_FEI 12803 cpnt_idx = fei_next_name(TRUE); 12804 # endif 12805 #endif 12806 12807 PDG_DBG_PRINT_START 12808 PDG_DBG_PRINT_C("fei_next_type_idx"); 12809 PDG_DBG_PRINT_LO("(1) flags", flag); 12810 PDG_DBG_PRINT_D("(2) alignment", pdg_align[ATT_ALIGNMENT(dt_attr_idx)]); 12811 PDG_DBG_PRINT_END 12812 12813 # ifdef _ENABLE_FEI 12814 dt_idx = fei_next_type_idx(flag, pdg_align[ATT_ALIGNMENT(dt_attr_idx)]); 12815 # endif 12816 12817 sequence = (ATT_CHAR_SEQ(dt_attr_idx)) ? Seq_Char : Seq_Mixed; 12818 12819 # if defined(GENERATE_WHIRL) 12820 if (ATT_CHAR_SEQ(dt_attr_idx)) { 12821 sequence = Seq_Char; 12822 } 12823 else if (ATT_DCL_NUMERIC_SEQ(dt_attr_idx)) { 12824 sequence = Seq_Numeric; 12825 } 12826 else if (ATT_SEQUENCE_SET(dt_attr_idx)) { 12827 sequence = Seq_Mixed; 12828 } 12829 else { 12830 sequence = Seq_None; 12831 } 12832 # endif 12833 12834 size = CN_INT_TO_C(ATT_STRUCT_BIT_LEN_IDX(dt_attr_idx)); 12835 12836 PDG_DBG_PRINT_START 12837 PDG_DBG_PRINT_C("fei_user_type"); 12838 PDG_DBG_PRINT_S("(1) AT_OBJ_NAME", AT_OBJ_NAME_PTR(dt_attr_idx)); 12839 PDG_DBG_PRINT_D("(2) ATT_NUM_CPNTS", ATT_NUM_CPNTS(dt_attr_idx)); 12840 #if 0 12841 PDG_DBG_PRINT_D("(3) cpnt_idx", cpnt_idx); 12842 #endif 12843 PDG_DBG_PRINT_LLD("(3) struct size", size); 12844 PDG_DBG_PRINT_S("(4) sequence", p_sequence[sequence]); 12845 PDG_DBG_PRINT_D("(5) dt_idx", dt_idx); 12846 PDG_DBG_PRINT_D("(6) alignment", pdg_align[ATT_ALIGNMENT(dt_attr_idx)]); 12847 PDG_DBG_PRINT_END 12848 12849 # ifdef _ENABLE_FEI 12850 #if 0 12851 if (AT_ORIG_MODULE_IDX(dt_attr_idx)!=NULL_IDX || 12852 (curr_scp_idx!=1)&& (ATT_SCP_IDX(dt_attr_idx)==1)) 12853 fei_user_type(AT_OBJ_NAME_PTR(dt_attr_idx), 12854 ATT_NUM_CPNTS(dt_attr_idx), 12855 cpnt_idx, 12856 size, 12857 sequence, 12858 dt_idx, 12859 pdg_align[ATT_ALIGNMENT(dt_attr_idx)], 12860 TRUE); 12861 else 12862 fei_user_type(AT_OBJ_NAME_PTR(dt_attr_idx), 12863 ATT_NUM_CPNTS(dt_attr_idx), 12864 cpnt_idx, 12865 size, 12866 sequence, 12867 dt_idx, 12868 pdg_align[ATT_ALIGNMENT(dt_attr_idx)], 12869 FALSE); 12870 #else 12871 12872 /* 12873 if ((AT_ORIG_MODULE_IDX(dt_attr_idx)==NULL_IDX) && 12874 (curr_scp_idx==1) && 12875 (ATT_SCP_IDX(dt_attr_idx)==1)) 12876 */ 12877 /* we may don't need this one AT_MODULE_OBJECT(dt_attr_idx)) */ 12878 if ( !nested_attr && 12879 LN_DEF_LOC(dt_attr_idx) && /*definition */ 12880 AT_MODULE_IDX(dt_attr_idx)==NULL_IDX) /*not imported */ 12881 fei_user_type(AT_OBJ_NAME_PTR(dt_attr_idx), 12882 ATT_NUM_CPNTS(dt_attr_idx), 12883 size, 12884 sequence, 12885 dt_idx, 12886 pdg_align[ATT_ALIGNMENT(dt_attr_idx)], 12887 0, /* for AT_MODULE_IDX(dt_attr_idx) */ 12888 TRUE); 12889 12890 else if (nested_attr) 12891 fei_user_type(AT_OBJ_NAME_PTR(dt_attr_idx), 12892 ATT_NUM_CPNTS(dt_attr_idx), 12893 size, 12894 sequence, 12895 dt_idx, 12896 pdg_align[ATT_ALIGNMENT(dt_attr_idx)], 12897 0, 12898 FALSE); 12899 else if (AT_MODULE_IDX(dt_attr_idx)) { 12900 send_attr_ntry(AT_MODULE_IDX(dt_attr_idx)); 12901 fei_user_type(AT_OBJ_NAME_PTR(dt_attr_idx), 12902 ATT_NUM_CPNTS(dt_attr_idx), 12903 size, 12904 sequence, 12905 dt_idx, 12906 pdg_align[ATT_ALIGNMENT(dt_attr_idx)], 12907 PDG_AT_IDX(AT_MODULE_IDX(dt_attr_idx)), 12908 TRUE); 12909 } 12910 else 12911 fei_user_type(AT_OBJ_NAME_PTR(dt_attr_idx), 12912 ATT_NUM_CPNTS(dt_attr_idx), 12913 size, 12914 sequence, 12915 dt_idx, 12916 pdg_align[ATT_ALIGNMENT(dt_attr_idx)], 12917 0, 12918 TRUE); 12919 12920 #endif 12921 # endif 12922 12923 PDG_DBG_PRINT_START 12924 PDG_DBG_PRINT_C("fei_descriptor"); 12925 PDG_DBG_PRINT_D("(1) flags",0); 12926 PDG_DBG_PRINT_S("(2) table type", p_table_type[Basic]); 12927 PDG_DBG_PRINT_D("(3) dt_idx", dt_idx); 12928 PDG_DBG_PRINT_S("(4) basic type", p_basic_type[S_tructure]); 12929 PDG_DBG_PRINT_D("(5) aux info",0); 12930 PDG_DBG_PRINT_D("(6) alignment", pdg_align[ATT_ALIGNMENT(dt_attr_idx)]); 12931 PDG_DBG_PRINT_END 12932 # ifdef _ENABLE_FEI 12933 pdg_type_idx = fei_descriptor(0, 12934 Basic, 12935 dt_idx, 12936 S_tructure, 12937 0, 12938 pdg_align[ATT_ALIGNMENT(dt_attr_idx)]); 12939 # endif 12940 PDG_DBG_PRINT_START 12941 PDG_DBG_PRINT_T("(r) type", pdg_type_idx); 12942 PDG_DBG_PRINT_END 12943 12944 pdg_type_tbl[type_idx] = pdg_type_idx; 12945 PDG_AT_IDX(dt_attr_idx) = dt_idx; 12946 PDG_AT_TYP_IDX(dt_attr_idx) = type_idx; 12947 dt_attr_idx = TYP_IDX(type_idx); 12948 12949 while (AT_ATTR_LINK(dt_attr_idx) != NULL_IDX) { 12950 PDG_AT_IDX(dt_attr_idx) = dt_idx; 12951 dt_attr_idx = AT_ATTR_LINK(dt_attr_idx); 12952 } 12953 12954 COMPONT: 12955 12956 PDG_DBG_PRINT_START 12957 PDG_DBG_PRINT_C("fei_next_name"); 12958 PDG_DBG_PRINT_D("(1) logical", TRUE); 12959 PDG_DBG_PRINT_END 12960 12961 # ifdef _ENABLE_FEI 12962 cpnt_idx = fei_next_name(TRUE); 12963 # endif 12964 12965 prev_idx = NULL_IDX; 12966 sn_idx = ATT_FIRST_CPNT_IDX(dt_attr_idx); 12967 12968 do { 12969 attr_idx = SN_ATTR_IDX(sn_idx); 12970 send_attr_ntry(attr_idx); 12971 12972 PDG_DBG_PRINT_START 12973 PDG_DBG_PRINT_C("fei_name"); 12974 PDG_DBG_PRINT_S("(1) AT_OBJ_NAME", AT_OBJ_NAME_PTR(attr_idx)); 12975 PDG_DBG_PRINT_S("(2) table", "PDGCS_Member"); 12976 PDG_DBG_PRINT_LD("(3) PDG_AT_IDX", PDG_AT_IDX(attr_idx)); 12977 PDG_DBG_PRINT_D("(4) prev_idx", prev_idx); 12978 PDG_DBG_PRINT_D("(5) cpnt_idx", cpnt_idx); 12979 PDG_DBG_PRINT_END 12980 12981 # ifdef _ENABLE_FEI 12982 prev_idx = fei_name(AT_OBJ_NAME_PTR(attr_idx), 12983 Sym_Member, 12984 PDG_AT_IDX(attr_idx), 12985 prev_idx, 12986 cpnt_idx); 12987 # endif 12988 12989 sn_idx = SN_SIBLING_LINK(sn_idx); 12990 12991 if (sn_idx != NULL_IDX) { 12992 PDG_DBG_PRINT_START 12993 PDG_DBG_PRINT_C("fei_next_name"); 12994 PDG_DBG_PRINT_D("(1) logical", TRUE); 12995 PDG_DBG_PRINT_END 12996 12997 # ifdef _ENABLE_FEI 12998 cpnt_idx = fei_next_name(TRUE); 12999 # endif 13000 } 13001 13002 } while (sn_idx != NULL_IDX); 13003 13004 EXIT: 13005 13006 TRACE (Func_Exit, "send_derived_type", NULL); 13007 13008 return(pdg_type_idx); 13009 13010 } /* send_derived_type */ 13011 13012 13013 13014 /******************************************************************************\ 13015 |* *| 13016 |* Description: *| 13017 |* *| 13018 |* Input parameters: *| 13019 |* NONE *| 13020 |* *| 13021 |* Output parameters: *| 13022 |* NONE *| 13023 |* *| 13024 |* Returns: *| 13025 |* NOTHING *| 13026 |* *| 13027 \******************************************************************************/ 13028 static void send_label(int attr_idx) 13029 13030 { 13031 int label_flag; 13032 int label_class = ATL_CLASS(attr_idx); 13033 char *fmt_ptr = NULL; 13034 13035 13036 TRACE (Func_Entry, "send_label", NULL); 13037 13038 if (!ATL_EXECUTABLE(attr_idx) && ATL_CLASS(attr_idx) <= Lbl_User) { 13039 13040 /* Do not send labels that are on non-executable statements */ 13041 13042 return; 13043 } 13044 13045 label_flag = (ATL_ALIGN(attr_idx) << FEI_LABEL_ALGNINST) | 13046 (opt_flags.loopalign << FEI_LABEL_ALGNLOOP); 13047 13048 switch (ATL_CLASS(attr_idx)) { 13049 13050 case Lbl_Construct: 13051 label_class = Lbl_User; 13052 break; 13053 13054 case Lbl_Format: 13055 fmt_ptr = (char *) &CN_CONST(ATL_FORMAT_TMP(attr_idx)); 13056 break; 13057 13058 } /* End switch */ 13059 13060 PDG_DBG_PRINT_START 13061 PDG_DBG_PRINT_C("fei_label"); 13062 PDG_DBG_PRINT_S("(1) AT_OBJ_NAME", AT_OBJ_NAME_PTR(attr_idx)); 13063 PDG_DBG_PRINT_O("(2) flags", label_flag); 13064 PDG_DBG_PRINT_S("(3) label class", p_label[label_class]); 13065 13066 /* if fmt_ptr is NULL, Irix's and Linux's fprintf will just print (null), but 13067 * solaris will dump core! Change them all for compatibility. 13068 */ 13069 PDG_DBG_PRINT_S("(4) fmt_ptr", (fmt_ptr == NULL) ? "null" : fmt_ptr); 13070 PDG_DBG_PRINT_S("(5) ATL_DEBUG_CLASS", 13071 p_dbg_label[ATL_DEBUG_CLASS(attr_idx)]); 13072 PDG_DBG_PRINT_END 13073 13074 # ifdef _ENABLE_FEI 13075 PDG_AT_IDX(attr_idx) = fei_label(AT_OBJ_NAME_PTR(attr_idx), 13076 label_flag, 13077 label_class, 13078 fmt_ptr, 13079 ATL_DEBUG_CLASS(attr_idx)); 13080 # endif 13081 13082 TRACE (Func_Exit, "send_label", NULL); 13083 13084 return; 13085 } /* send_label */ 13086 13087 13088 13089 /******************************************************************************\ 13090 |* *| 13091 |* Description: *| 13092 |* *| 13093 |* Input parameters: *| 13094 |* NONE *| 13095 |* *| 13096 |* Output parameters: *| 13097 |* NONE *| 13098 |* *| 13099 |* Returns: *| 13100 |* NOTHING *| 13101 |* *| 13102 \******************************************************************************/ 13103 static void send_label_def(int ir_idx) 13104 { 13105 int attr_idx; 13106 int blockable_idx; 13107 int cache_bypass_count; 13108 int il_idx; 13109 int interchange_idx; 13110 int interchange_level_idx; 13111 boolean keepme; 13112 long64 label_flag = (long64) 0; 13113 int mark_name_idx; 13114 int safe_distance_idx; 13115 int safevl_idx; 13116 int suppress_cnt = 0; 13117 int task_lvl; 13118 int unroll_idx; 13119 13120 13121 TRACE (Func_Entry, "send_label_def", NULL); 13122 13123 if (IR_OPR(ir_idx) == Label_Opr) { 13124 attr_idx = IR_IDX_L(ir_idx); 13125 keepme = (cmd_line_flags.debug_lvl <= Debug_Lvl_2) || 13126 ATL_IN_ASSIGN(attr_idx); 13127 send_attr_ntry(attr_idx); 13128 } 13129 else { 13130 keepme = FALSE; 13131 attr_idx = IR_IDX_R(ir_idx); 13132 label_flag = label_flag | ((long64) 1 << FEI_LABEL_DEF_NAMED_SUPPRESS); 13133 13134 if (IR_IDX_L(ir_idx) == NULL_IDX) { 13135 /* If nothing in the list, make sure that the CNT is zero. */ 13136 IR_LIST_CNT_L(ir_idx) = 0; 13137 } 13138 else { 13139 suppress_cnt = IR_LIST_CNT_L(ir_idx); 13140 } 13141 } 13142 13143 task_lvl = (ATL_NOTASK(attr_idx)) ? Task_Lvl_0: opt_flags.task_lvl; 13144 13145 label_flag |= 13146 ((long64) ATL_IVDEP(attr_idx) << FEI_LABEL_DEF_NAMED_IVDEP)| 13147 ((long64) ATL_FISSIONABLE(attr_idx) << FEI_LABEL_DEF_NAMED_FISSIONABLE)| 13148 ((long64) ATL_FUSABLE(attr_idx) << FEI_LABEL_DEF_NAMED_FUSABLE)| 13149 ((long64) ATL_NOFISSION(attr_idx) << FEI_LABEL_DEF_NAMED_NOFISSION)| 13150 ((long64) ATL_NOFUSION(attr_idx) << FEI_LABEL_DEF_NAMED_NOFUSION)| 13151 ((long64) ATL_FUSION(attr_idx) << FEI_LABEL_DEF_NAMED_FUSION)| 13152 ((long64) ATL_NOINTERCHANGE(attr_idx) 13153 << FEI_LABEL_DEF_NAMED_NOINTERCHANGE)| 13154 ((long64) ATL_NOBLOCKING(attr_idx) << FEI_LABEL_DEF_NAMED_NOBLOCKING)| 13155 ((long64) ATL_AGGRESSIVEINNERLOOPFISSION(attr_idx) 13156 << FEI_LABEL_DEF_NAMED_AGGRESSIVEINNERLOOPFISSION)| 13157 ((long64) ATL_NORECURRENCE(attr_idx)<< FEI_LABEL_DEF_NAMED_NOREDUCE)| 13158 ((long64) ATL_NOVECTOR(attr_idx) << FEI_LABEL_DEF_NAMED_NOVECTOR)| 13159 ((long64) ATL_STREAM(attr_idx) << FEI_LABEL_DEF_NAMED_STREAM)| 13160 ((long64) ATL_PREFERSTREAM(attr_idx) 13161 << FEI_LABEL_DEF_NAMED_PREFERSTREAM)| 13162 ((long64) ATL_PREFERSTREAM_NOCINV(attr_idx)<< 13163 FEI_LABEL_DEF_NAMED_PSTREAM_NOCINV)| 13164 ((long64) ATL_SHORTLOOP(attr_idx) << FEI_LABEL_DEF_NAMED_SHORTLOOP)| 13165 ((long64) ATL_NOVSEARCH(attr_idx) << FEI_LABEL_DEF_NAMED_NOVSEARCH)| 13166 ((long64) ATL_TOP_OF_LOOP(attr_idx) << FEI_LABEL_DEF_NAMED_LOOPCHK)| 13167 ((long64) ATL_INFORM_ONLY(attr_idx) << FEI_LABEL_DEF_NAMED_INFORM_ONLY)| 13168 ((long64) ATL_BL(attr_idx) << FEI_LABEL_DEF_NAMED_DO_BL)| 13169 ((long64) (task_lvl == Task_Lvl_3) << FEI_LABEL_DEF_NAMED_NOSYNCBARR)| 13170 ((long64) (opt_flags.vector_lvl == Vector_Lvl_3) 13171 << FEI_LABEL_DEF_NAMED_EXTTABLES)| 13172 ((long64) (opt_flags.vector_lvl == Vector_Lvl_3) 13173 << FEI_LABEL_DEF_NAMED_EXTTIME)| 13174 ((long64) (AT_REFERENCED(attr_idx) == Not_Referenced) 13175 << FEI_LABEL_DEF_NAMED_NOT_REFERENCED)| 13176 ((long64) ATL_CNCALL(attr_idx) << FEI_LABEL_DEF_NAMED_CONCCALLS)| 13177 ((long64) ATL_PERMUTATION(attr_idx) << FEI_LABEL_DEF_NAMED_PERMUTATION)| 13178 ((long64) ATL_NEXTSCALAR(attr_idx) << FEI_LABEL_DEF_NAMED_NEXTSCALAR)| 13179 ((long64) ATL_SHORTLOOP128(attr_idx) 13180 << FEI_LABEL_DEF_NAMED_SHORTLOOP128)| 13181 ((long64) ATL_PREFERVECTOR(attr_idx)<< FEI_LABEL_DEF_NAMED_SELECT_VEC)| 13182 ((long64) ATL_PREFERTASK(attr_idx) << FEI_LABEL_DEF_NAMED_SELECT_TASK)| 13183 ((long64) ATL_NOTASK(attr_idx) << FEI_LABEL_DEF_NAMED_NOTASK)| 13184 ((long64) ATL_UNROLL_DIR(attr_idx) << FEI_LABEL_DEF_NAMED_UNROLL)| 13185 ((long64) ATL_SPLIT(attr_idx) << FEI_LABEL_DEF_NAMED_STREAMSPLIT)| 13186 ((long64) ATL_PATTERN(attr_idx) << FEI_LABEL_DEF_NAMED_PATTERN)| 13187 ((long64) ATL_CONSTRUCTOR_LOOP(attr_idx) 13188 << FEI_LABEL_DEF_NAMED_CONSTRUCTOR_LOOP)| 13189 ((long64) ATL_CONCURRENT(attr_idx) << FEI_LABEL_DEF_NAMED_CONCURRENT)| 13190 ((long64) ATL_CASE_LABEL(attr_idx) << FEI_LABEL_DEF_NAMED_CASE); 13191 13192 /* List contains directives in this order */ 13193 /* safevl, Unroll, mark name, maxcpus, cache bypass */ 13194 13195 safevl_idx = NULL_IDX; 13196 unroll_idx = NULL_IDX; 13197 mark_name_idx = NULL_IDX; 13198 cache_bypass_count = 0; 13199 safe_distance_idx = NULL_IDX; 13200 blockable_idx = NULL_IDX; 13201 interchange_idx = NULL_IDX; 13202 interchange_level_idx= NULL_IDX; 13203 13204 if (ATL_DIRECTIVE_LIST(attr_idx) != NULL_IDX) { 13205 il_idx = IL_IDX(ATL_DIRECTIVE_LIST(attr_idx)) + Safevl_Dir_Idx; 13206 13207 if (IL_FLD(il_idx) == CN_Tbl_Idx) { 13208 safevl_idx = IL_IDX(il_idx); 13209 } 13210 13211 il_idx = IL_IDX(ATL_DIRECTIVE_LIST(attr_idx)) + Unroll_Dir_Idx; 13212 13213 if (IL_FLD(il_idx) == CN_Tbl_Idx) { /* UNROLL */ 13214 unroll_idx = IL_IDX(il_idx); 13215 } 13216 13217 il_idx = IL_IDX(ATL_DIRECTIVE_LIST(attr_idx)) + Mark_Dir_Idx; 13218 13219 if (IL_FLD(il_idx) == CN_Tbl_Idx) { /* MARK */ 13220 mark_name_idx = IL_IDX(il_idx); 13221 } 13222 13223 il_idx = IL_IDX(ATL_DIRECTIVE_LIST(attr_idx)) + Cache_Bypass_Dir_Idx; 13224 13225 if (IL_FLD(il_idx) == IL_Tbl_Idx) { /* Cache bypass */ 13226 cache_bypass_count = IL_LIST_CNT(il_idx); 13227 il_idx = IL_IDX(il_idx); 13228 13229 while (il_idx != NULL_IDX) { 13230 cvrt_exp_to_pdg(IL_IDX(il_idx), AT_Tbl_Idx); 13231 il_idx = IL_NEXT_LIST_IDX(il_idx); 13232 } 13233 } 13234 13235 il_idx = IL_IDX(ATL_DIRECTIVE_LIST(attr_idx)) + Concurrent_Dir_Idx; 13236 13237 if (IL_FLD(il_idx) == CN_Tbl_Idx) { 13238 safe_distance_idx = IL_IDX(il_idx); 13239 } 13240 13241 il_idx = IL_IDX(ATL_DIRECTIVE_LIST(attr_idx)) + Blockable_Dir_Idx; 13242 13243 if (IL_FLD(il_idx) == CN_Tbl_Idx) { 13244 blockable_idx = IL_IDX(il_idx); 13245 } 13246 13247 il_idx = IL_IDX(ATL_DIRECTIVE_LIST(attr_idx)) + Interchange_Dir_Idx; 13248 13249 if (IL_FLD(il_idx) == CN_Tbl_Idx) { 13250 interchange_idx = IL_IDX(il_idx); 13251 } 13252 13253 il_idx = IL_IDX(ATL_DIRECTIVE_LIST(attr_idx)) + Interchange_Level_Dir_Idx; 13254 13255 if (IL_FLD(il_idx) == CN_Tbl_Idx) { 13256 interchange_level_idx = IL_IDX(il_idx); 13257 } 13258 } 13259 13260 13261 PDG_DBG_PRINT_START 13262 PDG_DBG_PRINT_C("fei_label_def_named"); 13263 PDG_DBG_PRINT_S("AT_OBJ_NAME", AT_OBJ_NAME_PTR(attr_idx)); 13264 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", PDG_AT_IDX(attr_idx)); 13265 PDG_DBG_PRINT_LLO("(2) flags", label_flag); 13266 PDG_DBG_PRINT_D("(3) line num", IR_LINE_NUM(ir_idx)); 13267 PDG_DBG_PRINT_D("(4) suppress cnt", suppress_cnt); 13268 PDG_DBG_PRINT_D("(5) keepme", keepme); 13269 PDG_DBG_PRINT_LVD("(7) safevl", (ATL_IVDEP(attr_idx)? 13270 (long) CN_INT_TO_C(safevl_idx):0)); 13271 PDG_DBG_PRINT_LVD("(8) unroll cnt", ((ATL_UNROLL_DIR(attr_idx)) ? 13272 (long) CN_INT_TO_C(unroll_idx) : 1)); 13273 PDG_DBG_PRINT_S("(9) mark name", mark_name_idx == NULL_IDX ? " " : 13274 (char *)&CN_CONST(mark_name_idx)); 13275 PDG_DBG_PRINT_D("(10) cache bypass ct", cache_bypass_count); 13276 PDG_DBG_PRINT_LVD("(11) safe distance", (safe_distance_idx != NULL_IDX ? 13277 (long) CN_INT_TO_C(safe_distance_idx):0)); 13278 PDG_DBG_PRINT_LVD("(12) blockable grp", (blockable_idx != NULL_IDX ? 13279 (long) CN_INT_TO_C(blockable_idx):0)); 13280 PDG_DBG_PRINT_LVD("(13) interchange grp", (interchange_idx != NULL_IDX ? 13281 (long) CN_INT_TO_C(interchange_idx):0)); 13282 PDG_DBG_PRINT_LVD("(13) interchange lvl",(interchange_level_idx != NULL_IDX? 13283 (long) CN_INT_TO_C(interchange_level_idx):0)); 13284 PDG_DBG_PRINT_END 13285 13286 # ifdef _ENABLE_FEI 13287 fei_label_def_named(PDG_AT_IDX(attr_idx), 13288 label_flag, 13289 IR_LINE_NUM(ir_idx), 13290 suppress_cnt, 13291 keepme, 13292 0, 13293 (ATL_IVDEP(attr_idx) ? 13294 (long) CN_INT_TO_C(safevl_idx) : 0), 13295 (ATL_UNROLL_DIR(attr_idx)) ? 13296 (long) CN_INT_TO_C(unroll_idx) : 1, 13297 mark_name_idx == NULL_IDX ? NULL : 13298 (char *) &CN_CONST(mark_name_idx), 13299 cache_bypass_count, 13300 (safe_distance_idx != NULL_IDX) ? 13301 (long) CN_INT_TO_C(safe_distance_idx) : 0, 13302 (blockable_idx != NULL_IDX) ? 13303 (long) CN_INT_TO_C(blockable_idx) : 0, 13304 (interchange_idx != NULL_IDX) ? 13305 (long) CN_INT_TO_C(interchange_idx) : 0, 13306 (interchange_level_idx != NULL_IDX) ? 13307 (long) CN_INT_TO_C(interchange_level_idx) : 0); 13308 # endif 13309 13310 TRACE (Func_Exit, "send_label_def", NULL); 13311 13312 return; 13313 13314 } /* send_label_def */ 13315 13316 13317 13318 /******************************************************************************\ 13319 |* *| 13320 |* Description: *| 13321 |* *| 13322 |* Input parameters: *| 13323 |* NONE *| 13324 |* *| 13325 |* Output parameters: *| 13326 |* NONE *| 13327 |* *| 13328 |* Returns: *| 13329 |* NOTHING *| 13330 |* *| 13331 \******************************************************************************/ 13332 static void send_namelist_group(int ng_attr_idx,int in_model) 13333 13334 { 13335 int attr_idx; 13336 int count; 13337 int name_idx; 13338 INTPTR prev_idx; 13339 int sn_idx; 13340 13341 13342 TRACE (Func_Entry, "send_namelist_group", NULL); 13343 13344 13345 PDG_DBG_PRINT_START 13346 PDG_DBG_PRINT_C("fei_next_name"); 13347 PDG_DBG_PRINT_D("(1) logical", TRUE); 13348 PDG_DBG_PRINT_END 13349 13350 # ifdef _ENABLE_FEI 13351 name_idx = fei_next_name(TRUE); 13352 # endif 13353 13354 prev_idx = NULL_IDX; 13355 sn_idx = ATN_FIRST_NAMELIST_IDX(ng_attr_idx); 13356 count = 0; 13357 13358 do { 13359 attr_idx = SN_ATTR_IDX(sn_idx); 13360 send_attr_ntry(attr_idx); 13361 13362 PDG_DBG_PRINT_START 13363 PDG_DBG_PRINT_C("fei_name"); 13364 PDG_DBG_PRINT_S("(1) AT_OBJ_NAME", AT_OBJ_NAME_PTR(attr_idx)); 13365 PDG_DBG_PRINT_S("(2) table", "PDGCS_Namelist"); 13366 PDG_DBG_PRINT_LD("(3) PDG_AT_IDX", PDG_AT_IDX(attr_idx)); 13367 PDG_DBG_PRINT_LD("(4) prev_idx", prev_idx); 13368 PDG_DBG_PRINT_D("(5) name_idx", name_idx); 13369 PDG_DBG_PRINT_END 13370 13371 # ifdef _ENABLE_FEI 13372 prev_idx = fei_name(AT_OBJ_NAME_PTR(attr_idx), 13373 Sym_Namelist, 13374 PDG_AT_IDX(attr_idx), 13375 prev_idx, 13376 name_idx); 13377 # endif 13378 13379 count = count + 1; 13380 sn_idx = SN_SIBLING_LINK(sn_idx); 13381 13382 if (sn_idx != NULL_IDX) { 13383 PDG_DBG_PRINT_START 13384 PDG_DBG_PRINT_C("fei_next_name"); 13385 PDG_DBG_PRINT_D("(1) logical", TRUE); 13386 PDG_DBG_PRINT_END 13387 13388 # ifdef _ENABLE_FEI 13389 name_idx = fei_next_name(TRUE); 13390 # endif 13391 } 13392 } while (sn_idx != NULL_IDX); 13393 13394 PDG_DBG_PRINT_START 13395 PDG_DBG_PRINT_C("fei_namelist"); 13396 PDG_DBG_PRINT_S("(1) AT_OBJ_NAME", AT_OBJ_NAME_PTR(ng_attr_idx)); 13397 PDG_DBG_PRINT_D("(2) count", count); 13398 PDG_DBG_PRINT_LD("(3) prev_idx", prev_idx); 13399 PDG_DBG_PRINT_END 13400 13401 # ifdef _ENABLE_FEI 13402 # if defined(GENERATE_WHIRL) 13403 PDG_AT_IDX(ng_attr_idx) = fei_namelist(AT_OBJ_NAME_PTR(ng_attr_idx), 13404 count, 13405 prev_idx, 13406 in_model); 13407 # endif 13408 # endif 13409 13410 TRACE (Func_Exit, "send_namelist_group", NULL); 13411 13412 return; 13413 13414 } /* send_namelist_group */ 13415 13416 13417 13418 /*****************************************************************************\ 13419 * Description: 13420 * Send interface block's name plus a list of program unit(including dummy 13421 * argumants 13422 * Input parameters : 13423 * attr_idx of the interface block 13424 * Ouput parameters : 13425 * NONE 13426 * Return: 13427 * Nothing 13428 * 13429 ******************************************************************************/ 13430 static void send_interface_list(int ng_attr_idx) 13431 13432 { 13433 int sn_idx; 13434 int kind_interface = 0; 13435 boolean is_imported; 13436 int i; 13437 int kids_count; 13438 13439 13440 TRACE (Func_Entry, "send_interface_list", NULL); 13441 13442 fei_set_in_interface_processing(); 13443 13444 /* This is an interface block that has the same name as one of */ 13445 /* its program units. The program unit has to go through the */ 13446 /* interface. */ 13447 13448 if (ATI_PROC_IDX(ng_attr_idx) != NULL_IDX && 13449 PDG_AT_IDX(ATI_PROC_IDX(ng_attr_idx)) == NULL_IDX ) { 13450 send_procedure(ATI_PROC_IDX(ng_attr_idx), 13451 NULL_IDX, 13452 In_Interface); 13453 13454 } 13455 13456 13457 /* Need to send generic - explicit names if generating debug tbls */ 13458 13459 kids_count = ATI_NUM_SPECIFICS(ng_attr_idx); 13460 sn_idx = ATI_FIRST_SPECIFIC_IDX(ng_attr_idx); 13461 for (i = 0; i < ATI_NUM_SPECIFICS(ng_attr_idx); i++) { 13462 if (AT_MODULE_IDX(SN_ATTR_IDX(sn_idx))==0 && 13463 ATP_PROC(SN_ATTR_IDX(sn_idx)) != Intrin_Proc ){ 13464 send_procedure(SN_ATTR_IDX(sn_idx), 13465 NULL_IDX, 13466 In_Interface); 13467 fei_gen_func_entry(PDG_AT_IDX(SN_ATTR_IDX(sn_idx))); 13468 } 13469 else kids_count--; 13470 13471 sn_idx = SN_SIBLING_LINK(sn_idx); 13472 } 13473 13474 if (ATI_INTERFACE_CLASS(ng_attr_idx) == Defined_Assign_Interface) 13475 kind_interface = 1; 13476 else 13477 if (ATI_INTERFACE_CLASS(ng_attr_idx)>Defined_Interface) 13478 { 13479 if (ATI_DEFINED_OPR(ng_attr_idx)!=Null_Opr) 13480 kind_interface = 2; 13481 else 13482 kind_interface = 3; 13483 } 13484 13485 /* is_imported = AT_MODULE_IDX(ng_attr_idx); */ 13486 if (AT_MODULE_IDX(ng_attr_idx) ) 13487 is_imported = 1; 13488 else 13489 is_imported =0; 13490 13491 # ifdef _ENABLE_FEI 13492 # if defined(GENERATE_WHIRL) 13493 PDG_AT_IDX(ng_attr_idx) = fei_interface(AT_OBJ_NAME_PTR(ng_attr_idx), 13494 kids_count, 13495 kind_interface, 13496 is_imported); 13497 13498 # endif 13499 # endif 13500 13501 13502 TRACE (Func_Exit, "send_interface_list", NULL); 13503 13504 fei_reset_in_interface_processing(); 13505 13506 return; 13507 13508 } /* send_interface_list */ 13509 13510 13511 13512 13513 13514 13515 13516 /******************************************************************************\ 13517 |* *| 13518 |* Description: *| 13519 |* *| 13520 |* Input parameters: *| 13521 |* NONE *| 13522 |* *| 13523 |* Output parameters: *| 13524 |* NONE *| 13525 |* *| 13526 |* Returns: *| 13527 |* NOTHING *| 13528 |* *| 13529 \******************************************************************************/ 13530 static void allocate_pdg_link_tbls(void) 13531 13532 { 13533 register int i; 13534 int new_size; 13535 long *pdg_tbl_base; 13536 13537 13538 TRACE (Func_Entry, "allocate_pdg_link_tbls", NULL); 13539 13540 /* Allocate and clear out the pdg link table. Find the largest table */ 13541 /* and allocate the pdg link table to this size. */ 13542 13543 new_size = (attr_tbl_idx > const_tbl_idx) ? attr_tbl_idx : const_tbl_idx; 13544 new_size = (new_size > stor_blk_tbl_idx) ? new_size : stor_blk_tbl_idx; 13545 new_size = (new_size > type_tbl_idx) ? new_size : type_tbl_idx; 13546 13547 new_size++; /* Do not use entry 0, so increase size by 1 */ 13548 13549 CHECK_TBL_ALLOC_SIZE(pdg_link_tbl, new_size); 13550 13551 pdg_link_tbl_idx = pdg_link_tbl_size - 1; 13552 pdg_tbl_base = (long *) pdg_link_tbl; 13553 13554 for (i = 0; i < (pdg_link_tbl_size * NUM_PDG_WDS); i++) { 13555 pdg_tbl_base[i] = 0; 13556 } 13557 13558 new_size = type_tbl_idx + 1; 13559 13560 CHECK_TBL_ALLOC_SIZE(pdg_type_tbl, new_size); 13561 pdg_type_tbl_idx = pdg_type_tbl_size - 1; 13562 pdg_tbl_base = (long *) pdg_type_tbl; 13563 13564 for (i = 0; i < (pdg_type_tbl_size * NUM_PDG_TYP_WDS); i++) { 13565 pdg_tbl_base[i] = 0; 13566 } 13567 13568 13569 TRACE (Func_Exit, "allocate_pdg_link_tbls", NULL); 13570 13571 return; 13572 13573 } /* allocate_pdg_link_tbls */ 13574 13575 /******************************************************************************\ 13576 |* *| 13577 |* Description: *| 13578 |* *| 13579 |* Input parameters: *| 13580 |* NONE *| 13581 |* *| 13582 |* Output parameters: *| 13583 |* NONE *| 13584 |* *| 13585 |* Returns: *| 13586 |* NOTHING *| 13587 |* *| 13588 \******************************************************************************/ 13589 13590 static void clean_pdg_link_tbls_for_nested_pu(void) 13591 { 13592 register int attr_idx; 13593 13594 TRACE (Func_Entry, "clean_pdg_link_tbls_for_nested_pu", NULL); 13595 13596 for ( attr_idx=1; attr_idx < pdg_link_tbl_size; attr_idx++ ) 13597 { 13598 if (AT_OBJ_CLASS(attr_idx) == Derived_Type || 13599 (AT_OBJ_CLASS(attr_idx) == Data_Obj && 13600 ATD_CLASS(attr_idx) == Struct_Component)) { 13601 PDG_CN_IDX(attr_idx) = 0; 13602 PDG_SB_IDX(attr_idx) = 0 ; 13603 } 13604 else { 13605 /* clean the pdg link table entries */ 13606 PDG_AT_IDX(attr_idx) = 0; 13607 PDG_AT_TYP_IDX(attr_idx) = 0; 13608 PDG_CN_IDX(attr_idx) = 0; 13609 PDG_SB_IDX(attr_idx) = 0 ; 13610 } 13611 } 13612 13613 TRACE (Func_Exit, "clean_pdg_link_tbls_for_nested_pu", NULL); 13614 return; 13615 } 13616 13617 /******************************************************************************\ 13618 |* *| 13619 |* Description: *| 13620 |* *| 13621 |* Input parameters: *| 13622 |* NONE *| 13623 |* *| 13624 |* Output parameters: *| 13625 |* NONE *| 13626 |* *| 13627 |* Returns: *| 13628 |* NOTHING *| 13629 |* *| 13630 \******************************************************************************/ 13631 static void send_attr_ntry(int attr_idx) 13632 13633 { 13634 char str[3000]; 13635 int len; 13636 # if defined(_TARGET32) 13637 int align = HWord_Align; 13638 # else 13639 int align = Word_Align; 13640 # endif 13641 TYPE basic; 13642 long64 bit_len = 0; 13643 int class = 0; 13644 int const_idx; 13645 13646 /* JEFFL - This is being used as a target constant for make_io */ 13647 13648 long_type constant[2]; 13649 int constant_class; 13650 long64 flag; 13651 int i; 13652 int il_idx; 13653 int al_idx; 13654 int defining_attr = NULL_IDX; 13655 int dv_alias = NULL_IDX; 13656 int intent = Intent_Unseen; 13657 long io_type_code_pdg_idx = NULL_IDX; 13658 long64 offset = 0; 13659 int ptr_align = 0; 13660 long ptr_idx = NULL_IDX; 13661 int sb_idx = NULL_IDX; 13662 int child_idx = NULL_IDX; 13663 size_offset_type size; 13664 int sn_idx; 13665 int save_pdg_cn_const; 13666 boolean save_sym_constant_expr; 13667 boolean sym_offset = FALSE; 13668 boolean nested_attr = FALSE; 13669 TYPE type_idx; 13670 static boolean procs_parameter =FALSE; 13671 13672 # ifdef _TARGET_OS_MAX 13673 long_type ii; 13674 # endif 13675 13676 13677 TRACE (Func_Entry, "send_attr_ntry", NULL); 13678 13679 flag = (long64) 0; 13680 13681 if (PDG_AT_IDX(attr_idx) != NULL_IDX ) { 13682 if (AT_OBJ_CLASS(attr_idx) == Derived_Type && 13683 ATT_SCP_IDX(attr_idx)==curr_scp_idx ) { 13684 if (AT_MODULE_IDX(attr_idx)) { 13685 send_attr_ntry(AT_MODULE_IDX(attr_idx)); 13686 fei_gen_st_for_type(AT_OBJ_NAME_PTR(attr_idx), 13687 pdg_type_tbl[PDG_AT_TYP_IDX(attr_idx)], 13688 PDG_AT_IDX(AT_MODULE_IDX(attr_idx))); 13689 } 13690 else 13691 fei_gen_st_for_type(AT_OBJ_NAME_PTR(attr_idx), 13692 pdg_type_tbl[PDG_AT_TYP_IDX(attr_idx)],0); 13693 } 13694 13695 goto EXIT; /* already sent */ 13696 } 13697 13698 if (!AT_IGNORE_ATTR_LINK(attr_idx)) { 13699 13700 if (AT_ATTR_LINK(attr_idx) != NULL_IDX) { 13701 child_idx = attr_idx; 13702 nested_attr = TRUE; 13703 13704 while (AT_ATTR_LINK(attr_idx) != NULL_IDX) { 13705 attr_idx = AT_ATTR_LINK(attr_idx); 13706 } 13707 13708 if (PDG_AT_IDX(attr_idx) != NULL_IDX) { 13709 PDG_AT_IDX(child_idx) = PDG_AT_IDX(attr_idx); 13710 goto EXIT; /* already sent */ 13711 } 13712 } 13713 } 13714 13715 13716 switch (AT_OBJ_CLASS(attr_idx)) { 13717 case Data_Obj: 13718 13719 switch (ATD_CLASS(attr_idx)) { 13720 13721 case Variable: 13722 # ifdef _TARGET_OS_MAX 13723 /* We do not need to call fei_object for this item. */ 13724 if (ATD_SYMBOLIC_CONSTANT(attr_idx)) { 13725 goto EXIT; 13726 } 13727 # endif 13728 13729 if (ATD_FLD(attr_idx) != NO_Tbl_Idx) { 13730 13731 /* Send associated data initialized temps. */ 13732 13733 if (ATD_FLD(attr_idx) == AT_Tbl_Idx) { 13734 send_attr_ntry(ATD_VARIABLE_TMP_IDX(attr_idx)); 13735 } 13736 else if (ATD_FLD(attr_idx) == IL_Tbl_Idx) { 13737 il_idx = ATD_VARIABLE_TMP_IDX(attr_idx); 13738 13739 while (il_idx != NULL_IDX) { 13740 send_attr_ntry(IL_IDX(il_idx)); 13741 il_idx = IL_NEXT_LIST_IDX(il_idx); 13742 } 13743 } 13744 } 13745 if (procs_parameter){ 13746 flag = flag | ((long64) 1 << FEI_OBJECT_PARAMETER) ; 13747 procs_parameter = FALSE; 13748 } 13749 13750 /* Intentional fall through */ 13751 13752 case Atd_Unknown: 13753 class = User_Variable; 13754 13755 if (ATD_AUTOMATIC(attr_idx)) { 13756 send_attr_ntry(ATD_AUTO_BASE_IDX(attr_idx)); 13757 offset = (long64) PDG_AT_IDX(ATD_AUTO_BASE_IDX(attr_idx)); 13758 } 13759 break; 13760 13761 case CRI__Pointee: 13762 class = CRI_Pointee; 13763 send_attr_ntry(ATD_PTR_IDX(attr_idx)); 13764 ptr_idx = PDG_AT_IDX(ATD_PTR_IDX(attr_idx)); 13765 break; 13766 13767 case Function_Result: 13768 if (SB_BLK_TYPE(ATD_STOR_BLK_IDX(attr_idx)) == Formal ) { 13769 13770 /* The Function_Result has become the first dummy argument */ 13771 13772 intent = Intent_Out; 13773 class = Dummy_Arg; 13774 flag = flag | ((long64) 1 << FEI_OBJECT_RESULT_TEMP); 13775 } 13776 else { 13777 class = Function_Rslt; 13778 flag = flag | ((long64) AT_HOST_ASSOCIATED(attr_idx) << 13779 FEI_OBJECT_RESULT_TEMP); 13780 } 13781 break; 13782 13783 case Dummy_Argument: 13784 13785 # ifdef _NAME_SUBSTITUTION_INLINING 13786 if (!AT_IS_DARG(attr_idx)) { 13787 goto EXIT; 13788 } 13789 # endif 13790 13791 class = Dummy_Arg; 13792 flag = flag | ((long64) ATD_SF_DARG(attr_idx) << FEI_OBJECT_SF_DARG); 13793 flag = flag | ((long64) AT_OPTIONAL(attr_idx) << FEI_OBJECT_OPTIONAL); 13794 13795 intent = ATD_INTENT(attr_idx); 13796 if (intent == Intent_Unseen) { 13797 intent = Intent_Inout; 13798 } 13799 break; 13800 13801 case Compiler_Tmp: 13802 if (ATD_SYMBOLIC_CONSTANT(attr_idx)) { 13803 13804 /* This tmp is a placeholder for the symbolic constant. */ 13805 13806 save_sym_constant_expr = symbolic_constant_expr; 13807 symbolic_constant_expr = TRUE; 13808 13809 if (ATD_FLD(attr_idx) == IR_Tbl_Idx && 13810 (IR_OPR(ATD_TMP_IDX(attr_idx)) == Asg_Opr )) { 13811 cvrt_exp_to_pdg(IR_IDX_R(ATD_TMP_IDX(attr_idx)), 13812 IR_FLD_R(ATD_TMP_IDX(attr_idx))); 13813 } 13814 else { 13815 cvrt_exp_to_pdg(ATD_TMP_IDX(attr_idx), 13816 (fld_type) ATD_FLD(attr_idx)); 13817 } 13818 13819 PDG_DBG_PRINT_START 13820 PDG_DBG_PRINT_C("npex_end"); 13821 PDG_DBG_PRINT_END 13822 13823 # ifdef _ENABLE_FEI 13824 PDG_AT_IDX(attr_idx) = npex_end(); 13825 # endif 13826 PDG_DBG_PRINT_START 13827 PDG_DBG_PRINT_LD("(r) PDG_AT_IDX", PDG_AT_IDX(attr_idx)); 13828 PDG_DBG_PRINT_END 13829 13830 symbolic_constant_expr = save_sym_constant_expr; 13831 13832 goto EXIT; 13833 } 13834 13835 class = Compiler_Temp; 13836 13837 if (ATD_AUTOMATIC(attr_idx)) { 13838 send_attr_ntry(ATD_AUTO_BASE_IDX(attr_idx)); 13839 offset = (long64) PDG_AT_IDX(ATD_AUTO_BASE_IDX(attr_idx)); 13840 } 13841 # if 0 /*August*/ 13842 # if ! (defined(_TARGET_OS_IRIX) || defined(_TARGET_OS_LINUX)) && ! defined(_TARGET_OS_MAX) 13843 if (ATD_DEFINING_ATTR_IDX(attr_idx) != NULL_IDX) { 13844 send_attr_ntry(ATD_DEFINING_ATTR_IDX(attr_idx)); 13845 defining_attr = PDG_AT_IDX(ATD_DEFINING_ATTR_IDX(attr_idx)); 13846 } 13847 # endif 13848 # endif 13849 13850 break; 13851 13852 case Constant: 13853 if (ATD_FLD(attr_idx) == AT_Tbl_Idx ) { 13854 /* Aggregate Constant */ 13855 /* change the tmp to a variable */ 13856 13857 insert_init_stmt_for_tmp(ATD_CONST_IDX(attr_idx)); 13858 13859 ATD_CLASS(ATD_CONST_IDX(attr_idx)) = Variable; 13860 13861 AT_MODULE_OBJECT(ATD_CONST_IDX(attr_idx)) = AT_MODULE_OBJECT(attr_idx); 13862 procs_parameter = TRUE; 13863 send_attr_ntry(ATD_CONST_IDX(attr_idx)); 13864 procs_parameter = FALSE; 13865 13866 ATD_CLASS(ATD_CONST_IDX(attr_idx)) = Compiler_Tmp; 13867 goto EXIT; 13868 13869 } 13870 13871 #if 0 13872 if (cmd_line_flags.debug_lvl > Debug_Lvl_2 && 13873 !cmd_line_flags.dwarf_debug) { 13874 goto EXIT; 13875 } 13876 #endif 13877 13878 if (AT_COMPILER_GEND(attr_idx)) { 13879 goto EXIT; 13880 } 13881 13882 /* Pass parameter information for DEBUG symbol tables. They do not */ 13883 /* need compiler generated constants. */ 13884 13885 const_idx = ATD_CONST_IDX(attr_idx); 13886 type_idx = get_basic_type(ATD_TYPE_IDX(attr_idx), 13887 ATD_ALIGNMENT(attr_idx), 13888 attr_idx); 13889 constant_class = 1; 13890 13891 if (TYP_TYPE(ATD_TYPE_IDX(attr_idx)) == Character) { 13892 constant_class = 3; 13893 bit_len = CN_INT_TO_C(TYP_IDX(CN_TYPE_IDX(const_idx))); 13894 bit_len = bit_len * CHAR_BIT; 13895 } 13896 else if (TYP_LINEAR(ATD_TYPE_IDX(attr_idx)) == Long_Typeless) { 13897 constant_class = Pattern_Const; 13898 bit_len = TYP_BIT_LEN(CN_TYPE_IDX(const_idx)); 13899 } 13900 13901 if (PDG_CN_IDX(const_idx) == 0) { 13902 if (bit_len == 0 && TYP_TYPE(ATD_TYPE_IDX(attr_idx)) != Character) { 13903 PDG_DBG_PRINT_START 13904 PDG_DBG_PRINT_C("fei_arith_con"); 13905 PDG_DBG_PRINT_T("(1) type", type_idx); 13906 #if defined(_HOST32) && defined(_TARGET64) 13907 PDG_DBG_PRINT_VD("(2) const", CN_CONST(const_idx)); 13908 #else 13909 PDG_DBG_PRINT_LVD("(2) const", CN_CONST(const_idx)); 13910 #endif 13911 PDG_DBG_PRINT_END 13912 13913 # ifdef _ENABLE_FEI 13914 # ifdef _TARGET_OS_MAX 13915 if (TYP_LINEAR(CN_TYPE_IDX(const_idx)) == Complex_4) { 13916 /* pack the complex constant up into one word */ 13917 ii = CN_CONST(const_idx) << 32; 13918 ii |= CP_CONSTANT(CN_POOL_IDX(const_idx) + 1); 13919 13920 PDG_CN_IDX(const_idx) = fei_arith_con(type_idx, (long *)&ii); 13921 } 13922 else { 13923 PDG_CN_IDX(const_idx) = fei_arith_con(type_idx, 13924 (long *)&CN_CONST(const_idx)); 13925 } 13926 # else 13927 PDG_CN_IDX(const_idx) = fei_arith_con(type_idx, 13928 (long *)&CN_CONST(const_idx)); 13929 # endif 13930 # endif 13931 PDG_DBG_PRINT_START 13932 PDG_DBG_PRINT_LD("(r) PDG_CN_IDX", PDG_CN_IDX(const_idx)); 13933 PDG_DBG_PRINT_END 13934 } 13935 else { 13936 PDG_DBG_PRINT_START 13937 PDG_DBG_PRINT_C("fei_pattern_con"); 13938 PDG_DBG_PRINT_T("(1) type", type_idx); 13939 #if defined(_HOST32) && defined(_TARGET64) 13940 PDG_DBG_PRINT_VD("(2) const", CN_CONST(const_idx)); 13941 #else 13942 PDG_DBG_PRINT_LVD("(2) const", CN_CONST(const_idx)); 13943 #endif 13944 PDG_DBG_PRINT_LLD("(3) bit length", bit_len); 13945 PDG_DBG_PRINT_END 13946 13947 # ifdef _ENABLE_FEI 13948 PDG_CN_IDX(const_idx) = fei_pattern_con(type_idx, 13949 (char *)&CN_CONST(const_idx), 13950 bit_len); 13951 # endif 13952 PDG_DBG_PRINT_START 13953 PDG_DBG_PRINT_LD("(r) PDG_CN_IDX", PDG_CN_IDX(const_idx)); 13954 PDG_DBG_PRINT_END 13955 } 13956 save_pdg_cn_const = 0; 13957 } 13958 else { 13959 save_pdg_cn_const = PDG_CN_IDX(const_idx); 13960 } 13961 13962 13963 PDG_DBG_PRINT_START 13964 PDG_DBG_PRINT_C("fei_smt_parameter"); 13965 PDG_DBG_PRINT_S("(1) AT_OBJ_NAME", AT_OBJ_NAME_PTR(attr_idx)); 13966 PDG_DBG_PRINT_T("(2) type", type_idx); 13967 PDG_DBG_PRINT_LD("(3) PDG_CN_IDX", PDG_CN_IDX(const_idx)); 13968 PDG_DBG_PRINT_D("(4) constant_class", constant_class); 13969 PDG_DBG_PRINT_D("(5) line num", AT_DEF_LINE(attr_idx)); 13970 PDG_DBG_PRINT_END 13971 13972 # ifdef _ENABLE_FEI 13973 /* If it the parameter is not get from use-association 13974 and also is not get from the host-association,then 13975 generate a local symbol table entry to record the definition 13976 */ 13977 if ( !nested_attr && 13978 (!AT_MODULE_OBJECT(attr_idx) || 13979 (AT_MODULE_OBJECT(attr_idx) && 13980 AT_ORIG_MODULE_IDX(attr_idx)==NULL_IDX))) 13981 fei_smt_parameter(AT_OBJ_NAME_PTR(attr_idx), 13982 type_idx, 13983 PDG_CN_IDX(const_idx), 13984 constant_class, 13985 AT_DEF_LINE(attr_idx)); 13986 # endif 13987 13988 #if 0 13989 if (cmd_line_flags.dwarf_debug) { 13990 PDG_CN_IDX(const_idx) = save_pdg_cn_const; 13991 } 13992 #endif 13993 13994 PDG_CN_IDX(const_idx) = save_pdg_cn_const; 13995 13996 goto EXIT; 13997 13998 case Struct_Component: 13999 class = Component; 14000 offset = CN_INT_TO_C(ATD_CPNT_OFFSET_IDX(attr_idx)); 14001 break; 14002 14003 } /* End switch */ 14004 14005 if (ATD_OFFSET_ASSIGNED(attr_idx) && 14006 ATD_CLASS(attr_idx) != Struct_Component) { 14007 14008 if (ATD_OFFSET_FLD(attr_idx) == CN_Tbl_Idx) { 14009 offset = CN_INT_TO_C(ATD_OFFSET_IDX(attr_idx)); 14010 14011 # if defined(_TARGET_OS_MAX) || defined(_HOST32) /* JEFFL ?? */ 14012 if (TYP_LINEAR(CN_TYPE_IDX(ATD_OFFSET_IDX(attr_idx))) != Integer_8){ 14013 SIGN_EXTEND(offset); 14014 } 14015 # endif 14016 } 14017 else if (ATD_OFFSET_FLD(attr_idx) == AT_Tbl_Idx) { 14018 send_attr_ntry(ATD_OFFSET_IDX(attr_idx)); 14019 sym_offset = TRUE; 14020 offset = (long64) PDG_AT_IDX(ATD_OFFSET_IDX(attr_idx)); 14021 } 14022 else { 14023 PRINTMSG(AT_DEF_LINE(attr_idx), 1213, Internal, 14024 AT_DEF_COLUMN(attr_idx), 14025 "ATD_OFFSET_IDX", AT_OBJ_NAME_PTR(attr_idx)); 14026 } 14027 } 14028 14029 /* 1 element */ 14030 size = stor_bit_size_of(attr_idx, FALSE, FALSE); 14031 14032 if (size.fld == CN_Tbl_Idx) { 14033 bit_len = CN_INT_TO_C(size.idx); 14034 } 14035 else { 14036 bit_len = F_INT_TO_C(size.constant, TYP_LINEAR(size.type_idx)); 14037 } 14038 14039 sb_idx = ATD_STOR_BLK_IDX(attr_idx); 14040 14041 if (SB_BLK_TYPE(sb_idx) == Based && 14042 child_idx != NULL_IDX && 14043 !ATD_AUTOMATIC(attr_idx)) { 14044 sb_idx = ATD_STOR_BLK_IDX(child_idx); 14045 } 14046 14047 send_stor_blk(sb_idx, &class); 14048 14049 # if defined(GENERATE_WHIRL) 14050 if (ATD_CLASS(attr_idx) == Compiler_Tmp) { 14051 if (sb_idx != NULL_IDX && 14052 SB_SCP_IDX(sb_idx) != NULL_IDX && 14053 SB_SCP_IDX(sb_idx) != curr_scp_idx && 14054 (!SB_HOSTED_STATIC(sb_idx))) { 14055 class = Hosted_Compiler_Temp; 14056 } 14057 } 14058 # endif 14059 14060 type_idx = get_type_desc(attr_idx); 14061 14062 if (TYP_TYPE(ATD_TYPE_IDX(attr_idx)) == CRI_Ptr) { 14063 ptr_align = Word_Align; 14064 14065 # if defined(_TARGET32) 14066 if (TYP_PTR_INCREMENT(ATD_TYPE_IDX(attr_idx)) == TARGET_BITS_PER_WORD){ 14067 ptr_align = HWord_Align; /* 32 */ 14068 } 14069 # endif 14070 } 14071 else if (TYP_TYPE(ATD_TYPE_IDX(attr_idx)) == CRI_Ch_Ptr) { 14072 ptr_align = Byte_Align; 14073 } 14074 else { 14075 ptr_align = 0; 14076 14077 if (TYP_TYPE(ATD_TYPE_IDX(attr_idx)) == Character) { 14078 14079 if (ATD_IN_COMMON(attr_idx) || 14080 ATD_CLASS(attr_idx) == Struct_Component || 14081 ATD_CLASS(attr_idx) == Function_Result) { 14082 align = Byte_Align; 14083 } 14084 } 14085 else if (ATD_CLASS(attr_idx) == Function_Result && 14086 TYP_TYPE(ATD_TYPE_IDX(attr_idx)) == Structure) { 14087 align = (ATT_CHAR_SEQ(TYP_IDX(ATD_TYPE_IDX(attr_idx)))) ? 14088 Byte_Align : Word_Align; 14089 } 14090 else if (TYP_TYPE(ATD_TYPE_IDX(attr_idx)) == Structure) { 14091 align = pdg_align[ATT_ALIGNMENT(TYP_IDX(ATD_TYPE_IDX(attr_idx)))]; 14092 } 14093 # if defined(_ALIGN_REAL16_TO_16_BYTES) 14094 14095 else if (TYP_LINEAR(ATD_TYPE_IDX(attr_idx)) == Complex_16 || 14096 TYP_LINEAR(ATD_TYPE_IDX(attr_idx)) == Real_16) { 14097 align = FWord_Align; 14098 } 14099 # endif 14100 14101 # if defined(_INTEGER_1_AND_2) 14102 else if (on_off_flags.integer_1_and_2 && 14103 PACK_8_BIT_TEST_CONDITION(ATD_TYPE_IDX(attr_idx))) { 14104 align = 8; /* Byte_Align */ 14105 } 14106 else if (on_off_flags.integer_1_and_2 && 14107 PACK_16_BIT_TEST_CONDITION(ATD_TYPE_IDX(attr_idx))) { 14108 align = 16; /* Parcel_Align */ 14109 } 14110 # endif 14111 14112 # if defined(_TARGET_PACK_HALF_WORD_TYPES) 14113 14114 /* Complex_4 does not go here because we want it aligned on a 64 bit */ 14115 /* boundary for speed. */ 14116 14117 else if (PACK_HALF_WORD_TEST_CONDITION(ATD_TYPE_IDX(attr_idx))) { 14118 align = HWord_Align; 14119 } 14120 # endif 14121 } 14122 14123 if (ATD_CLASS(attr_idx) == Variable || 14124 ATD_CLASS(attr_idx) == Dummy_Argument || 14125 ATD_CLASS(attr_idx) == Function_Result || 14126 ATD_CLASS(attr_idx) == Struct_Component || 14127 ATD_CLASS(attr_idx) == Compiler_Tmp || 14128 ATD_CLASS(attr_idx) == CRI__Pointee) { 14129 14130 make_io_type_code(ATD_TYPE_IDX(attr_idx), constant); 14131 basic = get_basic_type(IO_TYPE_CODE_TYPE, 14132 type_alignment_tbl[IO_TYPE_CODE_TYPE], 14133 NULL_IDX); 14134 14135 PDG_DBG_PRINT_START 14136 PDG_DBG_PRINT_C("fei_arith_con"); 14137 PDG_DBG_PRINT_T("(1) type", basic); 14138 #if defined(_HOST32) && defined(_TARGET64) 14139 PDG_DBG_PRINT_VD("(2) value", constant[0]); 14140 #else 14141 PDG_DBG_PRINT_LVD("(2) value", constant[0]); 14142 #endif 14143 PDG_DBG_PRINT_END 14144 14145 # ifdef _ENABLE_FEI 14146 io_type_code_pdg_idx = fei_arith_con(basic, 14147 (long *)constant); 14148 # endif 14149 PDG_DBG_PRINT_START 14150 PDG_DBG_PRINT_LD("(r) PDG_CN_IDX", io_type_code_pdg_idx); 14151 PDG_DBG_PRINT_END 14152 } 14153 14154 if (ATD_ARRAY_IDX(attr_idx) != NULL_IDX) { 14155 14156 switch (BD_ARRAY_CLASS(ATD_ARRAY_IDX(attr_idx))) { 14157 case Assumed_Size: 14158 flag = flag | ((long64) 1 << FEI_OBJECT_ASSUMED_SIZE); 14159 break; 14160 14161 case Assumed_Shape: 14162 flag = flag | ((long64) 1 << FEI_OBJECT_ASSUMD_SHAPE); 14163 break; 14164 14165 case Deferred_Shape1: 14166 flag = flag | ((long64) 1 << FEI_OBJECT_DEFERRED_SHAPE); 14167 break; 14168 14169 case Deferred_Shape: 14170 flag = flag | ((long64) 1 << FEI_OBJECT_DEFERRED_SHAPE); 14171 break; 14172 } 14173 } 14174 14175 # ifdef _TARGET_OS_MAX 14176 if ((ATD_CLASS(attr_idx) != Compiler_Tmp && 14177 ATD_CACHE_ALIGN(attr_idx)) || 14178 (ATD_STOR_BLK_IDX(attr_idx) != NULL_IDX && 14179 SB_CACHE_ALIGN(ATD_STOR_BLK_IDX(attr_idx)))) { 14180 14181 flag = flag | ((long64) 1 << FEI_OBJECT_CACHE_ALIGN); 14182 } 14183 # endif 14184 14185 if (ATD_IM_A_DOPE(attr_idx) && 14186 ATD_DV_ALIAS(attr_idx) != NULL_IDX) { 14187 send_attr_ntry(AL_ATTR_IDX(ATD_DV_ALIAS(attr_idx))); 14188 dv_alias = PDG_AT_IDX(AL_ATTR_IDX(ATD_DV_ALIAS(attr_idx))); 14189 14190 al_idx = AL_NEXT_IDX(ATD_DV_ALIAS(attr_idx)); 14191 if (al_idx != NULL_IDX) { 14192 send_attr_ntry(AL_ATTR_IDX(al_idx)); 14193 ptr_idx = PDG_AT_IDX(AL_ATTR_IDX(al_idx)); 14194 } 14195 } 14196 14197 if (SB_DEF_MULT_SCPS(sb_idx)) { 14198 ATD_EQUIV(attr_idx) = TRUE; /* this is set by inlining */ 14199 } 14200 14201 14202 flag = (flag | 14203 ((long64) ATD_TARGET(attr_idx) << FEI_OBJECT_TARGET) | 14204 ((long64) ATD_EQUIV(attr_idx) << FEI_OBJECT_EQUIV) | 14205 ((long64) ATD_SAVED(attr_idx) << FEI_OBJECT_SAVED) | 14206 ((long64) ATD_ALLOCATABLE(attr_idx) << FEI_OBJECT_ALLOCATE) | 14207 ((long64) ATD_OFFSET_ASSIGNED(attr_idx) << FEI_OBJECT_OFF_ASSIGNED) | 14208 ((long64) sym_offset << FEI_OBJECT_SYMCON_OFFST) | 14209 ((long64) ATD_AUXILIARY(attr_idx) << FEI_OBJECT_AUXILIARY) | 14210 ((long64) ATD_DATA_INIT(attr_idx) << FEI_OBJECT_INITIALD) | 14211 ((long64) AT_DEFINED(attr_idx) << FEI_OBJECT_DEFINED) | 14212 ((long64) AT_REF_IN_CHILD(attr_idx) << FEI_OBJECT_INNER_REF) | 14213 ((long64) AT_DEF_IN_CHILD(attr_idx) << FEI_OBJECT_INNER_DEF) | 14214 ((long64) ATD_POINTER(attr_idx) << FEI_OBJECT_DV_IS_PTR) | 14215 ((long64) ATD_IM_A_DOPE(attr_idx) << FEI_OBJECT_IS_DOPE_VEC) | 14216 ((long64) ATD_IN_COMMON(attr_idx) << FEI_OBJECT_IN_COMMON) | 14217 ((long64) ATD_PERMUTATION(attr_idx) << FEI_OBJECT_PERMUTATION) | 14218 ((long64) ATD_SYMMETRIC(attr_idx) << FEI_OBJECT_SYMMETRIC) | 14219 ((long64) ATD_PTR_ASSIGNED(attr_idx) << FEI_OBJECT_PTR_ASSIGNED) | 14220 ((long64) AT_ACTUAL_ARG(attr_idx) << FEI_OBJECT_ACTUAL_ARG) | 14221 ((long64) ATD_READ_ONLY_VAR(attr_idx) << FEI_OBJECT_READ_ONLY) | 14222 ((long64) ATD_NOT_PT_UNIQUE_MEM(attr_idx) 14223 << FEI_OBJECT_NOT_PT_TO_UNIQUE_MEM) | 14224 ((long64) AT_NAMELIST_OBJ(attr_idx) << FEI_OBJECT_NAMELIST_ITEM)| 14225 14226 ((long64) AT_MODULE_OBJECT(attr_idx) << FEI_OBJECT_IN_MODULE) | 14227 ((long64) AT_PRIVATE(attr_idx) << FEI_OBJECT_PRIVATE )); 14228 14229 14230 14231 if (AT_MODULE_IDX(attr_idx)!=NULL_IDX || 14232 AT_ORIG_MODULE_IDX(attr_idx)!=NULL_IDX) { 14233 flag = flag | ((long64) 1 << FEI_OBJECT_EXTERNAL); 14234 } 14235 14236 14237 14238 if (ATD_CLASS(attr_idx) == Compiler_Tmp || 14239 ATD_CLASS(attr_idx) == Variable) { 14240 flag = flag | ((long64) 1 << FEI_OBJECT_ADDRTAKEN); 14241 } 14242 14243 if (class == Component) { 14244 PDG_DBG_PRINT_START 14245 PDG_DBG_PRINT_C("fei_member"); 14246 PDG_DBG_PRINT_S("(1) AT_OBJ_NAME", AT_OBJ_NAME_PTR(attr_idx)); 14247 PDG_DBG_PRINT_T("(2) type", type_idx); 14248 PDG_DBG_PRINT_LLD("(3) offset", offset); 14249 PDG_DBG_PRINT_LLD("(4) bit_len", bit_len); 14250 PDG_DBG_PRINT_D("(5) storage align", align); 14251 PDG_DBG_PRINT_D("(6) AT_DEF_LINE", AT_DEF_LINE(attr_idx)); 14252 PDG_DBG_PRINT_LLO("(7) flags", flag); 14253 PDG_DBG_PRINT_LD("(8) io descriptor", io_type_code_pdg_idx); 14254 PDG_DBG_PRINT_END 14255 14256 # ifdef _ENABLE_FEI 14257 PDG_AT_IDX(attr_idx) = fei_member(AT_OBJ_NAME_PTR(attr_idx), 14258 type_idx, 14259 offset, 14260 bit_len, 14261 align, 14262 AT_DEF_LINE(attr_idx), 14263 flag, 14264 io_type_code_pdg_idx); 14265 # endif 14266 } 14267 else { 14268 14269 # ifdef _DEBUG 14270 14271 if (dv_alias != NULL_IDX && defining_attr != NULL_IDX) { 14272 PRINTMSG(AT_DEF_LINE(attr_idx), 626, Internal, 14273 AT_DEF_COLUMN(attr_idx), 14274 "dv_alias or defining_attr", 14275 "send_attr_ntry"); 14276 } 14277 # endif 14278 14279 # if 0 /*August*/ 14280 # if ! (defined(_TARGET_OS_IRIX) || defined(_TARGET_OS_LINUX)) && ! defined(_TARGET_OS_MAX) 14281 if (dv_alias == NULL_IDX) { 14282 dv_alias = defining_attr; /* These two are overlayed */ 14283 } 14284 # endif 14285 # endif 14286 14287 14288 /* Null terminate the CDIR$ ID string */ 14289 if (class == Name && ATD_TMP_IDX(attr_idx) != NULL_IDX) { 14290 len = strlen((char *)&CN_CONST(ATD_TMP_IDX(attr_idx))); 14291 # ifdef _DEBUG 14292 if (len > 3000) { 14293 PRINTMSG(AT_DEF_LINE(attr_idx), 626, Internal, 14294 AT_DEF_COLUMN(attr_idx), 14295 "a valid length", 14296 "send_attr_ntry"); 14297 } 14298 # endif 14299 strcpy(str, (char *)&CN_CONST(ATD_TMP_IDX(attr_idx)) ); 14300 len = CN_INT_TO_C(TYP_IDX(CN_TYPE_IDX(ATD_TMP_IDX(attr_idx)))); 14301 # ifdef _DEBUG 14302 if (len > 3000) { 14303 PRINTMSG(AT_DEF_LINE(attr_idx), 626, Internal, 14304 AT_DEF_COLUMN(attr_idx), 14305 "a valid length", 14306 "send_attr_ntry"); 14307 } 14308 # endif 14309 str[len] = NULL_CHAR; 14310 } 14311 14312 PDG_DBG_PRINT_START 14313 PDG_DBG_PRINT_C("fei_object"); 14314 PDG_DBG_PRINT_S("(1) AT_OBJ_NAME", AT_OBJ_NAME_PTR(attr_idx)); 14315 PDG_DBG_PRINT_T("(2) type", type_idx); 14316 PDG_DBG_PRINT_LLO("(3) flags", flag); 14317 PDG_DBG_PRINT_S("(4) symbol class", p_obj_sym_class[class]); 14318 PDG_DBG_PRINT_S("(5) PDG_SB_IDX", SB_NAME_PTR(sb_idx)); 14319 PDG_DBG_PRINT_D("(6) dv_alias", dv_alias); 14320 PDG_DBG_PRINT_LD("(7) ptr_idx", ptr_idx); 14321 PDG_DBG_PRINT_LLD("(8) offset", offset); 14322 PDG_DBG_PRINT_S("(9) intent", p_intent[intent]); 14323 PDG_DBG_PRINT_LLD("(10) bit_len", bit_len); 14324 PDG_DBG_PRINT_D("(11) pointee align", ptr_align); 14325 PDG_DBG_PRINT_D("(12) storage align", align); 14326 PDG_DBG_PRINT_D("(13) unused", 0); 14327 PDG_DBG_PRINT_LD("(14) io descriptor", io_type_code_pdg_idx); 14328 PDG_DBG_PRINT_D("(15) unused", 0); 14329 PDG_DBG_PRINT_D("(16) AT_DEF_LINE", AT_DEF_LINE(attr_idx)); 14330 PDG_DBG_PRINT_END 14331 14332 # ifdef _ENABLE_FEI 14333 if (AT_MODULE_IDX(attr_idx)) { 14334 send_attr_ntry(AT_MODULE_IDX(attr_idx)); 14335 PDG_AT_IDX(attr_idx) = fei_object(class == Name ? 14336 str : AT_OBJ_NAME_PTR(attr_idx), 14337 type_idx, 14338 flag, 14339 class, 14340 PDG_SB_IDX(sb_idx), 14341 dv_alias, 14342 ptr_idx, 14343 offset, 14344 intent, 14345 bit_len, 14346 ptr_align, 14347 align, 14348 0, 14349 io_type_code_pdg_idx, 14350 0, 14351 AT_DEF_LINE(attr_idx), 14352 PDG_AT_IDX(AT_MODULE_IDX(attr_idx))); 14353 } 14354 else 14355 PDG_AT_IDX(attr_idx) = fei_object(class == Name ? 14356 str : AT_OBJ_NAME_PTR(attr_idx), 14357 type_idx, 14358 flag, 14359 class, 14360 PDG_SB_IDX(sb_idx), 14361 dv_alias, 14362 ptr_idx, 14363 offset, 14364 intent, 14365 bit_len, 14366 ptr_align, 14367 align, 14368 0, 14369 io_type_code_pdg_idx, 14370 0, 14371 AT_DEF_LINE(attr_idx), 14372 0); 14373 # endif 14374 } 14375 14376 PDG_DBG_PRINT_START 14377 PDG_DBG_PRINT_LD("(r) PDG_AT_IDX", PDG_AT_IDX(attr_idx)); 14378 PDG_DBG_PRINT_END 14379 break; 14380 14381 case Pgm_Unit: 14382 if (PDG_AT_IDX(attr_idx) == NULL_IDX) { 14383 /* Send procedure decides what to send over and what not to send. */ 14384 send_procedure(attr_idx, 14385 NULL_IDX, /* No alternate entries for Imported calls */ 14386 Imported); 14387 } 14388 break; 14389 14390 case Label: 14391 send_label(attr_idx); 14392 break; 14393 14394 case Interface: 14395 # if 0 14396 if (ATP_PGM_UNIT(SCP_ATTR_IDX(curr_scp_idx)) != Module ) { 14397 14398 /* This is an interface block that has the same name as one of */ 14399 /* its program units. The program unit has to go through the */ 14400 /* interface. */ 14401 14402 if (ATI_PROC_IDX(attr_idx) != NULL_IDX && 14403 PDG_AT_IDX(ATI_PROC_IDX(attr_idx)) == NULL_IDX) { 14404 send_procedure(ATI_PROC_IDX(attr_idx), 14405 NULL_IDX, 14406 Imported); 14407 } 14408 14409 /* Need to send generic - explicit names if generating debug tbls */ 14410 14411 if (cmd_line_flags.debug_lvl <= Debug_Lvl_2) { 14412 sn_idx = ATI_FIRST_SPECIFIC_IDX(attr_idx); 14413 14414 for (i = 0; i < ATI_NUM_SPECIFICS(attr_idx); i++) { 14415 if (AT_REFERENCED(SN_ATTR_IDX(sn_idx)) != Not_Referenced) { 14416 if (PDG_AT_IDX(SN_ATTR_IDX(sn_idx)) == NULL_IDX) { 14417 send_procedure(SN_ATTR_IDX(sn_idx), 14418 NULL_IDX, 14419 Imported); 14420 } 14421 14422 PDG_DBG_PRINT_START 14423 PDG_DBG_PRINT_C("fei_smt_actual_to_generic"); 14424 PDG_DBG_PRINT_LD("(1) PDG_AT_IDX", 14425 PDG_AT_IDX(SN_ATTR_IDX(sn_idx))); 14426 PDG_DBG_PRINT_S("(2) AT_OBJ_NAME", 14427 AT_OBJ_NAME_PTR(attr_idx)); 14428 PDG_DBG_PRINT_END 14429 14430 # ifdef _ENABLE_FEI 14431 fei_smt_actual_to_generic(PDG_AT_IDX(SN_ATTR_IDX(sn_idx)), 14432 AT_OBJ_NAME_PTR(attr_idx)); 14433 # endif 14434 } 14435 sn_idx = SN_SIBLING_LINK(sn_idx); 14436 } 14437 } 14438 } 14439 14440 # endif 14441 /*************************************************************** 14442 * We need to keep interface information in Whirl so we can output 14443 * "interface" block in w2f.f file,we need to add OPR_INTERFACE in 14444 * Whirl,here we have to generate a bounch of OPR_FUNC_ENTRY and 14445 * send all dummy arguments for "OPR_INTERFACE" 14446 ****************************************************************/ 14447 if (AT_MODULE_OBJECT(attr_idx) && 14448 ATP_PGM_UNIT(SCP_ATTR_IDX(curr_scp_idx)) != Module) 14449 ; 14450 else 14451 if (!AT_IS_INTRIN(attr_idx)||ATI_USER_SPECIFIED(attr_idx)) 14452 send_interface_list(attr_idx); 14453 14454 break; 14455 14456 case Derived_Type: 14457 if (ATT_TY_IDX(attr_idx)==NULL_IDX ) { 14458 CLEAR_TBL_NTRY(type_tbl, TYP_WORK_IDX); 14459 TYP_TYPE(TYP_WORK_IDX) = Structure; 14460 TYP_LINEAR(TYP_WORK_IDX) = Structure_Type; 14461 TYP_IDX(TYP_WORK_IDX) = attr_idx; 14462 ATT_TY_IDX(attr_idx) = ntr_derived_type_tbl(); 14463 TBL_REALLOC_CK(pdg_type_tbl, 1);/*need to enlarge pdg_type_tbl */ 14464 14465 if (curr_scp_idx==ATT_SCP_IDX(attr_idx)) 14466 nested_attr = FALSE; 14467 else 14468 nested_attr= TRUE; 14469 14470 send_derived_type(ATT_TY_IDX(attr_idx),nested_attr); 14471 } 14472 14473 goto EXIT; 14474 14475 case Namelist_Grp: 14476 if (ATP_PGM_UNIT(SCP_ATTR_IDX(curr_scp_idx)) != Module ) { 14477 14478 /* send_namelist_group(attr_idx,0); add a argument for external??? */ 14479 14480 if (AT_MODULE_IDX(attr_idx)!=NULL_IDX || 14481 AT_ORIG_MODULE_IDX(attr_idx)!=NULL_IDX) { /* input from a module */ 14482 send_namelist_group(attr_idx,3); 14483 } else 14484 send_namelist_group(attr_idx,0); 14485 } 14486 else { 14487 if (AT_MODULE_IDX(attr_idx)!=NULL_IDX || 14488 AT_ORIG_MODULE_IDX(attr_idx)!=NULL_IDX) { /* input from a module */ 14489 send_namelist_group(attr_idx,3); 14490 } else 14491 send_namelist_group(attr_idx,1); 14492 } 14493 14494 break; 14495 14496 } /* End switch */ 14497 14498 if (child_idx != NULL_IDX) { 14499 PDG_AT_IDX(child_idx) = PDG_AT_IDX(attr_idx); 14500 } 14501 14502 EXIT: 14503 14504 TRACE (Func_Exit, "send_attr_ntry", NULL); 14505 14506 return; 14507 14508 } /* send_attr_ntry */ 14509 14510 14511 /******************************************************************************\ 14512 |* *| 14513 |* Description: *| 14514 |* This does initialization, calls the routines to pass the symbol *| 14515 |* and the IR to PDG. It then does cleanup. *| 14516 |* *| 14517 |* Input parameters: *| 14518 |* NONE *| 14519 |* *| 14520 |* Output parameters: *| 14521 |* NONE *| 14522 |* *| 14523 |* Returns: *| 14524 |* NOTHING *| 14525 |* *| 14526 \******************************************************************************/ 14527 static void send_mod_file_name (void) 14528 14529 { 14530 int fp_idx; 14531 14532 # if defined(_TARGET_OS_MAX) || defined(_TARGET_OS_UNICOS) 14533 long opt_flag; 14534 int pgm_code = 0; 14535 int pgm_data = 0; 14536 # endif 14537 14538 14539 TRACE (Func_Entry, "send_mod_file_name", NULL); 14540 14541 fp_idx = SCP_FILE_PATH_IDX(MAIN_SCP_IDX); 14542 14543 if (!FP_OUTPUT_TO_O(fp_idx)) { 14544 return; 14545 } 14546 14547 14548 # if defined(_TARGET_OS_MAX) || defined(_TARGET_OS_UNICOS) 14549 14550 CREATE_ID(TOKEN_ID(token), "@%%", 3); 14551 COPY_ATTR_NTRY(AT_WORK_IDX, SCP_ATTR_IDX(MAIN_SCP_IDX)); 14552 14553 if (ATP_PGM_UNIT(AT_WORK_IDX) != Module ||TRUE) { /* Inlinable situation */ 14554 14555 14556 CLEAR_VARIANT_ATTR_INFO(AT_WORK_IDX, Pgm_Unit); 14557 ATP_PGM_UNIT(AT_WORK_IDX) = Module; 14558 } 14559 14560 AT_CIF_SYMBOL_ID(AT_WORK_IDX) = 0; 14561 CLEAR_TBL_NTRY(name_pool, NULL_IDX); 14562 14563 name_pool[NULL_IDX].name_long = TOKEN_STR_WD(token, 0); 14564 AT_NAME_IDX(AT_WORK_IDX) = NULL_IDX; 14565 AT_NAME_LEN(AT_WORK_IDX) = 3; 14566 ATP_EXT_NAME_IDX(AT_WORK_IDX) = NULL_IDX; 14567 ATP_EXT_NAME_LEN(AT_WORK_IDX) = 3; 14568 14569 PDG_DBG_PRINT_START 14570 PDG_DBG_PRINT_C("fei_next_func_idx"); 14571 PDG_DBG_PRINT_END 14572 14573 # ifdef _ENABLE_FEI 14574 PDG_AT_IDX(AT_WORK_IDX) = fei_next_func_idx(ATP_PGM_UNIT(AT_WORK_IDX), 14575 ATP_PROC(AT_WORK_IDX), 14576 ATP_ALT_ENTRY(AT_WORK_IDX)); 14577 # endif 14578 14579 send_procedure(AT_WORK_IDX, 14580 NULL_IDX, /* No alt entries or parent procs */ 14581 Definition); 14582 14583 PDG_DBG_PRINT_START 14584 PDG_DBG_PRINT_C("PDGCS_comp_unit"); 14585 PDG_DBG_PRINT_S("(1) AT_OBJ_NAME", AT_OBJ_NAME_PTR(AT_WORK_IDX)); 14586 PDG_DBG_PRINT_D("(2) unused", 0); 14587 PDG_DBG_PRINT_END 14588 14589 PDGCS_comp_unit(AT_OBJ_NAME_PTR(AT_WORK_IDX), NULL_IDX); 14590 14591 opt_flag = ((long) opt_flags.aggress << PDGCS_NEW_PROC_IGNORE_THROTTLE)| 14592 ((long) opt_flags.pattern << PDGCS_NEW_PROC_PATTERN_MATCHING)| 14593 ((long) (cmd_line_flags.debug_lvl != Debug_Lvl_0) 14594 << PDGCS_NEW_PROC_ELIM_DEAD_CODE)| 14595 ((long) on_off_flags.reciprical_divide 14596 << PDGCS_NEW_PROC_IEEE_RECIPS)| 14597 ((long) cmd_line_flags.runtime_conformance 14598 << PDGCS_NEW_PROC_CONFORM_CHECK)| 14599 ((long) (opt_flags.task_lvl == Task_Lvl_3) 14600 << PDGCS_NEW_PROC_TASK_INNER_LOOPS)| 14601 ((long) cmd_line_flags.do_UDB_checks 14602 << PDGCS_NEW_PROC_DO_UBD_ANALYSIS); 14603 14604 PDG_DBG_PRINT_START 14605 PDG_DBG_PRINT_C("PDGCS_new_proc"); 14606 PDG_DBG_PRINT_D("(1) num ir", 100); 14607 PDG_DBG_PRINT_D("(2) PDG_AT_IDX", PDG_AT_IDX(AT_WORK_IDX)); 14608 PDG_DBG_PRINT_D("(3) alt entries", 0); 14609 PDG_DBG_PRINT_D("(4) scalar level", opt_flags.scalar_lvl); 14610 PDG_DBG_PRINT_D("(5) vector level", opt_flags.vector_lvl); 14611 PDG_DBG_PRINT_D("(6) task level", opt_flags.task_lvl); 14612 PDG_DBG_PRINT_O("(7) flags", opt_flag); 14613 PDG_DBG_PRINT_D("(8) user mobes", 0); 14614 PDG_DBG_PRINT_D("(9) user sades", 0); 14615 PDG_DBG_PRINT_D("(10) pipeline level", opt_flags.pipeline_lvl); 14616 PDG_DBG_PRINT_D("(11) stream level", opt_flags.stream_lvl); 14617 PDG_DBG_PRINT_END 14618 14619 PDGCS_new_proc(100, 14620 PDG_AT_IDX(AT_WORK_IDX), 14621 0, 14622 opt_flags.scalar_lvl, 14623 opt_flags.vector_lvl, 14624 opt_flags.task_lvl, 14625 opt_flag, 14626 0, 14627 0, 14628 opt_flags.pipeline_lvl, 14629 opt_flags.stream_lvl, 14630 TRUE); 14631 14632 PDG_DBG_PRINT_START 14633 PDG_DBG_PRINT_C("PDGCS_do_proc"); 14634 14635 # ifdef _DEBUG 14636 fflush(debug_file); 14637 # endif 14638 14639 PDG_DBG_PRINT_END 14640 14641 PDGCS_do_proc(); 14642 14643 PDG_DBG_PRINT_START 14644 PDG_DBG_PRINT_C("PDGCS_end_procs"); 14645 PDG_DBG_PRINT_D("(1) pgm code", pgm_code); 14646 PDG_DBG_PRINT_D("(2) pgm data", pgm_data); 14647 PDG_DBG_PRINT_END 14648 14649 PDGCS_end_procs(&pgm_code, 14650 &pgm_data); 14651 14652 create_mod_info_tbl(); 14653 output_mod_info_file(); 14654 14655 # endif 14656 14657 if (fp_idx != NULL_IDX) { 14658 PDG_DBG_PRINT_START 14659 PDG_DBG_PRINT_C("fei_module_file"); 14660 PDG_DBG_PRINT_END 14661 14662 # ifdef _ENABLE_FEI 14663 fei_module_file(FP_NAME_PTR(fp_idx)); 14664 # endif 14665 } 14666 14667 # if defined(_TARGET_OS_MAX) || defined(_TARGET_OS_UNICOS) 14668 14669 PDG_DBG_PRINT_START 14670 PDG_DBG_PRINT_C("PDGCS_end_comp_unit"); 14671 PDG_DBG_PRINT_END 14672 14673 PDGCS_end_comp_unit(); 14674 14675 # endif 14676 14677 TRACE (Func_Exit, "send_mod_file_name", NULL); 14678 14679 return; 14680 14681 } /* send_mod_file_name */ 14682 14683 14684 14685 /******************************************************************************\ 14686 |* *| 14687 |* Description: *| 14688 |* Terminate the interface. *| 14689 |* *| 14690 |* Input parameters: *| 14691 |* none *| 14692 |* *| 14693 |* Output parameters: *| 14694 |* none *| 14695 |* *| 14696 |* Returns: nothing *| 14697 |* *| 14698 \******************************************************************************/ 14699 14700 void terminate_PDGCS(void) 14701 14702 { 14703 14704 TRACE (Func_Entry, "terminate_PDGCS", NULL); 14705 14706 if (binary_output || assembly_output) { 14707 PDG_DBG_PRINT_START 14708 PDG_DBG_PRINT_C("PDGCS_terminate"); 14709 PDG_DBG_PRINT_END 14710 14711 # ifdef _ENABLE_FEI 14712 PDGCS_terminate(); 14713 # endif 14714 } 14715 14716 TRACE (Func_Exit, "terminate_PDGCS", NULL); 14717 14718 return; 14719 14720 } /* terminate_PDGCS */ 14721 14722 14723 14724 /******************************************************************************\ 14725 |* *| 14726 |* Description: *| 14727 |* send_darg_list sends the dummy argument list for the given program. *| 14728 |* *| 14729 |* Input parameters: *| 14730 |* pgm_attr_idx -> Index of attr entry for program unit, whose *| 14731 |* dummy args need to be converted. *| 14732 |* darg_pdg_sn_fw_idx -> PDG secondary name table index where the first *| 14733 |* dummy arg should go. *| 14734 |* *| 14735 |* Output parameters: *| 14736 |* NONE *| 14737 |* *| 14738 |* Returns: *| 14739 |* NOTHING *| 14740 |* *| 14741 \******************************************************************************/ 14742 static void send_darg_list(int pgm_attr_idx, 14743 int darg_pdg_sn_fw_idx) 14744 14745 { 14746 int attr_idx; 14747 int darg_idx; 14748 int end_idx; 14749 int prev_idx; 14750 int sn_idx; 14751 14752 14753 TRACE (Func_Entry, "send_darg_list", NULL); 14754 14755 prev_idx = NULL_IDX; 14756 darg_idx = darg_pdg_sn_fw_idx; 14757 end_idx = ATP_NUM_DARGS(pgm_attr_idx) + ATP_FIRST_IDX(pgm_attr_idx); 14758 14759 14760 14761 sn_idx = ATP_FIRST_IDX(pgm_attr_idx); 14762 14763 do { 14764 attr_idx = SN_ATTR_IDX(sn_idx); 14765 14766 if (PDG_AT_IDX(attr_idx) == NULL_IDX) { 14767 if (AT_OBJ_CLASS(attr_idx) == Data_Obj) { 14768 send_attr_ntry(attr_idx); 14769 } 14770 else { 14771 send_dummy_procedure(attr_idx); 14772 } 14773 } 14774 14775 PDG_DBG_PRINT_START 14776 PDG_DBG_PRINT_C("fei_name"); 14777 PDG_DBG_PRINT_S("(1) AT_OBJ_NAME", AT_OBJ_NAME_PTR(attr_idx)); 14778 PDG_DBG_PRINT_S("(2) table", "PDGCS_Object"); 14779 PDG_DBG_PRINT_LD("(3) PDG_AT_IDX", PDG_AT_IDX(attr_idx)); 14780 PDG_DBG_PRINT_D("(4) prev_idx", prev_idx); 14781 PDG_DBG_PRINT_D("(5) darg_idx", darg_idx); 14782 PDG_DBG_PRINT_END 14783 14784 /* This sets prev_idx to the index being used on this call */ 14785 14786 # ifdef _ENABLE_FEI 14787 prev_idx = fei_name(AT_OBJ_NAME_PTR(attr_idx), 14788 Sym_Object, 14789 PDG_AT_IDX(attr_idx), 14790 prev_idx, 14791 darg_idx); 14792 # endif 14793 14794 14795 if (++sn_idx < end_idx) { 14796 PDG_DBG_PRINT_START 14797 PDG_DBG_PRINT_C("fei_next_name"); 14798 PDG_DBG_PRINT_D("(1) logical", TRUE); 14799 PDG_DBG_PRINT_END 14800 14801 # ifdef _ENABLE_FEI 14802 darg_idx = fei_next_name(TRUE); 14803 # endif 14804 } 14805 } 14806 while (sn_idx != end_idx); 14807 14808 TRACE (Func_Exit, "send_darg_list", NULL); 14809 14810 return; 14811 14812 } /* send_darg_list */ 14813 14814 14815 /******************************************************************************\ 14816 |* *| 14817 |* Description: *| 14818 |* On IRIX systems, the alignment can differ for basic types. *| 14819 |* For example if -align32 is specified, some of the real*8 types will *| 14820 |* start on 32 bit boundaries rather than 64 bit boundaries. When this *| 14821 |* happens, a different type descriptor needs to get send across with *| 14822 |* the alternative alignment. *| 14823 |* *| 14824 |* Input parameters: *| 14825 |* NONE *| 14826 |* *| 14827 |* Output parameters: *| 14828 |* NONE *| 14829 |* *| 14830 |* Returns: *| 14831 |* NOTHING *| 14832 |* *| 14833 \******************************************************************************/ 14834 static TYPE send_non_standard_aligned_type(int align, 14835 int type_idx) 14836 { 14837 int aux_info; 14838 int basic_type; 14839 int bit_size; 14840 int flags = 0; 14841 TYPE pdg_type_idx; 14842 14843 14844 TRACE (Func_Entry, "send_non_standard_aligned_type", NULL); 14845 14846 switch (TYP_LINEAR(type_idx)) { 14847 14848 case Integer_1: 14849 bit_size = bit_size_tbl[Integer_1]; 14850 basic_type = Integral; 14851 aux_info = 1; 14852 flags = 2; 14853 break; 14854 14855 case Integer_2: 14856 bit_size = bit_size_tbl[Integer_2]; 14857 basic_type = Integral; 14858 aux_info = 2; 14859 flags = 2; 14860 break; 14861 14862 case Integer_4: 14863 bit_size = bit_size_tbl[Integer_4]; 14864 basic_type = Integral; 14865 aux_info = 4; 14866 flags = 2; 14867 break; 14868 14869 case Integer_8: 14870 bit_size = bit_size_tbl[Integer_8]; 14871 basic_type = Integral; 14872 aux_info = 8; 14873 flags = 2; 14874 14875 # ifdef _TARGET_HAS_FAST_INTEGER 14876 if (opt_flags.set_allfastint_option || 14877 (opt_flags.set_fastint_option && 14878 TYP_DESC(type_idx) == Default_Typed)) { 14879 bit_size = 46; 14880 aux_info = 6; 14881 } 14882 # endif 14883 break; 14884 14885 case Logical_1: 14886 bit_size = bit_size_tbl[Logical_1]; 14887 basic_type = L_ogical; 14888 aux_info = 1; 14889 break; 14890 14891 case Logical_2: 14892 bit_size = bit_size_tbl[Logical_2]; 14893 basic_type = L_ogical; 14894 aux_info = 2; 14895 break; 14896 14897 case Logical_4: 14898 bit_size = bit_size_tbl[Logical_4]; 14899 basic_type = L_ogical; 14900 aux_info = 4; 14901 break; 14902 14903 case Logical_8: 14904 bit_size = bit_size_tbl[Logical_8]; 14905 basic_type = L_ogical; 14906 aux_info = 8; 14907 break; 14908 14909 case Real_4: 14910 bit_size = bit_size_tbl[Real_4]; 14911 basic_type = Floating_Pt; 14912 aux_info = 4; 14913 break; 14914 14915 case Real_8: 14916 bit_size = bit_size_tbl[Real_8]; 14917 basic_type = Floating_Pt; 14918 aux_info = 8; 14919 break; 14920 14921 case Real_16: 14922 bit_size = bit_size_tbl[Real_16]; 14923 basic_type = Floating_Pt; 14924 aux_info = 16; 14925 break; 14926 14927 case Complex_4: 14928 bit_size = bit_size_tbl[Complex_4]; 14929 basic_type = C_omplex; 14930 aux_info = 4; 14931 break; 14932 14933 case Complex_8: 14934 bit_size = bit_size_tbl[Complex_8]; 14935 basic_type = C_omplex; 14936 aux_info = 8; 14937 break; 14938 14939 case Complex_16: 14940 bit_size = bit_size_tbl[Complex_16]; 14941 basic_type = C_omplex; 14942 aux_info = 16; 14943 break; 14944 14945 case CRI_Ch_Ptr_8: 14946 bit_size = bit_size_tbl[CRI_Ch_Ptr_8]; 14947 basic_type = CRI_Pointer_Char; 14948 aux_info = 0; 14949 break; 14950 14951 default: 14952 PRINTMSG(stmt_start_line, 179, Internal, stmt_start_col, 14953 "send_non_standard_aligned_type"); 14954 break; 14955 } 14956 14957 PDG_DBG_PRINT_START 14958 PDG_DBG_PRINT_C("fei_descriptor"); 14959 PDG_DBG_PRINT_O("(1) flags", flags); 14960 PDG_DBG_PRINT_S("(2) table type", p_table_type[Basic]); 14961 PDG_DBG_PRINT_D("(3) bit_size", bit_size); 14962 PDG_DBG_PRINT_S("(4) basic type", p_basic_type[basic_type]); 14963 PDG_DBG_PRINT_D("(5) aux info", aux_info); 14964 PDG_DBG_PRINT_D("(6) alignment", pdg_align[align]); 14965 PDG_DBG_PRINT_END 14966 # ifdef _ENABLE_FEI 14967 pdg_type_idx = fei_descriptor(flags, 14968 Basic, 14969 bit_size, 14970 basic_type, 14971 aux_info, 14972 pdg_align[align]); 14973 # endif 14974 PDG_DBG_PRINT_START 14975 PDG_DBG_PRINT_T("(r) type", pdg_type_idx); 14976 PDG_DBG_PRINT_END 14977 14978 TRACE (Func_Exit, "send_non_standard_aligned_type", NULL); 14979 14980 return(pdg_type_idx); 14981 14982 } /* send_non_standard_aligned_type */