|
Jlm
|
#include <hls.hpp>


Public Member Functions | |
| ~ForkOperation () noexcept override | |
| ForkOperation (size_t nalternatives, const std::shared_ptr< const jlm::rvsdg::Type > &type) | |
| ForkOperation (size_t nalternatives, const std::shared_ptr< const jlm::rvsdg::Type > &type, bool isConstant) | |
| bool | operator== (const Operation &other) const noexcept override |
| std::string | debug_string () const override |
| std::unique_ptr< Operation > | copy () const override |
| bool | IsConstant () const noexcept |
Public Member Functions inherited from jlm::rvsdg::SimpleOperation | |
| ~SimpleOperation () noexcept override | |
| SimpleOperation (std::vector< std::shared_ptr< const jlm::rvsdg::Type >> operands, std::vector< std::shared_ptr< const jlm::rvsdg::Type >> results) | |
| size_t | narguments () const noexcept |
| const std::shared_ptr< const rvsdg::Type > & | argument (size_t index) const noexcept |
| size_t | nresults () const noexcept |
| const std::shared_ptr< const rvsdg::Type > & | result (size_t index) const noexcept |
Public Member Functions inherited from jlm::rvsdg::Operation | |
| virtual | ~Operation () noexcept |
| bool | operator!= (const Operation &other) const noexcept |
Static Public Member Functions | |
| static std::vector< jlm::rvsdg::Output * > | create (size_t nalternatives, jlm::rvsdg::Output &value, bool isConstant=false) |
| static rvsdg::Node & | CreateNode (const size_t numResults, rvsdg::Output &operand, const bool isConstant=false) |
Private Attributes | |
| bool | IsConstant_ = false |
Forks ensures 1-to-1 connections between producers and consumers, i.e., they handle fanout of signals. Normal forks have a register inside to ensure that a token consumed on one output is not repeated. The fork only creates an acknowledge on its single input once all outputs have been consumed.
CFORK (constant fork): Handles the special case when the same constant is used as input for multiple nodes. It would be possible to have a constant for each input, but deduplication replaces the constants with a single constant fork. Since the input of the fork is always the same value and is always valid. No handshaking is necessary and the outputs of the fork is always valid.
|
overridedefaultnoexcept |
|
inline |
|
inline |
|
inlineoverridevirtual |
Implements jlm::rvsdg::Operation.
|
inlinestatic |
Create a fork operation with a single input and multiple outputs.
/param nalternatives Number of outputs. /param value The signal type, which is the same for the input and all outputs. /param isConstant If true, the fork is a constant fork.
/return A vector of outputs.
|
inlinestatic |
Create a ForkOperation node.
| numResults | Number of outputs. |
| operand | The node's operand |
| isConstant | If true, the ForkOperation is a constant fork. |
|
inlineoverridevirtual |
Debug string for the fork operation. /return HLS_CFORK if the fork is a constant fork, else HLS_FORK.
Implements jlm::rvsdg::Operation.
|
inlinenoexcept |
|
inlineoverridevirtualnoexcept |
Implements jlm::rvsdg::Operation.