|
GCC Middle and Back End API 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 () |
|
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 |
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 |
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 |
@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 sebastian.pop@amd.com and Pranav Garg pranav.garg2107@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/.
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().