From ea686fef727b69289f13168df39e10615632faf0 Mon Sep 17 00:00:00 2001 From: mikael Date: Thu, 3 Nov 2011 21:39:11 +0000 Subject: * trans.h (struct gfc_ss_info, struct gfc_array_info): Rename the former to the latter. * trans-array.c (gfc_get_array_ss, gfc_trans_allocate_array_storage, get_array_ref_dim, gfc_trans_create_temp_array, gfc_trans_constant_array_constructor, gfc_set_vector_loop_bounds, gfc_conv_array_index_offset, gfc_conv_scalarized_array_ref, add_array_offset, gfc_trans_preloop_setup, gfc_conv_section_startstride, gfc_conv_ss_startstride, gfc_conv_loop_setup, transposed_dims, gfc_conv_expr_descriptor): Update all uses. * trans-expr.c (gfc_conv_subref_array_arg, gfc_conv_procedure_call): Ditto. * trans-intrinsic.c (gfc_conv_intrinsic_transfer, walk_inline_intrinsic_transpose): Ditto. * trans-stmt.c (gfc_conv_elemental_dependencies, gfc_trans_pointer_assign_need_temp): Ditto. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180864 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans.h | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'gcc/fortran/trans.h') diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 535c207fcd4..6f9f6c8a768 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -108,15 +108,10 @@ typedef enum gfc_coarray_type; -/* Scalarization State chain. Created by walking an expression tree before - creating the scalarization loops. Then passed as part of a gfc_se structure - to translate the expression inside the loop. Note that these chains are - terminated by gfc_se_terminator, not NULL. A NULL pointer in a gfc_se - indicates to gfc_conv_* that this is a scalar expression. - Note that some member arrays correspond to scalarizer rank and others - are the variable rank. */ +/* The array-specific scalarization informations. The array members of + this struct are indexed by actual array index, and thus can be sparse. */ -typedef struct gfc_ss_info +typedef struct gfc_array_info { int dimen; /* The ref that holds information on this section. */ @@ -144,7 +139,7 @@ typedef struct gfc_ss_info actual_dim = dim[loop_dim] */ int dim[GFC_MAX_DIMENSIONS]; } -gfc_ss_info; +gfc_array_info; typedef enum { @@ -190,8 +185,15 @@ typedef enum } gfc_ss_type; -/* SS structures can only belong to a single loopinfo. They must be added + +/* Scalarization State chain. Created by walking an expression tree before + creating the scalarization loops. Then passed as part of a gfc_se structure + to translate the expression inside the loop. Note that these chains are + terminated by gfc_ss_terminator, not NULL. A NULL pointer in a gfc_se + indicates to gfc_conv_* that this is a scalar expression. + SS structures can only belong to a single loopinfo. They must be added otherwise they will not get freed. */ + typedef struct gfc_ss { gfc_ss_type type; @@ -217,7 +219,7 @@ typedef struct gfc_ss } temp; /* All other types. */ - gfc_ss_info info; + gfc_array_info info; } data; -- cgit v1.2.1 From 91c546541d44cf6b1de95dc80eb8b365519a4a68 Mon Sep 17 00:00:00 2001 From: mikael Date: Thu, 3 Nov 2011 21:44:56 +0000 Subject: * trans.h (struct gfc_array_info): Move dim and dimen fields... (struct gfc_ss): ... here. Remove gfc_ss::data::temp::dimen field. * trans-array.c (gfc_conv_loop_setup): Remove temp_ss dim array initialization. (gfc_get_temp_ss): Initialize dim and dimen. (gfc_free_ss, gfc_get_array_ss, gfc_get_temp_ss, gfc_set_loop_bounds_from_array_spec, get_array_ref_dim, gfc_trans_create_temp_array, gfc_trans_constant_array_constructor, gfc_set_vector_loop_bounds, gfc_conv_scalarized_array_ref, gfc_trans_preloop_setup, gfc_conv_ss_startstride, gfc_conv_resolve_dependencies, gfc_conv_loop_setup, transposed_dims, gfc_conv_expr_descriptor, gfc_alloc_allocatable_for_assignment, gfc_walk_array_ref): Update field references. * trans-expr.c (gfc_conv_subref_array_arg, gfc_conv_procedure_call): Ditto. * trans-intrinsic.c (walk_inline_intrinsic_transpose): Ditto. * trans-stmt.c (gfc_conv_elemental_dependencies): Ditto. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180865 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans.h | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'gcc/fortran/trans.h') diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 6f9f6c8a768..5acab12ad5a 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -113,7 +113,6 @@ gfc_coarray_type; typedef struct gfc_array_info { - int dimen; /* The ref that holds information on this section. */ gfc_ref *ref; /* The descriptor of this array. */ @@ -134,10 +133,6 @@ typedef struct gfc_array_info tree end[GFC_MAX_DIMENSIONS]; tree stride[GFC_MAX_DIMENSIONS]; tree delta[GFC_MAX_DIMENSIONS]; - - /* Translation from loop dimensions to actual dimensions. - actual_dim = dim[loop_dim] */ - int dim[GFC_MAX_DIMENSIONS]; } gfc_array_info; @@ -212,9 +207,6 @@ typedef struct gfc_ss /* GFC_SS_TEMP. */ struct { - /* The rank of the temporary. May be less than the rank of the - assigned expression. */ - int dimen; tree type; } temp; @@ -223,6 +215,11 @@ typedef struct gfc_ss } data; + int dimen; + /* Translation from loop dimensions to actual array dimensions. + actual_dim = dim[loop_dim] */ + int dim[GFC_MAX_DIMENSIONS]; + /* All the SS in a loop and linked through loop_chain. The SS for an expression are linked by the next pointer. */ struct gfc_ss *loop_chain; -- cgit v1.2.1 From f6b46ebcc27964a832aa2bf59be164269b7c9fee Mon Sep 17 00:00:00 2001 From: mikael Date: Thu, 3 Nov 2011 21:47:49 +0000 Subject: * trans.h (struct gfc_ss, struct gfc_array_info): Move shape field from the former struct to the latter. * trans-array.c (gfc_conv_ss_startstride, gfc_conv_loop_setup): Update field references. * trans-expr.c (gfc_trans_subarray_assign): Update field references and factor common reference chains. * trans-io.c (transfer_array_component): Ditto. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180866 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'gcc/fortran/trans.h') diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 5acab12ad5a..daf24995199 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -113,6 +113,8 @@ gfc_coarray_type; typedef struct gfc_array_info { + mpz_t *shape; + /* The ref that holds information on this section. */ gfc_ref *ref; /* The descriptor of this array. */ @@ -193,7 +195,6 @@ typedef struct gfc_ss { gfc_ss_type type; gfc_expr *expr; - mpz_t *shape; tree string_length; union { -- cgit v1.2.1 From 45f3982640ef8034c09b1f99806122525801e62d Mon Sep 17 00:00:00 2001 From: mikael Date: Thu, 3 Nov 2011 21:55:48 +0000 Subject: * trans.h (struct gfc_ss_info): New struct. (gfc_get_ss_info): New macro. (struct gfc_ss): Move type field to struct gfc_ss_info. Add an info field of type gfc_ss_info. * trans-array.c (free_ss_info): New function. (gfc_free_ss): Call free_ss_info. (gfc_get_array_ss, gfc_get_temp_ss, gfc_get_scalar_ss): Allocate gfc_ss_info field. (gfc_get_array_ss, gfc_get_temp_ss, gfc_get_scalar_ss, gfc_set_vector_loop_bounds, gfc_add_loop_ss_code, gfc_conv_array_index_offset, gfc_trans_preloop_setup, gfc_trans_scalarized_loop_boundary, gfc_conv_section_startstride, gfc_conv_ss_startstride, gfc_conv_resolve_dependencies, gfc_conv_loop_setup, transposed_dims, gfc_conv_expr_descriptor, gfc_walk_elemental_function_args): Update references to type. * trans-const.c (gfc_conv_constant): Factor common reference chains and update reference to type. * trans-expr.c (gfc_conv_procedure_call, gfc_trans_assignment_1): Update reference to type. (gfc_conv_array_constructor_expr, gfc_conv_expr, gfc_conv_expr_reference): Ditto. Factor common reference chains. * trans-intrinsic.c (walk_inline_intrinsic_transpose): Update references to type * trans-stmt.c (gfc_trans_where_assign): Ditto. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180867 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'gcc/fortran/trans.h') diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index daf24995199..13d4c580e9a 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -183,6 +183,15 @@ typedef enum gfc_ss_type; +typedef struct gfc_ss_info +{ + gfc_ss_type type; +} +gfc_ss_info; + +#define gfc_get_ss_info() XCNEW (gfc_ss_info) + + /* Scalarization State chain. Created by walking an expression tree before creating the scalarization loops. Then passed as part of a gfc_se structure to translate the expression inside the loop. Note that these chains are @@ -193,7 +202,8 @@ gfc_ss_type; typedef struct gfc_ss { - gfc_ss_type type; + gfc_ss_info *info; + gfc_expr *expr; tree string_length; union -- cgit v1.2.1 From bfa437805588fe031de39fef8eed00cc0a244a41 Mon Sep 17 00:00:00 2001 From: mikael Date: Thu, 3 Nov 2011 22:01:46 +0000 Subject: * trans.h (struct gfc_ss, struct gfc_ss_info): Move field expr from the former struct to the latter. * trans-array.c (gfc_get_array_ss, gfc_get_scalar_ss, gfc_trans_constant_array_constructor, gfc_trans_array_constructor, gfc_add_loop_ss_code, gfc_conv_ss_descriptor, gfc_trans_array_bound_check, gfc_conv_array_index_offset, gfc_conv_scalarized_array_ref, gfc_conv_ss_startstride, gfc_could_be_alias, gfc_conv_resolve_dependencies, gfc_conv_loop_setup, gfc_conv_expr_descriptor, gfc_alloc_allocatable_for_assignment): Update references to expr and factor common reference chains where possible. * trans-const.c (gfc_conv_constant): Ditto. * trans-expr.c (gfc_conv_variable, gfc_conv_procedure_call, gfc_conv_array_constructor_expr, gfc_conv_expr, gfc_conv_expr_reference): Ditto. * trans-intrinsic.c (trans_this_image, gfc_conv_intrinsic_bound, gfc_conv_intrinsic_cobound, gfc_conv_intrinsic_funcall, gfc_add_intrinsic_ss_code): Ditto. * trans-stmt.c (gfc_conv_elemental_dependencies): Ditto. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180868 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gcc/fortran/trans.h') diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 13d4c580e9a..592236016e6 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -186,6 +186,7 @@ gfc_ss_type; typedef struct gfc_ss_info { gfc_ss_type type; + gfc_expr *expr; } gfc_ss_info; @@ -204,7 +205,6 @@ typedef struct gfc_ss { gfc_ss_info *info; - gfc_expr *expr; tree string_length; union { -- cgit v1.2.1 From 3d653dea0f9e13fd2484d3ee3135800c2c93a0eb Mon Sep 17 00:00:00 2001 From: mikael Date: Thu, 3 Nov 2011 22:04:50 +0000 Subject: * trans.h (struct gfc_ss, struct gfc_ss_info): Move field string_length from the former struct to the latter. * trans-array.c (gfc_get_temp_ss, gfc_trans_array_constructor, gfc_add_loop_ss_code, gfc_conv_ss_descriptor, gfc_conv_scalarized_array_ref, gfc_conv_resolve_dependencies, gfc_conv_loop_setup, gfc_conv_expr_descriptor): Update references to string_length and factor common reference chains where possible. * trans-const.c (gfc_conv_constant): Ditto. * trans-expr.c (gfc_conv_variable, gfc_conv_subref_array_arg, gfc_conv_expr): Ditto. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180869 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gcc/fortran/trans.h') diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 592236016e6..f1b109a80e8 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -187,6 +187,7 @@ typedef struct gfc_ss_info { gfc_ss_type type; gfc_expr *expr; + tree string_length; } gfc_ss_info; @@ -205,7 +206,6 @@ typedef struct gfc_ss { gfc_ss_info *info; - tree string_length; union { /* If type is GFC_SS_SCALAR or GFC_SS_REFERENCE. */ -- cgit v1.2.1 From aaaf75f7383104e9da85f377bf647e21f79049dd Mon Sep 17 00:00:00 2001 From: mikael Date: Thu, 3 Nov 2011 22:10:25 +0000 Subject: * trans.h (struct gfc_ss, struct gfc_ss_info): Move member struct gfc_ss::data::scalar into newly created union gfc_ss_info::data, and rename subfield expr to value. * trans-array.c (gfc_add_loop_ss_code, gfc_conv_array_index_offset, gfc_conv_expr_descriptor): Update reference chains. * trans-const.c (gfc_conv_constant): Ditto. * trans-expr.c (gfc_conv_expr): Ditto. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180870 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans.h | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'gcc/fortran/trans.h') diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index f1b109a80e8..567e5a343f1 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -188,6 +188,17 @@ typedef struct gfc_ss_info gfc_ss_type type; gfc_expr *expr; tree string_length; + + union + { + /* If type is GFC_SS_SCALAR or GFC_SS_REFERENCE. */ + struct + { + tree value; + } + scalar; + } + data; } gfc_ss_info; @@ -208,13 +219,6 @@ typedef struct gfc_ss union { - /* If type is GFC_SS_SCALAR or GFC_SS_REFERENCE. */ - struct - { - tree expr; - } - scalar; - /* GFC_SS_TEMP. */ struct { -- cgit v1.2.1 From 0a9ca5de5663f6e84b301bd4b08f6590de0c8c5d Mon Sep 17 00:00:00 2001 From: mikael Date: Thu, 3 Nov 2011 22:16:29 +0000 Subject: * trans.h (struct gfc_ss, struct gfc_ss_info): Move member struct gfc_ss::data::temp into gfc_ss_info::data. * trans-array.c (gfc_get_temp_ss, gfc_conv_loop_setup): Update reference chains. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180872 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'gcc/fortran/trans.h') diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 567e5a343f1..60708e937a9 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -197,6 +197,13 @@ typedef struct gfc_ss_info tree value; } scalar; + + /* GFC_SS_TEMP. */ + struct + { + tree type; + } + temp; } data; } @@ -219,12 +226,6 @@ typedef struct gfc_ss union { - /* GFC_SS_TEMP. */ - struct - { - tree type; - } - temp; /* All other types. */ gfc_array_info info; } -- cgit v1.2.1 From b8f3834798a7071af579131273d8beefa4db1bdb Mon Sep 17 00:00:00 2001 From: mikael Date: Thu, 3 Nov 2011 22:21:36 +0000 Subject: * trans.h (struct gfc_ss, struct gfc_ss_info): Move field gfc_ss::data::info into gfc_ss_info::data and remove empty union gfc_ss::data. * trans-array.c (gfc_free_ss, gfc_trans_create_temp_array, gfc_trans_constant_array_constructor, gfc_trans_array_constructor, gfc_set_vector_loop_bounds, gfc_add_loop_ss_code, gfc_conv_ss_descriptor, gfc_trans_array_bound_check, gfc_conv_array_index_offset, gfc_conv_scalarized_array_ref, add_array_offset, gfc_trans_preloop_setup, gfc_trans_scalarized_boundary, gfc_conv_section_startstride, gfc_conv_ss_startstride, gfc_could_be_alias, gfc_conv_loop_setup, gfc_conv_expr_descriptor, gfc_alloc_allocatable_for_assignment, gfc_walk_array_ref): Update reference chains and factor them where possible. * trans-expr.c (gfc_conv_variable, gfc_conv_subref_array_arg, gfc_conv_procedure_call, gfc_trans_subarray_assign): Updata reference chains. * trans-intrinsic.c (gfc_conv_intrinsic_transfer): Ditto. * trans-io.c (transfer_array_component): Ditto. * trans-stmt.c (gfc_conv_elemental_dependencies, gfc_trans_pointer_assign_need_temp): Ditto. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180873 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans.h | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'gcc/fortran/trans.h') diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 60708e937a9..e74da4139ad 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -204,6 +204,9 @@ typedef struct gfc_ss_info tree type; } temp; + + /* All other types. */ + gfc_array_info array; } data; } @@ -224,13 +227,6 @@ typedef struct gfc_ss { gfc_ss_info *info; - union - { - /* All other types. */ - gfc_array_info info; - } - data; - int dimen; /* Translation from loop dimensions to actual array dimensions. actual_dim = dim[loop_dim] */ -- cgit v1.2.1 From 1b3fff24b46c1fbc5686b62512a1bc496524cf15 Mon Sep 17 00:00:00 2001 From: mikael Date: Thu, 3 Nov 2011 22:24:37 +0000 Subject: * trans.h (struct gfc_ss, struct gfc_ss_info): Move field gfc_ss::useflags into gfc_ss_info. * trans-array.c (gfc_mark_ss_chain_used, gfc_trans_preloop_setup, gfc_trans_scalarizing_loops, gfc_trans_scalarized_boundary): Update reference chains. * trans-expr.c (gfc_conv_procedure_call): Ditto. * trans-intrinsic.c (gfc_conv_intrinsic_function): Ditto. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180875 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'gcc/fortran/trans.h') diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index e74da4139ad..907c2713958 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -209,6 +209,11 @@ typedef struct gfc_ss_info gfc_array_info array; } data; + + /* This is used by assignments requiring temporaries. The bits specify which + loops the terms appear in. This will be 1 for the RHS expressions, + 2 for the LHS expressions, and 3(=1|2) for the temporary. */ + unsigned useflags:2; } gfc_ss_info; @@ -237,11 +242,9 @@ typedef struct gfc_ss struct gfc_ss *loop_chain; struct gfc_ss *next; - /* This is used by assignments requiring temporaries. The bits specify which - loops the terms appear in. This will be 1 for the RHS expressions, - 2 for the LHS expressions, and 3(=1|2) for the temporary. The bit - 'where' suppresses precalculation of scalars in WHERE assignments. */ - unsigned useflags:2, where:1, is_alloc_lhs:1; + /* The bit 'where' suppresses precalculation of scalars in WHERE assignments. + */ + unsigned where:1, is_alloc_lhs:1; } gfc_ss; #define gfc_get_ss() XCNEW (gfc_ss) -- cgit v1.2.1 From 77e80024c9a3ed5a229e1cb4a5afe6b639eebf47 Mon Sep 17 00:00:00 2001 From: mikael Date: Thu, 3 Nov 2011 22:29:25 +0000 Subject: * trans.h (struct gfc_ss, struct gfc_ss_info): Move field gfc_ss::where into gfc_ss_info. * trans-array.c (gfc_add_loop_ss_code): Update reference chains. * trans-stmt.c (gfc_trans_where_assign, gfc_trans_where_3): Ditto. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180877 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'gcc/fortran/trans.h') diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 907c2713958..c35b1ae0fda 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -214,6 +214,9 @@ typedef struct gfc_ss_info loops the terms appear in. This will be 1 for the RHS expressions, 2 for the LHS expressions, and 3(=1|2) for the temporary. */ unsigned useflags:2; + + /* Suppresses precalculation of scalars in WHERE assignments. */ + unsigned where:1; } gfc_ss_info; @@ -242,9 +245,7 @@ typedef struct gfc_ss struct gfc_ss *loop_chain; struct gfc_ss *next; - /* The bit 'where' suppresses precalculation of scalars in WHERE assignments. - */ - unsigned where:1, is_alloc_lhs:1; + unsigned is_alloc_lhs:1; } gfc_ss; #define gfc_get_ss() XCNEW (gfc_ss) -- cgit v1.2.1 From 2092de0642f48458576e6f34c5f48f55a378c58f Mon Sep 17 00:00:00 2001 From: mikael Date: Thu, 3 Nov 2011 22:50:06 +0000 Subject: * trans.h (struct gfc_ss_info): New field refcount. * trans-array.c (free_ss_info): Decrement refcount. Return early if still non-zero. (gfc_get_array_ss, gfc_get_temp_ss, gfc_get_scalar_ss): Increment refcount. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180883 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans.h | 1 + 1 file changed, 1 insertion(+) (limited to 'gcc/fortran/trans.h') diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index c35b1ae0fda..02f2b422f07 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -185,6 +185,7 @@ gfc_ss_type; typedef struct gfc_ss_info { + int refcount; gfc_ss_type type; gfc_expr *expr; tree string_length; -- cgit v1.2.1 From 5e3e355bb34e3261542c1198e46e835c4d91fb68 Mon Sep 17 00:00:00 2001 From: mikael Date: Thu, 3 Nov 2011 22:54:37 +0000 Subject: * trans.h (struct gfc_ss): New field loop. * trans-array.c (set_ss_loop): New function. (gfc_add_ss_to_loop): Call set_ss_loop. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180884 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'gcc/fortran/trans.h') diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 02f2b422f07..62bcc643fb5 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -246,6 +246,9 @@ typedef struct gfc_ss struct gfc_ss *loop_chain; struct gfc_ss *next; + /* The loop this gfc_ss is in. */ + struct gfc_loopinfo *loop; + unsigned is_alloc_lhs:1; } gfc_ss; -- cgit v1.2.1 From 7a516fb346b6fccae85af8e3068068bfead8e845 Mon Sep 17 00:00:00 2001 From: mikael Date: Thu, 3 Nov 2011 23:17:08 +0000 Subject: * trans.h (struct gfc_ss): New field parent. * trans-array.c (gfc_trans_scalarizing_loops): Skip clearing if a parent exists. * trans-expr.c (gfc_advance_se_ss_chain): Move to parent ss at the end of the chain. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180889 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'gcc/fortran/trans.h') diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 62bcc643fb5..53c5ce25fa4 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -246,6 +246,9 @@ typedef struct gfc_ss struct gfc_ss *loop_chain; struct gfc_ss *next; + /* Non-null if the ss is part of a nested loop. */ + struct gfc_ss *parent; + /* The loop this gfc_ss is in. */ struct gfc_loopinfo *loop; -- cgit v1.2.1 From f53dc1beca14933ff21b68564c9ff4f93eb882ac Mon Sep 17 00:00:00 2001 From: mikael Date: Thu, 3 Nov 2011 23:31:32 +0000 Subject: * trans.h (struct gfc_ss): New field nested_ss. * trans-expr.c (gfc_advance_se_ss_chain): Update assertion. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180893 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'gcc/fortran/trans.h') diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 53c5ce25fa4..06088797f64 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -249,6 +249,11 @@ typedef struct gfc_ss /* Non-null if the ss is part of a nested loop. */ struct gfc_ss *parent; + /* If the evaluation of an expression requires a nested loop (for example + if the sum intrinsic is evaluated inline), this points to the nested + loop's gfc_ss. */ + struct gfc_ss *nested_ss; + /* The loop this gfc_ss is in. */ struct gfc_loopinfo *loop; -- cgit v1.2.1 From e390313110b6f6d77d0adc77e82b830bc8b15d39 Mon Sep 17 00:00:00 2001 From: mikael Date: Thu, 3 Nov 2011 23:39:11 +0000 Subject: * trans.h (struct gfc_loopinfo): New fields nested and next. * trans-array.c (gfc_add_ss_to_loop): Update list of nested list if ss has non-null nested_ss field. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180897 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'gcc/fortran/trans.h') diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 06088797f64..0549aa79301 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -279,6 +279,9 @@ typedef struct gfc_loopinfo /* The SS describing the temporary used in an assignment. */ gfc_ss *temp_ss; + /* Chain of nested loops. */ + struct gfc_loopinfo *nested, *next; + /* The scalarization loop index variables. */ tree loopvar[GFC_MAX_DIMENSIONS]; -- cgit v1.2.1 From 9de941c0b8cd7c36f63ecd6681b89f2a962055b0 Mon Sep 17 00:00:00 2001 From: mikael Date: Thu, 3 Nov 2011 23:45:19 +0000 Subject: * trans.h (struct gfc_loopinfo): New field parent. * trans-array.c (gfc_cleanup_loop): Free nested loops. (gfc_add_ss_to_loop): Set nested_loop's parent loop. (gfc_trans_array_constructor): Update assertion. (gfc_conv_loop_setup): Ditto. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180899 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'gcc/fortran/trans.h') diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 0549aa79301..4d745f144ce 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -279,6 +279,9 @@ typedef struct gfc_loopinfo /* The SS describing the temporary used in an assignment. */ gfc_ss *temp_ss; + /* Non-null if this loop is nested in another one. */ + struct gfc_loopinfo *parent; + /* Chain of nested loops. */ struct gfc_loopinfo *nested, *next; -- cgit v1.2.1 From efeb2b164fbfa123b7dee536ecab9edff0621e5d Mon Sep 17 00:00:00 2001 From: mikael Date: Thu, 3 Nov 2011 23:58:20 +0000 Subject: * trans.h (gfc_inline_intrinsic_function_p): Move prototype... * gfortran.h (gfc_inline_intrinsic_function_p): ... here. * dependency.c (gfc_check_argument_var_dependency): Check dependencies of inline intrinsics' arguments. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180904 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans.h | 3 --- 1 file changed, 3 deletions(-) (limited to 'gcc/fortran/trans.h') diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 4d745f144ce..5757865b3a1 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -396,9 +396,6 @@ tree gfc_builtin_decl_for_float_kind (enum built_in_function, int); tree gfc_conv_intrinsic_subroutine (gfc_code *); void gfc_conv_intrinsic_function (gfc_se *, gfc_expr *); -/* Is the intrinsic expanded inline. */ -bool gfc_inline_intrinsic_function_p (gfc_expr *); - /* Does an intrinsic map directly to an external library call This is true for array-returning intrinsics, unless gfc_inline_intrinsic_function_p returns true. */ -- cgit v1.2.1 From 88df5e2fe380ded681c7058f6b1ab1db7ceb10a6 Mon Sep 17 00:00:00 2001 From: mikael Date: Fri, 4 Nov 2011 00:31:19 +0000 Subject: PR fortran/43829 * trans-array.c (gfc_conv_expr_descriptor): Accept the inline intrinsic case in the assertion. * trans-intrinsic (enter_nested_loop): New function. (gfc_conv_intrinsic_arith): Support non-scalar cases. (nest_loop_dimension, walk_inline_intrinsic_arith): New functions. (walk_inline_intrinsic_function): Handle sum and product. (gfc_inline_intrinsic_function_p): Ditto. * trans.h (gfc_get_loopinfo): New macro. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180920 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/trans.h | 1 + 1 file changed, 1 insertion(+) (limited to 'gcc/fortran/trans.h') diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 5757865b3a1..22033d38d15 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -310,6 +310,7 @@ typedef struct gfc_loopinfo } gfc_loopinfo; +#define gfc_get_loopinfo() XCNEW (gfc_loopinfo) /* Information about a symbol that has been shadowed by a temporary. */ typedef struct -- cgit v1.2.1