Home | History | Annotate | Line # | Download | only in dist
      1 #ifndef ISL_AFF_PRIVATE_H
      2 #define ISL_AFF_PRIVATE_H
      3 
      4 #include <isl/aff.h>
      5 #include <isl/vec.h>
      6 #include <isl/mat.h>
      7 #include <isl/local_space.h>
      8 #include <isl_int.h>
      9 #include <isl_reordering.h>
     10 #include <isl/stream.h>
     11 
     12 /* ls represents the domain space.
     13  *
     14  * If the first two elements of "v" (the denominator and the constant term)
     15  * are zero, then the isl_aff represents NaN.
     16  */
     17 struct isl_aff {
     18 	int ref;
     19 
     20 	isl_local_space	*ls;
     21 	isl_vec		*v;
     22 };
     23 
     24 #undef EL
     25 #define EL isl_aff
     26 
     27 #include <isl_list_templ.h>
     28 
     29 struct isl_pw_aff_piece {
     30 	struct isl_set *set;
     31 	struct isl_aff *aff;
     32 };
     33 
     34 struct isl_pw_aff {
     35 	int ref;
     36 
     37 	isl_space *dim;
     38 
     39 	int n;
     40 
     41 	size_t size;
     42 	struct isl_pw_aff_piece p[1];
     43 };
     44 
     45 #undef PW
     46 #define PW isl_pw_aff
     47 
     48 #include <isl_pw_templ.h>
     49 
     50 #undef EL
     51 #define EL isl_pw_aff
     52 
     53 #include <isl_list_templ.h>
     54 
     55 struct isl_pw_multi_aff_piece {
     56 	isl_set *set;
     57 	isl_multi_aff *maff;
     58 };
     59 
     60 struct isl_pw_multi_aff {
     61 	int ref;
     62 
     63 	isl_space *dim;
     64 
     65 	int n;
     66 
     67 	size_t size;
     68 	struct isl_pw_multi_aff_piece p[1];
     69 };
     70 
     71 #undef PW
     72 #define PW isl_pw_multi_aff
     73 
     74 #include <isl_pw_templ.h>
     75 
     76 __isl_give isl_aff *isl_aff_alloc_vec(__isl_take isl_local_space *ls,
     77 	__isl_take isl_vec *v);
     78 __isl_give isl_aff *isl_aff_alloc(__isl_take isl_local_space *ls);
     79 
     80 isl_size isl_aff_domain_dim(__isl_keep isl_aff *aff, enum isl_dim_type type);
     81 isl_size isl_aff_domain_offset(__isl_keep isl_aff *aff, enum isl_dim_type type);
     82 
     83 __isl_give isl_aff *isl_aff_reset_space_and_domain(__isl_take isl_aff *aff,
     84 	__isl_take isl_space *space, __isl_take isl_space *domain);
     85 __isl_give isl_aff *isl_aff_reset_domain_space(__isl_take isl_aff *aff,
     86 	__isl_take isl_space *space);
     87 __isl_give isl_aff *isl_aff_realign_domain(__isl_take isl_aff *aff,
     88 	__isl_take isl_reordering *r);
     89 
     90 __isl_give isl_aff *isl_aff_set_constant(__isl_take isl_aff *aff, isl_int v);
     91 __isl_give isl_aff *isl_aff_set_coefficient(__isl_take isl_aff *aff,
     92 	enum isl_dim_type type, int pos, isl_int v);
     93 __isl_give isl_aff *isl_aff_add_constant(__isl_take isl_aff *aff, isl_int v);
     94 
     95 __isl_give isl_aff *isl_aff_domain_factor_domain(__isl_take isl_aff *aff);
     96 
     97 int isl_aff_plain_cmp(__isl_keep isl_aff *aff1, __isl_keep isl_aff *aff2);
     98 
     99 __isl_give isl_aff *isl_aff_remove_unused_divs(__isl_take isl_aff *aff);
    100 __isl_give isl_aff *isl_aff_normalize(__isl_take isl_aff *aff);
    101 
    102 __isl_give isl_aff *isl_aff_expand_divs( __isl_take isl_aff *aff,
    103 	__isl_take isl_mat *div, int *exp);
    104 
    105 __isl_give isl_aff *isl_stream_read_aff(__isl_keep isl_stream *s);
    106 
    107 __isl_give isl_pw_aff *isl_pw_aff_alloc_size(__isl_take isl_space *space,
    108 	int n);
    109 __isl_give isl_pw_aff *isl_pw_aff_reset_space(__isl_take isl_pw_aff *pwaff,
    110 	__isl_take isl_space *space);
    111 __isl_give isl_pw_aff *isl_pw_aff_reset_domain_space(
    112 	__isl_take isl_pw_aff *pwaff, __isl_take isl_space *space);
    113 __isl_give isl_pw_aff *isl_pw_aff_add_disjoint(
    114 	__isl_take isl_pw_aff *pwaff1, __isl_take isl_pw_aff *pwaff2);
    115 
    116 __isl_keep isl_aff *isl_pw_aff_peek_base_at(__isl_keep isl_pw_aff *pa, int pos);
    117 
    118 __isl_give isl_pw_aff *isl_pw_aff_domain_factor_domain(
    119 	__isl_take isl_pw_aff *pa);
    120 
    121 __isl_give isl_pw_aff *isl_pw_aff_union_opt(__isl_take isl_pw_aff *pwaff1,
    122 	__isl_take isl_pw_aff *pwaff2, int max);
    123 
    124 __isl_give isl_pw_aff *isl_pw_aff_set_rational(__isl_take isl_pw_aff *pwaff);
    125 __isl_give isl_pw_aff_list *isl_pw_aff_list_set_rational(
    126 	__isl_take isl_pw_aff_list *list);
    127 
    128 __isl_give isl_aff *isl_aff_scale_down(__isl_take isl_aff *aff, isl_int f);
    129 __isl_give isl_pw_aff *isl_pw_aff_scale(__isl_take isl_pw_aff *pwaff,
    130 	isl_int f);
    131 __isl_give isl_pw_aff *isl_pw_aff_scale_down(__isl_take isl_pw_aff *pwaff,
    132 	isl_int f);
    133 
    134 __isl_give isl_pw_aff *isl_stream_read_pw_aff(__isl_keep isl_stream *s);
    135 
    136 isl_bool isl_aff_matching_params(__isl_keep isl_aff *aff,
    137 	__isl_keep isl_space *space);
    138 isl_stat isl_aff_check_match_domain_space(__isl_keep isl_aff *aff,
    139 	__isl_keep isl_space *space);
    140 
    141 #undef BASE
    142 #define BASE aff
    143 
    144 #include <isl_multi_templ.h>
    145 
    146 __isl_give isl_multi_aff *isl_multi_aff_dup(__isl_keep isl_multi_aff *multi);
    147 
    148 __isl_give isl_multi_aff *isl_multi_aff_align_divs(
    149 	__isl_take isl_multi_aff *maff);
    150 
    151 __isl_give isl_multi_aff *isl_multi_aff_from_basic_set_equalities(
    152 	__isl_take isl_basic_set *bset);
    153 
    154 __isl_give isl_multi_aff *isl_multi_aff_from_aff_mat(
    155 	__isl_take isl_space *space, __isl_take isl_mat *mat);
    156 
    157 #undef EL
    158 #define EL isl_pw_multi_aff
    159 
    160 #include <isl_list_templ.h>
    161 
    162 __isl_keep isl_multi_aff *isl_pw_multi_aff_peek_base_at(
    163 	__isl_keep isl_pw_multi_aff *pma, int pos);
    164 
    165 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_move_dims(
    166 	__isl_take isl_pw_multi_aff *pma,
    167 	enum isl_dim_type dst_type, unsigned dst_pos,
    168 	enum isl_dim_type src_type, unsigned src_pos, unsigned n);
    169 
    170 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_reset_domain_space(
    171 	__isl_take isl_pw_multi_aff *pwmaff, __isl_take isl_space *space);
    172 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_reset_space(
    173 	__isl_take isl_pw_multi_aff *pwmaff, __isl_take isl_space *space);
    174 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_add_disjoint(
    175 	__isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2);
    176 
    177 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_project_out(
    178 	__isl_take isl_pw_multi_aff *pma,
    179 	enum isl_dim_type type, unsigned first, unsigned n);
    180 
    181 isl_stat isl_seq_preimage(isl_int *dst, isl_int *src,
    182 	__isl_keep isl_multi_aff *ma, int n_before, int n_after,
    183 	int n_div_ma, int n_div_bmap,
    184 	isl_int f, isl_int c1, isl_int c2, isl_int g, int has_denom);
    185 
    186 __isl_give isl_aff *isl_aff_substitute_equalities(__isl_take isl_aff *aff,
    187 	__isl_take isl_basic_set *eq);
    188 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_substitute(
    189 	__isl_take isl_pw_multi_aff *pma, unsigned pos,
    190 	__isl_keep isl_pw_aff *subs);
    191 
    192 __isl_give isl_pw_multi_aff *isl_stream_read_pw_multi_aff(
    193 	__isl_keep isl_stream *s);
    194 
    195 __isl_give isl_union_pw_aff *isl_stream_read_union_pw_aff(
    196 	__isl_keep isl_stream *s);
    197 
    198 isl_stat isl_pw_aff_check_named_params(__isl_keep isl_pw_aff *pa);
    199 isl_stat isl_multi_aff_check_named_params(__isl_keep isl_multi_aff *ma);
    200 isl_stat isl_pw_multi_aff_check_named_params(__isl_keep isl_pw_multi_aff *pma);
    201 
    202 isl_bool isl_pw_aff_matching_params(__isl_keep isl_pw_aff *pa,
    203 	__isl_keep isl_space *space);
    204 isl_stat isl_pw_aff_check_match_domain_space(__isl_keep isl_pw_aff *pa,
    205 	__isl_keep isl_space *space);
    206 
    207 __isl_give isl_basic_set *isl_aff_pos_basic_set(__isl_take isl_aff *aff);
    208 
    209 #undef BASE
    210 #define BASE pw_aff
    211 #undef DOMBASE
    212 #define DOMBASE set
    213 #define EXPLICIT_DOMAIN
    214 
    215 #include <isl_multi_templ.h>
    216 
    217 #undef EXPLICIT_DOMAIN
    218 
    219 __isl_give isl_map *isl_map_intersect_multi_pw_aff_explicit_domain(
    220 	__isl_take isl_map *map, __isl_keep isl_multi_pw_aff *mpa);
    221 
    222 #undef EL
    223 #define EL isl_union_pw_aff
    224 
    225 #include <isl_list_templ.h>
    226 
    227 #undef BASE
    228 #define BASE union_pw_aff
    229 #undef DOMBASE
    230 #define DOMBASE union_set
    231 #define EXPLICIT_DOMAIN
    232 
    233 #include <isl_multi_templ.h>
    234 
    235 #undef EXPLICIT_DOMAIN
    236 
    237 #undef EL
    238 #define EL isl_union_pw_multi_aff
    239 
    240 #include <isl_list_templ.h>
    241 
    242 #endif
    243