extract out pet_expr_gist
[pet.git] / expr.h
blobdc4c87cdecfb48ecfadf4649f58f9963c058dda1
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);
33 void pet_expr_dump(struct pet_expr *expr);
35 int pet_expr_is_affine(struct pet_expr *expr);
36 int pet_expr_is_scalar_access(struct pet_expr *expr);
37 int pet_expr_is_equal(struct pet_expr *expr1, struct pet_expr *expr2);
39 __isl_give isl_id *pet_expr_access_get_id(struct pet_expr *expr);
41 int pet_expr_foreach_access_expr(struct pet_expr *expr,
42 int (*fn)(struct pet_expr *expr, void *user), void *user);
43 struct pet_expr *pet_expr_map_access(struct pet_expr *expr,
44 struct pet_expr *(*fn)(struct pet_expr *expr, void *user),
45 void *user);
47 int pet_expr_writes(struct pet_expr *expr, __isl_keep isl_id *id);
49 struct pet_expr *pet_expr_access_align_params(struct pet_expr *expr);
50 struct pet_expr *pet_expr_restrict(struct pet_expr *expr,
51 __isl_take isl_set *cond);
52 struct pet_expr *pet_expr_access_update_domain(struct pet_expr *expr,
53 __isl_keep isl_multi_pw_aff *update);
54 struct pet_expr *pet_expr_update_domain(struct pet_expr *expr,
55 __isl_take isl_multi_pw_aff *update);
56 struct pet_expr *pet_expr_align_params(struct pet_expr *expr,
57 __isl_take isl_space *space);
58 struct pet_expr *pet_expr_filter(struct pet_expr *expr,
59 __isl_take isl_multi_pw_aff *test, int satisfied);
60 struct pet_expr *pet_expr_detect_parameter_accesses(struct pet_expr *expr,
61 __isl_take isl_space *space);
62 struct pet_expr *pet_expr_add_ref_ids(struct pet_expr *expr, int *n_ref);
63 struct pet_expr *pet_expr_anonymize(struct pet_expr *expr);
64 struct pet_expr *pet_expr_gist(struct pet_expr *expr,
65 __isl_keep isl_set *context, __isl_keep isl_union_map *value_bounds);
67 __isl_give isl_map *pet_expr_tag_access(struct pet_expr *expr,
68 __isl_take isl_map *access);
70 void pet_expr_dump_with_indent(struct pet_expr *expr, int indent);
72 #if defined(__cplusplus)
74 #endif
76 #endif