dump_parse_tree (gfc_run_passes): Call optimize_namespace instead of optimize_code.
2010-09-03 Thomas Koenig <tkoenig@gcc.gnu.org> * dump_parse_tree (gfc_run_passes): Call optimize_namespace instead of optimize_code. (optimize_namespace): New function. 2010-09-03 Thomas Koenig <tkoenig@gcc.gnu.org> * gfortran.dg/trim_optimize_2.f90: New test. From-SVN: r163846
This commit is contained in:
parent
d158303227
commit
2bfec36876
2 changed files with 51 additions and 2 deletions
|
@ -28,6 +28,7 @@ along with GCC; see the file COPYING3. If not see
|
|||
/* Forward declarations. */
|
||||
|
||||
static void strip_function_call (gfc_expr *);
|
||||
static void optimize_namespace (gfc_namespace *);
|
||||
static void optimize_assignment (gfc_code *);
|
||||
static void optimize_expr_0 (gfc_expr *);
|
||||
static bool optimize_expr (gfc_expr *);
|
||||
|
@ -41,10 +42,21 @@ static void optimize_actual_arglist (gfc_actual_arglist *);
|
|||
optimization pass is run. */
|
||||
|
||||
void
|
||||
gfc_run_passes (gfc_namespace * ns)
|
||||
gfc_run_passes (gfc_namespace *ns)
|
||||
{
|
||||
if (optimize)
|
||||
optimize_code (ns->code);
|
||||
optimize_namespace (ns);
|
||||
}
|
||||
|
||||
/* Optimize a namespace, including all contained namespaces. */
|
||||
|
||||
static void
|
||||
optimize_namespace (gfc_namespace *ns)
|
||||
{
|
||||
optimize_code (ns->code);
|
||||
|
||||
for (ns = ns->contained; ns; ns = ns->sibling)
|
||||
optimize_namespace (ns);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
37
gcc/testsuite/gfortran.dg/trim_optimize_2.f90
Normal file
37
gcc/testsuite/gfortran.dg/trim_optimize_2.f90
Normal file
|
@ -0,0 +1,37 @@
|
|||
! { dg-do run }
|
||||
! { dg-options "-O -fdump-tree-original" }
|
||||
! Optimize unnecessary TRIMs in contained namespaces too.
|
||||
module faz
|
||||
implicit none
|
||||
contains
|
||||
subroutine bar
|
||||
character(len=3) :: a
|
||||
character(len=4) :: b,c
|
||||
b = 'abcd'
|
||||
a = trim(b)
|
||||
c = trim(trim(a))
|
||||
if (a /= 'abc') call abort
|
||||
if (c /= 'abc') call abort
|
||||
end subroutine bar
|
||||
end module faz
|
||||
|
||||
program main
|
||||
use faz
|
||||
implicit none
|
||||
call foo
|
||||
call bar
|
||||
contains
|
||||
subroutine foo
|
||||
character(len=3) :: a
|
||||
character(len=4) :: b,c
|
||||
b = 'abcd'
|
||||
a = trim(b)
|
||||
c = trim(trim(a))
|
||||
if (a /= 'abc') call abort
|
||||
if (c /= 'abc') call abort
|
||||
end subroutine foo
|
||||
end program main
|
||||
|
||||
! { dg-final { scan-tree-dump-times "memmove" 4 "original" } }
|
||||
! { dg-final { scan-tree-dump-times "string_trim" 0 "original" } }
|
||||
! { dg-final { cleanup-tree-dump "original" } }
|
Loading…
Add table
Reference in a new issue