Files
mie/mie/include/mie/ir/block.h
Max Wash e8534f8d70 mie: ir: Op->Region, Region->Block, and Block->Op lists are now b_queues rather than mie_vectors
this change has two key benefits:
 1. we no longer need to allocate large contigious buffers for Regions with lots
    of Blocks, or Blocks with lots of Ops.
 2. this simplifies re-arranging, inserting, and moving parts of the IR structure.
2026-01-25 14:56:47 +00:00

38 lines
1.1 KiB
C

#ifndef MIE_IR_BLOCK_H_
#define MIE_IR_BLOCK_H_
#include <blue/core/queue.h>
#include <mie/misc.h>
#include <mie/name.h>
#include <mie/vector.h>
struct mie_op;
struct mie_register;
struct mie_block {
struct mie_name b_name;
struct mie_region *b_parent;
/* used by struct mie_region */
b_queue_entry b_entry;
MIE_VECTOR_DECLARE(struct mie_register, b_params);
/* queue of struct mie_op */
b_queue b_ops;
};
extern struct mie_vector_ops mie_block_vector_ops;
MIE_API struct mie_op *mie_block_get_first_op(const struct mie_block *block);
MIE_API struct mie_op *mie_block_get_prev_op(
const struct mie_block *block, const struct mie_op *before);
MIE_API struct mie_op *mie_block_get_next_op(
const struct mie_block *block, const struct mie_op *after);
MIE_API struct mie_op *mie_block_get_last_op(const struct mie_block *block);
MIE_API struct mie_op *mie_block_add_op(struct mie_block *block);
MIE_API struct mie_op *mie_block_add_op_after(
struct mie_block *block, struct mie_op *after);
MIE_API struct mie_register *mie_block_add_param(struct mie_block *block);
#endif