#pragma once #include #include #include #include #include #include "graph_loops.h" #include "graph_calls.h" #include "../ParallelizationRegions/ParRegions.h" #include "../SageAnalysisTool/depInterfaceExt.h" #include "AstWrapper.h" #include "SgUtils.h" #include "dvm.h" typedef std::pair, std::pair> attrType; namespace DIST = Distribution; enum REGIME { DATA_DISTR, COMP_DISTR, REMOTE_ACC, ARRAY_ACC_CORNER, SHARED_MEMORY_PAR, UNDEF }; // loop_analyzer.cpp bool checkExistence(SgExpression *exp, const std::string& doName); void loopAnalyzer(SgFile *file, std::vector ®ions, std::map, DIST::Array*> &createdArrays, std::vector &messagesForFile, REGIME regime, const std::map> &allFuncInfo, const std::map, std::pair> &declaredArrays, const std::map>> &declaratedArraysSt, const std::map> &arrayLinksByFuncCalls, const std::map> &defUseByPlace, bool skipDeps, std::vector *loopGraph = NULL); void fillFromModule(SgSymbol* s, const std::map>& privatesByModule, std::set& privates); std::vector> getArraySizes(std::vector>& sizes, SgSymbol* symb, SgStatement* decl, const std::map>& arrayLinksByFuncCalls, const std::map>& allFuncInfo); void arrayAccessAnalyzer(SgFile *file, std::vector &messagesForFile, const std::map, std::pair> &declaredArrays, REGIME regime); void processLoopInformationForFunction(std::map> &loopInfo); void addToDistributionGraph(const std::map> &loopInfo, const std::map> &arrayLinksByFuncCalls); void printBlanks(const int sizeOfBlank, const int countOfBlanks); bool isIntrinsic(const char *funName); std::tuple getUniqName(const std::map &commonBlocks, SgStatement *decl, SgSymbol *symb); std::string getShortName(const std::tuple &uniqKey); void insertSpfAnalysisBeforeParalleLoops(const std::vector &loops); void recalculateArraySizes(std::set &arraysDone, const std::set &allArrays, const std::map> &arrayLinksByFuncCalls, const std::map>& allFuncInfo); int getSizeOfType(SgType* t); // dep_analyzer.cpp void tryToFindDependencies(LoopGraph *currLoop, const std::map, std::set>>> &allLoops, std::set &funcWasInit, SgFile *file, std::vector regions, std::vector *currMessages, std::map &collection, const std::map &allFuncs, const std::map> &defUseByPlace); depGraph *getDependenciesGraph(const LoopGraph *currLoop, SgFile *file, const std::set *privVars = NULL); // allocations_prepoc.cpp void preprocess_allocates(SgFile *file); void moveAllocatesInterproc(const std::map>& arrayLinksByFuncCalls); // spf_directive_preproc.cpp bool preprocess_spf_dirs(SgFile *file, const std::map &commonBlocks, std::vector &messagesForFile, const std::set& allFileNames, std::map, std::set>& usersDirectives); bool check_par_reg_dirs(SgFile *file, std::vector &messagesForFile); void revertion_spf_dirs(SgFile *file, std::map, std::pair> declaredArrays, std::map>> declaratedArraysSt); void addAcrossToLoops(LoopGraph *topLoop, const std::map> &acrossToAdd, const std::map &allLoops, std::vector &currMessages); void addPrivatesToLoops(LoopGraph *currLoop, const std::vector &privatesToAdd, const std::map &allLoops, std::vector &currMessages); void addReductionsToLoops(LoopGraph *currLoop, const std::vector &reductionsToAdd, const std::map &allLoops, std::vector &currMessages); void fillVars(SgExpression *exp, const std::set &types, std::set &identifierList, std::vector &funcCalls); // TODO: from remote_access.cpp, may be need to move bool isNeedToConvertIfCondition(SgExpression* ex); void addRemotesToDir(const std::pair *under_dvm_dir, const std::map &uniqRemotes); void fillRemoteFromDir(SgExpression* ex, std::vector& remotes); template bool createRemoteDir(SgStatement *st, const std::map& funcMap, const std::map &sortedLoopGraph, const DIST::Arrays &allArrays, const DataDirective &data, const std::vector &currVar, const uint64_t regionId, std::vector &currMessages, const std::map> &arrayLinksByFuncCalls); void groupActualAndRemote(SgFile* file, bool revert = false); std::vector filterUserSpf(const std::vector& toFilter, bool with_omp = true); // ArrayAnalysis.cpp int getAllDeclaredArrays(SgFile *file, std::map, std::pair> &declaredArrays, std::map>> &declaratedArraysSt, std::map> &currMessages, const std::vector ®ions, const std::map& distrStateFromGUI);