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/s_globals.h 5.5 10/19/99 17:14:30\n" */ 00038 00039 00040 /**********************************************\ 00041 |* Semantic routines for individual statements | 00042 \**********************************************/ 00043 00044 extern void allocate_stmt_semantics (void); 00045 extern void arith_if_stmt_semantics (void); 00046 extern void assign_stmt_semantics (void); 00047 extern void assignment_stmt_semantics (void); 00048 extern void backspace_stmt_semantics (void); 00049 extern void blockdata_stmt_semantics (void); 00050 extern void buffer_stmt_semantics (void); 00051 extern void call_stmt_semantics (void); 00052 extern void case_stmt_semantics (void); 00053 extern void close_stmt_semantics (void); 00054 extern void continue_stmt_semantics (void); 00055 extern void data_stmt_semantics (void); 00056 extern void deallocate_stmt_semantics (void); 00057 extern void directive_stmt_semantics (void); 00058 extern void encode_decode_stmt_semantics (void); 00059 extern void do_stmt_semantics (void); 00060 extern void else_stmt_semantics (void); 00061 extern void end_forall_semantics (void); 00062 extern void end_function_semantics (void); 00063 00064 #ifndef _HIGH_LEVEL_IF_FORM 00065 extern void end_if_semantics (void); 00066 #endif 00067 00068 extern void end_select_semantics (void); 00069 extern void end_stmt_semantics (void); 00070 extern void end_subroutine_semantics (void); 00071 extern void end_where_semantics (void); 00072 extern void endfile_stmt_semantics (void); 00073 extern void entry_stmt_semantics (void); 00074 extern void forall_semantics (void); 00075 extern void function_stmt_semantics (void); 00076 extern void goto_stmt_semantics (void); 00077 extern void if_stmt_semantics (void); 00078 extern void inquire_stmt_semantics (void); 00079 extern void interface_stmt_semantics (void); 00080 extern void module_stmt_semantics (void); 00081 extern void label_def_stmt_semantics (void); 00082 extern void nullify_stmt_semantics (void); 00083 extern void open_stmt_semantics (void); 00084 extern void outmoded_if_stmt_semantics (void); 00085 extern void pause_stmt_semantics (void); 00086 extern void print_stmt_semantics (void); 00087 extern void program_stmt_semantics (void); 00088 extern void read_stmt_semantics (void); 00089 extern void return_stmt_semantics (void); 00090 extern void rewind_stmt_semantics (void); 00091 extern void select_stmt_semantics (void); 00092 extern void stop_pause_stmt_semantics (void); 00093 extern void subroutine_stmt_semantics (void); 00094 extern void then_stmt_semantics (void); 00095 extern void where_stmt_semantics (void); 00096 extern void write_stmt_semantics (void); 00097 extern void type_init_semantics (void); 00098 00099 00100 /*************************************\ 00101 |* Other semantic processing routines | 00102 \*************************************/ 00103 00104 extern void add_substring_length(int); 00105 extern boolean call_list_semantics(opnd_type *, expr_arg_type *, 00106 boolean); 00107 extern void cast_to_cg_default(opnd_type *, expr_arg_type *); 00108 extern void cast_opnd_to_type_idx(opnd_type *, int); 00109 extern void change_asg_to_where(int); 00110 extern boolean check_for_legal_define(opnd_type *); 00111 extern void change_section_to_this_element(opnd_type *, 00112 opnd_type *, int); 00113 extern boolean check_where_conformance(expr_arg_type *); 00114 extern void cif_object_rec_for_func_result(int); 00115 extern boolean cmp_ref_trees(opnd_type *, opnd_type *); 00116 extern void default_init_semantics(int); 00117 extern boolean compare_dummy_arguments(int, int); 00118 extern int create_alloc_descriptor(int, int, int, boolean); 00119 extern int create_argchck_descriptor(opnd_type *); 00120 extern boolean create_constructor_constant(opnd_type *, 00121 expr_arg_type *); 00122 extern int create_equiv_stor_blk(int, sb_type_type); 00123 extern void create_namelist_descriptor(int); 00124 extern boolean create_runtime_array_constructor(opnd_type *, 00125 expr_arg_type *); 00126 extern boolean create_runtime_struct_constructor(opnd_type *); 00127 extern void create_loop_stmts(int, opnd_type *, opnd_type *, 00128 opnd_type *,int, int); 00129 extern int create_tmp_asg(opnd_type *, expr_arg_type *, 00130 opnd_type *, int, boolean, boolean); 00131 extern void determine_tmp_size(opnd_type *, int); 00132 extern void doall_end_semantics(void); 00133 extern void enlarge_call_list_tables(void); 00134 extern void enlarge_info_list_table(void); 00135 extern boolean final_arg_work(opnd_type *, int, int, expr_arg_type *); 00136 extern int find_base_attr(opnd_type *, int *, int *); 00137 extern int find_left_attr(opnd_type *); 00138 extern void flatten_function_call(opnd_type *); 00139 extern void fold_clen_opr(opnd_type *, expr_arg_type *); 00140 extern int gen_alloc_header_const(int, int, boolean, int *); 00141 extern boolean gen_bd_entry(opnd_type *, expr_arg_type *, 00142 int *, int, int); 00143 extern void gen_copyin_bounds_stmt(int); 00144 extern int gen_directive_ir(operator_type); 00145 extern void gen_dv_access_low_bound(opnd_type *, opnd_type *, int); 00146 extern void gen_dv_whole_def(opnd_type *, opnd_type *, 00147 expr_arg_type *); 00148 extern void gen_dv_whole_def_init(opnd_type *, int, 00149 sh_position_type); 00150 extern void gen_entry_dope_code(int); 00151 extern void gen_forall_if_mask(int, int); 00152 extern void gen_forall_loops(int, int); 00153 extern void gen_forall_tmp(expr_arg_type *, opnd_type *, int, int, 00154 boolean); 00155 extern boolean gen_internal_dope_vector(int_dope_type *, opnd_type *, 00156 boolean, expr_arg_type *); 00157 extern void gen_loop_end_ir (void); 00158 extern void gen_runtime_conformance(opnd_type *, expr_arg_type *, 00159 opnd_type *, expr_arg_type *); 00160 extern void gen_runtime_substring(int); 00161 extern void gen_runtime_bounds(int); 00162 extern boolean gen_whole_subscript (opnd_type *, expr_arg_type *); 00163 extern void get_char_len(opnd_type *, opnd_type *); 00164 extern void get_concat_len (int, opnd_type *); 00165 extern int gen_sf_dv_whole_def(opnd_type *, int, int); 00166 extern void gen_split_alloc(int, int, int); 00167 extern void get_shape_from_attr(expr_arg_type *, int, int, int,int); 00168 extern int get_stmt_tmp(int, boolean, int); 00169 extern void illegal_stmt_type(void); 00170 extern boolean is_local_forall_index(int); 00171 extern int gen_static_integer_array_tmp(int, int, int); 00172 extern void gen_common_dv_init(opnd_type *, int, sh_position_type); 00173 extern void gen_static_dv_whole_def(opnd_type *, int, 00174 sh_position_type); 00175 extern void look_for_real_div(opnd_type *); 00176 extern void make_base_subtree(opnd_type *,opnd_type *,int *,int *); 00177 extern void make_triplet_extent_tree(opnd_type *, int); 00178 extern void process_cpnt_inits(opnd_type *, int, void (*)(), 00179 int, sh_position_type); 00180 extern void process_char_len(opnd_type *); 00181 extern void process_deferred_functions(opnd_type *); 00182 extern void dope_vector_setup(opnd_type *, expr_arg_type *, 00183 opnd_type *, boolean); 00184 extern void ptr_assign_from_ptr(opnd_type *, opnd_type *); 00185 extern void no_semantics_routine(void); 00186 extern boolean operation_is_intrinsic(operator_type,int,int,int,int); 00187 extern void set_directives_on_label(int); 00188 extern void set_sb_first_attr_idx(int); 00189 extern void set_shape_for_deferred_funcs(expr_arg_type *, int); 00190 extern void set_up_allocate_as_call(int, int, int, boolean); 00191 extern void set_up_exp_desc(opnd_type *, expr_arg_type *); 00192 extern void short_circuit_branch(void); 00193 extern boolean stmt_func_semantics(int); 00194 extern void transform_cri_ch_ptr(opnd_type *); 00195 # if defined(COARRAY_FORTRAN) 00196 extern void translate_distant_ref(opnd_type *, 00197 expr_arg_type *, int); 00198 extern void translate_dv_component(opnd_type *, expr_arg_type *); 00199 # endif 00200 extern void transform_char_sequence_ref(opnd_type *, int); 00201 extern boolean tree_produces_dealloc(opnd_type *root); 00202 extern boolean validate_char_len(opnd_type *, expr_arg_type *); 00203 00204 00205 /*********************************************\ 00206 |* Semantic Pass Globally Accessible Objects *| 00207 \*********************************************/ 00208 00209 struct arg_strct { 00210 expr_arg_type ed; 00211 00212 int kwd; 00213 int line; 00214 int col; 00215 int association; 00216 opnd_type arg_opnd; 00217 boolean pgm_unit : 1; 00218 boolean maybe_modified : 1; 00219 boolean insert_place_holder : 1; 00220 }; 00221 00222 typedef struct arg_strct arg_strct_type; 00223 00224 00225 extern arg_strct_type *arg_info_list; 00226 extern int *arg_list; 00227 extern int arg_list_size; 00228 extern int arg_info_list_size; 00229 extern int arg_info_list_base; 00230 extern int arg_info_list_top; 00231 00232 extern arg_strct_type init_arg_info; 00233 00234 extern boolean in_call_list; 00235 extern boolean in_io_list; 00236 extern boolean in_branch_true; 00237 extern boolean defer_stmt_expansion; 00238 extern int number_of_functions; 00239 extern boolean io_item_must_flatten; 00240 extern boolean tree_has_constructor; 00241 00242 00243 /*********************************************************\ 00244 |* stmt_tmp_tbl points to lists of tmps that are reused. *| 00245 \*********************************************************/ 00246 00247 struct stmt_tmp_entry { 00248 int scalar_tmps_head; 00249 int scalar_tmps_tail; 00250 int dope_vector_tmps_head[8]; 00251 int dope_vector_tmps_tail[8]; 00252 }; 00253 00254 typedef struct stmt_tmp_entry stmt_tmp_tbl_type; 00255 00256 extern stmt_tmp_tbl_type stmt_tmp_tbl[Num_Linear_Types]; 00257 00258 /********************************************************\ 00259 |* These are the final_arg_work tables that control the *| 00260 |* behavior of argument association. (ie. COPY IN/OUT) *| 00261 \********************************************************/ 00262 00263 enum act_arg_values { 00264 Scalar_Expression, 00265 Scalar_Var, 00266 Scalar_Tmp_Var, 00267 Array_Elt, 00268 Array_Tmp_Elt, 00269 Scalar_Ptr, 00270 Scalar_Tmp_Ptr, 00271 Scalar_Constant, 00272 00273 Array_Expr, 00274 Array_Ptr, 00275 Array_Tmp_Ptr, 00276 Whole_Allocatable, 00277 Whole_Tmp_Allocatable, 00278 Whole_Sequence, 00279 Whole_Tmp_Sequence, 00280 Whole_Ass_Shape, 00281 Whole_Array_Constant, 00282 Sequence_Array_Section, 00283 Constant_Array_Section, 00284 Dv_Array_Section, 00285 Vector_Subscript_Section, 00286 Contig_Section, 00287 Dv_Contig_Section 00288 }; 00289 00290 typedef enum act_arg_values act_arg_type; 00291 00292 extern act_arg_type get_act_arg_type(expr_arg_type *); 00293 00294 extern boolean tree_has_ranf; 00295 00296 extern void analyse_loops(opnd_type *, opnd_type *, size_level_type *); 00297 00298 extern int contig_test_ir_idx; 00299 00300 /*****************************************\ 00301 |* used for COPY_ASSUMED_SHAPE directive *| 00302 \*****************************************/ 00303 00304 extern int shared_bd_idx; 00305 extern boolean reassign_XT_temps; 00306 00307 00308 extern boolean label_allowed; 00309 00310 extern int active_forall_sh_idx; 00311 extern boolean within_forall_construct; 00312 extern boolean within_forall_mask_expr; 00313 00314 00315 extern int alloc_block_start_idx; 00316 extern int alloc_block_end_idx; 00317 00318 00319 extern boolean variable_size_func_expr;