#pragma once struct RemoteRequest { LoopGraph* position; int dimNum; REMOTE_TYPE value; int currLine; int maxDimSize; explicit RemoteRequest(LoopGraph* position, int dimNum, REMOTE_TYPE value, int currLine, int maxDimSize) : position(position), dimNum(dimNum), value(value), currLine(currLine), maxDimSize(maxDimSize) { } }; std::map createRemoteInParallel(const std::pair under_dvm_dir, const DIST::Arrays &allArrays, const std::map> &loopInfo, DIST::GraphCSR &reducedG, const DataDirective &data, const std::vector &currVar, std::vector &messages, const uint64_t regionId, const std::map> &arrayLinksByFuncCalls, const std::map& funcMap); void addRemoteLink(const LoopGraph* loop, const std::map& funcMap, ArrayRefExp* expr, std::map& uniqRemotes, const std::set& remotesInParallel, std::set& addedRemotes, const std::vector& mapToLoop, std::vector& messages, const int line, bool bindToLoopDistribution = true); ArrayRefExp* createRemoteLink(const LoopGraph* currLoop, const DIST::Array* forArray); std::vector checkArrayRefInLoopForRemoteStatus(bool ifUnknownArrayAssignFound, int sumMatched, int numOfSubs, int maxMatched, int currLine, DIST::Array* currArray, std::vector& wasFound, ArrayRefExp* arrayRef, std::map>& loopInfo, const std::vector& matchedToDim, const std::map& sortedLoopGraph, const std::map>& arrayLinksByFuncCalls, const ParallelRegion* region, const std::vector& parentLoops);