138fd1498Szrj /* Graphite polyhedral representation. 238fd1498Szrj Copyright (C) 2009-2018 Free Software Foundation, Inc. 338fd1498Szrj Contributed by Sebastian Pop <sebastian.pop@amd.com> and 438fd1498Szrj Tobias Grosser <grosser@fim.uni-passau.de>. 538fd1498Szrj 638fd1498Szrj This file is part of GCC. 738fd1498Szrj 838fd1498Szrj GCC is free software; you can redistribute it and/or modify 938fd1498Szrj it under the terms of the GNU General Public License as published by 1038fd1498Szrj the Free Software Foundation; either version 3, or (at your option) 1138fd1498Szrj any later version. 1238fd1498Szrj 1338fd1498Szrj GCC is distributed in the hope that it will be useful, 1438fd1498Szrj but WITHOUT ANY WARRANTY; without even the implied warranty of 1538fd1498Szrj MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1638fd1498Szrj GNU General Public License for more details. 1738fd1498Szrj 1838fd1498Szrj You should have received a copy of the GNU General Public License 1938fd1498Szrj along with GCC; see the file COPYING3. If not see 2038fd1498Szrj <http://www.gnu.org/licenses/>. */ 2138fd1498Szrj 2238fd1498Szrj #ifndef GCC_GRAPHITE_POLY_H 2338fd1498Szrj #define GCC_GRAPHITE_POLY_H 2438fd1498Szrj 2538fd1498Szrj #include "sese.h" 2638fd1498Szrj #include <isl/options.h> 2738fd1498Szrj #include <isl/ctx.h> 2838fd1498Szrj #include <isl/val.h> 2938fd1498Szrj #include <isl/set.h> 3038fd1498Szrj #include <isl/union_set.h> 3138fd1498Szrj #include <isl/map.h> 3238fd1498Szrj #include <isl/union_map.h> 3338fd1498Szrj #include <isl/aff.h> 3438fd1498Szrj #include <isl/constraint.h> 3538fd1498Szrj #include <isl/flow.h> 3638fd1498Szrj #include <isl/ilp.h> 3738fd1498Szrj #include <isl/schedule.h> 3838fd1498Szrj #include <isl/ast_build.h> 3938fd1498Szrj #include <isl/schedule_node.h> 40*58e805e6Szrj #include <isl/id.h> 41*58e805e6Szrj #include <isl/space.h> 4238fd1498Szrj 4338fd1498Szrj typedef struct poly_dr *poly_dr_p; 4438fd1498Szrj 4538fd1498Szrj typedef struct poly_bb *poly_bb_p; 4638fd1498Szrj 4738fd1498Szrj typedef struct scop *scop_p; 4838fd1498Szrj 4938fd1498Szrj typedef unsigned graphite_dim_t; 5038fd1498Szrj 5138fd1498Szrj static inline graphite_dim_t scop_nb_params (scop_p); 5238fd1498Szrj 5338fd1498Szrj /* A data reference can write or read some memory or we 5438fd1498Szrj just know it may write some memory. */ 5538fd1498Szrj enum poly_dr_type 5638fd1498Szrj { 5738fd1498Szrj PDR_READ, 5838fd1498Szrj /* PDR_MAY_READs are represented using PDR_READS. This does not 5938fd1498Szrj limit the expressiveness. */ 6038fd1498Szrj PDR_WRITE, 6138fd1498Szrj PDR_MAY_WRITE 6238fd1498Szrj }; 6338fd1498Szrj 6438fd1498Szrj struct poly_dr 6538fd1498Szrj { 6638fd1498Szrj /* An identifier for this PDR. */ 6738fd1498Szrj int id; 6838fd1498Szrj 6938fd1498Szrj /* The number of data refs identical to this one in the PBB. */ 7038fd1498Szrj int nb_refs; 7138fd1498Szrj 7238fd1498Szrj /* A pointer to the gimple stmt containing this reference. */ 7338fd1498Szrj gimple *stmt; 7438fd1498Szrj 7538fd1498Szrj /* A pointer to the PBB that contains this data reference. */ 7638fd1498Szrj poly_bb_p pbb; 7738fd1498Szrj 7838fd1498Szrj enum poly_dr_type type; 7938fd1498Szrj 8038fd1498Szrj /* The access polyhedron contains the polyhedral space this data 8138fd1498Szrj reference will access. 8238fd1498Szrj 8338fd1498Szrj The polyhedron contains these dimensions: 8438fd1498Szrj 8538fd1498Szrj - The alias set (a): 8638fd1498Szrj Every memory access is classified in at least one alias set. 8738fd1498Szrj 8838fd1498Szrj - The subscripts (s_0, ..., s_n): 8938fd1498Szrj The memory is accessed using zero or more subscript dimensions. 9038fd1498Szrj 9138fd1498Szrj - The iteration domain (variables and parameters) 9238fd1498Szrj 9338fd1498Szrj Do not hardcode the dimensions. Use the following accessor functions: 9438fd1498Szrj - pdr_alias_set_dim 9538fd1498Szrj - pdr_subscript_dim 9638fd1498Szrj - pdr_iterator_dim 9738fd1498Szrj - pdr_parameter_dim 9838fd1498Szrj 9938fd1498Szrj Example: 10038fd1498Szrj 10138fd1498Szrj | int A[1335][123]; 10238fd1498Szrj | int *p = malloc (); 10338fd1498Szrj | 10438fd1498Szrj | k = ... 10538fd1498Szrj | for i 10638fd1498Szrj | { 10738fd1498Szrj | if (unknown_function ()) 10838fd1498Szrj | p = A; 10938fd1498Szrj | ... = p[?][?]; 11038fd1498Szrj | for j 11138fd1498Szrj | A[i][j+k] = m; 11238fd1498Szrj | } 11338fd1498Szrj 11438fd1498Szrj The data access A[i][j+k] in alias set "5" is described like this: 11538fd1498Szrj 11638fd1498Szrj | i j k a s0 s1 1 11738fd1498Szrj | 0 0 0 1 0 0 -5 = 0 11838fd1498Szrj |-1 0 0 0 1 0 0 = 0 11938fd1498Szrj | 0 -1 -1 0 0 1 0 = 0 12038fd1498Szrj | 0 0 0 0 1 0 0 >= 0 # The last four lines describe the 12138fd1498Szrj | 0 0 0 0 0 1 0 >= 0 # array size. 12238fd1498Szrj | 0 0 0 0 -1 0 1335 >= 0 12338fd1498Szrj | 0 0 0 0 0 -1 123 >= 0 12438fd1498Szrj 12538fd1498Szrj The pointer "*p" in alias set "5" and "7" is described as a union of 12638fd1498Szrj polyhedron: 12738fd1498Szrj 12838fd1498Szrj 12938fd1498Szrj | i k a s0 1 13038fd1498Szrj | 0 0 1 0 -5 = 0 13138fd1498Szrj | 0 0 0 1 0 >= 0 13238fd1498Szrj 13338fd1498Szrj "or" 13438fd1498Szrj 13538fd1498Szrj | i k a s0 1 13638fd1498Szrj | 0 0 1 0 -7 = 0 13738fd1498Szrj | 0 0 0 1 0 >= 0 13838fd1498Szrj 13938fd1498Szrj "*p" accesses all of the object allocated with 'malloc'. 14038fd1498Szrj 14138fd1498Szrj The scalar data access "m" is represented as an array with zero subscript 14238fd1498Szrj dimensions. 14338fd1498Szrj 14438fd1498Szrj | i j k a 1 14538fd1498Szrj | 0 0 0 -1 15 = 0 14638fd1498Szrj 14738fd1498Szrj The difference between the graphite internal format for access data and 14838fd1498Szrj the OpenSop format is in the order of columns. 14938fd1498Szrj Instead of having: 15038fd1498Szrj 15138fd1498Szrj | i j k a s0 s1 1 15238fd1498Szrj | 0 0 0 1 0 0 -5 = 0 15338fd1498Szrj |-1 0 0 0 1 0 0 = 0 15438fd1498Szrj | 0 -1 -1 0 0 1 0 = 0 15538fd1498Szrj | 0 0 0 0 1 0 0 >= 0 # The last four lines describe the 15638fd1498Szrj | 0 0 0 0 0 1 0 >= 0 # array size. 15738fd1498Szrj | 0 0 0 0 -1 0 1335 >= 0 15838fd1498Szrj | 0 0 0 0 0 -1 123 >= 0 15938fd1498Szrj 16038fd1498Szrj In OpenScop we have: 16138fd1498Szrj 16238fd1498Szrj | a s0 s1 i j k 1 16338fd1498Szrj | 1 0 0 0 0 0 -5 = 0 16438fd1498Szrj | 0 1 0 -1 0 0 0 = 0 16538fd1498Szrj | 0 0 1 0 -1 -1 0 = 0 16638fd1498Szrj | 0 1 0 0 0 0 0 >= 0 # The last four lines describe the 16738fd1498Szrj | 0 0 1 0 0 0 0 >= 0 # array size. 16838fd1498Szrj | 0 -1 0 0 0 0 1335 >= 0 16938fd1498Szrj | 0 0 -1 0 0 0 123 >= 0 17038fd1498Szrj 17138fd1498Szrj The OpenScop access function is printed as follows: 17238fd1498Szrj 17338fd1498Szrj | 1 # The number of disjunct components in a union of access functions. 17438fd1498Szrj | R C O I L P # Described bellow. 17538fd1498Szrj | a s0 s1 i j k 1 17638fd1498Szrj | 1 0 0 0 0 0 -5 = 0 17738fd1498Szrj | 0 1 0 -1 0 0 0 = 0 17838fd1498Szrj | 0 0 1 0 -1 -1 0 = 0 17938fd1498Szrj | 0 1 0 0 0 0 0 >= 0 # The last four lines describe the 18038fd1498Szrj | 0 0 1 0 0 0 0 >= 0 # array size. 18138fd1498Szrj | 0 -1 0 0 0 0 1335 >= 0 18238fd1498Szrj | 0 0 -1 0 0 0 123 >= 0 18338fd1498Szrj 18438fd1498Szrj Where: 18538fd1498Szrj - R: Number of rows. 18638fd1498Szrj - C: Number of columns. 18738fd1498Szrj - O: Number of output dimensions = alias set + number of subscripts. 18838fd1498Szrj - I: Number of input dimensions (iterators). 18938fd1498Szrj - L: Number of local (existentially quantified) dimensions. 19038fd1498Szrj - P: Number of parameters. 19138fd1498Szrj 19238fd1498Szrj In the example, the vector "R C O I L P" is "7 7 3 2 0 1". */ 19338fd1498Szrj isl_map *accesses; 19438fd1498Szrj isl_set *subscript_sizes; 19538fd1498Szrj }; 19638fd1498Szrj 19738fd1498Szrj #define PDR_ID(PDR) (PDR->id) 19838fd1498Szrj #define PDR_NB_REFS(PDR) (PDR->nb_refs) 19938fd1498Szrj #define PDR_PBB(PDR) (PDR->pbb) 20038fd1498Szrj #define PDR_TYPE(PDR) (PDR->type) 20138fd1498Szrj #define PDR_ACCESSES(PDR) (NULL) 20238fd1498Szrj 20338fd1498Szrj void new_poly_dr (poly_bb_p, gimple *, enum poly_dr_type, 20438fd1498Szrj isl_map *, isl_set *); 20538fd1498Szrj void debug_pdr (poly_dr_p); 20638fd1498Szrj void print_pdr (FILE *, poly_dr_p); 20738fd1498Szrj 20838fd1498Szrj static inline bool 20938fd1498Szrj pdr_read_p (poly_dr_p pdr) 21038fd1498Szrj { 21138fd1498Szrj return PDR_TYPE (pdr) == PDR_READ; 21238fd1498Szrj } 21338fd1498Szrj 21438fd1498Szrj /* Returns true when PDR is a "write". */ 21538fd1498Szrj 21638fd1498Szrj static inline bool 21738fd1498Szrj pdr_write_p (poly_dr_p pdr) 21838fd1498Szrj { 21938fd1498Szrj return PDR_TYPE (pdr) == PDR_WRITE; 22038fd1498Szrj } 22138fd1498Szrj 22238fd1498Szrj /* Returns true when PDR is a "may write". */ 22338fd1498Szrj 22438fd1498Szrj static inline bool 22538fd1498Szrj pdr_may_write_p (poly_dr_p pdr) 22638fd1498Szrj { 22738fd1498Szrj return PDR_TYPE (pdr) == PDR_MAY_WRITE; 22838fd1498Szrj } 22938fd1498Szrj 23038fd1498Szrj /* POLY_BB represents a blackbox in the polyhedral model. */ 23138fd1498Szrj 23238fd1498Szrj struct poly_bb 23338fd1498Szrj { 23438fd1498Szrj /* Pointer to a basic block or a statement in the compiler. */ 23538fd1498Szrj gimple_poly_bb_p black_box; 23638fd1498Szrj 23738fd1498Szrj /* Pointer to the SCOP containing this PBB. */ 23838fd1498Szrj scop_p scop; 23938fd1498Szrj 24038fd1498Szrj /* The iteration domain of this bb. The layout of this polyhedron 24138fd1498Szrj is I|G with I the iteration domain, G the context parameters. 24238fd1498Szrj 24338fd1498Szrj Example: 24438fd1498Szrj 24538fd1498Szrj for (i = a - 7*b + 8; i <= 3*a + 13*b + 20; i++) 24638fd1498Szrj for (j = 2; j <= 2*i + 5; j++) 24738fd1498Szrj for (k = 0; k <= 5; k++) 24838fd1498Szrj S (i,j,k) 24938fd1498Szrj 25038fd1498Szrj Loop iterators: i, j, k 25138fd1498Szrj Parameters: a, b 25238fd1498Szrj 25338fd1498Szrj | i >= a - 7b + 8 25438fd1498Szrj | i <= 3a + 13b + 20 25538fd1498Szrj | j >= 2 25638fd1498Szrj | j <= 2i + 5 25738fd1498Szrj | k >= 0 25838fd1498Szrj | k <= 5 25938fd1498Szrj 26038fd1498Szrj The number of variables in the DOMAIN may change and is not 26138fd1498Szrj related to the number of loops in the original code. */ 26238fd1498Szrj isl_set *domain; 26338fd1498Szrj isl_set *iterators; 26438fd1498Szrj 26538fd1498Szrj /* The data references we access. */ 26638fd1498Szrj vec<poly_dr_p> drs; 26738fd1498Szrj 26838fd1498Szrj /* The last basic block generated for this pbb. */ 26938fd1498Szrj basic_block new_bb; 27038fd1498Szrj }; 27138fd1498Szrj 27238fd1498Szrj #define PBB_BLACK_BOX(PBB) ((gimple_poly_bb_p) PBB->black_box) 27338fd1498Szrj #define PBB_SCOP(PBB) (PBB->scop) 27438fd1498Szrj #define PBB_DRS(PBB) (PBB->drs) 27538fd1498Szrj 27638fd1498Szrj extern poly_bb_p new_poly_bb (scop_p, gimple_poly_bb_p); 27738fd1498Szrj extern void print_pbb_domain (FILE *, poly_bb_p); 27838fd1498Szrj extern void print_pbb (FILE *, poly_bb_p); 27938fd1498Szrj extern void print_scop_context (FILE *, scop_p); 28038fd1498Szrj extern void print_scop (FILE *, scop_p); 28138fd1498Szrj extern void debug_pbb_domain (poly_bb_p); 28238fd1498Szrj extern void debug_pbb (poly_bb_p); 28338fd1498Szrj extern void print_pdrs (FILE *, poly_bb_p); 28438fd1498Szrj extern void debug_pdrs (poly_bb_p); 28538fd1498Szrj extern void debug_scop_context (scop_p); 28638fd1498Szrj extern void debug_scop (scop_p); 28738fd1498Szrj extern void print_scop_params (FILE *, scop_p); 28838fd1498Szrj extern void debug_scop_params (scop_p); 28938fd1498Szrj extern void print_iteration_domain (FILE *, poly_bb_p); 29038fd1498Szrj extern void print_iteration_domains (FILE *, scop_p); 29138fd1498Szrj extern void debug_iteration_domain (poly_bb_p); 29238fd1498Szrj extern void debug_iteration_domains (scop_p); 29338fd1498Szrj extern void print_isl_set (FILE *, isl_set *); 29438fd1498Szrj extern void print_isl_map (FILE *, isl_map *); 29538fd1498Szrj extern void print_isl_union_map (FILE *, isl_union_map *); 29638fd1498Szrj extern void print_isl_aff (FILE *, isl_aff *); 29738fd1498Szrj extern void print_isl_constraint (FILE *, isl_constraint *); 29838fd1498Szrj extern void print_isl_schedule (FILE *, isl_schedule *); 29938fd1498Szrj extern void debug_isl_schedule (isl_schedule *); 30038fd1498Szrj extern void print_isl_ast (FILE *, isl_ast_node *); 30138fd1498Szrj extern void debug_isl_ast (isl_ast_node *); 30238fd1498Szrj extern void debug_isl_set (isl_set *); 30338fd1498Szrj extern void debug_isl_map (isl_map *); 30438fd1498Szrj extern void debug_isl_union_map (isl_union_map *); 30538fd1498Szrj extern void debug_isl_aff (isl_aff *); 30638fd1498Szrj extern void debug_isl_constraint (isl_constraint *); 30738fd1498Szrj extern void debug_gmp_value (mpz_t); 30838fd1498Szrj extern void debug_scop_pbb (scop_p scop, int i); 30938fd1498Szrj extern void print_schedule_ast (FILE *, __isl_keep isl_schedule *, scop_p); 31038fd1498Szrj extern void debug_schedule_ast (__isl_keep isl_schedule *, scop_p); 31138fd1498Szrj 31238fd1498Szrj /* The basic block of the PBB. */ 31338fd1498Szrj 31438fd1498Szrj static inline basic_block 31538fd1498Szrj pbb_bb (poly_bb_p pbb) 31638fd1498Szrj { 31738fd1498Szrj return GBB_BB (PBB_BLACK_BOX (pbb)); 31838fd1498Szrj } 31938fd1498Szrj 32038fd1498Szrj static inline int 32138fd1498Szrj pbb_index (poly_bb_p pbb) 32238fd1498Szrj { 32338fd1498Szrj return pbb_bb (pbb)->index; 32438fd1498Szrj } 32538fd1498Szrj 32638fd1498Szrj /* The loop of the PBB. */ 32738fd1498Szrj 32838fd1498Szrj static inline loop_p 32938fd1498Szrj pbb_loop (poly_bb_p pbb) 33038fd1498Szrj { 33138fd1498Szrj return gbb_loop (PBB_BLACK_BOX (pbb)); 33238fd1498Szrj } 33338fd1498Szrj 33438fd1498Szrj /* The scop that contains the PDR. */ 33538fd1498Szrj 33638fd1498Szrj static inline scop_p 33738fd1498Szrj pdr_scop (poly_dr_p pdr) 33838fd1498Szrj { 33938fd1498Szrj return PBB_SCOP (PDR_PBB (pdr)); 34038fd1498Szrj } 34138fd1498Szrj 34238fd1498Szrj /* Set black box of PBB to BLACKBOX. */ 34338fd1498Szrj 34438fd1498Szrj static inline void 34538fd1498Szrj pbb_set_black_box (poly_bb_p pbb, gimple_poly_bb_p black_box) 34638fd1498Szrj { 34738fd1498Szrj pbb->black_box = black_box; 34838fd1498Szrj } 34938fd1498Szrj 35038fd1498Szrj /* A helper structure to keep track of data references, polyhedral BBs, and 35138fd1498Szrj alias sets. */ 35238fd1498Szrj 35338fd1498Szrj struct dr_info 35438fd1498Szrj { 35538fd1498Szrj enum { 35638fd1498Szrj invalid_alias_set = -1 35738fd1498Szrj }; 35838fd1498Szrj /* The data reference. */ 35938fd1498Szrj data_reference_p dr; 36038fd1498Szrj 36138fd1498Szrj /* The polyhedral BB containing this DR. */ 36238fd1498Szrj poly_bb_p pbb; 36338fd1498Szrj 36438fd1498Szrj /* ALIAS_SET is the SCC number assigned by a graph_dfs of the alias graph. 36538fd1498Szrj -1 is an invalid alias set. */ 36638fd1498Szrj int alias_set; 36738fd1498Szrj 36838fd1498Szrj /* Construct a DR_INFO from a data reference DR, an ALIAS_SET, and a PBB. */ 36938fd1498Szrj dr_info (data_reference_p dr, poly_bb_p pbb, 37038fd1498Szrj int alias_set = invalid_alias_set) 37138fd1498Szrj : dr (dr), pbb (pbb), alias_set (alias_set) {} 37238fd1498Szrj }; 37338fd1498Szrj 37438fd1498Szrj /* A SCOP is a Static Control Part of the program, simple enough to be 37538fd1498Szrj represented in polyhedral form. */ 37638fd1498Szrj struct scop 37738fd1498Szrj { 37838fd1498Szrj /* A SCOP is defined as a SESE region. */ 37938fd1498Szrj sese_info_p scop_info; 38038fd1498Szrj 38138fd1498Szrj /* Number of parameters in SCoP. */ 38238fd1498Szrj graphite_dim_t nb_params; 38338fd1498Szrj 38438fd1498Szrj /* The maximum alias set as assigned to drs by build_alias_sets. */ 38538fd1498Szrj unsigned max_alias_set; 38638fd1498Szrj 38738fd1498Szrj /* All the basic blocks in this scop that contain memory references 38838fd1498Szrj and that will be represented as statements in the polyhedral 38938fd1498Szrj representation. */ 39038fd1498Szrj vec<poly_bb_p> pbbs; 39138fd1498Szrj 39238fd1498Szrj /* All the data references in this scop. */ 39338fd1498Szrj vec<dr_info> drs; 39438fd1498Szrj 39538fd1498Szrj /* The context describes known restrictions concerning the parameters 39638fd1498Szrj and relations in between the parameters. 39738fd1498Szrj 39838fd1498Szrj void f (int8_t a, uint_16_t b) { 39938fd1498Szrj c = 2 a + b; 40038fd1498Szrj ... 40138fd1498Szrj } 40238fd1498Szrj 40338fd1498Szrj Here we can add these restrictions to the context: 40438fd1498Szrj 40538fd1498Szrj -128 >= a >= 127 40638fd1498Szrj 0 >= b >= 65,535 40738fd1498Szrj c = 2a + b */ 40838fd1498Szrj isl_set *param_context; 40938fd1498Szrj 41038fd1498Szrj /* The context used internally by isl. */ 41138fd1498Szrj isl_ctx *isl_context; 41238fd1498Szrj 41338fd1498Szrj /* SCoP original schedule. */ 41438fd1498Szrj isl_schedule *original_schedule; 41538fd1498Szrj 41638fd1498Szrj /* SCoP transformed schedule. */ 41738fd1498Szrj isl_schedule *transformed_schedule; 41838fd1498Szrj 41938fd1498Szrj /* The data dependence relation among the data references in this scop. */ 42038fd1498Szrj isl_union_map *dependence; 42138fd1498Szrj }; 42238fd1498Szrj 42338fd1498Szrj extern scop_p new_scop (edge, edge); 42438fd1498Szrj extern void free_scop (scop_p); 42538fd1498Szrj extern gimple_poly_bb_p new_gimple_poly_bb (basic_block, vec<data_reference_p>, 42638fd1498Szrj vec<scalar_use>, vec<tree>); 42738fd1498Szrj extern bool apply_poly_transforms (scop_p); 42838fd1498Szrj 42938fd1498Szrj /* Set the region of SCOP to REGION. */ 43038fd1498Szrj 43138fd1498Szrj static inline void 43238fd1498Szrj scop_set_region (scop_p scop, sese_info_p region) 43338fd1498Szrj { 43438fd1498Szrj scop->scop_info = region; 43538fd1498Szrj } 43638fd1498Szrj 43738fd1498Szrj /* Returns the number of parameters for SCOP. */ 43838fd1498Szrj 43938fd1498Szrj static inline graphite_dim_t 44038fd1498Szrj scop_nb_params (scop_p scop) 44138fd1498Szrj { 44238fd1498Szrj return scop->nb_params; 44338fd1498Szrj } 44438fd1498Szrj 44538fd1498Szrj /* Set the number of params of SCOP to NB_PARAMS. */ 44638fd1498Szrj 44738fd1498Szrj static inline void 44838fd1498Szrj scop_set_nb_params (scop_p scop, graphite_dim_t nb_params) 44938fd1498Szrj { 45038fd1498Szrj scop->nb_params = nb_params; 45138fd1498Szrj } 45238fd1498Szrj 45338fd1498Szrj extern void scop_get_dependences (scop_p scop); 45438fd1498Szrj 45538fd1498Szrj bool 45638fd1498Szrj carries_deps (__isl_keep isl_union_map *schedule, 45738fd1498Szrj __isl_keep isl_union_map *deps, 45838fd1498Szrj int depth); 45938fd1498Szrj 46038fd1498Szrj extern bool build_poly_scop (scop_p); 46138fd1498Szrj extern bool graphite_regenerate_ast_isl (scop_p); 46238fd1498Szrj extern void build_scops (vec<scop_p> *); 46338fd1498Szrj extern void dot_all_sese (FILE *, vec<sese_l> &); 46438fd1498Szrj extern void dot_sese (sese_l &); 46538fd1498Szrj extern void dot_cfg (); 46638fd1498Szrj 46738fd1498Szrj #endif 468