#pragma once #include #include #include #include "../Utils/AstWrapper.h" #include "../GraphLoop/graph_loops.h" #include "../Distribution/DvmhDirective.h" struct DvmDirective { std::set corners; std::vector, std::vector>>> shadowRenew, across; std::map, std::string>, Expression*> remoteAccess; std::map> reduction; std::map>> reductionLoc; }; bool isSPF_NoInline(Statement *stPrev); template void fillPrivatesFromComment(Statement *st, std::set &privates, int type = -1); template void fillReductionsFromComment(Statement *st, std::map> &reduction, bool moduleNameAdd = false, int type = SPF_ANALYSIS_DIR); template void fillReductionsFromComment(Statement *st, std::map>> &reduction, bool moduleNameAdd = false, int type = SPF_ANALYSIS_DIR); void fillParameterFromComment(Statement *st, std::vector> &assigns); template void fillShadowAcrossFromComment(const int type, Statement *st, std::vector, std::vector>>> &data); template void fillShadowAcrossFromParallel(const int type, Statement *st, std::vector, std::vector>>> &data, std::set &corner); template void fillRemoteFromComment(Statement *st, std::map, Expression*> &remote, bool isFull = false, int type = SPF_PARALLEL_DIR); void fillAcrossInfoFromDirectives(const LoopGraph *loopInfo, std::vector, std::vector>>> &acrossInfo); void fillInfoFromDirectives(const LoopGraph *loopInfo, ParallelDirective *directive); void fillInfoFromDirective(Statement* parallel_on, DvmDirective& directive); void fillFissionPrivatesExpansionFromComment(Statement *stIn, std::vector &vars); template void fillShrinkFromComment(Statement *stIn, std::vector>> &varDims); template void fillCheckpointFromComment(Statement *stIn, std::map &clauses, std::set &vars, std::set &expt); int getCoverPropertyFromComment(Statement* stIn);