[polly] r252750 - ScopInfo: Limit the number of disjuncts in assumed context
Johannes Doerfert via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 11 11:54:31 PST 2015
On 11/11, Tobias Grosser via llvm-commits wrote:
> Author: grosser
> Date: Wed Nov 11 10:22:36 2015
> New Revision: 252750
>
> URL: http://llvm.org/viewvc/llvm-project?rev=252750&view=rev
> Log:
> ScopInfo: Limit the number of disjuncts in assumed context
>
> In certain rare cases (mostly -polly-process-unprofitable on large sequences
> of conditions - often without any loop), we see some compile-time timeouts due
> to the construction of an overly complex assumption context. This change limits
> the number of disjuncts to 150 (adjustable), to prevent us from creating
> assumptions contexts that are too large for even the compilation to finish.
>
> The limit has been choosen as large as possible to make sure we do not
> unnecessarily drop test coverage. If such cases also appear in
> -polly-process-unprofitable=false mode we may need to think about this again,
> as the current limitations may still allow assumptions that are way to complex
> to be checked profitably at run-time.
>
> There is also certainly room for improvement regarding how (and how efficient)
> we construct an assumed context, but this requires some more thinking.
>
> This completes llvm.org/PR25458
>
> Added:
> polly/trunk/test/ScopInfo/long-sequence-of-error-blocks-2.ll
> Modified:
> polly/trunk/lib/Analysis/ScopInfo.cpp
>
> Modified: polly/trunk/lib/Analysis/ScopInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopInfo.cpp?rev=252750&r1=252749&r2=252750&view=diff
> ==============================================================================
> --- polly/trunk/lib/Analysis/ScopInfo.cpp (original)
> +++ polly/trunk/lib/Analysis/ScopInfo.cpp Wed Nov 11 10:22:36 2015
> @@ -91,6 +91,12 @@ static cl::opt<bool> DetectReductions("p
> cl::Hidden, cl::ZeroOrMore,
> cl::init(true), cl::cat(PollyCategory));
>
> +static cl::opt<int> MaxDisjunctsAssumed(
> + "polly-max-disjuncts-assumed",
> + cl::desc("The maximal number of disjuncts we allow in the assumption "
> + "context (this bounds compile time)"),
> + cl::Hidden, cl::ZeroOrMore, cl::init(150), cl::cat(PollyCategory));
> +
> //===----------------------------------------------------------------------===//
>
> // Create a sequence of two schedules. Either argument may be null and is
> @@ -2851,6 +2857,16 @@ bool Scop::hasFeasibleRuntimeContext() c
>
> void Scop::addAssumption(__isl_take isl_set *Set) {
> AssumedContext = isl_set_intersect(AssumedContext, Set);
> + isl_basic_set_list *List = isl_set_get_basic_set_list(AssumedContext);
> + int NSets = isl_basic_set_list_n_basic_set(List);
> + isl_basic_set_list_free(List);
> +
> + if (NSets >= MaxDisjunctsAssumed) {
> + isl_space *Space = isl_set_get_space(AssumedContext);
> + isl_set_free(AssumedContext);
> + AssumedContext = isl_set_universe(Space);
This should be an empty set and not the universe, right? Otherwise you
just drop assumptions which is not sound.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 213 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151111/6c44e9a6/attachment.sig>
More information about the llvm-commits
mailing list