Comments
Patch
===================================================================
@@ -1,5 +1,5 @@
/* Pass manager for Fortran front end.
- Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
Contributed by Thomas König.
This file is part of GCC.
@@ -37,6 +37,7 @@ static bool optimize_comparison (gfc_expr *, gfc_i
static bool optimize_trim (gfc_expr *);
static bool optimize_lexical_comparison (gfc_expr *);
static void optimize_minmaxloc (gfc_expr **);
+static bool empty_string (gfc_expr *e);
/* How deep we are inside an argument list. */
@@ -734,11 +735,16 @@ optimize_assignment (gfc_code * c)
lhs = c->expr1;
rhs = c->expr2;
- /* Optimize away a = trim(b), where a is a character variable. */
-
if (lhs->ts.type == BT_CHARACTER)
- remove_trim (rhs);
+ {
+ /* Optimize away a = trim(b), where a is a character variable. */
+ remove_trim (rhs);
+ /* Replace a = ' ' by a = '' to optimize away a memcpy. */
+ if (empty_string(rhs))
+ rhs->value.character.length = 0;
+ }
+
if (lhs->rank > 0 && gfc_check_dependency (lhs, rhs, true) == 0)
optimize_binop_array_assignment (c, &rhs, false);
}
Hello world, this rather simple patch makes sure that only memset is used for assigning empty strings when front-end optimization is used. Regression-tested. OK for trunk? Thomas 2012-06-06 Thomas König <tkoenig@gcc.gnu.org> PR fortran/52861 * frontend-passes (empty_string): Add prototype. (optimize_assignment): Set the length of an empty string constant to zero. 2012-06-06 Thomas König <tkoenig@gcc.gnu.org> PR fortran/52861 * gfortran.dg/string_assign_1.f90: New test case.