[PATCH] D12493: Do Not Model Unbounded Loops

Tobias Grosser via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 31 09:43:13 PDT 2015


grosser added a comment.

This looks reasonable to me. However, I leave this review to Johannes, as he
is currently looking into this code.

Best,
Tobias

> mssimpso created this revision.

>  mssimpso added reviewers: jdoerfert, grosser.

> 

> Code generation currently does not expect unbounded loops. When

>  using ISL to compute the loop trip count, if we find that the

>  iteration domain remains unbounded, we invalidate the Scop by

>  creating an infeasible context.

> 

> This fixes PR24634.

> 

> http://reviews.llvm.org/D12493

> 

> Files:

> 

>   lib/Analysis/ScopInfo.cpp

>   test/ScopInfo/isl_trip_count_02.ll

> 

> Index: test/ScopInfo/isl_trip_count_02.ll

>  ===================================================================

> 

>   - test/ScopInfo/isl_trip_count_02.ll +++ test/ScopInfo/isl_trip_count_02.ll @@ -1,4 +1,4 @@ -; RUN: opt %loadPolly -polly-detect-unprofitable -polly-allow-non-scev-backedge-taken-count -polly-scops -analyze < %s | FileCheck %s +; RUN: opt %loadPolly -polly-detect-unprofitable -polly-allow-non-scev-backedge-taken-count -polly-allow-unbounded -polly-scops -analyze < %s | FileCheck %s ; ; CHECK: [M, N] -> { Stmt_for_body[i0] : i0 >= 0 and N <= -1 + M }; ; Index: lib/Analysis/ScopInfo.cpp ===================================================================

>   - lib/Analysis/ScopInfo.cpp +++ lib/Analysis/ScopInfo.cpp @@ -86,6 +86,11 @@ cl::Hidden, cl::ZeroOrMore, cl::init(true), cl::cat(PollyCategory));

> 

>     +static cl::opt<bool> AllowUnbounded("polly-allow-unbounded", +                                    cl::desc("Allow unbounded loops"), +                                    cl::Hidden, cl::ZeroOrMore, cl::init(false), +                                    cl::cat(PollyCategory)); + // Create a sequence of two schedules. Either argument may be null and is // interpreted as the empty schedule. Can also return null if both schedules are // empty. @@ -903,9 +908,15 @@ isl_set *UpperBoundSet = isl_pw_aff_le_set(IV, UpperBound); Domain = isl_set_intersect(Domain, UpperBoundSet); } else {

> - // If SCEV cannot provide a loop trip count we compute it with ISL. +      // If SCEV cannot provide a loop trip count, we compute it with ISL. If +      // the domain remains unbounded, make the assumed context infeasible +      // unless we explicitly allow unbounded loops. Code generation currently +      // does not expect unbounded loops. addLoopTripCountToDomain(L); isl_pw_aff_free(IV); +      if (!AllowUnbounded) +        if (!isl_set_dim_has_upper_bound(Domain, isl_dim_set, i)) +          Parent.addAssumption(isl_set_empty(Parent.getParamSpace())); } }

> 

> 



http://reviews.llvm.org/D12493





More information about the llvm-commits mailing list