Home | History | Annotate | Line # | Download | only in dist
      1 #ifndef ISL_SCHEDULE_BAND_H
      2 #define ISL_SCHEDULE_BAND_H
      3 
      4 #include <isl/aff.h>
      5 #include <isl/ast_type.h>
      6 #include <isl/union_map.h>
      7 
      8 /* Information about a band within a schedule.
      9  *
     10  * n is the number of scheduling dimensions within the band.
     11  * coincident is an array of length n, indicating whether a scheduling dimension
     12  *	satisfies the coincidence constraints in the sense that
     13  *	the corresponding dependence distances are zero.
     14  * permutable is set if the band is permutable.
     15  * mupa is the partial schedule corresponding to this band.  The dimension
     16  *	of mupa is equal to n.
     17  * loop_type contains the loop AST generation types for the members
     18  * in the band.  It may be NULL, if all members are
     19  * of type isl_ast_loop_default.
     20  * isolate_loop_type contains the loop AST generation types for the members
     21  * in the band for the isolated part.  It may be NULL, if all members are
     22  * of type isl_ast_loop_default.
     23  * ast_build_options are the remaining AST build options associated
     24  * to the band.
     25  * anchored is set if the node depends on its position in the schedule tree.
     26  *	In particular, it is set if the AST build options include
     27  *	an isolate option.
     28  */
     29 struct isl_schedule_band {
     30 	int ref;
     31 
     32 	int n;
     33 	int *coincident;
     34 	int permutable;
     35 
     36 	isl_multi_union_pw_aff *mupa;
     37 
     38 	int anchored;
     39 	isl_union_set *ast_build_options;
     40 	enum isl_ast_loop_type *loop_type;
     41 	enum isl_ast_loop_type *isolate_loop_type;
     42 };
     43 typedef struct isl_schedule_band isl_schedule_band;
     44 
     45 __isl_give isl_schedule_band *isl_schedule_band_from_multi_union_pw_aff(
     46 	__isl_take isl_multi_union_pw_aff *mupa);
     47 __isl_give isl_schedule_band *isl_schedule_band_copy(
     48 	__isl_keep isl_schedule_band *band);
     49 __isl_null isl_schedule_band *isl_schedule_band_free(
     50 	__isl_take isl_schedule_band *band);
     51 
     52 isl_ctx *isl_schedule_band_get_ctx(__isl_keep isl_schedule_band *band);
     53 
     54 isl_bool isl_schedule_band_plain_is_equal(__isl_keep isl_schedule_band *band1,
     55 	__isl_keep isl_schedule_band *band2);
     56 
     57 int isl_schedule_band_is_anchored(__isl_keep isl_schedule_band *band);
     58 
     59 __isl_give isl_space *isl_schedule_band_get_space(
     60 	__isl_keep isl_schedule_band *band);
     61 __isl_give isl_schedule_band *isl_schedule_band_intersect_domain(
     62 	__isl_take isl_schedule_band *band, __isl_take isl_union_set *domain);
     63 __isl_give isl_multi_union_pw_aff *isl_schedule_band_get_partial_schedule(
     64 	__isl_keep isl_schedule_band *band);
     65 __isl_give isl_schedule_band *isl_schedule_band_set_partial_schedule(
     66 	__isl_take isl_schedule_band *band,
     67 	__isl_take isl_multi_union_pw_aff *schedule);
     68 enum isl_ast_loop_type isl_schedule_band_member_get_ast_loop_type(
     69 	__isl_keep isl_schedule_band *band, int pos);
     70 __isl_give isl_schedule_band *isl_schedule_band_member_set_ast_loop_type(
     71 	__isl_take isl_schedule_band *band, int pos,
     72 	enum isl_ast_loop_type type);
     73 enum isl_ast_loop_type isl_schedule_band_member_get_isolate_ast_loop_type(
     74 	__isl_keep isl_schedule_band *band, int pos);
     75 __isl_give isl_schedule_band *
     76 isl_schedule_band_member_set_isolate_ast_loop_type(
     77 	__isl_take isl_schedule_band *band, int pos,
     78 	enum isl_ast_loop_type type);
     79 __isl_give isl_union_set *isl_schedule_band_get_ast_build_options(
     80 	__isl_keep isl_schedule_band *band);
     81 __isl_give isl_schedule_band *isl_schedule_band_set_ast_build_options(
     82 	__isl_take isl_schedule_band *band, __isl_take isl_union_set *options);
     83 __isl_give isl_set *isl_schedule_band_get_ast_isolate_option(
     84 	__isl_keep isl_schedule_band *band, int depth);
     85 __isl_give isl_schedule_band *isl_schedule_band_replace_ast_build_option(
     86 	__isl_take isl_schedule_band *band, __isl_take isl_set *drop,
     87 	__isl_take isl_set *add);
     88 
     89 isl_size isl_schedule_band_n_member(__isl_keep isl_schedule_band *band);
     90 isl_bool isl_schedule_band_member_get_coincident(
     91 	__isl_keep isl_schedule_band *band, int pos);
     92 __isl_give isl_schedule_band *isl_schedule_band_member_set_coincident(
     93 	__isl_take isl_schedule_band *band, int pos, int coincident);
     94 isl_bool isl_schedule_band_get_permutable(__isl_keep isl_schedule_band *band);
     95 __isl_give isl_schedule_band *isl_schedule_band_set_permutable(
     96 	__isl_take isl_schedule_band *band, int permutable);
     97 
     98 __isl_give isl_schedule_band *isl_schedule_band_scale(
     99 	__isl_take isl_schedule_band *band, __isl_take isl_multi_val *mv);
    100 __isl_give isl_schedule_band *isl_schedule_band_scale_down(
    101 	__isl_take isl_schedule_band *band, __isl_take isl_multi_val *mv);
    102 __isl_give isl_schedule_band *isl_schedule_band_mod(
    103 	__isl_take isl_schedule_band *band, __isl_take isl_multi_val *mv);
    104 __isl_give isl_schedule_band *isl_schedule_band_tile(
    105 	__isl_take isl_schedule_band *band, __isl_take isl_multi_val *sizes);
    106 __isl_give isl_schedule_band *isl_schedule_band_point(
    107 	__isl_take isl_schedule_band *band, __isl_keep isl_schedule_band *tile,
    108 	__isl_take isl_multi_val *sizes);
    109 __isl_give isl_schedule_band *isl_schedule_band_shift(
    110 	__isl_take isl_schedule_band *band,
    111 	__isl_take isl_multi_union_pw_aff *shift);
    112 __isl_give isl_schedule_band *isl_schedule_band_drop(
    113 	__isl_take isl_schedule_band *band, int pos, int n);
    114 __isl_give isl_schedule_band *isl_schedule_band_gist(
    115 	__isl_take isl_schedule_band *band, __isl_take isl_union_set *context);
    116 
    117 __isl_give isl_schedule_band *isl_schedule_band_reset_user(
    118 	__isl_take isl_schedule_band *band);
    119 __isl_give isl_schedule_band *isl_schedule_band_align_params(
    120 	__isl_take isl_schedule_band *band, __isl_take isl_space *space);
    121 __isl_give isl_schedule_band *isl_schedule_band_pullback_union_pw_multi_aff(
    122 	__isl_take isl_schedule_band *band,
    123 	__isl_take isl_union_pw_multi_aff *upma);
    124 
    125 #endif
    126