ack/mach/proto/mcg/basicblock.h
David Given 81bc2c74c5 A bb's regsin are no longer the same as those of its first instruction;
occasionally the first hop of a block would try to rearrange its registers (due
to evicted throughs), resulting in the phi moves copying values into the wrong
registers.
2016-11-16 20:52:15 +01:00

44 lines
1 KiB
C

#ifndef BASICBLOCK_H
#define BASICBLOCK_H
struct phi
{
struct basicblock* prev; /* Predecessor that this phi is referring to */
struct ir* ir; /* IR of variable definition */
};
struct basicblock
{
const char* name;
ARRAYOF(struct em) ems;
ARRAYOF(struct ir) irs;
ARRAYOF(struct hop) hops;
ARRAYOF(struct basicblock) prevs;
ARRAYOF(struct basicblock) nexts;
int order; /* used by dominance graph code */
PMAPOF(struct vreg, struct phi) phis;
/* Used by liveness calculation. */
ARRAYOF(struct vreg) liveins;
ARRAYOF(struct vreg) liveouts;
/* Register assignments on entry and exit. */
register_assignment_t regsin;
register_assignment_t* regsout; /* points at regsout of the last insn. */
bool is_fake : 1;
bool is_root : 1;
bool is_terminated : 1;
};
extern void bb_init(void);
extern struct basicblock* bb_get(const char* name);
extern void bb_alias(struct basicblock* block, const char* name);
#endif
/* vim: set sw=4 ts=4 expandtab : */