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 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
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
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
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
00260
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
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;