Commit ed673c00 by Mikael Morin

Move one condition out of gfc_trans_scalar_assign

	* trans.h (gfc_trans_scalar_assign): Remove fourth argument.
	* trans-expr.c (gfc_trans_scalar_assign): Merge fourth into sixth
	argument.
	(gfc_conv_subref_array_arg, gfc_trans_subarray_assign,
	 gfc_trans_subcomponent_assign, gfc_trans_assignment_1): Update callers.
	* trans-array.c (gfc_conv_expr_descriptor): Ditto.
	* trans-stmt.c (forall_make_variable_temp,
	generate_loop_for_temp_to_lhs, generate_loop_for_rhs_to_temp,
	gfc_trans_where_assign, gfc_trans_where_3): Ditto.

From-SVN: r226700
parent 0eb6f71c
2015-08-06 Mikael Morin <mikael@gcc.gnu.org>
* trans.h (gfc_trans_scalar_assign): Remove fourth argument.
* trans-expr.c (gfc_trans_scalar_assign): Merge fourth into sixth
argument.
(gfc_conv_subref_array_arg, gfc_trans_subarray_assign,
gfc_trans_subcomponent_assign, gfc_trans_assignment_1): Update callers.
* trans-array.c (gfc_conv_expr_descriptor): Ditto.
* trans-stmt.c (forall_make_variable_temp,
generate_loop_for_temp_to_lhs, generate_loop_for_rhs_to_temp,
gfc_trans_where_assign, gfc_trans_where_3): Ditto.
2015-08-05 Paul Thomas <pault@gcc.gnu.org> 2015-08-05 Paul Thomas <pault@gcc.gnu.org>
PR fortran/52846 PR fortran/52846
......
...@@ -6882,9 +6882,9 @@ gfc_conv_expr_descriptor (gfc_se *se, gfc_expr *expr) ...@@ -6882,9 +6882,9 @@ gfc_conv_expr_descriptor (gfc_se *se, gfc_expr *expr)
gfc_add_block_to_block (&block, &lse.pre); gfc_add_block_to_block (&block, &lse.pre);
lse.string_length = rse.string_length; lse.string_length = rse.string_length;
tmp = gfc_trans_scalar_assign (&lse, &rse, expr->ts, true, tmp = gfc_trans_scalar_assign (&lse, &rse, expr->ts,
expr->expr_type == EXPR_VARIABLE expr->expr_type == EXPR_VARIABLE
|| expr->expr_type == EXPR_ARRAY, true); || expr->expr_type == EXPR_ARRAY, false);
gfc_add_expr_to_block (&block, tmp); gfc_add_expr_to_block (&block, tmp);
/* Finish the copying loops. */ /* Finish the copying loops. */
......
...@@ -4321,7 +4321,7 @@ gfc_conv_subref_array_arg (gfc_se * parmse, gfc_expr * expr, int g77, ...@@ -4321,7 +4321,7 @@ gfc_conv_subref_array_arg (gfc_se * parmse, gfc_expr * expr, int g77,
if (intent != INTENT_OUT) if (intent != INTENT_OUT)
{ {
tmp = gfc_trans_scalar_assign (&lse, &rse, expr->ts, true, false, true); tmp = gfc_trans_scalar_assign (&lse, &rse, expr->ts, false, false);
gfc_add_expr_to_block (&body, tmp); gfc_add_expr_to_block (&body, tmp);
gcc_assert (rse.ss == gfc_ss_terminator); gcc_assert (rse.ss == gfc_ss_terminator);
gfc_trans_scalarizing_loops (&loop, &body); gfc_trans_scalarizing_loops (&loop, &body);
...@@ -4428,7 +4428,7 @@ gfc_conv_subref_array_arg (gfc_se * parmse, gfc_expr * expr, int g77, ...@@ -4428,7 +4428,7 @@ gfc_conv_subref_array_arg (gfc_se * parmse, gfc_expr * expr, int g77,
gcc_assert (lse.ss == gfc_ss_terminator); gcc_assert (lse.ss == gfc_ss_terminator);
tmp = gfc_trans_scalar_assign (&lse, &rse, expr->ts, false, false, true); tmp = gfc_trans_scalar_assign (&lse, &rse, expr->ts, false, true);
gfc_add_expr_to_block (&body, tmp); gfc_add_expr_to_block (&body, tmp);
/* Generate the copying loops. */ /* Generate the copying loops. */
...@@ -6741,7 +6741,7 @@ gfc_trans_subarray_assign (tree dest, gfc_component * cm, gfc_expr * expr) ...@@ -6741,7 +6741,7 @@ gfc_trans_subarray_assign (tree dest, gfc_component * cm, gfc_expr * expr)
gfc_conv_expr (&rse, expr); gfc_conv_expr (&rse, expr);
tmp = gfc_trans_scalar_assign (&lse, &rse, cm->ts, true, true, true); tmp = gfc_trans_scalar_assign (&lse, &rse, cm->ts, true, false);
gfc_add_expr_to_block (&body, tmp); gfc_add_expr_to_block (&body, tmp);
gcc_assert (rse.ss == gfc_ss_terminator); gcc_assert (rse.ss == gfc_ss_terminator);
...@@ -7250,7 +7250,7 @@ gfc_trans_subcomponent_assign (tree dest, gfc_component * cm, gfc_expr * expr, ...@@ -7250,7 +7250,7 @@ gfc_trans_subcomponent_assign (tree dest, gfc_component * cm, gfc_expr * expr,
if (cm->ts.type == BT_CHARACTER) if (cm->ts.type == BT_CHARACTER)
lse.string_length = cm->ts.u.cl->backend_decl; lse.string_length = cm->ts.u.cl->backend_decl;
lse.expr = dest; lse.expr = dest;
tmp = gfc_trans_scalar_assign (&lse, &se, cm->ts, true, false, true); tmp = gfc_trans_scalar_assign (&lse, &se, cm->ts, false, false);
gfc_add_expr_to_block (&block, tmp); gfc_add_expr_to_block (&block, tmp);
} }
return gfc_finish_block (&block); return gfc_finish_block (&block);
...@@ -8139,7 +8139,7 @@ gfc_conv_string_parameter (gfc_se * se) ...@@ -8139,7 +8139,7 @@ gfc_conv_string_parameter (gfc_se * se)
tree tree
gfc_trans_scalar_assign (gfc_se * lse, gfc_se * rse, gfc_typespec ts, gfc_trans_scalar_assign (gfc_se * lse, gfc_se * rse, gfc_typespec ts,
bool l_is_temp, bool deep_copy, bool dealloc) bool deep_copy, bool dealloc)
{ {
stmtblock_t block; stmtblock_t block;
tree tmp; tree tmp;
...@@ -8188,7 +8188,7 @@ gfc_trans_scalar_assign (gfc_se * lse, gfc_se * rse, gfc_typespec ts, ...@@ -8188,7 +8188,7 @@ gfc_trans_scalar_assign (gfc_se * lse, gfc_se * rse, gfc_typespec ts,
the same as the rhs. This must be done following the assignment the same as the rhs. This must be done following the assignment
to prevent deallocating data that could be used in the rhs to prevent deallocating data that could be used in the rhs
expression. */ expression. */
if (!l_is_temp && dealloc) if (dealloc)
{ {
tmp_var = gfc_evaluate_now (lse->expr, &lse->pre); tmp_var = gfc_evaluate_now (lse->expr, &lse->pre);
tmp = gfc_deallocate_alloc_comp_no_caf (ts.u.derived, tmp_var, 0); tmp = gfc_deallocate_alloc_comp_no_caf (ts.u.derived, tmp_var, 0);
...@@ -9270,9 +9270,9 @@ gfc_trans_assignment_1 (gfc_expr * expr1, gfc_expr * expr2, bool init_flag, ...@@ -9270,9 +9270,9 @@ gfc_trans_assignment_1 (gfc_expr * expr1, gfc_expr * expr2, bool init_flag,
} }
tmp = gfc_trans_scalar_assign (&lse, &rse, expr1->ts, tmp = gfc_trans_scalar_assign (&lse, &rse, expr1->ts,
l_is_temp || init_flag,
expr_is_variable (expr2) || scalar_to_array expr_is_variable (expr2) || scalar_to_array
|| expr2->expr_type == EXPR_ARRAY, dealloc); || expr2->expr_type == EXPR_ARRAY,
!(l_is_temp || init_flag) && dealloc);
gfc_add_expr_to_block (&body, tmp); gfc_add_expr_to_block (&body, tmp);
if (lss == gfc_ss_terminator) if (lss == gfc_ss_terminator)
...@@ -9313,7 +9313,7 @@ gfc_trans_assignment_1 (gfc_expr * expr1, gfc_expr * expr2, bool init_flag, ...@@ -9313,7 +9313,7 @@ gfc_trans_assignment_1 (gfc_expr * expr1, gfc_expr * expr2, bool init_flag,
rse.string_length = string_length; rse.string_length = string_length;
tmp = gfc_trans_scalar_assign (&lse, &rse, expr1->ts, tmp = gfc_trans_scalar_assign (&lse, &rse, expr1->ts,
false, false, dealloc); false, dealloc);
gfc_add_expr_to_block (&body, tmp); gfc_add_expr_to_block (&body, tmp);
} }
......
...@@ -2852,8 +2852,8 @@ forall_make_variable_temp (gfc_code *c, stmtblock_t *pre, stmtblock_t *post) ...@@ -2852,8 +2852,8 @@ forall_make_variable_temp (gfc_code *c, stmtblock_t *pre, stmtblock_t *post)
tse.expr = gfc_create_var (tmp, "temp"); tse.expr = gfc_create_var (tmp, "temp");
} }
tmp = gfc_trans_scalar_assign (&tse, &rse, e->ts, true, tmp = gfc_trans_scalar_assign (&tse, &rse, e->ts,
e->expr_type == EXPR_VARIABLE, true); e->expr_type == EXPR_VARIABLE, false);
gfc_add_expr_to_block (pre, tmp); gfc_add_expr_to_block (pre, tmp);
} }
gfc_free_expr (e); gfc_free_expr (e);
...@@ -3224,7 +3224,7 @@ generate_loop_for_temp_to_lhs (gfc_expr *expr, tree tmp1, tree count3, ...@@ -3224,7 +3224,7 @@ generate_loop_for_temp_to_lhs (gfc_expr *expr, tree tmp1, tree count3,
/* Use the scalar assignment. */ /* Use the scalar assignment. */
rse.string_length = lse.string_length; rse.string_length = lse.string_length;
tmp = gfc_trans_scalar_assign (&lse, &rse, expr->ts, false, true, true); tmp = gfc_trans_scalar_assign (&lse, &rse, expr->ts, true, true);
/* Form the mask expression according to the mask tree list. */ /* Form the mask expression according to the mask tree list. */
if (wheremask) if (wheremask)
...@@ -3322,8 +3322,8 @@ generate_loop_for_rhs_to_temp (gfc_expr *expr2, tree tmp1, tree count3, ...@@ -3322,8 +3322,8 @@ generate_loop_for_rhs_to_temp (gfc_expr *expr2, tree tmp1, tree count3,
/* Use the scalar assignment. */ /* Use the scalar assignment. */
lse.string_length = rse.string_length; lse.string_length = rse.string_length;
tmp = gfc_trans_scalar_assign (&lse, &rse, expr2->ts, true, tmp = gfc_trans_scalar_assign (&lse, &rse, expr2->ts,
expr2->expr_type == EXPR_VARIABLE, true); expr2->expr_type == EXPR_VARIABLE, false);
/* Form the mask expression according to the mask tree list. */ /* Form the mask expression according to the mask tree list. */
if (wheremask) if (wheremask)
...@@ -4497,7 +4497,7 @@ gfc_trans_where_assign (gfc_expr *expr1, gfc_expr *expr2, ...@@ -4497,7 +4497,7 @@ gfc_trans_where_assign (gfc_expr *expr1, gfc_expr *expr2,
/* Use the scalar assignment as is. */ /* Use the scalar assignment as is. */
tmp = gfc_trans_scalar_assign (&lse, &rse, expr1->ts, tmp = gfc_trans_scalar_assign (&lse, &rse, expr1->ts,
loop.temp_ss != NULL, false, true); false, loop.temp_ss == NULL);
tmp = build3_v (COND_EXPR, maskexpr, tmp, build_empty_stmt (input_location)); tmp = build3_v (COND_EXPR, maskexpr, tmp, build_empty_stmt (input_location));
...@@ -4550,8 +4550,7 @@ gfc_trans_where_assign (gfc_expr *expr1, gfc_expr *expr2, ...@@ -4550,8 +4550,7 @@ gfc_trans_where_assign (gfc_expr *expr1, gfc_expr *expr2,
TREE_TYPE (maskexpr), maskexpr); TREE_TYPE (maskexpr), maskexpr);
/* Use the scalar assignment as is. */ /* Use the scalar assignment as is. */
tmp = gfc_trans_scalar_assign (&lse, &rse, expr1->ts, false, false, tmp = gfc_trans_scalar_assign (&lse, &rse, expr1->ts, false, true);
true);
tmp = build3_v (COND_EXPR, maskexpr, tmp, tmp = build3_v (COND_EXPR, maskexpr, tmp,
build_empty_stmt (input_location)); build_empty_stmt (input_location));
gfc_add_expr_to_block (&body, tmp); gfc_add_expr_to_block (&body, tmp);
...@@ -4951,8 +4950,8 @@ gfc_trans_where_3 (gfc_code * cblock, gfc_code * eblock) ...@@ -4951,8 +4950,8 @@ gfc_trans_where_3 (gfc_code * cblock, gfc_code * eblock)
gfc_conv_expr (&edse, edst); gfc_conv_expr (&edse, edst);
} }
tstmt = gfc_trans_scalar_assign (&tdse, &tsse, tdst->ts, false, false, true); tstmt = gfc_trans_scalar_assign (&tdse, &tsse, tdst->ts, false, true);
estmt = eblock ? gfc_trans_scalar_assign (&edse, &esse, edst->ts, false, estmt = eblock ? gfc_trans_scalar_assign (&edse, &esse, edst->ts,
false, true) false, true)
: build_empty_stmt (input_location); : build_empty_stmt (input_location);
tmp = build3_v (COND_EXPR, cexpr, tstmt, estmt); tmp = build3_v (COND_EXPR, cexpr, tstmt, estmt);
......
...@@ -478,8 +478,7 @@ int gfc_conv_procedure_call (gfc_se *, gfc_symbol *, gfc_actual_arglist *, ...@@ -478,8 +478,7 @@ int gfc_conv_procedure_call (gfc_se *, gfc_symbol *, gfc_actual_arglist *,
void gfc_conv_subref_array_arg (gfc_se *, gfc_expr *, int, sym_intent, bool); void gfc_conv_subref_array_arg (gfc_se *, gfc_expr *, int, sym_intent, bool);
/* Generate code for a scalar assignment. */ /* Generate code for a scalar assignment. */
tree gfc_trans_scalar_assign (gfc_se *, gfc_se *, gfc_typespec, bool, bool, tree gfc_trans_scalar_assign (gfc_se *, gfc_se *, gfc_typespec, bool, bool);
bool);
/* Translate COMMON blocks. */ /* Translate COMMON blocks. */
void gfc_trans_common (gfc_namespace *); void gfc_trans_common (gfc_namespace *);
......
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