diff options
author | Tobias Grosser <tobias@grosser.es> | 2017-09-03 18:31:44 +0000 |
---|---|---|
committer | Tobias Grosser <tobias@grosser.es> | 2017-09-03 18:31:44 +0000 |
commit | 6b1e46132950799005ff3899d232b085c5d80e80 (patch) | |
tree | f8642cb2c7f5d5b4b766a401fd8a55b7be82535f /polly/lib/CodeGen | |
parent | 99ccf05694e5ec169974cddd6bd305e9334ba0a1 (diff) | |
download | bcm5719-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.cpp | 54 |
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()); } } |