Index: polly/trunk/lib/Analysis/ScopInfo.cpp =================================================================== --- polly/trunk/lib/Analysis/ScopInfo.cpp +++ polly/trunk/lib/Analysis/ScopInfo.cpp @@ -903,9 +903,13 @@ 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 + // as code generation currently does not expect unbounded loops. addLoopTripCountToDomain(L); isl_pw_aff_free(IV); + if (!isl_set_dim_has_upper_bound(Domain, isl_dim_set, i)) + Parent.addAssumption(isl_set_empty(Parent.getParamSpace())); } } Index: polly/trunk/test/ScopInfo/isl_trip_count_02.ll =================================================================== --- polly/trunk/test/ScopInfo/isl_trip_count_02.ll +++ polly/trunk/test/ScopInfo/isl_trip_count_02.ll @@ -1,6 +1,8 @@ ; RUN: opt %loadPolly -polly-detect-unprofitable -polly-allow-non-scev-backedge-taken-count -polly-scops -analyze < %s | FileCheck %s ; -; CHECK: [M, N] -> { Stmt_for_body[i0] : i0 >= 0 and N <= -1 + M }; +; TODO: We do not allow unbounded loops at the moment. +; +; CHECK-NOT: Stmt_for_body ; ; void f(int *A, int N, int M) { ; for (int i = M; i > N; i++)