105 lines
4.0 KiB
C
105 lines
4.0 KiB
C
#ifndef MIE_BUILDER_H_
|
|
#define MIE_BUILDER_H_
|
|
|
|
#include <blue/core/btree.h>
|
|
#include <mie/misc.h>
|
|
#include <mie/switch.h>
|
|
#include <mie/value.h>
|
|
|
|
struct b_dict;
|
|
|
|
struct mie_block;
|
|
struct mie_module;
|
|
struct mie_data;
|
|
struct mie_type;
|
|
struct mie_phi;
|
|
|
|
struct mie_ctx {
|
|
struct mie_int *ctx_true, *ctx_false;
|
|
b_btree ctx_ints;
|
|
};
|
|
|
|
struct mie_builder {
|
|
struct mie_ctx *b_ctx;
|
|
struct mie_module *b_module;
|
|
struct mie_instr *b_prev_instr;
|
|
struct mie_block *b_current_block;
|
|
};
|
|
|
|
extern struct mie_ctx *mie_ctx_create(void);
|
|
extern void mie_ctx_destroy(struct mie_ctx *ctx);
|
|
|
|
extern struct mie_value *mie_ctx_get_bool(struct mie_ctx *ctx, bool val);
|
|
extern struct mie_value *mie_ctx_get_int(struct mie_ctx *ctx, long long val);
|
|
|
|
extern struct mie_builder *mie_builder_create(
|
|
struct mie_ctx *ctx, struct mie_module *mod);
|
|
extern void mie_builder_destroy(struct mie_builder *builder);
|
|
|
|
extern void mie_builder_put_record(
|
|
struct mie_builder *builder, struct mie_const *val, const char *name);
|
|
extern void mie_builder_put_data(struct mie_builder *builder, struct mie_data *data);
|
|
extern void mie_builder_put_type(struct mie_builder *builder, struct mie_type *type);
|
|
extern void mie_builder_set_insert_point(
|
|
struct mie_builder *builder, struct mie_block *block);
|
|
|
|
extern struct mie_value *mie_builder_ret(
|
|
struct mie_builder *builder, struct mie_value *val);
|
|
extern struct mie_value *mie_builder_add(
|
|
struct mie_builder *builder, struct mie_value *left,
|
|
struct mie_value *right, const char *name);
|
|
extern struct mie_value *mie_builder_sub(
|
|
struct mie_builder *builder, struct mie_value *left,
|
|
struct mie_value *right, const char *name);
|
|
extern struct mie_value *mie_builder_mul(
|
|
struct mie_builder *builder, struct mie_value *left,
|
|
struct mie_value *right, const char *name);
|
|
extern struct mie_value *mie_builder_div(
|
|
struct mie_builder *builder, struct mie_value *left,
|
|
struct mie_value *right, const char *name);
|
|
extern struct mie_value *mie_builder_load(
|
|
struct mie_builder *builder, struct mie_value *type,
|
|
struct mie_value *src, const char *name);
|
|
extern struct mie_value *mie_builder_store(
|
|
struct mie_builder *builder, struct mie_value *val, struct mie_value *dest);
|
|
extern struct mie_value *mie_builder_alloca(
|
|
struct mie_builder *builder, struct mie_type *type, const char *name);
|
|
extern struct mie_value *mie_builder_switch(
|
|
struct mie_builder *builder, struct mie_value *cond,
|
|
struct mie_switch_branch *branches, size_t nr_branches,
|
|
struct mie_block *default_block);
|
|
extern struct mie_value *mie_builder_br(
|
|
struct mie_builder *builder, struct mie_block *dest);
|
|
extern struct mie_value *mie_builder_br_if(
|
|
struct mie_builder *builder, struct mie_value *cond,
|
|
struct mie_block *if_true, struct mie_block *if_false);
|
|
extern struct mie_value *mie_builder_msg(
|
|
struct mie_builder *builder, struct mie_value *ret_type,
|
|
struct mie_value *dest, struct mie_value *src, const char *name);
|
|
extern struct mie_value *mie_builder_cmp_eq(
|
|
struct mie_builder *builder, struct mie_value *left,
|
|
struct mie_value *right, const char *name);
|
|
extern struct mie_value *mie_builder_cmp_lt(
|
|
struct mie_builder *builder, struct mie_value *left,
|
|
struct mie_value *right, const char *name);
|
|
extern struct mie_value *mie_builder_cmp_gt(
|
|
struct mie_builder *builder, struct mie_value *left,
|
|
struct mie_value *right, const char *name);
|
|
extern struct mie_value *mie_builder_cmp_leq(
|
|
struct mie_builder *builder, struct mie_value *left,
|
|
struct mie_value *right, const char *name);
|
|
extern struct mie_value *mie_builder_cmp_geq(
|
|
struct mie_builder *builder, struct mie_value *left,
|
|
struct mie_value *right, const char *name);
|
|
extern struct mie_value *mie_builder_getelementptr(
|
|
struct mie_builder *builder, struct mie_type *container_type,
|
|
struct mie_value *container, struct mie_value *index, const char *name);
|
|
extern struct mie_value *mie_builder_setelementptr(
|
|
struct mie_builder *builder, struct mie_type *container_type,
|
|
struct mie_value *container, struct mie_value *index);
|
|
extern struct mie_phi *mie_builder_phi(
|
|
struct mie_builder *builder, struct mie_type *type,
|
|
unsigned int nr_edges, const char *name);
|
|
|
|
#endif
|