From patchwork Sat Jul 17 18:38:25 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [fortran] PR 40628, front-end optimization pass From: Thomas Koenig X-Patchwork-Id: 59148 Message-Id: <1279391905.4628.7.camel@linux-fd1f.site> To: fortran@gcc.gnu.org Cc: gcc-patches@gcc.gnu.org Date: Sat, 17 Jul 2010 20:38:25 +0200 Hello world, finally, here's the first attempt at a front-end optimization pass. Right now, it fixes PR 40626 and optimizes comparisons between variables (which only really is relevant for character comparisons). Many more things could (and should) be added over time. This now passes regression-testing for trunk. OK for trunk? Thomas 2010-0717 Thomas Koenig * Make-lang.in: Add fortran/optimize.o. * gfortran.h: Add prototype for gfc_optimize_namespace. * trans-decl.c (gfc_generate_function_code): If optimizing, call gfc_optimize_namespace. * optimize.c: New file. 2010-0717 Thomas Koenig * trim_optimize_1.f90: New test. * character_comparision_1.f90: New test. Index: Make-lang.in =================================================================== --- Make-lang.in (Revision 161930) +++ Make-lang.in (Arbeitskopie) @@ -66,7 +66,7 @@ fortran/trans.o fortran/trans-array.o fortran/trans-common.o \ fortran/trans-const.o fortran/trans-decl.o fortran/trans-expr.o \ fortran/trans-intrinsic.o fortran/trans-io.o fortran/trans-openmp.o \ - fortran/trans-stmt.o fortran/trans-types.o + fortran/trans-stmt.o fortran/trans-types.o fortran/optimize.o fortran_OBJS = $(F95_OBJS) gfortranspec.o Index: gfortran.h =================================================================== --- gfortran.h (Revision 161930) +++ gfortran.h (Arbeitskopie) @@ -2828,4 +2828,8 @@ #define CLASS_DATA(sym) sym->ts.u.derived->components +/* optimize.c */ + +void gfc_optimize_namespace (gfc_namespace *); + #endif /* GCC_GFORTRAN_H */ Index: trans-decl.c =================================================================== --- trans-decl.c (Revision 161930) +++ trans-decl.c (Arbeitskopie) @@ -4374,6 +4374,9 @@ int rank; bool is_recursive; + if (optimize) + gfc_optimize_namespace (ns); + sym = ns->proc_name; /* Check that the frontend isn't still using this. */