Home | History | Annotate | Line # | Download | only in dist
      1 /*
      2  * Copyright 2017      Sven Verdoolaege
      3  *
      4  * Use of this software is governed by the MIT license
      5  *
      6  * Written by Sven Verdoolaege.
      7  */
      8 
      9 /* These versions of the explicit domain functions are used
     10  * when the multi expression cannot have an explicit domain.
     11  */
     12 
     13 #include <isl/space.h>
     14 
     15 #include <isl_multi_macro.h>
     16 
     17 /* Does "multi" have an explicit domain?
     18  *
     19  * No.
     20  */
     21 static int FN(MULTI(BASE),has_explicit_domain)(__isl_keep MULTI(BASE) *multi)
     22 {
     23 	return 0;
     24 }
     25 
     26 /* Initialize the explicit domain of "multi".
     27  * "multi" cannot have an explicit domain, so this function is never called.
     28  */
     29 static __isl_give MULTI(BASE) *FN(MULTI(BASE),init_explicit_domain)(
     30 	__isl_take MULTI(BASE) *multi)
     31 {
     32 	return multi;
     33 }
     34 
     35 /* Intersect the domain of "dst" with the explicit domain of "src".
     36  * "src" cannot have an explicit domain, so this function is never called.
     37  */
     38 static __isl_give MULTI(BASE) *FN(MULTI(BASE),intersect_explicit_domain)(
     39 	__isl_take MULTI(BASE) *dst, __isl_keep MULTI(BASE) *src)
     40 {
     41 	return dst;
     42 }
     43 
     44 /* Set the explicit domain of "dst" to that of "src".
     45  * "src" and "dst" cannot have an explicit domain,
     46  * so this function is never called.
     47  */
     48 static __isl_give MULTI(BASE) *FN(MULTI(BASE),copy_explicit_domain)(
     49 	__isl_take MULTI(BASE) *dst, __isl_keep MULTI(BASE) *src)
     50 {
     51 	return dst;
     52 }
     53 
     54 /* Only used by multi-expressions that include "isl_multi_product_templ.c".
     55  */
     56 static __isl_give MULTI(BASE) *
     57 FN(MULTI(BASE),intersect_explicit_domain_product)(
     58 	__isl_take MULTI(BASE) *dst, __isl_keep MULTI(BASE) *src1,
     59 	__isl_keep MULTI(BASE) *src2) __attribute__ ((unused));
     60 
     61 /* Intersect the domain of "dst" with the domain product
     62  * of the explicit domains of "src1" and "src2".
     63  * This function is only called if at least one of "src1" or "src2"
     64  * has an explicit domain.
     65  * "src1", "src2" and "dst" cannot have an explicit domain,
     66  * so this function is never called.
     67  */
     68 static __isl_give MULTI(BASE) *
     69 FN(MULTI(BASE),intersect_explicit_domain_product)(
     70 	__isl_take MULTI(BASE) *dst, __isl_keep MULTI(BASE) *src1,
     71 	__isl_keep MULTI(BASE) *src2)
     72 {
     73 	return dst;
     74 }
     75 
     76 /* Align the parameters of the explicit domain of "multi" to those of "space".
     77  * "multi" cannot have an explicit domain, so this function is never called.
     78  */
     79 static __isl_give MULTI(BASE) *FN(MULTI(BASE),align_explicit_domain_params)(
     80 	__isl_take MULTI(BASE) *multi, __isl_take isl_space *space)
     81 {
     82 	isl_space_free(space);
     83 	return multi;
     84 }
     85 
     86 /* Replace the space of the explicit domain of "multi" by "space",
     87  * without modifying its dimension.
     88  * "multi" cannot have an explicit domain, so this function is never called.
     89  */
     90 static __isl_give MULTI(BASE) *FN(MULTI(BASE),reset_explicit_domain_space)(
     91 	__isl_take MULTI(BASE) *multi, __isl_take isl_space *space)
     92 {
     93 	isl_space_free(space);
     94 	return multi;
     95 }
     96 
     97 /* Check whether the explicit domain of "multi" has non-zero coefficients
     98  * for any dimension in the given range or if any of these dimensions appear
     99  * with non-zero coefficients in any of the integer divisions involved.
    100  * "multi" cannot have an explicit domain, so this function is never called.
    101  */
    102 isl_bool FN(MULTI(BASE),involves_explicit_domain_dims)(
    103 	__isl_keep MULTI(BASE) *multi,
    104 	enum isl_dim_type type, unsigned pos, unsigned n)
    105 {
    106 	return isl_bool_false;
    107 }
    108 
    109 /* Insert "n" dimensions of type "type" at position "pos"
    110  * of the explicit domain of "multi".
    111  * "multi" cannot have an explicit domain, so this function is never called.
    112  */
    113 __isl_give MULTI(BASE) *FN(MULTI(BASE),insert_explicit_domain_dims)(
    114 	__isl_take MULTI(BASE) *multi,
    115 	enum isl_dim_type type, unsigned pos, unsigned n)
    116 {
    117 	return multi;
    118 }
    119 
    120 /* Drop the "n" dimensions of type "type" starting at position "pos"
    121  * of the explicit domain of "multi".
    122  * "multi" cannot have an explicit domain, so this function is never called.
    123  */
    124 __isl_give MULTI(BASE) *FN(MULTI(BASE),drop_explicit_domain_dims)(
    125 	__isl_take MULTI(BASE) *multi,
    126 	enum isl_dim_type type, unsigned pos, unsigned n)
    127 {
    128 	return multi;
    129 }
    130 
    131 /* Move the "n" dimensions of "src_type" starting at "src_pos" of
    132  * of the explicit domain of "multi" to dimensions of "dst_type" at "dst_pos".
    133  * "multi" cannot have an explicit domain, so this function is never called.
    134  */
    135 __isl_give MULTI(BASE) *FN(MULTI(BASE),move_explicit_domain_dims)(
    136 	__isl_take MULTI(BASE) *multi,
    137 	enum isl_dim_type dst_type, unsigned dst_pos,
    138 	enum isl_dim_type src_type, unsigned src_pos, unsigned n)
    139 {
    140 	return multi;
    141 }
    142 
    143 /* Free the explicit domain of "multi".
    144  * "multi" cannot have an explicit domain, so this function is never called.
    145  */
    146 static void FN(MULTI(BASE),free_explicit_domain)(__isl_keep MULTI(BASE) *multi)
    147 {
    148 }
    149 
    150 /* Do "multi1" and "multi2" have the same explicit domain?
    151  * "multi1" and "multi2" cannot have an explicit domain,
    152  * so this function is never called.
    153  */
    154 static isl_bool FN(MULTI(BASE),equal_explicit_domain)(
    155 	__isl_keep MULTI(BASE) *multi1, __isl_keep MULTI(BASE) *multi2)
    156 {
    157 	return isl_bool_true;
    158 }
    159 
    160 static isl_stat FN(MULTI(BASE),check_explicit_domain)(
    161 	__isl_keep MULTI(BASE) *multi) __attribute__ ((unused));
    162 
    163 /* Debugging function to check that the explicit domain of "multi"
    164  * has the correct space.
    165  * "multi" cannot have an explicit domain,
    166  * so this function should never be called.
    167  */
    168 static isl_stat FN(MULTI(BASE),check_explicit_domain)(
    169 	__isl_keep MULTI(BASE) *multi)
    170 {
    171 	return isl_stat_ok;
    172 }
    173