mie: select: add support for target-specific nodes and lowering operations
This commit is contained in:
@@ -18,7 +18,7 @@ struct mie_select_graph *mie_select_graph_create(struct mie_ctx *ctx)
|
||||
memset(out, 0x0, sizeof *out);
|
||||
|
||||
enum mie_status status = MIE_SUCCESS;
|
||||
struct mie_select_value entry;
|
||||
struct mie_select_node *entry;
|
||||
|
||||
struct mie_type *entry_values[] = {
|
||||
mie_ctx_get_type(ctx, MIE_TYPE_OTHER),
|
||||
@@ -28,14 +28,14 @@ struct mie_select_graph *mie_select_graph_create(struct mie_ctx *ctx)
|
||||
= sizeof entry_values / sizeof entry_values[0];
|
||||
|
||||
status = mie_select_graph_get_node(
|
||||
out, MIE_SELECT_OP_ENTRY, NULL, 0, entry_values,
|
||||
nr_entry_values, &entry);
|
||||
out, mie_target_builtin(), MIE_SELECT_OP_ENTRY, NULL, 0,
|
||||
entry_values, nr_entry_values, &entry);
|
||||
if (status != MIE_SUCCESS) {
|
||||
free(out);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
out->g_entry.v_node = entry.v_node;
|
||||
mie_select_node_get_value(entry, entry_values[0], 0, &out->g_entry);
|
||||
|
||||
return out;
|
||||
}
|
||||
@@ -62,9 +62,9 @@ void mie_select_graph_destroy(struct mie_select_graph *graph)
|
||||
}
|
||||
|
||||
enum mie_status mie_select_graph_get_node(
|
||||
struct mie_select_graph *graph, unsigned int op,
|
||||
struct mie_select_value **operands, size_t nr_operands,
|
||||
struct mie_type **values, size_t nr_values, struct mie_select_value *out)
|
||||
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)
|
||||
{
|
||||
struct mie_select_node *node = mie_select_node_create(
|
||||
mie_target_builtin(), op, values, nr_values);
|
||||
@@ -83,6 +83,7 @@ enum mie_status mie_select_graph_get_node(
|
||||
free(operands2);
|
||||
|
||||
node->n_id = graph->g_node_id++;
|
||||
node->n_target = target;
|
||||
|
||||
for (size_t i = 0; i < nr_values; i++) {
|
||||
if (values[i]->t_id == MIE_TYPE_OTHER) {
|
||||
@@ -93,8 +94,7 @@ enum mie_status mie_select_graph_get_node(
|
||||
|
||||
b_queue_push_back(&graph->g_nodes, &node->n_entry);
|
||||
|
||||
out->v_node = node;
|
||||
out->v_index = 0;
|
||||
*out = node;
|
||||
|
||||
return MIE_SUCCESS;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user