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