GCC Middle and Back End API Reference
graphite-blocking.c File Reference

Functions

static void pbb_strip_mine_time_depth ()
static bool lst_strip_mine_profitable_p ()
static int lst_do_strip_mine_loop ()
static int lst_do_strip_mine ()
int scop_do_strip_mine ()
bool scop_do_block ()

Function Documentation

static int lst_do_strip_mine ( )
static
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);

References lst_add_loop_under_loop(), lst_depth(), lst_do_strip_mine_loop(), and lst_strip_mine_profitable_p().

Referenced by scop_do_block(), and scop_do_strip_mine().

static int lst_do_strip_mine_loop ( )
static
Strip-mines all the loops of LST with STRIDE.  Return the number of
   loops strip-mined.   

References pbb_strip_mine_time_depth(), and psct_dynamic_dim().

Referenced by lst_do_strip_mine().

static bool lst_strip_mine_profitable_p ( )
static
Returns true when strip mining with STRIDE of the loop LST is
   profitable.   

References lst_niter_for_loop().

Referenced by lst_do_strip_mine().

static void pbb_strip_mine_time_depth ( )
static
@verbatim Heuristics and transform for loop blocking and strip mining on

polyhedral representation.

Copyright (C) 2009-2013 Free Software Foundation, Inc. Contributed by Sebastian Pop sebas.nosp@m.tian.nosp@m..pop@.nosp@m.amd..nosp@m.com and Pranav Garg prana.nosp@m.v.ga.nosp@m.rg210.nosp@m.7@gm.nosp@m.ail.c.nosp@m.om.

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/.

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) ;
   #   }
   # }

References poly_bb::transformed.

Referenced by lst_do_strip_mine_loop().

bool scop_do_block ( )
Loop blocks all the loops in SCOP.  Returns true when we manage to
   block some loops.   

References dump_file, dump_flags, lst_do_strip_mine(), restore_scattering(), scop_do_interchange(), and store_scattering().

Referenced by apply_poly_transforms().

int scop_do_strip_mine ( )
Strip mines all the loops in SCOP.  Returns the number of
   strip-mined loops.   

References lst_do_strip_mine().

Referenced by apply_poly_transforms().