From aa4de132e4a4d1655f5af34c7c08e777b6eef51e Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Wed, 12 Jun 2013 13:36:36 +0200 Subject: [PATCH] extract out shared pet_expr_is_scalar_access Signed-off-by: Sven Verdoolaege --- scan.cc | 6 ++---- scop.c | 12 ++++++++++++ scop.h | 1 + 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/scan.cc b/scan.cc index 88ff182..e5b55ba 100644 --- a/scan.cc +++ b/scan.cc @@ -1392,7 +1392,7 @@ void PetScan::mark_write(struct pet_expr *access) access->acc.write = 1; access->acc.read = 0; - if (isl_map_dim(access->acc.access, isl_dim_out) != 0) + if (!pet_expr_is_scalar_access(access)) return; id = isl_map_get_tuple_id(access->acc.access, isl_dim_out); @@ -1416,9 +1416,7 @@ void PetScan::assign(struct pet_expr *lhs, Expr *rhs) if (!lhs) return; - if (lhs->type != pet_expr_access) - return; - if (isl_map_dim(lhs->acc.access, isl_dim_out) != 0) + if (!pet_expr_is_scalar_access(lhs)) return; id = isl_map_get_tuple_id(lhs->acc.access, isl_dim_out); diff --git a/scop.c b/scop.c index ea6557c..88a0e79 100644 --- a/scop.c +++ b/scop.c @@ -442,6 +442,18 @@ int pet_expr_is_affine(struct pet_expr *expr) return !has_id; } +/* Does "expr" represent an access to a scalar, i.e., zero-dimensional array? + */ +int pet_expr_is_scalar_access(struct pet_expr *expr) +{ + if (!expr) + return -1; + if (expr->type != pet_expr_access) + return 0; + + return isl_map_dim(expr->acc.access, isl_dim_out) == 0; +} + /* Return 1 if the two pet_exprs are equivalent. */ int pet_expr_is_equal(struct pet_expr *expr1, struct pet_expr *expr2) diff --git a/scop.h b/scop.h index bfa041a..f07b39b 100644 --- a/scop.h +++ b/scop.h @@ -36,6 +36,7 @@ void pet_expr_dump(struct pet_expr *expr); void *pet_expr_free(struct pet_expr *expr); int pet_expr_is_affine(struct pet_expr *expr); +int pet_expr_is_scalar_access(struct pet_expr *expr); int pet_expr_is_equal(struct pet_expr *expr1, struct pet_expr *expr2); struct pet_expr *pet_expr_restrict(struct pet_expr *expr, __isl_take isl_set *cond); -- 2.11.4.GIT