Lines Matching refs:srcId
273 bool hasEdge(unsigned srcId, unsigned dstId, Value value = nullptr) { in hasEdge()
274 if (outEdges.count(srcId) == 0 || inEdges.count(dstId) == 0) { in hasEdge()
277 bool hasOutEdge = llvm::any_of(outEdges[srcId], [=](Edge &edge) { in hasEdge()
281 return edge.id == srcId && (!value || edge.value == value); 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()
299 assert(outEdges.count(srcId) > 0); in removeEdge()
306 if ((*it).id == srcId && (*it).value == value) { in removeEdge()
312 for (auto *it = outEdges[srcId].begin(); it != outEdges[srcId].end(); in removeEdge()
315 outEdges[srcId].erase(it); in removeEdge()
323 bool hasDependencePath(unsigned srcId, unsigned dstId) { in hasDependencePath()
326 worklist.push_back({srcId, 0}); in hasDependencePath()
389 Operation *getFusedLoopNestInsertionPoint(unsigned srcId, unsigned dstId) { in getFusedLoopNestInsertionPoint()
390 if (outEdges.count(srcId) == 0) in getFusedLoopNestInsertionPoint()
397 return hasDependencePath(srcId, id); in getFusedLoopNestInsertionPoint()
407 for (auto &outEdge : outEdges[srcId]) in getFusedLoopNestInsertionPoint()
414 if (inEdge.id != srcId) in getFusedLoopNestInsertionPoint()
417 Operation *srcNodeInst = getNode(srcId)->op; in getFusedLoopNestInsertionPoint()
465 void updateEdges(unsigned srcId, unsigned dstId, in updateEdges()
468 if (inEdges.count(srcId) > 0) { in updateEdges()
469 SmallVector<Edge, 2> oldInEdges = inEdges[srcId]; in updateEdges()
478 if (outEdges.count(srcId) > 0) { in updateEdges()
479 SmallVector<Edge, 2> oldOutEdges = outEdges[srcId]; in updateEdges()
483 removeEdge(srcId, outEdge.id, outEdge.value); in updateEdges()
486 removeEdge(srcId, outEdge.id, outEdge.value); in updateEdges()
602 unsigned srcId, unsigned dstId, const ComputationSliceState &fusionSlice, in canRemoveSrcNodeAfterFusion() argument
609 for (auto &outEdge : mdg->outEdges[srcId]) { in canRemoveSrcNodeAfterFusion()
696 gatherProducerConsumerMemrefs(unsigned srcId, unsigned dstId, in gatherProducerConsumerMemrefs() argument
700 auto *srcNode = mdg->getNode(srcId); in gatherProducerConsumerMemrefs()
844 unsigned srcId = memrefAndList.second[i]; in init() local
846 getNode(srcId)->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
996 auto *srcNode = mdg->getNode(srcId); in hasNonAffineUsersOnThePath()
1027 static bool hasNonAffineUsersOnThePath(unsigned srcId, unsigned dstId, in hasNonAffineUsersOnThePath() argument
1030 auto *srcNode = mdg->getNode(srcId); in hasNonAffineUsersOnThePath()
1044 if (hasNonAffineUsersOnThePath(srcId, dstId, memref, mdg)) in hasNonAffineUsersOnThePath()
1461 for (unsigned srcId : llvm::reverse(srcIdCandidates)) { in fuseProducerConsumerNodes() local
1463 auto *srcNode = mdg->getNode(srcId); in fuseProducerConsumerNodes()
1465 LLVM_DEBUG(llvm::dbgs() << "Evaluating src loop " << srcId in fuseProducerConsumerNodes()
1474 gatherProducerConsumerMemrefs(srcId, dstId, mdg, in fuseProducerConsumerNodes()
1498 hasNonAffineUsersOnThePath(srcId, dstId, mdg)) { in fuseProducerConsumerNodes()
1584 srcId, dstId, bestSlice, fusedLoopInsPoint, srcEscapingMemRefs, in fuseProducerConsumerNodes()
1602 if (mdg->getIncomingMemRefAccesses(srcId, memref) > 0 || in fuseProducerConsumerNodes()
1610 any_of(mdg->outEdges[srcId], [&](const auto &edge) { in fuseProducerConsumerNodes()
1624 << "Fused src loop " << srcId << " into dst loop " << dstId in fuseProducerConsumerNodes()
1682 << "Removing src loop " << srcId << " after fusion\n"); in fuseProducerConsumerNodes()
1685 mdg->removeNode(srcId); in fuseProducerConsumerNodes()