|
Reduct
v4.0.5-1-g4851deb
A functional and immutable language.
|
Intermediate Representation. More...
Go to the source code of this file.
Data Structures | |
| struct | reduct_rvsdg_origin_t |
| Origin of a data dependency edge. More... | |
| struct | reduct_rvsdg_user_t |
| User of a data dependency edge. More... | |
| struct | reduct_rvsdg_edge_t |
| Edge structure representing a data dependency. More... | |
| struct | reduct_rvsdg_node_info_t |
| Information about a node type. More... | |
| struct | reduct_rvsdg_node_t |
| struct | reduct_rvsdg_region_t |
Macros | |
| #define | REDUCT_RVSDG_NODE_TYPE_INVALID 0 |
| Invalid node type. | |
| #define | REDUCT_RVSDG_NODE_TYPE_SIMPLE_OPCODE 1 |
| Represents a primitive operation (opcode). | |
| #define | REDUCT_RVSDG_NODE_TYPE_SIMPLE_CONST 2 |
| Represents a constant. | |
| #define | REDUCT_RVSDG_NODE_TYPE_GAMMA 3 |
| Represents a branch or decision point. | |
| #define | REDUCT_RVSDG_NODE_TYPE_LAMBDA 4 |
| Represents a function. | |
| #define | REDUCT_RVSDG_NODE_TYPE_PHI 5 |
| Represents a phi node. | |
| #define | REDUCT_RVSDG_NODE_FLAGS_NONE 0 |
| No flags. | |
| #define | REDUCT_RVSDG_NODE_FLAGS_LAMBDA_VARIADIC (1 << 0) |
| Lambda node is variadic. | |
Typedefs | |
| typedef uint8_t | reduct_rvsdg_node_type_t |
| Node type. | |
| typedef uint8_t | reduct_rvsdg_node_flags_t |
| Node flags. | |
Enumerations | |
| enum | reduct_rvsdg_owner_kind_t { REDUCT_RVSDG_OWNER_NODE , REDUCT_RVSDG_OWNER_REGION } |
| Owner of a data dependency origin or user. More... | |
Functions | |
| REDUCT_API const reduct_rvsdg_node_info_t * | reduct_rvsdg_node_get_info (reduct_rvsdg_node_type_t type) |
| Get information about a node type. | |
| REDUCT_API reduct_rvsdg_edge_t * | reduct_rvsdg_edge_new (struct reduct *reduct) |
| Allocate a new IR edge. | |
| REDUCT_API void | reduct_rvsdg_edge_connect (struct reduct *reduct, reduct_rvsdg_origin_t *origin, reduct_rvsdg_user_t *user) |
| Connects an origin to a user via an edge. | |
| REDUCT_API void | reduct_rvsdg_edge_disconnect (reduct_rvsdg_edge_t *edge) |
| Disconnect an edge from its origin and user. | |
| REDUCT_API reduct_rvsdg_node_t * | reduct_rvsdg_node_new (struct reduct *reduct) |
| Allocate a new IR node. | |
| REDUCT_API reduct_rvsdg_node_t * | reduct_rvsdg_node_new_simple_opcode (struct reduct *reduct, reduct_rvsdg_region_t *region, reduct_opcode_t opcode) |
| Create a simple opcode node. | |
| REDUCT_API reduct_rvsdg_node_t * | reduct_rvsdg_node_new_simple_constant (struct reduct *reduct, reduct_rvsdg_region_t *region, reduct_handle_t constant) |
| Create a simple constant node. | |
| REDUCT_API reduct_rvsdg_node_t * | reduct_rvsdg_node_new_simple_unary (struct reduct *reduct, reduct_rvsdg_region_t *region, reduct_opcode_t opcode, struct reduct_rvsdg_origin *input) |
| Create a simple unary opcode node. | |
| REDUCT_API reduct_rvsdg_node_t * | reduct_rvsdg_node_new_simple_binary (struct reduct *reduct, reduct_rvsdg_region_t *region, reduct_opcode_t opcode, struct reduct_rvsdg_origin *left, struct reduct_rvsdg_origin *right) |
| Create a simple binary opcode node. | |
| REDUCT_API reduct_rvsdg_node_t * | reduct_rvsdg_node_new_simple_ternary (struct reduct *reduct, reduct_rvsdg_region_t *region, reduct_opcode_t opcode, struct reduct_rvsdg_origin *a, struct reduct_rvsdg_origin *b, struct reduct_rvsdg_origin *c) |
| Create a simple ternary opcode node. | |
| REDUCT_API reduct_rvsdg_node_t * | reduct_rvsdg_node_new_lambda (struct reduct *reduct, reduct_rvsdg_region_t *region) |
| Create a lambda node. | |
| REDUCT_API reduct_rvsdg_node_t * | reduct_rvsdg_node_new_phi (struct reduct *reduct, reduct_rvsdg_region_t *region) |
| Create a phi node. | |
| REDUCT_API reduct_rvsdg_node_t * | reduct_rvsdg_node_new_gamma (struct reduct *reduct, reduct_rvsdg_region_t *region, uint8_t regionCount) |
| Create a gamma node. | |
| REDUCT_API struct reduct_rvsdg_user * | reduct_rvsdg_node_get_input (reduct_rvsdg_node_t *node, uint16_t index) |
| Get an input port of a node by index. | |
| REDUCT_API struct reduct_rvsdg_origin * | reduct_rvsdg_node_get_input_origin (reduct_rvsdg_node_t *node, uint16_t index) |
| Get the output of the node connected to an input node of a node by index. | |
| REDUCT_API struct reduct_rvsdg_node * | reduct_rvsdg_node_get_input_node (reduct_rvsdg_node_t *node, uint16_t index) |
| Get the node connected to an input node of a node by index. | |
| REDUCT_API void | reduct_rvsdg_origin_redirect_users (struct reduct_rvsdg_origin *origin, struct reduct_rvsdg_origin *newOrigin) |
| Redirect all users of a origin to a new origin. | |
| REDUCT_API struct reduct_rvsdg_origin * | reduct_rvsdg_region_get_argument (reduct_rvsdg_region_t *region, uint16_t index) |
| Get an argument port of a region by index. | |
| REDUCT_API bool | reduct_rvsdg_region_is_ancestor_or_same (reduct_rvsdg_region_t *region, reduct_rvsdg_region_t *ancestor) |
| Check if a region is an ancestor of another, or if they are the same. | |
| REDUCT_API void | reduct_rvsdg_edge_redirect (reduct_rvsdg_edge_t *edge, reduct_rvsdg_origin_t *newOrigin) |
| Redirect an existing edge from its current origin to a new origin. | |
| REDUCT_API void | reduct_rvsdg_node_phi_wrap_lambda (struct reduct *reduct, reduct_rvsdg_node_t *lambda) |
| Wrap a lambda node in a phi node for recursive calls. | |
| REDUCT_API bool | reduct_rvsdg_node_is_inside_phi (reduct_rvsdg_node_t *node) |
| Check if a nodes grandparent is a phi node. | |
| REDUCT_API reduct_rvsdg_node_t * | reduct_rvsdg_node_new_call (struct reduct *reduct, reduct_rvsdg_region_t *region, reduct_rvsdg_origin_t *callable) |
| Create a CALL opcode node and connect a callable as its first input. | |
| REDUCT_API bool | reduct_rvsdg_node_map_input_to_argument (reduct_rvsdg_node_t *node, struct reduct_rvsdg_region *region, uint16_t inputIndex, uint16_t *outArgIndex) |
| Map a node input index to a region argument index. | |
| REDUCT_API bool | reduct_rvsdg_node_map_argument_to_input (reduct_rvsdg_node_t *node, struct reduct_rvsdg_region *region, uint16_t argIndex, uint16_t *outInputIndex) |
| Map a region argument index to an input index of the parent node. | |
| REDUCT_API bool | reduct_rvsdg_node_is_recur_origin (reduct_rvsdg_node_t *node, struct reduct_rvsdg_origin *origin) |
| Check if an origin is a recursion target for a given phi node. | |
| REDUCT_API reduct_rvsdg_region_t * | reduct_rvsdg_region_new (struct reduct *reduct) |
| Allocate a new IR region. | |
| REDUCT_API reduct_rvsdg_user_t * | reduct_rvsdg_user_new (struct reduct *reduct) |
| Allocate a new IR user port. | |
| REDUCT_API reduct_rvsdg_origin_t * | reduct_rvsdg_origin_new (struct reduct *reduct) |
| Allocate a new IR origin port. | |
| REDUCT_API reduct_rvsdg_user_t * | reduct_rvsdg_node_add_input (struct reduct *reduct, reduct_rvsdg_node_t *node) |
| Add a new input port to a node. | |
| REDUCT_API reduct_rvsdg_region_t * | reduct_rvsdg_node_add_region (struct reduct *reduct, reduct_rvsdg_node_t *node) |
| Add a new region to a node. | |
| REDUCT_API reduct_rvsdg_origin_t * | reduct_rvsdg_region_add_argument (struct reduct *reduct, reduct_rvsdg_region_t *region) |
| Add a new argument port to a region. | |
| REDUCT_API void | reduct_rvsdg_region_add_node (reduct_rvsdg_region_t *region, reduct_rvsdg_node_t *node) |
| Adds a node to a region. | |
| REDUCT_API void | reduct_rvsdg_region_remove_node (reduct_rvsdg_node_t *node) |
| Removes a node from its region. | |
| REDUCT_API void | reduct_rvsdg_node_delete (struct reduct *reduct, reduct_rvsdg_node_t *node) |
| Removes from the region and disconnects from any connections a node and any nodes connected to its input. | |
| REDUCT_API bool | reduct_rvsdg_node_is_identical (struct reduct *reduct, reduct_rvsdg_node_t *nodeA, reduct_rvsdg_node_t *nodeB) |
| Check if two nodes are structurally identical. | |
| REDUCT_API reduct_rvsdg_origin_t * | reduct_rvsdg_region_lift_origin (struct reduct *reduct, reduct_rvsdg_region_t *region, reduct_rvsdg_origin_t *outerValue) |
| Lift an origin from an outer region to an inner region, creating a new argument in the inner region and connecting it to the outer origin. | |
| REDUCT_API struct reduct_rvsdg_node * | reduct_rvsdg_node_copy (struct reduct *reduct, reduct_rvsdg_region_t *region, struct reduct_rvsdg_node *node) |
| Recursively copy a node. | |
Intermediate Representation.
Definition in file rvsdg.h.