55 lines
1.3 KiB
C
55 lines
1.3 KiB
C
#ifndef MIE_SELECT_GRAPH_H_
|
|
#define MIE_SELECT_GRAPH_H_
|
|
|
|
#include <blue/core/btree.h>
|
|
#include <blue/core/queue.h>
|
|
#include <mie/misc.h>
|
|
#include <mie/target/target.h>
|
|
|
|
struct mie_ctx;
|
|
struct mie_type;
|
|
struct mie_instr;
|
|
|
|
struct mie_select_value {
|
|
struct mie_select_node *v_node;
|
|
unsigned int v_index;
|
|
};
|
|
|
|
struct mie_select_use {
|
|
struct mie_select_node *u_user;
|
|
struct mie_select_value u_value;
|
|
b_queue_entry u_entry;
|
|
};
|
|
|
|
struct mie_select_chain_end {
|
|
struct mie_select_value c_value;
|
|
b_queue_entry c_entry;
|
|
};
|
|
|
|
struct mie_select_graph {
|
|
b_queue g_nodes;
|
|
struct mie_select_node *g_root;
|
|
struct mie_select_value g_entry;
|
|
b_queue g_chain_ends;
|
|
size_t g_frame_index;
|
|
size_t g_node_id;
|
|
};
|
|
|
|
struct mie_select_use_iterator {
|
|
b_queue_entry *it_ptr;
|
|
};
|
|
|
|
MIE_API struct mie_select_graph *mie_select_graph_create(struct mie_ctx *ctx);
|
|
MIE_API void mie_select_graph_destroy(struct mie_select_graph *graph);
|
|
|
|
MIE_API enum mie_status mie_select_graph_get_node(
|
|
struct mie_select_graph *graph, const struct mie_target *target,
|
|
unsigned int op, struct mie_select_value **operands, size_t nr_operands,
|
|
struct mie_type **values, size_t nr_values, struct mie_select_node **out);
|
|
|
|
MIE_API void mie_select_graph_dump_text(struct mie_select_graph *graph);
|
|
MIE_API void mie_select_graph_dump_dot(
|
|
struct mie_select_graph *graph, const char *filename);
|
|
|
|
#endif
|