[Bug middle-end/39568] [graphite] Remove GBB_LOOPS
nemokingdom at gmail dot com
gcc-bugzilla@gcc.gnu.org
Mon Mar 30 11:31:00 GMT 2009
------- Comment #2 from nemokingdom at gmail dot com 2009-03-30 11:30 -------
I test with bootstrap enabled and success.
Here is the patch:
Index: sese.h
===================================================================
--- sese.h (revision 145190)
+++ sese.h (working copy)
@@ -341,54 +341,6 @@
CASE_LABEL_EXPR. */
VEC (gimple, heap) *conditions;
VEC (gimple, heap) *condition_cases;
-
- /* LOOPS contains for every column in the graphite domain the corresponding
- gimple loop. If there exists no corresponding gimple loop LOOPS contains
- NULL.
-
- Example:
-
- Original code:
-
- for (i = 0; i <= 20; i++)
- for (j = 5; j <= 10; j++)
- A
-
- Original domain:
-
- | i >= 0
- | i <= 20
- | j >= 0
- | j <= 10
-
- This is a two dimensional domain with "Loop i" represented in
- dimension 0, and "Loop j" represented in dimension 1. Original
- loops vector:
-
- | 0 1
- | Loop i Loop j
-
- After some changes (Exchange i and j, strip-mine i), the domain
- is:
-
- | i >= 0
- | i <= 20
- | j >= 0
- | j <= 10
- | ii <= i
- | ii + 1 >= i
- | ii <= 2k
- | ii >= 2k
-
- Iterator vector:
- | 0 1 2 3
- | Loop j NULL Loop i NULL
-
- Means the original loop i is now on dimension 2 of the domain and
- loop j in the original loop nest is now on dimension 0.
- Dimensions 1 and 3 represent the newly created loops. */
- VEC (loop_p, heap) *loops;
-
VEC (data_reference_p, heap) *data_refs;
htab_t cloog_iv_types;
} *gimple_bb_p;
@@ -397,10 +349,9 @@
#define GBB_DATA_REFS(GBB) GBB->data_refs
#define GBB_CONDITIONS(GBB) GBB->conditions
#define GBB_CONDITION_CASES(GBB) GBB->condition_cases
-#define GBB_LOOPS(GBB) (GBB->loops)
#define GBB_CLOOG_IV_TYPES(GBB) GBB->cloog_iv_types
-/* Return the loop that contains the basic block GBB. */
+/* Return the innermost loop that contains the basic block GBB. */
static inline struct loop *
gbb_loop (struct gimple_bb *gbb)
@@ -412,24 +363,26 @@
If there is no corresponding gimple loop, we return NULL. */
static inline loop_p
-gbb_loop_at_index (gimple_bb_p gbb, int index)
+gbb_loop_at_index (gimple_bb_p gbb, sese region, int index)
{
- return VEC_index (loop_p, GBB_LOOPS (gbb), index);
-}
+ loop_p loop = gbb_loop (gbb);
+ int depth = sese_loop_depth (region, loop);
-/* Returns the index of LOOP in the loop nest around GBB. */
+ while (--depth > index)
+ {
+ loop = loop_outer (loop);
+ }
+ gcc_assert (sese_contains_loop (region, loop));
+
+ return loop;
+}
+
+/* Returns the index of LOOP in the region, 0 based index */
static inline int
-gbb_loop_index (gimple_bb_p gbb, loop_p loop)
+gbb_loop_index (sese region, loop_p loop)
{
- int i;
- loop_p l;
-
- for (i = 0; VEC_iterate (loop_p, GBB_LOOPS (gbb), i, l); i++)
- if (loop == l)
- return i;
-
- gcc_unreachable();
+ return sese_loop_depth (region, loop) - 1;
}
/* The number of common loops in REGION for GBB1 and GBB2. */
Index: graphite-clast-to-gimple.c
===================================================================
--- graphite-clast-to-gimple.c (revision 145190)
+++ graphite-clast-to-gimple.c (working copy)
@@ -316,6 +316,7 @@
int index = 0;
CloogStatement *cs = user_stmt->statement;
poly_bb_p pbb = (poly_bb_p) cloog_statement_usr (cs);
+ sese region = SCOP_REGION (PBB_SCOP (pbb));
for (t = user_stmt->substitutions; t; t = t->next)
{
@@ -327,8 +328,8 @@
if (expr->type == expr_term
&& !term->var)
{
- loop_p loop = gbb_loop_at_index (PBB_BLACK_BOX (pbb), index);
- tree oldiv = oldiv_for_loop (SCOP_REGION (PBB_SCOP (pbb)), loop);
+ loop_p loop = gbb_loop_at_index (PBB_BLACK_BOX (pbb), region, index);
+ tree oldiv = oldiv_for_loop (region, loop);
tree type = oldiv ? TREE_TYPE (oldiv) : integer_type_node;
tree value = gmp_cst_to_tree (type, term->val);
loop_iv_stack_insert_constant (stack, index, value);
@@ -507,7 +508,8 @@
free (*slot);
new_name = loop_iv_stack_get_iv
- (ivstack, gbb_loop_index (PBB_BLACK_BOX (pbb), iv->loop));
+ (ivstack, gbb_loop_index (region, iv->loop));
+
*slot = new_rename_map_elt (old_name, new_name);
}
}
@@ -685,6 +687,7 @@
{
gimple_bb_p gbb = PBB_BLACK_BOX (pbb);
struct clast_stmt *t;
+ sese region = SCOP_REGION (PBB_SCOP (pbb));
int index = 0;
for (t = user_stmt->substitutions; t; t = t->next, index++)
@@ -703,8 +706,8 @@
if (!*slot)
{
- loop_p loop = gbb_loop_at_index (PBB_BLACK_BOX (pbb), index);
- tree oldiv = oldiv_for_loop (SCOP_REGION (PBB_SCOP (pbb)), loop);
+ loop_p loop = gbb_loop_at_index (PBB_BLACK_BOX (pbb), region, index);
+ tree oldiv = oldiv_for_loop (region, loop);
tree type = oldiv ? TREE_TYPE (oldiv) : integer_type_node;
*slot = new_ivtype_map_elt (tmp.cloog_iv, type);
}
Index: graphite-sese-to-poly.c
===================================================================
--- graphite-sese-to-poly.c (revision 145190)
+++ graphite-sese-to-poly.c (working copy)
@@ -115,7 +115,6 @@
GBB_CONDITIONS (gbb) = NULL;
GBB_CONDITION_CASES (gbb) = NULL;
GBB_CLOOG_IV_TYPES (gbb) = NULL;
- GBB_LOOPS (gbb) = NULL;
return gbb;
}
@@ -133,7 +132,6 @@
free_data_refs (GBB_DATA_REFS (gbb)); */
- VEC_free (loop_p, heap, GBB_LOOPS (gbb));
VEC_free (gimple, heap, GBB_CONDITIONS (gbb));
VEC_free (gimple, heap, GBB_CONDITION_CASES (gbb));
GBB_BB (gbb)->aux = 0;
@@ -451,36 +449,6 @@
ppl_delete_Linear_Expression (static_schedule);
}
-/* Build the LOOPS vector for all bbs in SCOP. */
-
-static void
-build_bb_loops (scop_p scop)
-{
- poly_bb_p pbb;
- int i;
-
- for (i = 0; VEC_iterate (poly_bb_p, SCOP_BBS (scop), i, pbb); i++)
- {
- loop_p loop;
- int depth;
- gimple_bb_p gbb = PBB_BLACK_BOX (pbb);
-
- loop = GBB_BB (gbb)->loop_father;
- depth = sese_loop_depth (SCOP_REGION (scop), loop);
-
- GBB_LOOPS (gbb) = VEC_alloc (loop_p, heap, 3);
- VEC_safe_grow_cleared (loop_p, heap, GBB_LOOPS (gbb), depth);
-
-
- while (sese_contains_loop (SCOP_REGION(scop), loop))
- {
- VEC_replace (loop_p, GBB_LOOPS (gbb), depth - 1, loop);
- loop = loop_outer (loop);
- depth--;
- }
- }
-}
-
/* Add the value K to the dimension D of the linear expression EXPR. */
static void
@@ -1266,7 +1234,6 @@
if (scop_contains_non_iv_scalar_phi_nodes (scop))
return false;
- build_bb_loops (scop);
build_sese_conditions (region);
find_scop_parameters (scop);
scop_set_nb_params (scop, sese_nb_params (region));
(In reply to comment #0)
> We create an LOOPS vector for every gimple_bb in a SCoP. This is not necessary.
>
> It is just used for the functions
> gbb_loop_index and gbb_loop_at_index
>
> As the order of the LOOPS vector never changes (all transformations are made
> using the scattering functions) it can be replaced in
> gbb_loop_index with a simple call to sese_loop_depth
> gbb_loop_at_index can be implemented in the style of sese_loop_depth.
>
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39568
More information about the Gcc-bugs
mailing list