schedule_node.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. #ifndef ISL_SCHEDULE_NODE_H
  2. #define ISL_SCHEDULE_NODE_H
  3. #include <isl/schedule_type.h>
  4. #include <isl/union_set_type.h>
  5. #include <isl/aff_type.h>
  6. #include <isl/ast_type.h>
  7. #include <isl/val_type.h>
  8. #include <isl/space_type.h>
  9. #include <isl/id_type.h>
  10. #include <isl/set_type.h>
  11. #if defined(__cplusplus)
  12. extern "C" {
  13. #endif
  14. __isl_export
  15. __isl_give isl_schedule_node *isl_schedule_node_from_domain(
  16. __isl_take isl_union_set *domain);
  17. __isl_export
  18. __isl_give isl_schedule_node *isl_schedule_node_from_extension(
  19. __isl_take isl_union_map *extension);
  20. __isl_give isl_schedule_node *isl_schedule_node_copy(
  21. __isl_keep isl_schedule_node *node);
  22. __isl_null isl_schedule_node *isl_schedule_node_free(
  23. __isl_take isl_schedule_node *node);
  24. __isl_export
  25. isl_bool isl_schedule_node_is_equal(__isl_keep isl_schedule_node *node1,
  26. __isl_keep isl_schedule_node *node2);
  27. isl_ctx *isl_schedule_node_get_ctx(__isl_keep isl_schedule_node *node);
  28. __isl_subclass(isl_schedule_node)
  29. enum isl_schedule_node_type isl_schedule_node_get_type(
  30. __isl_keep isl_schedule_node *node);
  31. enum isl_schedule_node_type isl_schedule_node_get_parent_type(
  32. __isl_keep isl_schedule_node *node);
  33. __isl_export
  34. __isl_give isl_schedule *isl_schedule_node_get_schedule(
  35. __isl_keep isl_schedule_node *node);
  36. __isl_export
  37. isl_stat isl_schedule_node_foreach_descendant_top_down(
  38. __isl_keep isl_schedule_node *node,
  39. isl_bool (*fn)(__isl_keep isl_schedule_node *node, void *user),
  40. void *user);
  41. __isl_export
  42. isl_bool isl_schedule_node_every_descendant(__isl_keep isl_schedule_node *node,
  43. isl_bool (*test)(__isl_keep isl_schedule_node *node, void *user),
  44. void *user);
  45. __isl_export
  46. isl_stat isl_schedule_node_foreach_ancestor_top_down(
  47. __isl_keep isl_schedule_node *node,
  48. isl_stat (*fn)(__isl_keep isl_schedule_node *node, void *user),
  49. void *user);
  50. __isl_export
  51. __isl_give isl_schedule_node *isl_schedule_node_map_descendant_bottom_up(
  52. __isl_take isl_schedule_node *node,
  53. __isl_give isl_schedule_node *(*fn)(__isl_take isl_schedule_node *node,
  54. void *user), void *user);
  55. __isl_export
  56. isl_size isl_schedule_node_get_tree_depth(__isl_keep isl_schedule_node *node);
  57. __isl_export
  58. isl_bool isl_schedule_node_has_parent(__isl_keep isl_schedule_node *node);
  59. __isl_export
  60. isl_bool isl_schedule_node_has_children(__isl_keep isl_schedule_node *node);
  61. __isl_export
  62. isl_bool isl_schedule_node_has_previous_sibling(
  63. __isl_keep isl_schedule_node *node);
  64. __isl_export
  65. isl_bool isl_schedule_node_has_next_sibling(__isl_keep isl_schedule_node *node);
  66. __isl_export
  67. isl_size isl_schedule_node_n_children(__isl_keep isl_schedule_node *node);
  68. __isl_export
  69. isl_size isl_schedule_node_get_child_position(
  70. __isl_keep isl_schedule_node *node);
  71. __isl_export
  72. isl_size isl_schedule_node_get_ancestor_child_position(
  73. __isl_keep isl_schedule_node *node,
  74. __isl_keep isl_schedule_node *ancestor);
  75. __isl_give isl_schedule_node *isl_schedule_node_get_child(
  76. __isl_keep isl_schedule_node *node, int pos);
  77. __isl_export
  78. __isl_give isl_schedule_node *isl_schedule_node_get_shared_ancestor(
  79. __isl_keep isl_schedule_node *node1,
  80. __isl_keep isl_schedule_node *node2);
  81. __isl_export
  82. __isl_give isl_schedule_node *isl_schedule_node_root(
  83. __isl_take isl_schedule_node *node);
  84. __isl_export
  85. __isl_give isl_schedule_node *isl_schedule_node_parent(
  86. __isl_take isl_schedule_node *node);
  87. __isl_give isl_schedule_node *isl_schedule_node_grandparent(
  88. __isl_take isl_schedule_node *node);
  89. __isl_export
  90. __isl_give isl_schedule_node *isl_schedule_node_ancestor(
  91. __isl_take isl_schedule_node *node, int generation);
  92. __isl_export
  93. __isl_give isl_schedule_node *isl_schedule_node_child(
  94. __isl_take isl_schedule_node *node, int pos);
  95. __isl_give isl_schedule_node *isl_schedule_node_grandchild(
  96. __isl_take isl_schedule_node *node, int pos1, int pos2);
  97. __isl_export
  98. __isl_give isl_schedule_node *isl_schedule_node_first_child(
  99. __isl_take isl_schedule_node *node);
  100. __isl_export
  101. __isl_give isl_schedule_node *isl_schedule_node_previous_sibling(
  102. __isl_take isl_schedule_node *node);
  103. __isl_export
  104. __isl_give isl_schedule_node *isl_schedule_node_next_sibling(
  105. __isl_take isl_schedule_node *node);
  106. __isl_export
  107. isl_bool isl_schedule_node_is_subtree_anchored(
  108. __isl_keep isl_schedule_node *node);
  109. __isl_give isl_schedule_node *isl_schedule_node_group(
  110. __isl_take isl_schedule_node *node, __isl_take isl_id *group_id);
  111. __isl_give isl_schedule_node *isl_schedule_node_sequence_splice_child(
  112. __isl_take isl_schedule_node *node, int pos);
  113. __isl_give isl_schedule_node *isl_schedule_node_sequence_splice_children(
  114. __isl_take isl_schedule_node *node);
  115. __isl_give isl_space *isl_schedule_node_band_get_space(
  116. __isl_keep isl_schedule_node *node);
  117. __isl_export
  118. __isl_give isl_multi_union_pw_aff *isl_schedule_node_band_get_partial_schedule(
  119. __isl_keep isl_schedule_node *node);
  120. __isl_give isl_union_map *isl_schedule_node_band_get_partial_schedule_union_map(
  121. __isl_keep isl_schedule_node *node);
  122. enum isl_ast_loop_type isl_schedule_node_band_member_get_ast_loop_type(
  123. __isl_keep isl_schedule_node *node, int pos);
  124. __isl_export
  125. __isl_give isl_schedule_node *isl_schedule_node_band_member_set_ast_loop_type(
  126. __isl_take isl_schedule_node *node, int pos,
  127. enum isl_ast_loop_type type);
  128. enum isl_ast_loop_type isl_schedule_node_band_member_get_isolate_ast_loop_type(
  129. __isl_keep isl_schedule_node *node, int pos);
  130. __isl_give isl_schedule_node *
  131. isl_schedule_node_band_member_set_isolate_ast_loop_type(
  132. __isl_take isl_schedule_node *node, int pos,
  133. enum isl_ast_loop_type type);
  134. __isl_export
  135. __isl_give isl_union_set *isl_schedule_node_band_get_ast_build_options(
  136. __isl_keep isl_schedule_node *node);
  137. __isl_export
  138. __isl_give isl_schedule_node *isl_schedule_node_band_set_ast_build_options(
  139. __isl_take isl_schedule_node *node, __isl_take isl_union_set *options);
  140. __isl_export
  141. __isl_give isl_set *isl_schedule_node_band_get_ast_isolate_option(
  142. __isl_keep isl_schedule_node *node);
  143. __isl_export
  144. isl_size isl_schedule_node_band_n_member(__isl_keep isl_schedule_node *node);
  145. __isl_export
  146. isl_bool isl_schedule_node_band_member_get_coincident(
  147. __isl_keep isl_schedule_node *node, int pos);
  148. __isl_export
  149. __isl_give isl_schedule_node *isl_schedule_node_band_member_set_coincident(
  150. __isl_take isl_schedule_node *node, int pos, int coincident);
  151. __isl_export
  152. isl_bool isl_schedule_node_band_get_permutable(
  153. __isl_keep isl_schedule_node *node);
  154. __isl_export
  155. __isl_give isl_schedule_node *isl_schedule_node_band_set_permutable(
  156. __isl_take isl_schedule_node *node, int permutable);
  157. isl_stat isl_options_set_tile_scale_tile_loops(isl_ctx *ctx, int val);
  158. int isl_options_get_tile_scale_tile_loops(isl_ctx *ctx);
  159. isl_stat isl_options_set_tile_shift_point_loops(isl_ctx *ctx, int val);
  160. int isl_options_get_tile_shift_point_loops(isl_ctx *ctx);
  161. __isl_export
  162. __isl_give isl_schedule_node *isl_schedule_node_band_scale(
  163. __isl_take isl_schedule_node *node, __isl_take isl_multi_val *mv);
  164. __isl_export
  165. __isl_give isl_schedule_node *isl_schedule_node_band_scale_down(
  166. __isl_take isl_schedule_node *node, __isl_take isl_multi_val *mv);
  167. __isl_export
  168. __isl_give isl_schedule_node *isl_schedule_node_band_mod(
  169. __isl_take isl_schedule_node *node, __isl_take isl_multi_val *mv);
  170. __isl_export
  171. __isl_give isl_schedule_node *isl_schedule_node_band_shift(
  172. __isl_take isl_schedule_node *node,
  173. __isl_take isl_multi_union_pw_aff *shift);
  174. __isl_export
  175. __isl_give isl_schedule_node *isl_schedule_node_band_tile(
  176. __isl_take isl_schedule_node *node, __isl_take isl_multi_val *sizes);
  177. __isl_give isl_schedule_node *isl_schedule_node_band_sink(
  178. __isl_take isl_schedule_node *node);
  179. __isl_export
  180. __isl_give isl_schedule_node *isl_schedule_node_band_split(
  181. __isl_take isl_schedule_node *node, int pos);
  182. __isl_export
  183. __isl_give isl_set *isl_schedule_node_context_get_context(
  184. __isl_keep isl_schedule_node *node);
  185. __isl_export
  186. __isl_give isl_union_set *isl_schedule_node_domain_get_domain(
  187. __isl_keep isl_schedule_node *node);
  188. __isl_export
  189. __isl_give isl_union_map *isl_schedule_node_expansion_get_expansion(
  190. __isl_keep isl_schedule_node *node);
  191. __isl_export
  192. __isl_give isl_union_pw_multi_aff *isl_schedule_node_expansion_get_contraction(
  193. __isl_keep isl_schedule_node *node);
  194. __isl_export
  195. __isl_give isl_union_map *isl_schedule_node_extension_get_extension(
  196. __isl_keep isl_schedule_node *node);
  197. __isl_export
  198. __isl_give isl_union_set *isl_schedule_node_filter_get_filter(
  199. __isl_keep isl_schedule_node *node);
  200. __isl_export
  201. __isl_give isl_set *isl_schedule_node_guard_get_guard(
  202. __isl_keep isl_schedule_node *node);
  203. __isl_give isl_id *isl_schedule_node_mark_get_id(
  204. __isl_keep isl_schedule_node *node);
  205. isl_size isl_schedule_node_get_schedule_depth(
  206. __isl_keep isl_schedule_node *node);
  207. __isl_give isl_union_set *isl_schedule_node_get_domain(
  208. __isl_keep isl_schedule_node *node);
  209. __isl_give isl_union_set *isl_schedule_node_get_universe_domain(
  210. __isl_keep isl_schedule_node *node);
  211. __isl_export
  212. __isl_give isl_multi_union_pw_aff *
  213. isl_schedule_node_get_prefix_schedule_multi_union_pw_aff(
  214. __isl_keep isl_schedule_node *node);
  215. __isl_export
  216. __isl_give isl_union_pw_multi_aff *
  217. isl_schedule_node_get_prefix_schedule_union_pw_multi_aff(
  218. __isl_keep isl_schedule_node *node);
  219. __isl_export
  220. __isl_give isl_union_map *isl_schedule_node_get_prefix_schedule_union_map(
  221. __isl_keep isl_schedule_node *node);
  222. __isl_give isl_union_map *isl_schedule_node_get_prefix_schedule_relation(
  223. __isl_keep isl_schedule_node *node);
  224. __isl_give isl_union_map *isl_schedule_node_get_subtree_schedule_union_map(
  225. __isl_keep isl_schedule_node *node);
  226. __isl_give isl_union_map *isl_schedule_node_get_subtree_expansion(
  227. __isl_keep isl_schedule_node *node);
  228. __isl_give isl_union_pw_multi_aff *isl_schedule_node_get_subtree_contraction(
  229. __isl_keep isl_schedule_node *node);
  230. __isl_export
  231. __isl_give isl_schedule_node *isl_schedule_node_insert_context(
  232. __isl_take isl_schedule_node *node, __isl_take isl_set *context);
  233. __isl_export
  234. __isl_give isl_schedule_node *isl_schedule_node_insert_partial_schedule(
  235. __isl_take isl_schedule_node *node,
  236. __isl_take isl_multi_union_pw_aff *schedule);
  237. __isl_export
  238. __isl_give isl_schedule_node *isl_schedule_node_insert_filter(
  239. __isl_take isl_schedule_node *node, __isl_take isl_union_set *filter);
  240. __isl_export
  241. __isl_give isl_schedule_node *isl_schedule_node_insert_guard(
  242. __isl_take isl_schedule_node *node, __isl_take isl_set *context);
  243. __isl_export
  244. __isl_give isl_schedule_node *isl_schedule_node_insert_mark(
  245. __isl_take isl_schedule_node *node, __isl_take isl_id *mark);
  246. __isl_export
  247. __isl_give isl_schedule_node *isl_schedule_node_insert_sequence(
  248. __isl_take isl_schedule_node *node,
  249. __isl_take isl_union_set_list *filters);
  250. __isl_export
  251. __isl_give isl_schedule_node *isl_schedule_node_insert_set(
  252. __isl_take isl_schedule_node *node,
  253. __isl_take isl_union_set_list *filters);
  254. __isl_give isl_schedule_node *isl_schedule_node_cut(
  255. __isl_take isl_schedule_node *node);
  256. __isl_give isl_schedule_node *isl_schedule_node_delete(
  257. __isl_take isl_schedule_node *node);
  258. __isl_export
  259. __isl_give isl_schedule_node *isl_schedule_node_order_before(
  260. __isl_take isl_schedule_node *node, __isl_take isl_union_set *filter);
  261. __isl_export
  262. __isl_give isl_schedule_node *isl_schedule_node_order_after(
  263. __isl_take isl_schedule_node *node, __isl_take isl_union_set *filter);
  264. __isl_export
  265. __isl_give isl_schedule_node *isl_schedule_node_graft_before(
  266. __isl_take isl_schedule_node *node,
  267. __isl_take isl_schedule_node *graft);
  268. __isl_export
  269. __isl_give isl_schedule_node *isl_schedule_node_graft_after(
  270. __isl_take isl_schedule_node *node,
  271. __isl_take isl_schedule_node *graft);
  272. __isl_give isl_schedule_node *isl_schedule_node_reset_user(
  273. __isl_take isl_schedule_node *node);
  274. __isl_give isl_schedule_node *isl_schedule_node_align_params(
  275. __isl_take isl_schedule_node *node, __isl_take isl_space *space);
  276. __isl_give isl_printer *isl_printer_print_schedule_node(
  277. __isl_take isl_printer *p, __isl_keep isl_schedule_node *node);
  278. void isl_schedule_node_dump(__isl_keep isl_schedule_node *node);
  279. __isl_give char *isl_schedule_node_to_str(__isl_keep isl_schedule_node *node);
  280. #if defined(__cplusplus)
  281. }
  282. #endif
  283. #endif