Open64 (mfef90, whirl2f, and IR tools)  TAG: version-openad; SVN changeset: 916
s_globals.h
Go to the documentation of this file.
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;
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines