Improve accuracy of Scop::hasFeasibleRuntimeContext
authorJohannes Doerfert <doerfert@cs.uni-saarland.de>
Sat, 23 Apr 2016 13:00:27 +0000 (13:00 +0000)
committerJohannes Doerfert <doerfert@cs.uni-saarland.de>
Sat, 23 Apr 2016 13:00:27 +0000 (13:00 +0000)
  If the AssumptionContext is a subset of the InvalidContext the runtime
  context is not feasible.

llvm-svn: 267285

polly/lib/Analysis/ScopInfo.cpp

index 1d93945..1243272 100644 (file)
@@ -3477,13 +3477,16 @@ __isl_give isl_set *Scop::getAssumedContext() const {
 
 bool Scop::hasFeasibleRuntimeContext() const {
   auto *PositiveContext = getAssumedContext();
+  auto *NegativeContext = getInvalidContext();
   PositiveContext = addNonEmptyDomainConstraints(PositiveContext);
-  bool IsFeasible = !isl_set_is_empty(PositiveContext);
+  bool IsFeasible = !(isl_set_is_empty(PositiveContext) ||
+                      isl_set_is_subset(PositiveContext, NegativeContext));
   isl_set_free(PositiveContext);
-  if (!IsFeasible)
+  if (!IsFeasible) {
+    isl_set_free(NegativeContext);
     return false;
+  }
 
-  auto *NegativeContext = getInvalidContext();
   auto *DomainContext = isl_union_set_params(getDomains());
   IsFeasible = !isl_set_is_subset(DomainContext, NegativeContext);
   IsFeasible &= !isl_set_is_subset(Context, NegativeContext);