#pragma once #include "../Distribution/Distribution.h" #include "errors.h" #include "graph_loops.h" #include "types.h" void createParallelDirectives(const std::map> &loopInfo, const std::vector& regions, const std::map> &arrayLinksByFuncCalls, std::vector &messagesForFile); void selectParallelDirectiveForVariant(File* file, ParallelRegion* currReg, DIST::GraphCSR& reducedG, DIST::Arrays& allArrays, const std::vector& loopGraph, const std::map& mapLoopGraph, const std::map& mapFuncInfo, const std::vector>& distribution, std::vector& toInsert, const uint64_t regionId, const std::map>& arrayLinksByFuncCalls, const std::map& depInfoForLoopGraph, std::vector& messages); void filterParallelDirectives(const std::map>& loopGraph, std::map>& createdDirectives); bool analyzeLoopBody(LoopGraph* loopV, std::map>>>& leftValues, std::map>>>>& rightValues, std::string& base, const std::map>& dimsNotMatch, const std::map& mapFuncInfo); std::pair, std::vector> createRealignRules(Statement* spStat, const uint64_t regId, File* file, const std::string& templClone, const std::map>& arrayLinksByFuncCalls, const std::set& usedArrays, const std::pair); DIST::Array* getRealArrayRef(DIST::Array* in, const uint64_t regId, const std::map>& arrayLinksByFuncCalls); void shiftAlignRulesForTemplates(const std::set& arrays, const uint64_t regId, DataDirective& dataDirectives, const std::map>& arrayLinksByFuncCalls); void createShadowSpec(const std::map>& loopGraph, const std::map>& arrayLinksByFuncCalls, const std::set& forArrays); void addShadowFromAnalysis(ParallelDirective* dir, const std::map& currAccesses); bool checkForConflict(const std::map& currAccesses, const LoopGraph* currentLoop, std::map>, DIST::ArrayComparator>& arrayWriteAcc, const std::vector, std::vector>>>& acrossInfo, std::set& acrossOutArrays); void createParallelDirs(File* file, std::map>& createdDirectives, std::vector& messages, const std::vector& loopsInFile, const std::map>& allFuncInfo, const std::vector& parallelRegions, const std::map& depInfoForLoopGraph, const std::map>& arrayLinksByFuncCalls);