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/headers/main.h 5.10 09/01/99 12:24:50\n" */ 00038 00039 /************************************************************/ 00040 /* setup release string and frontend version from release.c */ 00041 /************************************************************/ 00042 00043 extern char release_level[]; 00044 extern char frontend_version[]; 00045 00046 /****************************************\ 00047 |* Static data used within this module. *| 00048 \****************************************/ 00049 00050 /* Ddd Mmm dd, 19yy hh:mm:ss */ 00051 static char comp_date_time[DATE_TIME_STR_SIZE]; 00052 00053 static char compiler_gen_time[] = __TIME__; 00054 static long max_field_len; 00055 00056 /**********************************\ 00057 |* enums used within this module. *| 00058 \**********************************/ 00059 00060 enum language {Pdgcs_Ansi_C = 1, Pdgcs_Fortran_77, 00061 Pdgcs_Fortran_90, Pdgcs_Fortran_77_MPP, 00062 Pdgcs_Fortran_90_MPP, Pdgcs_Other_Lang 00063 }; 00064 00065 00066 /*************************************************\ 00067 |* Globally accessible objects defined in main.h *| 00068 \*************************************************/ 00069 00070 ac_cmd_line_flags_type ac_cmd_line_flags; 00071 char *basic_type_str[] = { 00072 "INTEGER", 00073 "LOGICAL", 00074 "REAL", 00075 "COMPLEX", 00076 "Cray pointer", 00077 "Cray parcel pointer", 00078 "Cray character pointer", 00079 "typeless", 00080 "CHARACTER", 00081 "derived-type" 00082 }; 00083 00084 char assembly_file[MAX_FILE_NAME_SIZE]; 00085 char assembly_listing_file[MAX_FILE_NAME_SIZE]; 00086 boolean assembly_output = FALSE; 00087 char bin_file[MAX_FILE_NAME_SIZE]; 00088 boolean binary_output = FALSE; 00089 char dot_i_file[MAX_FILE_NAME_SIZE]; 00090 00091 char debug_file_name[MAX_FILE_NAME_SIZE]; 00092 00093 long ccg_dump_flags; 00094 00095 FILE *c_i_f; /* File name used in all CIF accesses.*/ 00096 00097 FILE *cif_actual_file; 00098 00099 /* CIF needs to know the actual -C options specified (not the OR'd */ 00100 /* final value representing the combination of options a single option */ 00101 /* might imply) so the following variable is used to record these */ 00102 /* actual options. */ 00103 00104 int cif_C_opts; 00105 00106 boolean cif_first_pgm_unit; 00107 int cif_flags; 00108 int cif_internal_proc_start_line; 00109 int cif_module_proc_start_line; 00110 boolean cif_need_unit_rec; 00111 int cif_pgm_unit_start_line; 00112 00113 /* this is usually FALSE. It only gets set TRUE, when */ 00114 /* expr_semantics is processing, the duplicate bounds */ 00115 /* tmps that are only kept for CIF. We need to issue the */ 00116 /* same number of messages, whether CIF is on or off. */ 00117 00118 boolean cif_tmp_so_no_msg = FALSE; 00119 00120 /* cif_tmp_file records output while parsing the first */ 00121 /* stmt of a program unit are temporarily saved here. */ 00122 00123 FILE *cif_tmp_file; 00124 00125 boolean clearing_blk_stk; 00126 cmd_line_flags_type cmd_line_flags; 00127 int code_size = 0; 00128 int comp_phase; 00129 char compiler_gen_date[] = __DATE__; 00130 int contig_test_ir_idx = NULL_IDX; 00131 convert_to_string_type convert_to_string_fmt = Dont_Care; 00132 int curr_debug_lbl; 00133 int curr_glb_line = 0; 00134 int curr_internal_lbl; 00135 int curr_scp_idx; 00136 int curr_stmt_sh_idx; 00137 int curr_gl_stmt_sh_idx = NULL_IDX; 00138 int global_stmt_sh_idx = NULL_IDX; 00139 int const_safevl_idx; 00140 int data_size = 0; 00141 00142 linear_type_type default_linear_type[Num_Fortran_Types]; 00143 long *dt_cmp_tbl = NULL; 00144 char *dir_mic_str[Tok_Mic_End-Tok_Mic_Start] = 00145 {" ", 00146 "CONTINUE", 00147 "CNCALL", 00148 "CASE", 00149 "DOPARALLEL", 00150 "DOALL", 00151 "ENDPARALLEL", 00152 "ENDGUARD", 00153 "ENDCASE", 00154 "ENDDO", 00155 "GUARD", 00156 "IF", 00157 "MAXCPUS", 00158 "NUMCPUS", 00159 "PERMUTATION", 00160 "PARALLEL", 00161 "POINT", 00162 "SEND", 00163 "SPAN", 00164 "TASKCOMMON", 00165 "WAIT"}; 00166 00167 /* 00168 * Solaris workaround 00169 * BUG? Note in tokens.h, Tok_Dir_End-Tok_Dir_Start == 108, but here 00170 * directive_str only had 98 strings, which means the last 10 strings 00171 * were NULL pointers! This causes Segmentation Fault on Solaris in 00172 * debug.c (function print_cmd_tbl, line997, for loop)! Although it's 00173 * okay to printf("%s", NULL) on SGI machine. 00174 * I added the missing strings to the list. 00175 * 00176 */ 00177 char *directive_str[Tok_Dir_End-Tok_Dir_Start] = 00178 {" ", 00179 "ALIGN", 00180 "ATOMIC UPDATE", 00181 "AUTOSCOPE", 00182 "AUXILIARY", 00183 "BARRIER", 00184 "BL", 00185 "BLOCK", 00186 "BOUNDS", 00187 "CACHE_ALIGN", 00188 "CACHE_BYPASS", 00189 "CHUNKSIZE", 00190 "CNCALL", 00191 "CODE", 00192 "COMMON", 00193 "CONCURRENT", 00194 "CONTROL", 00195 "COPY_ASSUMED_SHAPE", 00196 "CRITICAL", 00197 "DOSHARED", 00198 "DYNAMIC", 00199 "EJECT", 00200 "END CRITICAL", 00201 "END MASTER", 00202 "FIXED", 00203 "FLOW", 00204 "FREE", 00205 "GEOMETRY", 00206 "GETFIRST", 00207 "GUIDED", 00208 "ID", 00209 "IF", 00210 "IGNORE_TKR", 00211 "INLINE", 00212 "INLINEALWAYS", 00213 "INLINENEVER", 00214 "INTEGER", 00215 "IVDEP", 00216 "LIST", 00217 "MASTER", 00218 "MAXCPUS", 00219 "MODINLINE", 00220 "NAME", 00221 "NCPUS_CHUNKS", 00222 "NEXTSCALAR", 00223 "NO BARRIER", 00224 "NOBL", 00225 "NOBOUNDS", 00226 "NOCODE", 00227 "NOFLOW", 00228 "NOINLINE", 00229 "NOINTERCHANGE", 00230 "NOLIST", 00231 "NOMARK", 00232 "NOMODINLINE", 00233 "NOPATTERN", 00234 "NORECURRENCE", 00235 "NOSIDEEFFECTS", 00236 "NOSPLIT", 00237 "NOTASK", 00238 "NOUNROLL", 00239 "NOVECTOR", 00240 "NOVSEARCH", 00241 "NUMCHUNKS", 00242 "NUMCPUS", 00243 "PARALLEL_ONLY", 00244 "PATTERN", 00245 "PE_PRIVATE", 00246 "PE_RESIDENT", 00247 "PERMUTATION", 00248 "PREFERTASK", 00249 "PREFERVECTOR", 00250 "PRIVATE", 00251 "RECURRENCE", 00252 "REGFILE", 00253 "SAVELAST", 00254 "SEMEXTERN", 00255 "SERIAL_ONLY", 00256 "SHARED", 00257 "SHORTLOOP", 00258 "SHORTSEQUENCE", 00259 "SINGLE", 00260 "SPLIT", 00261 "STACK", 00262 "STATIC", 00263 "SUPPRESS", 00264 "SYMMETRIC", 00265 "SYSTEM_MODULE", 00266 "TASK", 00267 "TASKCOMMON", 00268 "TASKHEAD", 00269 "UNKNOWN", 00270 "UNKNOWN_SHARED", 00271 "UNROLL", 00272 "USES_EREGS", 00273 "VECTOR", 00274 "VFUNCTION", 00275 "VSEARCH", 00276 "null", 00277 "null", 00278 "null", 00279 "null", 00280 "null", 00281 "null", 00282 "null", 00283 "null", 00284 "null", 00285 "null"}; 00286 00287 boolean disregard_directive[Tok_Dir_End-Tok_Dir_Start]; 00288 boolean disregard_mics[Tok_Mic_End-Tok_Mic_Start]; 00289 boolean disregard_mips 00290 [Tok_SGI_Dir_End-Tok_SGI_Dir_Start]; 00291 boolean disregard_open_mp 00292 [Tok_Open_Mp_Dir_End-Tok_Open_Mp_Dir_Start]; 00293 boolean disregard_openad /* eraxxon: OpenAD */ 00294 [Tok_OpenAD_Dir_End-Tok_OpenAD_Dir_Start]; 00295 dump_flags_type dump_flags; 00296 00297 int expanded_intrinsic_list = NULL_IDX; 00298 expr_mode_type expr_mode = Regular_Expr; 00299 00300 void (*get_char) (); 00301 void (*get_char_literal) (); 00302 00303 long glb_tbl_idx[Num_Glb_Tbl_Idxs]; 00304 00305 boolean have_unnamed_pgm_unit = FALSE; 00306 boolean need_pure_function = FALSE; 00307 boolean have_main_pgm_unit = FALSE; 00308 00309 boolean in_action_stmt_of_if_where_or_forall = FALSE; 00310 00311 int include_path_idx = NULL_IDX; 00312 00313 opnd_type init_target_opnd = INIT_OPND_TYPE; 00314 00315 boolean inline_global_sgi = FALSE; 00316 boolean noinline_global_sgi = FALSE; 00317 00318 int inline_path_idx = NULL_IDX; 00319 00320 boolean issue_overflow_msg_719 = TRUE; 00321 00322 long max_call_list_size = 0; 00323 long_type max_character_length = 0; 00324 00325 long mc_tbl[128]; 00326 char mod_out_path[MAX_FILE_NAME_SIZE]; 00327 00328 int module_path_idx = NULL_IDX; 00329 00330 boolean need_new_sh; 00331 boolean need_to_issue_719 = FALSE; 00332 00333 opnd_type null_opnd = INIT_OPND_TYPE; 00334 int num_ansi = 0; 00335 int num_cautions = 0; 00336 int num_comments = 0; 00337 int num_errors = 0; 00338 int num_notes = 0; 00339 int num_optz_msgs = 0; 00340 int num_warnings = 0; 00341 00342 int statement_number = 0; 00343 00344 int num_prog_unit_errors; 00345 int num_of_derived_types; 00346 00347 on_off_flags_type on_off_flags; 00348 opt_flags_type opt_flags; 00349 00350 char parse_operand_insert[40] = "operand"; 00351 int pgm_unit_start_line = 0; 00352 char preinline_file[MAX_FILE_NAME_SIZE]; 00353 int prev_statement_number = 0; 00354 char program_unit_name[MAX_ID_LEN+1] = 00355 UNNAMED_PROGRAM_NAME; 00356 00357 int sb_len[End_Name_Blk] = {5,6,10,8,11,5,4,12,6,6}; 00358 00359 # if defined(_NO_AT_SIGN_IN_NAMES) 00360 char *sb_name[End_Name_Blk] = { 00361 ".WHAT", 00362 ".BASED", 00363 ".DATA_INIT", 00364 ".POINTEE", 00365 ".STACK_HOST", 00366 ".DATA", 00367 ".SYM", 00368 ".DATA_UNINIT", 00369 ".STACK", 00370 ".DARGS"}; 00371 # else 00372 char *sb_name[End_Name_Blk] = { 00373 "@WHAT", 00374 "@BASED", 00375 "@DATA_INIT", 00376 "@POINTEE", 00377 "@STACK_HOST", 00378 "@DATA", 00379 "@SYM", 00380 "@DATA_UNINIT", 00381 "@STACK", 00382 "@DARGS"}; 00383 # endif 00384 00385 src_form_type source_form; 00386 char src_file[MAX_FILE_NAME_SIZE]; 00387 int stmt_end_col; 00388 int stmt_end_line; 00389 int stmt_label_idx; 00390 int stmt_start_col; 00391 int stmt_start_line; 00392 stmt_type_type stmt_type; 00393 00394 char *stmt_type_str[] = {"?????", 00395 "ALLOCATABLE", 00396 "AUTOMATIC", 00397 "COMMON", 00398 "CONTAINS", 00399 "component-def-stmt", 00400 "DATA", 00401 "TYPE type-name", 00402 "DIMENSION", 00403 "DIRECTIVE", 00404 "EQUIVALENCE", 00405 "EXTERNAL", 00406 "FORMAT", 00407 "IMPLICIT", 00408 "IMPLICIT NONE", 00409 "INTENT", 00410 "INTERFACE", 00411 "INTRINSIC", 00412 "MODULE PROCEDURE", 00413 "NAMELIST", 00414 "OPTIONAL", 00415 "PARAMETER", 00416 "POINTER", 00417 "PRIVATE", 00418 "PUBLIC", 00419 "SAVE", 00420 "SEQUENCE", 00421 "statement-function", 00422 "TARGET", 00423 "TASK COMMON", 00424 "type-declaration", 00425 "USE", 00426 00427 "BLOCKDATA", 00428 "ELEMENTAL", 00429 "FUNCTION", 00430 "MODULE", 00431 "PROGRAM", 00432 "PURE", 00433 "RECURSIVE", 00434 "SUBROUTINE", 00435 00436 "END BLOCKDATA", 00437 "END DO", 00438 "END FUNCTION", 00439 "END IF", 00440 "END INTERFACE", 00441 "END MODULE", 00442 "END PROGRAM", 00443 "END SELECT", 00444 "END", 00445 "END SUBROUTINE", 00446 "END TYPE", 00447 "END WHERE", 00448 00449 "ALLOCATE", 00450 "arithmetic IF", 00451 "ASSIGN", 00452 "assignment", 00453 "BACKSPACE", 00454 "BUFFER", 00455 "CALL", 00456 "CASE", 00457 "CLOSE", 00458 "CONTINUE", 00459 "CYCLE", 00460 "DEALLOCATE", 00461 "DECODE", 00462 "DO", 00463 "DO WHILE", 00464 "DO", 00465 "ELSE", 00466 "ELSE IF", 00467 "ELSE WHERE", 00468 "ENCODE", 00469 "ENDFILE", 00470 "ENTRY", 00471 "EXIT", 00472 "GO TO", 00473 "IF THEN", 00474 "IF", 00475 "INQUIRE", 00476 "NULLIFY", 00477 "OPEN", 00478 "Outmoded IF", 00479 "PAUSE", 00480 "PRINT", 00481 "READ", 00482 "RETURN", 00483 "REWIND", 00484 "SELECT CASE", 00485 "STOP", 00486 "THEN", 00487 "WHERE construct", 00488 "WHERE", 00489 "WRITE", 00490 "Type Init", 00491 00492 "Label Def", 00493 "Construct Def", 00494 "Automatic Base Calc", 00495 "Automatic Base Size", 00496 00497 "END PARALLEL", 00498 "END DO PARALLEL", 00499 "END PARALLEL CASE", 00500 "PARALLEL CASE", 00501 "END GUARD", 00502 "STATEMENT NUM", 00503 "SECTION", 00504 "END PSECTION", 00505 "END PDO", 00506 "SGI END PARALLEL", 00507 "END CRITICAL SECTION", 00508 "END SINGLE PROCESS", 00509 "REGION END", 00510 "OPEN MP SECTION", 00511 "OPEN MP END PARALLEL", 00512 "OPEN MP END DO", 00513 "OPEN MP END PARALLEL SECTIONS", 00514 "OPEN MP END SECTIONS", 00515 "OPEN MP END SECTION", 00516 "OPEN MP END SINGLE", 00517 "OPEN MP END PARALLEL DO", 00518 "OPEN MP END MASTER", 00519 "OPEN MP END CRITICAL", 00520 "OPEN MP END ORDERED", 00521 "OPEN MP END PARALLEL WORKSHARE", 00522 "OPEN MP END WORKSHARE", 00523 "FORALL Construct", 00524 "FORALL", 00525 "END FORALL", 00526 "ELSE WHERE MASK", 00527 "VOLATILE" 00528 }; 00529 00530 target_machine_type target_machine; 00531 boolean target_ieee = FALSE; 00532 int target_safevl = DEFAULT_SAFEVL; 00533 boolean target_sv1 = FALSE; 00534 boolean target_triton = FALSE; 00535 boolean target_t3e = FALSE; 00536 int target_os; 00537 boolean host_ieee = FALSE; 00538 long true_value = -1; 00539 00540 00541 00542 00543 /***************************************************\ 00544 |* globally accessible objects defined in tokens.h *| 00545 \***************************************************/ 00546 00547 la_type la_ch; 00548 token_type token; 00549 00550 00551 00552 /******************************************************\ 00553 |* globally accessible objects defined in src_input.h *| 00554 \******************************************************/ 00555 00556 boolean sig_blank = FALSE; 00557 la_type stmt_EOS_la_ch = {EOS, 00558 Ch_Class_EOS, 00559 0, 00560 0 00561 }; 00562 00563 /**************************************************************************\ 00564 |* Variables global to s_io.c and p_io.c. *| 00565 \**************************************************************************/ 00566 00567 boolean is_namelist; 00568 int imp_do_var_list = NULL_IDX; 00569 boolean two_word_fcd; 00570 boolean char_len_in_bytes; 00571 00572 /**************************************************************************\ 00573 |* Variables global to s_asg_expr.c and s_utils.c *| 00574 \**************************************************************************/ 00575 00576 boolean in_call_list = FALSE; 00577 boolean in_branch_true = FALSE; 00578 boolean defer_stmt_expansion = FALSE; 00579 boolean no_func_expansion = FALSE; 00580 00581 int number_of_functions = 0; 00582 boolean io_item_must_flatten = FALSE; 00583 boolean tree_has_constructor = FALSE; 00584 00585 boolean in_implied_do = FALSE; 00586 00587 boolean in_constructor = FALSE; 00588 00589 boolean in_io_list = FALSE; 00590 00591 boolean comp_gen_expr = FALSE; 00592 00593 boolean parsing_kind_selector = FALSE; 00594 00595 long message_error_tbl[MAX_MSG_SIZE]; 00596 long message_suppress_tbl[MAX_MSG_SIZE]; 00597 long message_warning_tbl[MAX_MSG_SIZE]; 00598 00599 /*****************************************\ 00600 |* used for COPY_ASSUMED_SHAPE directive *| 00601 \*****************************************/ 00602 00603 int shared_bd_idx = NULL_IDX; 00604 boolean reassign_XT_temps = FALSE; 00605 00606 /**************************************************************************\ 00607 |* global cdir switches for use in all passes. *| 00608 \**************************************************************************/ 00609 00610 cdir_switch_type cdir_switches; 00611 00612 /**************************************************************************\ 00613 |* global idx for where mask temporary. *| 00614 \**************************************************************************/ 00615 00616 int where_ir_idx = NULL_IDX; 00617 int where_dealloc_stmt_idx = NULL_IDX; 00618 00619 /**************************************************************************\ 00620 |* global variable for xref cif states. *| 00621 \**************************************************************************/ 00622 00623 cif_usage_code_type xref_state; 00624 00625 /**************************************************************************\ 00626 |* global variables for constant constructor type conversions *| 00627 \**************************************************************************/ 00628 00629 boolean check_type_conversion = FALSE; 00630 int target_type_idx; 00631 int target_char_len_idx; 00632 int target_array_idx = NULL_IDX; 00633 00634 boolean insert_subs_ok = TRUE; 00635 00636 00637 /********************************************************************\ 00638 |* Get at catastrophic error routine in cif.c. *| 00639 \********************************************************************/ 00640 00641 extern void cif_fake_a_unit (void); 00642 00643 /* LRR: Temporarily declare this here until we move to a single .T then e */ 00644 /* remove this and the code that references it. */ 00645 00646 extern FILE *tmp_msg_file; 00647 00648 00649 00650 /**************************************************\ 00651 |* parameters used to define symbol and ir tables *| 00652 \**************************************************/ 00653 00654 /* NOTE: ..._idx always points to the last used entry in the table. */ 00655 00656 attr_list_tbl_type * RESTRICT attr_list_tbl; 00657 int attr_list_tbl_idx = NULL_IDX; 00658 int attr_list_tbl_inc = 50; 00659 int attr_list_tbl_init_size = 100; 00660 int attr_list_tbl_limit = (1 << 16) - 1; 00661 int attr_list_tbl_num_wds = NUM_AL_WDS; 00662 int attr_list_tbl_size = 0; 00663 int attr_list_tbl_largest_idx = NULL_IDX; 00664 00665 attr_tbl_type * RESTRICT attr_tbl; 00666 int attr_tbl_idx = NULL_IDX; 00667 int attr_tbl_inc = 500; 00668 int attr_tbl_init_size = 1000; 00669 int attr_tbl_limit = (1 << 20) - 1; 00670 int attr_tbl_num_wds = NUM_AT_WDS; 00671 int attr_tbl_size = 0; 00672 int attr_tbl_largest_idx = NULL_IDX; 00673 00674 attr_aux_tbl_type * RESTRICT attr_aux_tbl; 00675 int attr_aux_tbl_idx = NULL_IDX; 00676 int attr_aux_tbl_inc = 500; 00677 int attr_aux_tbl_init_size = 1000; 00678 int attr_aux_tbl_limit = (1 << 20) - 1; 00679 int attr_aux_tbl_num_wds = NUM_AA_WDS; 00680 int attr_aux_tbl_size = 0; 00681 int attr_aux_tbl_largest_idx = NULL_IDX; 00682 00683 bounds_tbl_type * RESTRICT bounds_tbl; 00684 int bounds_tbl_idx = BD_LAST_USED_IDX; 00685 int bounds_tbl_inc = 100; 00686 int bounds_tbl_init_size = 100; 00687 int bounds_tbl_limit = (1 << 20) - 1; 00688 int bounds_tbl_num_wds = NUM_BD_WDS; 00689 int bounds_tbl_size = 0; 00690 int bounds_tbl_largest_idx = BD_LAST_USED_IDX; 00691 00692 const_pool_type * RESTRICT const_pool; 00693 int const_pool_idx = NULL_IDX; 00694 int const_pool_inc = 500; 00695 int const_pool_init_size = 500; 00696 int const_pool_limit = (1 << 24) - 1; 00697 int const_pool_num_wds = NUM_CP_WDS; 00698 int const_pool_size = 0; 00699 int const_pool_largest_idx = NULL_IDX; 00700 00701 00702 /* This is only used by ntr_abnormal_ieee_const but it needs to be here so */ 00703 /* it can be initialized for each program unit. */ 00704 00705 int ieee_const_tbl_idx[18]; 00706 00707 00708 const_tbl_type * RESTRICT const_tbl; 00709 int const_tbl_idx = NULL_IDX; 00710 int const_tbl_inc = 1000; 00711 int const_tbl_init_size = 1000; 00712 int const_tbl_limit = (1 << 24) - 1; 00713 int const_tbl_num_wds = NUM_CN_WDS; 00714 int const_tbl_size = 0; 00715 int const_tbl_largest_idx = NULL_IDX; 00716 00717 int cn_root_idx[Num_Linear_Types]; 00718 00719 equiv_tbl_type * RESTRICT equiv_tbl; 00720 int equiv_tbl_idx = NULL_IDX; 00721 int equiv_tbl_inc = 100; 00722 int equiv_tbl_init_size = 100; 00723 int equiv_tbl_limit = (1 << 16) - 1; 00724 int equiv_tbl_num_wds = NUM_EQ_WDS; 00725 int equiv_tbl_size = 0; 00726 int equiv_tbl_largest_idx = NULL_IDX; 00727 00728 /* file_path_tbl_size is set to non-zero, because TBL_ALLOC is used */ 00729 /* to allocate this table, rather than CHECK_INITIAL_ALLOC which */ 00730 /* expects mod_file_tbl_size to be zero. */ 00731 00732 file_path_tbl_type * RESTRICT file_path_tbl; 00733 int file_path_tbl_idx = NULL_IDX; 00734 int file_path_tbl_inc = 10; 00735 int file_path_tbl_init_size = 30; 00736 int file_path_tbl_limit = (1 << 16) - 1; 00737 int file_path_tbl_num_wds = NUM_FP_WDS; 00738 int file_path_tbl_size = 30; 00739 int file_path_tbl_largest_idx = NULL_IDX; 00740 00741 global_attr_tbl_type * RESTRICT global_attr_tbl; 00742 int global_attr_tbl_idx = NULL_IDX; 00743 int global_attr_tbl_inc = 10; 00744 int global_attr_tbl_init_size = 20; 00745 int global_attr_tbl_limit = (1 << 20) - 1; 00746 int global_attr_tbl_num_wds = NUM_GA_WDS; 00747 int global_attr_tbl_size = 20; 00748 int global_attr_tbl_largest_idx = NULL_IDX; 00749 00750 global_bounds_tbl_type * RESTRICT global_bounds_tbl; 00751 int global_bounds_tbl_idx = NULL_IDX; 00752 int global_bounds_tbl_inc = 10; 00753 int global_bounds_tbl_init_size = 20; 00754 int global_bounds_tbl_limit = (1 << 16) - 1; 00755 int global_bounds_tbl_num_wds = NUM_GB_WDS; 00756 int global_bounds_tbl_size = 20; 00757 int global_bounds_tbl_largest_idx = NULL_IDX; 00758 00759 global_line_tbl_type * RESTRICT global_line_tbl; 00760 long global_line_tbl_idx = 0; 00761 int global_line_tbl_inc = 5; 00762 int global_line_tbl_init_size = 5; 00763 long global_line_tbl_limit = OUR_LONG_MAX; 00764 int global_line_tbl_num_wds = NUM_GL_WDS; 00765 long global_line_tbl_size = 5; 00766 long global_line_tbl_largest_idx = 1; 00767 00768 global_name_tbl_type * RESTRICT global_name_tbl; 00769 long global_name_tbl_idx = 0; 00770 int global_name_tbl_inc = 10; 00771 int global_name_tbl_init_size = 50; 00772 long global_name_tbl_limit = OUR_LONG_MAX; 00773 int global_name_tbl_num_wds = NUM_GN_WDS; 00774 long global_name_tbl_size = 50; 00775 long global_name_tbl_largest_idx = 1; 00776 00777 global_type_tbl_type * RESTRICT global_type_tbl; 00778 int global_type_tbl_idx = 0; 00779 int global_type_tbl_inc = 10; 00780 int global_type_tbl_init_size = 10; 00781 int global_type_tbl_limit = (1 << 16) - 1; 00782 int global_type_tbl_num_wds = NUM_TYP_WDS; 00783 int global_type_tbl_size = 10; 00784 int global_type_tbl_largest_idx = 1; 00785 00786 global_ir_tbl_type * RESTRICT global_ir_tbl = NULL; 00787 int global_ir_tbl_idx = NULL_IDX; 00788 int global_ir_tbl_inc = 100; 00789 int global_ir_tbl_init_size = 100; 00790 int global_ir_tbl_limit = (1 << 24) - 1; 00791 int global_ir_tbl_num_wds = NUM_IR_WDS; 00792 int global_ir_tbl_size = 100; 00793 int global_ir_tbl_largest_idx = NULL_IDX; 00794 00795 global_ir_list_tbl_type * RESTRICT global_ir_list_tbl = NULL; 00796 int global_ir_list_tbl_idx = NULL_IDX; 00797 int global_ir_list_tbl_inc = 100; 00798 int global_ir_list_tbl_init_size = 100; 00799 int global_ir_list_tbl_limit = (1 << 24) - 1; 00800 int global_ir_list_tbl_num_wds = NUM_IL_WDS; 00801 int global_ir_list_tbl_size = 100; 00802 int global_ir_list_tbl_largest_idx = NULL_IDX; 00803 00804 global_sh_tbl_type * RESTRICT global_sh_tbl = NULL; 00805 int global_sh_tbl_idx = NULL_IDX; 00806 int global_sh_tbl_inc = 100; 00807 int global_sh_tbl_init_size = 100; 00808 int global_sh_tbl_limit = (1 << 24) - 1; 00809 int global_sh_tbl_num_wds = NUM_SH_WDS; 00810 int global_sh_tbl_size = 100; 00811 int global_sh_tbl_largest_idx = NULL_IDX; 00812 00813 00814 loc_name_tbl_type * RESTRICT hidden_name_tbl; 00815 int hidden_name_tbl_idx = NULL_IDX; 00816 int hidden_name_tbl_inc = 100; 00817 int hidden_name_tbl_init_size = 500; 00818 int hidden_name_tbl_limit = (1 << 20) - 1; 00819 int hidden_name_tbl_num_wds = NUM_HN_WDS; 00820 int hidden_name_tbl_size = 0; 00821 int hidden_name_tbl_largest_idx = NULL_IDX; 00822 00823 ir_tbl_type * RESTRICT ir_tbl; 00824 int ir_tbl_idx = NULL_IDX; 00825 int ir_tbl_inc = 1000; 00826 int ir_tbl_init_size = 1000; 00827 int ir_tbl_limit = (1 << 24) - 1; 00828 int ir_tbl_num_wds = NUM_IR_WDS; 00829 int ir_tbl_size = 0; 00830 int ir_tbl_largest_idx = NULL_IDX; 00831 00832 ir_list_tbl_type * RESTRICT ir_list_tbl; 00833 int ir_list_tbl_idx = NULL_IDX; 00834 int ir_list_tbl_inc = 1000; 00835 int ir_list_tbl_init_size = 1000; 00836 int ir_list_tbl_limit = (1 << 24) - 1; 00837 int ir_list_tbl_num_wds = NUM_IL_WDS; 00838 int ir_list_tbl_size = 0; 00839 int ir_list_tbl_largest_idx = NULL_IDX; 00840 00841 loc_name_tbl_type * RESTRICT loc_name_tbl; 00842 int loc_name_tbl_idx = NULL_IDX; 00843 int loc_name_tbl_inc = 100; 00844 int loc_name_tbl_init_size = 500; 00845 int loc_name_tbl_limit = (1 << 20) - 1; 00846 int loc_name_tbl_num_wds = NUM_LN_WDS; 00847 int loc_name_tbl_size = 0; 00848 int loc_name_tbl_largest_idx = NULL_IDX; 00849 00850 mod_link_tbl_type * RESTRICT mod_link_tbl; 00851 long mod_link_tbl_idx = NULL_IDX; 00852 int mod_link_tbl_inc = 10; 00853 int mod_link_tbl_init_size = 0; 00854 long mod_link_tbl_limit = OUR_LONG_MAX; 00855 int mod_link_tbl_num_wds = NUM_ML_WDS; 00856 long mod_link_tbl_size = 0; 00857 long mod_link_tbl_largest_idx = NULL_IDX; 00858 00859 name_pool_type * RESTRICT name_pool; 00860 int name_pool_idx = NP_LAST_USED_IDX; 00861 int name_pool_inc = 500; 00862 int name_pool_init_size = 500; 00863 int name_pool_limit = (1 << 24) - 1; 00864 int name_pool_num_wds = NUM_NP_WDS; 00865 int name_pool_size = 0; 00866 int name_pool_largest_idx = NP_LAST_USED_IDX; 00867 00868 pdg_link_tbl_type * RESTRICT pdg_link_tbl; 00869 long pdg_link_tbl_idx = NULL_IDX; 00870 int pdg_link_tbl_inc = 0; 00871 int pdg_link_tbl_init_size = 0; 00872 long pdg_link_tbl_limit = OUR_LONG_MAX; 00873 int pdg_link_tbl_num_wds = NUM_PDG_WDS; 00874 long pdg_link_tbl_size = 0; 00875 long pdg_link_tbl_largest_idx = NULL_IDX; 00876 00877 rename_only_tbl_type * RESTRICT rename_only_tbl; 00878 int rename_only_tbl_idx = NULL_IDX; 00879 int rename_only_tbl_inc = 5; 00880 int rename_only_tbl_init_size = 0; 00881 int rename_only_tbl_num_wds = NUM_RO_WDS; 00882 int rename_only_tbl_limit = (1 << 12) - 1; 00883 int rename_only_tbl_size = 0; 00884 int rename_only_tbl_largest_idx = NULL_IDX; 00885 00886 scp_tbl_type * RESTRICT scp_tbl; 00887 int scp_tbl_idx = NULL_IDX; 00888 int scp_tbl_inc = 2; 00889 int scp_tbl_init_size = 5; 00890 int scp_tbl_limit = (1 << 16) - 1; 00891 int scp_tbl_num_wds = NUM_SCP_WDS; 00892 int scp_tbl_size = 0; 00893 int scp_tbl_largest_idx = NULL_IDX; 00894 00895 sec_name_tbl_type * RESTRICT sec_name_tbl; 00896 int sec_name_tbl_idx = NULL_IDX; 00897 int sec_name_tbl_inc = 500; 00898 int sec_name_tbl_init_size = 1000; 00899 int sec_name_tbl_limit = (1 << 24) - 1; 00900 int sec_name_tbl_num_wds = NUM_SN_WDS; 00901 int sec_name_tbl_size = 0; 00902 int sec_name_tbl_largest_idx = NULL_IDX; 00903 00904 sh_tbl_type * RESTRICT sh_tbl; 00905 int sh_tbl_idx = NULL_IDX; 00906 int sh_tbl_inc = 1000; 00907 int sh_tbl_init_size = 1000; 00908 int sh_tbl_limit = (1 << 24) - 1; 00909 int sh_tbl_num_wds = NUM_SH_WDS; 00910 int sh_tbl_size = 0; 00911 int sh_tbl_largest_idx = NULL_IDX; 00912 00913 stor_blk_tbl_type * RESTRICT stor_blk_tbl; 00914 int stor_blk_tbl_idx = NULL_IDX; 00915 int stor_blk_tbl_inc = 10; 00916 int stor_blk_tbl_init_size = 40; 00917 int stor_blk_tbl_limit = (1 << 16) - 1; 00918 int stor_blk_tbl_num_wds = NUM_SB_WDS; 00919 int stor_blk_tbl_size = 0; 00920 int stor_blk_tbl_largest_idx = NULL_IDX; 00921 00922 name_pool_type * RESTRICT str_pool; 00923 int str_pool_idx = NULL_IDX; 00924 int str_pool_inc = 50; 00925 int str_pool_init_size = 100; 00926 int str_pool_limit = (1 << 20) - 1; 00927 int str_pool_num_wds = NUM_NP_WDS; 00928 int str_pool_size = 100; 00929 int str_pool_largest_idx = NULL_IDX; 00930 00931 type_tbl_type * RESTRICT type_tbl; 00932 int type_tbl_idx = TYP_LAST_USED_IDX; 00933 int type_tbl_inc = 20; 00934 int type_tbl_init_size = 100; 00935 int type_tbl_limit = (1 << 16) - 1; 00936 int type_tbl_num_wds = NUM_TYP_WDS; 00937 int type_tbl_size = 0; 00938 int type_tbl_largest_idx = NULL_IDX; 00939 00940 /******************************************************************************\ 00941 |* conversion table for fe90 linear type to arith.a types. *| 00942 \******************************************************************************/ 00943 00944 # ifdef _ARITH_H 00945 00946 # if defined(_TARGET32) || defined(_WHIRL_HOST64_TARGET64) 00947 00948 long linear_to_arith[Num_Linear_Types] = { 00949 /* Err_Res */ 0, 00950 /* Short_Char_Const */ AR_Int_32_S, 00951 /* Short_Typeless_Const */ AR_Int_32_S, 00952 /* Typeless_1 */ AR_Int_32_S, 00953 /* Typeless_2 */ AR_Int_32_S, 00954 /* Typeless_4 */ AR_Int_32_S, 00955 /* Typeless_8 */ AR_Int_64_S, 00956 /* Long_Typeless */ 0, 00957 /* Integer_1 */ AR_Int_32_S, 00958 /* Integer_2 */ AR_Int_32_S, 00959 /* Integer_4 */ AR_Int_32_S, 00960 /* Integer_8 */ AR_Int_64_S, 00961 /* Real_4 */ AR_Float_IEEE_NR_32, 00962 /* Real_8 */ AR_Float_IEEE_NR_64, 00963 /* Real_16 */ AR_Float_IEEE_NR_128, 00964 /* Complex_4 */ AR_Complex_IEEE_NR_32, 00965 /* Complex_8 */ AR_Complex_IEEE_NR_64, 00966 /* Complex_16 */ AR_Complex_IEEE_NR_128, 00967 /* CRI_Ptr_8 */ 0, 00968 /* Logical_1 */ AR_Logical, 00969 /* Logical_2 */ AR_Logical, 00970 /* Logical_4 */ AR_Logical, 00971 /* Logical_8 */ AR_Logical, 00972 /* Character_1 */ 0, 00973 /* Character_2 */ 0, 00974 /* Character_4 */ 0, 00975 /* CRI_Ch_Ptr_8 */ 0, 00976 /* Structure_Type */ 0, 00977 /* CRI_Parcel_Ptr_8 */ 0 00978 }; 00979 00980 # else 00981 00982 /* _TARGET64 */ 00983 long linear_to_arith[Num_Linear_Types] = { 00984 /* Err_Res */ 0, 00985 /* Short_Char_Const */ AR_Int_64_S, 00986 /* Short_Typeless_Const */ AR_Int_64_S, 00987 /* Typeless_1 */ AR_Int_32_S, 00988 /* Typeless_2 */ AR_Int_32_S, 00989 /* Typeless_4 */ AR_Int_32_S, 00990 /* Typeless_8 */ AR_Int_64_S, 00991 /* Long_Typeless */ 0, 00992 # ifdef _TARGET_OS_MAX 00993 /* Integer_1 */ AR_Int_32_S, 00994 /* Integer_2 */ AR_Int_32_S, 00995 /* Integer_4 */ AR_Int_32_S, 00996 # else 00997 /* Integer_1 */ AR_Int_64_S, 00998 /* Integer_2 */ AR_Int_64_S, 00999 /* Integer_4 */ AR_Int_64_S, 01000 # endif 01001 /* Integer_8 */ AR_Int_64_S, 01002 /* Real_4 */ AR_Float_Cray1_64, 01003 /* Real_8 */ AR_Float_Cray1_64, 01004 /* Real_16 */ AR_Float_Cray1_128, 01005 /* Complex_4 */ AR_Complex_Cray1_64, 01006 /* Complex_8 */ AR_Complex_Cray1_64, 01007 /* Complex_16 */ AR_Complex_Cray1_128, 01008 /* CRI_Ptr_8 */ 0, 01009 /* Logical_1 */ AR_Logical, 01010 /* Logical_2 */ AR_Logical, 01011 /* Logical_4 */ AR_Logical, 01012 /* Logical_8 */ AR_Logical, 01013 /* Character_1 */ 0, 01014 /* Character_2 */ 0, 01015 /* Character_4 */ 0, 01016 /* CRI_Ch_Ptr_8 */ 0, 01017 /* Structure_Type */ 0, 01018 /* CRI_Parcel_Ptr_8 */ 0 01019 }; 01020 # endif 01021 01022 # if defined(_TARGET32) || defined(_WHIRL_HOST64_TARGET64) 01023 01024 long input_arith_type[Num_Linear_Types] = { 01025 /* Err_Res */ 0, 01026 /* Short_Char_Const */ 0, 01027 /* Short_Typeless_Const */ 0, 01028 /* Typeless_1 */ 0, 01029 /* Typeless_2 */ 0, 01030 /* Typeless_4 */ 0, 01031 /* Typeless_8 */ 0, 01032 /* Long_Typeless */ 0, 01033 /* Integer_1 */ AR_Int_32_U, 01034 /* Integer_2 */ AR_Int_32_U, 01035 /* Integer_4 */ AR_Int_32_U, 01036 /* Integer_8 */ AR_Int_64_U, 01037 /* Real_4 */ AR_Float_IEEE_NR_32, 01038 /* Real_8 */ AR_Float_IEEE_NR_64, 01039 /* Real_16 */ AR_Float_IEEE_NR_128, 01040 /* Complex_4 */ AR_Complex_IEEE_NR_32, 01041 /* Complex_8 */ AR_Complex_IEEE_NR_64, 01042 /* Complex_16 */ AR_Complex_IEEE_NR_128, 01043 /* CRI_Ptr_8 */ 0, 01044 /* Logical_1 */ 0, 01045 /* Logical_2 */ 0, 01046 /* Logical_4 */ 0, 01047 /* Logical_8 */ 0, 01048 /* Character_1 */ 0, 01049 /* Character_2 */ 0, 01050 /* Character_4 */ 0, 01051 /* CRI_Ch_Ptr_8 */ 0, 01052 /* Structure_Type */ 0, 01053 /* CRI_Parcel_Ptr_8 */ 0 01054 }; 01055 01056 char arith_type_string[Num_Linear_Types][25] = { 01057 /* Err_Res */ "", 01058 /* Short_Char_Const */ "", 01059 /* Short_Typeless_Const */ "", 01060 /* Typeless_1 */ "", 01061 /* Typeless_2 */ "", 01062 /* Typeless_4 */ "", 01063 /* Typeless_8 */ "", 01064 /* Long_Typeless */ "", 01065 /* Integer_1 */ "AR_Int_32_U", 01066 /* Integer_2 */ "AR_Int_32_U", 01067 /* Integer_4 */ "AR_Int_32_U", 01068 /* Integer_8 */ "AR_Int_64_U", 01069 /* Real_4 */ "AR_Float_IEEE_NR_32", 01070 /* Real_8 */ "AR_Float_IEEE_NR_64", 01071 /* Real_16 */ "AR_Float_IEEE_NR_128", 01072 /* Complex_4 */ "AR_Complex_IEEE_NR_32", 01073 /* Complex_8 */ "AR_Complex_IEEE_NR_64", 01074 /* Complex_16 */ "AR_Complex_IEEE_NR_128", 01075 /* CRI_Ptr_8 */ "", 01076 /* Logical_1 */ "", 01077 /* Logical_2 */ "", 01078 /* Logical_4 */ "", 01079 /* Logical_8 */ "", 01080 /* Character_1 */ "", 01081 /* Character_2 */ "", 01082 /* Character_4 */ "", 01083 /* CRI_Ch_Ptr_8 */ "", 01084 /* Structure_Type */ "", 01085 /* CRI_Parcel_Ptr_8 */ "" 01086 }; 01087 01088 # else 01089 01090 /* _TARGET64 */ 01091 long input_arith_type[Num_Linear_Types] = { 01092 /* Err_Res */ 0, 01093 /* Short_Char_Const */ 0, 01094 /* Short_Typeless_Const */ 0, 01095 /* Typeless_1 */ 0, 01096 /* Typeless_2 */ 0, 01097 /* Typeless_4 */ 0, 01098 /* Typeless_8 */ 0, 01099 /* Long_Typeless */ 0, 01100 # ifdef _TARGET_OS_MAX 01101 /* Integer_1 */ AR_Int_32_U, 01102 /* Integer_2 */ AR_Int_32_U, 01103 /* Integer_4 */ AR_Int_32_U, 01104 # else 01105 /* Integer_1 */ AR_Int_64_U, 01106 /* Integer_2 */ AR_Int_64_U, 01107 /* Integer_4 */ AR_Int_64_U, 01108 # endif 01109 /* Integer_8 */ AR_Int_64_U, 01110 /* Real_4 */ AR_Float_Cray1_64, 01111 /* Real_8 */ AR_Float_Cray1_64, 01112 /* Real_16 */ AR_Float_Cray1_128, 01113 /* Complex_4 */ AR_Complex_Cray1_64, 01114 /* Complex_8 */ AR_Complex_Cray1_64, 01115 /* Complex_16 */ AR_Complex_Cray1_128, 01116 /* CRI_Ptr_8 */ 0, 01117 /* Logical_1 */ 0, 01118 /* Logical_2 */ 0, 01119 /* Logical_4 */ 0, 01120 /* Logical_8 */ 0, 01121 /* Character_1 */ 0, 01122 /* Character_2 */ 0, 01123 /* Character_4 */ 0, 01124 /* CRI_Ch_Ptr_8 */ 0, 01125 /* Structure_Type */ 0, 01126 /* CRI_Parcel_Ptr_8 */ 0 01127 }; 01128 01129 char arith_type_string[Num_Linear_Types][25] = { 01130 /* Err_Res */ "", 01131 /* Short_Char_Const */ "", 01132 /* Short_Typeless_Const */ "", 01133 /* Typeless_1 */ "", 01134 /* Typeless_2 */ "", 01135 /* Typeless_4 */ "", 01136 /* Typeless_8 */ "", 01137 /* Long_Typeless */ "", 01138 # ifdef _TARGET_OS_MAX 01139 /* Integer_1 */ "AR_Int_32_U", 01140 /* Integer_2 */ "AR_Int_32_U", 01141 /* Integer_4 */ "AR_Int_32_U", 01142 # else 01143 /* Integer_1 */ "AR_Int_64_U", 01144 /* Integer_2 */ "AR_Int_64_U", 01145 /* Integer_4 */ "AR_Int_64_U", 01146 # endif 01147 /* Integer_8 */ "AR_Int_64_U", 01148 /* Real_4 */ "AR_Float_Cray1_64", 01149 /* Real_8 */ "AR_Float_Cray1_64", 01150 /* Real_16 */ "AR_Float_Cray1_128", 01151 /* Complex_4 */ "AR_Complex_Cray1_64", 01152 /* Complex_8 */ "AR_Complex_Cray1_64", 01153 /* Complex_16 */ "AR_Complex_Cray1_128", 01154 /* CRI_Ptr_8 */ "", 01155 /* Logical_1 */ "", 01156 /* Logical_2 */ "", 01157 /* Logical_4 */ "", 01158 /* Logical_8 */ "", 01159 /* Character_1 */ "", 01160 /* Character_2 */ "", 01161 /* Character_4 */ "", 01162 /* CRI_Ch_Ptr_8 */ "", 01163 /* Structure_Type */ "", 01164 /* CRI_Parcel_Ptr_8 */ "" 01165 }; 01166 01167 # endif 01168 01169 # endif 01170 01171 01172 01173 /***************************************\ 01174 |* These tables are from s_asg_expr.h. *| 01175 \***************************************/ 01176 01177 extern exp_tbl_type eq_ne_tbl[Num_Linear_Types][Num_Linear_Types]; 01178 extern exp_tbl_type lg_tbl[Num_Linear_Types][Num_Linear_Types]; 01179 extern exp_tbl_type gt_lt_tbl[Num_Linear_Types][Num_Linear_Types]; 01180 01181 extern void preprocess_only_driver(void); 01182 01183 01184 01185 /*******************************************\ 01186 |* Stuff that is needed globally in main.c *| 01187 \*******************************************/ 01188 01189 static int some_scp_in_err; 01190 01191 boolean directives_are_global = TRUE; 01192 boolean insert_global_directives = FALSE; 01193 01194 boolean label_allowed = FALSE; 01195 01196 int curr_stmt_stk_il_idx = NULL_IDX; 01197 01198 int active_forall_sh_idx = NULL_IDX; 01199 boolean within_forall_construct = FALSE; 01200 boolean within_forall_mask_expr = FALSE; 01201 01202 int alloc_block_start_idx = NULL_IDX; 01203 int alloc_block_end_idx = NULL_IDX;