1 #ifndef ISL_AST_PRIVATE_H
2 #define ISL_AST_PRIVATE_H
11 /* An expression is either an integer, an identifier or an operation
12 * with zero or more arguments.
19 enum isl_ast_expr_type type
;
25 enum isl_ast_op_type op
;
33 #define EL isl_ast_expr
35 #include <isl_list_templ.h>
37 __isl_give isl_ast_expr
*isl_ast_expr_alloc_int(isl_ctx
*ctx
, isl_int i
);
38 __isl_give isl_ast_expr
*isl_ast_expr_alloc_int_si(isl_ctx
*ctx
, int i
);
39 __isl_give isl_ast_expr
*isl_ast_expr_alloc_op(isl_ctx
*ctx
,
40 enum isl_ast_op_type op
, int n_arg
);
41 __isl_give isl_ast_expr
*isl_ast_expr_alloc_binary(enum isl_ast_op_type type
,
42 __isl_take isl_ast_expr
*expr1
, __isl_take isl_ast_expr
*expr2
);
45 #define EL isl_ast_node
47 #include <isl_list_templ.h>
49 /* A node is either a block, an if, a for or a user node.
50 * "else_node" is NULL if the if node does not have an else branch.
51 * "cond" and "inc" are NULL for degenerate for nodes.
57 enum isl_ast_node_type type
;
61 isl_ast_node_list
*children
;
66 isl_ast_node
*else_node
;
69 unsigned degenerate
: 1;
70 isl_ast_expr
*iterator
;
84 __isl_give isl_ast_node
*isl_ast_node_alloc_for(__isl_take isl_id
*id
);
85 __isl_give isl_ast_node
*isl_ast_node_for_mark_degenerate(
86 __isl_take isl_ast_node
*node
);
87 __isl_give isl_ast_node
*isl_ast_node_alloc_if(__isl_take isl_ast_expr
*guard
);
88 __isl_give isl_ast_node
*isl_ast_node_alloc_block(
89 __isl_take isl_ast_node_list
*list
);
90 __isl_give isl_ast_node
*isl_ast_node_from_ast_node_list(
91 __isl_take isl_ast_node_list
*list
);
92 __isl_give isl_ast_node
*isl_ast_node_for_set_body(
93 __isl_take isl_ast_node
*node
, __isl_take isl_ast_node
*body
);
94 __isl_give isl_ast_node
*isl_ast_node_if_set_then(
95 __isl_take isl_ast_node
*node
, __isl_take isl_ast_node
*child
);
97 struct isl_ast_print_options
{
98 __isl_give isl_printer
*(*print_for
)(__isl_take isl_printer
*p
,
99 __isl_keep isl_ast_node
*node
, void *user
);
100 void *print_for_user
;
101 __isl_give isl_printer
*(*print_user
)(__isl_take isl_printer
*p
,
102 __isl_keep isl_ast_node
*node
, void *user
);
103 void *print_user_user
;
106 __isl_give isl_printer
*isl_ast_node_list_print(
107 __isl_keep isl_ast_node_list
*list
, __isl_take isl_printer
*p
,
108 __isl_keep isl_ast_print_options
*options
);