From 429471c7a9c6bf37a9c6e4c070a689bb2b35e273 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Thu, 24 Jan 2013 20:51:23 +0100 Subject: [PATCH] PetScan::extract_int: return isl_val Signed-off-by: Sven Verdoolaege --- pet.cc | 8 +++----- scan.cc | 46 ++++++++++++++++++++-------------------------- scan.h | 8 +++++--- 3 files changed, 28 insertions(+), 34 deletions(-) diff --git a/pet.cc b/pet.cc index 2693857..18ff822 100644 --- a/pet.cc +++ b/pet.cc @@ -199,7 +199,7 @@ static __isl_give isl_set *extract_initialization(__isl_take isl_set *value, VarDecl *vd; Expr *expr; IntegerLiteral *il; - isl_int v; + isl_val *v; isl_ctx *ctx; isl_id *id; isl_space *space; @@ -223,10 +223,8 @@ static __isl_give isl_set *extract_initialization(__isl_take isl_set *value, space = isl_space_set_dim_id(space, isl_dim_param, 0, id); set = isl_set_universe(space); - isl_int_init(v); - PetScan::extract_int(il, &v); - set = isl_set_fix(set, isl_dim_param, 0, v); - isl_int_clear(v); + v = PetScan::extract_int(ctx, il); + set = isl_set_fix_val(set, isl_dim_param, 0, v); return isl_set_intersect(value, set); } diff --git a/scan.cc b/scan.cc index d548fc5..6524234 100644 --- a/scan.cc +++ b/scan.cc @@ -289,44 +289,42 @@ void PetScan::unsupported(Stmt *stmt, const char *msg) DiagnosticBuilder B = diag.Report(loc, id) << stmt->getSourceRange(); } -/* Extract an integer from "expr" and store it in "v". +/* Extract an integer from "expr". */ -int PetScan::extract_int(IntegerLiteral *expr, isl_int *v) +__isl_give isl_val *PetScan::extract_int(isl_ctx *ctx, IntegerLiteral *expr) { const Type *type = expr->getType().getTypePtr(); int is_signed = type->hasSignedIntegerRepresentation(); if (is_signed) { int64_t i = expr->getValue().getSExtValue(); - isl_int_set_si(*v, i); + return isl_val_int_from_si(ctx, i); } else { uint64_t i = expr->getValue().getZExtValue(); - isl_int_set_ui(*v, i); + return isl_val_int_from_ui(ctx, i); } - - return 0; } -/* Extract an integer from "expr" and store it in "v". - * Return -1 if "expr" does not (obviously) represent an integer. +/* Extract an integer from "expr". + * Return NULL if "expr" does not (obviously) represent an integer. */ -int PetScan::extract_int(clang::ParenExpr *expr, isl_int *v) +__isl_give isl_val *PetScan::extract_int(clang::ParenExpr *expr) { - return extract_int(expr->getSubExpr(), v); + return extract_int(expr->getSubExpr()); } -/* Extract an integer from "expr" and store it in "v". - * Return -1 if "expr" does not (obviously) represent an integer. +/* Extract an integer from "expr". + * Return NULL if "expr" does not (obviously) represent an integer. */ -int PetScan::extract_int(clang::Expr *expr, isl_int *v) +__isl_give isl_val *PetScan::extract_int(clang::Expr *expr) { if (expr->getStmtClass() == Stmt::IntegerLiteralClass) - return extract_int(cast(expr), v); + return extract_int(ctx, cast(expr)); if (expr->getStmtClass() == Stmt::ParenExprClass) - return extract_int(cast(expr), v); + return extract_int(cast(expr)); unsupported(expr); - return -1; + return NULL; } /* Extract an affine expression from the IntegerLiteral "expr". @@ -337,12 +335,10 @@ __isl_give isl_pw_aff *PetScan::extract_affine(IntegerLiteral *expr) isl_local_space *ls = isl_local_space_from_space(isl_space_copy(dim)); isl_aff *aff = isl_aff_zero_on_domain(ls); isl_set *dom = isl_set_universe(dim); - isl_int v; + isl_val *v; - isl_int_init(v); - extract_int(expr, &v); - aff = isl_aff_add_constant(aff, v); - isl_int_clear(v); + v = extract_int(expr); + aff = isl_aff_add_constant_val(aff, v); return isl_pw_aff_alloc(dom, aff); } @@ -727,7 +723,7 @@ __isl_give isl_pw_aff *PetScan::extract_affine(CallExpr *expr) else aff1 = isl_pw_aff_max(aff1, aff2); } else if (name == "floord" || name == "ceild") { - isl_int v; + isl_val *v; Expr *arg2 = expr->getArg(1); if (arg2->getStmtClass() != Stmt::IntegerLiteralClass) { @@ -735,10 +731,8 @@ __isl_give isl_pw_aff *PetScan::extract_affine(CallExpr *expr) return NULL; } aff1 = extract_affine(expr->getArg(0)); - isl_int_init(v); - extract_int(cast(arg2), &v); - aff1 = isl_pw_aff_scale_down(aff1, v); - isl_int_clear(v); + v = extract_int(cast(arg2)); + aff1 = isl_pw_aff_scale_down_val(aff1, v); if (name == "floord") aff1 = isl_pw_aff_floor(aff1); else diff --git a/scan.h b/scan.h index d606e22..c4d5ff8 100644 --- a/scan.h +++ b/scan.h @@ -7,6 +7,7 @@ #include #include +#include #include "scop.h" @@ -77,7 +78,8 @@ struct PetScan { struct pet_scop *scan(clang::FunctionDecl *fd); - static int extract_int(clang::IntegerLiteral *expr, isl_int *v); + static __isl_give isl_val *extract_int(isl_ctx *ctx, + clang::IntegerLiteral *expr); private: void assign(struct pet_expr *lhs, clang::Expr *rhs); @@ -169,8 +171,8 @@ private: __isl_give isl_map *extract_access(clang::ValueDecl *decl); __isl_give isl_map *extract_access(clang::IntegerLiteral *expr); - int extract_int(clang::Expr *expr, isl_int *v); - int extract_int(clang::ParenExpr *expr, isl_int *v); + __isl_give isl_val *extract_int(clang::Expr *expr); + __isl_give isl_val *extract_int(clang::ParenExpr *expr); __isl_give isl_pw_aff *extract_affine_add(clang::BinaryOperator *expr); __isl_give isl_pw_aff *extract_affine_div(clang::BinaryOperator *expr); -- 2.11.4.GIT