|
docc 0.8.3 (0d44999b)
C++ API Reference
|
Base class for structured loop constructs. More...
#include <sdfg/structured_control_flow/structured_loop.h>
Public Member Functions | |
| virtual | ~StructuredLoop ()=default |
| StructuredLoop (const StructuredLoop &node)=delete | |
| StructuredLoop & | operator= (const StructuredLoop &)=delete |
| void | validate (const Function &function) const override |
| Validates the element. | |
| const symbolic::Symbol | indvar () const |
| Get the induction variable (loop counter) symbol. | |
| const symbolic::Expression | init () const |
| Get the initialization expression for the induction variable. | |
| const symbolic::Expression | update () const |
| Get the update expression for the induction variable. | |
| const symbolic::Condition | condition () const |
| Get the loop continuation condition. | |
| Sequence & | root () const |
| Access the loop body sequence. | |
| const ScheduleType & | schedule_type () const |
| Get the scheduling strategy for this Map. | |
| void | replace (const symbolic::Expression old_expression, const symbolic::Expression new_expression) override |
| Replace occurrences of an expression in loop parameters and body. | |
| void | replace (const symbolic::ExpressionMapping &replacements) override |
| symbolic::Integer | stride () const |
| Describes the stride of a loop's update as a constant. | |
| bool | is_contiguous () const |
| Checks if the loop has a positive unit stride (i.e., update is indvar + 1). | |
| bool | is_monotonic () const |
| Checks if the loop is monotonic (i.e., stride is a positive integer). | |
| symbolic::Expression | canonical_bound () const |
| Describes the bound of a loop as a closed-form expression. | |
| symbolic::Expression | canonical_bound_upper () const |
| Describes the upper bound of a loop (for positive stride). | |
| symbolic::Expression | canonical_bound_lower () const |
| Describes the lower bound of a loop (for negative stride). | |
| symbolic::Expression | num_iterations () const |
| Describes the number of iterations of a loop as a closed-form expression. | |
| symbolic::Expression | num_iterations_approx () const |
| Overapproximated (upper-bound) number of iterations. | |
| bool | is_loop_normal_form () const |
| Checks if the loop is in a normal form. | |
| Public Member Functions inherited from sdfg::structured_control_flow::ControlFlowNode | |
| virtual bool | accept (visitor::ActualStructuredSDFGVisitor &visitor)=0 |
| virtual | ~ControlFlowNode ()=default |
| ControlFlowNode * | get_parent () |
| const ControlFlowNode * | get_parent () const |
| ControlFlowNode (const ControlFlowNode &node)=delete | |
| ControlFlowNode & | operator= (const ControlFlowNode &)=delete |
| Public Member Functions inherited from sdfg::Element | |
| Element (size_t element_id, const DebugInfo &debug_info) | |
| virtual | ~Element ()=default |
| size_t | element_id () const |
| const DebugInfo & | debug_info () const |
| void | set_debug_info (const DebugInfo &debug_info) |
| void | add_metadata (const std::string &key, const std::string &value) |
| void | remove_metadata (const std::string &key) |
| const std::string & | metadata (const std::string &key) const |
| const std::string * | metadata_if_exists (const std::string &key) const |
| const std::unordered_map< std::string, std::string > & | metadata () const |
| virtual ElementType | type_id () const =0 |
| Returns the type of the element. | |
| std::string_view | element_type () const |
| Returns the type of the element as a human-readable string. | |
Static Public Member Functions | |
| static bool | classof (const Element &element) |
LLVM-style RTTI predicate: true if element is a StructuredLoop. | |
| Static Public Member Functions inherited from sdfg::structured_control_flow::ControlFlowNode | |
| static bool | classof (const Element &element) |
LLVM-style RTTI predicate: true if element is a ControlFlowNode. | |
| static std::vector< ControlFlowNode * > | parent_chain (ControlFlowNode &child) |
Static Public Attributes | |
| static constexpr ElementType | TypeGroup = ElementType::For | ElementType::Map | ElementType::Reduce |
| Bitmask of all concrete ElementTypes that are StructuredLoops. | |
| Static Public Attributes inherited from sdfg::structured_control_flow::ControlFlowNode | |
| static constexpr ElementType | TypeGroup |
| Bitmask of all concrete ElementTypes that are ControlFlowNodes. | |
Protected Member Functions | |
| void | reset_cache () |
| symbolic::Integer | compute_stride () const |
| symbolic::Expression | compute_canonical_bound () const |
| symbolic::Expression | compute_num_iterations () const |
| StructuredLoop (size_t element_id, const DebugInfo &debug_info, ControlFlowNode *parent, symbolic::Symbol indvar, symbolic::Expression init, symbolic::Expression update, symbolic::Condition condition, const ScheduleType &schedule_type=ScheduleType_Sequential::create()) | |
| Protected Member Functions inherited from sdfg::structured_control_flow::ControlFlowNode | |
| ControlFlowNode (size_t element_id, const DebugInfo &debug_info, ControlFlowNode *parent) | |
| Protected constructor for control flow nodes with parent. | |
Protected Attributes | |
| symbolic::Symbol | indvar_ |
| symbolic::Expression | init_ |
| symbolic::Expression | update_ |
| symbolic::Condition | condition_ |
| std::unique_ptr< Sequence > | root_ |
| ScheduleType | schedule_type_ |
| std::optional< symbolic::Integer > | stride_cache_ |
| std::optional< symbolic::Expression > | canonical_bound_cache_ |
| std::optional< symbolic::Expression > | num_iterations_cache_ |
| Protected Attributes inherited from sdfg::structured_control_flow::ControlFlowNode | |
| ControlFlowNode * | parent_ |
| Protected Attributes inherited from sdfg::Element | |
| size_t | element_id_ |
| DebugInfo | debug_info_ |
| std::unordered_map< std::string, std::string > | metadata_ |
Static Protected Attributes | |
| static constexpr size_t | REQUIRED_ELEMENT_IDS = 2 |
Friends | |
| class | sdfg::builder::StructuredSDFGBuilder |
Base class for structured loop constructs.
StructuredLoop is the abstract base class for all structured loop types in a StructuredSDFG. It provides common functionality for loops with:
Derived loop types include:
Loop Structure:
The loop body is a Sequence that can contain any control flow nodes (blocks, nested loops, conditionals, etc.).
|
protected |
|
virtualdefault |
|
delete |
| symbolic::Expression sdfg::structured_control_flow::StructuredLoop::canonical_bound | ( | ) | const |
Describes the bound of a loop as a closed-form expression.
Example: i <= N && i < M -> i < min(N + 1, M)
| symbolic::Expression sdfg::structured_control_flow::StructuredLoop::canonical_bound_lower | ( | ) | const |
Describes the lower bound of a loop (for negative stride).
Extracts the exclusive lower bound from conditions like:
| symbolic::Expression sdfg::structured_control_flow::StructuredLoop::canonical_bound_upper | ( | ) | const |
Describes the upper bound of a loop (for positive stride).
Extracts the exclusive upper bound from conditions like:
|
inlinestatic |
LLVM-style RTTI predicate: true if element is a StructuredLoop.
|
protected |
|
protected |
|
protected |
| const symbolic::Condition sdfg::structured_control_flow::StructuredLoop::condition | ( | ) | const |
Get the loop continuation condition.
| const symbolic::Symbol sdfg::structured_control_flow::StructuredLoop::indvar | ( | ) | const |
Get the induction variable (loop counter) symbol.
| const symbolic::Expression sdfg::structured_control_flow::StructuredLoop::init | ( | ) | const |
Get the initialization expression for the induction variable.
| bool sdfg::structured_control_flow::StructuredLoop::is_contiguous | ( | ) | const |
Checks if the loop has a positive unit stride (i.e., update is indvar + 1).
| bool sdfg::structured_control_flow::StructuredLoop::is_loop_normal_form | ( | ) | const |
Checks if the loop is in a normal form.
Criteria:
| bool sdfg::structured_control_flow::StructuredLoop::is_monotonic | ( | ) | const |
Checks if the loop is monotonic (i.e., stride is a positive integer).
| symbolic::Expression sdfg::structured_control_flow::StructuredLoop::num_iterations | ( | ) | const |
Describes the number of iterations of a loop as a closed-form expression.
| symbolic::Expression sdfg::structured_control_flow::StructuredLoop::num_iterations_approx | ( | ) | const |
Overapproximated (upper-bound) number of iterations.
Same formula as num_iterations, but applies symbolic::overapproximate to the numerator before dividing by the stride. This collapses tile-style patterns where the canonical bound is a min(...) containing the loop's init expression. For example, with init = k_tile0 and condition k < k_tile0 + 8 && k < 500, num_iterations returns max(0, min(500 - k_tile0, 8)) while this helper returns the constant 8.
The returned expression is always >= num_iterations for all symbol valuations. Use this when a conservative integer upper bound is needed (e.g. tile sizing, working-set estimates) and the exact symbolic form is not required.
|
delete |
|
overridevirtual |
Replace occurrences of an expression in loop parameters and body.
| old_expression | Expression to replace |
| new_expression | Expression to replace with |
Implements sdfg::Element.
|
overridevirtual |
Reimplemented from sdfg::Element.
|
protected |
| Sequence & sdfg::structured_control_flow::StructuredLoop::root | ( | ) | const |
Access the loop body sequence.
| const ScheduleType & sdfg::structured_control_flow::StructuredLoop::schedule_type | ( | ) | const |
Get the scheduling strategy for this Map.
| symbolic::Integer sdfg::structured_control_flow::StructuredLoop::stride | ( | ) | const |
Describes the stride of a loop's update as a constant.
| const symbolic::Expression sdfg::structured_control_flow::StructuredLoop::update | ( | ) | const |
Get the update expression for the induction variable.
|
overridevirtual |
Validates the element.
| InvalidSDFGException | if the element is invalid |
Implements sdfg::Element.
|
friend |
|
mutableprotected |
|
protected |
|
protected |
|
protected |
|
mutableprotected |
|
staticconstexprprotected |
|
protected |
|
protected |
|
mutableprotected |
|
staticconstexpr |
Bitmask of all concrete ElementTypes that are StructuredLoops.
|
protected |