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/p_globals.h 5.3 07/19/99 12:03:43\n" */ 00038 00039 00040 /******************************************************************************/ 00041 /* DATA STRUCTURES DEPENDENT ON THE FOLLOWING ENUMERATION: */ 00042 /* stmt_in_blk DEFINED IN p_driver.h */ 00043 /* blk_err_msgs DEFINED IN p_driver.h */ 00044 /* blk_struct_str DEFINED IN debug.h */ 00045 /* blk_stk (entry size) DEFINED IN p_globals.h */ 00046 /* end_blocks DEFINED IN p_end.h */ 00047 /******************************************************************************/ 00048 00049 enum blk_cntxt_values {Unknown_Blk, 00050 Blockdata_Blk, 00051 Module_Blk, 00052 Program_Blk, 00053 Function_Blk, 00054 Subroutine_Blk, 00055 Internal_Blk, 00056 Module_Proc_Blk, 00057 Interface_Body_Blk, 00058 Do_Blk, 00059 Forall_Blk, 00060 If_Blk, 00061 If_Then_Blk, 00062 If_Else_If_Blk, 00063 If_Else_Blk, 00064 Select_Blk, 00065 Case_Blk, 00066 Where_Then_Blk, 00067 Where_Else_Blk, 00068 Where_Else_Mask_Blk, 00069 Parallel_Blk, 00070 Doall_Blk, 00071 Do_Parallel_Blk, 00072 Guard_Blk, 00073 Parallel_Case_Blk, 00074 Wait_Blk, 00075 SGI_Doacross_Blk, 00076 SGI_Psection_Blk, 00077 SGI_Section_Blk, 00078 SGI_Pdo_Blk, 00079 SGI_Parallel_Do_Blk, 00080 SGI_Parallel_Blk, 00081 SGI_Critical_Section_Blk, 00082 SGI_Single_Process_Blk, 00083 SGI_Region_Blk, 00084 Open_Mp_Parallel_Blk, 00085 Open_Mp_Do_Blk, 00086 Open_Mp_Parallel_Sections_Blk, 00087 Open_Mp_Sections_Blk, 00088 Open_Mp_Section_Blk, 00089 Open_Mp_Single_Blk, 00090 Open_Mp_Parallel_Do_Blk, 00091 Open_Mp_Master_Blk, 00092 Open_Mp_Critical_Blk, 00093 Open_Mp_Ordered_Blk, 00094 Open_Mp_Parallel_Workshare_Blk, 00095 Open_Mp_Workshare_Blk, 00096 Contains_Blk, 00097 Interface_Blk, 00098 Derived_Type_Blk }; 00099 00100 enum do_loop_values {Unknown_Loop, 00101 Iterative_Loop, 00102 While_Loop, 00103 Infinite_Loop }; 00104 00105 enum expr_values {Expr_Unknown, 00106 Scalar_Int_Init_Expr, 00107 Scalar_Int_Expr, /* specification-expr */ 00108 Scalar_Init_Expr, 00109 Scalar_Expr 00110 }; 00111 00112 00113 enum directive_region_values {Parallel_Region, 00114 Doall_Region, 00115 Do_Parallel_Region, 00116 Guard_Region, 00117 Case_Region, 00118 Region_Region, 00119 Sgi_Parallel_Region, 00120 Doacross_Region, 00121 Parallel_Do_Region, 00122 Pdo_Region, 00123 Parallel_Section_Region, 00124 Critical_Section_Region, 00125 Single_Process_Region, 00126 Open_Mp_Parallel_Region, 00127 Open_Mp_Do_Region, 00128 Open_Mp_Parallel_Sections_Region, 00129 Open_Mp_Sections_Region, 00130 Open_Mp_Section_Region, 00131 Open_Mp_Single_Region, 00132 Open_Mp_Parallel_Do_Region, 00133 Open_Mp_Master_Region, 00134 Open_Mp_Critical_Region, 00135 Open_Mp_Ordered_Region, 00136 Open_Mp_Parallel_Workshare_Region, 00137 Open_Mp_Workshare_Region, 00138 00139 /* eraxxon: OpenAD directive - no regions */ 00140 00141 Last_Region}; 00142 00143 00144 00145 /* ************************************************************************** */ 00146 /* */ 00147 /* The following enum definition is used to determine how to form the name */ 00148 /* of an internal loop label (see parse_do_stmt and end_do_blk). */ 00149 /* */ 00150 /* ************************************************************************** */ 00151 00152 enum lbl_pos_values { Top_Lbl, Cycle_Lbl, Exit_Lbl, Skip_Lbl }; 00153 00154 00155 /* ************************************************************************** */ 00156 /* */ 00157 /* The following enum definition is used to determine the type of Forward */ 00158 /* Reference entry to generate for a forward reference to a stmt label. */ 00159 /* */ 00160 /* ************************************************************************** */ 00161 00162 enum lbl_ref_values {Illegal_Lbl_Ref_Value, 00163 Branch_Context, 00164 Format_Ref, 00165 Assign_Ref, 00166 Do_Ref}; 00167 00168 00169 /* ************************************************************************** */ 00170 /* */ 00171 /* NOTE: All Comma searches must be at the end of the list and come after */ 00172 /* Find_Comma. */ 00173 /* */ 00174 /* ************************************************************************** */ 00175 00176 enum search_values {Find_None, 00177 Find_EOS, 00178 Find_Lparen, 00179 Find_Rparen, 00180 Find_Matching_Rparen, 00181 Find_Comma, 00182 Find_Comma_Slash, 00183 Find_Comma_Rparen, 00184 Find_Expr_End, 00185 Find_Ref_End 00186 }; 00187 00188 00189 enum stmt_category_values {Init_Stmt_Cat, 00190 Sub_Func_Stmt_Cat, 00191 Dir_Integer_Stmt_Cat, 00192 Use_Stmt_Cat, 00193 Implicit_None_Stmt_Cat, 00194 Implicit_Stmt_Cat, 00195 Declaration_Stmt_Cat, 00196 Executable_Stmt_Cat }; 00197 00198 typedef enum blk_cntxt_values blk_cntxt_type; 00199 typedef union blk_stk_entry blk_stk_type; 00200 typedef enum do_loop_values do_loop_type; 00201 typedef enum expr_values expr_type; 00202 typedef enum lbl_pos_values lbl_pos_type; 00203 typedef enum lbl_ref_values lbl_ref_type; 00204 typedef enum search_values search_type; 00205 typedef enum stmt_category_values stmt_category_type; 00206 00207 00208 /******************************************************************************/ 00209 /* */ 00210 /* Block Stack Entry Definition */ 00211 /* */ 00212 /* If you change the definition of this entry, be sure to also update the */ 00213 /* block stack entry size in sytb.m. */ 00214 /* */ 00215 /******************************************************************************/ 00216 00217 union blk_stk_entry { 00218 struct { 00219 Uint def_line : 24; 00220 Uint def_column : 8; 00221 Uint name_idx : 20; 00222 boolean parallel_region : 1; 00223 boolean blk_err : 1; 00224 boolean no_exec : 1; 00225 boolean fnd_default : 1; 00226 blk_cntxt_type blk_type : 8; 00227 00228 Uint first_sh_idx : 24; 00229 Uint UNUSED2 : 8; 00230 Uint UNUSED3 : 8; 00231 Uint label_idx : 24; 00232 00233 opnd_type multiuse_opnd ; 00234 00235 Uint top_lbl_idx : 20; 00236 Uint loop_num : 12; 00237 boolean has_cycle_stmt : 1; 00238 boolean has_exit_stmt : 1; 00239 boolean has_nested_loop : 1; 00240 boolean blkbl_nest_ok : 1; 00241 do_loop_type do_type : 4; 00242 Uint skip_lbl_idx : 24; 00243 00244 Uint start_temp_idx : 24; 00245 Uint UNUSED8 : 8; 00246 Uint UNUSED9 : 12; 00247 Uint inc_temp_idx : 20; 00248 00249 Uint induc_temp_idx : 24; 00250 Uint UNUSED10 : 8; 00251 Uint UNUSED11 : 8; 00252 Uint tc_temp_idx : 24; 00253 00254 Uint blkbl_dir_sh_idx : 24; 00255 Uint blkbl_num_lcvs : 8; 00256 Uint intchg_num_lcvs : 8; 00257 Uint intchg_dir_sh_idx : 24; 00258 00259 Uint UNUSED12 : 24; 00260 Uint UNUSED13 : 8; 00261 Uint dir_nest_num_lcvs : 8; 00262 Uint dir_nest_ck_sh_idx: 24; 00263 } fld; 00264 00265 struct { 00266 Uint field32_1 : 32; 00267 Uint field32_2 : 32; 00268 00269 Uint field32_3 : 32; 00270 Uint field32_4 : 32; 00271 00272 Uint field32_5_1 : 16; 00273 Uint field32_5_2 : 16; 00274 Uint field32_6_1 : 16; 00275 Uint field32_6_2 : 16; 00276 00277 Uint field32_7 : 32; 00278 Uint field32_8 : 32; 00279 00280 Uint field32_9 : 32; 00281 Uint field32_10 : 32; 00282 00283 Uint field32_11 : 32; 00284 Uint field32_12 : 32; 00285 00286 Uint field32_13 : 32; 00287 Uint field32_14 : 32; 00288 00289 Uint field32_15 : 32; 00290 Uint field32_16 : 32; 00291 } fld_long; 00292 00293 long wd[NUM_BLK_STK_WDS]; 00294 }; 00295 00296 00297 /******************************************************************************/ 00298 00299 /*****************************************\ 00300 |* PARSER ACCESSIBLE FUNCTION PROTOTYPES *| 00301 \*****************************************/ 00302 00303 extern int blk_match_err(blk_cntxt_type, boolean, boolean); 00304 extern void build_fwd_ref_entry (int, lbl_ref_type); 00305 extern char ch_after_paren_grp (void); 00306 extern void check_for_vestigial_task_blks(void); 00307 extern int check_label_ref (void); 00308 extern void complete_intrinsic_definition(int); 00309 extern void determine_stmt_type (void); 00310 extern boolean digit_is_format_label(void); 00311 extern void do_cmic_blk_checks(void); 00312 extern void end_critical_section_blk (boolean); 00313 extern void end_do_parallel_blk (boolean); 00314 extern void end_doacross_blk (boolean); 00315 extern void end_doall_blk (boolean); 00316 extern void end_guard_blk (boolean); 00317 extern void end_labeled_do (void); 00318 extern void end_open_mp_critical_blk (boolean); 00319 extern void end_open_mp_do_blk (boolean); 00320 extern void end_open_mp_master_blk (boolean); 00321 extern void end_open_mp_ordered_blk (boolean); 00322 extern void end_open_mp_parallel_blk (boolean); 00323 extern void end_open_mp_parallel_do_blk (boolean); 00324 extern void end_open_mp_parallel_sections_blk (boolean); 00325 extern void end_open_mp_parallel_workshare_blk (boolean); 00326 extern void end_open_mp_section_blk (boolean); 00327 extern void end_open_mp_sections_blk (boolean); 00328 extern void end_open_mp_single_blk (boolean); 00329 extern void end_open_mp_workshare_blk (boolean); 00330 extern void end_parallel_blk (boolean); 00331 extern void end_parallel_case_blk (boolean); 00332 extern void end_pdo_blk (boolean); 00333 extern void end_psection_blk (boolean); 00334 extern void end_region_blk (boolean); 00335 extern void end_SGI_parallel_blk (boolean); 00336 extern void end_single_process_blk (boolean); 00337 extern void end_wait_blk (boolean); 00338 00339 # if defined(_EXPRESSION_EVAL) 00340 extern void expression_eval_end (void); 00341 # endif 00342 00343 extern void flush_LA_to_EOS (void); 00344 extern void flush_LA_to_symbol (void); 00345 extern void format_line_n_col (int *, int *, int); 00346 extern void gen_attr_and_IR_for_lbl (boolean); 00347 extern int gen_loop_lbl_name (int, lbl_pos_type); 00348 extern void implicit_use_semantics(void); 00349 extern boolean iss_blk_stk_err(void); 00350 extern boolean is_implied_do (void); 00351 extern boolean is_substring_ref (void); 00352 extern void label_ref_semantics (int, lbl_ref_type, int, int, int); 00353 extern boolean matched_specific_token (token_values_type, token_class_type); 00354 extern boolean matched_token_class (token_class_type); 00355 extern boolean merge_access (int, int, int, access_type); 00356 extern boolean merge_allocatable (boolean, int, int, int); 00357 extern boolean merge_automatic (boolean, int, int, int); 00358 extern boolean merge_co_array (boolean, int, int, int, int); 00359 extern boolean merge_data (boolean, int, int, int); 00360 extern boolean merge_dimension (int, int, int, int); 00361 extern boolean merge_external (boolean, int, int, int); 00362 extern boolean merge_intent (boolean, int, int, int); 00363 extern boolean merge_intrinsic (boolean, int, int, int); 00364 extern boolean merge_optional (boolean, int, int, int); 00365 extern boolean merge_pointer (boolean, int, int, int); 00366 extern boolean merge_save (boolean, int, int, int); 00367 extern boolean merge_target (boolean, int, int, int); 00368 extern boolean merge_volatile (boolean, int, int, int); 00369 extern int move_blk_to_end(int); 00370 extern boolean next_arg_is_kwd_equal (void); 00371 extern boolean next_id_is_imp_control (void); 00372 extern boolean next_tok_is_paren_slash (void); 00373 extern int ntr_io_string_constant(void); 00374 extern boolean parse_err_flush (search_type, char *); 00375 extern boolean parse_io_list (opnd_type *); 00376 extern boolean parse_operand (opnd_type *); 00377 extern boolean pop_and_err_blk_stk (int, boolean); 00378 extern void prev_char_line_and_col (int *, int *); 00379 extern int put_char_const_in_tbl (char, int *); 00380 extern int put_format_in_tbl (void); 00381 extern boolean remove_do_parallel_blk(boolean, char *, int, int); 00382 extern boolean remove_pdo_blk(boolean, char *, int, int); 00383 extern void resolve_fwd_lbl_refs (void); 00384 extern int start_new_prog_unit (pgm_unit_type, blk_cntxt_type, 00385 boolean, boolean, int *); 00386 extern void set_format_start_idx (int); 00387 extern boolean stmt_has_double_colon (void); 00388 extern boolean stmt_is_DATA_stmt (void); 00389 extern boolean stmt_is_DO_stmt (void); 00390 extern boolean stmt_is_save_stmt(int, int); 00391 00392 /*********************\ 00393 |* statement parsers *| 00394 \*********************/ 00395 00396 extern void parse_allocatable_stmt (void); 00397 extern void parse_allocate_stmt (void); 00398 extern void parse_access_stmt (void); 00399 extern void parse_assign_stmt (void); 00400 extern void parse_assignment_stmt (void); 00401 extern void parse_automatic_stmt (void); 00402 extern void parse_bad_stmt(void); 00403 extern void parse_backspace_stmt (void); 00404 extern void parse_block_stmt (void); 00405 extern void parse_buffer_stmt (void); 00406 extern void parse_call_stmt (void); 00407 extern void parse_case_stmt (void); 00408 extern void parse_close_stmt (void); 00409 extern void parse_common_stmt (void); 00410 extern void parse_contains_stmt (void); 00411 extern void parse_continue_stmt (void); 00412 extern void parse_cycle_stmt (void); 00413 extern void parse_data_stmt (void); 00414 extern void parse_deallocate_stmt (void); 00415 extern void parse_decode_stmt (void); 00416 extern void parse_dimension_stmt (void); 00417 extern void parse_directive_stmt (void); 00418 extern void parse_do_stmt (void); 00419 extern void parse_elemental_stmt (void); 00420 extern void parse_else_stmt (void); 00421 extern void parse_encode_stmt (void); 00422 extern void parse_end_stmt (void); 00423 extern void parse_endfile_stmt (void); 00424 extern void parse_entry_stmt (void); 00425 extern void parse_equivalence_stmt (void); 00426 extern void parse_exit_stmt (void); 00427 extern void parse_external_stmt (void); 00428 extern void parse_forall (void); 00429 extern void parse_format_stmt (void); 00430 extern void parse_function_stmt (void); 00431 extern void parse_goto_stmt (void); 00432 extern void parse_if_stmt (void); 00433 extern void parse_implicit_stmt (void); 00434 extern void parse_inquire_stmt (void); 00435 extern void parse_intent_stmt (void); 00436 extern void parse_interface_stmt (void); 00437 extern void parse_intrinsic_stmt (void); 00438 extern void parse_module_stmt (void); 00439 extern void parse_namelist_stmt (void); 00440 extern void parse_nullify_stmt (void); 00441 extern void parse_open_stmt (void); 00442 extern void parse_optional_stmt (void); 00443 extern void parse_parameter_stmt (void); 00444 extern void parse_pointer_stmt (void); 00445 extern void parse_print_stmt (void); 00446 extern void parse_program_stmt (void); 00447 extern void parse_pure_stmt (void); 00448 extern void parse_read_stmt (void); 00449 extern void parse_recursive_stmt (void); 00450 extern void parse_return_stmt (void); 00451 extern void parse_rewind_stmt (void); 00452 extern void parse_save_stmt (void); 00453 extern void parse_select_stmt (void); 00454 extern void parse_sequence_stmt (void); 00455 extern void parse_stmt_func_stmt (int, int); 00456 extern void parse_stop_pause_stmt (void); 00457 extern void parse_subroutine_stmt (void); 00458 extern void parse_target_stmt (void); 00459 extern void parse_task_common_stmt (void); 00460 extern void parse_type_dcl_stmt (void); 00461 extern void parse_use_stmt (void); 00462 extern void parse_volatile_stmt (void); 00463 extern void parse_where_stmt (void); 00464 extern void parse_write_stmt (void); 00465 00466 00467 /*************************\ 00468 |* statement sub-parsers *| 00469 \*************************/ 00470 00471 extern int generic_spec_semantics (void); 00472 extern boolean paren_grp_is_cplx_const(void); 00473 extern boolean parse_actual_arg_spec (opnd_type *, boolean, int); 00474 extern int parse_array_spec (int); 00475 extern int parse_pe_array_spec (int); 00476 extern boolean parse_deref (opnd_type *, int); 00477 extern boolean parse_expr (opnd_type *); 00478 extern boolean parse_generic_spec (void); 00479 extern boolean parse_imp_do (opnd_type *); 00480 extern intent_type parse_intent_spec (void); 00481 extern void parse_length_selector (int, boolean, boolean); 00482 extern boolean parse_type_spec (boolean); 00483 extern void parse_typed_function_stmt (void); 00484 00485 /*******************************\ 00486 |* globally accessible objects *| 00487 \*******************************/ 00488 00489 extern blk_stk_type *blk_stk; /* defed in p_driver.h*/ 00490 extern int blk_stk_idx; /* defed in p_driver.h*/ 00491 extern int blk_stk_inc; /* defed in p_driver.h*/ 00492 extern int blk_stk_init_size; /* defed in p_driver.h*/ 00493 extern int blk_stk_limit; /* defed in p_driver.h*/ 00494 extern int blk_stk_num_wds; /* defed in p_driver.h*/ 00495 extern int blk_stk_size; /* defed in p_driver.h*/ 00496 extern int blk_stk_largest_idx; /* defed in p_driver.h*/ 00497 00498 extern int cif_end_unit_column; /* defed in fecif.h */ 00499 extern int cif_end_unit_line; /* defed in fecif.h */ 00500 extern boolean clearing_blk_stk; /* defed in main.h */ 00501 extern boolean colon_recovery; /* defed in p_driver.h*/ 00502 extern stmt_category_type curr_stmt_category; /* defed in p_driver.h*/ 00503 00504 extern boolean EOPU_encountered; 00505 00506 extern boolean label_ok; /* defed in p_driver.h*/ 00507 extern token_type label_token; /* defed in p_driver.h*/ 00508 00509 extern token_type main_token; /* defed in p_driver.h*/ 00510 00511 extern intent_type new_intent; /* defed in p_driver.h*/ 00512 00513 extern char *obj_str[]; /* defed in p_driver.h*/ 00514 extern int stmt_construct_idx; /* defed in p_driver.h*/ 00515 extern int stmt_line_idx; /* defed in src_input.*/ 00516 extern long long stmt_in_blk[]; /* defed in p_driver.h*/ 00517 extern stmt_category_type stmt_top_cat[]; /* defed in p_driver.h*/ 00518 extern type_tbl_type type_init_tbl[]; /* defed in main.h */ 00519 00520 extern void (*stmt_parsers[])(); /* defed in p_driver.h*/ 00521 00522 extern int if_stmt_lbl_idx; /* defed in */ 00523 /* p_ctl_flow.h */ 00524 00525 extern long directive_state; 00526 00527 /******************************************************************************\ 00528 |* *| 00529 |* typedefs used by src_input.c and cond_comp.c *| 00530 |* *| 00531 \******************************************************************************/ 00532 00533 enum line_type_values {Comment_Line, 00534 Include_Line, 00535 Cond_Comp_Line, 00536 Dir_Line, 00537 Dir_Continuation_Line, 00538 Regular_Line, 00539 Continuation_Line, 00540 Pound_Include_Enter_Line, 00541 Pound_Include_Exit_Line, 00542 Pound_Src_Line, 00543 EOF_Line }; 00544 00545 typedef enum line_type_values line_type; 00546 00547 struct cc_stmt_buf_line_entry {long line; 00548 long start_idx; 00549 }; 00550 00551 typedef struct cc_stmt_buf_line_entry cc_stmt_buf_line_type; 00552