Commit 5c6c42c9 by Sebastian Pop Committed by Sebastian Pop

graphite-blocking.c (lst_do_strip_mine): Avoid strip mining the root of the LST.

2009-10-15  Sebastian Pop  <sebastian.pop@amd.com>

	* graphite-blocking.c (lst_do_strip_mine): Avoid strip mining the
	root of the LST.
	* graphite-interchange.c (lst_do_interchange): Avoid interchanging
	the root of the LST.
	* graphite-poly.c (scop_to_lst): Fix LST sequence in an outermost
	fake loop.
	(print_lst): Print the root of LST in a different format.
	* graphite-poly.h (lst_depth): Adjust to include the root of the LST.

From-SVN: r154593
parent f58be90e
2009-10-15 Sebastian Pop <sebastian.pop@amd.com>
* graphite-blocking.c (lst_do_strip_mine): Avoid strip mining the
root of the LST.
* graphite-interchange.c (lst_do_interchange): Avoid interchanging
the root of the LST.
* graphite-poly.c (scop_to_lst): Fix LST sequence in an outermost
fake loop.
(print_lst): Print the root of LST in a different format.
* graphite-poly.h (lst_depth): Adjust to include the root of the LST.
2009-10-15 Sebastian Pop <sebastian.pop@amd.com>
* graphite-poly.c (print_scop): Fix pretty printing of a SCoP.
2009-10-15 Sebastian Pop <sebastian.pop@amd.com>
......
......@@ -242,8 +242,9 @@ lst_do_strip_mine (lst_p lst)
for (i = 0; VEC_iterate (lst_p, LST_SEQ (lst), i, l); i++)
res |= lst_do_strip_mine (l);
if (pbb_strip_mine_profitable_p (LST_PBB (lst_find_first_pbb (lst)),
lst_depth (lst), stride))
if (lst_depth (lst) >= 0
&& pbb_strip_mine_profitable_p (LST_PBB (lst_find_first_pbb (lst)),
lst_depth (lst), stride))
{
res |= lst_do_strip_mine_loop (lst, lst_depth (lst));
lst_add_loop_under_loop (lst);
......
......@@ -539,8 +539,9 @@ lst_do_interchange (scop_p scop, lst_p lst)
lst_p l;
bool res = false;
for (i = 0; VEC_iterate (lst_p, LST_SEQ (lst), i, l); i++)
res |= lst_try_interchange (scop, lst, l);
if (lst_depth (lst) >= 0)
for (i = 0; VEC_iterate (lst_p, LST_SEQ (lst), i, l); i++)
res |= lst_try_interchange (scop, lst, l);
for (i = 0; VEC_iterate (lst_p, LST_SEQ (lst), i, l); i++)
res |= lst_do_interchange (scop, l);
......
......@@ -869,12 +869,27 @@ loop_to_lst (loop_p loop, VEC (poly_bb_p, heap) *bbs, int *i)
void
scop_to_lst (scop_p scop)
{
poly_bb_p pbb = VEC_index (poly_bb_p, SCOP_BBS (scop), 0);
loop_p loop = outermost_loop_in_sese (SCOP_REGION (scop), GBB_BB (PBB_BLACK_BOX (pbb)));
int i = 0;
lst_p res;
int i, n = VEC_length (poly_bb_p, SCOP_BBS (scop));
VEC (lst_p, heap) *seq = VEC_alloc (lst_p, heap, 5);
sese region = SCOP_REGION (scop);
for (i = 0; i < n; i++)
{
poly_bb_p pbb = VEC_index (poly_bb_p, 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);
VEC_safe_push (lst_p, heap, seq, res);
}
SCOP_ORIGINAL_SCHEDULE (scop) = loop_to_lst (loop, SCOP_BBS (scop), &i);
SCOP_TRANSFORMED_SCHEDULE (scop) = copy_lst (SCOP_ORIGINAL_SCHEDULE (scop));
res = new_lst_loop (seq);
SCOP_ORIGINAL_SCHEDULE (scop) = res;
SCOP_TRANSFORMED_SCHEDULE (scop) = copy_lst (res);
}
/* Print LST to FILE with INDENT spaces of indentation. */
......@@ -892,7 +907,10 @@ print_lst (FILE *file, lst_p lst, int indent)
int i;
lst_p l;
fprintf (file, "%d (loop", lst_dewey_number (lst));
if (LST_LOOP_FATHER (lst))
fprintf (file, "%d (loop", lst_dewey_number (lst));
else
fprintf (file, "(root");
for (i = 0; VEC_iterate (lst_p, LST_SEQ (lst), i, l); i++)
print_lst (file, l, indent + 2);
......
......@@ -714,6 +714,12 @@ 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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment