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.
38 lines
1.1 KiB
C
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
|