Mercurial > hg > CbC > CbC_gcc
diff gcc/graphite-poly.h @ 67:f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Mar 2011 17:18:12 +0900 |
parents | b7f97abdc517 |
children |
line wrap: on
line diff
--- a/gcc/graphite-poly.h Tue May 25 18:58:51 2010 +0900 +++ b/gcc/graphite-poly.h Tue Mar 22 17:18:12 2011 +0900 @@ -132,7 +132,54 @@ dimensions. | i j k a 1 - | 0 0 0 -1 15 = 0 */ + | 0 0 0 -1 15 = 0 + + The difference between the graphite internal format for access data and + the OpenSop format is in the order of columns. + Instead of having: + + | i j k a s0 s1 1 + | 0 0 0 1 0 0 -5 = 0 + |-1 0 0 0 1 0 0 = 0 + | 0 -1 -1 0 0 1 0 = 0 + | 0 0 0 0 1 0 0 >= 0 # The last four lines describe the + | 0 0 0 0 0 1 0 >= 0 # array size. + | 0 0 0 0 -1 0 1335 >= 0 + | 0 0 0 0 0 -1 123 >= 0 + + In OpenScop we have: + + | a s0 s1 i j k 1 + | 1 0 0 0 0 0 -5 = 0 + | 0 1 0 -1 0 0 0 = 0 + | 0 0 1 0 -1 -1 0 = 0 + | 0 1 0 0 0 0 0 >= 0 # The last four lines describe the + | 0 0 1 0 0 0 0 >= 0 # array size. + | 0 -1 0 0 0 0 1335 >= 0 + | 0 0 -1 0 0 0 123 >= 0 + + The OpenScop access function is printed as follows: + + | 1 # The number of disjunct components in a union of access functions. + | R C O I L P # Described bellow. + | a s0 s1 i j k 1 + | 1 0 0 0 0 0 -5 = 0 + | 0 1 0 -1 0 0 0 = 0 + | 0 0 1 0 -1 -1 0 = 0 + | 0 1 0 0 0 0 0 >= 0 # The last four lines describe the + | 0 0 1 0 0 0 0 >= 0 # array size. + | 0 -1 0 0 0 0 1335 >= 0 + | 0 0 -1 0 0 0 123 >= 0 + + Where: + - R: Number of rows. + - C: Number of columns. + - O: Number of output dimensions = alias set + number of subscripts. + - I: Number of input dimensions (iterators). + - L: Number of local (existentially quantified) dimensions. + - P: Number of parameters. + + In the example, the vector "R C O I L P" is "7 7 3 2 0 1". */ ppl_Pointset_Powerset_C_Polyhedron_t accesses; /* Data reference's base object set number, we must assure 2 pdrs are in the @@ -254,8 +301,7 @@ static inline bool same_pdr_p (poly_dr_p pdr1, poly_dr_p pdr2) { - return PDR_TYPE (pdr1) == PDR_TYPE (pdr2) - && PDR_NB_SUBSCRIPTS (pdr1) == PDR_NB_SUBSCRIPTS (pdr2) + return PDR_NB_SUBSCRIPTS (pdr1) == PDR_NB_SUBSCRIPTS (pdr2) && PDR_BASE_OBJECT_SET (pdr1) == PDR_BASE_OBJECT_SET (pdr2); } @@ -342,7 +388,7 @@ #define PBB_PDR_DUPLICATES_REMOVED(PBB) (PBB->pdr_duplicates_removed) #define PBB_IS_REDUCTION(PBB) (PBB->is_reduction) -extern void new_poly_bb (scop_p, void *, bool); +extern poly_bb_p new_poly_bb (scop_p, void *); extern void free_poly_bb (poly_bb_p); extern void debug_loop_vec (poly_bb_p); extern void schedule_to_scattering (poly_bb_p, int); @@ -365,9 +411,9 @@ extern void debug_iteration_domain (poly_bb_p, int); extern void debug_iteration_domains (scop_p, int); extern bool scop_do_interchange (scop_p); -extern bool scop_do_strip_mine (scop_p); +extern bool scop_do_strip_mine (scop_p, int); extern bool scop_do_block (scop_p); -extern void pbb_number_of_iterations (poly_bb_p, graphite_dim_t, mpz_t); +extern bool flatten_all_loops (scop_p); extern void pbb_number_of_iterations_at_time (poly_bb_p, graphite_dim_t, mpz_t); extern void pbb_remove_duplicate_pdrs (poly_bb_p); @@ -387,7 +433,24 @@ return res; } +/* Returns a gimple_bb from BB. */ + +static inline gimple_bb_p +gbb_from_bb (basic_block bb) +{ + return (gimple_bb_p) bb->aux; +} + +/* The poly_bb of the BB. */ + +static inline poly_bb_p +pbb_from_bb (basic_block bb) +{ + return GBB_PBB (gbb_from_bb (bb)); +} + /* The basic block of the PBB. */ + static inline basic_block pbb_bb (poly_bb_p pbb) { @@ -795,7 +858,7 @@ if (!LST_LOOP_FATHER (lst)) return 0; - for (i = 0; VEC_iterate (lst_p, LST_SEQ (LST_LOOP_FATHER (lst)), i, l); i++) + FOR_EACH_VEC_ELT (lst_p, LST_SEQ (LST_LOOP_FATHER (lst)), i, l) if (l == lst) return i; @@ -897,7 +960,7 @@ return loop; } -/* Return the first lst representing a PBB statement in LST. */ +/* Return the first LST representing a PBB statement in LST. */ static inline lst_p lst_find_first_pbb (lst_p lst) @@ -921,7 +984,7 @@ return NULL; } -/* Returns true when LST is a loop that does not contains +/* Returns true when LST is a loop that does not contain statements. */ static inline bool @@ -930,7 +993,7 @@ return !lst_find_first_pbb (lst); } -/* Return the last lst representing a PBB statement in LST. */ +/* Return the last LST representing a PBB statement in LST. */ static inline lst_p lst_find_last_pbb (lst_p lst) @@ -1014,6 +1077,39 @@ LST_LOOP_FATHER (lst) = NULL; } +/* Removes the loop LST and inline its body in the father loop. */ + +static inline void +lst_remove_loop_and_inline_stmts_in_loop_father (lst_p lst) +{ + lst_p l, father = LST_LOOP_FATHER (lst); + int i, dewey = lst_dewey_number (lst); + + gcc_assert (lst && father && dewey >= 0); + + VEC_ordered_remove (lst_p, LST_SEQ (father), dewey); + LST_LOOP_FATHER (lst) = NULL; + + FOR_EACH_VEC_ELT (lst_p, LST_SEQ (lst), i, l) + { + VEC_safe_insert (lst_p, heap, LST_SEQ (father), dewey + i, l); + LST_LOOP_FATHER (l) = father; + } +} + +/* Sets NITER to the upper bound approximation of the number of + iterations of loop LST. */ + +static inline void +lst_niter_for_loop (lst_p lst, mpz_t niter) +{ + int depth = lst_depth (lst); + poly_bb_p pbb = LST_PBB (lst_find_first_pbb (lst)); + + gcc_assert (LST_LOOP_P (lst)); + pbb_number_of_iterations_at_time (pbb, psct_dynamic_dim (pbb, depth), niter); +} + /* Updates the scattering of PBB to be at the DEWEY number in the loop at depth LEVEL. */ @@ -1059,24 +1155,6 @@ pbb_update_scattering (LST_PBB (lst), level, dewey); } -/* Updates the scattering of all the PBBs under LST and in sequence - with LST. */ - -static inline void -lst_update_scattering_seq (lst_p lst) -{ - int i; - lst_p l; - lst_p father = LST_LOOP_FATHER (lst); - int dewey = lst_dewey_number (lst); - int level = lst_depth (lst); - - gcc_assert (lst && father && dewey >= 0 && level >= 0); - - for (i = dewey; VEC_iterate (lst_p, LST_SEQ (father), i, l); i++) - lst_update_scattering_under (l, level, i); -} - /* Updates the all the scattering levels of all the PBBs under LST. */ @@ -1086,14 +1164,24 @@ int i; lst_p l; - if (!lst || !LST_LOOP_P (lst)) + if (!lst) return; if (LST_LOOP_FATHER (lst)) - lst_update_scattering_seq (lst); + { + lst_p father = LST_LOOP_FATHER (lst); + int dewey = lst_dewey_number (lst); + int level = lst_depth (lst); + + gcc_assert (lst && father && dewey >= 0 && level >= 0); - for (i = 0; VEC_iterate (lst_p, LST_SEQ (lst), i, l); i++) - lst_update_scattering (l); + for (i = dewey; VEC_iterate (lst_p, LST_SEQ (father), i, l); i++) + lst_update_scattering_under (l, level, i); + } + + if (LST_LOOP_P (lst)) + for (i = 0; VEC_iterate (lst_p, LST_SEQ (lst), i, l); i++) + lst_update_scattering (l); } /* Inserts LST1 before LST2 if BEFORE is true; inserts LST1 after LST2 @@ -1346,6 +1434,7 @@ extern int unify_scattering_dimensions (scop_p); extern bool apply_poly_transforms (scop_p); extern bool graphite_legal_transform (scop_p); +extern void cloog_checksum (scop_p); /* Set the region of SCOP to REGION. */