|
Jlm
|
#include <hls.hpp>


Static Public Member Functions | |
| static LoopNode * | create (rvsdg::Region *parent, bool init=true) |
Private Member Functions | |
| LoopNode (rvsdg::Region *parent) | |
Private Attributes | |
| rvsdg::Output * | PredicateBuffer_ {} |
|
overridedefaultnoexcept |
|
inlineexplicitprivate |
| BackEdgeArgument * jlm::hls::LoopNode::add_backedge | ( | std::shared_ptr< const jlm::rvsdg::Type > | type | ) |
| jlm::rvsdg::Output * jlm::hls::LoopNode::addLoopConstant | ( | rvsdg::Output * | origin | ) |
| rvsdg::StructuralOutput * jlm::hls::LoopNode::AddLoopVar | ( | rvsdg::Output * | origin, |
| rvsdg::Output ** | buffer = nullptr |
||
| ) |
Creates a loop-carried variable for this LoopNode.
Creates a node input for the initial loop variable, which takes the origin as its value. Inside the loop region, a corresponding EntryArgument is created. A back-edge is also created, by adding a BackEdgeResult and corresponding BackEdgeArgument. Lastly an ExitResult with a corresponding node output is created.
At the top of the loop region, a MuxOperation predicated on the loop predicate buffer is used to pick between the EntryArgument and the BackEdgeArgument.
At the bottom of the region, a BranchOperation predicated on the loop predicate is used to send the result to an ExitResult when the loop is done, or to the BackEdgeResult if not. The BackEdgeResult has a small non-passthrough buffer in front of it, to break cycles.
| origin | the initial value, defined outside the loop |
| buffer | if non-null, will be set to a pointer to the Mux output. |
| rvsdg::Output * jlm::hls::LoopNode::addRequestOutput | ( | rvsdg::Output * | origin | ) |
Creates a node output / region result pair for sending requests out of the loop body. This output behaves as an escape hatch, and does not follow standard RVSDG semantics.
| origin | the origin of the request inside the loop |
| rvsdg::Output * jlm::hls::LoopNode::addResponseInput | ( | rvsdg::Output * | origin | ) |
Creates an input / region argument pair for sending responses into the loop body. This input behaves as an escape hatch, and does not follow standard RVSDG semantics.
| origin | the origin of the response outside the loop |
|
overridevirtual |
Copy a node with substitutions.
| region | Target region to create node in |
| smap | Operand substitutions |
Create a new node that is semantically equivalent to an existing node. The newly created node will use the same operands as the existing node unless there is a substitution registered for a particular operand.
The given substitution map is updated so that all outputs of the original node will be substituted by corresponding outputs of the newly created node in subsequent copy operations.
Implements jlm::rvsdg::Node.
|
static |
|
overridevirtualnoexcept |
Implements jlm::rvsdg::Node.
|
inlinenoexcept |
|
inlinenoexcept |
| void jlm::hls::LoopNode::removeLoopInput | ( | rvsdg::StructuralInput * | input | ) |
| void jlm::hls::LoopNode::removeLoopOutput | ( | rvsdg::StructuralOutput * | output | ) |
| void jlm::hls::LoopNode::set_predicate | ( | jlm::rvsdg::Output * | p | ) |
|
inlinenoexcept |
|
private |