ScheduleOpt: Prevectorize the innermost parallel loop
Only prevectorize loops that are actually parallel and can
be vectorized. Take the innermost loop that is eligible.
llvm-svn: 134187
diff --git a/polly/lib/ScheduleOptimizer.cpp b/polly/lib/ScheduleOptimizer.cpp
index b8e6c43..2db2d01 100644
--- a/polly/lib/ScheduleOptimizer.cpp
+++ b/polly/lib/ScheduleOptimizer.cpp
@@ -299,13 +299,17 @@
int scheduleDimensions, parameterDimensions;
ctx = isl_union_map_get_ctx(partialSchedule);
- scheduleDimensions = isl_band_n_member(band);
- tileMap = getPrevectorMap(ctx, scheduleDimensions * 2 - 1,
- scheduleDimensions * 2,
- parameterDimensions);
- tileUnionMap = isl_union_map_from_map(tileMap);
- partialSchedule = isl_union_map_apply_range(partialSchedule,
- tileUnionMap);
+ for (int i = scheduleDimensions - 1 ; i >= 0 ; i--) {
+ if (isl_band_member_is_parallel(band, i)) {
+ tileMap = getPrevectorMap(ctx, scheduleDimensions + i,
+ scheduleDimensions * 2,
+ parameterDimensions);
+ tileUnionMap = isl_union_map_from_map(tileMap);
+ partialSchedule = isl_union_map_apply_range(partialSchedule,
+ tileUnionMap);
+ break;
+ }
+ }
}
if (finalSchedule)