Lines Matching refs:dstId
273 bool hasEdge(unsigned srcId, unsigned dstId, Value value = nullptr) { in hasEdge()
274 if (outEdges.count(srcId) == 0 || inEdges.count(dstId) == 0) { in hasEdge()
278 return edge.id == dstId && (!value || edge.value == value); in hasEdge()
280 bool hasInEdge = llvm::any_of(inEdges[dstId], [=](Edge &edge) { in hasEdge()
287 void addEdge(unsigned srcId, unsigned dstId, Value value) { in addEdge()
288 if (!hasEdge(srcId, dstId, value)) { in addEdge()
289 outEdges[srcId].push_back({dstId, value}); in addEdge()
290 inEdges[dstId].push_back({srcId, value}); in addEdge()
297 void removeEdge(unsigned srcId, unsigned dstId, Value value) { in removeEdge()
298 assert(inEdges.count(dstId) > 0); in removeEdge()
305 for (auto *it = inEdges[dstId].begin(); it != inEdges[dstId].end(); ++it) { in removeEdge()
307 inEdges[dstId].erase(it); in removeEdge()
314 if ((*it).id == dstId && (*it).value == value) { in removeEdge()
323 bool hasDependencePath(unsigned srcId, unsigned dstId) { in hasDependencePath()
331 if (idAndIndex.first == dstId) in hasDependencePath()
389 Operation *getFusedLoopNestInsertionPoint(unsigned srcId, unsigned dstId) { in getFusedLoopNestInsertionPoint()
391 return getNode(dstId)->op; in getFusedLoopNestInsertionPoint()
395 gatherDefiningNodes(dstId, definingNodes); in getFusedLoopNestInsertionPoint()
408 if (outEdge.id != dstId) in getFusedLoopNestInsertionPoint()
413 for (auto &inEdge : inEdges[dstId]) in getFusedLoopNestInsertionPoint()
418 Operation *dstNodeInst = getNode(dstId)->op; in getFusedLoopNestInsertionPoint()
465 void updateEdges(unsigned srcId, unsigned dstId, in updateEdges()
473 addEdge(inEdge.id, dstId, inEdge.value); in updateEdges()
482 if (outEdge.id == dstId) in updateEdges()
485 addEdge(dstId, outEdge.id, outEdge.value); in updateEdges()
493 if (inEdges.count(dstId) > 0 && !privateMemRefs.empty()) { in updateEdges()
494 SmallVector<Edge, 2> oldInEdges = inEdges[dstId]; in updateEdges()
497 removeEdge(inEdge.id, dstId, inEdge.value); in updateEdges()
503 void updateEdges(unsigned sibId, unsigned dstId) { in updateEdges()
510 addEdge(inEdge.id, dstId, inEdge.value); in updateEdges()
521 addEdge(dstId, outEdge.id, outEdge.value); in updateEdges()
602 unsigned srcId, unsigned dstId, const ComputationSliceState &fusionSlice, in canRemoveSrcNodeAfterFusion() argument
606 Operation *dstNodeOp = mdg->getNode(dstId)->op; in canRemoveSrcNodeAfterFusion()
660 static void getProducerCandidates(unsigned dstId, MemRefDependenceGraph *mdg, in getProducerCandidates() argument
663 if (mdg->inEdges.count(dstId) == 0) in getProducerCandidates()
667 auto *dstNode = mdg->getNode(dstId); in getProducerCandidates()
674 for (auto &srcEdge : mdg->inEdges[dstId]) { in getProducerCandidates()
696 gatherProducerConsumerMemrefs(unsigned srcId, unsigned dstId, in gatherProducerConsumerMemrefs() argument
699 auto *dstNode = mdg->getNode(dstId); in gatherProducerConsumerMemrefs()
848 unsigned dstId = memrefAndList.second[j]; in init() local
850 getNode(dstId)->getStoreOpCount(memrefAndList.first) > 0; in init()
852 addEdge(srcId, dstId, memrefAndList.first); in init()
993 static bool hasNonAffineUsersOnThePath(unsigned srcId, unsigned dstId, in hasNonAffineUsersOnThePath() argument
997 auto *dstNode = mdg->getNode(dstId); in hasNonAffineUsersOnThePath()
1027 static bool hasNonAffineUsersOnThePath(unsigned srcId, unsigned dstId, in hasNonAffineUsersOnThePath() argument
1044 if (hasNonAffineUsersOnThePath(srcId, dstId, memref, mdg)) in hasNonAffineUsersOnThePath()
1423 unsigned dstId = worklist.back(); in fuseProducerConsumerNodes() local
1427 if (mdg->nodes.count(dstId) == 0) in fuseProducerConsumerNodes()
1430 auto *dstNode = mdg->getNode(dstId); in fuseProducerConsumerNodes()
1439 LLVM_DEBUG(llvm::dbgs() << "Evaluating dst loop " << dstId << "\n"); in fuseProducerConsumerNodes()
1459 getProducerCandidates(dstId, mdg, srcIdCandidates); in fuseProducerConsumerNodes()
1466 << " for dst loop " << dstId << "\n"); in fuseProducerConsumerNodes()
1474 gatherProducerConsumerMemrefs(srcId, dstId, mdg, in fuseProducerConsumerNodes()
1498 hasNonAffineUsersOnThePath(srcId, dstId, mdg)) { in fuseProducerConsumerNodes()
1584 srcId, dstId, bestSlice, fusedLoopInsPoint, srcEscapingMemRefs, in fuseProducerConsumerNodes()
1603 mdg->getOutEdgeCount(dstId, memref) > 0) in fuseProducerConsumerNodes()
1611 return edge.value == memref && edge.id != dstId; in fuseProducerConsumerNodes()
1624 << "Fused src loop " << srcId << " into dst loop " << dstId in fuseProducerConsumerNodes()
1663 mdg->addEdge(newMemRefNodeId, dstId, newMemRef); in fuseProducerConsumerNodes()
1668 dstNode = mdg->getNode(dstId); in fuseProducerConsumerNodes()
1677 mdg->addToNode(dstId, dstLoopCollector.loadOpInsts, in fuseProducerConsumerNodes()
1699 unsigned dstId = worklist.back(); in fuseSiblingNodes() local
1703 if (mdg->nodes.count(dstId) == 0) in fuseSiblingNodes()
1706 auto *dstNode = mdg->getNode(dstId); in fuseSiblingNodes()