add pet_expr_foreach_call_expr
[pet.git] / expr.h
blob57f65d019daa76b44693d3595e2af0b56e91ef02
1 #ifndef PET_EXPR_H
2 #define PET_EXPR_H
4 #include <pet.h>
6 #if defined(__cplusplus)
7 extern "C" {
8 #endif
10 const char *pet_type_str(enum pet_expr_type type);
11 enum pet_expr_type pet_str_type(const char *str);
13 enum pet_op_type pet_str_op(const char *str);
15 struct pet_expr *pet_expr_from_index_and_depth(
16 __isl_take isl_multi_pw_aff *index, int depth);
17 struct pet_expr *pet_expr_from_access_and_index(__isl_take isl_map *access,
18 __isl_take isl_multi_pw_aff *index);
19 struct pet_expr *pet_expr_kill_from_access_and_index(__isl_take isl_map *access,
20 __isl_take isl_multi_pw_aff *index);
21 struct pet_expr *pet_expr_new_unary(isl_ctx *ctx, enum pet_op_type op,
22 struct pet_expr *arg);
23 struct pet_expr *pet_expr_new_binary(isl_ctx *ctx, enum pet_op_type op,
24 struct pet_expr *lhs, struct pet_expr *rhs);
25 struct pet_expr *pet_expr_new_ternary(isl_ctx *ctx, struct pet_expr *cond,
26 struct pet_expr *lhs, struct pet_expr *rhs);
27 struct pet_expr *pet_expr_new_call(isl_ctx *ctx, const char *name,
28 unsigned n_arg);
29 struct pet_expr *pet_expr_new_cast(isl_ctx *ctx, const char *type_name,
30 struct pet_expr *arg);
31 struct pet_expr *pet_expr_new_double(isl_ctx *ctx, double d, const char *s);
32 struct pet_expr *pet_expr_new_int(__isl_take isl_val *v);
34 int pet_expr_is_scalar_access(struct pet_expr *expr);
35 int pet_expr_is_equal(struct pet_expr *expr1, struct pet_expr *expr2);
37 __isl_give isl_space *pet_expr_access_get_parameter_space(
38 struct pet_expr *expr);
39 __isl_give isl_space *pet_expr_access_get_data_space(struct pet_expr *expr);
41 struct pet_expr *pet_expr_map_access(struct pet_expr *expr,
42 struct pet_expr *(*fn)(struct pet_expr *expr, void *user),
43 void *user);
45 int pet_expr_writes(struct pet_expr *expr, __isl_keep isl_id *id);
47 struct pet_expr *pet_expr_access_move_dims(struct pet_expr *expr,
48 enum isl_dim_type dst_type, unsigned dst_pos,
49 enum isl_dim_type src_type, unsigned src_pos, unsigned n);
50 struct pet_expr *pet_expr_access_pullback_multi_aff(
51 struct pet_expr *expr, __isl_take isl_multi_aff *ma);
52 struct pet_expr *pet_expr_access_align_params(struct pet_expr *expr);
53 struct pet_expr *pet_expr_restrict(struct pet_expr *expr,
54 __isl_take isl_set *cond);
55 struct pet_expr *pet_expr_access_update_domain(struct pet_expr *expr,
56 __isl_keep isl_multi_pw_aff *update);
57 struct pet_expr *pet_expr_update_domain(struct pet_expr *expr,
58 __isl_take isl_multi_pw_aff *update);
59 struct pet_expr *pet_expr_align_params(struct pet_expr *expr,
60 __isl_take isl_space *space);
61 struct pet_expr *pet_expr_filter(struct pet_expr *expr,
62 __isl_take isl_multi_pw_aff *test, int satisfied);
63 struct pet_expr *pet_expr_detect_parameter_accesses(struct pet_expr *expr,
64 __isl_take isl_space *space);
65 struct pet_expr *pet_expr_add_ref_ids(struct pet_expr *expr, int *n_ref);
66 struct pet_expr *pet_expr_anonymize(struct pet_expr *expr);
67 struct pet_expr *pet_expr_gist(struct pet_expr *expr,
68 __isl_keep isl_set *context, __isl_keep isl_union_map *value_bounds);
70 __isl_give isl_map *pet_expr_tag_access(struct pet_expr *expr,
71 __isl_take isl_map *access);
73 void pet_expr_dump_with_indent(struct pet_expr *expr, int indent);
75 #if defined(__cplusplus)
77 #endif
79 #endif