Fix crashes due to unaligned parameters

Due to the recent introduction of isl_id, parameters need now always to be
aligned. This was not yet taken care of in the code path of vectorization and
dependence analysis.

llvm-svn: 138555
diff --git a/polly/lib/ScheduleOptimizer.cpp b/polly/lib/ScheduleOptimizer.cpp
index f0bfa0a..4bc5db3 100644
--- a/polly/lib/ScheduleOptimizer.cpp
+++ b/polly/lib/ScheduleOptimizer.cpp
@@ -76,8 +76,7 @@
 
     isl_map *scattering = stmt->getScattering();
     isl_dim *dim = isl_dim_alloc(isl_map_get_ctx(scattering),
-                                 isl_map_n_param(scattering),
-                                 isl_map_n_out(scattering),
+                                 0, isl_map_n_out(scattering),
                                  scatDimensions);
     isl_basic_map *changeScattering = isl_basic_map_universe(isl_dim_copy(dim));
 
@@ -96,6 +95,8 @@
 
     isl_map *changeScatteringMap = isl_map_from_basic_map(changeScattering);
 
+    isl_dim *dimModel = isl_map_get_dim(scattering);
+    changeScatteringMap = isl_map_align_params(changeScatteringMap, dimModel);
     stmt->setScattering(isl_map_apply_range(scattering, changeScatteringMap));
     isl_dim_free(dim);
   }
@@ -128,7 +129,7 @@
 //	    S(i,j)
 //
 static isl_basic_map *getTileMap(isl_ctx *ctx, int scheduleDimensions,
-				 int parameterDimensions, int tileSize = 32) {
+				 isl_dim *dimModel, int tileSize = 32) {
   // We construct
   //
   // tileMap := [p0] -> {[s0, s1] -> [t0, t1, p0, p1, a0, a1]:
@@ -136,8 +137,8 @@
   //	                  s1 = a1 * 32 and s1 = p1 and t1 <= p1 < t1 + 32}
   //
   // and project out the auxilary dimensions a0 and a1.
-  isl_dim *dim = isl_dim_alloc(ctx, parameterDimensions, scheduleDimensions,
-			       scheduleDimensions * 3);
+  isl_dim *dim = isl_dim_alloc(ctx, 0, scheduleDimensions,
+                               scheduleDimensions * 3);
   isl_basic_map *tileMap = isl_basic_map_universe(isl_dim_copy(dim));
 
   for (int x = 0; x < scheduleDimensions; x++) {
@@ -188,7 +189,7 @@
 
 isl_union_map *getTiledPartialSchedule(isl_band *band) {
   isl_union_map *partialSchedule;
-  int scheduleDimensions, parameterDimensions;
+  int scheduleDimensions;
   isl_ctx *ctx;
   isl_dim *dim;
   isl_basic_map *tileMap;
@@ -198,15 +199,12 @@
   ctx = isl_union_map_get_ctx(partialSchedule);
   dim = isl_union_map_get_dim(partialSchedule);
   scheduleDimensions = isl_band_n_member(band);
-  parameterDimensions = isl_dim_size(dim, isl_dim_param);
 
-  tileMap = getTileMap(ctx, scheduleDimensions, parameterDimensions);
+  tileMap = getTileMap(ctx, scheduleDimensions, dim);
   tileUnionMap = isl_union_map_from_map(isl_map_from_basic_map(tileMap));
-
+  tileUnionMap = isl_union_map_align_params(tileUnionMap, dim);
   partialSchedule = isl_union_map_apply_range(partialSchedule, tileUnionMap);
 
-  isl_dim_free(dim);
-
   return partialSchedule;
 }
 
@@ -288,8 +286,6 @@
     partialSchedule = getTiledPartialSchedule(band);
     int scheduleDimensions = isl_band_n_member(band);
     isl_dim *dim = isl_union_map_get_dim(partialSchedule);
-    int parameterDimensions = isl_dim_size(dim, isl_dim_param);
-    isl_dim_free(dim);
 
 
     if (isl_band_has_children(band)) {
@@ -307,9 +303,10 @@
       for (int i = scheduleDimensions - 1 ;  i >= 0 ; i--) {
 	if (isl_band_member_is_zero_distance(band, i)) {
 	  tileMap = getPrevectorMap(ctx, scheduleDimensions + i,
-				    scheduleDimensions * 2,
-				    parameterDimensions);
+				    scheduleDimensions * 2, 0);
 	  tileUnionMap = isl_union_map_from_map(tileMap);
+          tileUnionMap = isl_union_map_align_params(tileUnionMap,
+                                                    isl_dim_copy(dim));
 	  partialSchedule = isl_union_map_apply_range(partialSchedule,
 						      tileUnionMap);
 	  break;
@@ -323,6 +320,7 @@
       finalSchedule = partialSchedule;
 
     isl_band_free(band);
+    isl_dim_free(dim);
   }
 
   return finalSchedule;