1 #ifndef ISL_AST_H 2 #define ISL_AST_H 3 4 #include <isl/ctx.h> 5 #include <isl/ast_type.h> 6 #include <isl/id_type.h> 7 #include <isl/id_to_ast_expr.h> 8 #include <isl/val_type.h> 9 #include <isl/list.h> 10 #include <isl/printer.h> 11 12 #if defined(__cplusplus) 13 extern "C" { 14 #endif 15 16 isl_stat isl_options_set_ast_iterator_type(isl_ctx *ctx, const char *val); 17 const char *isl_options_get_ast_iterator_type(isl_ctx *ctx); 18 19 isl_stat isl_options_set_ast_always_print_block(isl_ctx *ctx, int val); 20 int isl_options_get_ast_always_print_block(isl_ctx *ctx); 21 22 isl_stat isl_options_set_ast_print_outermost_block(isl_ctx *ctx, int val); 23 int isl_options_get_ast_print_outermost_block(isl_ctx *ctx); 24 25 __isl_give isl_ast_expr *isl_ast_expr_from_val(__isl_take isl_val *v); 26 __isl_give isl_ast_expr *isl_ast_expr_from_id(__isl_take isl_id *id); 27 __isl_give isl_ast_expr *isl_ast_expr_neg(__isl_take isl_ast_expr *expr); 28 __isl_give isl_ast_expr *isl_ast_expr_add(__isl_take isl_ast_expr *expr1, 29 __isl_take isl_ast_expr *expr2); 30 __isl_give isl_ast_expr *isl_ast_expr_sub(__isl_take isl_ast_expr *expr1, 31 __isl_take isl_ast_expr *expr2); 32 __isl_give isl_ast_expr *isl_ast_expr_mul(__isl_take isl_ast_expr *expr1, 33 __isl_take isl_ast_expr *expr2); 34 __isl_give isl_ast_expr *isl_ast_expr_div(__isl_take isl_ast_expr *expr1, 35 __isl_take isl_ast_expr *expr2); 36 __isl_give isl_ast_expr *isl_ast_expr_pdiv_q(__isl_take isl_ast_expr *expr1, 37 __isl_take isl_ast_expr *expr2); 38 __isl_give isl_ast_expr *isl_ast_expr_pdiv_r(__isl_take isl_ast_expr *expr1, 39 __isl_take isl_ast_expr *expr2); 40 __isl_give isl_ast_expr *isl_ast_expr_and(__isl_take isl_ast_expr *expr1, 41 __isl_take isl_ast_expr *expr2); 42 __isl_give isl_ast_expr *isl_ast_expr_and_then(__isl_take isl_ast_expr *expr1, 43 __isl_take isl_ast_expr *expr2); 44 __isl_give isl_ast_expr *isl_ast_expr_or(__isl_take isl_ast_expr *expr1, 45 __isl_take isl_ast_expr *expr2); 46 __isl_give isl_ast_expr *isl_ast_expr_or_else(__isl_take isl_ast_expr *expr1, 47 __isl_take isl_ast_expr *expr2); 48 __isl_give isl_ast_expr *isl_ast_expr_le(__isl_take isl_ast_expr *expr1, 49 __isl_take isl_ast_expr *expr2); 50 __isl_give isl_ast_expr *isl_ast_expr_lt(__isl_take isl_ast_expr *expr1, 51 __isl_take isl_ast_expr *expr2); 52 __isl_give isl_ast_expr *isl_ast_expr_ge(__isl_take isl_ast_expr *expr1, 53 __isl_take isl_ast_expr *expr2); 54 __isl_give isl_ast_expr *isl_ast_expr_gt(__isl_take isl_ast_expr *expr1, 55 __isl_take isl_ast_expr *expr2); 56 __isl_give isl_ast_expr *isl_ast_expr_eq(__isl_take isl_ast_expr *expr1, 57 __isl_take isl_ast_expr *expr2); 58 __isl_give isl_ast_expr *isl_ast_expr_access(__isl_take isl_ast_expr *array, 59 __isl_take isl_ast_expr_list *indices); 60 __isl_give isl_ast_expr *isl_ast_expr_call(__isl_take isl_ast_expr *function, 61 __isl_take isl_ast_expr_list *arguments); 62 __isl_give isl_ast_expr *isl_ast_expr_address_of(__isl_take isl_ast_expr *expr); 63 64 __isl_give isl_ast_expr *isl_ast_expr_copy(__isl_keep isl_ast_expr *expr); 65 __isl_null isl_ast_expr *isl_ast_expr_free(__isl_take isl_ast_expr *expr); 66 67 isl_ctx *isl_ast_expr_get_ctx(__isl_keep isl_ast_expr *expr); 68 __isl_subclass(isl_ast_expr) 69 enum isl_ast_expr_type isl_ast_expr_get_type(__isl_keep isl_ast_expr *expr); 70 __isl_export 71 __isl_give isl_val *isl_ast_expr_int_get_val(__isl_keep isl_ast_expr *expr); 72 __isl_give isl_val *isl_ast_expr_get_val(__isl_keep isl_ast_expr *expr); 73 __isl_export 74 __isl_give isl_id *isl_ast_expr_id_get_id(__isl_keep isl_ast_expr *expr); 75 __isl_give isl_id *isl_ast_expr_get_id(__isl_keep isl_ast_expr *expr); 76 77 __isl_subclass(isl_ast_expr_op) 78 enum isl_ast_expr_op_type isl_ast_expr_op_get_type( 79 __isl_keep isl_ast_expr *expr); 80 enum isl_ast_expr_op_type isl_ast_expr_get_op_type( 81 __isl_keep isl_ast_expr *expr); 82 __isl_export 83 isl_size isl_ast_expr_op_get_n_arg(__isl_keep isl_ast_expr *expr); 84 isl_size isl_ast_expr_get_op_n_arg(__isl_keep isl_ast_expr *expr); 85 __isl_export 86 __isl_give isl_ast_expr *isl_ast_expr_op_get_arg(__isl_keep isl_ast_expr *expr, 87 int pos); 88 __isl_give isl_ast_expr *isl_ast_expr_get_op_arg(__isl_keep isl_ast_expr *expr, 89 int pos); 90 __isl_give isl_ast_expr *isl_ast_expr_set_op_arg(__isl_take isl_ast_expr *expr, 91 int pos, __isl_take isl_ast_expr *arg); 92 93 isl_bool isl_ast_expr_is_equal(__isl_keep isl_ast_expr *expr1, 94 __isl_keep isl_ast_expr *expr2); 95 96 __isl_give isl_ast_expr *isl_ast_expr_substitute_ids( 97 __isl_take isl_ast_expr *expr, __isl_take isl_id_to_ast_expr *id2expr); 98 99 __isl_give isl_printer *isl_printer_print_ast_expr(__isl_take isl_printer *p, 100 __isl_keep isl_ast_expr *expr); 101 void isl_ast_expr_dump(__isl_keep isl_ast_expr *expr); 102 __isl_give char *isl_ast_expr_to_str(__isl_keep isl_ast_expr *expr); 103 __isl_export 104 __isl_give char *isl_ast_expr_to_C_str(__isl_keep isl_ast_expr *expr); 105 106 __isl_constructor 107 __isl_give isl_ast_node *isl_ast_node_user_from_expr( 108 __isl_take isl_ast_expr *expr); 109 __isl_give isl_ast_node *isl_ast_node_alloc_user(__isl_take isl_ast_expr *expr); 110 __isl_give isl_ast_node *isl_ast_node_copy(__isl_keep isl_ast_node *node); 111 __isl_null isl_ast_node *isl_ast_node_free(__isl_take isl_ast_node *node); 112 113 isl_ctx *isl_ast_node_get_ctx(__isl_keep isl_ast_node *node); 114 __isl_subclass(isl_ast_node) 115 enum isl_ast_node_type isl_ast_node_get_type(__isl_keep isl_ast_node *node); 116 117 __isl_give isl_ast_node *isl_ast_node_set_annotation( 118 __isl_take isl_ast_node *node, __isl_take isl_id *annotation); 119 __isl_give isl_id *isl_ast_node_get_annotation(__isl_keep isl_ast_node *node); 120 121 __isl_export 122 __isl_give isl_ast_expr *isl_ast_node_for_get_iterator( 123 __isl_keep isl_ast_node *node); 124 __isl_export 125 __isl_give isl_ast_expr *isl_ast_node_for_get_init( 126 __isl_keep isl_ast_node *node); 127 __isl_export 128 __isl_give isl_ast_expr *isl_ast_node_for_get_cond( 129 __isl_keep isl_ast_node *node); 130 __isl_export 131 __isl_give isl_ast_expr *isl_ast_node_for_get_inc( 132 __isl_keep isl_ast_node *node); 133 __isl_export 134 __isl_give isl_ast_node *isl_ast_node_for_get_body( 135 __isl_keep isl_ast_node *node); 136 __isl_export 137 isl_bool isl_ast_node_for_is_degenerate(__isl_keep isl_ast_node *node); 138 139 __isl_export 140 __isl_give isl_ast_expr *isl_ast_node_if_get_cond( 141 __isl_keep isl_ast_node *node); 142 __isl_export 143 __isl_give isl_ast_node *isl_ast_node_if_get_then_node( 144 __isl_keep isl_ast_node *node); 145 __isl_give isl_ast_node *isl_ast_node_if_get_then( 146 __isl_keep isl_ast_node *node); 147 __isl_export 148 isl_bool isl_ast_node_if_has_else_node(__isl_keep isl_ast_node *node); 149 isl_bool isl_ast_node_if_has_else(__isl_keep isl_ast_node *node); 150 __isl_export 151 __isl_give isl_ast_node *isl_ast_node_if_get_else_node( 152 __isl_keep isl_ast_node *node); 153 __isl_give isl_ast_node *isl_ast_node_if_get_else( 154 __isl_keep isl_ast_node *node); 155 156 __isl_constructor 157 __isl_give isl_ast_node *isl_ast_node_block_from_children( 158 __isl_take isl_ast_node_list *list); 159 __isl_export 160 __isl_give isl_ast_node_list *isl_ast_node_block_get_children( 161 __isl_keep isl_ast_node *node); 162 163 __isl_export 164 __isl_give isl_id *isl_ast_node_mark_get_id(__isl_keep isl_ast_node *node); 165 __isl_export 166 __isl_give isl_ast_node *isl_ast_node_mark_get_node( 167 __isl_keep isl_ast_node *node); 168 169 __isl_export 170 __isl_give isl_ast_expr *isl_ast_node_user_get_expr( 171 __isl_keep isl_ast_node *node); 172 173 isl_stat isl_ast_node_foreach_descendant_top_down( 174 __isl_keep isl_ast_node *node, 175 isl_bool (*fn)(__isl_keep isl_ast_node *node, void *user), void *user); 176 __isl_export 177 __isl_give isl_ast_node *isl_ast_node_map_descendant_bottom_up( 178 __isl_take isl_ast_node *node, __isl_give isl_ast_node *(*fn)( 179 __isl_take isl_ast_node *node, void *user), void *user); 180 181 __isl_give isl_printer *isl_printer_print_ast_node(__isl_take isl_printer *p, 182 __isl_keep isl_ast_node *node); 183 void isl_ast_node_dump(__isl_keep isl_ast_node *node); 184 __isl_give char *isl_ast_node_to_str(__isl_keep isl_ast_node *node); 185 186 __isl_give isl_ast_print_options *isl_ast_print_options_alloc(isl_ctx *ctx); 187 __isl_give isl_ast_print_options *isl_ast_print_options_copy( 188 __isl_keep isl_ast_print_options *options); 189 __isl_null isl_ast_print_options *isl_ast_print_options_free( 190 __isl_take isl_ast_print_options *options); 191 isl_ctx *isl_ast_print_options_get_ctx( 192 __isl_keep isl_ast_print_options *options); 193 194 __isl_give isl_ast_print_options *isl_ast_print_options_set_print_user( 195 __isl_take isl_ast_print_options *options, 196 __isl_give isl_printer *(*print_user)(__isl_take isl_printer *p, 197 __isl_take isl_ast_print_options *options, 198 __isl_keep isl_ast_node *node, void *user), 199 void *user); 200 __isl_give isl_ast_print_options *isl_ast_print_options_set_print_for( 201 __isl_take isl_ast_print_options *options, 202 __isl_give isl_printer *(*print_for)(__isl_take isl_printer *p, 203 __isl_take isl_ast_print_options *options, 204 __isl_keep isl_ast_node *node, void *user), 205 void *user); 206 207 isl_stat isl_options_set_ast_print_macro_once(isl_ctx *ctx, int val); 208 int isl_options_get_ast_print_macro_once(isl_ctx *ctx); 209 210 isl_stat isl_ast_expr_foreach_ast_expr_op_type(__isl_keep isl_ast_expr *expr, 211 isl_stat (*fn)(enum isl_ast_expr_op_type type, void *user), void *user); 212 isl_stat isl_ast_expr_foreach_ast_op_type(__isl_keep isl_ast_expr *expr, 213 isl_stat (*fn)(enum isl_ast_expr_op_type type, void *user), void *user); 214 isl_stat isl_ast_node_foreach_ast_expr_op_type(__isl_keep isl_ast_node *node, 215 isl_stat (*fn)(enum isl_ast_expr_op_type type, void *user), void *user); 216 isl_stat isl_ast_node_foreach_ast_op_type(__isl_keep isl_ast_node *node, 217 isl_stat (*fn)(enum isl_ast_expr_op_type type, void *user), void *user); 218 __isl_give isl_printer *isl_ast_expr_op_type_set_print_name( 219 __isl_take isl_printer *p, enum isl_ast_expr_op_type type, 220 __isl_keep const char *name); 221 __isl_give isl_printer *isl_ast_op_type_set_print_name( 222 __isl_take isl_printer *p, enum isl_ast_expr_op_type type, 223 __isl_keep const char *name); 224 __isl_give isl_printer *isl_ast_expr_op_type_print_macro( 225 enum isl_ast_expr_op_type type, __isl_take isl_printer *p); 226 __isl_give isl_printer *isl_ast_op_type_print_macro( 227 enum isl_ast_expr_op_type type, __isl_take isl_printer *p); 228 __isl_give isl_printer *isl_ast_expr_print_macros( 229 __isl_keep isl_ast_expr *expr, __isl_take isl_printer *p); 230 __isl_give isl_printer *isl_ast_node_print_macros( 231 __isl_keep isl_ast_node *node, __isl_take isl_printer *p); 232 __isl_give isl_printer *isl_ast_node_print(__isl_keep isl_ast_node *node, 233 __isl_take isl_printer *p, 234 __isl_take isl_ast_print_options *options); 235 __isl_give isl_printer *isl_ast_node_for_print(__isl_keep isl_ast_node *node, 236 __isl_take isl_printer *p, 237 __isl_take isl_ast_print_options *options); 238 __isl_give isl_printer *isl_ast_node_if_print(__isl_keep isl_ast_node *node, 239 __isl_take isl_printer *p, 240 __isl_take isl_ast_print_options *options); 241 242 __isl_export 243 __isl_give char *isl_ast_node_to_C_str(__isl_keep isl_ast_node *node); 244 245 ISL_DECLARE_LIST_FN(ast_expr) 246 ISL_DECLARE_EXPORTED_LIST_FN(ast_node) 247 248 #if defined(__cplusplus) 249 } 250 #endif 251 252 #endif 253