#pragma once #include #include #include #include #include "graph_calls.h" #include "../GraphLoop/graph_loops.h" #include "../ParallelizationRegions/ParRegions.h" namespace Distribution { class ArrayAccessInfo; } namespace DIST = Distribution; namespace SAPFOR { class BasicBlock; } int CreateCallGraphViz(const char *fileName, const std::map> &funcByFile, std::map &V, std::vector &E); int CreateFuncInfo(const char *fileName, const std::map> &funcByFile); std::string removeString(const std::string &toRemove, const std::string &inStr); FuncInfo* isUserFunctionInProject(const std::string &func); std::string convertToString(const FuncInfo *currFunc); void findDeadFunctionsAndFillCalls(std::map> &allFuncInfo, std::map> &allMessages, bool noPrint = false); void createLinksBetweenFormalAndActualParams(std::map> &allFuncInfo, std::map> &arrayLinksByFuncCalls, const std::map, std::pair> &declaredArrays, std::map> &SPF_messages, bool keepFiles = false); void createMapOfFunc(const std::map> &allFuncInfo, std::map &mapFuncInfo); void createMapOfFunc(const std::vector &allFuncInfo, std::map &mapFuncInfo); void createMapOfFunc(const std::vector &allFuncInfo, std::map, FuncInfo*> &mapFuncInfo); FuncInfo* getFuncInfo(const std::map &funcMap, const std::string &funcName); void updateFuncInfo(const std::map> &allFuncInfo); void excludeArraysFromDistribution(const std::map>& arrayLinksByFuncCalls, const std::map, std::pair> declaredArrays, std::map>& loopGraph, std::vector parallelRegions, std::map>& SPF_messages, std::map, DIST::Array*>& createdArrays, int sharedMemoryParallelization = 0); #if __SPF void functionAnalyzer(SgFile *file, std::map> &allFuncInfo, const std::vector &loops, std::vector &messagesForFile, std::map>& fullIR); int CheckFunctionsToInline(SgProject *proj, const std::map &files, const char *fileName, std::map> &funcByFile, const std::map> &loopGraph, std::map> &allMessages, bool needToAddErrors, const std::map> &arrayLinksByFuncCalls, const std::vector ®ions); void checkForRecursion(SgFile *file, std::map> &allFuncInfo, std::vector &messagesForFile); bool isPassFullArray(SgExpression *ex); void doMacroExpand(SgFile *file, std::vector &messages); void propagateWritesToArrays(std::map> &allFuncInfo); void detectCopies(std::map> &allFuncInfo); void fillInterfaceBlock(std::map>& allFuncInfo); parF detectExpressionType(SgExpression* exp); void findContainsFunctions(SgStatement *st, std::vector &found, const bool searchAll = false); void correctNameIfContains(SgStatement* call, SgExpression* exCall, std::string& name, const std::vector& containsFunctions, const std::string& prefix); int countPerfectLoopNest(SgStatement* st); void setInlineAttributeToCalls(const std::map& allFunctions, const std::map>>& inDataChains, const std::map>& hiddenData); #endif