[GSoC] How to get started with the isl code generation

Tobias Grosser tobias@grosser.es
Sun Jun 8 18:44:00 GMT 2014


On 08/06/2014 19:43, Roman Gareev wrote:
> Hi Tobias,
>
>> This file is empty. It seems to be the perfect place for gloog_isl,
>> maybe give it a more descriptive name. E.g.,
>>
>> graphite_regenerate_ast_isl()
>>
>> We could then rename gloog, to graphite_regenerate_ast_cloog().
>>
>> gloog comes from graphite + cloog and does not make sense in the context
>> of isl.
>
> Would it be better to rename gloog in a separate patch (because it
> could cause renaming of gloog_error, for eaxmple, and increase the
> size of the patch)?

Yes, you are right. Please make this a separate patch and rebase this
patch on the gloog patch.

> I tried to incorporate all your comments in the following patch. I
> also attach the change log to this message.

Comments inline.

>  #endif /* ! GCC_FLAG_TYPES_H */
> diff --git a/gcc/graphite-clast-to-gimple.h b/gcc/graphite-clast-to-gimple.h
> index fc5a679..5e23d94 100644
> --- a/gcc/graphite-clast-to-gimple.h
> +++ b/gcc/graphite-clast-to-gimple.h
> @@ -21,6 +21,8 @@ along with GCC; see the file COPYING3.  If not see
>  #ifndef GCC_GRAPHITE_CLAST_TO_GIMPLE_H
>  #define GCC_GRAPHITE_CLAST_TO_GIMPLE_H
>
> +#include "graphite-htab.h"
> +
>  extern CloogState *cloog_state;
>
>  /* Data structure for CLooG program representation.  */
> @@ -30,14 +32,7 @@ struct cloog_prog_clast {
>    struct clast_stmt *stmt;
>  };
>
> -/* Stores BB's related PBB.  */
> -
> -struct bb_pbb_def
> -{
> -  basic_block bb;
> -  poly_bb_p pbb;
> -};
> -
> +extern bool gloog (scop_p, bb_pbb_htab_type);
>  extern void debug_clast_stmt (struct clast_stmt *);
>  extern void print_clast_stmt (FILE *, struct clast_stmt *);
>
> diff --git a/gcc/graphite-htab.h b/gcc/graphite-htab.h
> index d67dd0c..9f31fac 100644
> --- a/gcc/graphite-htab.h
> +++ b/gcc/graphite-htab.h
> @@ -22,7 +22,14 @@ along with GCC; see the file COPYING3.  If not see
>  #define GCC_GRAPHITE_HTAB_H
>
>  #include "hash-table.h"
> -#include "graphite-clast-to-gimple.h"
> +
> +/* Stores BB's related PBB.  */
> +
> +struct bb_pbb_def
> +{
> +  basic_block bb;
> +  poly_bb_p pbb;
> +};
>
>  /* Hashtable helpers.  */
>
> @@ -52,7 +59,6 @@ bb_pbb_hasher::equal (const value_type *bp1, const compare_type *bp2)
>
>  typedef hash_table <bb_pbb_hasher> bb_pbb_htab_type;
>
> -extern bool gloog (scop_p, bb_pbb_htab_type);
>  poly_bb_p find_pbb_via_hash (bb_pbb_htab_type, basic_block);
>  bool loop_is_parallel_p (loop_p, bb_pbb_htab_type, int);
>  scop_p get_loop_body_pbbs (loop_p, bb_pbb_htab_type, vec<poly_bb_p> *);

I assume all this could be part of the gloog patch?

> diff --git a/gcc/graphite-isl-ast-to-gimple.c b/gcc/graphite-isl-ast-to-gimple.c
> new file mode 100644
> index 0000000..309ba28
> --- /dev/null
> +++ b/gcc/graphite-isl-ast-to-gimple.c
> @@ -0,0 +1,132 @@
> +/* Translation of ISL AST to Gimple.
> +   Copyright (C) 2014 Free Software Foundation, Inc.
> +   Contributed by Roman Gareev <gareevroman@gmail.com>.
> +
> +This file is part of GCC.
> +
> +GCC is free software; you can redistribute it and/or modify
> +it under the terms of the GNU General Public License as published by
> +the Free Software Foundation; either version 3, or (at your option)
> +any later version.
> +
> +GCC is distributed in the hope that it will be useful,
> +but WITHOUT ANY WARRANTY; without even the implied warranty of
> +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +GNU General Public License for more details.
> +
> +You should have received a copy of the GNU General Public License
> +along with GCC; see the file COPYING3.  If not see
> +<http://www.gnu.org/licenses/>.  */
> +
> +#include "config.h"
> +
> +#include <isl/set.h>
> +#include <isl/map.h>
> +#include <isl/union_map.h>
> +#include <isl/ast_build.h>
> +
> +#include "system.h"
> +#include "coretypes.h"
> +#include "tree.h"
> +#include "basic-block.h"
> +#include "tree-ssa-alias.h"
> +#include "internal-fn.h"
> +#include "gimple-expr.h"
> +#include "is-a.h"
> +#include "gimple.h"
> +#include "gimple-iterator.h"
> +#include "tree-ssa-loop.h"
> +#include "tree-pass.h"
> +#include "cfgloop.h"
> +#include "tree-data-ref.h"
> +#include "sese.h"

I am surprised. Are all these includes really needed to get _this_ patch
compile? (I asked this before).

> diff --git a/gcc/testsuite/gcc.dg/graphite/scop-23.c b/gcc/testsuite/gcc.dg/graphite/scop-23.c
> new file mode 100644
> index 0000000..868222a
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/graphite/scop-23.c

Maybe a more descriptive name:

isl-codegen-loop-dumping.c

> @@ -0,0 +1,32 @@
> +/* { dg-additional-options "-floop-parallelize-all -O2 -fgraphite-code-generator=isl" } */

Why do we need -floop-parallelize-all? -fgraphite-identity should be
enough.

> +#include <stdio.h>
> +
> +#define N 16
No need for these defines.
> +
> +int
> +main1 (int n, int *a)
> +{
> +  int i, j;
> +
> +  for (i = 0; i < n - 1; i++)
> +    for (j = 0; j < n; j++)
> +      a[j] = i + n;
And just a single loop.

> +
> +  for (j = 0; j < n; j++)
> +    if (a[j] != i + n - 1)
> +      __builtin_abort ();
No need for the check.

> +int
> +main ()
> +{
> +  int a[N];
> +  main1 (N, a);
> +  return 0;
> +}
No need for main.

And we have a minimal test case.

> +/* { dg-final { scan-tree-dump-times "ISL AST generated by ISL: \nfor \\(int c1 = 0; c1 < n - 1; c1 \\+= 1\\)\n  for \\(int c3 = 0; c3 < n; c3 \\+= 1\\)\n    S_5\\(c1, c3\\);" 1 "graphite"} } */

This is ugly, but there is little we can do about it. Maybe you can ask
on the mailing list if there is a way to write this in multiple lines?

On possibility might be that you write:

> +/* { dg-final { scan-tree-dump-times "ISL AST generated by ISL: \n
? for \\(int c1 = 0; c1 < n - 1; c1 \\+= 1\\)\n
?  for \\(int c3 = 0; c3 < n; c3 \\+= 1\\)\n
?    S_5\\(c1, c3\\);" 1 "graphite"}
? } */

The idea is that you add newlines, but the question mark that is
following immediately after makes them again optional in the regexp.

I would spend maybe 30-45 minutes on this. If you don't find any
solution, let's live with it.

Cheers,
Tobias



More information about the Gcc mailing list