3 #if defined(__cplusplus)
8 enum clast_expr_type
{ expr_term
, expr_bin
, expr_red
};
11 enum clast_expr_type type
;
15 struct clast_expr expr
;
20 enum clast_red_type
{ clast_red_sum
, clast_red_min
, clast_red_max
};
21 struct clast_reduction
{
22 struct clast_expr expr
;
23 enum clast_red_type type
;
25 struct clast_expr
* elts
[1];
28 enum clast_bin_type
{ clast_bin_fdiv
, clast_bin_cdiv
,
29 clast_bin_div
, clast_bin_mod
};
31 struct clast_expr expr
;
32 enum clast_bin_type type
;
33 struct clast_expr
* LHS
;
38 struct clast_stmt_op
{
39 void (*free
)(struct clast_stmt
*);
42 #define CLAST_STMT_IS_A(stmt, type) ((stmt)->op == &(type))
44 extern struct clast_stmt_op stmt_root
;
45 extern struct clast_stmt_op stmt_ass
;
46 extern struct clast_stmt_op stmt_user
;
47 extern struct clast_stmt_op stmt_block
;
48 extern struct clast_stmt_op stmt_for
;
49 extern struct clast_stmt_op stmt_guard
;
52 struct clast_stmt_op
*op
;
53 struct clast_stmt
*next
;
57 struct clast_stmt stmt
;
58 CloogNames
* names
; /**< Names of iterators and parameters. */
61 struct clast_assignment
{
62 struct clast_stmt stmt
;
64 struct clast_expr
* RHS
;
68 struct clast_stmt stmt
;
69 struct clast_stmt
* body
;
72 struct clast_user_stmt
{
73 struct clast_stmt stmt
;
74 CloogStatement
* statement
;
75 struct clast_stmt
* substitutions
;
79 struct clast_stmt stmt
;
80 const char * iterator
;
81 struct clast_expr
* LB
;
82 struct clast_expr
* UB
;
84 struct clast_stmt
* body
;
87 struct clast_equation
{
88 struct clast_expr
* LHS
;
89 struct clast_expr
* RHS
;
94 struct clast_stmt stmt
;
95 struct clast_stmt
* then
;
97 struct clast_equation eq
[1];
101 struct clast_stmt
*cloog_clast_create(CloogProgram
*program
,
102 CloogOptions
*options
);
103 void cloog_clast_free(struct clast_stmt
*s
);
105 struct clast_term
*new_clast_term(Value c
, const char *v
);
106 struct clast_binary
*new_clast_binary(enum clast_bin_type t
,
107 struct clast_expr
*lhs
, Value rhs
);
108 struct clast_reduction
*new_clast_reduction(enum clast_red_type t
, int n
);
109 struct clast_root
*new_clast_root(CloogNames
*names
);
110 struct clast_assignment
*new_clast_assignment(const char *lhs
,
111 struct clast_expr
*rhs
);
112 struct clast_user_stmt
*new_clast_user_stmt(CloogStatement
*stmt
,
113 struct clast_stmt
*subs
);
114 struct clast_block
*new_clast_block(void);
115 struct clast_for
*new_clast_for(const char *it
, struct clast_expr
*LB
,
116 struct clast_expr
*UB
, Value stride
);
117 struct clast_guard
*new_clast_guard(int n
);
119 void free_clast_term(struct clast_term
*t
);
120 void free_clast_binary(struct clast_binary
*b
);
121 void free_clast_reduction(struct clast_reduction
*r
);
122 void free_clast_expr(struct clast_expr
*e
);
123 void free_clast_stmt(struct clast_stmt
*s
);
125 int clast_expr_equal(struct clast_expr
*e1
, struct clast_expr
*e2
);
127 #if defined(__cplusplus)
130 #endif /* define _H */