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_si(isl_ctx
*ctx
, int i
);
38 __isl_give isl_ast_expr
*isl_ast_expr_alloc_op(isl_ctx
*ctx
,
39 enum isl_ast_op_type op
, int n_arg
);
40 __isl_give isl_ast_expr
*isl_ast_expr_alloc_binary(enum isl_ast_op_type type
,
41 __isl_take isl_ast_expr
*expr1
, __isl_take isl_ast_expr
*expr2
);
44 #define EL isl_ast_node
46 #include <isl_list_templ.h>
48 /* A node is either a block, an if, a for or a user node.
49 * "else_node" is NULL if the if node does not have an else branch.
50 * "cond" and "inc" are NULL for degenerate for nodes.
56 enum isl_ast_node_type type
;
60 isl_ast_node_list
*children
;
65 isl_ast_node
*else_node
;
68 unsigned degenerate
: 1;
69 isl_ast_expr
*iterator
;
83 __isl_give isl_ast_node
*isl_ast_node_alloc_for(__isl_take isl_id
*id
);
84 __isl_give isl_ast_node
*isl_ast_node_for_mark_degenerate(
85 __isl_take isl_ast_node
*node
);
86 __isl_give isl_ast_node
*isl_ast_node_alloc_if(__isl_take isl_ast_expr
*guard
);
87 __isl_give isl_ast_node
*isl_ast_node_alloc_block(
88 __isl_take isl_ast_node_list
*list
);
89 __isl_give isl_ast_node
*isl_ast_node_from_ast_node_list(
90 __isl_take isl_ast_node_list
*list
);
91 __isl_give isl_ast_node
*isl_ast_node_for_set_body(
92 __isl_take isl_ast_node
*node
, __isl_take isl_ast_node
*body
);
93 __isl_give isl_ast_node
*isl_ast_node_if_set_then(
94 __isl_take isl_ast_node
*node
, __isl_take isl_ast_node
*child
);
96 struct isl_ast_print_options
{
100 __isl_give isl_printer
*(*print_for
)(__isl_take isl_printer
*p
,
101 __isl_take isl_ast_print_options
*options
,
102 __isl_keep isl_ast_node
*node
, void *user
);
103 void *print_for_user
;
104 __isl_give isl_printer
*(*print_user
)(__isl_take isl_printer
*p
,
105 __isl_take isl_ast_print_options
*options
,
106 __isl_keep isl_ast_node
*node
, void *user
);
107 void *print_user_user
;
110 __isl_give isl_printer
*isl_ast_node_list_print(
111 __isl_keep isl_ast_node_list
*list
, __isl_take isl_printer
*p
,
112 __isl_keep isl_ast_print_options
*options
);