File indexing completed on 2026-05-10 08:48:19
0001 #ifndef ISL_SCHEDULE_NODE_H
0002 #define ISL_SCHEDULE_NODE_H
0003
0004 #include <isl/schedule_type.h>
0005 #include <isl/union_set_type.h>
0006 #include <isl/aff_type.h>
0007 #include <isl/ast_type.h>
0008 #include <isl/val_type.h>
0009 #include <isl/space_type.h>
0010 #include <isl/id_type.h>
0011 #include <isl/set_type.h>
0012
0013 #if defined(__cplusplus)
0014 extern "C" {
0015 #endif
0016
0017 __isl_export
0018 __isl_give isl_schedule_node *isl_schedule_node_from_domain(
0019 __isl_take isl_union_set *domain);
0020 __isl_export
0021 __isl_give isl_schedule_node *isl_schedule_node_from_extension(
0022 __isl_take isl_union_map *extension);
0023 __isl_give isl_schedule_node *isl_schedule_node_copy(
0024 __isl_keep isl_schedule_node *node);
0025 __isl_null isl_schedule_node *isl_schedule_node_free(
0026 __isl_take isl_schedule_node *node);
0027
0028 __isl_export
0029 isl_bool isl_schedule_node_is_equal(__isl_keep isl_schedule_node *node1,
0030 __isl_keep isl_schedule_node *node2);
0031
0032 isl_ctx *isl_schedule_node_get_ctx(__isl_keep isl_schedule_node *node);
0033 __isl_subclass(isl_schedule_node)
0034 enum isl_schedule_node_type isl_schedule_node_get_type(
0035 __isl_keep isl_schedule_node *node);
0036 enum isl_schedule_node_type isl_schedule_node_get_parent_type(
0037 __isl_keep isl_schedule_node *node);
0038 __isl_export
0039 __isl_give isl_schedule *isl_schedule_node_get_schedule(
0040 __isl_keep isl_schedule_node *node);
0041
0042 __isl_export
0043 isl_stat isl_schedule_node_foreach_descendant_top_down(
0044 __isl_keep isl_schedule_node *node,
0045 isl_bool (*fn)(__isl_keep isl_schedule_node *node, void *user),
0046 void *user);
0047 __isl_export
0048 isl_bool isl_schedule_node_every_descendant(__isl_keep isl_schedule_node *node,
0049 isl_bool (*test)(__isl_keep isl_schedule_node *node, void *user),
0050 void *user);
0051 __isl_export
0052 isl_stat isl_schedule_node_foreach_ancestor_top_down(
0053 __isl_keep isl_schedule_node *node,
0054 isl_stat (*fn)(__isl_keep isl_schedule_node *node, void *user),
0055 void *user);
0056 __isl_export
0057 __isl_give isl_schedule_node *isl_schedule_node_map_descendant_bottom_up(
0058 __isl_take isl_schedule_node *node,
0059 __isl_give isl_schedule_node *(*fn)(__isl_take isl_schedule_node *node,
0060 void *user), void *user);
0061
0062 __isl_export
0063 isl_size isl_schedule_node_get_tree_depth(__isl_keep isl_schedule_node *node);
0064 __isl_export
0065 isl_bool isl_schedule_node_has_parent(__isl_keep isl_schedule_node *node);
0066 __isl_export
0067 isl_bool isl_schedule_node_has_children(__isl_keep isl_schedule_node *node);
0068 __isl_export
0069 isl_bool isl_schedule_node_has_previous_sibling(
0070 __isl_keep isl_schedule_node *node);
0071 __isl_export
0072 isl_bool isl_schedule_node_has_next_sibling(__isl_keep isl_schedule_node *node);
0073 __isl_export
0074 isl_size isl_schedule_node_n_children(__isl_keep isl_schedule_node *node);
0075 __isl_export
0076 isl_size isl_schedule_node_get_child_position(
0077 __isl_keep isl_schedule_node *node);
0078 __isl_export
0079 isl_size isl_schedule_node_get_ancestor_child_position(
0080 __isl_keep isl_schedule_node *node,
0081 __isl_keep isl_schedule_node *ancestor);
0082 __isl_give isl_schedule_node *isl_schedule_node_get_child(
0083 __isl_keep isl_schedule_node *node, int pos);
0084 __isl_export
0085 __isl_give isl_schedule_node *isl_schedule_node_get_shared_ancestor(
0086 __isl_keep isl_schedule_node *node1,
0087 __isl_keep isl_schedule_node *node2);
0088
0089 __isl_export
0090 __isl_give isl_schedule_node *isl_schedule_node_root(
0091 __isl_take isl_schedule_node *node);
0092 __isl_export
0093 __isl_give isl_schedule_node *isl_schedule_node_parent(
0094 __isl_take isl_schedule_node *node);
0095 __isl_give isl_schedule_node *isl_schedule_node_grandparent(
0096 __isl_take isl_schedule_node *node);
0097 __isl_export
0098 __isl_give isl_schedule_node *isl_schedule_node_ancestor(
0099 __isl_take isl_schedule_node *node, int generation);
0100 __isl_export
0101 __isl_give isl_schedule_node *isl_schedule_node_child(
0102 __isl_take isl_schedule_node *node, int pos);
0103 __isl_give isl_schedule_node *isl_schedule_node_grandchild(
0104 __isl_take isl_schedule_node *node, int pos1, int pos2);
0105 __isl_export
0106 __isl_give isl_schedule_node *isl_schedule_node_first_child(
0107 __isl_take isl_schedule_node *node);
0108 __isl_export
0109 __isl_give isl_schedule_node *isl_schedule_node_previous_sibling(
0110 __isl_take isl_schedule_node *node);
0111 __isl_export
0112 __isl_give isl_schedule_node *isl_schedule_node_next_sibling(
0113 __isl_take isl_schedule_node *node);
0114
0115 __isl_export
0116 isl_bool isl_schedule_node_is_subtree_anchored(
0117 __isl_keep isl_schedule_node *node);
0118
0119 __isl_give isl_schedule_node *isl_schedule_node_group(
0120 __isl_take isl_schedule_node *node, __isl_take isl_id *group_id);
0121
0122 __isl_give isl_schedule_node *isl_schedule_node_sequence_splice_child(
0123 __isl_take isl_schedule_node *node, int pos);
0124 __isl_give isl_schedule_node *isl_schedule_node_sequence_splice_children(
0125 __isl_take isl_schedule_node *node);
0126
0127 __isl_give isl_space *isl_schedule_node_band_get_space(
0128 __isl_keep isl_schedule_node *node);
0129 __isl_export
0130 __isl_give isl_multi_union_pw_aff *isl_schedule_node_band_get_partial_schedule(
0131 __isl_keep isl_schedule_node *node);
0132 __isl_give isl_union_map *isl_schedule_node_band_get_partial_schedule_union_map(
0133 __isl_keep isl_schedule_node *node);
0134 enum isl_ast_loop_type isl_schedule_node_band_member_get_ast_loop_type(
0135 __isl_keep isl_schedule_node *node, int pos);
0136 __isl_export
0137 __isl_give isl_schedule_node *isl_schedule_node_band_member_set_ast_loop_type(
0138 __isl_take isl_schedule_node *node, int pos,
0139 enum isl_ast_loop_type type);
0140 enum isl_ast_loop_type isl_schedule_node_band_member_get_isolate_ast_loop_type(
0141 __isl_keep isl_schedule_node *node, int pos);
0142 __isl_give isl_schedule_node *
0143 isl_schedule_node_band_member_set_isolate_ast_loop_type(
0144 __isl_take isl_schedule_node *node, int pos,
0145 enum isl_ast_loop_type type);
0146 __isl_export
0147 __isl_give isl_union_set *isl_schedule_node_band_get_ast_build_options(
0148 __isl_keep isl_schedule_node *node);
0149 __isl_export
0150 __isl_give isl_schedule_node *isl_schedule_node_band_set_ast_build_options(
0151 __isl_take isl_schedule_node *node, __isl_take isl_union_set *options);
0152 __isl_export
0153 __isl_give isl_set *isl_schedule_node_band_get_ast_isolate_option(
0154 __isl_keep isl_schedule_node *node);
0155 __isl_export
0156 isl_size isl_schedule_node_band_n_member(__isl_keep isl_schedule_node *node);
0157 __isl_export
0158 isl_bool isl_schedule_node_band_member_get_coincident(
0159 __isl_keep isl_schedule_node *node, int pos);
0160 __isl_export
0161 __isl_give isl_schedule_node *isl_schedule_node_band_member_set_coincident(
0162 __isl_take isl_schedule_node *node, int pos, int coincident);
0163 __isl_export
0164 isl_bool isl_schedule_node_band_get_permutable(
0165 __isl_keep isl_schedule_node *node);
0166 __isl_export
0167 __isl_give isl_schedule_node *isl_schedule_node_band_set_permutable(
0168 __isl_take isl_schedule_node *node, int permutable);
0169
0170 isl_stat isl_options_set_tile_scale_tile_loops(isl_ctx *ctx, int val);
0171 int isl_options_get_tile_scale_tile_loops(isl_ctx *ctx);
0172 isl_stat isl_options_set_tile_shift_point_loops(isl_ctx *ctx, int val);
0173 int isl_options_get_tile_shift_point_loops(isl_ctx *ctx);
0174
0175 __isl_export
0176 __isl_give isl_schedule_node *isl_schedule_node_band_scale(
0177 __isl_take isl_schedule_node *node, __isl_take isl_multi_val *mv);
0178 __isl_export
0179 __isl_give isl_schedule_node *isl_schedule_node_band_scale_down(
0180 __isl_take isl_schedule_node *node, __isl_take isl_multi_val *mv);
0181 __isl_export
0182 __isl_give isl_schedule_node *isl_schedule_node_band_mod(
0183 __isl_take isl_schedule_node *node, __isl_take isl_multi_val *mv);
0184 __isl_export
0185 __isl_give isl_schedule_node *isl_schedule_node_band_shift(
0186 __isl_take isl_schedule_node *node,
0187 __isl_take isl_multi_union_pw_aff *shift);
0188 __isl_export
0189 __isl_give isl_schedule_node *isl_schedule_node_band_tile(
0190 __isl_take isl_schedule_node *node, __isl_take isl_multi_val *sizes);
0191 __isl_give isl_schedule_node *isl_schedule_node_band_sink(
0192 __isl_take isl_schedule_node *node);
0193 __isl_export
0194 __isl_give isl_schedule_node *isl_schedule_node_band_split(
0195 __isl_take isl_schedule_node *node, int pos);
0196
0197 __isl_export
0198 __isl_give isl_set *isl_schedule_node_context_get_context(
0199 __isl_keep isl_schedule_node *node);
0200 __isl_export
0201 __isl_give isl_union_set *isl_schedule_node_domain_get_domain(
0202 __isl_keep isl_schedule_node *node);
0203 __isl_export
0204 __isl_give isl_union_map *isl_schedule_node_expansion_get_expansion(
0205 __isl_keep isl_schedule_node *node);
0206 __isl_export
0207 __isl_give isl_union_pw_multi_aff *isl_schedule_node_expansion_get_contraction(
0208 __isl_keep isl_schedule_node *node);
0209 __isl_export
0210 __isl_give isl_union_map *isl_schedule_node_extension_get_extension(
0211 __isl_keep isl_schedule_node *node);
0212 __isl_export
0213 __isl_give isl_union_set *isl_schedule_node_filter_get_filter(
0214 __isl_keep isl_schedule_node *node);
0215 __isl_export
0216 __isl_give isl_set *isl_schedule_node_guard_get_guard(
0217 __isl_keep isl_schedule_node *node);
0218 __isl_give isl_id *isl_schedule_node_mark_get_id(
0219 __isl_keep isl_schedule_node *node);
0220
0221 isl_size isl_schedule_node_get_schedule_depth(
0222 __isl_keep isl_schedule_node *node);
0223 __isl_give isl_union_set *isl_schedule_node_get_domain(
0224 __isl_keep isl_schedule_node *node);
0225 __isl_give isl_union_set *isl_schedule_node_get_universe_domain(
0226 __isl_keep isl_schedule_node *node);
0227 __isl_export
0228 __isl_give isl_multi_union_pw_aff *
0229 isl_schedule_node_get_prefix_schedule_multi_union_pw_aff(
0230 __isl_keep isl_schedule_node *node);
0231 __isl_export
0232 __isl_give isl_union_pw_multi_aff *
0233 isl_schedule_node_get_prefix_schedule_union_pw_multi_aff(
0234 __isl_keep isl_schedule_node *node);
0235 __isl_export
0236 __isl_give isl_union_map *isl_schedule_node_get_prefix_schedule_union_map(
0237 __isl_keep isl_schedule_node *node);
0238 __isl_give isl_union_map *isl_schedule_node_get_prefix_schedule_relation(
0239 __isl_keep isl_schedule_node *node);
0240 __isl_give isl_union_map *isl_schedule_node_get_subtree_schedule_union_map(
0241 __isl_keep isl_schedule_node *node);
0242 __isl_give isl_union_map *isl_schedule_node_get_subtree_expansion(
0243 __isl_keep isl_schedule_node *node);
0244 __isl_give isl_union_pw_multi_aff *isl_schedule_node_get_subtree_contraction(
0245 __isl_keep isl_schedule_node *node);
0246
0247 __isl_export
0248 __isl_give isl_schedule_node *isl_schedule_node_insert_context(
0249 __isl_take isl_schedule_node *node, __isl_take isl_set *context);
0250 __isl_export
0251 __isl_give isl_schedule_node *isl_schedule_node_insert_partial_schedule(
0252 __isl_take isl_schedule_node *node,
0253 __isl_take isl_multi_union_pw_aff *schedule);
0254 __isl_export
0255 __isl_give isl_schedule_node *isl_schedule_node_insert_filter(
0256 __isl_take isl_schedule_node *node, __isl_take isl_union_set *filter);
0257 __isl_export
0258 __isl_give isl_schedule_node *isl_schedule_node_insert_guard(
0259 __isl_take isl_schedule_node *node, __isl_take isl_set *context);
0260 __isl_export
0261 __isl_give isl_schedule_node *isl_schedule_node_insert_mark(
0262 __isl_take isl_schedule_node *node, __isl_take isl_id *mark);
0263 __isl_export
0264 __isl_give isl_schedule_node *isl_schedule_node_insert_sequence(
0265 __isl_take isl_schedule_node *node,
0266 __isl_take isl_union_set_list *filters);
0267 __isl_export
0268 __isl_give isl_schedule_node *isl_schedule_node_insert_set(
0269 __isl_take isl_schedule_node *node,
0270 __isl_take isl_union_set_list *filters);
0271
0272 __isl_give isl_schedule_node *isl_schedule_node_cut(
0273 __isl_take isl_schedule_node *node);
0274 __isl_give isl_schedule_node *isl_schedule_node_delete(
0275 __isl_take isl_schedule_node *node);
0276
0277 __isl_export
0278 __isl_give isl_schedule_node *isl_schedule_node_order_before(
0279 __isl_take isl_schedule_node *node, __isl_take isl_union_set *filter);
0280 __isl_export
0281 __isl_give isl_schedule_node *isl_schedule_node_order_after(
0282 __isl_take isl_schedule_node *node, __isl_take isl_union_set *filter);
0283
0284 __isl_export
0285 __isl_give isl_schedule_node *isl_schedule_node_graft_before(
0286 __isl_take isl_schedule_node *node,
0287 __isl_take isl_schedule_node *graft);
0288 __isl_export
0289 __isl_give isl_schedule_node *isl_schedule_node_graft_after(
0290 __isl_take isl_schedule_node *node,
0291 __isl_take isl_schedule_node *graft);
0292
0293 __isl_give isl_schedule_node *isl_schedule_node_reset_user(
0294 __isl_take isl_schedule_node *node);
0295 __isl_give isl_schedule_node *isl_schedule_node_align_params(
0296 __isl_take isl_schedule_node *node, __isl_take isl_space *space);
0297
0298 __isl_give isl_printer *isl_printer_print_schedule_node(
0299 __isl_take isl_printer *p, __isl_keep isl_schedule_node *node);
0300 void isl_schedule_node_dump(__isl_keep isl_schedule_node *node);
0301 __isl_give char *isl_schedule_node_to_str(__isl_keep isl_schedule_node *node);
0302
0303 #if defined(__cplusplus)
0304 }
0305 #endif
0306
0307 #endif