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