ScheduleOpt: Do not crash on statements with empty iteration domains

Statements with an empty iteration domain may not have a schedule assigned by
the isl schedule optimizer. As Polly expects each statement to have a schedule,
we keep the old schedule for such statements.

This fixes http://llvm.org/PR15645`

Reported-by: Johannes Doerfert  <johannesdoerfert@gmx.de>
llvm-svn: 179233
diff --git a/polly/lib/ScheduleOptimizer.cpp b/polly/lib/ScheduleOptimizer.cpp
index 1063977..e37b759 100644
--- a/polly/lib/ScheduleOptimizer.cpp
+++ b/polly/lib/ScheduleOptimizer.cpp
@@ -537,8 +537,21 @@
     isl_union_map *StmtBand;
     StmtBand = isl_union_map_intersect_domain(isl_union_map_copy(ScheduleMap),
                                               isl_union_set_from_set(Domain));
-    isl_map *StmtSchedule;
+    isl_map *StmtSchedule = NULL;
     isl_union_map_foreach_map(StmtBand, getSingleMap, &StmtSchedule);
+
+    // Statements with an empty iteration domain may not have a schedule
+    // assigned by the isl schedule optimizer. As Polly expects each statement
+    // to have a schedule, we keep the old schedule for this statement. As
+    // there are zero iterations to execute, the content of the schedule does
+    // not matter.
+    //
+    // TODO: Consider removing such statements when constructing the scop.
+    if (!StmtSchedule) {
+      StmtSchedule = Stmt->getScattering();
+      StmtSchedule = isl_map_set_tuple_id(StmtSchedule, isl_dim_out, NULL);
+    }
+
     Stmt->setScattering(StmtSchedule);
     isl_union_map_free(StmtBand);
   }