flow.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. #ifndef ISL_FLOW_H
  2. #define ISL_FLOW_H
  3. #include <stdio.h>
  4. #include <isl/set_type.h>
  5. #include <isl/map_type.h>
  6. #include <isl/union_set_type.h>
  7. #include <isl/union_map_type.h>
  8. #include <isl/schedule.h>
  9. #include <isl/printer.h>
  10. #if defined(__cplusplus)
  11. extern "C" {
  12. #endif
  13. /* Let n (>= 0) be the number of iterators shared by first and second.
  14. * If first precedes second textually return 2 * n + 1,
  15. * otherwise return 2 * n.
  16. */
  17. typedef int (*isl_access_level_before)(void *first, void *second);
  18. struct isl_restriction;
  19. typedef struct isl_restriction isl_restriction;
  20. __isl_null isl_restriction *isl_restriction_free(
  21. __isl_take isl_restriction *restr);
  22. __isl_give isl_restriction *isl_restriction_empty(
  23. __isl_take isl_map *source_map);
  24. __isl_give isl_restriction *isl_restriction_none(
  25. __isl_take isl_map *source_map);
  26. __isl_give isl_restriction *isl_restriction_input(
  27. __isl_take isl_set *source_restr, __isl_take isl_set *sink_restr);
  28. __isl_give isl_restriction *isl_restriction_output(
  29. __isl_take isl_set *source_restr);
  30. isl_ctx *isl_restriction_get_ctx(__isl_keep isl_restriction *restr);
  31. typedef __isl_give isl_restriction *(*isl_access_restrict)(
  32. __isl_keep isl_map *source_map, __isl_keep isl_set *sink,
  33. void *source_user, void *user);
  34. struct isl_access_info;
  35. typedef struct isl_access_info isl_access_info;
  36. struct isl_flow;
  37. typedef struct isl_flow isl_flow;
  38. __isl_give isl_access_info *isl_access_info_alloc(__isl_take isl_map *sink,
  39. void *sink_user, isl_access_level_before fn, int max_source);
  40. __isl_give isl_access_info *isl_access_info_set_restrict(
  41. __isl_take isl_access_info *acc, isl_access_restrict fn, void *user);
  42. __isl_give isl_access_info *isl_access_info_add_source(
  43. __isl_take isl_access_info *acc, __isl_take isl_map *source,
  44. int must, void *source_user);
  45. __isl_null isl_access_info *isl_access_info_free(
  46. __isl_take isl_access_info *acc);
  47. isl_ctx *isl_access_info_get_ctx(__isl_keep isl_access_info *acc);
  48. __isl_give isl_flow *isl_access_info_compute_flow(__isl_take isl_access_info *acc);
  49. isl_stat isl_flow_foreach(__isl_keep isl_flow *deps,
  50. isl_stat (*fn)(__isl_take isl_map *dep, int must, void *dep_user,
  51. void *user),
  52. void *user);
  53. __isl_give isl_map *isl_flow_get_no_source(__isl_keep isl_flow *deps, int must);
  54. __isl_null isl_flow *isl_flow_free(__isl_take isl_flow *deps);
  55. isl_ctx *isl_flow_get_ctx(__isl_keep isl_flow *deps);
  56. struct __isl_export isl_union_access_info;
  57. typedef struct isl_union_access_info isl_union_access_info;
  58. struct __isl_export isl_union_flow;
  59. typedef struct isl_union_flow isl_union_flow;
  60. __isl_constructor
  61. __isl_give isl_union_access_info *isl_union_access_info_from_sink(
  62. __isl_take isl_union_map *sink);
  63. __isl_export
  64. __isl_give isl_union_access_info *isl_union_access_info_set_must_source(
  65. __isl_take isl_union_access_info *access,
  66. __isl_take isl_union_map *must_source);
  67. __isl_export
  68. __isl_give isl_union_access_info *isl_union_access_info_set_may_source(
  69. __isl_take isl_union_access_info *access,
  70. __isl_take isl_union_map *may_source);
  71. __isl_export
  72. __isl_give isl_union_access_info *isl_union_access_info_set_kill(
  73. __isl_take isl_union_access_info *access,
  74. __isl_take isl_union_map *kill);
  75. __isl_export
  76. __isl_give isl_union_access_info *isl_union_access_info_set_schedule(
  77. __isl_take isl_union_access_info *access,
  78. __isl_take isl_schedule *schedule);
  79. __isl_export
  80. __isl_give isl_union_access_info *isl_union_access_info_set_schedule_map(
  81. __isl_take isl_union_access_info *access,
  82. __isl_take isl_union_map *schedule_map);
  83. __isl_give isl_union_access_info *isl_union_access_info_copy(
  84. __isl_keep isl_union_access_info *access);
  85. __isl_null isl_union_access_info *isl_union_access_info_free(
  86. __isl_take isl_union_access_info *access);
  87. isl_ctx *isl_union_access_info_get_ctx(
  88. __isl_keep isl_union_access_info *access);
  89. __isl_give isl_union_access_info *isl_union_access_info_read_from_file(
  90. isl_ctx *ctx, FILE *input);
  91. __isl_give isl_printer *isl_printer_print_union_access_info(
  92. __isl_take isl_printer *p, __isl_keep isl_union_access_info *access);
  93. __isl_give char *isl_union_access_info_to_str(
  94. __isl_keep isl_union_access_info *access);
  95. __isl_export
  96. __isl_give isl_union_flow *isl_union_access_info_compute_flow(
  97. __isl_take isl_union_access_info *access);
  98. isl_ctx *isl_union_flow_get_ctx(__isl_keep isl_union_flow *flow);
  99. __isl_give isl_union_flow *isl_union_flow_copy(
  100. __isl_keep isl_union_flow *flow);
  101. __isl_export
  102. __isl_give isl_union_map *isl_union_flow_get_must_dependence(
  103. __isl_keep isl_union_flow *flow);
  104. __isl_export
  105. __isl_give isl_union_map *isl_union_flow_get_may_dependence(
  106. __isl_keep isl_union_flow *flow);
  107. __isl_export
  108. __isl_give isl_union_map *isl_union_flow_get_full_must_dependence(
  109. __isl_keep isl_union_flow *flow);
  110. __isl_export
  111. __isl_give isl_union_map *isl_union_flow_get_full_may_dependence(
  112. __isl_keep isl_union_flow *flow);
  113. __isl_export
  114. __isl_give isl_union_map *isl_union_flow_get_must_no_source(
  115. __isl_keep isl_union_flow *flow);
  116. __isl_export
  117. __isl_give isl_union_map *isl_union_flow_get_may_no_source(
  118. __isl_keep isl_union_flow *flow);
  119. __isl_null isl_union_flow *isl_union_flow_free(__isl_take isl_union_flow *flow);
  120. __isl_give isl_printer *isl_printer_print_union_flow(
  121. __isl_take isl_printer *p, __isl_keep isl_union_flow *flow);
  122. __isl_give char *isl_union_flow_to_str(__isl_keep isl_union_flow *flow);
  123. int isl_union_map_compute_flow(__isl_take isl_union_map *sink,
  124. __isl_take isl_union_map *must_source,
  125. __isl_take isl_union_map *may_source,
  126. __isl_take isl_union_map *schedule,
  127. __isl_give isl_union_map **must_dep, __isl_give isl_union_map **may_dep,
  128. __isl_give isl_union_map **must_no_source,
  129. __isl_give isl_union_map **may_no_source);
  130. #if defined(__cplusplus)
  131. }
  132. #endif
  133. #endif