#include <sdfg/passes/expansion/lib_node_expander.h>
|
| virtual | ~AccessNodeExpand ()=default |
| virtual builder::StructuredSDFGBuilder & | builder ()=0 |
| virtual structured_control_flow::Sequence & | replace_with_sequence ()=0 |
| | Creates a new sequence where the libNode was.
|
| virtual structured_control_flow::StructuredLoop & | replace_with_structured_loop (LoopType type, const symbolic::Symbol indvar, const symbolic::Condition condition, const symbolic::Expression init, const symbolic::Expression update, const ScheduleType &schedule_type)=0 |
| virtual data_flow::AccessNode & | add_scalar_input_access (structured_control_flow::Block &block, size_t input_idx)=0 |
| | Creates an access node that represents the input of the original lib-node as accurately as possible, including debug info and metadata Used as a scalar input (for pointers, the value of the pointer is read).
|
| virtual data_flow::AccessNode & | add_indirect_read_access (structured_control_flow::Block &block, size_t input_idx)=0 |
| | Creates an access node that represents the input of the original lib-node as accurately as possible, including debug info and metadata Used for indirect reads.
|
| virtual data_flow::AccessNode & | add_indirect_write_access (structured_control_flow::Block &block, size_t input_idx)=0 |
| | Creates an access node that represents the input of the original lib-node as accurately as possible, including debug info and metadata Used for indirect writes.
|
| virtual data_flow::AccessNode & | add_output_access (structured_control_flow::Block &block, size_t output_idx)=0 |
| | Creates an access node that represents the output of the original lib-node as accurately as possible, including debug info and metadata Used for outputs of the original lib-node.
|
| virtual ExpandOutcome | successfully_expanded ()=0 |
| | The expansion is now complete.
|
◆ LoopType
◆ ~AccessNodeExpand()
| virtual sdfg::passes::LibNodeExpander::AccessNodeExpand::~AccessNodeExpand |
( |
| ) |
|
|
virtualdefault |
◆ add_indirect_read_access()
Creates an access node that represents the input of the original lib-node as accurately as possible, including debug info and metadata Used for indirect reads.
Only valid if the original input is pointer-like and it was requested for IndirectRead (or IndirectReadWrite)
- Parameters
-
| block | block to insert into |
| input_idx | the index in the list of access_dirs requested & input-connectors |
- Returns
- newly created access node
◆ add_indirect_write_access()
Creates an access node that represents the input of the original lib-node as accurately as possible, including debug info and metadata Used for indirect writes.
Only valid if the original input is pointer-like and it was requested for IndirectWrite (or IndirectReadWrite)
Example: the libnode gets a pointer to an array. The expansion will now write to elements of this array in a loop
- Parameters
-
| block | block to insert into |
| input_idx | the index in the list of access_dirs requested & input-connectors |
- Returns
- newly created access node
◆ add_output_access()
Creates an access node that represents the output of the original lib-node as accurately as possible, including debug info and metadata Used for outputs of the original lib-node.
- Parameters
-
| block | block to insert into |
| input_idx | the index in the list of output-connectors |
- Returns
- newly created access node
◆ add_scalar_input_access()
Creates an access node that represents the input of the original lib-node as accurately as possible, including debug info and metadata Used as a scalar input (for pointers, the value of the pointer is read).
Only valid if the input was not requested as "Skip"
- Parameters
-
| block | block to insert into |
| input_idx | the index in the list of access_dirs requested & input-connectors |
- Returns
- newly created access node
◆ builder()
◆ replace_with_sequence()
Creates a new sequence where the libNode was.
So if the original libNode was inside a block, after this call, there might be a lead-in block with nodes that precede the libNode, the replacement sequence and a lead-out block with nodes that succeeded the original libNode
Nothing outside of this sequence must be modified, to keep the expansion stable and correct.
- Returns
- new sequence
◆ replace_with_structured_loop()
◆ successfully_expanded()
| virtual ExpandOutcome sdfg::passes::LibNodeExpander::AccessNodeExpand::successfully_expanded |
( |
| ) |
|
|
pure virtual |
The expansion is now complete.
Certain replacements that require understanding all of the changes may be applied now
The documentation for this class was generated from the following file: