[PATCH] D45066: [Polly] [ScopInfo] Remove bail out condition in buildMinMaxAccess()
SAHIL GIRISH YERAWAR via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 16 10:16:20 PDT 2018
cs15btech11044 updated this revision to Diff 142661.
cs15btech11044 added a comment.
Updates in this patch:
1. Removed the unnecessary alias reference of `Set` in `calculateMinMaxAccess`
2. Function signature of `buildMinMaxAccess` has been changed, removing reference to a set.
3. Removing `MaxDisjunctsInDomain` condition
4. Calling `remove_divs()` on `Set` before `polly::simplify()`
https://reviews.llvm.org/D45066
Files:
lib/Analysis/ScopInfo.cpp
Index: lib/Analysis/ScopInfo.cpp
===================================================================
--- lib/Analysis/ScopInfo.cpp
+++ lib/Analysis/ScopInfo.cpp
@@ -24,6 +24,7 @@
#include "polly/ScopDetection.h"
#include "polly/Support/GICHelper.h"
#include "polly/Support/ISLOStream.h"
+#include "polly/Support/ISLTools.h"
#include "polly/Support/SCEVAffinator.h"
#include "polly/Support/SCEVValidator.h"
#include "polly/Support/ScopHelper.h"
@@ -2308,9 +2309,10 @@
isl::ctx Ctx = Set.get_ctx();
Set = Set.remove_divs();
+ polly::simplify(Set);
- if (isl_set_n_basic_set(Set.get()) >= MaxDisjunctsInDomain)
- return isl::stat::error;
+ if (isl_set_n_basic_set(Set.get()) > RunTimeChecksMaxAccessDisjuncts)
+ Set = Set.simple_hull();
// Restrict the number of parameters involved in the access as the lexmin/
// lexmax computation will take too long if this number is high.
@@ -2336,30 +2338,29 @@
return isl::stat::error;
}
- if (isl_set_n_basic_set(Set.get()) > RunTimeChecksMaxAccessDisjuncts)
- return isl::stat::error;
-
MinPMA = Set.lexmin_pw_multi_aff();
MaxPMA = Set.lexmax_pw_multi_aff();
- if (isl_ctx_last_error(Ctx.get()) == isl_error_quota)
- return isl::stat::error;
-
MinPMA = MinPMA.coalesce();
MaxPMA = MaxPMA.coalesce();
// Adjust the last dimension of the maximal access by one as we want to
// enclose the accessed memory region by MinPMA and MaxPMA. The pointer
// we test during code generation might now point after the end of the
// allocated array but we will never dereference it anyway.
- assert(MaxPMA.dim(isl::dim::out) && "Assumed at least one output dimension");
+ assert((!MaxPMA || MaxPMA.dim(isl::dim::out)) &&
+ "Assumed at least one output dimension");
+
Pos = MaxPMA.dim(isl::dim::out) - 1;
LastDimAff = MaxPMA.get_pw_aff(Pos);
OneAff = isl::aff(isl::local_space(LastDimAff.get_domain_space()));
OneAff = OneAff.add_constant_si(1);
LastDimAff = LastDimAff.add(OneAff);
MaxPMA = MaxPMA.set_pw_aff(Pos, LastDimAff);
+ if (!MinPMA || !MaxPMA)
+ return isl::stat::error;
+
MinMaxAccesses.push_back(std::make_pair(MinPMA, MaxPMA));
return isl::stat::ok;
@@ -2384,8 +2385,6 @@
Accesses = Accesses.intersect_domain(Domains);
isl::union_set Locations = Accesses.range();
- Locations = Locations.coalesce();
- Locations = Locations.detect_equalities();
auto Lambda = [&MinMaxAccesses, &S](isl::set Set) -> isl::stat {
return buildMinMaxAccess(Set, MinMaxAccesses, S);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D45066.142661.patch
Type: text/x-patch
Size: 2539 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180416/c8599b36/attachment.bin>
More information about the llvm-commits
mailing list