On Fri, Mar 11, 2011 at 10:38 PM, Sebastian Pop <seb...@gmail.com> wrote:
> Hi,
>
> we currently call cloog_state_malloc and cloog_state_free too many
> times.  In CLooG-Parma, these functions contain the init and fini
> functions of PPL, and so calling these in the middle of graphite would
> finalize all the PPL data structures, leading to memory corruption.
>
> This patch fixes this problem.  It passed make -k check
> RUNTESTFLAGS=graphite.exp with CLooG-ISL and CLooG-Parma (with only
> one ICE remaining as reported in http://gcc.gnu.org/PR47128 ).  Full
> regstrap with CLooG-ISL in progress on amd64-linux.  Ok for trunk?

Ok.

Thanks,
Richard.

> Thanks,
> Sebastian
>
> 2011-03-11  Sebastian Pop  <sebastian....@amd.com>
>
>        PR tree-optimization/47127
>        * graphite-clast-to-gimple.c (build_cloog_prog): Removed state
>        parameter.
>        (set_cloog_options): Same.
>        (scop_to_clast): Same.
>        (print_clast_stmt): Do not call cloog_state_malloc and
>        cloog_state_free.
>        (print_generated_program): Same.
>        (gloog): Same.
>        * graphite-clast-to-gimple.h (cloog_state): Declared.
>        (scop_to_clast): Adjust declaration.
>        * graphite.c (cloog_state): Defined here.
>        (graphite_initialize): Call cloog_state_malloc.
>        (graphite_finalize): Call cloog_state_free.
> ---
>  gcc/ChangeLog                  |   17 +++++++++++++++++
>  gcc/graphite-clast-to-gimple.c |   37 +++++++++++++++----------------------
>  gcc/graphite-clast-to-gimple.h |    7 +++++--
>  gcc/graphite.c                 |    4 ++++
>  4 files changed, 41 insertions(+), 24 deletions(-)
>
> diff --git a/gcc/ChangeLog b/gcc/ChangeLog
> index 3f58172..76ebc1a 100644
> --- a/gcc/ChangeLog
> +++ b/gcc/ChangeLog
> @@ -1,3 +1,20 @@
> +2011-03-11  Sebastian Pop  <sebastian....@amd.com>
> +
> +       PR tree-optimization/47127
> +       * graphite-clast-to-gimple.c (build_cloog_prog): Removed state
> +       parameter.
> +       (set_cloog_options): Same.
> +       (scop_to_clast): Same.
> +       (print_clast_stmt): Do not call cloog_state_malloc and
> +       cloog_state_free.
> +       (print_generated_program): Same.
> +       (gloog): Same.
> +       * graphite-clast-to-gimple.h (cloog_state): Declared.
> +       (scop_to_clast): Adjust declaration.
> +       * graphite.c (cloog_state): Defined here.
> +       (graphite_initialize): Call cloog_state_malloc.
> +       (graphite_finalize): Call cloog_state_free.
> +
>  2011-03-02  Richard Sandiford  <richard.sandif...@linaro.org>
>
>        PR rtl-optimization/47925
> diff --git a/gcc/graphite-clast-to-gimple.c b/gcc/graphite-clast-to-gimple.c
> index 47a03d5..41356dc 100644
> --- a/gcc/graphite-clast-to-gimple.c
> +++ b/gcc/graphite-clast-to-gimple.c
> @@ -1236,7 +1236,7 @@ init_cloog_input_file (int scop_number)
>
>  static void
>  build_cloog_prog (scop_p scop, CloogProgram *prog,
> -                  CloogOptions *options, CloogState *state ATTRIBUTE_UNUSED)
> +                  CloogOptions *options)
>  {
>   int i;
>   int max_nb_loops = scop_max_loop_depth (scop);
> @@ -1249,7 +1249,7 @@ build_cloog_prog (scop_p scop, CloogProgram *prog,
>
>   cloog_program_set_context
>     (prog, new_Cloog_Domain_from_ppl_Pointset_Powerset (SCOP_CONTEXT (scop),
> -      scop_nb_params (scop), state));
> +      scop_nb_params (scop), cloog_state));
>   nbs = unify_scattering_dimensions (scop);
>   scaldims = (int *) xmalloc (nbs * (sizeof (int)));
>   cloog_program_set_nb_scattdims (prog, nbs);
> @@ -1267,16 +1267,16 @@ build_cloog_prog (scop_p scop, CloogProgram *prog,
>        continue;
>
>       /* Build the new statement and its block.  */
> -      stmt = cloog_statement_alloc (state, pbb_index (pbb));
> +      stmt = cloog_statement_alloc (cloog_state, pbb_index (pbb));
>       dom = new_Cloog_Domain_from_ppl_Pointset_Powerset (PBB_DOMAIN (pbb),
>                                                          scop_nb_params 
> (scop),
> -                                                         state);
> +                                                         cloog_state);
>       block = cloog_block_alloc (stmt, 0, NULL, pbb_dim_iter_domain (pbb));
>       cloog_statement_set_usr (stmt, pbb);
>
>       /* Build loop list.  */
>       {
> -        CloogLoop *new_loop_list = cloog_loop_malloc (state);
> +        CloogLoop *new_loop_list = cloog_loop_malloc (cloog_state);
>         cloog_loop_set_next (new_loop_list, loop_list);
>         cloog_loop_set_domain (new_loop_list, dom);
>         cloog_loop_set_block (new_loop_list, block);
> @@ -1303,7 +1303,7 @@ build_cloog_prog (scop_p scop, CloogProgram *prog,
>        scat = PBB_TRANSFORMED_SCATTERING (pbb);
>         dom = new_Cloog_Scattering_from_ppl_Polyhedron
>           (scat, scop_nb_params (scop), pbb_nb_scattering_transform (pbb),
> -           state);
> +           cloog_state);
>
>         cloog_set_next_scattering (new_scattering, scattering);
>         cloog_set_scattering (new_scattering, dom);
> @@ -1360,9 +1360,9 @@ build_cloog_prog (scop_p scop, CloogProgram *prog,
>  /* Return the options that will be used in GLOOG.  */
>
>  static CloogOptions *
> -set_cloog_options (CloogState *state ATTRIBUTE_UNUSED)
> +set_cloog_options (void)
>  {
> -  CloogOptions *options = cloog_options_malloc (state);
> +  CloogOptions *options = cloog_options_malloc (cloog_state);
>
>   /* Change cloog output language to C.  If we do use FORTRAN instead, cloog
>      will stop e.g. with "ERROR: unbounded loops not allowed in FORTRAN.", if
> @@ -1411,12 +1411,10 @@ set_cloog_options (CloogState *state ATTRIBUTE_UNUSED)
>  void
>  print_clast_stmt (FILE *file, struct clast_stmt *stmt)
>  {
> -  CloogState *state = cloog_state_malloc ();
> -  CloogOptions *options = set_cloog_options (state);
> +  CloogOptions *options = set_cloog_options ();
>
>   clast_pprint (file, stmt, 0, options);
>   cloog_options_free (options);
> -  cloog_state_free (state);
>  }
>
>  /* Prints STMT to STDERR.  */
> @@ -1432,14 +1430,14 @@ debug_clast_stmt (struct clast_stmt *stmt)
>    without a program.  */
>
>  cloog_prog_clast
> -scop_to_clast (scop_p scop, CloogState *state)
> +scop_to_clast (scop_p scop)
>  {
> -  CloogOptions *options = set_cloog_options (state);
> +  CloogOptions *options = set_cloog_options ();
>   cloog_prog_clast pc;
>
>   /* Connect new cloog prog generation to graphite.  */
>   pc.prog = cloog_program_malloc ();
> -  build_cloog_prog (scop, pc.prog, options, state);
> +  build_cloog_prog (scop, pc.prog, options);
>   pc.prog = cloog_program_generate (pc.prog, options);
>   pc.stmt = cloog_clast_create (pc.prog, options);
>
> @@ -1452,10 +1450,9 @@ scop_to_clast (scop_p scop, CloogState *state)
>  void
>  print_generated_program (FILE *file, scop_p scop)
>  {
> -  CloogState *state = cloog_state_malloc ();
> -  CloogOptions *options = set_cloog_options (state);
> +  CloogOptions *options = set_cloog_options ();
>
> -  cloog_prog_clast pc = scop_to_clast (scop, state);
> +  cloog_prog_clast pc = scop_to_clast (scop);
>
>   fprintf (file, "       (prog: \n");
>   cloog_program_print (file, pc.prog);
> @@ -1506,13 +1503,11 @@ gloog (scop_p scop, htab_t bb_pbb_mapping)
>   ifsese if_region = NULL;
>   htab_t newivs_index, params_index;
>   cloog_prog_clast pc;
> -  CloogState *state;
>
> -  state = cloog_state_malloc ();
>   timevar_push (TV_GRAPHITE_CODE_GEN);
>   gloog_error = false;
>
> -  pc = scop_to_clast (scop, state);
> +  pc = scop_to_clast (scop);
>
>   if (dump_file && (dump_flags & TDF_DETAILS))
>     {
> @@ -1577,8 +1572,6 @@ gloog (scop_p scop, htab_t bb_pbb_mapping)
>               num_no_dependency);
>     }
>
> -  cloog_state_free (state);
> -
>   return !gloog_error;
>  }
>  #endif
> diff --git a/gcc/graphite-clast-to-gimple.h b/gcc/graphite-clast-to-gimple.h
> index cd3cbca..9d599d6 100644
> --- a/gcc/graphite-clast-to-gimple.h
> +++ b/gcc/graphite-clast-to-gimple.h
> @@ -22,6 +22,9 @@ along with GCC; see the file COPYING3.  If not see
>  #define GCC_GRAPHITE_CLAST_TO_GIMPLE_H
>
>  #include "graphite-cloog-util.h"
> +
> +extern CloogState *cloog_state;
> +
>  /* Data structure for CLooG program representation.  */
>
>  typedef struct cloog_prog_clast {
> @@ -35,10 +38,10 @@ typedef struct bb_pbb_def
>  {
>   basic_block bb;
>   poly_bb_p pbb;
> -}bb_pbb_def;
> +} bb_pbb_def;
>
>  extern bool gloog (scop_p, htab_t);
> -extern cloog_prog_clast scop_to_clast (scop_p, CloogState *);
> +extern cloog_prog_clast scop_to_clast (scop_p);
>  extern void debug_clast_stmt (struct clast_stmt *);
>  extern void print_clast_stmt (FILE *, struct clast_stmt *);
>
> diff --git a/gcc/graphite.c b/gcc/graphite.c
> index 70c3d46..b013447 100644
> --- a/gcc/graphite.c
> +++ b/gcc/graphite.c
> @@ -54,6 +54,8 @@ along with GCC; see the file COPYING3.  If not see
>  #include "graphite-clast-to-gimple.h"
>  #include "graphite-sese-to-poly.h"
>
> +CloogState *cloog_state;
> +
>  /* Print global statistics to FILE.  */
>
>  static void
> @@ -206,6 +208,7 @@ graphite_initialize (void)
>   ppl_initialized = ppl_initialize ();
>   gcc_assert (ppl_initialized == 0);
>
> +  cloog_state = cloog_state_malloc ();
>   cloog_initialize ();
>
>   if (dump_file && dump_flags)
> @@ -229,6 +232,7 @@ graphite_finalize (bool need_cfg_cleanup_p)
>       tree_estimate_probability ();
>     }
>
> +  cloog_state_free (cloog_state);
>   cloog_finalize ();
>   ppl_finalize ();
>   free_original_copy_tables ();
> --
> 1.7.1
>
>
>

Reply via email to