|
Jlm
|
#include <hls.hpp>


Public Member Functions | |
| ~LoopNode () noexcept override=default | |
| const rvsdg::Operation & | GetOperation () const noexcept override |
| rvsdg::Region * | subregion () const noexcept |
| rvsdg::RegionResult * | predicate () const noexcept |
| rvsdg::Output & | GetPredicateBuffer () const noexcept |
| void | set_predicate (jlm::rvsdg::Output *p) |
| BackEdgeArgument * | add_backedge (std::shared_ptr< const jlm::rvsdg::Type > type) |
| rvsdg::StructuralOutput * | AddLoopVar (rvsdg::Output *origin, rvsdg::Output **buffer=nullptr) |
| rvsdg::Output * | addLoopConstant (rvsdg::Output *origin) |
| rvsdg::Output * | addResponseInput (rvsdg::Output *origin) |
| rvsdg::Output * | addRequestOutput (rvsdg::Output *origin) |
| void | removeLoopOutput (rvsdg::StructuralOutput *output) |
| void | removeLoopInput (rvsdg::StructuralInput *input) |
| LoopNode * | copy (rvsdg::Region *region, rvsdg::SubstitutionMap &smap) const override |
| Copy a node with substitutions. More... | |
Public Member Functions inherited from jlm::rvsdg::StructuralNode | |
| ~StructuralNode () noexcept override | |
| std::string | DebugString () const override |
| size_t | nsubregions () const noexcept |
| rvsdg::Region * | subregion (size_t index) const noexcept |
| SubregionIteratorRange | Subregions () |
| SubregionConstIteratorRange | Subregions () const |
| StructuralInput * | input (size_t index) const noexcept |
| StructuralOutput * | output (size_t index) const noexcept |
Public Member Functions inherited from jlm::rvsdg::Node | |
| virtual | ~Node () |
| Node (Region *region) | |
| Id | GetNodeId () const noexcept |
| size_t | ninputs () const noexcept |
| NodeInput * | input (size_t index) const noexcept |
| InputIteratorRange | Inputs () noexcept |
| InputConstIteratorRange | Inputs () const noexcept |
| size_t | noutputs () const noexcept |
| NodeOutput * | output (size_t index) const noexcept |
| OutputIteratorRange | Outputs () noexcept |
| OutputConstIteratorRange | Outputs () const noexcept |
| bool | IsDead () const noexcept |
| Determines whether the node is dead. More... | |
| std::size_t | numSuccessors () const noexcept |
| size_t | RemoveInputs (const util::HashSet< size_t > &indices) |
| size_t | RemoveOutputs (const util::HashSet< size_t > &indices) |
| Graph * | graph () const noexcept |
| rvsdg::Region * | region () const noexcept |
| virtual Node * | copy (rvsdg::Region *region, const std::vector< jlm::rvsdg::Output * > &operands) const |
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 |