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 225968e94e
commit 7c1e7e21a9
15 changed files with 277 additions and 76 deletions

View File

@@ -22,8 +22,8 @@ static enum mie_status push_op(
struct mie_binary_op *op = (struct mie_binary_op *)instr;
struct mie_select_value *operands[] = {
select_builder_get_value(builder, op->op_left),
select_builder_get_value(builder, op->op_right),
mie_select_builder_get_value(builder, op->op_left),
mie_select_builder_get_value(builder, op->op_right),
};
size_t nr_operands = sizeof operands / sizeof operands[0];
@@ -32,15 +32,18 @@ static enum mie_status push_op(
};
size_t nr_results = sizeof result / sizeof result[0];
struct mie_select_value node = {0};
struct mie_select_node *node;
enum mie_status status = mie_select_graph_get_node(
mie_select_builder_get_graph(builder), opcode, operands,
nr_operands, result, nr_results, &node);
mie_select_builder_get_graph(builder), mie_target_builtin(),
opcode, operands, nr_operands, result, nr_results, &node);
if (status != MIE_SUCCESS) {
return status;
}
return select_builder_set_value(builder, MIE_VALUE(instr), &node);
struct mie_select_value value;
mie_select_node_get_value(node, op->op_type, 0, &value);
return mie_select_builder_set_value(builder, MIE_VALUE(instr), &value);
}
DEFINE_PUSH_FUNCTION(add, MIE_SELECT_OP_ADD);