summaryrefslogtreecommitdiffstats
path: root/polly/lib/CodeGen
diff options
context:
space:
mode:
authorTobias Grosser <tobias@grosser.es>2017-09-03 18:31:44 +0000
committerTobias Grosser <tobias@grosser.es>2017-09-03 18:31:44 +0000
commit6b1e46132950799005ff3899d232b085c5d80e80 (patch)
treef8642cb2c7f5d5b4b766a401fd8a55b7be82535f /polly/lib/CodeGen
parent99ccf05694e5ec169974cddd6bd305e9334ba0a1 (diff)
downloadbcm5719-llvm-6b1e46132950799005ff3899d232b085c5d80e80.tar.gz
bcm5719-llvm-6b1e46132950799005ff3899d232b085c5d80e80.zip
[IslAst] Move buildCondition to isl++
llvm-svn: 312452
Diffstat (limited to 'polly/lib/CodeGen')
-rw-r--r--polly/lib/CodeGen/IslAst.cpp54
1 files changed, 28 insertions, 26 deletions
diff --git a/polly/lib/CodeGen/IslAst.cpp b/polly/lib/CodeGen/IslAst.cpp
index ff196b41afe..566e2637428 100644
--- a/polly/lib/CodeGen/IslAst.cpp
+++ b/polly/lib/CodeGen/IslAst.cpp
@@ -347,35 +347,33 @@ static __isl_give isl_ast_node *AtEachDomain(__isl_take isl_ast_node *Node,
}
// Build alias check condition given a pair of minimal/maximal access.
-static __isl_give isl_ast_expr *
-buildCondition(__isl_keep isl_ast_build *Build, const Scop::MinMaxAccessTy *It0,
- const Scop::MinMaxAccessTy *It1) {
- isl::id Left =
- isl::manage(isl_pw_multi_aff_get_tuple_id(It0->first, isl_dim_set));
- isl::id Right =
- isl::manage(isl_pw_multi_aff_get_tuple_id(It1->first, isl_dim_set));
+static isl::ast_expr buildCondition(isl::ast_build Build,
+ const Scop::MinMaxAccessTy *It0,
+ const Scop::MinMaxAccessTy *It1) {
+
+ isl::pw_multi_aff AFirst = isl::manage(isl_pw_multi_aff_copy(It0->first));
+ isl::pw_multi_aff ASecond = isl::manage(isl_pw_multi_aff_copy(It0->second));
+ isl::pw_multi_aff BFirst = isl::manage(isl_pw_multi_aff_copy(It1->first));
+ isl::pw_multi_aff BSecond = isl::manage(isl_pw_multi_aff_copy(It1->second));
+
+ isl::id Left = AFirst.get_tuple_id(isl::dim::set);
+ isl::id Right = BFirst.get_tuple_id(isl::dim::set);
const ScopArrayInfo *BaseLeft =
ScopArrayInfo::getFromId(Left)->getBasePtrOriginSAI();
const ScopArrayInfo *BaseRight =
ScopArrayInfo::getFromId(Right)->getBasePtrOriginSAI();
- if (BaseLeft && BaseLeft == BaseRight) {
- return isl_ast_expr_from_val(
- isl_val_int_from_si(isl_ast_build_get_ctx(Build), 1));
- }
-
- isl_ast_expr *NonAliasGroup, *MinExpr, *MaxExpr;
- MinExpr = isl_ast_expr_address_of(isl_ast_build_access_from_pw_multi_aff(
- Build, isl_pw_multi_aff_copy(It0->first)));
- MaxExpr = isl_ast_expr_address_of(isl_ast_build_access_from_pw_multi_aff(
- Build, isl_pw_multi_aff_copy(It1->second)));
- NonAliasGroup = isl_ast_expr_le(MaxExpr, MinExpr);
- MinExpr = isl_ast_expr_address_of(isl_ast_build_access_from_pw_multi_aff(
- Build, isl_pw_multi_aff_copy(It1->first)));
- MaxExpr = isl_ast_expr_address_of(isl_ast_build_access_from_pw_multi_aff(
- Build, isl_pw_multi_aff_copy(It0->second)));
- NonAliasGroup =
- isl_ast_expr_or(NonAliasGroup, isl_ast_expr_le(MaxExpr, MinExpr));
+ if (BaseLeft && BaseLeft == BaseRight)
+ return isl::ast_expr::from_val(isl::val::int_from_ui(Build.get_ctx(), 1));
+
+ isl::ast_expr NonAliasGroup, MinExpr, MaxExpr;
+ MinExpr = Build.access_from(AFirst).address_of();
+ MaxExpr = Build.access_from(BSecond).address_of();
+ NonAliasGroup = MaxExpr.le(MinExpr);
+ MinExpr = Build.access_from(BFirst).address_of();
+ MaxExpr = Build.access_from(ASecond).address_of();
+ NonAliasGroup = isl::manage(
+ isl_ast_expr_or(NonAliasGroup.release(), MaxExpr.le(MinExpr).release()));
return NonAliasGroup;
}
@@ -412,10 +410,14 @@ IslAst::buildRunCondition(Scop &S, __isl_keep isl_ast_build *Build) {
++RWAccIt0) {
for (auto RWAccIt1 = RWAccIt0 + 1; RWAccIt1 != RWAccEnd; ++RWAccIt1)
RunCondition = isl_ast_expr_and(
- RunCondition, buildCondition(Build, RWAccIt0, RWAccIt1));
+ RunCondition, buildCondition(isl::manage(isl_ast_build_copy(Build)),
+ RWAccIt0, RWAccIt1)
+ .release());
for (const Scop::MinMaxAccessTy &ROAccIt : MinMaxReadOnly)
RunCondition = isl_ast_expr_and(
- RunCondition, buildCondition(Build, RWAccIt0, &ROAccIt));
+ RunCondition, buildCondition(isl::manage(isl_ast_build_copy(Build)),
+ RWAccIt0, &ROAccIt)
+ .release());
}
}
OpenPOWER on IntegriCloud