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); });
Json::Value JSONExporter::getJSON(Scop &S) const { Json::Value root; unsigned LineBegin, LineEnd; std::string FileName; getDebugLocation(&S.getRegion(), LineBegin, LineEnd, FileName); std::string Location; if (LineBegin != (unsigned)-1) Location = FileName + ":" + std::to_string(LineBegin) + "-" + std::to_string(LineEnd); root["name"] = S.getNameStr(); root["context"] = S.getContextStr(); if (LineBegin != (unsigned)-1) root["location"] = Location; root["statements"]; for (ScopStmt &Stmt : S) { Json::Value statement; statement["name"] = Stmt.getBaseName(); statement["domain"] = Stmt.getDomainStr(); statement["schedule"] = Stmt.getScheduleStr(); statement["accesses"]; for (MemoryAccess *MA : Stmt) { Json::Value access; access["kind"] = MA->isRead() ? "read" : "write"; access["relation"] = MA->getOriginalAccessRelationStr(); statement["accesses"].append(access); } root["statements"].append(statement); } return root; }