00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055 extern void allocate_stmt_semantics (void);
00056 extern void arith_if_stmt_semantics (void);
00057 extern void assign_stmt_semantics (void);
00058 extern void assignment_stmt_semantics (void);
00059 extern void backspace_stmt_semantics (void);
00060 extern void blockdata_stmt_semantics (void);
00061 extern void buffer_stmt_semantics (void);
00062 extern void call_stmt_semantics (void);
00063 extern void case_stmt_semantics (void);
00064 extern void close_stmt_semantics (void);
00065 extern void continue_stmt_semantics (void);
00066 extern void data_stmt_semantics (void);
00067 extern void deallocate_stmt_semantics (void);
00068 extern void directive_stmt_semantics (void);
00069 extern void encode_decode_stmt_semantics (void);
00070 extern void do_stmt_semantics (void);
00071 extern void else_stmt_semantics (void);
00072 extern void end_forall_semantics (void);
00073 extern void end_function_semantics (void);
00074
00075 #ifndef _HIGH_LEVEL_IF_FORM
00076 extern void end_if_semantics (void);
00077 #endif
00078
00079 extern void end_select_semantics (void);
00080 extern void end_stmt_semantics (void);
00081 extern void end_subroutine_semantics (void);
00082 extern void end_where_semantics (void);
00083 extern void endfile_stmt_semantics (void);
00084 extern void entry_stmt_semantics (void);
00085 extern void forall_semantics (void);
00086 extern void function_stmt_semantics (void);
00087 extern void goto_stmt_semantics (void);
00088 extern void if_stmt_semantics (void);
00089 extern void inquire_stmt_semantics (void);
00090 extern void interface_stmt_semantics (void);
00091 extern void module_stmt_semantics (void);
00092 extern void label_def_stmt_semantics (void);
00093 extern void nullify_stmt_semantics (void);
00094 extern void open_stmt_semantics (void);
00095 extern void outmoded_if_stmt_semantics (void);
00096 extern void pause_stmt_semantics (void);
00097 extern void print_stmt_semantics (void);
00098 extern void program_stmt_semantics (void);
00099 extern void read_stmt_semantics (void);
00100 extern void return_stmt_semantics (void);
00101 extern void rewind_stmt_semantics (void);
00102 extern void select_stmt_semantics (void);
00103 extern void stop_pause_stmt_semantics (void);
00104 extern void subroutine_stmt_semantics (void);
00105 extern void then_stmt_semantics (void);
00106 extern void where_stmt_semantics (void);
00107 extern void write_stmt_semantics (void);
00108 extern void type_init_semantics (void);
00109
00110
00111
00112
00113
00114
00115 extern void add_substring_length(int);
00116 extern boolean call_list_semantics(opnd_type *, expr_arg_type *,
00117 boolean);
00118 extern void cast_to_cg_default(opnd_type *, expr_arg_type *);
00119 extern void cast_opnd_to_type_idx(opnd_type *, int);
00120 extern void change_asg_to_where(int);
00121 extern boolean check_for_legal_define(opnd_type *);
00122 #ifdef KEY
00123 extern boolean check_for_legal_assignment_define(opnd_type *, boolean);
00124 #endif
00125 extern void change_section_to_this_element(opnd_type *,
00126 opnd_type *, int);
00127 extern boolean check_where_conformance(expr_arg_type *);
00128 extern void cif_object_rec_for_func_result(int);
00129 extern boolean cmp_ref_trees(opnd_type *, opnd_type *);
00130 extern void default_init_semantics(int);
00131 extern boolean compare_dummy_arguments(int, int);
00132 extern int create_alloc_descriptor(int, int, int, boolean);
00133 extern int create_argchck_descriptor(opnd_type *);
00134 extern boolean create_constructor_constant(opnd_type *,
00135 expr_arg_type *);
00136 extern int create_equiv_stor_blk(int, sb_type_type);
00137 extern void create_namelist_descriptor(int);
00138 extern boolean create_runtime_array_constructor(opnd_type *,
00139 expr_arg_type *);
00140 extern boolean create_runtime_struct_constructor(opnd_type *);
00141 extern void create_loop_stmts(int, opnd_type *, opnd_type *,
00142 opnd_type *,int, int);
00143 extern int create_tmp_asg(opnd_type *, expr_arg_type *,
00144 opnd_type *, int, boolean, boolean);
00145 extern void determine_tmp_size(opnd_type *, int);
00146 extern void doall_end_semantics(void);
00147 extern void enlarge_call_list_tables(void);
00148 extern void enlarge_info_list_table(void);
00149 extern boolean final_arg_work(opnd_type *, int, int, expr_arg_type *);
00150 #ifdef KEY
00151 extern int gen_ieee_save_and_restore(int curr_scp_idx, int line, int column);
00152 #endif
00153 extern int find_base_attr(opnd_type *, int *, int *);
00154 extern int find_left_attr(opnd_type *);
00155 extern void flatten_function_call(opnd_type *);
00156 extern void fold_clen_opr(opnd_type *, expr_arg_type *);
00157 extern int gen_alloc_header_const(int, int, boolean, int *);
00158 extern boolean gen_bd_entry(opnd_type *, expr_arg_type *,
00159 int *, int, int);
00160 extern void gen_copyin_bounds_stmt(int);
00161 extern int gen_directive_ir(operator_type);
00162 extern void gen_dv_access_low_bound(opnd_type *, opnd_type *, int);
00163 extern void gen_dv_whole_def(opnd_type *, opnd_type *,
00164 expr_arg_type *);
00165 extern void gen_dv_whole_def_init(opnd_type *, int,
00166 sh_position_type);
00167 extern void gen_entry_dope_code(int);
00168 extern void gen_forall_if_mask(int, int);
00169 extern void gen_forall_loops(int, int);
00170 extern void gen_forall_tmp(expr_arg_type *, opnd_type *, int, int,
00171 boolean);
00172 extern boolean gen_internal_dope_vector(int_dope_type *, opnd_type *,
00173 boolean, expr_arg_type *);
00174 extern void gen_loop_end_ir (void);
00175 extern void gen_runtime_conformance(opnd_type *, expr_arg_type *,
00176 opnd_type *, expr_arg_type *);
00177 extern void gen_runtime_substring(int);
00178 extern void gen_runtime_bounds(int);
00179 extern boolean gen_whole_subscript (opnd_type *, expr_arg_type *);
00180 extern void get_char_len(opnd_type *, opnd_type *);
00181 extern void get_concat_len (int, opnd_type *);
00182 extern int gen_sf_dv_whole_def(opnd_type *, int, int);
00183 extern void gen_split_alloc(int, int, int);
00184 extern void get_shape_from_attr(expr_arg_type *, int, int, int,int);
00185 extern int get_stmt_tmp(int, boolean, int);
00186 extern void illegal_stmt_type(void);
00187 extern boolean is_local_forall_index(int);
00188 extern int gen_static_integer_array_tmp(int, int, int);
00189 extern void gen_common_dv_init(opnd_type *, int, sh_position_type);
00190 extern void gen_static_dv_whole_def(opnd_type *, int,
00191 sh_position_type);
00192 extern void look_for_real_div(opnd_type *);
00193 extern void make_base_subtree(opnd_type *,opnd_type *,int *,int *);
00194 extern void make_triplet_extent_tree(opnd_type *, int);
00195 extern void process_cpnt_inits(opnd_type *, int, void (*)(),
00196 int, sh_position_type);
00197 extern void process_char_len(opnd_type *);
00198 extern void process_deferred_functions(opnd_type *);
00199 extern void dope_vector_setup(opnd_type *, expr_arg_type *,
00200 opnd_type *, boolean);
00201 extern void ptr_assign_from_ptr(opnd_type *, opnd_type *);
00202 extern void no_semantics_routine(void);
00203 extern boolean operation_is_intrinsic(operator_type,int,int,int,int);
00204 extern void set_directives_on_label(int);
00205 extern void set_sb_first_attr_idx(int);
00206 extern void set_shape_for_deferred_funcs(expr_arg_type *, int);
00207 extern void set_up_allocate_as_call(int, int, int, boolean);
00208 extern void set_up_exp_desc(opnd_type *, expr_arg_type *);
00209 extern void short_circuit_branch(void);
00210 extern boolean stmt_func_semantics(int);
00211 extern void transform_cri_ch_ptr(opnd_type *);
00212 # if defined(_F_MINUS_MINUS)
00213 extern void translate_distant_ref(opnd_type *,
00214 expr_arg_type *, int);
00215 extern void translate_dv_component(opnd_type *, expr_arg_type *);
00216 # endif
00217 extern void transform_char_sequence_ref(opnd_type *, int);
00218 extern boolean tree_produces_dealloc(opnd_type *root);
00219 extern boolean validate_char_len(opnd_type *, expr_arg_type *);
00220 #ifdef KEY
00221 extern int help_dealloc(int, int, fld_type, int, boolean, boolean, boolean);
00222 extern int allocatable_structure_component(int);
00223 #endif
00224 #ifdef KEY
00225 extern boolean check_interoperable_type(int, boolean, boolean);
00226 extern void check_interoperable_constraints(int);
00227 extern boolean interoperable_variable(int);
00228 extern boolean no_length_type_param(int);
00229 extern boolean length_type_param_is_one(int);
00230 #endif
00231
00232
00233
00234
00235
00236
00237 struct arg_strct {
00238 expr_arg_type ed;
00239
00240 int kwd;
00241 int line;
00242 int col;
00243 int association;
00244 opnd_type arg_opnd;
00245 boolean pgm_unit : 1;
00246 boolean maybe_modified : 1;
00247 boolean insert_place_holder : 1;
00248 };
00249
00250 typedef struct arg_strct arg_strct_type;
00251
00252
00253 extern arg_strct_type *arg_info_list;
00254 extern int *arg_list;
00255 extern int arg_list_size;
00256 extern int arg_info_list_size;
00257 extern int arg_info_list_base;
00258 extern int arg_info_list_top;
00259
00260 extern arg_strct_type init_arg_info;
00261
00262 extern boolean in_call_list;
00263 extern boolean in_io_list;
00264 extern boolean in_branch_true;
00265 extern boolean defer_stmt_expansion;
00266 extern int number_of_functions;
00267 extern boolean io_item_must_flatten;
00268 extern boolean tree_has_constructor;
00269 #ifdef KEY
00270
00271
00272
00273 extern int inside_paralleldo;
00274
00275
00276
00277 extern int inside_parallel;
00278 #endif
00279
00280
00281
00282
00283
00284
00285 struct stmt_tmp_entry {
00286 int scalar_tmps_head;
00287 int scalar_tmps_tail;
00288 int dope_vector_tmps_head[8];
00289 int dope_vector_tmps_tail[8];
00290 };
00291
00292 typedef struct stmt_tmp_entry stmt_tmp_tbl_type;
00293
00294 extern stmt_tmp_tbl_type stmt_tmp_tbl[Num_Linear_Types];
00295
00296
00297
00298
00299
00300
00301 enum act_arg_values {
00302 Scalar_Expression,
00303 Scalar_Var,
00304 Scalar_Tmp_Var,
00305 Array_Elt,
00306 Array_Tmp_Elt,
00307 Scalar_Ptr,
00308 Scalar_Tmp_Ptr,
00309 Scalar_Constant,
00310
00311 Array_Expr,
00312 Array_Ptr,
00313 Array_Tmp_Ptr,
00314 Whole_Allocatable,
00315 Whole_Tmp_Allocatable,
00316 Whole_Sequence,
00317 Whole_Tmp_Sequence,
00318 Whole_Ass_Shape,
00319 Whole_Array_Constant,
00320 Sequence_Array_Section,
00321 Constant_Array_Section,
00322 Dv_Array_Section,
00323 Vector_Subscript_Section,
00324 Contig_Section,
00325 Dv_Contig_Section
00326 };
00327
00328 typedef enum act_arg_values act_arg_type;
00329
00330 extern act_arg_type get_act_arg_type(expr_arg_type *);
00331
00332 extern boolean tree_has_ranf;
00333
00334 extern void analyse_loops(opnd_type *, opnd_type *, size_level_type *);
00335
00336 extern int contig_test_ir_idx;
00337
00338
00339
00340
00341
00342 extern int shared_bd_idx;
00343 extern boolean reassign_XT_temps;
00344
00345
00346 extern boolean label_allowed;
00347
00348 extern int active_forall_sh_idx;
00349 extern boolean within_forall_construct;
00350 extern boolean within_forall_mask_expr;
00351
00352
00353 extern int alloc_block_start_idx;
00354 extern int alloc_block_end_idx;
00355
00356
00357 extern boolean variable_size_func_expr;