1 #ifndef ISL_AST_TYPE_H
2 #define ISL_AST_TYPE_H
3 
4 #include <isl/list.h>
5 
6 #if defined(__cplusplus)
7 extern "C" {
8 #endif
9 
10 struct __isl_export isl_ast_expr;
11 typedef struct isl_ast_expr isl_ast_expr;
12 
13 struct __isl_export isl_ast_node;
14 typedef struct isl_ast_node isl_ast_node;
15 
16 enum isl_ast_expr_op_type {
17 	isl_ast_expr_op_error = -1,
18 	isl_ast_expr_op_and,
19 	isl_ast_expr_op_and_then,
20 	isl_ast_expr_op_or,
21 	isl_ast_expr_op_or_else,
22 	isl_ast_expr_op_max,
23 	isl_ast_expr_op_min,
24 	isl_ast_expr_op_minus,
25 	isl_ast_expr_op_add,
26 	isl_ast_expr_op_sub,
27 	isl_ast_expr_op_mul,
28 	isl_ast_expr_op_div,
29 	isl_ast_expr_op_fdiv_q,	/* Round towards -infty */
30 	isl_ast_expr_op_pdiv_q,	/* Dividend is non-negative */
31 	isl_ast_expr_op_pdiv_r,	/* Dividend is non-negative */
32 	isl_ast_expr_op_zdiv_r,	/* Result only compared against zero */
33 	isl_ast_expr_op_cond,
34 	isl_ast_expr_op_select,
35 	isl_ast_expr_op_eq,
36 	isl_ast_expr_op_le,
37 	isl_ast_expr_op_lt,
38 	isl_ast_expr_op_ge,
39 	isl_ast_expr_op_gt,
40 	isl_ast_expr_op_call,
41 	isl_ast_expr_op_access,
42 	isl_ast_expr_op_member,
43 	isl_ast_expr_op_address_of
44 };
45 
46 #define isl_ast_op_type		isl_ast_expr_op_type
47 #define isl_ast_op_error	isl_ast_expr_op_error
48 #define isl_ast_op_and		isl_ast_expr_op_and
49 #define isl_ast_op_and_then	isl_ast_expr_op_and_then
50 #define isl_ast_op_or		isl_ast_expr_op_or
51 #define isl_ast_op_or_else	isl_ast_expr_op_or_else
52 #define isl_ast_op_max		isl_ast_expr_op_max
53 #define isl_ast_op_min		isl_ast_expr_op_min
54 #define isl_ast_op_minus	isl_ast_expr_op_minus
55 #define isl_ast_op_add		isl_ast_expr_op_add
56 #define isl_ast_op_sub		isl_ast_expr_op_sub
57 #define isl_ast_op_mul		isl_ast_expr_op_mul
58 #define isl_ast_op_div		isl_ast_expr_op_div
59 #define isl_ast_op_fdiv_q	isl_ast_expr_op_fdiv_q
60 #define isl_ast_op_pdiv_q	isl_ast_expr_op_pdiv_q
61 #define isl_ast_op_pdiv_r	isl_ast_expr_op_pdiv_r
62 #define isl_ast_op_zdiv_r	isl_ast_expr_op_zdiv_r
63 #define isl_ast_op_cond		isl_ast_expr_op_cond
64 #define isl_ast_op_select	isl_ast_expr_op_select
65 #define isl_ast_op_eq		isl_ast_expr_op_eq
66 #define isl_ast_op_le		isl_ast_expr_op_le
67 #define isl_ast_op_lt		isl_ast_expr_op_lt
68 #define isl_ast_op_ge		isl_ast_expr_op_ge
69 #define isl_ast_op_gt		isl_ast_expr_op_gt
70 #define isl_ast_op_call		isl_ast_expr_op_call
71 #define isl_ast_op_access	isl_ast_expr_op_access
72 #define isl_ast_op_member	isl_ast_expr_op_member
73 #define isl_ast_op_address_of	isl_ast_expr_op_address_of
74 
75 enum isl_ast_expr_type {
76 	isl_ast_expr_error = -1,
77 	isl_ast_expr_op,
78 	isl_ast_expr_id,
79 	isl_ast_expr_int
80 };
81 
82 enum isl_ast_node_type {
83 	isl_ast_node_error = -1,
84 	isl_ast_node_for = 1,
85 	isl_ast_node_if,
86 	isl_ast_node_block,
87 	isl_ast_node_mark,
88 	isl_ast_node_user
89 };
90 
91 enum isl_ast_loop_type {
92 	isl_ast_loop_error = -1,
93 	isl_ast_loop_default = 0,
94 	isl_ast_loop_atomic,
95 	isl_ast_loop_unroll,
96 	isl_ast_loop_separate
97 };
98 
99 struct isl_ast_print_options;
100 typedef struct isl_ast_print_options isl_ast_print_options;
101 
102 ISL_DECLARE_LIST_TYPE(ast_expr)
103 ISL_DECLARE_EXPORTED_LIST_TYPE(ast_node)
104 
105 #if defined(__cplusplus)
106 }
107 #endif
108 
109 #endif
110