ast_build.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. #ifndef ISL_AST_BUILD_H
  2. #define ISL_AST_BUILD_H
  3. #include <isl/ctx.h>
  4. #include <isl/set.h>
  5. #include <isl/ast.h>
  6. #include <isl/schedule.h>
  7. #if defined(__cplusplus)
  8. extern "C" {
  9. #endif
  10. struct __isl_export isl_ast_build;
  11. typedef struct isl_ast_build isl_ast_build;
  12. isl_stat isl_options_set_ast_build_atomic_upper_bound(isl_ctx *ctx, int val);
  13. int isl_options_get_ast_build_atomic_upper_bound(isl_ctx *ctx);
  14. isl_stat isl_options_set_ast_build_prefer_pdiv(isl_ctx *ctx, int val);
  15. int isl_options_get_ast_build_prefer_pdiv(isl_ctx *ctx);
  16. isl_stat isl_options_set_ast_build_detect_min_max(isl_ctx *ctx, int val);
  17. int isl_options_get_ast_build_detect_min_max(isl_ctx *ctx);
  18. isl_stat isl_options_set_ast_build_exploit_nested_bounds(isl_ctx *ctx, int val);
  19. int isl_options_get_ast_build_exploit_nested_bounds(isl_ctx *ctx);
  20. isl_stat isl_options_set_ast_build_group_coscheduled(isl_ctx *ctx, int val);
  21. int isl_options_get_ast_build_group_coscheduled(isl_ctx *ctx);
  22. #define ISL_AST_BUILD_SEPARATION_BOUNDS_EXPLICIT 0
  23. #define ISL_AST_BUILD_SEPARATION_BOUNDS_IMPLICIT 1
  24. isl_stat isl_options_set_ast_build_separation_bounds(isl_ctx *ctx, int val);
  25. int isl_options_get_ast_build_separation_bounds(isl_ctx *ctx);
  26. isl_stat isl_options_set_ast_build_scale_strides(isl_ctx *ctx, int val);
  27. int isl_options_get_ast_build_scale_strides(isl_ctx *ctx);
  28. isl_stat isl_options_set_ast_build_allow_else(isl_ctx *ctx, int val);
  29. int isl_options_get_ast_build_allow_else(isl_ctx *ctx);
  30. isl_stat isl_options_set_ast_build_allow_or(isl_ctx *ctx, int val);
  31. int isl_options_get_ast_build_allow_or(isl_ctx *ctx);
  32. isl_ctx *isl_ast_build_get_ctx(__isl_keep isl_ast_build *build);
  33. __isl_constructor
  34. __isl_give isl_ast_build *isl_ast_build_alloc(isl_ctx *ctx);
  35. __isl_export
  36. __isl_give isl_ast_build *isl_ast_build_from_context(__isl_take isl_set *set);
  37. __isl_give isl_space *isl_ast_build_get_schedule_space(
  38. __isl_keep isl_ast_build *build);
  39. __isl_export
  40. __isl_give isl_union_map *isl_ast_build_get_schedule(
  41. __isl_keep isl_ast_build *build);
  42. __isl_give isl_ast_build *isl_ast_build_restrict(
  43. __isl_take isl_ast_build *build, __isl_take isl_set *set);
  44. __isl_give isl_ast_build *isl_ast_build_copy(
  45. __isl_keep isl_ast_build *build);
  46. __isl_null isl_ast_build *isl_ast_build_free(
  47. __isl_take isl_ast_build *build);
  48. __isl_give isl_ast_build *isl_ast_build_set_options(
  49. __isl_take isl_ast_build *build,
  50. __isl_take isl_union_map *options);
  51. __isl_give isl_ast_build *isl_ast_build_set_iterators(
  52. __isl_take isl_ast_build *build,
  53. __isl_take isl_id_list *iterators);
  54. __isl_export
  55. __isl_give isl_ast_build *isl_ast_build_set_at_each_domain(
  56. __isl_take isl_ast_build *build,
  57. __isl_give isl_ast_node *(*fn)(__isl_take isl_ast_node *node,
  58. __isl_keep isl_ast_build *build, void *user), void *user);
  59. __isl_give isl_ast_build *isl_ast_build_set_before_each_for(
  60. __isl_take isl_ast_build *build,
  61. __isl_give isl_id *(*fn)(__isl_keep isl_ast_build *build,
  62. void *user), void *user);
  63. __isl_give isl_ast_build *isl_ast_build_set_after_each_for(
  64. __isl_take isl_ast_build *build,
  65. __isl_give isl_ast_node *(*fn)(__isl_take isl_ast_node *node,
  66. __isl_keep isl_ast_build *build, void *user), void *user);
  67. __isl_give isl_ast_build *isl_ast_build_set_before_each_mark(
  68. __isl_take isl_ast_build *build,
  69. isl_stat (*fn)(__isl_keep isl_id *mark, __isl_keep isl_ast_build *build,
  70. void *user), void *user);
  71. __isl_give isl_ast_build *isl_ast_build_set_after_each_mark(
  72. __isl_take isl_ast_build *build,
  73. __isl_give isl_ast_node *(*fn)(__isl_take isl_ast_node *node,
  74. __isl_keep isl_ast_build *build, void *user), void *user);
  75. __isl_give isl_ast_build *isl_ast_build_set_create_leaf(
  76. __isl_take isl_ast_build *build,
  77. __isl_give isl_ast_node *(*fn)(__isl_take isl_ast_build *build,
  78. void *user), void *user);
  79. __isl_overload
  80. __isl_give isl_ast_expr *isl_ast_build_expr_from_set(
  81. __isl_keep isl_ast_build *build, __isl_take isl_set *set);
  82. __isl_overload
  83. __isl_give isl_ast_expr *isl_ast_build_expr_from_pw_aff(
  84. __isl_keep isl_ast_build *build, __isl_take isl_pw_aff *pa);
  85. __isl_overload
  86. __isl_give isl_ast_expr *isl_ast_build_access_from_pw_multi_aff(
  87. __isl_keep isl_ast_build *build, __isl_take isl_pw_multi_aff *pma);
  88. __isl_overload
  89. __isl_give isl_ast_expr *isl_ast_build_access_from_multi_pw_aff(
  90. __isl_keep isl_ast_build *build, __isl_take isl_multi_pw_aff *mpa);
  91. __isl_overload
  92. __isl_give isl_ast_expr *isl_ast_build_call_from_pw_multi_aff(
  93. __isl_keep isl_ast_build *build, __isl_take isl_pw_multi_aff *pma);
  94. __isl_overload
  95. __isl_give isl_ast_expr *isl_ast_build_call_from_multi_pw_aff(
  96. __isl_keep isl_ast_build *build, __isl_take isl_multi_pw_aff *mpa);
  97. __isl_overload
  98. __isl_give isl_ast_node *isl_ast_build_node_from_schedule(
  99. __isl_keep isl_ast_build *build, __isl_take isl_schedule *schedule);
  100. __isl_export
  101. __isl_give isl_ast_node *isl_ast_build_node_from_schedule_map(
  102. __isl_keep isl_ast_build *build, __isl_take isl_union_map *schedule);
  103. __isl_give isl_ast_node *isl_ast_build_ast_from_schedule(
  104. __isl_keep isl_ast_build *build, __isl_take isl_union_map *schedule);
  105. #if defined(__cplusplus)
  106. }
  107. #endif
  108. #endif