aboutsummaryrefslogtreecommitdiff
path: root/gcc/graphite.c
diff options
context:
space:
mode:
authorTobias Grosser <grosser@fim.uni-passau.de>2008-06-12 17:50:47 +0000
committerTobias Grosser <grosser@fim.uni-passau.de>2008-06-12 17:50:47 +0000
commit5a779c0acdb3eac938f5385674d2586150333ad8 (patch)
tree70a63bce873d075570f73db69ea3bc0e36a4238d /gcc/graphite.c
parentcf8a7e81271ac0443c4d8b850ab87ba76396c0c2 (diff)
2008-06-12 Tobias Grosser <grosser@fim.uni-passau.de>
* graphite.c (print_graphite_bb): Fix definiton of schedule_to_scattering. (initialize_cloog_names): Change nb_scattdims to max loop depth in SCoP. (schedule_to_scattering): Take parameter for number of scattering dimensions. (build_cloog_prog): Only build as much scattering dimensions as necessary. git-svn-id: https://gcc.gnu.org/svn/gcc/branches/graphite@136721 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/graphite.c')
-rw-r--r--gcc/graphite.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/gcc/graphite.c b/gcc/graphite.c
index c1011f7ee34..9321632f2cb 100644
--- a/gcc/graphite.c
+++ b/gcc/graphite.c
@@ -49,7 +49,8 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
VEC (scop_p, heap) *current_scops;
static tree harmful_stmt_in_bb (struct loop *outermost_loop, basic_block);
-static CloogMatrix *schedule_to_scattering (graphite_bb_p);
+static CloogMatrix *schedule_to_scattering (graphite_bb_p, int);
+static inline int nb_loops_around_gb (graphite_bb_p gb);
/* Returns a new loop_to_cloog_loop_str structure. */
@@ -113,7 +114,10 @@ print_graphite_bb (FILE *file, graphite_bb_p gb, int indent, int verbosity)
dump_data_references (file, GBB_DATA_REFS (gb));
fprintf (file, " (scattering: \n");
- cloog_matrix_print (file, schedule_to_scattering (gb));
+ cloog_matrix_print (file,
+ schedule_to_scattering (gb, 2 * nb_loops_around_gb (gb)
+ + 1));
+
fprintf (file, " )\n");
fprintf (file, ")\n");
@@ -1508,7 +1512,7 @@ initialize_cloog_names (scop_p scop)
unsigned i, nb_params = VEC_length (name_tree, SCOP_PARAMS (scop));
char **params = XNEWVEC (char *, nb_params);
unsigned nb_iterators = scop_nb_loops(scop);
- unsigned nb_scattering= scop_nb_loops(scop) * 2 + 1;
+ unsigned nb_scattering= SCOP_PROG (scop)->nb_scattdims;
char **iterators = XNEWVEC (char *, nb_iterators);
char **scattering = XNEWVEC (char *, nb_scattering);
name_tree p;
@@ -1822,7 +1826,7 @@ setup_cloog_loop (scop_p scop, struct loop *loop, CloogMatrix *outer_cstr,
function matrix, which restores the original control flow. */
static CloogMatrix *
-schedule_to_scattering (graphite_bb_p gb)
+schedule_to_scattering (graphite_bb_p gb, int scattering_dimensions)
{
int i;
scop_p scop = GBB_SCOP (gb);
@@ -1836,9 +1840,7 @@ schedule_to_scattering (graphite_bb_p gb)
XXX: max_nb_iterators: The maximal possible loop depth in this SCoP
would be sufficient. */
- int max_nb_iterators = scop_nb_loops (scop);
int nb_iterators = nb_loops_around_gb (gb);
- int scattering_dimensions = max_nb_iterators * 2 + 1;
/* The cloog scattering matrix consists of these colums:
1 col = Eq/Inq,
@@ -1870,6 +1872,8 @@ schedule_to_scattering (graphite_bb_p gb)
CloogMatrix *scat = cloog_matrix_alloc (scattering_dimensions, nb_cols);
+ assert (scattering_dimensions >= nb_iterators * 2 + 1);
+
/* Initialize the identity matrix. */
for (i = 0; i < scattering_dimensions; i++)
{
@@ -2311,11 +2315,23 @@ static void
build_cloog_prog (scop_p scop)
{
int i;
+ int max_nb_loops = 0;
graphite_bb_p gbb;
CloogLoop *loop_list = NULL;
CloogBlockList *block_list = NULL;
CloogDomainList *scattering = NULL;
CloogProgram *prog = SCOP_PROG (scop);
+
+ for (i = 0; VEC_iterate (graphite_bb_p, SCOP_BBS (scop), i, gbb); i++)
+ {
+ int nb_loops = nb_loops_around_gb (gbb);
+ if (max_nb_loops < nb_loops)
+ max_nb_loops = nb_loops;
+ }
+
+ prog->nb_scattdims = 2 * max_nb_loops + 1;
+
+ initialize_cloog_names (scop);
for (i = 0; VEC_iterate (graphite_bb_p, SCOP_BBS (scop), i, gbb); i++)
{
@@ -2351,7 +2367,7 @@ build_cloog_prog (scop_p scop)
/* XXX: Unused cloog field. Not necessary for scattering. Just here
during developement to document this. Should be removed in future gcc
and cloog versions. */
- block->scattering = schedule_to_scattering (gbb);
+ block->scattering = schedule_to_scattering (gbb, prog->nb_scattdims);
/* Build scattering list. */
{
@@ -2365,7 +2381,6 @@ build_cloog_prog (scop_p scop)
prog->loop = loop_list;
prog->blocklist = block_list;
- prog->nb_scattdims = 2 * scop_nb_loops (scop) + 1;
prog->scaldims = (int *) xmalloc (prog->nb_scattdims * (sizeof (int)));
/* XXX: Work around some libcloog shortcomings. Cedric will integrate this