15 for (
auto endpoint : device.getOps<ObjectFifoCoreEndpointOp>())
16 if (!endpoint.drains())
17 filled.insert(endpoint.getPoolOp());
18 for (
auto endpoint : device.getOps<ObjectFifoDmaEndpointOp>())
19 if (!endpoint.drains())
20 filled.insert(endpoint.getPoolOp());
21 device.walk([&](AIEX::DmaChannelResetForOp reset) {
23 StringRef name = reset.getObjfifo();
24 if (
auto endpoint = dyn_cast_or_null<RouteEndpoint>(
25 SymbolTable::lookupNearestSymbolFrom(device,
26 reset.getObjfifoAttr())))
27 if (std::optional<StringRef> fifoName = endpoint.getFifoName())
29 rearmsByFifo[name].push_back(reset);
34 if (pool.getDisableSynchronization())
36 std::optional<ArrayAttr> initValues = pool.getInitValues();
37 int64_t full = initValues ? initValues->size() : 0;
40 std::optional<StringRef> fifo = pool.getFifoName();
41 return full != pool.getDepth() || full <= 0 || filled.contains(pool) ||
42 (fifo && rearmsByFifo.contains(*fifo));