From 2cbfd6179e9cf5c059c167b7be5c0ac8ea336dc3 Mon Sep 17 00:00:00 2001 From: Johannes Doerfert Date: Sat, 9 Aug 2014 21:08:42 -0700 Subject: [PATCH] Add AST expression builder functions for comparisons Expose the comparison isl AST expressions to the user. This functionality allows the user to combine multiple isl_ast_expr objects into a single one representing the result of a logical comparison between them. It is especially useful when we translate the resulting isl_ast_expr later into another representation, e.g., LLVM-IR in Polly's runtime alias checks. Signed-off-by: Johannes Doerfert Signed-off-by: Sven Verdoolaege --- doc/user.pod | 15 +++++++++++++++ include/isl/ast.h | 10 ++++++++++ isl_ast.c | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+) diff --git a/doc/user.pod b/doc/user.pod index 34a7908f..afccec78 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -6652,6 +6652,21 @@ the context of an C. __isl_give isl_ast_expr *isl_ast_expr_or( __isl_take isl_ast_expr *expr1, __isl_take isl_ast_expr *expr2) + __isl_give isl_ast_expr *isl_ast_expr_eq( + __isl_take isl_ast_expr *expr1, + __isl_take isl_ast_expr *expr2); + __isl_give isl_ast_expr *isl_ast_expr_le( + __isl_take isl_ast_expr *expr1, + __isl_take isl_ast_expr *expr2); + __isl_give isl_ast_expr *isl_ast_expr_lt( + __isl_take isl_ast_expr *expr1, + __isl_take isl_ast_expr *expr2); + __isl_give isl_ast_expr *isl_ast_expr_ge( + __isl_take isl_ast_expr *expr1, + __isl_take isl_ast_expr *expr2); + __isl_give isl_ast_expr *isl_ast_expr_gt( + __isl_take isl_ast_expr *expr1, + __isl_take isl_ast_expr *expr2); __isl_give isl_ast_expr *isl_ast_expr_access( __isl_take isl_ast_expr *array, __isl_take isl_ast_expr_list *indices); diff --git a/include/isl/ast.h b/include/isl/ast.h index ae70dfc5..d636bb17 100644 --- a/include/isl/ast.h +++ b/include/isl/ast.h @@ -31,6 +31,16 @@ __isl_give isl_ast_expr *isl_ast_expr_and(__isl_take isl_ast_expr *expr1, __isl_take isl_ast_expr *expr2); __isl_give isl_ast_expr *isl_ast_expr_or(__isl_take isl_ast_expr *expr1, __isl_take isl_ast_expr *expr2); +__isl_give isl_ast_expr *isl_ast_expr_le(__isl_take isl_ast_expr *expr1, + __isl_take isl_ast_expr *expr2); +__isl_give isl_ast_expr *isl_ast_expr_lt(__isl_take isl_ast_expr *expr1, + __isl_take isl_ast_expr *expr2); +__isl_give isl_ast_expr *isl_ast_expr_ge(__isl_take isl_ast_expr *expr1, + __isl_take isl_ast_expr *expr2); +__isl_give isl_ast_expr *isl_ast_expr_gt(__isl_take isl_ast_expr *expr1, + __isl_take isl_ast_expr *expr2); +__isl_give isl_ast_expr *isl_ast_expr_eq(__isl_take isl_ast_expr *expr1, + __isl_take isl_ast_expr *expr2); __isl_give isl_ast_expr *isl_ast_expr_access(__isl_take isl_ast_expr *array, __isl_take isl_ast_expr_list *indices); diff --git a/isl_ast.c b/isl_ast.c index dec945f9..4202878e 100644 --- a/isl_ast.c +++ b/isl_ast.c @@ -563,6 +563,46 @@ __isl_give isl_ast_expr *isl_ast_expr_or(__isl_take isl_ast_expr *expr1, return isl_ast_expr_alloc_binary(isl_ast_op_or, expr1, expr2); } +/* Create an expression representing "expr1" less than or equal to "expr2". + */ +__isl_give isl_ast_expr *isl_ast_expr_le(__isl_take isl_ast_expr *expr1, + __isl_take isl_ast_expr *expr2) +{ + return isl_ast_expr_alloc_binary(isl_ast_op_le, expr1, expr2); +} + +/* Create an expression representing "expr1" less than "expr2". + */ +__isl_give isl_ast_expr *isl_ast_expr_lt(__isl_take isl_ast_expr *expr1, + __isl_take isl_ast_expr *expr2) +{ + return isl_ast_expr_alloc_binary(isl_ast_op_lt, expr1, expr2); +} + +/* Create an expression representing "expr1" greater than or equal to "expr2". + */ +__isl_give isl_ast_expr *isl_ast_expr_ge(__isl_take isl_ast_expr *expr1, + __isl_take isl_ast_expr *expr2) +{ + return isl_ast_expr_alloc_binary(isl_ast_op_ge, expr1, expr2); +} + +/* Create an expression representing "expr1" greater than "expr2". + */ +__isl_give isl_ast_expr *isl_ast_expr_gt(__isl_take isl_ast_expr *expr1, + __isl_take isl_ast_expr *expr2) +{ + return isl_ast_expr_alloc_binary(isl_ast_op_gt, expr1, expr2); +} + +/* Create an expression representing "expr1" equal to "expr2". + */ +__isl_give isl_ast_expr *isl_ast_expr_eq(__isl_take isl_ast_expr *expr1, + __isl_take isl_ast_expr *expr2) +{ + return isl_ast_expr_alloc_binary(isl_ast_op_eq, expr1, expr2); +} + /* Create an expression representing an access to "array" with index * expressions "indices". */ -- 2.11.4.GIT