bool ScheduleTreeOptimizer::isProfitableSchedule( Scop &S, __isl_keep isl_union_map *NewSchedule) { // To understand if the schedule has been optimized we check if the schedule // has changed at all. // TODO: We can improve this by tracking if any necessarily beneficial // transformations have been performed. This can e.g. be tiling, loop // interchange, or ...) We can track this either at the place where the // transformation has been performed or, in case of automatic ILP based // optimizations, by comparing (yet to be defined) performance metrics // before/after the scheduling optimizer // (e.g., #stride-one accesses) isl_union_map *OldSchedule = S.getSchedule(); bool changed = !isl_union_map_is_equal(OldSchedule, NewSchedule); isl_union_map_free(OldSchedule); return changed; }
void IslAstInfo::printScop(raw_ostream &OS, Scop &S) const { isl_ast_print_options *Options; isl_ast_node *RootNode = getAst(); Function *F = S.getRegion().getEntry()->getParent(); OS << ":: isl ast :: " << F->getName() << " :: " << S.getRegion().getNameStr() << "\n"; if (!RootNode) { OS << ":: isl ast generation and code generation was skipped!\n\n"; OS << ":: This is either because no useful optimizations could be applied " "(use -polly-process-unprofitable to enforce code generation) or " "because earlier passes such as dependence analysis timed out (use " "-polly-dependences-computeout=0 to set dependence analysis timeout " "to infinity)\n\n"; return; } isl_ast_expr *RunCondition = getRunCondition(); char *RtCStr, *AstStr; Options = isl_ast_print_options_alloc(S.getIslCtx()); Options = isl_ast_print_options_set_print_for(Options, cbPrintFor, nullptr); isl_printer *P = isl_printer_to_str(S.getIslCtx()); P = isl_printer_print_ast_expr(P, RunCondition); RtCStr = isl_printer_get_str(P); P = isl_printer_flush(P); P = isl_printer_indent(P, 4); P = isl_printer_set_output_format(P, ISL_FORMAT_C); P = isl_ast_node_print(RootNode, P, Options); AstStr = isl_printer_get_str(P); isl_union_map *Schedule = isl_union_map_intersect_domain(S.getSchedule(), S.getDomains()); DEBUG({ dbgs() << S.getContextStr() << "\n"; dbgs() << stringFromIslObj(Schedule); });