collectInfo(S, &Read, &Write, &MayWrite, &AccessSchedule, &StmtSchedule,
Level);
+ bool HasReductions = !isl_union_map_is_empty(AccessSchedule);
+
DEBUG(dbgs() << "Read: " << Read << '\n';
dbgs() << "Write: " << Write << '\n';
dbgs() << "MayWrite: " << MayWrite << '\n';
dbgs() << "AccessSchedule: " << AccessSchedule << '\n';
dbgs() << "StmtSchedule: " << StmtSchedule << '\n';);
- if (isl_union_map_is_empty(AccessSchedule)) {
+ if (!HasReductions) {
isl_union_map_free(AccessSchedule);
Schedule = S.getScheduleTree();
// Tag the schedule tree if we want fine-grain dependence info
isl_ctx_reset_operations(IslCtx.get());
isl_ctx_set_max_operations(IslCtx.get(), MaxOpsOld);
+ // Drop out early, as the remaining computations are only needed for
+ // reduction dependences or dependences that are finer than statement
+ // level dependences.
+ if (!HasReductions && Level == AL_Statement) {
+ TC_RED = isl_union_map_empty(isl_union_map_get_space(StmtSchedule));
+ isl_union_map_free(StmtSchedule);
+ return;
+ }
+
isl_union_map *STMT_RAW, *STMT_WAW, *STMT_WAR;
STMT_RAW = isl_union_map_intersect_domain(
isl_union_map_copy(RAW),