mie: select: add support for target-specific nodes and lowering operations

This commit is contained in:
2025-09-08 15:42:22 +01:00
parent 5ca045fd5b
commit eb260fb35c
15 changed files with 277 additions and 76 deletions

View File

@@ -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;
}