diff --git a/mie/ir/op.c b/mie/ir/op.c index 7a3b239..9b13117 100644 --- a/mie/ir/op.c +++ b/mie/ir/op.c @@ -80,12 +80,24 @@ struct mie_register *mie_op_add_result(struct mie_op *op, const struct mie_type return result; } +static bool is_isolated(const struct mie_op *op) +{ + const struct mie_trait *isolated = mie_trait_table_get_unique( + &op->op_info->op_traits, "builtin", "isolated-from-above"); + return isolated != NULL; +} + struct mie_region *mie_op_add_region(struct mie_op *op) { + bool isolated = is_isolated(op); + struct mie_region *region = mie_vector_emplace_back(op->op_regions, NULL); - region->r_names = mie_name_map_create(NULL); region->r_parent = op; + if (isolated) { + region->r_names = mie_name_map_create(NULL); + } + return region; }