Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(296)

Side by Side Diff: gcc/gcc/fortran/trans.h

Issue 3050029: [gcc] GCC 4.5.0=>4.5.1 (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/nacl-toolchain.git
Patch Set: Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « gcc/gcc/fortran/symbol.c ('k') | gcc/gcc/fortran/trans.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* Header for code translation functions 1 /* Header for code translation functions
2 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software 2 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
3 Foundation, Inc. 3 Free Software Foundation, Inc.
4 Contributed by Paul Brook 4 Contributed by Paul Brook
5 5
6 This file is part of GCC. 6 This file is part of GCC.
7 7
8 GCC is free software; you can redistribute it and/or modify it under 8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free 9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later 10 Software Foundation; either version 3, or (at your option) any later
11 version. 11 version.
12 12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY 13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 pointer assignments. */ 64 pointer assignments. */
65 unsigned direct_byref:1; 65 unsigned direct_byref:1;
66 66
67 /* Ignore absent optional arguments. Used for some intrinsics. */ 67 /* Ignore absent optional arguments. Used for some intrinsics. */
68 unsigned ignore_optional:1; 68 unsigned ignore_optional:1;
69 69
70 /* When this is set the data and offset fields of the returned descriptor 70 /* When this is set the data and offset fields of the returned descriptor
71 are NULL. Used by intrinsic size. */ 71 are NULL. Used by intrinsic size. */
72 unsigned data_not_needed:1; 72 unsigned data_not_needed:1;
73 73
74 /* If set, gfc_conv_function_call does not put byref calls into se->pre. */ 74 /* If set, gfc_conv_procedure_call does not put byref calls into se->pre. */
75 unsigned no_function_call:1; 75 unsigned no_function_call:1;
76 76
77 /* Scalarization parameters. */ 77 /* Scalarization parameters. */
78 struct gfc_se *parent; 78 struct gfc_se *parent;
79 struct gfc_ss *ss; 79 struct gfc_ss *ss;
80 struct gfc_loopinfo *loop; 80 struct gfc_loopinfo *loop;
81 } 81 }
82 gfc_se; 82 gfc_se;
83 83
84 84
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 int dim[GFC_MAX_DIMENSIONS]; 119 int dim[GFC_MAX_DIMENSIONS];
120 } 120 }
121 gfc_ss_info; 121 gfc_ss_info;
122 122
123 typedef enum 123 typedef enum
124 { 124 {
125 /* A scalar value. This will be evaluated before entering the 125 /* A scalar value. This will be evaluated before entering the
126 scalarization loop. */ 126 scalarization loop. */
127 GFC_SS_SCALAR, 127 GFC_SS_SCALAR,
128 128
129 /* Like GFC_SS_SCALAR except it evaluates a pointer to the expression. 129 /* Like GFC_SS_SCALAR it evaluates the expression outside the
130 Used for elemental function parameters. */ 130 loop. Is always evaluated as a reference to the temporary.
131 Used for elemental function arguments. */
131 GFC_SS_REFERENCE, 132 GFC_SS_REFERENCE,
132 133
133 /* An array section. Scalarization indices will be substituted during 134 /* An array section. Scalarization indices will be substituted during
134 expression translation. */ 135 expression translation. */
135 GFC_SS_SECTION, 136 GFC_SS_SECTION,
136 137
137 /* A non-elemental function call returning an array. The call is executed 138 /* A non-elemental function call returning an array. The call is executed
138 before entering the scalarization loop, storing the result in a 139 before entering the scalarization loop, storing the result in a
139 temporary. This temporary is then used inside the scalarization loop. 140 temporary. This temporary is then used inside the scalarization loop.
140 Simple assignments, e.g. a(:) = fn(), are handled without a temporary 141 Simple assignments, e.g. a(:) = fn(), are handled without a temporary
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 void gfc_conv_label_variable (gfc_se * se, gfc_expr * expr); 304 void gfc_conv_label_variable (gfc_se * se, gfc_expr * expr);
304 /* If the value is not constant, Create a temporary and copy the value. */ 305 /* If the value is not constant, Create a temporary and copy the value. */
305 tree gfc_evaluate_now (tree, stmtblock_t *); 306 tree gfc_evaluate_now (tree, stmtblock_t *);
306 307
307 /* Intrinsic function handling. */ 308 /* Intrinsic function handling. */
308 void gfc_conv_intrinsic_function (gfc_se *, gfc_expr *); 309 void gfc_conv_intrinsic_function (gfc_se *, gfc_expr *);
309 310
310 /* Does an intrinsic map directly to an external library call. */ 311 /* Does an intrinsic map directly to an external library call. */
311 int gfc_is_intrinsic_libcall (gfc_expr *); 312 int gfc_is_intrinsic_libcall (gfc_expr *);
312 313
313 /* Also used to CALL subroutines. */ 314 /* Used to call ordinary functions/subroutines
314 int gfc_conv_function_call (gfc_se *, gfc_symbol *, gfc_actual_arglist *, 315 and procedure pointer components. */
315 » » » tree); 316 int gfc_conv_procedure_call (gfc_se *, gfc_symbol *, gfc_actual_arglist *,
317 » » » gfc_expr *, tree);
316 318
317 void gfc_conv_subref_array_arg (gfc_se *, gfc_expr *, int, sym_intent); 319 void gfc_conv_subref_array_arg (gfc_se *, gfc_expr *, int, sym_intent, bool);
318 320
319 /* gfc_trans_* shouldn't call push/poplevel, use gfc_push/pop_scope */ 321 /* gfc_trans_* shouldn't call push/poplevel, use gfc_push/pop_scope */
320 322
321 /* Generate code for a scalar assignment. */ 323 /* Generate code for a scalar assignment. */
322 tree gfc_trans_scalar_assign (gfc_se *, gfc_se *, gfc_typespec, bool, bool); 324 tree gfc_trans_scalar_assign (gfc_se *, gfc_se *, gfc_typespec, bool, bool);
323 325
324 /* Translate COMMON blocks. */ 326 /* Translate COMMON blocks. */
325 void gfc_trans_common (gfc_namespace *); 327 void gfc_trans_common (gfc_namespace *);
326 328
327 /* Translate a derived type constructor. */ 329 /* Translate a derived type constructor. */
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 403
402 /* Assign a default initializer to a derived type. */ 404 /* Assign a default initializer to a derived type. */
403 tree gfc_init_default_dt (gfc_symbol *, tree); 405 tree gfc_init_default_dt (gfc_symbol *, tree);
404 406
405 /* Substitute a temporary variable in place of the real one. */ 407 /* Substitute a temporary variable in place of the real one. */
406 void gfc_shadow_sym (gfc_symbol *, tree, gfc_saved_var *); 408 void gfc_shadow_sym (gfc_symbol *, tree, gfc_saved_var *);
407 409
408 /* Restore the original variable. */ 410 /* Restore the original variable. */
409 void gfc_restore_sym (gfc_symbol *, gfc_saved_var *); 411 void gfc_restore_sym (gfc_symbol *, gfc_saved_var *);
410 412
413 /* Setting a decl assembler name, mangling it according to target rules
414 (like Windows @NN decorations). */
415 void gfc_set_decl_assembler_name (tree, tree);
416
411 /* Returns true if a variable of specified size should go on the stack. */ 417 /* Returns true if a variable of specified size should go on the stack. */
412 int gfc_can_put_var_on_stack (tree); 418 int gfc_can_put_var_on_stack (tree);
413 419
414 /* Allocate the lang-specific part of a decl node. */ 420 /* Allocate the lang-specific part of a decl node. */
415 void gfc_allocate_lang_decl (tree); 421 void gfc_allocate_lang_decl (tree);
416 422
417 /* Advance along a TREE_CHAIN. */ 423 /* Advance along a TREE_CHAIN. */
418 tree gfc_advance_chain (tree, int); 424 tree gfc_advance_chain (tree, int);
419 425
420 /* Create a decl for a function. */ 426 /* Create a decl for a function. */
421 void gfc_create_function_decl (gfc_namespace *); 427 void gfc_create_function_decl (gfc_namespace *);
422 /* Generate the code for a function. */ 428 /* Generate the code for a function. */
423 void gfc_generate_function_code (gfc_namespace *); 429 void gfc_generate_function_code (gfc_namespace *);
424 /* Output a BLOCK DATA program unit. */ 430 /* Output a BLOCK DATA program unit. */
425 void gfc_generate_block_data (gfc_namespace *); 431 void gfc_generate_block_data (gfc_namespace *);
426 /* Output a decl for a module variable. */ 432 /* Output a decl for a module variable. */
427 void gfc_generate_module_vars (gfc_namespace *); 433 void gfc_generate_module_vars (gfc_namespace *);
428 434
429 struct module_htab_entry GTY(()) 435 struct GTY(()) module_htab_entry {
430 {
431 const char *name; 436 const char *name;
432 tree namespace_decl; 437 tree namespace_decl;
433 htab_t GTY ((param_is (union tree_node))) decls; 438 htab_t GTY ((param_is (union tree_node))) decls;
434 }; 439 };
435 440
436 struct module_htab_entry *gfc_find_module (const char *); 441 struct module_htab_entry *gfc_find_module (const char *);
437 void gfc_module_add_decl (struct module_htab_entry *, tree); 442 void gfc_module_add_decl (struct module_htab_entry *, tree);
438 443
439 /* Get and set the current location. */ 444 /* Get and set the current location. */
440 void gfc_set_backend_locus (locus *); 445 void gfc_set_backend_locus (locus *);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 tree gfc_trans_pointer_assignment (gfc_expr *, gfc_expr *); 492 tree gfc_trans_pointer_assignment (gfc_expr *, gfc_expr *);
488 493
489 /* Initialize function decls for library functions. */ 494 /* Initialize function decls for library functions. */
490 void gfc_build_intrinsic_lib_fndecls (void); 495 void gfc_build_intrinsic_lib_fndecls (void);
491 /* Create function decls for IO library functions. */ 496 /* Create function decls for IO library functions. */
492 void gfc_trans_io_runtime_check (tree, tree, int, const char *, stmtblock_t *); 497 void gfc_trans_io_runtime_check (tree, tree, int, const char *, stmtblock_t *);
493 void gfc_build_io_library_fndecls (void); 498 void gfc_build_io_library_fndecls (void);
494 /* Build a function decl for a library function. */ 499 /* Build a function decl for a library function. */
495 tree gfc_build_library_function_decl (tree, tree, int, ...); 500 tree gfc_build_library_function_decl (tree, tree, int, ...);
496 501
502 /* Process the local variable decls of a block construct. */
503 void gfc_process_block_locals (gfc_namespace*);
504
505 /* Output initialization/clean-up code that was deferred. */
506 tree gfc_trans_deferred_vars (gfc_symbol*, tree);
507
497 /* somewhere! */ 508 /* somewhere! */
498 tree pushdecl (tree); 509 tree pushdecl (tree);
499 tree pushdecl_top_level (tree); 510 tree pushdecl_top_level (tree);
500 void pushlevel (int); 511 void pushlevel (int);
501 tree poplevel (int, int, int); 512 tree poplevel (int, int, int);
502 tree getdecls (void); 513 tree getdecls (void);
503 tree gfc_truthvalue_conversion (tree); 514 tree gfc_truthvalue_conversion (tree);
504 tree gfc_builtin_function (tree); 515 tree gfc_builtin_function (tree);
505 struct array_descr_info; 516 struct array_descr_info;
506 bool gfc_get_array_descr_info (const_tree, struct array_descr_info *); 517 bool gfc_get_array_descr_info (const_tree, struct array_descr_info *);
507 518
508 /* In trans-openmp.c */ 519 /* In trans-openmp.c */
509 bool gfc_omp_privatize_by_reference (const_tree); 520 bool gfc_omp_privatize_by_reference (const_tree);
510 enum omp_clause_default_kind gfc_omp_predetermined_sharing (tree); 521 enum omp_clause_default_kind gfc_omp_predetermined_sharing (tree);
522 tree gfc_omp_report_decl (tree);
511 tree gfc_omp_clause_default_ctor (tree, tree, tree); 523 tree gfc_omp_clause_default_ctor (tree, tree, tree);
512 tree gfc_omp_clause_copy_ctor (tree, tree, tree); 524 tree gfc_omp_clause_copy_ctor (tree, tree, tree);
513 tree gfc_omp_clause_assign_op (tree, tree, tree); 525 tree gfc_omp_clause_assign_op (tree, tree, tree);
514 tree gfc_omp_clause_dtor (tree, tree); 526 tree gfc_omp_clause_dtor (tree, tree);
515 bool gfc_omp_disregard_value_expr (tree, bool); 527 bool gfc_omp_disregard_value_expr (tree, bool);
516 bool gfc_omp_private_debug_clause (tree, bool); 528 bool gfc_omp_private_debug_clause (tree, bool);
517 bool gfc_omp_private_outer_ref (tree); 529 bool gfc_omp_private_outer_ref (tree);
518 struct gimplify_omp_ctx; 530 struct gimplify_omp_ctx;
519 void gfc_omp_firstprivatize_type_sizes (struct gimplify_omp_ctx *, tree); 531 void gfc_omp_firstprivatize_type_sizes (struct gimplify_omp_ctx *, tree);
520 532
(...skipping 12 matching lines...) Expand all
533 extern GTY(()) tree gfor_fndecl_ttynam; 545 extern GTY(()) tree gfor_fndecl_ttynam;
534 extern GTY(()) tree gfor_fndecl_ctime; 546 extern GTY(()) tree gfor_fndecl_ctime;
535 extern GTY(()) tree gfor_fndecl_fdate; 547 extern GTY(()) tree gfor_fndecl_fdate;
536 extern GTY(()) tree gfor_fndecl_in_pack; 548 extern GTY(()) tree gfor_fndecl_in_pack;
537 extern GTY(()) tree gfor_fndecl_in_unpack; 549 extern GTY(()) tree gfor_fndecl_in_unpack;
538 extern GTY(()) tree gfor_fndecl_associated; 550 extern GTY(()) tree gfor_fndecl_associated;
539 551
540 /* Math functions. Many other math functions are handled in 552 /* Math functions. Many other math functions are handled in
541 trans-intrinsic.c. */ 553 trans-intrinsic.c. */
542 554
543 typedef struct gfc_powdecl_list GTY(()) 555 typedef struct GTY(()) gfc_powdecl_list {
544 {
545 tree integer; 556 tree integer;
546 tree real; 557 tree real;
547 tree cmplx; 558 tree cmplx;
548 } 559 }
549 gfc_powdecl_list; 560 gfc_powdecl_list;
550 561
551 extern GTY(()) gfc_powdecl_list gfor_fndecl_math_powi[4][3]; 562 extern GTY(()) gfc_powdecl_list gfor_fndecl_math_powi[4][3];
552 extern GTY(()) tree gfor_fndecl_math_ishftc4; 563 extern GTY(()) tree gfor_fndecl_math_ishftc4;
553 extern GTY(()) tree gfor_fndecl_math_ishftc8; 564 extern GTY(()) tree gfor_fndecl_math_ishftc8;
554 extern GTY(()) tree gfor_fndecl_math_ishftc16; 565 extern GTY(()) tree gfor_fndecl_math_ishftc16;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 618
608 enum gfc_array_kind 619 enum gfc_array_kind
609 { 620 {
610 GFC_ARRAY_UNKNOWN, 621 GFC_ARRAY_UNKNOWN,
611 GFC_ARRAY_ASSUMED_SHAPE, 622 GFC_ARRAY_ASSUMED_SHAPE,
612 GFC_ARRAY_ALLOCATABLE, 623 GFC_ARRAY_ALLOCATABLE,
613 GFC_ARRAY_POINTER 624 GFC_ARRAY_POINTER
614 }; 625 };
615 626
616 /* Array types only. */ 627 /* Array types only. */
617 struct lang_type» » GTY(()) 628 struct GTY(())» lang_type» {
618 {
619 int rank; 629 int rank;
620 enum gfc_array_kind akind; 630 enum gfc_array_kind akind;
621 tree lbound[GFC_MAX_DIMENSIONS]; 631 tree lbound[GFC_MAX_DIMENSIONS];
622 tree ubound[GFC_MAX_DIMENSIONS]; 632 tree ubound[GFC_MAX_DIMENSIONS];
623 tree stride[GFC_MAX_DIMENSIONS]; 633 tree stride[GFC_MAX_DIMENSIONS];
624 tree size; 634 tree size;
625 tree offset; 635 tree offset;
626 tree dtype; 636 tree dtype;
627 tree dataptr_type; 637 tree dataptr_type;
628 tree span; 638 tree span;
639 tree base_decl[2];
629 }; 640 };
630 641
631 struct lang_decl» » GTY(()) 642 struct GTY(()) lang_decl {
632 {
633 /* Dummy variables. */ 643 /* Dummy variables. */
634 tree saved_descriptor; 644 tree saved_descriptor;
635 /* Assigned integer nodes. Stringlength is the IO format string's length. 645 /* Assigned integer nodes. Stringlength is the IO format string's length.
636 Addr is the address of the string or the target label. Stringlength is 646 Addr is the address of the string or the target label. Stringlength is
637 initialized to -2 and assigned to -1 when addr is assigned to the 647 initialized to -2 and assigned to -1 when addr is assigned to the
638 address of target label. */ 648 address of target label. */
639 tree stringlen; 649 tree stringlen;
640 tree addr; 650 tree addr;
641 tree span; 651 tree span;
642 }; 652 };
(...skipping 29 matching lines...) Expand all
672 #define GFC_TYPE_ARRAY_RANK(node) (TYPE_LANG_SPECIFIC(node)->rank) 682 #define GFC_TYPE_ARRAY_RANK(node) (TYPE_LANG_SPECIFIC(node)->rank)
673 #define GFC_TYPE_ARRAY_SIZE(node) (TYPE_LANG_SPECIFIC(node)->size) 683 #define GFC_TYPE_ARRAY_SIZE(node) (TYPE_LANG_SPECIFIC(node)->size)
674 #define GFC_TYPE_ARRAY_OFFSET(node) (TYPE_LANG_SPECIFIC(node)->offset) 684 #define GFC_TYPE_ARRAY_OFFSET(node) (TYPE_LANG_SPECIFIC(node)->offset)
675 #define GFC_TYPE_ARRAY_AKIND(node) (TYPE_LANG_SPECIFIC(node)->akind) 685 #define GFC_TYPE_ARRAY_AKIND(node) (TYPE_LANG_SPECIFIC(node)->akind)
676 /* Code should use gfc_get_dtype instead of accessing this directly. It may 686 /* Code should use gfc_get_dtype instead of accessing this directly. It may
677 not be known when the type is created. */ 687 not be known when the type is created. */
678 #define GFC_TYPE_ARRAY_DTYPE(node) (TYPE_LANG_SPECIFIC(node)->dtype) 688 #define GFC_TYPE_ARRAY_DTYPE(node) (TYPE_LANG_SPECIFIC(node)->dtype)
679 #define GFC_TYPE_ARRAY_DATAPTR_TYPE(node) \ 689 #define GFC_TYPE_ARRAY_DATAPTR_TYPE(node) \
680 (TYPE_LANG_SPECIFIC(node)->dataptr_type) 690 (TYPE_LANG_SPECIFIC(node)->dataptr_type)
681 #define GFC_TYPE_ARRAY_SPAN(node) (TYPE_LANG_SPECIFIC(node)->span) 691 #define GFC_TYPE_ARRAY_SPAN(node) (TYPE_LANG_SPECIFIC(node)->span)
692 #define GFC_TYPE_ARRAY_BASE_DECL(node, internal) \
693 (TYPE_LANG_SPECIFIC(node)->base_decl[(internal)])
682 694
683 /* Build an expression with void type. */ 695 /* Build an expression with void type. */
684 #define build1_v(code, arg) fold_build1(code, void_type_node, arg) 696 #define build1_v(code, arg) fold_build1(code, void_type_node, arg)
685 #define build2_v(code, arg1, arg2) fold_build2(code, void_type_node, \ 697 #define build2_v(code, arg1, arg2) fold_build2(code, void_type_node, \
686 arg1, arg2) 698 arg1, arg2)
687 #define build3_v(code, arg1, arg2, arg3) fold_build3(code, void_type_node, \ 699 #define build3_v(code, arg1, arg2, arg3) fold_build3(code, void_type_node, \
688 arg1, arg2, arg3) 700 arg1, arg2, arg3)
689 #define build4_v(code, arg1, arg2, arg3, arg4) build4(code, void_type_node, \ 701 #define build4_v(code, arg1, arg2, arg3, arg4) build4(code, void_type_node, \
690 arg1, arg2, arg3, arg4) 702 arg1, arg2, arg3, arg4)
691 703
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
754 void gfc_free_interface_mapping (gfc_interface_mapping *); 766 void gfc_free_interface_mapping (gfc_interface_mapping *);
755 void gfc_add_interface_mapping (gfc_interface_mapping *, 767 void gfc_add_interface_mapping (gfc_interface_mapping *,
756 gfc_symbol *, gfc_se *, gfc_expr *); 768 gfc_symbol *, gfc_se *, gfc_expr *);
757 void gfc_finish_interface_mapping (gfc_interface_mapping *, 769 void gfc_finish_interface_mapping (gfc_interface_mapping *,
758 stmtblock_t *, stmtblock_t *); 770 stmtblock_t *, stmtblock_t *);
759 void gfc_apply_interface_mapping (gfc_interface_mapping *, 771 void gfc_apply_interface_mapping (gfc_interface_mapping *,
760 gfc_se *, gfc_expr *); 772 gfc_se *, gfc_expr *);
761 773
762 774
763 /* Standard error messages used in all the trans-*.c files. */ 775 /* Standard error messages used in all the trans-*.c files. */
764 extern const char gfc_msg_bounds[];
765 extern const char gfc_msg_fault[]; 776 extern const char gfc_msg_fault[];
766 extern const char gfc_msg_wrong_return[]; 777 extern const char gfc_msg_wrong_return[];
767 778
779 #define OMPWS_WORKSHARE_FLAG 1 /* Set if in a workshare construct. */
780 #define OMPWS_CURR_SINGLEUNIT 2 /* Set if current gfc_code in workshare
781 construct is not workshared. */
782 #define OMPWS_SCALARIZER_WS 4 /* Set if scalarizer should attempt
783 to create parallel loops. */
784 #define OMPWS_NOWAIT 8 /* Use NOWAIT on OMP_FOR. */
785 extern int ompws_flags;
768 786
769 #endif /* GFC_TRANS_H */ 787 #endif /* GFC_TRANS_H */
OLDNEW
« no previous file with comments | « gcc/gcc/fortran/symbol.c ('k') | gcc/gcc/fortran/trans.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698