Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. #ifndef ISL_MULTI_H
  2. #define ISL_MULTI_H
  3.  
  4. #include <isl/val_type.h>
  5. #include <isl/space_type.h>
  6. #include <isl/list.h>
  7. #include <isl/set_type.h>
  8.  
  9. #if defined(__cplusplus)
  10. extern "C" {
  11. #endif
  12.  
  13. #define ISL_DECLARE_MULTI(BASE)                                         \
  14. isl_ctx *isl_multi_##BASE##_get_ctx(                                    \
  15.         __isl_keep isl_multi_##BASE *multi);                            \
  16. __isl_export                                                            \
  17. __isl_give isl_space *isl_multi_##BASE##_get_space(                     \
  18.         __isl_keep isl_multi_##BASE *multi);                            \
  19. __isl_give isl_space *isl_multi_##BASE##_get_domain_space(              \
  20.         __isl_keep isl_multi_##BASE *multi);                            \
  21. __isl_export                                                            \
  22. __isl_give isl_##BASE##_list *isl_multi_##BASE##_get_list(              \
  23.         __isl_keep isl_multi_##BASE *multi);                            \
  24. __isl_constructor                                                       \
  25. __isl_give isl_multi_##BASE *isl_multi_##BASE##_from_##BASE##_list(     \
  26.         __isl_take isl_space *space, __isl_take isl_##BASE##_list *list); \
  27. __isl_export                                                            \
  28. __isl_give isl_multi_##BASE *isl_space_multi_##BASE(                    \
  29.         __isl_take isl_space *space, __isl_take isl_##BASE##_list *list); \
  30. __isl_give isl_multi_##BASE *isl_multi_##BASE##_copy(                   \
  31.         __isl_keep isl_multi_##BASE *multi);                            \
  32. __isl_null isl_multi_##BASE *isl_multi_##BASE##_free(                   \
  33.         __isl_take isl_multi_##BASE *multi);                            \
  34. __isl_export                                                            \
  35. isl_bool isl_multi_##BASE##_plain_is_equal(                             \
  36.         __isl_keep isl_multi_##BASE *multi1,                            \
  37.         __isl_keep isl_multi_##BASE *multi2);                           \
  38. __isl_give isl_multi_##BASE *isl_multi_##BASE##_reset_user(             \
  39.         __isl_take isl_multi_##BASE *multi);                            \
  40. __isl_export                                                            \
  41. isl_size isl_multi_##BASE##_size(__isl_keep isl_multi_##BASE *multi);   \
  42. __isl_export                                                            \
  43. __isl_give isl_##BASE *isl_multi_##BASE##_get_at(                       \
  44.         __isl_keep isl_multi_##BASE *multi, int pos);                   \
  45. __isl_give isl_##BASE *isl_multi_##BASE##_get_##BASE(                   \
  46.         __isl_keep isl_multi_##BASE *multi, int pos);                   \
  47. __isl_export                                                            \
  48. __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_at(                 \
  49.         __isl_take isl_multi_##BASE *multi, int pos,                    \
  50.         __isl_take isl_##BASE *el);                                     \
  51. __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_##BASE(             \
  52.         __isl_take isl_multi_##BASE *multi, int pos,                    \
  53.         __isl_take isl_##BASE *el);                                     \
  54. __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_splice(           \
  55.         __isl_take isl_multi_##BASE *multi1, unsigned pos,              \
  56.         __isl_take isl_multi_##BASE *multi2);                           \
  57. __isl_give isl_multi_##BASE *isl_multi_##BASE##_flatten_range(          \
  58.         __isl_take isl_multi_##BASE *multi);                            \
  59. __isl_export                                                            \
  60. __isl_give isl_multi_##BASE *isl_multi_##BASE##_flat_range_product(     \
  61.         __isl_take isl_multi_##BASE *multi1,                            \
  62.         __isl_take isl_multi_##BASE *multi2);                           \
  63. __isl_export                                                            \
  64. __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_product(          \
  65.         __isl_take isl_multi_##BASE *multi1,                            \
  66.         __isl_take isl_multi_##BASE *multi2);                           \
  67. __isl_give isl_multi_##BASE *isl_multi_##BASE##_factor_range(           \
  68.         __isl_take isl_multi_##BASE *multi);                            \
  69. isl_bool isl_multi_##BASE##_range_is_wrapping(                          \
  70.         __isl_keep isl_multi_##BASE *multi);                            \
  71. __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_factor_domain(    \
  72.         __isl_take isl_multi_##BASE *multi);                            \
  73. __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_factor_range(     \
  74.         __isl_take isl_multi_##BASE *multi);                            \
  75. __isl_give isl_multi_##BASE *isl_multi_##BASE##_align_params(           \
  76.         __isl_take isl_multi_##BASE *multi,                             \
  77.         __isl_take isl_space *model);                                   \
  78. __isl_give isl_multi_##BASE *isl_multi_##BASE##_from_range(             \
  79.         __isl_take isl_multi_##BASE *multi);
  80.  
  81. #define ISL_DECLARE_MULTI_IDENTITY(BASE)                                \
  82. __isl_overload                                                          \
  83. __isl_give isl_multi_##BASE *isl_multi_##BASE##_identity_multi_##BASE(  \
  84.         __isl_take isl_multi_##BASE *multi);                            \
  85. __isl_give isl_multi_##BASE *isl_multi_##BASE##_identity(               \
  86.         __isl_take isl_space *space);                                   \
  87. __isl_overload                                                          \
  88. __isl_give isl_multi_##BASE *                                           \
  89. isl_multi_##BASE##_identity_on_domain_space(                            \
  90.         __isl_take isl_space *space);                                   \
  91. __isl_export                                                            \
  92. __isl_give isl_multi_##BASE *                                           \
  93. isl_space_identity_multi_##BASE##_on_domain(                            \
  94.         __isl_take isl_space *space);
  95.  
  96. #define ISL_DECLARE_MULTI_CMP(BASE)                                     \
  97. int isl_multi_##BASE##_plain_cmp(__isl_keep isl_multi_##BASE *multi1,   \
  98.         __isl_keep isl_multi_##BASE *multi2);
  99.  
  100. #define ISL_DECLARE_MULTI_ARITH(BASE)                                   \
  101. __isl_overload                                                          \
  102. __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_val(              \
  103.         __isl_take isl_multi_##BASE *multi, __isl_take isl_val *v);     \
  104. __isl_overload                                                          \
  105. __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_down_val(         \
  106.         __isl_take isl_multi_##BASE *multi, __isl_take isl_val *v);     \
  107. __isl_overload                                                          \
  108. __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_multi_val(        \
  109.         __isl_take isl_multi_##BASE *multi,                             \
  110.         __isl_take isl_multi_val *mv);                                  \
  111. __isl_overload                                                          \
  112. __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_down_multi_val(   \
  113.         __isl_take isl_multi_##BASE *multi,                             \
  114.         __isl_take isl_multi_val *mv);                                  \
  115. __isl_give isl_multi_##BASE *isl_multi_##BASE##_mod_multi_val(          \
  116.         __isl_take isl_multi_##BASE *multi,                             \
  117.         __isl_take isl_multi_val *mv);                                  \
  118. __isl_export                                                            \
  119. __isl_give isl_multi_##BASE *isl_multi_##BASE##_add(                    \
  120.         __isl_take isl_multi_##BASE *multi1,                            \
  121.         __isl_take isl_multi_##BASE *multi2);                           \
  122. __isl_export                                                            \
  123. __isl_give isl_multi_##BASE *isl_multi_##BASE##_sub(                    \
  124.         __isl_take isl_multi_##BASE *multi1,                            \
  125.         __isl_take isl_multi_##BASE *multi2);                           \
  126. __isl_export                                                            \
  127. __isl_give isl_multi_##BASE *isl_multi_##BASE##_neg(                    \
  128.         __isl_take isl_multi_##BASE *multi);
  129.  
  130. #define ISL_DECLARE_MULTI_MIN_MAX(BASE)                                 \
  131. __isl_export                                                            \
  132. __isl_give isl_multi_##BASE *isl_multi_##BASE##_min(                    \
  133.         __isl_take isl_multi_##BASE *multi1,                            \
  134.         __isl_take isl_multi_##BASE *multi2);                           \
  135. __isl_export                                                            \
  136. __isl_give isl_multi_##BASE *isl_multi_##BASE##_max(                    \
  137.         __isl_take isl_multi_##BASE *multi1,                            \
  138.         __isl_take isl_multi_##BASE *multi2);
  139.  
  140. #define ISL_DECLARE_MULTI_ADD_CONSTANT(BASE)                            \
  141. __isl_overload                                                          \
  142. __isl_give isl_multi_##BASE *isl_multi_##BASE##_add_constant_val(       \
  143.         __isl_take isl_multi_##BASE *mpa, __isl_take isl_val *v);       \
  144. __isl_overload                                                          \
  145. __isl_give isl_multi_##BASE *isl_multi_##BASE##_add_constant_multi_val( \
  146.         __isl_take isl_multi_##BASE *mpa, __isl_take isl_multi_val *mv);
  147.  
  148. #define ISL_DECLARE_MULTI_ZERO(BASE)                                    \
  149. __isl_export                                                            \
  150. __isl_give isl_multi_##BASE *isl_multi_##BASE##_zero(                   \
  151.         __isl_take isl_space *space);                                   \
  152. __isl_export                                                            \
  153. __isl_give isl_multi_##BASE *isl_space_zero_multi_##BASE(               \
  154.         __isl_take isl_space *space);
  155.  
  156. #define ISL_DECLARE_MULTI_NAN(BASE)                                     \
  157. __isl_export                                                            \
  158. isl_bool isl_multi_##BASE##_involves_nan(                               \
  159.         __isl_keep isl_multi_##BASE *multi);
  160.  
  161. #define ISL_DECLARE_MULTI_DROP_DIMS(BASE)                               \
  162. isl_size isl_multi_##BASE##_dim(__isl_keep isl_multi_##BASE *multi,     \
  163.         enum isl_dim_type type);                                        \
  164. __isl_give isl_multi_##BASE *isl_multi_##BASE##_drop_dims(              \
  165.         __isl_take isl_multi_##BASE *multi, enum isl_dim_type type,     \
  166.         unsigned first, unsigned n);
  167. #define ISL_DECLARE_MULTI_DIMS(BASE)                                    \
  168. ISL_DECLARE_MULTI_DROP_DIMS(BASE)                                       \
  169. isl_bool isl_multi_##BASE##_involves_dims(                              \
  170.         __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type,     \
  171.         unsigned first, unsigned n);                                    \
  172. __isl_give isl_multi_##BASE *isl_multi_##BASE##_insert_dims(            \
  173.         __isl_take isl_multi_##BASE *multi, enum isl_dim_type type,     \
  174.         unsigned first, unsigned n);                                    \
  175. __isl_give isl_multi_##BASE *isl_multi_##BASE##_add_dims(               \
  176.         __isl_take isl_multi_##BASE *multi, enum isl_dim_type type,     \
  177.         unsigned n);                                                    \
  178. __isl_give isl_multi_##BASE *                                           \
  179. isl_multi_##BASE##_project_domain_on_params(                            \
  180.         __isl_take isl_multi_##BASE *multi);
  181.  
  182. #define ISL_DECLARE_MULTI_INSERT_DOMAIN(BASE)                           \
  183. __isl_export                                                            \
  184. __isl_give isl_multi_##BASE *                                           \
  185. isl_multi_##BASE##_insert_domain(__isl_take isl_multi_##BASE *multi,    \
  186.         __isl_take isl_space *domain);
  187.  
  188. #define ISL_DECLARE_MULTI_LOCALS(BASE)                                  \
  189. __isl_export                                                            \
  190. isl_bool isl_multi_##BASE##_involves_locals(                            \
  191.         __isl_keep isl_multi_##BASE *multi);
  192.  
  193. #define ISL_DECLARE_MULTI_DIM_ID(BASE)                                  \
  194. int isl_multi_##BASE##_find_dim_by_name(                                \
  195.         __isl_keep isl_multi_##BASE *multi,                             \
  196.         enum isl_dim_type type, const char *name);                      \
  197. int isl_multi_##BASE##_find_dim_by_id(                                  \
  198.         __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type,     \
  199.         __isl_keep isl_id *id);                                         \
  200. __isl_give isl_id *isl_multi_##BASE##_get_dim_id(                       \
  201.         __isl_keep isl_multi_##BASE *multi,                             \
  202.         enum isl_dim_type type, unsigned pos);                          \
  203. __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_dim_name(           \
  204.         __isl_take isl_multi_##BASE *multi,                             \
  205.         enum isl_dim_type type, unsigned pos, const char *s);           \
  206. __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_dim_id(             \
  207.         __isl_take isl_multi_##BASE *multi,                             \
  208.         enum isl_dim_type type, unsigned pos, __isl_take isl_id *id);
  209.  
  210. #define ISL_DECLARE_MULTI_TUPLE_ID(BASE)                                \
  211. const char *isl_multi_##BASE##_get_tuple_name(                          \
  212.         __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type);    \
  213. __isl_export                                                            \
  214. isl_bool isl_multi_##BASE##_has_range_tuple_id(                         \
  215.         __isl_keep isl_multi_##BASE *multi);                            \
  216. isl_bool isl_multi_##BASE##_has_tuple_id(                               \
  217.         __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type);    \
  218. __isl_export                                                            \
  219. __isl_give isl_id *isl_multi_##BASE##_get_range_tuple_id(               \
  220.         __isl_keep isl_multi_##BASE *multi);                            \
  221. __isl_give isl_id *isl_multi_##BASE##_get_tuple_id(                     \
  222.         __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type);    \
  223. __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_tuple_name(         \
  224.         __isl_take isl_multi_##BASE *multi,                             \
  225.         enum isl_dim_type type, const char *s);                         \
  226. __isl_overload                                                          \
  227. __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_range_tuple_id(     \
  228.         __isl_take isl_multi_##BASE *multi,  __isl_take isl_id *id);    \
  229. __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_tuple_id(           \
  230.         __isl_take isl_multi_##BASE *multi,                             \
  231.         enum isl_dim_type type, __isl_take isl_id *id);                 \
  232. __isl_export                                                            \
  233. __isl_give isl_multi_##BASE *isl_multi_##BASE##_reset_range_tuple_id(   \
  234.         __isl_take isl_multi_##BASE *multi);                            \
  235. __isl_give isl_multi_##BASE *isl_multi_##BASE##_reset_tuple_id(         \
  236.         __isl_take isl_multi_##BASE *multi, enum isl_dim_type type);
  237.  
  238. #define ISL_DECLARE_MULTI_WITH_DOMAIN(BASE)                             \
  239. __isl_export                                                            \
  240. __isl_give isl_multi_##BASE *isl_multi_##BASE##_product(                \
  241.         __isl_take isl_multi_##BASE *multi1,                            \
  242.         __isl_take isl_multi_##BASE *multi2);                           \
  243. __isl_give isl_multi_##BASE *isl_multi_##BASE##_splice(                 \
  244.         __isl_take isl_multi_##BASE *multi1, unsigned in_pos,           \
  245.         unsigned out_pos, __isl_take isl_multi_##BASE *multi2);
  246.  
  247. #define ISL_DECLARE_MULTI_BIND_DOMAIN(BASE)                             \
  248. __isl_export                                                            \
  249. __isl_give isl_multi_##BASE *isl_multi_##BASE##_bind_domain(            \
  250.         __isl_take isl_multi_##BASE *multi,                             \
  251.         __isl_take isl_multi_id *tuple);                                \
  252. __isl_export                                                            \
  253. __isl_give isl_multi_##BASE *                                           \
  254. isl_multi_##BASE##_bind_domain_wrapped_domain(                          \
  255.         __isl_take isl_multi_##BASE *multi,                             \
  256.         __isl_take isl_multi_id *tuple);
  257.  
  258. #define ISL_DECLARE_MULTI_UNBIND_PARAMS(BASE)                           \
  259. __isl_export                                                            \
  260. __isl_give isl_multi_##BASE *                                           \
  261. isl_multi_##BASE##_unbind_params_insert_domain(                         \
  262.         __isl_take isl_multi_##BASE *multi,                             \
  263.         __isl_take isl_multi_id *domain);
  264.  
  265. #define ISL_DECLARE_MULTI_PARAM(BASE)                                   \
  266. __isl_overload                                                          \
  267. isl_bool isl_multi_##BASE##_involves_param_id(                          \
  268.         __isl_keep isl_multi_##BASE *multi, __isl_keep isl_id *id);     \
  269. __isl_overload                                                          \
  270. isl_bool isl_multi_##BASE##_involves_param_id_list(                     \
  271.         __isl_keep isl_multi_##BASE *multi,                             \
  272.         __isl_keep isl_id_list *list);
  273.  
  274. #if defined(__cplusplus)
  275. }
  276. #endif
  277.  
  278. #endif
  279.