Lines Matching refs:mdg
604 MemRefDependenceGraph *mdg) { in canRemoveSrcNodeAfterFusion() argument
606 Operation *dstNodeOp = mdg->getNode(dstId)->op; in canRemoveSrcNodeAfterFusion()
609 for (auto &outEdge : mdg->outEdges[srcId]) { in canRemoveSrcNodeAfterFusion()
610 Operation *depNodeOp = mdg->getNode(outEdge.id)->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()
675 auto *srcNode = mdg->getNode(srcEdge.id); in getProducerCandidates()
697 MemRefDependenceGraph *mdg, in gatherProducerConsumerMemrefs() argument
699 auto *dstNode = mdg->getNode(dstId); in gatherProducerConsumerMemrefs()
700 auto *srcNode = mdg->getNode(srcId); in gatherProducerConsumerMemrefs()
709 void gatherEscapingMemrefs(unsigned id, MemRefDependenceGraph *mdg, in gatherEscapingMemrefs() argument
711 auto *node = mdg->getNode(id); in gatherEscapingMemrefs()
995 MemRefDependenceGraph *mdg) { in hasNonAffineUsersOnThePath() argument
996 auto *srcNode = mdg->getNode(srcId); in hasNonAffineUsersOnThePath()
997 auto *dstNode = mdg->getNode(dstId); in hasNonAffineUsersOnThePath()
1002 for (auto &idAndNode : mdg->nodes) { in hasNonAffineUsersOnThePath()
1028 MemRefDependenceGraph *mdg) { in hasNonAffineUsersOnThePath() argument
1030 auto *srcNode = mdg->getNode(srcId); in hasNonAffineUsersOnThePath()
1044 if (hasNonAffineUsersOnThePath(srcId, dstId, memref, mdg)) in hasNonAffineUsersOnThePath()
1359 MemRefDependenceGraph *mdg; member
1375 GreedyFusion(MemRefDependenceGraph *mdg, unsigned localBufSizeThreshold, in GreedyFusion()
1378 : mdg(mdg), localBufSizeThreshold(localBufSizeThreshold), in GreedyFusion()
1387 for (auto &idAndNode : mdg->nodes) { in init()
1427 if (mdg->nodes.count(dstId) == 0) in fuseProducerConsumerNodes()
1430 auto *dstNode = mdg->getNode(dstId); in fuseProducerConsumerNodes()
1459 getProducerCandidates(dstId, mdg, srcIdCandidates); in fuseProducerConsumerNodes()
1463 auto *srcNode = mdg->getNode(srcId); in fuseProducerConsumerNodes()
1474 gatherProducerConsumerMemrefs(srcId, dstId, mdg, in fuseProducerConsumerNodes()
1480 return mdg->getOutEdgeCount(srcNode->id, memref) > in fuseProducerConsumerNodes()
1489 gatherEscapingMemrefs(srcNode->id, mdg, srcEscapingMemRefs); in fuseProducerConsumerNodes()
1498 hasNonAffineUsersOnThePath(srcId, dstId, mdg)) { in fuseProducerConsumerNodes()
1508 mdg->getFusedLoopNestInsertionPoint(srcNode->id, dstNode->id); in fuseProducerConsumerNodes()
1585 mdg); in fuseProducerConsumerNodes()
1602 if (mdg->getIncomingMemRefAccesses(srcId, memref) > 0 || in fuseProducerConsumerNodes()
1603 mdg->getOutEdgeCount(dstId, memref) > 0) in fuseProducerConsumerNodes()
1610 any_of(mdg->outEdges[srcId], [&](const auto &edge) { in fuseProducerConsumerNodes()
1633 mdg->updateEdges(srcNode->id, dstNode->id, privateMemrefs, in fuseProducerConsumerNodes()
1661 mdg->addNode(newMemRef.getDefiningOp()); in fuseProducerConsumerNodes()
1663 mdg->addEdge(newMemRefNodeId, dstId, newMemRef); in fuseProducerConsumerNodes()
1668 dstNode = mdg->getNode(dstId); in fuseProducerConsumerNodes()
1676 mdg->clearNodeLoadAndStores(dstNode->id); in fuseProducerConsumerNodes()
1677 mdg->addToNode(dstId, dstLoopCollector.loadOpInsts, in fuseProducerConsumerNodes()
1685 mdg->removeNode(srcId); in fuseProducerConsumerNodes()
1703 if (mdg->nodes.count(dstId) == 0) in fuseSiblingNodes()
1706 auto *dstNode = mdg->getNode(dstId); in fuseSiblingNodes()
1726 auto *sibNode = mdg->getNode(sibId); in fuseWithSiblingNodes()
1732 ? mdg->getFusedLoopNestInsertionPoint(sibNode->id, dstNode->id) in fuseWithSiblingNodes()
1733 : mdg->getFusedLoopNestInsertionPoint(dstNode->id, sibNode->id); in fuseWithSiblingNodes()
1823 if (mdg->hasDependencePath(sibNode->id, dstNode->id) || in findSiblingNodeToFuse()
1824 mdg->hasDependencePath(dstNode->id, sibNode->id)) in findSiblingNodeToFuse()
1831 return mdg->getIncomingMemRefAccesses(sibNode->id, memref) > 0; in findSiblingNodeToFuse()
1846 if (hasNonAffineUsersOnThePath(dstNode->id, sibNode->id, mdg) || in findSiblingNodeToFuse()
1847 hasNonAffineUsersOnThePath(sibNode->id, dstNode->id, mdg)) in findSiblingNodeToFuse()
1863 Node *sibNode = mdg->getForOpNode(loops[0]); in findSiblingNodeToFuse()
1889 mdg->forEachMemRefInputEdge( in findSiblingNodeToFuse()
1893 mdg->getNode(inEdge.id)->getStoreOpCount(inEdge.value) > 0) in findSiblingNodeToFuse()
1902 mdg->forEachMemRefOutputEdge( in findSiblingNodeToFuse()
1910 auto *sibNode = mdg->getNode(sibNodeId); in findSiblingNodeToFuse()
1935 mdg->updateEdges(sibNode->id, dstNode->id); in updateStateAfterSiblingFusion()
1942 mdg->clearNodeLoadAndStores(dstNode->id); in updateStateAfterSiblingFusion()
1943 mdg->addToNode(dstNode->id, dstLoopCollector.loadOpInsts, in updateStateAfterSiblingFusion()
1948 if (mdg->getOutEdgeCount(sibNode->id) == 0) { in updateStateAfterSiblingFusion()
1950 mdg->removeNode(sibNode->id); in updateStateAfterSiblingFusion()
1957 for (auto &pair : mdg->memrefEdgeCount) { in eraseUnusedMemRefAllocations()