Fix compilation with -Wc++-compat warning.
[cloog-ppl.git] / include / cloog / clast.h
blob95e2257d434567090d64db535408f06df8d87945
1 #ifndef CLOOG_CLAST_H
2 #define CLOOG_CLAST_H
3 #if defined(__cplusplus)
4 extern "C"
6 #endif
8 enum clast_expr_type { expr_term, expr_bin, expr_red };
10 struct clast_expr {
11 enum clast_expr_type type;
14 struct clast_term {
15 struct clast_expr expr;
16 Value val;
17 const char * var;
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;
24 int n;
25 struct clast_expr* elts[1];
28 enum clast_bin_type { clast_bin_fdiv, clast_bin_cdiv,
29 clast_bin_div, clast_bin_mod };
30 struct clast_binary {
31 struct clast_expr expr;
32 enum clast_bin_type type;
33 struct clast_expr* LHS;
34 Value RHS;
37 struct clast_stmt;
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;
51 struct clast_stmt {
52 struct clast_stmt_op *op;
53 struct clast_stmt *next;
56 struct clast_root {
57 struct clast_stmt stmt;
58 CloogNames * names; /**< Names of iterators and parameters. */
61 struct clast_assignment {
62 struct clast_stmt stmt;
63 const char * LHS;
64 struct clast_expr * RHS;
67 struct clast_block {
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;
78 struct clast_for {
79 struct clast_stmt stmt;
80 const char * iterator;
81 struct clast_expr * LB;
82 struct clast_expr * UB;
83 Value stride;
84 struct clast_stmt * body;
87 struct clast_equation {
88 struct clast_expr * LHS;
89 struct clast_expr * RHS;
90 int sign;
93 struct clast_guard {
94 struct clast_stmt stmt;
95 struct clast_stmt * then;
96 int n;
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)
129 #endif
130 #endif /* define _H */