Looks good to me.  (ChangeLog entry?)

Thanks,
Richard.

On Thu, Aug 27, 2015 at 12:14 AM, Sebastian Pop <s....@samsung.com> wrote:
> ---
>  gcc/Makefile.in                                    |    2 -
>  gcc/common.opt                                     |   16 +-
>  gcc/doc/invoke.texi                                |  108 +-
>  gcc/graphite-blocking.c                            |  270 -----
>  gcc/graphite-interchange.c                         |  656 ------------
>  gcc/graphite-optimize-isl.c                        |   14 +-
>  gcc/graphite-poly.c                                |  489 +--------
>  gcc/graphite-poly.h                                | 1082 
> --------------------
>  gcc/graphite-sese-to-poly.c                        |   22 +-
>  gcc/graphite.c                                     |   10 +-
>  gcc/testsuite/g++.dg/graphite/graphite.exp         |   10 +-
>  gcc/testsuite/gcc.dg/graphite/block-0.c            |    2 +-
>  gcc/testsuite/gcc.dg/graphite/block-1.c            |    2 +-
>  gcc/testsuite/gcc.dg/graphite/block-3.c            |    4 +-
>  gcc/testsuite/gcc.dg/graphite/block-4.c            |    4 +-
>  gcc/testsuite/gcc.dg/graphite/block-5.c            |    2 +-
>  gcc/testsuite/gcc.dg/graphite/block-6.c            |    2 +-
>  gcc/testsuite/gcc.dg/graphite/block-7.c            |    2 +-
>  gcc/testsuite/gcc.dg/graphite/block-8.c            |    2 +-
>  gcc/testsuite/gcc.dg/graphite/block-pr47654.c      |    2 +-
>  gcc/testsuite/gcc.dg/graphite/graphite.exp         |   14 +-
>  gcc/testsuite/gcc.dg/graphite/interchange-0.c      |    2 +-
>  gcc/testsuite/gcc.dg/graphite/interchange-1.c      |    2 +-
>  gcc/testsuite/gcc.dg/graphite/interchange-10.c     |    2 +-
>  gcc/testsuite/gcc.dg/graphite/interchange-11.c     |    2 +-
>  gcc/testsuite/gcc.dg/graphite/interchange-12.c     |    2 +-
>  gcc/testsuite/gcc.dg/graphite/interchange-13.c     |    2 +-
>  gcc/testsuite/gcc.dg/graphite/interchange-14.c     |    3 +-
>  gcc/testsuite/gcc.dg/graphite/interchange-15.c     |    4 +-
>  gcc/testsuite/gcc.dg/graphite/interchange-3.c      |    2 +-
>  gcc/testsuite/gcc.dg/graphite/interchange-4.c      |    2 +-
>  gcc/testsuite/gcc.dg/graphite/interchange-5.c      |    2 +-
>  gcc/testsuite/gcc.dg/graphite/interchange-6.c      |    2 +-
>  gcc/testsuite/gcc.dg/graphite/interchange-7.c      |    2 +-
>  gcc/testsuite/gcc.dg/graphite/interchange-8.c      |    2 +-
>  gcc/testsuite/gcc.dg/graphite/interchange-9.c      |    2 +-
>  gcc/testsuite/gcc.dg/graphite/interchange-mvt.c    |    4 +-
>  gcc/testsuite/gcc.dg/graphite/pr37485.c            |    5 +-
>  gcc/testsuite/gcc.dg/graphite/uns-block-1.c        |    2 +-
>  gcc/testsuite/gcc.dg/graphite/uns-interchange-12.c |    2 +-
>  gcc/testsuite/gcc.dg/graphite/uns-interchange-14.c |    3 +-
>  gcc/testsuite/gcc.dg/graphite/uns-interchange-15.c |    4 +-
>  gcc/testsuite/gcc.dg/graphite/uns-interchange-9.c  |    2 +-
>  .../gcc.dg/graphite/uns-interchange-mvt.c          |    4 +-
>  gcc/testsuite/gfortran.dg/graphite/graphite.exp    |   10 +-
>  45 files changed, 98 insertions(+), 2686 deletions(-)
>  delete mode 100644 gcc/graphite-blocking.c
>  delete mode 100644 gcc/graphite-interchange.c
>
> diff --git a/gcc/Makefile.in b/gcc/Makefile.in
> index e298ecc..3d1c1e5 100644
> --- a/gcc/Makefile.in
> +++ b/gcc/Makefile.in
> @@ -1277,10 +1277,8 @@ OBJS = \
>         graph.o \
>         graphds.o \
>         graphite.o \
> -       graphite-blocking.o \
>         graphite-isl-ast-to-gimple.o \
>         graphite-dependences.o \
> -       graphite-interchange.o \
>         graphite-optimize-isl.o \
>         graphite-poly.o \
>         graphite-scop-detection.o \
> diff --git a/gcc/common.opt b/gcc/common.opt
> index 0964ae4..94d1d88 100644
> --- a/gcc/common.opt
> +++ b/gcc/common.opt
> @@ -1341,16 +1341,16 @@ Common Report Var(flag_loop_parallelize_all) 
> Optimization
>  Mark all loops as parallel
>
>  floop-strip-mine
> -Common Report Var(flag_loop_strip_mine) Optimization
> -Enable Loop Strip Mining transformation
> +Common Alias(floop-nest-optimize)
> +Enable loop nest transforms.  Same as -floop-nest-optimize
>
>  floop-interchange
> -Common Report Var(flag_loop_interchange) Optimization
> -Enable Loop Interchange transformation
> +Common Alias(floop-nest-optimize)
> +Enable loop nest transforms.  Same as -floop-nest-optimize
>
>  floop-block
> -Common Report Var(flag_loop_block) Optimization
> -Enable Loop Blocking transformation
> +Common Alias(floop-nest-optimize)
> +Enable loop nest transforms.  Same as -floop-nest-optimize
>
>  floop-unroll-and-jam
>  Common Alias(floop-nest-optimize)
> @@ -2315,8 +2315,8 @@ Common Report Var(flag_tree_loop_im) Init(1) 
> Optimization
>  Enable loop invariant motion on trees
>
>  ftree-loop-linear
> -Common Alias(floop-interchange)
> -Enable loop interchange transforms.  Same as -floop-interchange
> +Common Alias(floop-nest-optimize)
> +Enable loop nest transforms.  Same as -floop-nest-optimize
>
>  ftree-loop-ivcanon
>  Common Report Var(flag_tree_loop_ivcanon) Init(1) Optimization
> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
> index c33cc27..8710ff8 100644
> --- a/gcc/doc/invoke.texi
> +++ b/gcc/doc/invoke.texi
> @@ -8733,102 +8733,19 @@ Perform loop optimizations on trees.  This flag is 
> enabled by default
>  at @option{-O} and higher.
>
>  @item -ftree-loop-linear
> +@itemx -floop-interchange
> +@itemx -floop-strip-mine
> +@itemx -floop-block
> +@itemx -floop-unroll-and-jam
>  @opindex ftree-loop-linear
> -Perform loop interchange transformations on tree.  Same as
> -@option{-floop-interchange}.  To use this code transformation, GCC has
> -to be configured with @option{--with-isl} to enable the Graphite loop
> -transformation infrastructure.
> -
> -@item -floop-interchange
>  @opindex floop-interchange
> -Perform loop interchange transformations on loops.  Interchanging two
> -nested loops switches the inner and outer loops.  For example, given a
> -loop like:
> -@smallexample
> -DO J = 1, M
> -  DO I = 1, N
> -    A(J, I) = A(J, I) * C
> -  ENDDO
> -ENDDO
> -@end smallexample
> -@noindent
> -loop interchange transforms the loop as if it were written:
> -@smallexample
> -DO I = 1, N
> -  DO J = 1, M
> -    A(J, I) = A(J, I) * C
> -  ENDDO
> -ENDDO
> -@end smallexample
> -which can be beneficial when @code{N} is larger than the caches,
> -because in Fortran, the elements of an array are stored in memory
> -contiguously by column, and the original loop iterates over rows,
> -potentially creating at each access a cache miss.  This optimization
> -applies to all the languages supported by GCC and is not limited to
> -Fortran.  To use this code transformation, GCC has to be configured
> -with @option{--with-isl} to enable the Graphite loop transformation
> -infrastructure.
> -
> -@item -floop-strip-mine
>  @opindex floop-strip-mine
> -Perform loop strip mining transformations on loops.  Strip mining
> -splits a loop into two nested loops.  The outer loop has strides
> -equal to the strip size and the inner loop has strides of the
> -original loop within a strip.  The strip length can be changed
> -using the @option{loop-block-tile-size} parameter.  For example,
> -given a loop like:
> -@smallexample
> -DO I = 1, N
> -  A(I) = A(I) + C
> -ENDDO
> -@end smallexample
> -@noindent
> -loop strip mining transforms the loop as if it were written:
> -@smallexample
> -DO II = 1, N, 51
> -  DO I = II, min (II + 50, N)
> -    A(I) = A(I) + C
> -  ENDDO
> -ENDDO
> -@end smallexample
> -This optimization applies to all the languages supported by GCC and is
> -not limited to Fortran.  To use this code transformation, GCC has to
> -be configured with @option{--with-isl} to enable the Graphite loop
> -transformation infrastructure.
> -
> -@item -floop-block
>  @opindex floop-block
> -Perform loop blocking transformations on loops.  Blocking strip mines
> -each loop in the loop nest such that the memory accesses of the
> -element loops fit inside caches.  The strip length can be changed
> -using the @option{loop-block-tile-size} parameter.  For example, given
> -a loop like:
> -@smallexample
> -DO I = 1, N
> -  DO J = 1, M
> -    A(J, I) = B(I) + C(J)
> -  ENDDO
> -ENDDO
> -@end smallexample
> -@noindent
> -loop blocking transforms the loop as if it were written:
> -@smallexample
> -DO II = 1, N, 51
> -  DO JJ = 1, M, 51
> -    DO I = II, min (II + 50, N)
> -      DO J = JJ, min (JJ + 50, M)
> -        A(J, I) = B(I) + C(J)
> -      ENDDO
> -    ENDDO
> -  ENDDO
> -ENDDO
> -@end smallexample
> -which can be beneficial when @code{M} is larger than the caches,
> -because the innermost loop iterates over a smaller amount of data
> -which can be kept in the caches.  This optimization applies to all the
> -languages supported by GCC and is not limited to Fortran.  To use this
> -code transformation, GCC has to be configured with @option{--with-isl}
> -to enable the Graphite loop transformation infrastructure.
> +@opindex floop-unroll-and-jam
> +Perform loop nest optimizations.  Same as
> +@option{-floop-nest-optimize}.  To use this code transformation, GCC has
> +to be configured with @option{--with-isl} to enable the Graphite loop
> +transformation infrastructure.
>
>  @item -fgraphite-identity
>  @opindex fgraphite-identity
> @@ -8846,13 +8763,6 @@ optimizer based on the Pluto optimization algorithms.  
> It calculates a loop
>  structure optimized for data-locality and parallelism.  This option
>  is experimental.
>
> -@item -floop-unroll-and-jam
> -@opindex floop-unroll-and-jam
> -Perform loop nest transformations.  Same as
> -@option{-floop-nest-optimize}.  To use this code transformation, GCC has
> -to be configured with @option{--with-isl} to enable the Graphite loop
> -transformation infrastructure.
> -
>  @item -floop-parallelize-all
>  @opindex floop-parallelize-all
>  Use the Graphite data dependence analysis to identify loops that can
> diff --git a/gcc/graphite-blocking.c b/gcc/graphite-blocking.c
> deleted file mode 100644
> index 3434294..0000000
> --- a/gcc/graphite-blocking.c
> +++ /dev/null
> @@ -1,270 +0,0 @@
> -/* Heuristics and transform for loop blocking and strip mining on
> -   polyhedral representation.
> -
> -   Copyright (C) 2009-2015 Free Software Foundation, Inc.
> -   Contributed by Sebastian Pop <sebastian....@amd.com> and
> -   Pranav Garg  <pranav.garg2...@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"
> -
> -#ifdef HAVE_isl
> -/* Workaround for GMP 5.1.3 bug, see PR56019.  */
> -#include <stddef.h>
> -
> -#include <isl/constraint.h>
> -#include <isl/set.h>
> -#include <isl/map.h>
> -#include <isl/union_map.h>
> -#include <isl/constraint.h>
> -
> -#include "system.h"
> -#include "coretypes.h"
> -#include "backend.h"
> -#include "cfghooks.h"
> -#include "tree.h"
> -#include "gimple.h"
> -#include "params.h"
> -#include "fold-const.h"
> -#include "gimple-iterator.h"
> -#include "tree-ssa-loop.h"
> -#include "dumpfile.h"
> -#include "cfgloop.h"
> -#include "tree-data-ref.h"
> -#include "graphite-poly.h"
> -
> -/* Strip mines with a factor STRIDE the scattering (time) dimension
> -   around PBB at depth TIME_DEPTH.
> -
> -   The following example comes from the wiki page:
> -   http://gcc.gnu.org/wiki/Graphite/Strip_mine
> -
> -   The strip mine of a loop with a tile of 64 can be obtained with a
> -   scattering function as follows:
> -
> -   $ cat ./albert_strip_mine.cloog
> -   # language: C
> -   c
> -
> -   # parameter {n | n >= 0}
> -   1 3
> -   #  n  1
> -   1  1  0
> -   1
> -   n
> -
> -   1 # Number of statements:
> -
> -   1
> -   # {i | 0 <= i <= n}
> -   2 4
> -   #  i  n   1
> -   1  1  0   0
> -   1 -1  1   0
> -
> -   0  0  0
> -   1
> -   i
> -
> -   1 # Scattering functions
> -
> -   3 6
> -   #  NEW  OLD    i    n    1
> -   1  -64    0    1    0    0
> -   1   64    0   -1    0   63
> -   0    0    1   -1    0    0
> -
> -   1
> -   NEW  OLD
> -
> -   #the output of CLooG is like this:
> -   #$ cloog ./albert_strip_mine.cloog
> -   # for (NEW=0;NEW<=floord(n,64);NEW++) {
> -   #   for (OLD=max(64*NEW,0);OLD<=min(64*NEW+63,n);OLD++) {
> -   #     S1(i = OLD) ;
> -   #   }
> -   # }
> -*/
> -
> -static void
> -pbb_strip_mine_time_depth (poly_bb_p pbb, int time_depth, int stride)
> -{
> -  isl_space *d;
> -  isl_constraint *c;
> -  int iter, strip;
> -  /* STRIP is the dimension that iterates with stride STRIDE.  */
> -  /* ITER is the dimension that enumerates single iterations inside
> -     one strip that has at most STRIDE iterations.  */
> -  strip = time_depth;
> -  iter = strip + 2;
> -
> -  pbb->transformed = isl_map_insert_dims (pbb->transformed, isl_dim_out,
> -                                         strip, 2);
> -
> -  /* Lower bound of the striped loop.  */
> -  d = isl_map_get_space (pbb->transformed);
> -  c = isl_inequality_alloc (isl_local_space_from_space (d));
> -  c = isl_constraint_set_coefficient_si (c, isl_dim_out, strip, -stride);
> -  c = isl_constraint_set_coefficient_si (c, isl_dim_out, iter, 1);
> -  pbb->transformed = isl_map_add_constraint (pbb->transformed, c);
> -
> -  /* Upper bound of the striped loop.  */
> -  d = isl_map_get_space (pbb->transformed);
> -  c = isl_inequality_alloc (isl_local_space_from_space (d));
> -  c = isl_constraint_set_coefficient_si (c, isl_dim_out, strip, stride);
> -  c = isl_constraint_set_coefficient_si (c, isl_dim_out, iter, -1);
> -  c = isl_constraint_set_constant_si (c, stride - 1);
> -  pbb->transformed = isl_map_add_constraint (pbb->transformed, c);
> -
> -  /* Static scheduling for ITER level.
> -     This is mandatory to keep the 2d + 1 canonical scheduling format.  */
> -  d = isl_map_get_space (pbb->transformed);
> -  c = isl_equality_alloc (isl_local_space_from_space (d));
> -  c = isl_constraint_set_coefficient_si (c, isl_dim_out, strip + 1, 1);
> -  pbb->transformed = isl_map_add_constraint (pbb->transformed, c);
> -}
> -
> -/* Returns true when strip mining with STRIDE of the loop LST is
> -   profitable.  */
> -
> -static bool
> -lst_strip_mine_profitable_p (lst_p lst, int stride)
> -{
> -  mpz_t niter, strip_stride;
> -  bool res;
> -
> -  gcc_assert (LST_LOOP_P (lst));
> -  mpz_init (strip_stride);
> -  mpz_init (niter);
> -
> -  mpz_set_si (strip_stride, stride);
> -  lst_niter_for_loop (lst, niter);
> -  res = (mpz_cmp (niter, strip_stride) > 0);
> -
> -  mpz_clear (strip_stride);
> -  mpz_clear (niter);
> -  return res;
> -}
> -
> -/* Strip-mines all the loops of LST with STRIDE.  Return the number of
> -   loops strip-mined.  */
> -
> -static int
> -lst_do_strip_mine_loop (lst_p lst, int depth, int stride)
> -{
> -  int i;
> -  lst_p l;
> -  poly_bb_p pbb;
> -
> -  if (!lst)
> -    return 0;
> -
> -  if (LST_LOOP_P (lst))
> -    {
> -      int res = 0;
> -
> -      FOR_EACH_VEC_ELT (LST_SEQ (lst), i, l)
> -       res += lst_do_strip_mine_loop (l, depth, stride);
> -
> -      return res;
> -    }
> -
> -  pbb = LST_PBB (lst);
> -  pbb_strip_mine_time_depth (pbb, psct_dynamic_dim (pbb, depth), stride);
> -  return 1;
> -}
> -
> -/* Strip-mines all the loops of LST with STRIDE.  When STRIDE is zero,
> -   read the stride from the PARAM_LOOP_BLOCK_TILE_SIZE.  Return the
> -   number of strip-mined loops.
> -
> -   Strip mining transforms a loop
> -
> -   | for (i = 0; i < N; i++)
> -   |   S (i);
> -
> -   into the following loop nest:
> -
> -   | for (k = 0; k < N; k += STRIDE)
> -   |   for (j = 0; j < STRIDE; j++)
> -   |     S (i = k + j);
> -*/
> -
> -static int
> -lst_do_strip_mine (lst_p lst, int stride)
> -{
> -  int i;
> -  lst_p l;
> -  int res = 0;
> -  int depth;
> -
> -  if (!stride)
> -    stride = PARAM_VALUE (PARAM_LOOP_BLOCK_TILE_SIZE);
> -
> -  if (!lst
> -      || !LST_LOOP_P (lst))
> -    return false;
> -
> -  FOR_EACH_VEC_ELT (LST_SEQ (lst), i, l)
> -    res += lst_do_strip_mine (l, stride);
> -
> -  depth = lst_depth (lst);
> -  if (depth >= 0
> -      && lst_strip_mine_profitable_p (lst, stride))
> -    {
> -      res += lst_do_strip_mine_loop (lst, lst_depth (lst), stride);
> -      lst_add_loop_under_loop (lst);
> -    }
> -
> -  return res;
> -}
> -
> -/* Strip mines all the loops in SCOP.  Returns the number of
> -   strip-mined loops.  */
> -
> -int
> -scop_do_strip_mine (scop_p scop, int stride)
> -{
> -  return lst_do_strip_mine (SCOP_TRANSFORMED_SCHEDULE (scop), stride);
> -}
> -
> -/* Loop blocks all the loops in SCOP.  Returns true when we manage to
> -   block some loops.  */
> -
> -bool
> -scop_do_block (scop_p scop)
> -{
> -  store_scattering (scop);
> -
> -  /* If we don't strip mine at least two loops, or not interchange
> -     loops, the strip mine alone will not be profitable, and the
> -     transform is not a loop blocking: so revert the transform.  */
> -  if (lst_do_strip_mine (SCOP_TRANSFORMED_SCHEDULE (scop), 0) < 2
> -      || scop_do_interchange (scop) == 0)
> -    {
> -      restore_scattering (scop);
> -      return false;
> -    }
> -
> -  if (dump_file && (dump_flags & TDF_DETAILS))
> -    fprintf (dump_file, "SCoP will be loop blocked.\n");
> -
> -  return true;
> -}
> -
> -#endif
> diff --git a/gcc/graphite-interchange.c b/gcc/graphite-interchange.c
> deleted file mode 100644
> index 6b14955..0000000
> --- a/gcc/graphite-interchange.c
> +++ /dev/null
> @@ -1,656 +0,0 @@
> -/* Interchange heuristics and transform for loop interchange on
> -   polyhedral representation.
> -
> -   Copyright (C) 2009-2015 Free Software Foundation, Inc.
> -   Contributed by Sebastian Pop <sebastian....@amd.com> and
> -   Harsha Jagasia <harsha.jaga...@amd.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"
> -
> -#ifdef HAVE_isl
> -/* Workaround for GMP 5.1.3 bug, see PR56019.  */
> -#include <stddef.h>
> -
> -#include <isl/constraint.h>
> -#include <isl/aff.h>
> -#include <isl/set.h>
> -#include <isl/map.h>
> -#include <isl/union_map.h>
> -#include <isl/ilp.h>
> -#include <isl/val.h>
> -
> -/* Since ISL-0.13, the extern is in val_gmp.h.  */
> -#if !defined(HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE) && 
> defined(__cplusplus)
> -extern "C" {
> -#endif
> -#include <isl/val_gmp.h>
> -#if !defined(HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE) && 
> defined(__cplusplus)
> -}
> -#endif
> -
> -#include "system.h"
> -#include "coretypes.h"
> -#include "backend.h"
> -#include "cfghooks.h"
> -#include "tree.h"
> -#include "gimple.h"
> -#include "fold-const.h"
> -#include "gimple-iterator.h"
> -#include "tree-ssa-loop.h"
> -#include "dumpfile.h"
> -#include "cfgloop.h"
> -#include "tree-data-ref.h"
> -#include "graphite-poly.h"
> -
> -
> -/* XXX isl rewrite following comment */
> -/* Builds a linear expression, of dimension DIM, representing PDR's
> -   memory access:
> -
> -   L = r_{n}*r_{n-1}*...*r_{1}*s_{0} + ... + r_{n}*s_{n-1} + s_{n}.
> -
> -   For an array A[10][20] with two subscript locations s0 and s1, the
> -   linear memory access is 20 * s0 + s1: a stride of 1 in subscript s0
> -   corresponds to a memory stride of 20.
> -
> -   OFFSET is a number of dimensions to prepend before the
> -   subscript dimensions: s_0, s_1, ..., s_n.
> -
> -   Thus, the final linear expression has the following format:
> -   0 .. 0_{offset} | 0 .. 0_{nit} | 0 .. 0_{gd} | 0 | c_0 c_1 ... c_n
> -   where the expression itself is:
> -   c_0 * s_0 + c_1 * s_1 + ... c_n * s_n.  */
> -
> -static isl_constraint *
> -build_linearized_memory_access (isl_map *map, poly_dr_p pdr)
> -{
> -  isl_local_space *ls = isl_local_space_from_space (isl_map_get_space (map));
> -  isl_constraint *res = isl_equality_alloc (ls);
> -  isl_val *size = isl_val_int_from_ui (isl_map_get_ctx (map), 1);
> -
> -  unsigned nsubs = isl_set_dim (pdr->subscript_sizes, isl_dim_set);
> -  /* -1 for the already included L dimension.  */
> -  unsigned offset = isl_map_dim (map, isl_dim_out) - 1 - nsubs;
> -  res = isl_constraint_set_coefficient_si (res, isl_dim_out, offset + nsubs, 
> -1);
> -  /* Go through all subscripts from last to first.  The dimension "i=0"
> -     is the alias set, ignore it.  */
> -  for (int i = nsubs - 1; i >= 1; i--)
> -    {
> -      isl_aff *extract_dim;
> -      res = isl_constraint_set_coefficient_val (res, isl_dim_out, offset + i,
> -                                               isl_val_copy (size));
> -      isl_space *dc = isl_set_get_space (pdr->subscript_sizes);
> -      extract_dim = isl_aff_zero_on_domain (isl_local_space_from_space (dc));
> -      extract_dim = isl_aff_set_coefficient_si (extract_dim, isl_dim_in, i, 
> 1);
> -      isl_val *max = isl_set_max_val (pdr->subscript_sizes, extract_dim);
> -      isl_aff_free (extract_dim);
> -
> -      /* The result is NULL in case of an error, the optimal value in case 
> there
> -        is one, negative infinity or infinity if the problem is unbounded and
> -        NaN if the problem is empty.  */
> -      gcc_assert (max);
> -
> -      /* When one of the dimensions cannot be computed, we cannot build the 
> size
> -        of the array for any outer dimensions.  */
> -      if (!isl_val_is_int (max))
> -       {
> -         isl_val_free (max);
> -         break;
> -       }
> -      size = isl_val_mul (size, max);
> -    }
> -
> -  isl_val_free (size);
> -
> -  return res;
> -}
> -
> -/* Set STRIDE to the stride of PDR in memory by advancing by one in
> -   the loop at DEPTH.  */
> -
> -static void
> -pdr_stride_in_loop (mpz_t stride, graphite_dim_t depth, poly_dr_p pdr)
> -{
> -  poly_bb_p pbb = PDR_PBB (pdr);
> -  isl_map *map;
> -  isl_set *set;
> -  isl_aff *aff;
> -  isl_space *dc;
> -  isl_constraint *lma, *c;
> -  isl_val *islstride;
> -  graphite_dim_t time_depth;
> -  unsigned offset, nt;
> -  unsigned i;
> -  /* XXX isl rewrite following comments.  */
> -  /* Builds a partial difference equations and inserts them
> -     into pointset powerset polyhedron P.  Polyhedron is assumed
> -     to have the format: T|I|T'|I'|G|S|S'|l1|l2.
> -
> -     TIME_DEPTH is the time dimension w.r.t. which we are
> -     differentiating.
> -     OFFSET represents the number of dimensions between
> -     columns t_{time_depth} and t'_{time_depth}.
> -     DIM_SCTR is the number of scattering dimensions.  It is
> -     essentially the dimensionality of the T vector.
> -
> -     The following equations are inserted into the polyhedron P:
> -     | t_1 = t_1'
> -     | ...
> -     | t_{time_depth-1} = t'_{time_depth-1}
> -     | t_{time_depth} = t'_{time_depth} + 1
> -     | t_{time_depth+1} = t'_{time_depth + 1}
> -     | ...
> -     | t_{dim_sctr} = t'_{dim_sctr}.  */
> -
> -  /* Add the equality: t_{time_depth} = t'_{time_depth} + 1.
> -     This is the core part of this alogrithm, since this
> -     constraint asks for the memory access stride (difference)
> -     between two consecutive points in time dimensions.  */
> -
> -  /* Add equalities:
> -     | t1 = t1'
> -     | ...
> -     | t_{time_depth-1} = t'_{time_depth-1}
> -     | t_{time_depth+1} = t'_{time_depth+1}
> -     | ...
> -     | t_{dim_sctr} = t'_{dim_sctr}
> -
> -     This means that all the time dimensions are equal except for
> -     time_depth, where the constraint is t_{depth} = t'_{depth} + 1
> -     step.  More to this: we should be careful not to add equalities
> -     to the 'coupled' dimensions, which happens when the one dimension
> -     is stripmined dimension, and the other dimension corresponds
> -     to the point loop inside stripmined dimension.  */
> -
> -  /* pdr->accesses:    [P1..nb_param,I1..nb_domain]->[a,S1..nb_subscript]
> -          ??? [P] not used for PDRs?
> -     pdr->subscript_sizes:      [a,S1..nb_subscript]
> -     pbb->domain:      [P1..nb_param,I1..nb_domain]
> -     pbb->transformed: [P1..nb_param,I1..nb_domain]->[T1..Tnb_sctr]
> -          [T] includes local vars (currently unused)
> -
> -     First we create [P,I] -> [T,a,S].  */
> -
> -  map = isl_map_flat_range_product (isl_map_copy (pbb->transformed),
> -                                   isl_map_copy (pdr->accesses));
> -  /* Add a dimension for L: [P,I] -> [T,a,S,L].*/
> -  map = isl_map_add_dims (map, isl_dim_out, 1);
> -  /* Build a constraint for "lma[S] - L == 0", effectively calculating
> -     L in terms of subscripts.  */
> -  lma = build_linearized_memory_access (map, pdr);
> -  /* And add it to the map, so we now have:
> -     [P,I] -> [T,a,S,L] : lma([S]) == L.  */
> -  map = isl_map_add_constraint (map, lma);
> -
> -  /* Then we create  [P,I,P',I'] -> [T,a,S,L,T',a',S',L'].  */
> -  map = isl_map_flat_product (map, isl_map_copy (map));
> -
> -  /* Now add the equality T[time_depth] == T'[time_depth]+1.  This will
> -     force L' to be the linear address at T[time_depth] + 1. */
> -  time_depth = psct_dynamic_dim (pbb, depth);
> -  /* Length of [a,S] plus [L] ...  */
> -  offset = 1 + isl_map_dim (pdr->accesses, isl_dim_out);
> -  /* ... plus [T].  */
> -  offset += isl_map_dim (pbb->transformed, isl_dim_out);
> -
> -  c = isl_equality_alloc (isl_local_space_from_space (isl_map_get_space 
> (map)));
> -  c = isl_constraint_set_coefficient_si (c, isl_dim_out, time_depth, 1);
> -  c = isl_constraint_set_coefficient_si (c, isl_dim_out,
> -                                        offset + time_depth, -1);
> -  c = isl_constraint_set_constant_si (c, 1);
> -  map = isl_map_add_constraint (map, c);
> -
> -  /* Now we equate most of the T/T' elements (making PITaSL nearly
> -     the same is (PITaSL)', except for one dimension, namely for 'depth'
> -     (an index into [I]), after translating to index into [T].  Take care
> -     to not produce an empty map, which indicates we wanted to equate
> -     two dimensions that are already coupled via the above time_depth
> -     dimension.  Happens with strip mining where several scatter dimension
> -     are interdependend.  */
> -  /* Length of [T].  */
> -  nt = pbb_nb_scattering_transform (pbb) + pbb_nb_local_vars (pbb);
> -  for (i = 0; i < nt; i++)
> -    if (i != time_depth)
> -      {
> -       isl_map *temp = isl_map_equate (isl_map_copy (map),
> -                                       isl_dim_out, i,
> -                                       isl_dim_out, offset + i);
> -       if (isl_map_is_empty (temp))
> -         isl_map_free (temp);
> -       else
> -         {
> -           isl_map_free (map);
> -           map = temp;
> -         }
> -      }
> -
> -  /* Now maximize the expression L' - L.  */
> -  set = isl_map_range (map);
> -  dc = isl_set_get_space (set);
> -  aff = isl_aff_zero_on_domain (isl_local_space_from_space (dc));
> -  aff = isl_aff_set_coefficient_si (aff, isl_dim_in, offset - 1, -1);
> -  aff = isl_aff_set_coefficient_si (aff, isl_dim_in, offset + offset - 1, 1);
> -  islstride = isl_set_max_val (set, aff);
> -  isl_val_get_num_gmp (islstride, stride);
> -  isl_val_free (islstride);
> -  isl_aff_free (aff);
> -  isl_set_free (set);
> -
> -  if (dump_file && (dump_flags & TDF_DETAILS))
> -    {
> -      gmp_fprintf (dump_file, "\nStride in BB_%d, DR_%d, depth %d:  %Zd ",
> -                  pbb_index (pbb), PDR_ID (pdr), (int) depth, stride);
> -    }
> -}
> -
> -/* Sets STRIDES to the sum of all the strides of the data references
> -   accessed in LOOP at DEPTH.  */
> -
> -static void
> -memory_strides_in_loop_1 (lst_p loop, graphite_dim_t depth, mpz_t strides)
> -{
> -  int i, j;
> -  lst_p l;
> -  poly_dr_p pdr;
> -  mpz_t s, n;
> -
> -  mpz_init (s);
> -  mpz_init (n);
> -
> -  FOR_EACH_VEC_ELT (LST_SEQ (loop), j, l)
> -    if (LST_LOOP_P (l))
> -      memory_strides_in_loop_1 (l, depth, strides);
> -    else
> -      FOR_EACH_VEC_ELT (PBB_DRS (LST_PBB (l)), i, pdr)
> -       {
> -         pdr_stride_in_loop (s, depth, pdr);
> -         mpz_set_si (n, PDR_NB_REFS (pdr));
> -         mpz_mul (s, s, n);
> -         mpz_add (strides, strides, s);
> -       }
> -
> -  mpz_clear (s);
> -  mpz_clear (n);
> -}
> -
> -/* Sets STRIDES to the sum of all the strides of the data references
> -   accessed in LOOP at DEPTH.  */
> -
> -static void
> -memory_strides_in_loop (lst_p loop, graphite_dim_t depth, mpz_t strides)
> -{
> -  if (mpz_cmp_si (loop->memory_strides, -1) == 0)
> -    {
> -      mpz_set_si (strides, 0);
> -      memory_strides_in_loop_1 (loop, depth, strides);
> -    }
> -  else
> -    mpz_set (strides, loop->memory_strides);
> -}
> -
> -/* Return true when the interchange of loops LOOP1 and LOOP2 is
> -   profitable.
> -
> -   Example:
> -
> -   | int a[100][100];
> -   |
> -   | int
> -   | foo (int N)
> -   | {
> -   |   int j;
> -   |   int i;
> -   |
> -   |   for (i = 0; i < N; i++)
> -   |     for (j = 0; j < N; j++)
> -   |       a[j][2 * i] += 1;
> -   |
> -   |   return a[N][12];
> -   | }
> -
> -   The data access A[j][i] is described like this:
> -
> -   | i   j   N   a  s0  s1   1
> -   | 0   0   0   1   0   0  -5    = 0
> -   | 0  -1   0   0   1   0   0    = 0
> -   |-2   0   0   0   0   1   0    = 0
> -   | 0   0   0   0   1   0   0   >= 0
> -   | 0   0   0   0   0   1   0   >= 0
> -   | 0   0   0   0  -1   0 100   >= 0
> -   | 0   0   0   0   0  -1 100   >= 0
> -
> -   The linearized memory access L to A[100][100] is:
> -
> -   | i   j   N   a  s0  s1   1
> -   | 0   0   0   0 100   1   0
> -
> -   TODO: the shown format is not valid as it does not show the fact
> -   that the iteration domain "i j" is transformed using the scattering.
> -
> -   Next, to measure the impact of iterating once in loop "i", we build
> -   a maximization problem: first, we add to DR accesses the dimensions
> -   k, s2, s3, L1 = 100 * s0 + s1, L2, and D1: this is the polyhedron P1.
> -   L1 and L2 are the linearized memory access functions.
> -
> -   | i   j   N   a  s0  s1   k  s2  s3  L1  L2  D1   1
> -   | 0   0   0   1   0   0   0   0   0   0   0   0  -5    = 0  alias = 5
> -   | 0  -1   0   0   1   0   0   0   0   0   0   0   0    = 0  s0 = j
> -   |-2   0   0   0   0   1   0   0   0   0   0   0   0    = 0  s1 = 2 * i
> -   | 0   0   0   0   1   0   0   0   0   0   0   0   0   >= 0
> -   | 0   0   0   0   0   1   0   0   0   0   0   0   0   >= 0
> -   | 0   0   0   0  -1   0   0   0   0   0   0   0 100   >= 0
> -   | 0   0   0   0   0  -1   0   0   0   0   0   0 100   >= 0
> -   | 0   0   0   0 100   1   0   0   0  -1   0   0   0    = 0  L1 = 100 * s0 
> + s1
> -
> -   Then, we generate the polyhedron P2 by interchanging the dimensions
> -   (s0, s2), (s1, s3), (L1, L2), (k, i)
> -
> -   | i   j   N   a  s0  s1   k  s2  s3  L1  L2  D1   1
> -   | 0   0   0   1   0   0   0   0   0   0   0   0  -5    = 0  alias = 5
> -   | 0  -1   0   0   0   0   0   1   0   0   0   0   0    = 0  s2 = j
> -   | 0   0   0   0   0   0  -2   0   1   0   0   0   0    = 0  s3 = 2 * k
> -   | 0   0   0   0   0   0   0   1   0   0   0   0   0   >= 0
> -   | 0   0   0   0   0   0   0   0   1   0   0   0   0   >= 0
> -   | 0   0   0   0   0   0   0  -1   0   0   0   0 100   >= 0
> -   | 0   0   0   0   0   0   0   0  -1   0   0   0 100   >= 0
> -   | 0   0   0   0   0   0   0 100   1   0  -1   0   0    = 0  L2 = 100 * s2 
> + s3
> -
> -   then we add to P2 the equality k = i + 1:
> -
> -   |-1   0   0   0   0   0   1   0   0   0   0   0  -1    = 0  k = i + 1
> -
> -   and finally we maximize the expression "D1 = max (P1 inter P2, L2 - L1)".
> -
> -   Similarly, to determine the impact of one iteration on loop "j", we
> -   interchange (k, j), we add "k = j + 1", and we compute D2 the
> -   maximal value of the difference.
> -
> -   Finally, the profitability test is D1 < D2: if in the outer loop
> -   the strides are smaller than in the inner loop, then it is
> -   profitable to interchange the loops at DEPTH1 and DEPTH2.  */
> -
> -static bool
> -lst_interchange_profitable_p (lst_p nest, int depth1, int depth2)
> -{
> -  mpz_t d1, d2;
> -  bool res;
> -
> -  gcc_assert (depth1 < depth2);
> -
> -  mpz_init (d1);
> -  mpz_init (d2);
> -
> -  memory_strides_in_loop (nest, depth1, d1);
> -  memory_strides_in_loop (nest, depth2, d2);
> -
> -  res = mpz_cmp (d1, d2) < 0;
> -
> -  mpz_clear (d1);
> -  mpz_clear (d2);
> -
> -  return res;
> -}
> -
> -/* Interchanges the loops at DEPTH1 and DEPTH2 of the original
> -   scattering and assigns the resulting polyhedron to the transformed
> -   scattering.  */
> -
> -static void
> -pbb_interchange_loop_depths (graphite_dim_t depth1, graphite_dim_t depth2,
> -                            poly_bb_p pbb)
> -{
> -  unsigned i;
> -  unsigned dim1 = psct_dynamic_dim (pbb, depth1);
> -  unsigned dim2 = psct_dynamic_dim (pbb, depth2);
> -  isl_space *d = isl_map_get_space (pbb->transformed);
> -  isl_space *d1 = isl_space_range (d);
> -  unsigned n = isl_space_dim (d1, isl_dim_out);
> -  isl_space *d2 = isl_space_add_dims (d1, isl_dim_in, n);
> -  isl_map *x = isl_map_universe (d2);
> -
> -  x = isl_map_equate (x, isl_dim_in, dim1, isl_dim_out, dim2);
> -  x = isl_map_equate (x, isl_dim_in, dim2, isl_dim_out, dim1);
> -
> -  for (i = 0; i < n; i++)
> -    if (i != dim1 && i != dim2)
> -      x = isl_map_equate (x, isl_dim_in, i, isl_dim_out, i);
> -
> -  pbb->transformed = isl_map_apply_range (pbb->transformed, x);
> -}
> -
> -/* Apply the interchange of loops at depths DEPTH1 and DEPTH2 to all
> -   the statements below LST.  */
> -
> -static void
> -lst_apply_interchange (lst_p lst, int depth1, int depth2)
> -{
> -  if (!lst)
> -    return;
> -
> -  if (LST_LOOP_P (lst))
> -    {
> -      int i;
> -      lst_p l;
> -
> -      FOR_EACH_VEC_ELT (LST_SEQ (lst), i, l)
> -       lst_apply_interchange (l, depth1, depth2);
> -    }
> -  else
> -    pbb_interchange_loop_depths (depth1, depth2, LST_PBB (lst));
> -}
> -
> -/* Return true when the nest starting at LOOP1 and ending on LOOP2 is
> -   perfect: i.e. there are no sequence of statements.  */
> -
> -static bool
> -lst_perfectly_nested_p (lst_p loop1, lst_p loop2)
> -{
> -  if (loop1 == loop2)
> -    return true;
> -
> -  if (!LST_LOOP_P (loop1))
> -    return false;
> -
> -  return LST_SEQ (loop1).length () == 1
> -         && lst_perfectly_nested_p (LST_SEQ (loop1)[0], loop2);
> -}
> -
> -/* Transform the loop nest between LOOP1 and LOOP2 into a perfect
> -   nest.  To continue the naming tradition, this function is called
> -   after perfect_nestify.  NEST is set to the perfectly nested loop
> -   that is created.  BEFORE/AFTER are set to the loops distributed
> -   before/after the loop NEST.  */
> -
> -static void
> -lst_perfect_nestify (lst_p loop1, lst_p loop2, lst_p *before,
> -                    lst_p *nest, lst_p *after)
> -{
> -  poly_bb_p first, last;
> -
> -  gcc_assert (loop1 && loop2
> -             && loop1 != loop2
> -             && LST_LOOP_P (loop1) && LST_LOOP_P (loop2));
> -
> -  first = LST_PBB (lst_find_first_pbb (loop2));
> -  last = LST_PBB (lst_find_last_pbb (loop2));
> -
> -  *before = copy_lst (loop1);
> -  *nest = copy_lst (loop1);
> -  *after = copy_lst (loop1);
> -
> -  lst_remove_all_before_including_pbb (*before, first, false);
> -  lst_remove_all_before_including_pbb (*after, last, true);
> -
> -  lst_remove_all_before_excluding_pbb (*nest, first, true);
> -  lst_remove_all_before_excluding_pbb (*nest, last, false);
> -
> -  if (lst_empty_p (*before))
> -    {
> -      free_lst (*before);
> -      *before = NULL;
> -    }
> -  if (lst_empty_p (*after))
> -    {
> -      free_lst (*after);
> -      *after = NULL;
> -    }
> -  if (lst_empty_p (*nest))
> -    {
> -      free_lst (*nest);
> -      *nest = NULL;
> -    }
> -}
> -
> -/* Try to interchange LOOP1 with LOOP2 for all the statements of the
> -   body of LOOP2.  LOOP1 contains LOOP2.  Return true if it did the
> -   interchange.  */
> -
> -static bool
> -lst_try_interchange_loops (scop_p scop, lst_p loop1, lst_p loop2)
> -{
> -  int depth1 = lst_depth (loop1);
> -  int depth2 = lst_depth (loop2);
> -  lst_p transformed;
> -
> -  lst_p before = NULL, nest = NULL, after = NULL;
> -
> -  if (!lst_perfectly_nested_p (loop1, loop2))
> -    lst_perfect_nestify (loop1, loop2, &before, &nest, &after);
> -
> -  if (!lst_interchange_profitable_p (loop2, depth1, depth2))
> -    return false;
> -
> -  lst_apply_interchange (loop2, depth1, depth2);
> -
> -  /* Sync the transformed LST information and the PBB scatterings
> -     before using the scatterings in the data dependence analysis.  */
> -  if (before || nest || after)
> -    {
> -      transformed = lst_substitute_3 (SCOP_TRANSFORMED_SCHEDULE (scop), 
> loop1,
> -                                     before, nest, after);
> -      lst_update_scattering (transformed);
> -      free_lst (transformed);
> -    }
> -
> -  if (graphite_legal_transform (scop))
> -    {
> -      if (dump_file && (dump_flags & TDF_DETAILS))
> -       fprintf (dump_file,
> -                "Loops at depths %d and %d will be interchanged.\n",
> -                depth1, depth2);
> -
> -      /* Transform the SCOP_TRANSFORMED_SCHEDULE of the SCOP.  */
> -      lst_insert_in_sequence (before, loop1, true);
> -      lst_insert_in_sequence (after, loop1, false);
> -
> -      if (nest)
> -       {
> -         lst_replace (loop1, nest);
> -         free_lst (loop1);
> -       }
> -
> -      return true;
> -    }
> -
> -  /* Undo the transform.  */
> -  free_lst (before);
> -  free_lst (nest);
> -  free_lst (after);
> -  lst_apply_interchange (loop2, depth2, depth1);
> -  return false;
> -}
> -
> -/* Selects the inner loop in LST_SEQ (INNER_FATHER) to be interchanged
> -   with the loop OUTER in LST_SEQ (OUTER_FATHER).  */
> -
> -static bool
> -lst_interchange_select_inner (scop_p scop, lst_p outer_father, int outer,
> -                             lst_p inner_father)
> -{
> -  int inner;
> -  lst_p loop1, loop2;
> -
> -  gcc_assert (outer_father
> -             && LST_LOOP_P (outer_father)
> -             && LST_LOOP_P (LST_SEQ (outer_father)[outer])
> -             && inner_father
> -             && LST_LOOP_P (inner_father));
> -
> -  loop1 = LST_SEQ (outer_father)[outer];
> -
> -  FOR_EACH_VEC_ELT (LST_SEQ (inner_father), inner, loop2)
> -    if (LST_LOOP_P (loop2)
> -       && (lst_try_interchange_loops (scop, loop1, loop2)
> -           || lst_interchange_select_inner (scop, outer_father, outer, 
> loop2)))
> -      return true;
> -
> -  return false;
> -}
> -
> -/* Interchanges all the loops of LOOP and the loops of its body that
> -   are considered profitable to interchange.  Return the number of
> -   interchanged loops.  OUTER is the index in LST_SEQ (LOOP) that
> -   points to the next outer loop to be considered for interchange.  */
> -
> -static int
> -lst_interchange_select_outer (scop_p scop, lst_p loop, int outer)
> -{
> -  lst_p l;
> -  int res = 0;
> -  int i = 0;
> -  lst_p father;
> -
> -  if (!loop || !LST_LOOP_P (loop))
> -    return 0;
> -
> -  father = LST_LOOP_FATHER (loop);
> -  if (father)
> -    {
> -      while (lst_interchange_select_inner (scop, father, outer, loop))
> -       {
> -         res++;
> -         loop = LST_SEQ (father)[outer];
> -       }
> -    }
> -
> -  if (LST_LOOP_P (loop))
> -    FOR_EACH_VEC_ELT (LST_SEQ (loop), i, l)
> -      if (LST_LOOP_P (l))
> -       res += lst_interchange_select_outer (scop, l, i);
> -
> -  return res;
> -}
> -
> -/* Interchanges all the loop depths that are considered profitable for
> -   SCOP.  Return the number of interchanged loops.  */
> -
> -int
> -scop_do_interchange (scop_p scop)
> -{
> -  int res = lst_interchange_select_outer
> -    (scop, SCOP_TRANSFORMED_SCHEDULE (scop), 0);
> -
> -  lst_update_scattering (SCOP_TRANSFORMED_SCHEDULE (scop));
> -
> -  return res;
> -}
> -
> -
> -#endif /* HAVE_isl */
> -
> diff --git a/gcc/graphite-optimize-isl.c b/gcc/graphite-optimize-isl.c
> index 470dbfa..ffa4465 100644
> --- a/gcc/graphite-optimize-isl.c
> +++ b/gcc/graphite-optimize-isl.c
> @@ -47,6 +47,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "tree-data-ref.h"
>  #include "graphite-poly.h"
>  #include "params.h"
> +#include "dumpfile.h"
>
>  static isl_union_set *
>  scop_get_domains (scop_p scop ATTRIBUTE_UNUSED)
> @@ -177,12 +178,21 @@ getScheduleForBand (isl_band *Band, int *Dimensions)
>
>    /* It does not make any sense to tile a band with just one dimension.  */
>    if (*Dimensions == 1)
> -    return PartialSchedule;
> +    {
> +      if (dump_file && dump_flags)
> +       fprintf (dump_file, "not tiled\n");
> +      return PartialSchedule;
> +    }
> +
> +  if (dump_file && dump_flags)
> +    fprintf (dump_file, "tiled by %d\n",
> +            PARAM_VALUE (PARAM_LOOP_BLOCK_TILE_SIZE));
>
>    ctx = isl_union_map_get_ctx (PartialSchedule);
>    Space = isl_union_map_get_space (PartialSchedule);
>
> -  TileMap = getTileMap (ctx, *Dimensions, 32);
> +  TileMap = getTileMap (ctx, *Dimensions,
> +                       PARAM_VALUE (PARAM_LOOP_BLOCK_TILE_SIZE));
>    TileUMap = isl_union_map_from_map (isl_map_from_basic_map (TileMap));
>    TileUMap = isl_union_map_align_params (TileUMap, Space);
>    *Dimensions = 2 * *Dimensions;
> diff --git a/gcc/graphite-poly.c b/gcc/graphite-poly.c
> index 7ea9389..55ddb80 100644
> --- a/gcc/graphite-poly.c
> +++ b/gcc/graphite-poly.c
> @@ -69,94 +69,6 @@ debug_gmp_value (mpz_t val)
>    gmp_fprintf (stderr, "%Zd", val);
>  }
>
> -/* Return the maximal loop depth in SCOP.  */
> -
> -int
> -scop_max_loop_depth (scop_p scop)
> -{
> -  int i;
> -  poly_bb_p pbb;
> -  int max_nb_loops = 0;
> -
> -  FOR_EACH_VEC_ELT (SCOP_BBS (scop), i, pbb)
> -    {
> -      int nb_loops = pbb_dim_iter_domain (pbb);
> -      if (max_nb_loops < nb_loops)
> -        max_nb_loops = nb_loops;
> -    }
> -
> -  return max_nb_loops;
> -}
> -
> -/* Prints to FILE the scattering function of PBB, at some VERBOSITY
> -   level.  */
> -
> -static void
> -print_scattering_function_1 (FILE *file, poly_bb_p pbb, int verbosity)
> -{
> -  graphite_dim_t i;
> -
> -  if (verbosity > 0)
> -    {
> -      fprintf (file, "# scattering bb_%d (\n", pbb_index (pbb));
> -      fprintf (file, "#eq");
> -
> -      for (i = 0; i < pbb_nb_scattering_transform (pbb); i++)
> -       fprintf (file, "     s%d", (int) i);
> -
> -      for (i = 0; i < pbb_nb_local_vars (pbb); i++)
> -       fprintf (file, "    lv%d", (int) i);
> -
> -      for (i = 0; i < pbb_dim_iter_domain (pbb); i++)
> -       fprintf (file, "     i%d", (int) i);
> -
> -      for (i = 0; i < pbb_nb_params (pbb); i++)
> -       fprintf (file, "     p%d", (int) i);
> -
> -      fprintf (file, "    cst\n");
> -    }
> -
> -  fprintf (file, "isl\n");
> -  print_isl_map (file, pbb->transformed ? pbb->transformed : pbb->schedule);
> -
> -  if (verbosity > 0)
> -    fprintf (file, "#)\n");
> -}
> -
> -/* Prints to FILE the scattering function of PBB, at some VERBOSITY
> -   level.  */
> -
> -void
> -print_scattering_function (FILE *file, poly_bb_p pbb, int verbosity)
> -{
> -  if (!PBB_TRANSFORMED (pbb))
> -    return;
> -
> -  if (pbb->schedule || pbb->transformed)
> -    {
> -      if (verbosity > 0)
> -       fprintf (file, "# Scattering function is provided\n");
> -
> -      fprintf (file, "1\n");
> -    }
> -  else
> -    {
> -      if (verbosity > 0)
> -       fprintf (file, "# Scattering function is not provided\n");
> -
> -      fprintf (file, "0\n");
> -      return;
> -    }
> -
> -  print_scattering_function_1 (file, pbb, verbosity);
> -
> -  if (verbosity > 0)
> -    fprintf (file, "# Scattering names are not provided\n");
> -
> -  fprintf (file, "0\n");
> -
> -}
> -
>  /* Prints to FILE the iteration domain of PBB, at some VERBOSITY
>     level.  */
>
> @@ -166,18 +78,6 @@ print_iteration_domain (FILE *file, poly_bb_p pbb, int 
> verbosity)
>    print_pbb_domain (file, pbb, verbosity);
>  }
>
> -/* Prints to FILE the scattering functions of every PBB of SCOP.  */
> -
> -void
> -print_scattering_functions (FILE *file, scop_p scop, int verbosity)
> -{
> -  int i;
> -  poly_bb_p pbb;
> -
> -  FOR_EACH_VEC_ELT (SCOP_BBS (scop), i, pbb)
> -    print_scattering_function (file, pbb, verbosity);
> -}
> -
>  /* Prints to FILE the iteration domains of every PBB of SCOP, at some
>     VERBOSITY level.  */
>
> @@ -191,15 +91,6 @@ print_iteration_domains (FILE *file, scop_p scop, int 
> verbosity)
>      print_iteration_domain (file, pbb, verbosity);
>  }
>
> -/* Prints to STDERR the scattering function of PBB, at some VERBOSITY
> -   level.  */
> -
> -DEBUG_FUNCTION void
> -debug_scattering_function (poly_bb_p pbb, int verbosity)
> -{
> -  print_scattering_function (stderr, pbb, verbosity);
> -}
> -
>  /* Prints to STDERR the iteration domain of PBB, at some VERBOSITY
>     level.  */
>
> @@ -209,15 +100,6 @@ debug_iteration_domain (poly_bb_p pbb, int verbosity)
>    print_iteration_domain (stderr, pbb, verbosity);
>  }
>
> -/* Prints to STDERR the scattering functions of every PBB of SCOP, at
> -   some VERBOSITY level.  */
> -
> -DEBUG_FUNCTION void
> -debug_scattering_functions (scop_p scop, int verbosity)
> -{
> -  print_scattering_functions (stderr, scop, verbosity);
> -}
> -
>  /* Prints to STDERR the iteration domains of every PBB of SCOP, at
>     some VERBOSITY level.  */
>
> @@ -236,28 +118,13 @@ apply_poly_transforms (scop_p scop)
>
>    /* Generate code even if we did not apply any real transformation.
>       This also allows to check the performance for the identity
> -     transformation: GIMPLE -> GRAPHITE -> GIMPLE
> -     Keep in mind that CLooG optimizes in control, so the loop structure
> -     may change, even if we only use -fgraphite-identity.  */
> +     transformation: GIMPLE -> GRAPHITE -> GIMPLE.  */
>    if (flag_graphite_identity)
>      transform_done = true;
>
>    if (flag_loop_parallelize_all)
>      transform_done = true;
>
> -  if (flag_loop_block)
> -    transform_done |= scop_do_block (scop);
> -  else
> -    {
> -      if (flag_loop_strip_mine)
> -       transform_done |= scop_do_strip_mine (scop, 0);
> -
> -      if (flag_loop_interchange)
> -       transform_done |= scop_do_interchange (scop);
> -    }
> -
> -  /* This pass needs to be run at the final stage, as it does not
> -     update the lst.  */
>    if (flag_loop_optimize_isl)
>      transform_done |= optimize_isl (scop);
>
> @@ -311,9 +178,6 @@ new_poly_bb (scop_p scop, void *black_box)
>    pbb->saved = NULL;
>    PBB_SCOP (pbb) = scop;
>    pbb_set_black_box (pbb, black_box);
> -  PBB_TRANSFORMED (pbb) = NULL;
> -  PBB_SAVED (pbb) = NULL;
> -  PBB_ORIGINAL (pbb) = NULL;
>    PBB_DRS (pbb).create (3);
>    PBB_IS_REDUCTION (pbb) = false;
>    GBB_PBB ((gimple_bb_p) black_box) = pbb;
> @@ -342,27 +206,6 @@ free_poly_bb (poly_bb_p pbb)
>    XDELETE (pbb);
>  }
>
> -static void
> -print_pdr_access_layout (FILE *file, poly_bb_p pbb, poly_dr_p pdr)
> -{
> -  graphite_dim_t i;
> -
> -  fprintf (file, "#  eq");
> -
> -  fprintf (file, "   alias");
> -
> -  for (i = 0; i < PDR_NB_SUBSCRIPTS (pdr); i++)
> -    fprintf (file, "   sub%d", (int) i);
> -
> -  for (i = 0; i < pbb_dim_iter_domain (pbb); i++)
> -    fprintf (file, "     i%d", (int) i);
> -
> -  for (i = 0; i < pbb_nb_params (pbb); i++)
> -    fprintf (file, "     p%d", (int) i);
> -
> -  fprintf (file, "    cst\n");
> -}
> -
>  /* Prints to FILE the polyhedral data reference PDR, at some VERBOSITY
>     level.  */
>
> @@ -397,14 +240,10 @@ print_pdr (FILE *file, poly_dr_p pdr, int verbosity)
>    if (verbosity > 0)
>      {
>        fprintf (file, "# data accesses (\n");
> -      print_pdr_access_layout (file, PDR_PBB (pdr), pdr);
> +      print_isl_map (file, pdr->accesses);
> +      print_isl_set (file, pdr->subscript_sizes);
> +      fprintf (file, "#)\n");
>      }
> -
> -  /* XXX isl dump accesses/subscripts */
> -
> -  if (verbosity > 0)
> -    fprintf (file, "#)\n");
> -
>    if (verbosity > 1)
>      fprintf (file, "#)\n");
>  }
> @@ -440,9 +279,6 @@ new_scop (sese region)
>    scop->may_waw_no_source = NULL;
>    scop_set_region (scop, region);
>    SCOP_BBS (scop).create (3);
> -  SCOP_ORIGINAL_SCHEDULE (scop) = NULL;
> -  SCOP_TRANSFORMED_SCHEDULE (scop) = NULL;
> -  SCOP_SAVED_SCHEDULE (scop) = NULL;
>    POLY_SCOP_P (scop) = false;
>
>    return scop;
> @@ -474,44 +310,9 @@ free_scop (scop_p scop)
>    isl_union_map_free (scop->may_waw);
>    isl_union_map_free (scop->must_waw_no_source);
>    isl_union_map_free (scop->may_waw_no_source);
> -  free_lst (SCOP_ORIGINAL_SCHEDULE (scop));
> -  free_lst (SCOP_TRANSFORMED_SCHEDULE (scop));
> -  free_lst (SCOP_SAVED_SCHEDULE (scop));
>    XDELETE (scop);
>  }
>
> -/* Print to FILE the domain of PBB in OpenScop format, at some VERBOSITY
> -   level.  */
> -
> -static void
> -openscop_print_pbb_domain (FILE *file, poly_bb_p pbb, int verbosity)
> -{
> -  graphite_dim_t i;
> -  gimple_bb_p gbb = PBB_BLACK_BOX (pbb);
> -
> -  if (!pbb->domain)
> -    return;
> -
> -  if (verbosity > 0)
> -    {
> -      fprintf (file, "\n# Iteration domain of bb_%d (\n", GBB_BB 
> (gbb)->index);
> -      fprintf (file, "#eq");
> -
> -      for (i = 0; i < pbb_dim_iter_domain (pbb); i++)
> -       fprintf (file, "     i%d", (int) i);
> -
> -      for (i = 0; i < pbb_nb_params (pbb); i++)
> -       fprintf (file, "     p%d", (int) i);
> -
> -      fprintf (file, "    cst\n");
> -    }
> -
> -  fprintf (file, "XXX isl\n");
> -
> -  if (verbosity > 0)
> -    fprintf (file, "#)\n");
> -}
> -
>  /* Print to FILE the domain of PBB, at some VERBOSITY level.  */
>
>  void
> @@ -699,8 +500,6 @@ print_pbb (FILE *file, poly_bb_p pbb, int verbosity)
>        dump_gbb_cases (file, PBB_BLACK_BOX (pbb));
>      }
>
> -  openscop_print_pbb_domain (file, pbb, verbosity);
> -  print_scattering_function (file, pbb, verbosity);
>    print_pdrs (file, pbb, verbosity);
>    print_pbb_body (file, pbb, verbosity, false);
>
> @@ -748,58 +547,16 @@ print_scop_params (FILE *file, scop_p scop, int 
> verbosity)
>      fprintf (file, "#)\n");
>  }
>
> -/* Print to FILE the context of SCoP in OpenScop format, at some VERBOSITY
> -   level.  */
> -
> -static void
> -openscop_print_scop_context (FILE *file, scop_p scop, int verbosity)
> -{
> -  graphite_dim_t i;
> -
> -  if (verbosity > 0)
> -    {
> -      fprintf (file, "# Context (\n");
> -      fprintf (file, "#eq");
> -
> -      for (i = 0; i < scop_nb_params (scop); i++)
> -       fprintf (file, "     p%d", (int) i);
> -
> -      fprintf (file, "    cst\n");
> -    }
> -
> -  if (scop->context)
> -    /* XXX isl print context */
> -    fprintf (file, "XXX isl\n");
> -  else
> -    fprintf (file, "0 %d 0 0 0 %d\n", (int) scop_nb_params (scop) + 2,
> -            (int) scop_nb_params (scop));
> -
> -  if (verbosity > 0)
> -    fprintf (file, "# )\n");
> -}
> -
>  /* Print to FILE the context of SCoP, at some VERBOSITY level.  */
>
>  void
>  print_scop_context (FILE *file, scop_p scop, int verbosity)
>  {
> -  graphite_dim_t i;
> -
>    if (verbosity > 0)
> -    {
> -      fprintf (file, "# Context (\n");
> -      fprintf (file, "#eq");
> -
> -      for (i = 0; i < scop_nb_params (scop); i++)
> -       fprintf (file, "     p%d", (int) i);
> -
> -      fprintf (file, "    cst\n");
> -    }
> +    fprintf (file, "# Context (\n");
>
>    if (scop->context)
>      print_isl_set (file, scop->context);
> -  else
> -    fprintf (file, "no isl context %d\n", (int) scop_nb_params (scop) + 2);
>
>    if (verbosity > 0)
>      fprintf (file, "# )\n");
> @@ -815,7 +572,7 @@ print_scop (FILE *file, scop_p scop, int verbosity)
>
>    fprintf (file, "SCoP 1\n#(\n");
>    fprintf (file, "# Language\nGimple\n");
> -  openscop_print_scop_context (file, scop, verbosity);
> +  print_scop_context (file, scop, verbosity);
>    print_scop_params (file, scop, verbosity);
>
>    if (verbosity > 0)
> @@ -826,17 +583,6 @@ print_scop (FILE *file, scop_p scop, int verbosity)
>    FOR_EACH_VEC_ELT (SCOP_BBS (scop), i, pbb)
>      print_pbb (file, pbb, verbosity);
>
> -  if (verbosity > 1)
> -    {
> -      fprintf (file, "# original_lst (\n");
> -      print_lst (file, SCOP_ORIGINAL_SCHEDULE (scop), 0);
> -      fprintf (file, "\n#)\n");
> -
> -      fprintf (file, "# transformed_lst (\n");
> -      print_lst (file, SCOP_TRANSFORMED_SCHEDULE (scop), 0);
> -      fprintf (file, "\n#)\n");
> -    }
> -
>    fprintf (file, "#)\n");
>  }
>
> @@ -888,6 +634,7 @@ print_isl_set (FILE *f, isl_set *set)
>  {
>    isl_printer *p = isl_printer_to_file (the_isl_ctx, f);
>    p = isl_printer_print_set (p, set);
> +  p = isl_printer_print_str (p, "\n");
>    isl_printer_free (p);
>  }
>
> @@ -902,6 +649,7 @@ print_isl_map (FILE *f, isl_map *map)
>  {
>    isl_printer *p = isl_printer_to_file (the_isl_ctx, f);
>    p = isl_printer_print_map (p, map);
> +  p = isl_printer_print_str (p, "\n");
>    isl_printer_free (p);
>  }
>
> @@ -916,6 +664,7 @@ print_isl_aff (FILE *f, isl_aff *aff)
>  {
>    isl_printer *p = isl_printer_to_file (the_isl_ctx, f);
>    p = isl_printer_print_aff (p, aff);
> +  p = isl_printer_print_str (p, "\n");
>    isl_printer_free (p);
>  }
>
> @@ -930,6 +679,7 @@ print_isl_constraint (FILE *f, isl_constraint *c)
>  {
>    isl_printer *p = isl_printer_to_file (the_isl_ctx, f);
>    p = isl_printer_print_constraint (p, c);
> +  p = isl_printer_print_str (p, "\n");
>    isl_printer_free (p);
>  }
>
> @@ -976,224 +726,5 @@ pbb_number_of_iterations_at_time (poly_bb_p pbb,
>    isl_set_free (transdomain);
>  }
>
> -/* Translates LOOP to LST.  */
> -
> -static lst_p
> -loop_to_lst (loop_p loop, vec<poly_bb_p> bbs, int *i)
> -{
> -  poly_bb_p pbb;
> -  vec<lst_p> seq;
> -  seq.create (5);
> -
> -  for (; bbs.iterate (*i, &pbb); (*i)++)
> -    {
> -      lst_p stmt;
> -      basic_block bb = GBB_BB (PBB_BLACK_BOX (pbb));
> -
> -      if (bb->loop_father == loop)
> -       stmt = new_lst_stmt (pbb);
> -      else if (flow_bb_inside_loop_p (loop, bb))
> -       {
> -         loop_p next = loop->inner;
> -
> -         while (next && !flow_bb_inside_loop_p (next, bb))
> -           next = next->next;
> -
> -         stmt = loop_to_lst (next, bbs, i);
> -       }
> -      else
> -       {
> -         (*i)--;
> -         return new_lst_loop (seq);
> -       }
> -
> -      seq.safe_push (stmt);
> -    }
> -
> -  return new_lst_loop (seq);
> -}
> -
> -/* Reads the original scattering of the SCOP and returns an LST
> -   representing it.  */
> -
> -void
> -scop_to_lst (scop_p scop)
> -{
> -  lst_p res;
> -  int i, n = SCOP_BBS (scop).length ();
> -  vec<lst_p> seq;
> -  seq.create (5);
> -  sese region = SCOP_REGION (scop);
> -
> -  for (i = 0; i < n; i++)
> -    {
> -      poly_bb_p pbb = SCOP_BBS (scop)[i];
> -      loop_p loop = outermost_loop_in_sese (region, GBB_BB (PBB_BLACK_BOX 
> (pbb)));
> -
> -      if (loop_in_sese_p (loop, region))
> -       res = loop_to_lst (loop, SCOP_BBS (scop), &i);
> -      else
> -       res = new_lst_stmt (pbb);
> -
> -      seq.safe_push (res);
> -    }
> -
> -  res = new_lst_loop (seq);
> -  SCOP_ORIGINAL_SCHEDULE (scop) = res;
> -  SCOP_TRANSFORMED_SCHEDULE (scop) = copy_lst (res);
> -}
> -
> -/* Print to FILE on a new line COLUMN white spaces.  */
> -
> -static void
> -lst_indent_to (FILE *file, int column)
> -{
> -  int i;
> -
> -  if (column > 0)
> -    fprintf (file, "\n#");
> -
> -  for (i = 0; i < column; i++)
> -    fprintf (file, " ");
> -}
> -
> -/* Print LST to FILE with INDENT spaces of indentation.  */
> -
> -void
> -print_lst (FILE *file, lst_p lst, int indent)
> -{
> -  if (!lst)
> -    return;
> -
> -  lst_indent_to (file, indent);
> -
> -  if (LST_LOOP_P (lst))
> -    {
> -      int i;
> -      lst_p l;
> -
> -      if (LST_LOOP_FATHER (lst))
> -       fprintf (file, "%d (loop", lst_dewey_number (lst));
> -      else
> -       fprintf (file, "#(root");
> -
> -      FOR_EACH_VEC_ELT (LST_SEQ (lst), i, l)
> -       print_lst (file, l, indent + 2);
> -
> -      fprintf (file, ")");
> -    }
> -  else
> -    fprintf (file, "%d stmt_%d", lst_dewey_number (lst), pbb_index (LST_PBB 
> (lst)));
> -}
> -
> -/* Print LST to STDERR.  */
> -
> -DEBUG_FUNCTION void
> -debug_lst (lst_p lst)
> -{
> -  print_lst (stderr, lst, 0);
> -}
> -
> -/* Pretty print to FILE the loop statement tree LST in DOT format.  */
> -
> -static void
> -dot_lst_1 (FILE *file, lst_p lst)
> -{
> -  if (!lst)
> -    return;
> -
> -  if (LST_LOOP_P (lst))
> -    {
> -      int i;
> -      lst_p l;
> -
> -      if (!LST_LOOP_FATHER (lst))
> -       fprintf (file, "L -> L_%d_%d\n",
> -                lst_depth (lst),
> -                lst_dewey_number (lst));
> -      else
> -       fprintf (file, "L_%d_%d -> L_%d_%d\n",
> -                lst_depth (LST_LOOP_FATHER (lst)),
> -                lst_dewey_number (LST_LOOP_FATHER (lst)),
> -                lst_depth (lst),
> -                lst_dewey_number (lst));
> -
> -      FOR_EACH_VEC_ELT (LST_SEQ (lst), i, l)
> -       dot_lst_1 (file, l);
> -    }
> -
> -  else
> -    fprintf (file, "L_%d_%d -> S_%d\n",
> -            lst_depth (LST_LOOP_FATHER (lst)),
> -            lst_dewey_number (LST_LOOP_FATHER (lst)),
> -            pbb_index (LST_PBB (lst)));
> -
> -}
> -
> -/* Display the LST using dotty.  */
> -
> -DEBUG_FUNCTION void
> -dot_lst (lst_p lst)
> -{
> -  /* When debugging, enable the following code.  This cannot be used
> -     in production compilers because it calls "system".  */
> -#if 0
> -  FILE *stream = fopen ("/tmp/lst.dot", "w");
> -  gcc_assert (stream);
> -
> -  fputs ("digraph all {\n", stream);
> -  dot_lst_1 (stream, lst);
> -  fputs ("}\n\n", stream);
> -  fclose (stream);
> -
> -  system ("dotty /tmp/lst.dot &");
> -#else
> -  fputs ("digraph all {\n", stderr);
> -  dot_lst_1 (stderr, lst);
> -  fputs ("}\n\n", stderr);
> -
> -#endif
> -}
> -
> -/* Reverse the loop around PBB at level DEPTH.  */
> -
> -isl_map *
> -reverse_loop_at_level (poly_bb_p pbb, int depth)
> -{
> -  unsigned i, depth_dim = psct_dynamic_dim (pbb, depth);
> -  isl_space *d = isl_map_get_space (pbb->transformed);
> -  isl_space *d1 = isl_space_range (d);
> -  unsigned n = isl_space_dim (d1, isl_dim_out);
> -  isl_space *d2 = isl_space_add_dims (d1, isl_dim_in, n);
> -  isl_map *x = isl_map_universe (isl_space_copy (d2));
> -  isl_constraint *c = isl_equality_alloc (isl_local_space_from_space (d2));
> -
> -  for (i = 0; i < n; i++)
> -    if (i != depth_dim)
> -      x = isl_map_equate (x, isl_dim_in, i, isl_dim_out, i);
> -
> -  c = isl_constraint_set_coefficient_si (c, isl_dim_in, depth_dim, 1);
> -  c = isl_constraint_set_coefficient_si (c, isl_dim_out, depth_dim, 1);
> -  x = isl_map_add_constraint (x, c);
> -  return x;
> -}
> -
> -/* Reverse the loop at level DEPTH for all the PBBS.  */
> -
> -isl_union_map *
> -reverse_loop_for_pbbs (scop_p scop, vec<poly_bb_p> pbbs, int depth)
> -{
> -  poly_bb_p pbb;
> -  int i;
> -  isl_space *space = isl_space_from_domain (isl_set_get_space 
> (scop->context));
> -  isl_union_map *res = isl_union_map_empty (space);
> -
> -  for (i = 0; pbbs.iterate (i, &pbb); i++)
> -    res = isl_union_map_add_map (res, reverse_loop_at_level (pbb, depth));
> -
> -  return res;
> -}
> -
> -
>  #endif  /* HAVE_isl */
>
> diff --git a/gcc/graphite-poly.h b/gcc/graphite-poly.h
> index 29813e0..3bd22f0 100644
> --- a/gcc/graphite-poly.h
> +++ b/gcc/graphite-poly.h
> @@ -37,8 +37,6 @@ typedef struct scop *scop_p;
>
>  typedef unsigned graphite_dim_t;
>
> -static inline graphite_dim_t pbb_dim_iter_domain (const struct poly_bb *);
> -static inline graphite_dim_t pbb_nb_params (const struct poly_bb *);
>  static inline graphite_dim_t scop_nb_params (scop_p);
>
>  /* A data reference can write or read some memory or we
> @@ -206,63 +204,6 @@ void new_poly_dr (poly_bb_p, int, enum poly_dr_type, 
> void *,
>  void free_poly_dr (poly_dr_p);
>  void debug_pdr (poly_dr_p, int);
>  void print_pdr (FILE *, poly_dr_p, int);
> -static inline scop_p pdr_scop (poly_dr_p pdr);
> -
> -/* The dimension of the iteration domain of the scop of PDR.  */
> -
> -static inline graphite_dim_t
> -pdr_dim_iter_domain (poly_dr_p pdr)
> -{
> -  return pbb_dim_iter_domain (PDR_PBB (pdr));
> -}
> -
> -/* The number of parameters of the scop of PDR.  */
> -
> -static inline graphite_dim_t
> -pdr_nb_params (poly_dr_p pdr)
> -{
> -  return scop_nb_params (pdr_scop (pdr));
> -}
> -
> -/* The dimension of the alias set in PDR.  */
> -
> -static inline graphite_dim_t
> -pdr_alias_set_dim (poly_dr_p pdr)
> -{
> -  poly_bb_p pbb = PDR_PBB (pdr);
> -
> -  return pbb_dim_iter_domain (pbb) + pbb_nb_params (pbb);
> -}
> -
> -/* The dimension in PDR containing subscript S.  */
> -
> -static inline graphite_dim_t
> -pdr_subscript_dim (poly_dr_p pdr, graphite_dim_t s)
> -{
> -  poly_bb_p pbb = PDR_PBB (pdr);
> -
> -  return pbb_dim_iter_domain (pbb) + pbb_nb_params (pbb) + 1 + s;
> -}
> -
> -/* The dimension in PDR containing the loop iterator ITER.  */
> -
> -static inline graphite_dim_t
> -pdr_iterator_dim (poly_dr_p pdr ATTRIBUTE_UNUSED, graphite_dim_t iter)
> -{
> -  return iter;
> -}
> -
> -/* The dimension in PDR containing parameter PARAM.  */
> -
> -static inline graphite_dim_t
> -pdr_parameter_dim (poly_dr_p pdr, graphite_dim_t param)
> -{
> -  poly_bb_p pbb = PDR_PBB (pdr);
> -
> -  return pbb_dim_iter_domain (pbb) + param;
> -}
> -
> -/* Returns true when PDR is a "read".  */
>
>  static inline bool
>  pdr_read_p (poly_dr_p pdr)
> @@ -286,27 +227,6 @@ pdr_may_write_p (poly_dr_p pdr)
>    return PDR_TYPE (pdr) == PDR_MAY_WRITE;
>  }
>
> -/* Return true when PDR1 and PDR2 are similar data accesses: they have
> -   the same base array, and the same access functions.  */
> -
> -static inline bool
> -same_pdr_p (poly_dr_p pdr1, poly_dr_p pdr2)
> -{
> -  return PDR_NB_SUBSCRIPTS (pdr1) == PDR_NB_SUBSCRIPTS (pdr2)
> -    && PDR_BASE_OBJECT_SET (pdr1) == PDR_BASE_OBJECT_SET (pdr2);
> -}
> -
> -typedef struct poly_scattering *poly_scattering_p;
> -
> -struct poly_scattering
> -{
> -  /* The number of local variables.  */
> -  int nb_local_variables;
> -
> -  /* The number of scattering dimensions.  */
> -  int nb_scattering;
> -};
> -
>  /* POLY_BB represents a blackbox in the polyhedral model.  */
>
>  struct poly_bb
> @@ -345,15 +265,12 @@ struct poly_bb
>    vec<poly_dr_p> drs;
>
>    /* The original scattering.  */
> -  poly_scattering_p _original;
>    isl_map *schedule;
>
>    /* The transformed scattering.  */
> -  poly_scattering_p _transformed;
>    isl_map *transformed;
>
>    /* A copy of the transformed scattering.  */
> -  poly_scattering_p _saved;
>    isl_map *saved;
>
>    /* True when this PBB contains only a reduction statement.  */
> @@ -362,24 +279,12 @@ struct poly_bb
>
>  #define PBB_BLACK_BOX(PBB) ((gimple_bb_p) PBB->black_box)
>  #define PBB_SCOP(PBB) (PBB->scop)
> -#define PBB_DOMAIN(PBB) (NULL)
>  #define PBB_DRS(PBB) (PBB->drs)
> -#define PBB_ORIGINAL(PBB) (PBB->_original)
> -#define PBB_ORIGINAL_SCATTERING(PBB) (NULL)
> -#define PBB_TRANSFORMED(PBB) (PBB->_transformed)
> -#define PBB_TRANSFORMED_SCATTERING(PBB) (NULL)
> -#define PBB_SAVED(PBB) (PBB->_saved)
> -/* XXX isl if we ever need local vars in the scatter, we can't use the
> -   out dimension of transformed to count the scatterting transform dimension.
> -   */
> -#define PBB_NB_LOCAL_VARIABLES(PBB) (0)
> -#define PBB_NB_SCATTERING_TRANSFORM(PBB) (isl_map_n_out (PBB->transformed))
>  #define PBB_IS_REDUCTION(PBB) (PBB->is_reduction)
>
>  extern poly_bb_p new_poly_bb (scop_p, void *);
>  extern void free_poly_bb (poly_bb_p);
>  extern void debug_loop_vec (poly_bb_p);
> -extern void schedule_to_scattering (poly_bb_p, int);
>  extern void print_pbb_domain (FILE *, poly_bb_p, int);
>  extern void print_pbb (FILE *, poly_bb_p, int);
>  extern void print_scop_context (FILE *, scop_p, int);
> @@ -412,22 +317,6 @@ extern bool optimize_isl (scop_p);
>  extern void pbb_number_of_iterations_at_time (poly_bb_p, graphite_dim_t, 
> mpz_t);
>  extern void debug_gmp_value (mpz_t);
>
> -/* Return the number of write data references in PBB.  */
> -
> -static inline int
> -number_of_write_pdrs (poly_bb_p pbb)
> -{
> -  int res = 0;
> -  int i;
> -  poly_dr_p pdr;
> -
> -  for (i = 0; PBB_DRS (pbb).iterate (i, &pdr); i++)
> -    if (PDR_TYPE (pdr) == PDR_WRITE)
> -      res++;
> -
> -  return res;
> -}
> -
>  /* Returns a gimple_bb from BB.  */
>
>  static inline gimple_bb_p
> @@ -452,8 +341,6 @@ pbb_bb (poly_bb_p pbb)
>    return GBB_BB (PBB_BLACK_BOX (pbb));
>  }
>
> -/* The index of the PBB.  */
> -
>  static inline int
>  pbb_index (poly_bb_p pbb)
>  {
> @@ -484,859 +371,6 @@ pbb_set_black_box (poly_bb_p pbb, void *black_box)
>    pbb->black_box = black_box;
>  }
>
> -/* The number of loops around PBB: the dimension of the iteration
> -   domain.  */
> -
> -static inline graphite_dim_t
> -pbb_dim_iter_domain (const struct poly_bb *pbb)
> -{
> -  return isl_set_dim (pbb->domain, isl_dim_set);
> -}
> -
> -/* The number of params defined in PBB.  */
> -
> -static inline graphite_dim_t
> -pbb_nb_params (const struct poly_bb *pbb)
> -{
> -  scop_p scop = PBB_SCOP (pbb);
> -
> -  return scop_nb_params (scop);
> -}
> -
> -/* The number of scattering dimensions in the SCATTERING polyhedron
> -   of a PBB for a given SCOP.  */
> -
> -static inline graphite_dim_t
> -pbb_nb_scattering_orig (const struct poly_bb *pbb)
> -{
> -  return 2 * pbb_dim_iter_domain (pbb) + 1;
> -}
> -
> -/* The number of scattering dimensions in PBB.  */
> -
> -static inline graphite_dim_t
> -pbb_nb_scattering_transform (const struct poly_bb *pbb)
> -{
> -  return PBB_NB_SCATTERING_TRANSFORM (pbb);
> -}
> -
> -/* The number of dynamic scattering dimensions in PBB.  */
> -
> -static inline graphite_dim_t
> -pbb_nb_dynamic_scattering_transform (const struct poly_bb *pbb)
> -{
> -  /* This function requires the 2d + 1 scattering format to be
> -     invariant during all transformations.  */
> -  gcc_assert (PBB_NB_SCATTERING_TRANSFORM (pbb) % 2);
> -  return PBB_NB_SCATTERING_TRANSFORM (pbb) / 2;
> -}
> -
> -/* Returns the number of local variables used in the transformed
> -   scattering polyhedron of PBB.  */
> -
> -static inline graphite_dim_t
> -pbb_nb_local_vars (const struct poly_bb *pbb ATTRIBUTE_UNUSED)
> -{
> -  /* For now we do not have any local variables, as we do not do strip
> -     mining for example.  */
> -  return PBB_NB_LOCAL_VARIABLES (pbb);
> -}
> -
> -/* The dimension in the domain of PBB containing the iterator ITER.  */
> -
> -static inline graphite_dim_t
> -pbb_iterator_dim (poly_bb_p pbb ATTRIBUTE_UNUSED, graphite_dim_t iter)
> -{
> -  return iter;
> -}
> -
> -/* The dimension in the domain of PBB containing the iterator ITER.  */
> -
> -static inline graphite_dim_t
> -pbb_parameter_dim (poly_bb_p pbb, graphite_dim_t param)
> -{
> -  return param
> -    + pbb_dim_iter_domain (pbb);
> -}
> -
> -/* The dimension in the original scattering polyhedron of PBB
> -   containing the scattering iterator SCATTER.  */
> -
> -static inline graphite_dim_t
> -psco_scattering_dim (poly_bb_p pbb ATTRIBUTE_UNUSED, graphite_dim_t scatter)
> -{
> -  gcc_assert (scatter < pbb_nb_scattering_orig (pbb));
> -  return scatter;
> -}
> -
> -/* The dimension in the transformed scattering polyhedron of PBB
> -   containing the scattering iterator SCATTER.  */
> -
> -static inline graphite_dim_t
> -psct_scattering_dim (poly_bb_p pbb ATTRIBUTE_UNUSED, graphite_dim_t scatter)
> -{
> -  gcc_assert (scatter <= pbb_nb_scattering_transform (pbb));
> -  return scatter;
> -}
> -
> -/* The dimension in the transformed scattering polyhedron of PBB of
> -   the local variable LV.  */
> -
> -static inline graphite_dim_t
> -psct_local_var_dim (poly_bb_p pbb, graphite_dim_t lv)
> -{
> -  gcc_assert (lv <= pbb_nb_local_vars (pbb));
> -  return lv + pbb_nb_scattering_transform (pbb);
> -}
> -
> -/* The dimension in the original scattering polyhedron of PBB
> -   containing the loop iterator ITER.  */
> -
> -static inline graphite_dim_t
> -psco_iterator_dim (poly_bb_p pbb, graphite_dim_t iter)
> -{
> -  gcc_assert (iter < pbb_dim_iter_domain (pbb));
> -  return iter + pbb_nb_scattering_orig (pbb);
> -}
> -
> -/* The dimension in the transformed scattering polyhedron of PBB
> -   containing the loop iterator ITER.  */
> -
> -static inline graphite_dim_t
> -psct_iterator_dim (poly_bb_p pbb, graphite_dim_t iter)
> -{
> -  gcc_assert (iter < pbb_dim_iter_domain (pbb));
> -  return iter
> -    + pbb_nb_scattering_transform (pbb)
> -    + pbb_nb_local_vars (pbb);
> -}
> -
> -/* The dimension in the original scattering polyhedron of PBB
> -   containing parameter PARAM.  */
> -
> -static inline graphite_dim_t
> -psco_parameter_dim (poly_bb_p pbb, graphite_dim_t param)
> -{
> -  gcc_assert (param < pbb_nb_params (pbb));
> -  return param
> -    + pbb_nb_scattering_orig (pbb)
> -    + pbb_dim_iter_domain (pbb);
> -}
> -
> -/* The dimension in the transformed scattering polyhedron of PBB
> -   containing parameter PARAM.  */
> -
> -static inline graphite_dim_t
> -psct_parameter_dim (poly_bb_p pbb, graphite_dim_t param)
> -{
> -  gcc_assert (param < pbb_nb_params (pbb));
> -  return param
> -    + pbb_nb_scattering_transform (pbb)
> -    + pbb_nb_local_vars (pbb)
> -    + pbb_dim_iter_domain (pbb);
> -}
> -
> -/* The scattering dimension of PBB corresponding to the dynamic level
> -   LEVEL.  */
> -
> -static inline graphite_dim_t
> -psct_dynamic_dim (poly_bb_p pbb, graphite_dim_t level)
> -{
> -  graphite_dim_t result = 1 + 2 * level;
> -
> -  gcc_assert (result < pbb_nb_scattering_transform (pbb));
> -  return result;
> -}
> -
> -/* The scattering dimension of PBB corresponding to the static
> -   sequence of the loop level LEVEL.  */
> -
> -static inline graphite_dim_t
> -psct_static_dim (poly_bb_p pbb, graphite_dim_t level)
> -{
> -  graphite_dim_t result = 2 * level;
> -
> -  gcc_assert (result < pbb_nb_scattering_transform (pbb));
> -  return result;
> -}
> -
> -/* Adds to the transformed scattering polyhedron of PBB a new local
> -   variable and returns its index.  */
> -
> -static inline graphite_dim_t
> -psct_add_local_variable (poly_bb_p pbb ATTRIBUTE_UNUSED)
> -{
> -  gcc_unreachable ();
> -  return 0;
> -}
> -
> -typedef struct lst *lst_p;
> -
> -/* Loops and Statements Tree.  */
> -struct lst {
> -
> -  /* LOOP_P is true when an LST node is a loop.  */
> -  bool loop_p;
> -
> -  /* A pointer to the loop that contains this node.  */
> -  lst_p loop_father;
> -
> -  /* The sum of all the memory strides for an LST loop.  */
> -  mpz_t memory_strides;
> -
> -  /* Loop nodes contain a sequence SEQ of LST nodes, statements
> -     contain a pointer to their polyhedral representation PBB.  */
> -  union {
> -    poly_bb_p pbb;
> -    vec<lst_p> seq;
> -  } node;
> -};
> -
> -#define LST_LOOP_P(LST) ((LST)->loop_p)
> -#define LST_LOOP_FATHER(LST) ((LST)->loop_father)
> -#define LST_PBB(LST) ((LST)->node.pbb)
> -#define LST_SEQ(LST) ((LST)->node.seq)
> -#define LST_LOOP_MEMORY_STRIDES(LST) ((LST)->memory_strides)
> -
> -void scop_to_lst (scop_p);
> -void print_lst (FILE *, lst_p, int);
> -void debug_lst (lst_p);
> -void dot_lst (lst_p);
> -
> -/* Creates a new LST loop with SEQ.  */
> -
> -static inline lst_p
> -new_lst_loop (vec<lst_p> seq)
> -{
> -  lst_p lst = XNEW (struct lst);
> -  int i;
> -  lst_p l;
> -
> -  LST_LOOP_P (lst) = true;
> -  LST_SEQ (lst) = seq;
> -  LST_LOOP_FATHER (lst) = NULL;
> -  mpz_init (LST_LOOP_MEMORY_STRIDES (lst));
> -  mpz_set_si (LST_LOOP_MEMORY_STRIDES (lst), -1);
> -
> -  for (i = 0; seq.iterate (i, &l); i++)
> -    LST_LOOP_FATHER (l) = lst;
> -
> -  return lst;
> -}
> -
> -/* Creates a new LST statement with PBB.  */
> -
> -static inline lst_p
> -new_lst_stmt (poly_bb_p pbb)
> -{
> -  lst_p lst = XNEW (struct lst);
> -
> -  LST_LOOP_P (lst) = false;
> -  LST_PBB (lst) = pbb;
> -  LST_LOOP_FATHER (lst) = NULL;
> -  return lst;
> -}
> -
> -/* Frees the memory used by LST.  */
> -
> -static inline void
> -free_lst (lst_p lst)
> -{
> -  if (!lst)
> -    return;
> -
> -  if (LST_LOOP_P (lst))
> -    {
> -      int i;
> -      lst_p l;
> -
> -      for (i = 0; LST_SEQ (lst).iterate (i, &l); i++)
> -       free_lst (l);
> -
> -      mpz_clear (LST_LOOP_MEMORY_STRIDES (lst));
> -      LST_SEQ (lst).release ();
> -    }
> -
> -  free (lst);
> -}
> -
> -/* Returns a copy of LST.  */
> -
> -static inline lst_p
> -copy_lst (lst_p lst)
> -{
> -  if (!lst)
> -    return NULL;
> -
> -  if (LST_LOOP_P (lst))
> -    {
> -      int i;
> -      lst_p l;
> -      vec<lst_p> seq;
> -      seq.create (5);
> -
> -      for (i = 0; LST_SEQ (lst).iterate (i, &l); i++)
> -       seq.safe_push (copy_lst (l));
> -
> -      return new_lst_loop (seq);
> -    }
> -
> -  return new_lst_stmt (LST_PBB (lst));
> -}
> -
> -/* Adds a new loop under the loop LST.  */
> -
> -static inline void
> -lst_add_loop_under_loop (lst_p lst)
> -{
> -  vec<lst_p> seq;
> -  seq.create (1);
> -  lst_p l = new_lst_loop (LST_SEQ (lst));
> -
> -  gcc_assert (LST_LOOP_P (lst));
> -
> -  LST_LOOP_FATHER (l) = lst;
> -  seq.quick_push (l);
> -  LST_SEQ (lst) = seq;
> -}
> -
> -/* Returns the loop depth of LST.  */
> -
> -static inline int
> -lst_depth (lst_p lst)
> -{
> -  if (!lst)
> -    return -2;
> -
> -  /* The depth of the outermost "fake" loop is -1.  This outermost
> -     loop does not have a loop father and it is just a container, as
> -     in the loop representation of GCC.  */
> -  if (!LST_LOOP_FATHER (lst))
> -    return -1;
> -
> -  return lst_depth (LST_LOOP_FATHER (lst)) + 1;
> -}
> -
> -/* Returns the Dewey number for LST.  */
> -
> -static inline int
> -lst_dewey_number (lst_p lst)
> -{
> -  int i;
> -  lst_p l;
> -
> -  if (!lst)
> -    return -1;
> -
> -  if (!LST_LOOP_FATHER (lst))
> -    return 0;
> -
> -  FOR_EACH_VEC_ELT (LST_SEQ (LST_LOOP_FATHER (lst)), i, l)
> -    if (l == lst)
> -      return i;
> -
> -  return -1;
> -}
> -
> -/* Returns the Dewey number of LST at depth DEPTH.  */
> -
> -static inline int
> -lst_dewey_number_at_depth (lst_p lst, int depth)
> -{
> -  gcc_assert (lst && depth >= 0 && lst_depth (lst) <= depth);
> -
> -  if (lst_depth (lst) == depth)
> -    return lst_dewey_number (lst);
> -
> -  return lst_dewey_number_at_depth (LST_LOOP_FATHER (lst), depth);
> -}
> -
> -/* Returns the predecessor of LST in the sequence of its loop father.
> -   Returns NULL if LST is the first statement in the sequence.  */
> -
> -static inline lst_p
> -lst_pred (lst_p lst)
> -{
> -  int dewey;
> -  lst_p father;
> -
> -  if (!lst || !LST_LOOP_FATHER (lst))
> -    return NULL;
> -
> -  dewey = lst_dewey_number (lst);
> -  if (dewey == 0)
> -    return NULL;
> -
> -  father = LST_LOOP_FATHER (lst);
> -  return LST_SEQ (father)[dewey - 1];
> -}
> -
> -/* Returns the successor of LST in the sequence of its loop father.
> -   Returns NULL if there is none.  */
> -
> -static inline lst_p
> -lst_succ (lst_p lst)
> -{
> -  int dewey;
> -  lst_p father;
> -
> -  if (!lst || !LST_LOOP_FATHER (lst))
> -    return NULL;
> -
> -  dewey = lst_dewey_number (lst);
> -  father = LST_LOOP_FATHER (lst);
> -
> -  if (LST_SEQ (father).length () == (unsigned) dewey + 1)
> -    return NULL;
> -
> -  return LST_SEQ (father)[dewey + 1];
> -}
> -
> -
> -/* Return the LST node corresponding to PBB.  */
> -
> -static inline lst_p
> -lst_find_pbb (lst_p lst, poly_bb_p pbb)
> -{
> -  int i;
> -  lst_p l;
> -
> -  if (!lst)
> -    return NULL;
> -
> -  if (!LST_LOOP_P (lst))
> -    return (pbb == LST_PBB (lst)) ? lst : NULL;
> -
> -  for (i = 0; LST_SEQ (lst).iterate (i, &l); i++)
> -    {
> -      lst_p res = lst_find_pbb (l, pbb);
> -      if (res)
> -       return res;
> -    }
> -
> -  return NULL;
> -}
> -
> -/* Return the LST node corresponding to the loop around STMT at depth
> -   LOOP_DEPTH.  */
> -
> -static inline lst_p
> -find_lst_loop (lst_p stmt, int loop_depth)
> -{
> -  lst_p loop = LST_LOOP_FATHER (stmt);
> -
> -  gcc_assert (loop_depth >= 0);
> -
> -  while (loop_depth < lst_depth (loop))
> -    loop = LST_LOOP_FATHER (loop);
> -
> -  return loop;
> -}
> -
> -/* Return the first LST representing a PBB statement in LST.  */
> -
> -static inline lst_p
> -lst_find_first_pbb (lst_p lst)
> -{
> -  int i;
> -  lst_p l;
> -
> -  if (!lst)
> -    return NULL;
> -
> -  if (!LST_LOOP_P (lst))
> -    return lst;
> -
> -  for (i = 0; LST_SEQ (lst).iterate (i, &l); i++)
> -    {
> -      lst_p res = lst_find_first_pbb (l);
> -      if (res)
> -       return res;
> -    }
> -
> -  return NULL;
> -}
> -
> -/* Returns true when LST is a loop that does not contain
> -   statements.  */
> -
> -static inline bool
> -lst_empty_p (lst_p lst)
> -{
> -  return !lst_find_first_pbb (lst);
> -}
> -
> -/* Return the last LST representing a PBB statement in LST.  */
> -
> -static inline lst_p
> -lst_find_last_pbb (lst_p lst)
> -{
> -  int i;
> -  lst_p l, res = NULL;
> -
> -  if (!lst)
> -    return NULL;
> -
> -  if (!LST_LOOP_P (lst))
> -    return lst;
> -
> -  for (i = 0; LST_SEQ (lst).iterate (i, &l); i++)
> -    {
> -      lst_p last = lst_find_last_pbb (l);
> -
> -      if (last)
> -       res = last;
> -    }
> -
> -  gcc_assert (res);
> -  return res;
> -}
> -
> -/* Returns true if LOOP contains LST, in other words, if LST is nested
> -   in LOOP.  */
> -
> -static inline bool
> -lst_contains_p (lst_p loop, lst_p lst)
> -{
> -  if (!loop || !lst || !LST_LOOP_P (loop))
> -    return false;
> -
> -  if (loop == lst)
> -    return true;
> -
> -  return lst_contains_p (loop, LST_LOOP_FATHER (lst));
> -}
> -
> -/* Returns true if LOOP contains PBB, in other words, if PBB is nested
> -   in LOOP.  */
> -
> -static inline bool
> -lst_contains_pbb (lst_p loop, poly_bb_p pbb)
> -{
> -  return lst_find_pbb (loop, pbb) ? true : false;
> -}
> -
> -/* Creates a loop nest of depth NB_LOOPS containing LST.  */
> -
> -static inline lst_p
> -lst_create_nest (int nb_loops, lst_p lst)
> -{
> -  lst_p res, loop;
> -  vec<lst_p> seq;
> -
> -  if (nb_loops == 0)
> -    return lst;
> -
> -  seq.create (1);
> -  loop = lst_create_nest (nb_loops - 1, lst);
> -  seq.quick_push (loop);
> -  res = new_lst_loop (seq);
> -  LST_LOOP_FATHER (loop) = res;
> -
> -  return res;
> -}
> -
> -/* Removes LST from the sequence of statements of its loop father.  */
> -
> -static inline void
> -lst_remove_from_sequence (lst_p lst)
> -{
> -  lst_p father = LST_LOOP_FATHER (lst);
> -  int dewey = lst_dewey_number (lst);
> -
> -  gcc_assert (lst && father && dewey >= 0);
> -
> -  LST_SEQ (father).ordered_remove (dewey);
> -  LST_LOOP_FATHER (lst) = NULL;
> -}
> -
> -/* Removes the loop LST and inline its body in the father loop.  */
> -
> -static inline void
> -lst_remove_loop_and_inline_stmts_in_loop_father (lst_p lst)
> -{
> -  lst_p l, father = LST_LOOP_FATHER (lst);
> -  int i, dewey = lst_dewey_number (lst);
> -
> -  gcc_assert (lst && father && dewey >= 0);
> -
> -  LST_SEQ (father).ordered_remove (dewey);
> -  LST_LOOP_FATHER (lst) = NULL;
> -
> -  FOR_EACH_VEC_ELT (LST_SEQ (lst), i, l)
> -    {
> -      LST_SEQ (father).safe_insert (dewey + i, l);
> -      LST_LOOP_FATHER (l) = father;
> -    }
> -}
> -
> -/* Sets NITER to the upper bound approximation of the number of
> -   iterations of loop LST.  */
> -
> -static inline void
> -lst_niter_for_loop (lst_p lst, mpz_t niter)
> -{
> -  int depth = lst_depth (lst);
> -  poly_bb_p pbb = LST_PBB (lst_find_first_pbb (lst));
> -
> -  gcc_assert (LST_LOOP_P (lst));
> -  pbb_number_of_iterations_at_time (pbb, psct_dynamic_dim (pbb, depth), 
> niter);
> -}
> -
> -/* Updates the scattering of PBB to be at the DEWEY number in the loop
> -   at depth LEVEL.  */
> -
> -static inline void
> -pbb_update_scattering (poly_bb_p pbb, graphite_dim_t level, int dewey)
> -{
> -  graphite_dim_t sched = psct_static_dim (pbb, level);
> -  isl_space *d = isl_map_get_space (pbb->transformed);
> -  isl_space *d1 = isl_space_range (d);
> -  unsigned i, n = isl_space_dim (d1, isl_dim_out);
> -  isl_space *d2 = isl_space_add_dims (d1, isl_dim_in, n);
> -  isl_map *x = isl_map_universe (d2);
> -
> -  x = isl_map_fix_si (x, isl_dim_out, sched, dewey);
> -
> -  for (i = 0; i < n; i++)
> -    if (i != sched)
> -      x = isl_map_equate (x, isl_dim_in, i, isl_dim_out, i);
> -
> -  pbb->transformed = isl_map_apply_range (pbb->transformed, x);
> -}
> -
> -/* Updates the scattering of all the PBBs under LST to be at the DEWEY
> -   number in the loop at depth LEVEL.  */
> -
> -static inline void
> -lst_update_scattering_under (lst_p lst, int level, int dewey)
> -{
> -  int i;
> -  lst_p l;
> -
> -  gcc_assert (lst && level >= 0 && dewey >= 0);
> -
> -  if (LST_LOOP_P (lst))
> -    for (i = 0; LST_SEQ (lst).iterate (i, &l); i++)
> -      lst_update_scattering_under (l, level, dewey);
> -  else
> -    pbb_update_scattering (LST_PBB (lst), level, dewey);
> -}
> -
> -/* Updates the all the scattering levels of all the PBBs under
> -   LST.  */
> -
> -static inline void
> -lst_update_scattering (lst_p lst)
> -{
> -  int i;
> -  lst_p l;
> -
> -  if (!lst)
> -    return;
> -
> -  if (LST_LOOP_FATHER (lst))
> -    {
> -      lst_p father = LST_LOOP_FATHER (lst);
> -      int dewey = lst_dewey_number (lst);
> -      int level = lst_depth (lst);
> -
> -      gcc_assert (lst && father && dewey >= 0 && level >= 0);
> -
> -      for (i = dewey; LST_SEQ (father).iterate (i, &l); i++)
> -       lst_update_scattering_under (l, level, i);
> -    }
> -
> -  if (LST_LOOP_P (lst))
> -    for (i = 0; LST_SEQ (lst).iterate (i, &l); i++)
> -      lst_update_scattering (l);
> -}
> -
> -/* Inserts LST1 before LST2 if BEFORE is true; inserts LST1 after LST2
> -   if BEFORE is false.  */
> -
> -static inline void
> -lst_insert_in_sequence (lst_p lst1, lst_p lst2, bool before)
> -{
> -  lst_p father;
> -  int dewey;
> -
> -  /* Do not insert empty loops.  */
> -  if (!lst1 || lst_empty_p (lst1))
> -    return;
> -
> -  father = LST_LOOP_FATHER (lst2);
> -  dewey = lst_dewey_number (lst2);
> -
> -  gcc_assert (lst2 && father && dewey >= 0);
> -
> -  LST_SEQ (father).safe_insert (before ? dewey : dewey + 1, lst1);
> -  LST_LOOP_FATHER (lst1) = father;
> -}
> -
> -/* Replaces LST1 with LST2.  */
> -
> -static inline void
> -lst_replace (lst_p lst1, lst_p lst2)
> -{
> -  lst_p father;
> -  int dewey;
> -
> -  if (!lst2 || lst_empty_p (lst2))
> -    return;
> -
> -  father = LST_LOOP_FATHER (lst1);
> -  dewey = lst_dewey_number (lst1);
> -  LST_LOOP_FATHER (lst2) = father;
> -  LST_SEQ (father)[dewey] = lst2;
> -}
> -
> -/* Returns a copy of ROOT where LST has been replaced by a copy of the
> -   LSTs A B C in this sequence.  */
> -
> -static inline lst_p
> -lst_substitute_3 (lst_p root, lst_p lst, lst_p a, lst_p b, lst_p c)
> -{
> -  int i;
> -  lst_p l;
> -  vec<lst_p> seq;
> -
> -  if (!root)
> -    return NULL;
> -
> -  gcc_assert (lst && root != lst);
> -
> -  if (!LST_LOOP_P (root))
> -    return new_lst_stmt (LST_PBB (root));
> -
> -  seq.create (5);
> -
> -  for (i = 0; LST_SEQ (root).iterate (i, &l); i++)
> -    if (l != lst)
> -      seq.safe_push (lst_substitute_3 (l, lst, a, b, c));
> -    else
> -      {
> -       if (!lst_empty_p (a))
> -         seq.safe_push (copy_lst (a));
> -       if (!lst_empty_p (b))
> -         seq.safe_push (copy_lst (b));
> -       if (!lst_empty_p (c))
> -         seq.safe_push (copy_lst (c));
> -      }
> -
> -  return new_lst_loop (seq);
> -}
> -
> -/* Moves LST before LOOP if BEFORE is true, and after the LOOP if
> -   BEFORE is false.  */
> -
> -static inline void
> -lst_distribute_lst (lst_p loop, lst_p lst, bool before)
> -{
> -  int loop_depth = lst_depth (loop);
> -  int depth = lst_depth (lst);
> -  int nb_loops = depth - loop_depth;
> -
> -  gcc_assert (lst && loop && LST_LOOP_P (loop) && nb_loops > 0);
> -
> -  lst_remove_from_sequence (lst);
> -  lst_insert_in_sequence (lst_create_nest (nb_loops, lst), loop, before);
> -}
> -
> -/* Removes from LOOP all the statements before/after and including PBB
> -   if BEFORE is true/false.  Returns the negation of BEFORE when the
> -   statement PBB has been found.  */
> -
> -static inline bool
> -lst_remove_all_before_including_pbb (lst_p loop, poly_bb_p pbb, bool before)
> -{
> -  int i;
> -  lst_p l;
> -
> -  if (!loop || !LST_LOOP_P (loop))
> -    return before;
> -
> -  for (i = 0; LST_SEQ (loop).iterate (i, &l);)
> -    if (LST_LOOP_P (l))
> -      {
> -       before = lst_remove_all_before_including_pbb (l, pbb, before);
> -
> -       if (LST_SEQ (l).length () == 0)
> -         {
> -           LST_SEQ (loop).ordered_remove (i);
> -           free_lst (l);
> -         }
> -       else
> -         i++;
> -      }
> -    else
> -      {
> -       if (before)
> -         {
> -           if (LST_PBB (l) == pbb)
> -             before = false;
> -
> -           LST_SEQ (loop).ordered_remove (i);
> -           free_lst (l);
> -         }
> -       else if (LST_PBB (l) == pbb)
> -         {
> -           before = true;
> -           LST_SEQ (loop).ordered_remove (i);
> -           free_lst (l);
> -         }
> -       else
> -         i++;
> -      }
> -
> -  return before;
> -}
> -
> -/* Removes from LOOP all the statements before/after and excluding PBB
> -   if BEFORE is true/false; Returns the negation of BEFORE when the
> -   statement PBB has been found.  */
> -
> -static inline bool
> -lst_remove_all_before_excluding_pbb (lst_p loop, poly_bb_p pbb, bool before)
> -{
> -  int i;
> -  lst_p l;
> -
> -  if (!loop || !LST_LOOP_P (loop))
> -    return before;
> -
> -  for (i = 0; LST_SEQ (loop).iterate (i, &l);)
> -    if (LST_LOOP_P (l))
> -      {
> -       before = lst_remove_all_before_excluding_pbb (l, pbb, before);
> -
> -       if (LST_SEQ (l).length () == 0)
> -         {
> -           LST_SEQ (loop).ordered_remove (i);
> -           free_lst (l);
> -           continue;
> -         }
> -
> -       i++;
> -      }
> -    else
> -      {
> -       if (before && LST_PBB (l) != pbb)
> -         {
> -           LST_SEQ (loop).ordered_remove (i);
> -           free_lst (l);
> -           continue;
> -         }
> -
> -       i++;
> -
> -       if (LST_PBB (l) == pbb)
> -         before = before ? false : true;
> -      }
> -
> -  return before;
> -}
> -
>  /* A SCOP is a Static Control Part of the program, simple enough to be
>     represented in polyhedral form.  */
>  struct scop
> @@ -1352,9 +386,6 @@ struct scop
>       representation.  */
>    vec<poly_bb_p> bbs;
>
> -  /* Original, transformed and saved schedules.  */
> -  lst_p original_schedule, transformed_schedule, saved_schedule;
> -
>    /* The context describes known restrictions concerning the parameters
>       and relations in between the parameters.
>
> @@ -1389,9 +420,6 @@ struct scop
>  #define SCOP_BBS(S) (S->bbs)
>  #define SCOP_REGION(S) (S->region)
>  #define SCOP_CONTEXT(S) (NULL)
> -#define SCOP_ORIGINAL_SCHEDULE(S) (S->original_schedule)
> -#define SCOP_TRANSFORMED_SCHEDULE(S) (S->transformed_schedule)
> -#define SCOP_SAVED_SCHEDULE(S) (S->saved_schedule)
>  #define POLY_SCOP_P(S) (S->poly_scop_p)
>
>  extern scop_p new_scop (sese);
> @@ -1399,11 +427,6 @@ extern void free_scop (scop_p);
>  extern void free_scops (vec<scop_p> );
>  extern void print_generated_program (FILE *, scop_p);
>  extern void debug_generated_program (scop_p);
> -extern void print_scattering_function (FILE *, poly_bb_p, int);
> -extern void print_scattering_functions (FILE *, scop_p, int);
> -extern void debug_scattering_function (poly_bb_p, int);
> -extern void debug_scattering_functions (scop_p, int);
> -extern int scop_max_loop_depth (scop_p);
>  extern int unify_scattering_dimensions (scop_p);
>  extern bool apply_poly_transforms (scop_p);
>  extern bool graphite_legal_transform (scop_p);
> @@ -1432,114 +455,9 @@ scop_set_nb_params (scop_p scop, graphite_dim_t 
> nb_params)
>    scop->nb_params = nb_params;
>  }
>
> -/* Allocates a new empty poly_scattering structure.  */
> -
> -static inline poly_scattering_p
> -poly_scattering_new (void)
> -{
> -  poly_scattering_p res = XNEW (struct poly_scattering);
> -
> -  res->nb_local_variables = 0;
> -  res->nb_scattering = 0;
> -  return res;
> -}
> -
> -/* Free a poly_scattering structure.  */
> -
> -static inline void
> -poly_scattering_free (poly_scattering_p s)
> -{
> -  free (s);
> -}
> -
> -/* Copies S and return a new scattering.  */
> -
> -static inline poly_scattering_p
> -poly_scattering_copy (poly_scattering_p s)
> -{
> -  poly_scattering_p res = poly_scattering_new ();
> -
> -  res->nb_local_variables = s->nb_local_variables;
> -  res->nb_scattering = s->nb_scattering;
> -  return res;
> -}
> -
> -/* Saves the transformed scattering of PBB.  */
> -
> -static inline void
> -store_scattering_pbb (poly_bb_p pbb)
> -{
> -  isl_map_free (pbb->saved);
> -  pbb->saved = isl_map_copy (pbb->transformed);
> -}
> -
> -/* Stores the SCOP_TRANSFORMED_SCHEDULE to SCOP_SAVED_SCHEDULE.  */
> -
> -static inline void
> -store_lst_schedule (scop_p scop)
> -{
> -  if (SCOP_SAVED_SCHEDULE (scop))
> -    free_lst (SCOP_SAVED_SCHEDULE (scop));
> -
> -  SCOP_SAVED_SCHEDULE (scop) = copy_lst (SCOP_TRANSFORMED_SCHEDULE (scop));
> -}
> -
> -/* Restores the SCOP_TRANSFORMED_SCHEDULE from SCOP_SAVED_SCHEDULE.  */
> -
> -static inline void
> -restore_lst_schedule (scop_p scop)
> -{
> -  if (SCOP_TRANSFORMED_SCHEDULE (scop))
> -    free_lst (SCOP_TRANSFORMED_SCHEDULE (scop));
> -
> -  SCOP_TRANSFORMED_SCHEDULE (scop) = copy_lst (SCOP_SAVED_SCHEDULE (scop));
> -}
> -
> -/* Saves the scattering for all the pbbs in the SCOP.  */
> -
> -static inline void
> -store_scattering (scop_p scop)
> -{
> -  int i;
> -  poly_bb_p pbb;
> -
> -  for (i = 0; SCOP_BBS (scop).iterate (i, &pbb); i++)
> -    store_scattering_pbb (pbb);
> -
> -  store_lst_schedule (scop);
> -}
> -
> -/* Restores the scattering of PBB.  */
> -
> -static inline void
> -restore_scattering_pbb (poly_bb_p pbb)
> -{
> -  gcc_assert (pbb->saved);
> -
> -  isl_map_free (pbb->transformed);
> -  pbb->transformed = isl_map_copy (pbb->saved);
> -}
> -
> -/* Restores the scattering for all the pbbs in the SCOP.  */
> -
> -static inline void
> -restore_scattering (scop_p scop)
> -{
> -  int i;
> -  poly_bb_p pbb;
> -
> -  for (i = 0; SCOP_BBS (scop).iterate (i, &pbb); i++)
> -    restore_scattering_pbb (pbb);
> -
> -  restore_lst_schedule (scop);
> -}
> -
>  bool graphite_legal_transform (scop_p);
> -isl_map *reverse_loop_at_level (poly_bb_p, int);
> -isl_union_map *reverse_loop_for_pbbs (scop_p, vec<poly_bb_p> , int);
>  __isl_give isl_union_map *extend_schedule (__isl_take isl_union_map *);
>
> -
>  void
>  compute_deps (scop_p scop, vec<poly_bb_p> pbbs,
>               isl_union_map **must_raw,
> diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c
> index 0c97eba..e64a6fc 100644
> --- a/gcc/graphite-sese-to-poly.c
> +++ b/gcc/graphite-sese-to-poly.c
> @@ -443,18 +443,12 @@ isl_id_for_pbb (scop_p s, poly_bb_p pbb)
>  /* Converts the STATIC_SCHEDULE of PBB into a scattering polyhedron.
>     We generate SCATTERING_DIMENSIONS scattering dimensions.
>
> -   CLooG 0.15.0 and previous versions require, that all
> -   scattering functions of one CloogProgram have the same number of
> -   scattering dimensions, therefore we allow to specify it.  This
> -   should be removed in future versions of CLooG.
> -
>     The scattering polyhedron consists of these dimensions: scattering,
>     loop_iterators, parameters.
>
>     Example:
>
>     | scattering_dimensions = 5
> -   | used_scattering_dimensions = 3
>     | nb_iterators = 1
>     | scop_nb_params = 2
>     |
> @@ -475,15 +469,13 @@ isl_id_for_pbb (scop_p s, poly_bb_p pbb)
>
>  static void
>  build_pbb_scattering_polyhedrons (isl_aff *static_sched,
> -                                 poly_bb_p pbb, int scattering_dimensions)
> +                                 poly_bb_p pbb)
>  {
>    int i;
> -  int nb_iterators = pbb_dim_iter_domain (pbb);
> -  int used_scattering_dimensions = nb_iterators * 2 + 1;
>    isl_val *val;
>    isl_space *dc, *dm;
>
> -  gcc_assert (scattering_dimensions >= used_scattering_dimensions);
> +  int scattering_dimensions = isl_set_dim (pbb->domain, isl_dim_set) * 2 + 1;
>
>    dc = isl_set_get_space (pbb->domain);
>    dm = isl_space_add_dims (isl_space_from_domain (dc),
> @@ -577,7 +569,6 @@ build_scop_scattering (scop_p scop)
>      {
>        gimple_bb_p gbb = PBB_BLACK_BOX (pbb);
>        int prefix;
> -      int nb_scat_dims = pbb_dim_iter_domain (pbb) * 2 + 1;
>
>        if (previous_gbb)
>         prefix = nb_common_loops (SCOP_REGION (scop), previous_gbb, gbb);
> @@ -588,7 +579,7 @@ build_scop_scattering (scop_p scop)
>
>        static_sched = isl_aff_add_coefficient_si (static_sched, isl_dim_in,
>                                                  prefix, 1);
> -      build_pbb_scattering_polyhedrons (static_sched, pbb, nb_scat_dims);
> +      build_pbb_scattering_polyhedrons (static_sched, pbb);
>      }
>
>    isl_aff_free (static_sched);
> @@ -3103,7 +3094,7 @@ rewrite_commutative_reductions_out_of_ssa (scop_p scop)
>  }
>
>  /* Can all ivs be represented by a signed integer?
> -   As CLooG might generate negative values in its expressions, signed loop 
> ivs
> +   As ISL might generate negative values in its expressions, signed loop ivs
>     are required in the backend. */
>
>  static bool
> @@ -3149,9 +3140,7 @@ build_poly_scop (scop_p scop)
>
>    build_scop_bbs (scop);
>
> -  /* FIXME: This restriction is needed to avoid a problem in CLooG.
> -     Once CLooG is fixed, remove this guard.  Anyways, it makes no
> -     sense to optimize a scop containing only PBBs that do not belong
> +  /* Do not optimize a scop containing only PBBs that do not belong
>       to any loops.  */
>    if (nb_pbbs_in_loops (scop) == 0)
>      return;
> @@ -3182,7 +3171,6 @@ build_poly_scop (scop_p scop)
>    rewrite_cross_bb_scalar_deps_out_of_ssa (scop);
>
>    build_scop_drs (scop);
> -  scop_to_lst (scop);
>    build_scop_scattering (scop);
>
>    /* This SCoP has been translated to the polyhedral
> diff --git a/gcc/graphite.c b/gcc/graphite.c
> index 4acc172..c57c2ba 100644
> --- a/gcc/graphite.c
> +++ b/gcc/graphite.c
> @@ -25,12 +25,7 @@ along with GCC; see the file COPYING3.  If not see
>     An early description of this pass can be found in the GCC Summit'06
>     paper "GRAPHITE: Polyhedral Analyses and Optimizations for GCC".
>     The wiki page http://gcc.gnu.org/wiki/Graphite contains pointers to
> -   the related work.
> -
> -   One important document to read is CLooG's internal manual:
> -   http://repo.or.cz/w/cloog-ppl.git?a=blob_plain;f=doc/cloog.texi;hb=HEAD
> -   that describes the data structure of loops used in this file, and
> -   the functions that are used for transforming the code.  */
> +   the related work.  */
>
>  #include "config.h"
>
> @@ -286,6 +281,9 @@ graphite_transform_loops (void)
>         scop->ctx = ctx;
>         build_poly_scop (scop);
>
> +       if (dump_file && dump_flags)
> +         print_scop (dump_file, scop, 3);
> +
>         if (POLY_SCOP_P (scop)
>             && apply_poly_transforms (scop)
>             && graphite_regenerate_ast_isl (scop))
> diff --git a/gcc/testsuite/g++.dg/graphite/graphite.exp 
> b/gcc/testsuite/g++.dg/graphite/graphite.exp
> index 594d065..2d85cf7 100644
> --- a/gcc/testsuite/g++.dg/graphite/graphite.exp
> +++ b/gcc/testsuite/g++.dg/graphite/graphite.exp
> @@ -41,8 +41,8 @@ set wait_to_run_files [lsort [glob -nocomplain 
> $srcdir/$subdir/*.C ] ]
>  set scop_files        [lsort [glob -nocomplain $srcdir/$subdir/scop-*.C ] ]
>  set id_files          [lsort [glob -nocomplain $srcdir/$subdir/id-*.C ] ]
>  set run_id_files      [lsort [glob -nocomplain $srcdir/$subdir/run-id-*.C ] ]
> -set interchange_files [lsort [glob -nocomplain 
> $srcdir/$subdir/interchange-*.C ] ]
> -set block_files       [lsort [glob -nocomplain $srcdir/$subdir/block-*.C ] ]
> +set opt_files         [lsort [glob -nocomplain 
> $srcdir/$subdir/interchange-*.C \
> +                                              $srcdir/$subdir/block-*.C ] ]
>
>  # Tests to be compiled.
>  set dg-do-what-default compile
> @@ -52,16 +52,14 @@ g++-dg-runtest $id_files          "" "-O2 
> -fgraphite-identity -ffast-math"
>  # Tests to be run.
>  set dg-do-what-default run
>  g++-dg-runtest $run_id_files      "" "-O2 -fgraphite-identity"
> -g++-dg-runtest $interchange_files "" "-O2 -floop-interchange -fno-loop-block 
> -fno-loop-strip-mine -ffast-math -fdump-tree-graphite-all"
> -g++-dg-runtest $block_files       "" "-O2 -floop-block -fno-loop-strip-mine 
> -fno-loop-interchange -ffast-math -fdump-tree-graphite-all"
> +g++-dg-runtest $opt_files         "" "-O2 -floop-nest-optimize -ffast-math 
> -fdump-tree-graphite-all"
>
>  # The default action for the rest of the files is 'compile'.
>  set dg-do-what-default compile
>  foreach f $scop_files        {lremove wait_to_run_files $f}
>  foreach f $id_files          {lremove wait_to_run_files $f}
>  foreach f $run_id_files      {lremove wait_to_run_files $f}
> -foreach f $interchange_files {lremove wait_to_run_files $f}
> -foreach f $block_files       {lremove wait_to_run_files $f}
> +foreach f $opt_files         {lremove wait_to_run_files $f}
>  g++-dg-runtest $wait_to_run_files "" "-pedantic-errors"
>
>  # Clean up.
> diff --git a/gcc/testsuite/gcc.dg/graphite/block-0.c 
> b/gcc/testsuite/gcc.dg/graphite/block-0.c
> index 45a1d17..cb08a5f 100644
> --- a/gcc/testsuite/gcc.dg/graphite/block-0.c
> +++ b/gcc/testsuite/gcc.dg/graphite/block-0.c
> @@ -42,4 +42,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-not "will be loop blocked" "graphite" } } */
> +/* { dg-final { scan-tree-dump-times "not tiled" 3 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/block-1.c 
> b/gcc/testsuite/gcc.dg/graphite/block-1.c
> index 2208eb9..19f9f20 100644
> --- a/gcc/testsuite/gcc.dg/graphite/block-1.c
> +++ b/gcc/testsuite/gcc.dg/graphite/block-1.c
> @@ -45,4 +45,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be loop blocked" 3 "graphite" { 
> xfail *-*-* } } } */
> +/* { dg-final { scan-tree-dump-times "tiled by" 5 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/block-3.c 
> b/gcc/testsuite/gcc.dg/graphite/block-3.c
> index d4fd62d..fd0e661 100644
> --- a/gcc/testsuite/gcc.dg/graphite/block-3.c
> +++ b/gcc/testsuite/gcc.dg/graphite/block-3.c
> @@ -17,7 +17,7 @@ foo (void)
>  {
>    int i, j, k;
>
> -  /* These loops contain too few iterations to be blocked by 64.  */
> +  /* These loops contain too few iterations to be blocked.  */
>    for (i = 0; i < 24; i++)
>      for (j = 0; j < 24; j++)
>        for (k = 0; k < 24; k++)
> @@ -58,4 +58,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be loop blocked" 1 "graphite" } } 
> */
> +/* { dg-final { scan-tree-dump-times "tiled by" 3 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/block-4.c 
> b/gcc/testsuite/gcc.dg/graphite/block-4.c
> index e383a66..744b481 100644
> --- a/gcc/testsuite/gcc.dg/graphite/block-4.c
> +++ b/gcc/testsuite/gcc.dg/graphite/block-4.c
> @@ -16,7 +16,7 @@ foo (void)
>  {
>    int i, j, k;
>
> -  /* This should NOT be blocked: each loop iterates only 24 times.  */
> +  /* This should NOT be blocked.  */
>    for (i = 0; i < 24; i++)
>      for (j = 0; j < 24; j++)
>        for (k = 0; k < 24; k++)
> @@ -57,4 +57,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be loop blocked" 1 "graphite" { 
> xfail *-*-* } } } */
> +/* { dg-final { scan-tree-dump-times "tiled by" 7 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/block-5.c 
> b/gcc/testsuite/gcc.dg/graphite/block-5.c
> index 60b7d09..d30abf80 100644
> --- a/gcc/testsuite/gcc.dg/graphite/block-5.c
> +++ b/gcc/testsuite/gcc.dg/graphite/block-5.c
> @@ -53,4 +53,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be loop blocked" 1 "graphite" } } 
> */
> +/* { dg-final { scan-tree-dump-times "tiled by" 3 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/block-6.c 
> b/gcc/testsuite/gcc.dg/graphite/block-6.c
> index 47fee89..9f03448 100644
> --- a/gcc/testsuite/gcc.dg/graphite/block-6.c
> +++ b/gcc/testsuite/gcc.dg/graphite/block-6.c
> @@ -48,4 +48,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be loop blocked" 0 "graphite" } } 
> */
> +/* { dg-final { scan-tree-dump-times "tiled by" 3 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/block-7.c 
> b/gcc/testsuite/gcc.dg/graphite/block-7.c
> index c07bae065..8b54e26 100644
> --- a/gcc/testsuite/gcc.dg/graphite/block-7.c
> +++ b/gcc/testsuite/gcc.dg/graphite/block-7.c
> @@ -54,4 +54,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be loop blocked" 1 "graphite" } } 
> */
> +/* { dg-final { scan-tree-dump-times "tiled by" 6 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/block-8.c 
> b/gcc/testsuite/gcc.dg/graphite/block-8.c
> index 0e9b02c..d3fdf84 100644
> --- a/gcc/testsuite/gcc.dg/graphite/block-8.c
> +++ b/gcc/testsuite/gcc.dg/graphite/block-8.c
> @@ -55,4 +55,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be loop blocked" 1 "graphite" } } 
> */
> +/* { dg-final { scan-tree-dump-times "tiled by" 7 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/block-pr47654.c 
> b/gcc/testsuite/gcc.dg/graphite/block-pr47654.c
> index 358c49a..a7453c5 100644
> --- a/gcc/testsuite/gcc.dg/graphite/block-pr47654.c
> +++ b/gcc/testsuite/gcc.dg/graphite/block-pr47654.c
> @@ -21,4 +21,4 @@ main ()
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-not "will be loop blocked" "graphite" } } */
> +/* { dg-final { scan-tree-dump-times "tiled by" 1 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/graphite.exp 
> b/gcc/testsuite/gcc.dg/graphite/graphite.exp
> index 9e7ede6..f2d1417 100644
> --- a/gcc/testsuite/gcc.dg/graphite/graphite.exp
> +++ b/gcc/testsuite/gcc.dg/graphite/graphite.exp
> @@ -41,10 +41,10 @@ set wait_to_run_files [lsort [glob -nocomplain 
> $srcdir/$subdir/*.c ] ]
>  set scop_files        [lsort [glob -nocomplain $srcdir/$subdir/scop-*.c ] ]
>  set id_files          [lsort [glob -nocomplain $srcdir/$subdir/id-*.c ] ]
>  set run_id_files      [lsort [glob -nocomplain $srcdir/$subdir/run-id-*.c ] ]
> -set interchange_files [lsort [glob -nocomplain 
> $srcdir/$subdir/interchange-*.c \
> -                             $srcdir/$subdir/uns-interchange-*.c ] ]
> -set block_files       [lsort [glob -nocomplain $srcdir/$subdir/block-*.c \
> -                             $srcdir/$subdir/uns-block-*.c ] ]
> +set opt_files         [lsort [glob -nocomplain 
> $srcdir/$subdir/interchange-*.c \
> +                                              
> $srcdir/$subdir/uns-interchange-*.c \
> +                                              $srcdir/$subdir/block-*.c \
> +                                              $srcdir/$subdir/uns-block-*.c 
> ] ]
>  set vect_files        [lsort [glob -nocomplain $srcdir/$subdir/vect-*.c ] ]
>
>  # Tests to be compiled.
> @@ -55,8 +55,7 @@ dg-runtest $id_files          "" "-O2 -fgraphite-identity 
> -ffast-math"
>  # Tests to be run.
>  set dg-do-what-default run
>  dg-runtest $run_id_files      "" "-O2 -fgraphite-identity"
> -dg-runtest $interchange_files "" "-O2 -floop-interchange -fno-loop-block 
> -fno-loop-strip-mine -ffast-math -fdump-tree-graphite-all"
> -dg-runtest $block_files       "" "-O2 -floop-block -fno-loop-strip-mine 
> -fno-loop-interchange -ffast-math -fdump-tree-graphite-all"
> +dg-runtest $opt_files         "" "-O2 -ffast-math -floop-nest-optimize 
> -fdump-tree-graphite-all"
>
>  # Vectorizer tests, to be run or compiled, depending on target capabilities.
>  global DEFAULT_VECTCFLAGS
> @@ -71,8 +70,7 @@ set dg-do-what-default compile
>  foreach f $scop_files        {lremove wait_to_run_files $f}
>  foreach f $id_files          {lremove wait_to_run_files $f}
>  foreach f $run_id_files      {lremove wait_to_run_files $f}
> -foreach f $interchange_files {lremove wait_to_run_files $f}
> -foreach f $block_files       {lremove wait_to_run_files $f}
> +foreach f $opt_files         {lremove wait_to_run_files $f}
>  foreach f $vect_files        {lremove wait_to_run_files $f}
>  dg-runtest $wait_to_run_files "" "-ansi -pedantic-errors"
>
> diff --git a/gcc/testsuite/gcc.dg/graphite/interchange-0.c 
> b/gcc/testsuite/gcc.dg/graphite/interchange-0.c
> index 5d04068..2ea8f01 100644
> --- a/gcc/testsuite/gcc.dg/graphite/interchange-0.c
> +++ b/gcc/testsuite/gcc.dg/graphite/interchange-0.c
> @@ -46,4 +46,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 1 "graphite" } } 
> */
> +/* { dg-final { scan-tree-dump-times "tiled by" 2 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/interchange-1.c 
> b/gcc/testsuite/gcc.dg/graphite/interchange-1.c
> index c480e83..b9f12c7 100644
> --- a/gcc/testsuite/gcc.dg/graphite/interchange-1.c
> +++ b/gcc/testsuite/gcc.dg/graphite/interchange-1.c
> @@ -49,4 +49,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 1 "graphite" } } 
> */
> +/* { dg-final { scan-tree-dump-times "tiled by" 2 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/interchange-10.c 
> b/gcc/testsuite/gcc.dg/graphite/interchange-10.c
> index cbb15bd..29e11c7 100644
> --- a/gcc/testsuite/gcc.dg/graphite/interchange-10.c
> +++ b/gcc/testsuite/gcc.dg/graphite/interchange-10.c
> @@ -46,4 +46,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 2 "graphite" } } 
> */
> +/* { dg-final { scan-tree-dump-times "tiled by" 4 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/interchange-11.c 
> b/gcc/testsuite/gcc.dg/graphite/interchange-11.c
> index f779fbd..afd7123 100644
> --- a/gcc/testsuite/gcc.dg/graphite/interchange-11.c
> +++ b/gcc/testsuite/gcc.dg/graphite/interchange-11.c
> @@ -46,4 +46,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 1 "graphite" } } 
> */
> +/* { dg-final { scan-tree-dump-times "tiled by" 2 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/interchange-12.c 
> b/gcc/testsuite/gcc.dg/graphite/interchange-12.c
> index bf95fdd..9d5e04c 100644
> --- a/gcc/testsuite/gcc.dg/graphite/interchange-12.c
> +++ b/gcc/testsuite/gcc.dg/graphite/interchange-12.c
> @@ -53,4 +53,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 1 "graphite" { 
> xfail *-*-* } } } */
> +/* { dg-final { scan-tree-dump-times "tiled by" 5 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/interchange-13.c 
> b/gcc/testsuite/gcc.dg/graphite/interchange-13.c
> index 69f6b60..0e722e2 100644
> --- a/gcc/testsuite/gcc.dg/graphite/interchange-13.c
> +++ b/gcc/testsuite/gcc.dg/graphite/interchange-13.c
> @@ -50,4 +50,4 @@ main (void)
>  }
>
>
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 1 "graphite" } } 
> */
> +/* { dg-final { scan-tree-dump-times "tiled by" 2 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/interchange-14.c 
> b/gcc/testsuite/gcc.dg/graphite/interchange-14.c
> index 46f6a6d..55c6002 100644
> --- a/gcc/testsuite/gcc.dg/graphite/interchange-14.c
> +++ b/gcc/testsuite/gcc.dg/graphite/interchange-14.c
> @@ -54,5 +54,4 @@ main (void)
>    return 0;
>  }
>
> -/* PRE destroys the perfect nest and we can't cope with that yet.  */
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 1 "graphite" { 
> xfail *-*-* } } } */
> +/* { dg-final { scan-tree-dump-times "tiled by" 7 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/interchange-15.c 
> b/gcc/testsuite/gcc.dg/graphite/interchange-15.c
> index 9f6b7ae..0b6829f 100644
> --- a/gcc/testsuite/gcc.dg/graphite/interchange-15.c
> +++ b/gcc/testsuite/gcc.dg/graphite/interchange-15.c
> @@ -48,6 +48,4 @@ main (void)
>    return 0;
>  }
>
> -/* PRE destroys the perfect nest and we can't cope with that yet.  */
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 1 "graphite" { 
> xfail *-*-* } } } */
> -
> +/* { dg-final { scan-tree-dump-times "tiled by" 4 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/interchange-3.c 
> b/gcc/testsuite/gcc.dg/graphite/interchange-3.c
> index 3332088..cdc0202 100644
> --- a/gcc/testsuite/gcc.dg/graphite/interchange-3.c
> +++ b/gcc/testsuite/gcc.dg/graphite/interchange-3.c
> @@ -47,4 +47,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 1 "graphite" } } 
> */
> +/* { dg-final { scan-tree-dump-times "tiled by" 2 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/interchange-4.c 
> b/gcc/testsuite/gcc.dg/graphite/interchange-4.c
> index 678c0ed..6712565 100644
> --- a/gcc/testsuite/gcc.dg/graphite/interchange-4.c
> +++ b/gcc/testsuite/gcc.dg/graphite/interchange-4.c
> @@ -46,4 +46,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 1 "graphite" } } 
> */
> +/* { dg-final { scan-tree-dump-times "tiled by" 2 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/interchange-5.c 
> b/gcc/testsuite/gcc.dg/graphite/interchange-5.c
> index 16cadc8..339e3b7 100644
> --- a/gcc/testsuite/gcc.dg/graphite/interchange-5.c
> +++ b/gcc/testsuite/gcc.dg/graphite/interchange-5.c
> @@ -46,4 +46,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 1 "graphite" } } 
> */
> +/* { dg-final { scan-tree-dump-times "tiled by" 2 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/interchange-6.c 
> b/gcc/testsuite/gcc.dg/graphite/interchange-6.c
> index 708c739..78f358e 100644
> --- a/gcc/testsuite/gcc.dg/graphite/interchange-6.c
> +++ b/gcc/testsuite/gcc.dg/graphite/interchange-6.c
> @@ -47,4 +47,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 1 "graphite" } } 
> */
> +/* { dg-final { scan-tree-dump-times "tiled by" 2 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/interchange-7.c 
> b/gcc/testsuite/gcc.dg/graphite/interchange-7.c
> index 3281e7e..d99a16a 100644
> --- a/gcc/testsuite/gcc.dg/graphite/interchange-7.c
> +++ b/gcc/testsuite/gcc.dg/graphite/interchange-7.c
> @@ -46,4 +46,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 1 "graphite" } } 
> */
> +/* { dg-final { scan-tree-dump-times "tiled by" 2 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/interchange-8.c 
> b/gcc/testsuite/gcc.dg/graphite/interchange-8.c
> index 49cfbc8..123106b 100644
> --- a/gcc/testsuite/gcc.dg/graphite/interchange-8.c
> +++ b/gcc/testsuite/gcc.dg/graphite/interchange-8.c
> @@ -82,4 +82,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 2 "graphite" } } 
> */
> +/* { dg-final { scan-tree-dump-times "tiled by" 5 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/interchange-9.c 
> b/gcc/testsuite/gcc.dg/graphite/interchange-9.c
> index b023ea8..e4c54ae 100644
> --- a/gcc/testsuite/gcc.dg/graphite/interchange-9.c
> +++ b/gcc/testsuite/gcc.dg/graphite/interchange-9.c
> @@ -44,4 +44,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 1 "graphite" { 
> xfail *-*-* } } } */
> +/* { dg-final { scan-tree-dump-times "tiled by" 3 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/interchange-mvt.c 
> b/gcc/testsuite/gcc.dg/graphite/interchange-mvt.c
> index 8c00f80..bfa5c63 100644
> --- a/gcc/testsuite/gcc.dg/graphite/interchange-mvt.c
> +++ b/gcc/testsuite/gcc.dg/graphite/interchange-mvt.c
> @@ -58,6 +58,4 @@ main (void)
>    return 0;
>  }
>
> -/* PRE destroys the perfect nest and we can't cope with that yet.  */
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 1 "graphite" { 
> xfail *-*-* } } } */
> -
> +/* { dg-final { scan-tree-dump-times "tiled by" 7 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/pr37485.c 
> b/gcc/testsuite/gcc.dg/graphite/pr37485.c
> index 9543ce4..0a6dfbc 100644
> --- a/gcc/testsuite/gcc.dg/graphite/pr37485.c
> +++ b/gcc/testsuite/gcc.dg/graphite/pr37485.c
> @@ -1,4 +1,4 @@
> -/* { dg-options "-O2 -floop-block -fno-loop-strip-mine -fno-loop-interchange 
> -ffast-math -fdump-tree-graphite-all" } */
> +/* { dg-options "-O2 -floop-block -ffast-math -fdump-tree-graphite-all" } */
>
>  typedef unsigned char   UChar;
>  typedef int             Int32;
> @@ -30,4 +30,5 @@ void fallbackSort ( UInt32* fmap,
>     }
>     AssertH ( j < 256, 1005 );
>  }
> -/* { dg-final { scan-tree-dump-times "Loop blocked" 1 "graphite" { xfail 
> *-*-* }} } */
> +
> +/* { dg-final { scan-tree-dump-times "tiled by" 1 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/uns-block-1.c 
> b/gcc/testsuite/gcc.dg/graphite/uns-block-1.c
> index c50b770..12a6291 100644
> --- a/gcc/testsuite/gcc.dg/graphite/uns-block-1.c
> +++ b/gcc/testsuite/gcc.dg/graphite/uns-block-1.c
> @@ -45,4 +45,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be loop blocked" 3 "graphite" } } 
> */
> +/* { dg-final { scan-tree-dump-times "tiled by" 4 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/uns-interchange-12.c 
> b/gcc/testsuite/gcc.dg/graphite/uns-interchange-12.c
> index bd21ba9..d9c07e2 100644
> --- a/gcc/testsuite/gcc.dg/graphite/uns-interchange-12.c
> +++ b/gcc/testsuite/gcc.dg/graphite/uns-interchange-12.c
> @@ -54,4 +54,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 1 "graphite" } } 
> */
> +/* { dg-final { scan-tree-dump-times "tiled by" 4 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/uns-interchange-14.c 
> b/gcc/testsuite/gcc.dg/graphite/uns-interchange-14.c
> index b1abd13..7ef575b 100644
> --- a/gcc/testsuite/gcc.dg/graphite/uns-interchange-14.c
> +++ b/gcc/testsuite/gcc.dg/graphite/uns-interchange-14.c
> @@ -55,5 +55,4 @@ main (void)
>    return 0;
>  }
>
> -/* PRE destroys the perfect nest and we can't cope with that yet.  */
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 1 "graphite" } } 
> */
> +/* { dg-final { scan-tree-dump-times "tiled by" 6 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/uns-interchange-15.c 
> b/gcc/testsuite/gcc.dg/graphite/uns-interchange-15.c
> index a5a2e27..0e32fd6 100644
> --- a/gcc/testsuite/gcc.dg/graphite/uns-interchange-15.c
> +++ b/gcc/testsuite/gcc.dg/graphite/uns-interchange-15.c
> @@ -49,6 +49,4 @@ main (void)
>    return 0;
>  }
>
> -/* PRE destroys the perfect nest and we can't cope with that yet.  */
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 1 "graphite" } } 
> */
> -
> +/* { dg-final { scan-tree-dump-times "tiled by" 2 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/uns-interchange-9.c 
> b/gcc/testsuite/gcc.dg/graphite/uns-interchange-9.c
> index 6bfd3d6..31b1322 100644
> --- a/gcc/testsuite/gcc.dg/graphite/uns-interchange-9.c
> +++ b/gcc/testsuite/gcc.dg/graphite/uns-interchange-9.c
> @@ -45,4 +45,4 @@ main (void)
>    return 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 1 "graphite" } } 
> */
> +/* { dg-final { scan-tree-dump-times "tiled by" 2 "graphite" } } */
> diff --git a/gcc/testsuite/gcc.dg/graphite/uns-interchange-mvt.c 
> b/gcc/testsuite/gcc.dg/graphite/uns-interchange-mvt.c
> index 80f6789..eebece3 100644
> --- a/gcc/testsuite/gcc.dg/graphite/uns-interchange-mvt.c
> +++ b/gcc/testsuite/gcc.dg/graphite/uns-interchange-mvt.c
> @@ -59,6 +59,4 @@ main (void)
>    return 0;
>  }
>
> -/* PRE destroys the perfect nest and we can't cope with that yet.  */
> -/* { dg-final { scan-tree-dump-times "will be interchanged" 1 "graphite" } } 
> */
> -
> +/* { dg-final { scan-tree-dump-times "tiled by" 3 "graphite" } } */
> diff --git a/gcc/testsuite/gfortran.dg/graphite/graphite.exp 
> b/gcc/testsuite/gfortran.dg/graphite/graphite.exp
> index 1df46ea..93863c3 100644
> --- a/gcc/testsuite/gfortran.dg/graphite/graphite.exp
> +++ b/gcc/testsuite/gfortran.dg/graphite/graphite.exp
> @@ -38,9 +38,9 @@ set save-dg-do-what-default ${dg-do-what-default}
>  dg-init
>
>  set wait_to_run_files [lsort [glob -nocomplain 
> $srcdir/$subdir/*.\[fF\]{,90,95,03,08} ] ]
> -set block_files       [lsort [glob -nocomplain 
> $srcdir/$subdir/block-*.\[fF\]{,90,95,03,08} ] ]
>  set id_files          [lsort [glob -nocomplain 
> $srcdir/$subdir/id-*.\[fF\]{,90,95,03,08} ] ]
> -set interchange_files [lsort [glob -nocomplain 
> $srcdir/$subdir/interchange-*.\[fF\]{,90,95,03,08} ] ]
> +set opt_files         [lsort [glob -nocomplain 
> $srcdir/$subdir/interchange-*.\[fF\]{,90,95,03,08} \
> +                                              
> $srcdir/$subdir/block-*.\[fF\]{,90,95,03,08} ] ]
>  set scop_files        [lsort [glob -nocomplain 
> $srcdir/$subdir/scop-*.\[fF\]{,90,95,03,08} ] ]
>  set run_id_files      [lsort [glob -nocomplain 
> $srcdir/$subdir/run-id-*.\[fF\]{,90,95,03,08} ] ]
>  set vect_files        [lsort [glob -nocomplain 
> $srcdir/$subdir/vect-*.\[fF\]{,90,95,03,08} ] ]
> @@ -49,8 +49,7 @@ set vect_files        [lsort [glob -nocomplain 
> $srcdir/$subdir/vect-*.\[fF\]{,90
>  set dg-do-what-default compile
>  gfortran-dg-runtest $scop_files        "" "-O2 -fgraphite 
> -fdump-tree-graphite-all"
>  gfortran-dg-runtest $id_files          "" "-O2 -fgraphite-identity 
> -ffast-math"
> -gfortran-dg-runtest $interchange_files "" "-O2 -floop-interchange 
> -fno-loop-block -fno-loop-strip-mine -ffast-math -fdump-tree-graphite-all"
> -gfortran-dg-runtest $block_files       "" "-O2 -floop-block 
> -fno-loop-strip-mine -fno-loop-interchange -ffast-math 
> -fdump-tree-graphite-all"
> +gfortran-dg-runtest $opt_files         "" "-O2 -floop-nest-optimize 
> -ffast-math -fdump-tree-graphite-all"
>
>  # Vectorizer tests, to be run or compiled, depending on target capabilities.
>  if [check_vect_support_and_set_flags] {
> @@ -63,9 +62,8 @@ gfortran-dg-runtest $run_id_files      "" "-O2 
> -fgraphite-identity"
>
>  # The default action for the rest of the files is 'compile'.
>  set dg-do-what-default compile
> -foreach f $block_files       {lremove wait_to_run_files $f}
>  foreach f $id_files          {lremove wait_to_run_files $f}
> -foreach f $interchange_files {lremove wait_to_run_files $f}
> +foreach f $opt_files         {lremove wait_to_run_files $f}
>  foreach f $scop_files        {lremove wait_to_run_files $f}
>  foreach f $run_id_files      {lremove wait_to_run_files $f}
>  foreach f $vect_files        {lremove wait_to_run_files $f}
> --
> 2.1.0.243.g30d45f7
>

Reply via email to