Commit f98cfd3c by Mikael Morin

trans.h (struct gfc_ss, [...]): Move field expr from the former struct to the latter.

	* 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.

From-SVN: r180868
parent bcc4d4e0
2011-11-03 Mikael Morin <mikael@gcc.gnu.org> 2011-11-03 Mikael Morin <mikael@gcc.gnu.org>
* 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.
2011-11-03 Mikael Morin <mikael@gcc.gnu.org>
* trans.h (struct gfc_ss_info): New struct. * trans.h (struct gfc_ss_info): New struct.
(gfc_get_ss_info): New macro. (gfc_get_ss_info): New macro.
(struct gfc_ss): Move type field to struct gfc_ss_info. (struct gfc_ss): Move type field to struct gfc_ss_info.
......
...@@ -385,9 +385,12 @@ gfc_conv_constant (gfc_se * se, gfc_expr * expr) ...@@ -385,9 +385,12 @@ gfc_conv_constant (gfc_se * se, gfc_expr * expr)
ss = se->ss; ss = se->ss;
if (ss != NULL) if (ss != NULL)
{ {
gfc_ss_info *ss_info;
ss_info = ss->info;
gcc_assert (ss != gfc_ss_terminator); gcc_assert (ss != gfc_ss_terminator);
gcc_assert (ss->info->type == GFC_SS_SCALAR); gcc_assert (ss_info->type == GFC_SS_SCALAR);
gcc_assert (se->ss->expr == expr); gcc_assert (ss_info->expr == expr);
se->expr = se->ss->data.scalar.expr; se->expr = se->ss->data.scalar.expr;
se->string_length = se->ss->string_length; se->string_length = se->ss->string_length;
......
...@@ -613,6 +613,7 @@ conv_parent_component_references (gfc_se * se, gfc_ref * ref) ...@@ -613,6 +613,7 @@ conv_parent_component_references (gfc_se * se, gfc_ref * ref)
static void static void
gfc_conv_variable (gfc_se * se, gfc_expr * expr) gfc_conv_variable (gfc_se * se, gfc_expr * expr)
{ {
gfc_ss *ss;
gfc_ref *ref; gfc_ref *ref;
gfc_symbol *sym; gfc_symbol *sym;
tree parent_decl = NULL_TREE; tree parent_decl = NULL_TREE;
...@@ -622,11 +623,12 @@ gfc_conv_variable (gfc_se * se, gfc_expr * expr) ...@@ -622,11 +623,12 @@ gfc_conv_variable (gfc_se * se, gfc_expr * expr)
bool entry_master; bool entry_master;
sym = expr->symtree->n.sym; sym = expr->symtree->n.sym;
if (se->ss != NULL) ss = se->ss;
if (ss != NULL)
{ {
/* Check that something hasn't gone horribly wrong. */ /* Check that something hasn't gone horribly wrong. */
gcc_assert (se->ss != gfc_ss_terminator); gcc_assert (ss != gfc_ss_terminator);
gcc_assert (se->ss->expr == expr); gcc_assert (ss->info->expr == expr);
/* A scalarized term. We already know the descriptor. */ /* A scalarized term. We already know the descriptor. */
se->expr = se->ss->data.info.descriptor; se->expr = se->ss->data.info.descriptor;
...@@ -3604,8 +3606,8 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym, ...@@ -3604,8 +3606,8 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym,
callee_alloc = comp->attr.allocatable || comp->attr.pointer; callee_alloc = comp->attr.allocatable || comp->attr.pointer;
gfc_trans_create_temp_array (&se->pre, &se->post, se->loop, se->ss, gfc_trans_create_temp_array (&se->pre, &se->post, se->loop, se->ss,
tmp, NULL_TREE, false, tmp, NULL_TREE, false,
!comp->attr.pointer, !comp->attr.pointer, callee_alloc,
callee_alloc, &se->ss->expr->where); &se->ss->info->expr->where);
/* Pass the temporary as the first argument. */ /* Pass the temporary as the first argument. */
result = info->descriptor; result = info->descriptor;
...@@ -3640,8 +3642,8 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym, ...@@ -3640,8 +3642,8 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym,
callee_alloc = sym->attr.allocatable || sym->attr.pointer; callee_alloc = sym->attr.allocatable || sym->attr.pointer;
gfc_trans_create_temp_array (&se->pre, &se->post, se->loop, se->ss, gfc_trans_create_temp_array (&se->pre, &se->post, se->loop, se->ss,
tmp, NULL_TREE, false, tmp, NULL_TREE, false,
!sym->attr.pointer, !sym->attr.pointer, callee_alloc,
callee_alloc, &se->ss->expr->where); &se->ss->info->expr->where);
/* Pass the temporary as the first argument. */ /* Pass the temporary as the first argument. */
result = info->descriptor; result = info->descriptor;
...@@ -4243,7 +4245,7 @@ gfc_conv_array_constructor_expr (gfc_se * se, gfc_expr * expr) ...@@ -4243,7 +4245,7 @@ gfc_conv_array_constructor_expr (gfc_se * se, gfc_expr * expr)
ss = se->ss; ss = se->ss;
gcc_assert (ss != NULL && ss != gfc_ss_terminator); gcc_assert (ss != NULL && ss != gfc_ss_terminator);
gcc_assert (ss->expr == expr && ss->info->type == GFC_SS_CONSTRUCTOR); gcc_assert (ss->info->expr == expr && ss->info->type == GFC_SS_CONSTRUCTOR);
gfc_conv_tmp_array_ref (se); gfc_conv_tmp_array_ref (se);
} }
...@@ -4827,7 +4829,7 @@ gfc_conv_expr (gfc_se * se, gfc_expr * expr) ...@@ -4827,7 +4829,7 @@ gfc_conv_expr (gfc_se * se, gfc_expr * expr)
gfc_ss *ss; gfc_ss *ss;
ss = se->ss; ss = se->ss;
if (ss && ss->expr == expr if (ss && ss->info->expr == expr
&& (ss->info->type == GFC_SS_SCALAR && (ss->info->type == GFC_SS_SCALAR
|| ss->info->type == GFC_SS_REFERENCE)) || ss->info->type == GFC_SS_REFERENCE))
{ {
...@@ -4957,7 +4959,7 @@ gfc_conv_expr_reference (gfc_se * se, gfc_expr * expr) ...@@ -4957,7 +4959,7 @@ gfc_conv_expr_reference (gfc_se * se, gfc_expr * expr)
tree var; tree var;
ss = se->ss; ss = se->ss;
if (ss && ss->expr == expr if (ss && ss->info->expr == expr
&& ss->info->type == GFC_SS_REFERENCE) && ss->info->type == GFC_SS_REFERENCE)
{ {
/* Returns a reference to the scalar evaluated outside the loop /* Returns a reference to the scalar evaluated outside the loop
......
...@@ -1004,7 +1004,7 @@ trans_this_image (gfc_se * se, gfc_expr *expr) ...@@ -1004,7 +1004,7 @@ trans_this_image (gfc_se * se, gfc_expr *expr)
gcc_assert (!expr->value.function.actual->next->expr); gcc_assert (!expr->value.function.actual->next->expr);
gcc_assert (corank > 0); gcc_assert (corank > 0);
gcc_assert (se->loop->dimen == 1); gcc_assert (se->loop->dimen == 1);
gcc_assert (se->ss->expr == expr); gcc_assert (se->ss->info->expr == expr);
dim_arg = se->loop->loopvar[0]; dim_arg = se->loop->loopvar[0];
dim_arg = fold_build2_loc (input_location, PLUS_EXPR, dim_arg = fold_build2_loc (input_location, PLUS_EXPR,
...@@ -1321,7 +1321,7 @@ gfc_conv_intrinsic_bound (gfc_se * se, gfc_expr * expr, int upper) ...@@ -1321,7 +1321,7 @@ gfc_conv_intrinsic_bound (gfc_se * se, gfc_expr * expr, int upper)
/* Create an implicit second parameter from the loop variable. */ /* Create an implicit second parameter from the loop variable. */
gcc_assert (!arg2->expr); gcc_assert (!arg2->expr);
gcc_assert (se->loop->dimen == 1); gcc_assert (se->loop->dimen == 1);
gcc_assert (se->ss->expr == expr); gcc_assert (se->ss->info->expr == expr);
gfc_advance_se_ss_chain (se); gfc_advance_se_ss_chain (se);
bound = se->loop->loopvar[0]; bound = se->loop->loopvar[0];
bound = fold_build2_loc (input_location, MINUS_EXPR, bound = fold_build2_loc (input_location, MINUS_EXPR,
...@@ -1515,7 +1515,7 @@ conv_intrinsic_cobound (gfc_se * se, gfc_expr * expr) ...@@ -1515,7 +1515,7 @@ conv_intrinsic_cobound (gfc_se * se, gfc_expr * expr)
gcc_assert (!arg2->expr); gcc_assert (!arg2->expr);
gcc_assert (corank > 0); gcc_assert (corank > 0);
gcc_assert (se->loop->dimen == 1); gcc_assert (se->loop->dimen == 1);
gcc_assert (se->ss->expr == expr); gcc_assert (se->ss->info->expr == expr);
bound = se->loop->loopvar[0]; bound = se->loop->loopvar[0];
bound = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type, bound = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
...@@ -2323,7 +2323,7 @@ gfc_conv_intrinsic_funcall (gfc_se * se, gfc_expr * expr) ...@@ -2323,7 +2323,7 @@ gfc_conv_intrinsic_funcall (gfc_se * se, gfc_expr * expr)
gfc_symbol *sym; gfc_symbol *sym;
VEC(tree,gc) *append_args; VEC(tree,gc) *append_args;
gcc_assert (!se->ss || se->ss->expr == expr); gcc_assert (!se->ss || se->ss->info->expr == expr);
if (se->ss) if (se->ss)
gcc_assert (expr->rank > 0); gcc_assert (expr->rank > 0);
...@@ -6800,7 +6800,7 @@ walk_inline_intrinsic_function (gfc_ss * ss, gfc_expr * expr) ...@@ -6800,7 +6800,7 @@ walk_inline_intrinsic_function (gfc_ss * ss, gfc_expr * expr)
void void
gfc_add_intrinsic_ss_code (gfc_loopinfo * loop ATTRIBUTE_UNUSED, gfc_ss * ss) gfc_add_intrinsic_ss_code (gfc_loopinfo * loop ATTRIBUTE_UNUSED, gfc_ss * ss)
{ {
switch (ss->expr->value.function.isym->id) switch (ss->info->expr->value.function.isym->id)
{ {
case GFC_ISYM_UBOUND: case GFC_ISYM_UBOUND:
case GFC_ISYM_LBOUND: case GFC_ISYM_LBOUND:
......
...@@ -220,7 +220,7 @@ gfc_conv_elemental_dependencies (gfc_se * se, gfc_se * loopse, ...@@ -220,7 +220,7 @@ gfc_conv_elemental_dependencies (gfc_se * se, gfc_se * loopse,
info = NULL; info = NULL;
for (ss = loopse->ss; ss && ss != gfc_ss_terminator; ss = ss->next) for (ss = loopse->ss; ss && ss != gfc_ss_terminator; ss = ss->next)
{ {
if (ss->expr != e) if (ss->info->expr != e)
continue; continue;
info = &ss->data.info; info = &ss->data.info;
break; break;
......
...@@ -186,6 +186,7 @@ gfc_ss_type; ...@@ -186,6 +186,7 @@ gfc_ss_type;
typedef struct gfc_ss_info typedef struct gfc_ss_info
{ {
gfc_ss_type type; gfc_ss_type type;
gfc_expr *expr;
} }
gfc_ss_info; gfc_ss_info;
...@@ -204,7 +205,6 @@ typedef struct gfc_ss ...@@ -204,7 +205,6 @@ typedef struct gfc_ss
{ {
gfc_ss_info *info; gfc_ss_info *info;
gfc_expr *expr;
tree string_length; tree string_length;
union union
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment