MLIR-AIE 1.4.5.dev
xilinx::AIE::StreamDeadlockAnalysis Class Reference

Which streams can deadlock against each other if they share an arbiter or a link. More...

#include "aie/Dialect/AIE/Transforms/AIEStreamDependencyAnalysis.h"

Public Member Functions

 StreamDeadlockAnalysis (DeviceOp device, llvm::ArrayRef< RoutedStream > streams)
 streams must outlive the analysis.
bool canBlock (size_t f, size_t g) const
 Whether stream f, stalled at its receiver, can keep stream g from ever arriving: f carries more than its receiver takes in before waiting, and draining that receiver waits on g.
bool silent (size_t f) const
 Whether stream f carries nothing, so it neither holds nor waits.
std::string explainBlock (size_t f, size_t g) const
 Why f can block g: the chain of waits from f's receiver to g, and which links of it are assumed for lack of information.
llvm::SmallVector< std::string > assumptions (size_t f, size_t g) const
 What explainBlock(f, g) takes on trust rather than reads off the design, one sentence each.

Detailed Description

Which streams can deadlock against each other if they share an arbiter or a link.

A packet holds its arbiter grant until tlast, so a stream stalled at a full receiver holds up whatever else waits on that grant.

Definition at line 290 of file AIEStreamDependencyAnalysis.h.

Constructor & Destructor Documentation

◆ StreamDeadlockAnalysis()

StreamDeadlockAnalysis::StreamDeadlockAnalysis ( DeviceOp device,
llvm::ArrayRef< RoutedStream > streams )

streams must outlive the analysis.

Definition at line 1215 of file AIEStreamDependencyAnalysis.cpp.

Member Function Documentation

◆ assumptions()

SmallVector< std::string > StreamDeadlockAnalysis::assumptions ( size_t f,
size_t g ) const

What explainBlock(f, g) takes on trust rather than reads off the design, one sentence each.

Requires canBlock(f, g).

Definition at line 1285 of file AIEStreamDependencyAnalysis.cpp.

References xilinx::AIE::describeStream(), xilinx::AIE::describeTilePort(), xilinx::AIE::RoutedStream::dst, xilinx::AIE::StreamEndpoint::port, xilinx::AIE::RoutedStream::src, and xilinx::AIE::StreamEndpoint::tile.

Referenced by explainBlock(), and xilinx::AIE::StreamConflicts::unavoidable().

◆ canBlock()

bool StreamDeadlockAnalysis::canBlock ( size_t f,
size_t g ) const

Whether stream f, stalled at its receiver, can keep stream g from ever arriving: f carries more than its receiver takes in before waiting, and draining that receiver waits on g.

Definition at line 1252 of file AIEStreamDependencyAnalysis.cpp.

References silent().

Referenced by xilinx::AIE::StreamConflicts::explain(), and xilinx::AIE::StreamConflicts::unavoidable().

◆ explainBlock()

std::string StreamDeadlockAnalysis::explainBlock ( size_t f,
size_t g ) const

Why f can block g: the chain of waits from f's receiver to g, and which links of it are assumed for lack of information.

Requires canBlock(f, g).

Definition at line 1268 of file AIEStreamDependencyAnalysis.cpp.

References assumptions(), and xilinx::AIE::describeStream().

Referenced by xilinx::AIE::StreamConflicts::explain(), and xilinx::AIE::StreamConflicts::unavoidable().

◆ silent()

bool StreamDeadlockAnalysis::silent ( size_t f) const

Whether stream f carries nothing, so it neither holds nor waits.

Definition at line 1261 of file AIEStreamDependencyAnalysis.cpp.

Referenced by canBlock().


The documentation for this class was generated from the following files: