Commit 0a4ee3b2 authored by Matthias Braun's avatar Matthias Braun
Browse files

The start block is not special anymore

The start block is not special block without any "real" instructions
anymore. In particular this means:

- There is no X_initial_exec Proj from the Start node anymore, "normal"
  cfopts are used for jumping out of the start block.
- The backend never had the special convention of the start block not
  containing actual code and used to fixup this discrpancy, no more
  fixup code needed now.
- The part_block() code got a bit more complicated because splitting the
  start block is tricky (previously part_block() simply failed in this
  case but was never used in the Start block because of its special
  convention)
parent d5d91740
......@@ -42,7 +42,17 @@ FIRM_API void turn_into_tuple(ir_node *node, int arity, ir_node *const in[]);
* node producing the outermost Tuple.
* All other link fields are cleared afterwards.
*/
FIRM_API void collect_phiprojs(ir_graph *irg);
FIRM_API void collect_phiprojs_and_start_block_nodes(ir_graph *irg);
/** Introduce a new node with "start_block_placed" attribute. It is necesary
* to call this function so the next part_block() works without running
* collect_phiprojs_and_start_block_nodes() again. */
FIRM_API void collect_new_start_block_node(ir_node *node);
/** Introduce a new phi node. It is necessary to call this function so the next
* part_block() works without running collect_phiprojs_and_start_block_nodes()
* again. */
FIRM_API void collect_new_phi_node(ir_node *node);
/** Parts a block into two. This is useful to insert other blocks within a
* given block.
......
......@@ -174,12 +174,6 @@ FIRM_API ir_node *get_irg_end(const ir_graph *irg);
/** Sets the End node of an IR graph. */
FIRM_API void set_irg_end(ir_graph *irg, ir_node *node);
/** Returns the node that represents the initial control flow of the given
* IR graph. */
FIRM_API ir_node *get_irg_initial_exec(const ir_graph *irg);
/** Sets the node that represents the initial control of the given IR graph. */
FIRM_API void set_irg_initial_exec(ir_graph *irg, ir_node *node);
/** Returns the node that represents the frame pointer of the given IR graph. */
FIRM_API ir_node *get_irg_frame(const ir_graph *irg);
/** Sets the node that represents the frame pointer of the given IR graph. */
......
......@@ -202,7 +202,7 @@ static void handle_modeb(ir_node *block, ir_node *selector, pn_Cond pnc, env_t *
break;
}
}
if (i < 0) {
if (i < 0 && n > 0) {
ir_node **in = ALLOCAN(ir_node*, n);
/* ok, ALL predecessors are either dominated by block OR other block */
if (c_b == NULL) {
......
......@@ -243,19 +243,15 @@ static ir_node *gen_Phi(ir_node *node)
static ir_node *gen_Proj_Start(ir_node *node)
{
dbg_info *dbgi = get_irn_dbg_info(node);
ir_node *block = get_nodes_block(node);
ir_node *new_block = be_transform_node(block);
ir_node *start = get_Proj_pred(node);
ir_node *new_start = be_transform_node(start);
unsigned pn = get_Proj_num(node);
switch ((pn_Start) pn) {
case pn_Start_X_initial_exec:
return new_bd_TEMPLATE_Jmp(dbgi, new_block);
switch ((pn_Start)pn) {
case pn_Start_M:
return new_rd_Proj(dbgi, new_start, mode_M, pn_TEMPLATE_Start_M);
case pn_Start_T_args:
return new_r_Bad(get_irn_irg(block), mode_T);
return new_r_Bad(get_irn_irg(node), mode_T);
case pn_Start_P_frame_base:
return new_rd_Proj(dbgi, new_start, gp_regs_mode, pn_TEMPLATE_Start_stack);
}
......
......@@ -1398,15 +1398,11 @@ static ir_node *gen_Start(ir_node *node)
static ir_node *gen_Proj_Start(ir_node *node)
{
ir_graph *irg = get_irn_irg(node);
ir_node *block = get_nodes_block(node);
ir_node *new_block = be_transform_node(block);
unsigned pn = get_Proj_num(node);
ir_graph *irg = get_irn_irg(node);
unsigned pn = get_Proj_num(node);
be_transform_node(get_Proj_pred(node));
switch ((pn_Start)pn) {
case pn_Start_X_initial_exec:
return new_bd_amd64_Jmp(NULL, new_block);
case pn_Start_M:
return get_initial_mem(irg);
case pn_Start_T_args:
......
......@@ -309,6 +309,7 @@ static void rewrite_unsigned_float_Conv(ir_node *node)
ir_mode *mode_s = find_signed_mode(mode_u);
ir_node *signed_x = new_rd_Conv(dbgi, block, unsigned_x, mode_s);
ir_node *zero = new_r_Const_null(irg, mode_s);
collect_new_start_block_node(zero);
ir_node *cmp = new_rd_Cmp(dbgi, block, signed_x, zero,
ir_relation_less);
ir_node *cond = new_rd_Cond(dbgi, block, cmp);
......@@ -321,6 +322,7 @@ static void rewrite_unsigned_float_Conv(ir_node *node)
ir_node *true_block = new_r_Block(irg, ARRAY_SIZE(in_true), in_true);
ir_node *true_jmp = new_r_Jmp(true_block);
ir_node *one = new_r_Const_one(irg, mode_u);
collect_new_start_block_node(one);
ir_node *and = new_r_And(true_block, unsigned_x, one, mode_u);
ir_node *shr = new_r_Shr(true_block, unsigned_x, one, mode_u);
ir_node *or = new_r_Or(true_block, and, shr, mode_u);
......@@ -340,11 +342,7 @@ static void rewrite_unsigned_float_Conv(ir_node *node)
set_irn_in(lower_block, ARRAY_SIZE(lower_in), lower_in);
ir_node *phi = new_r_Phi(lower_block, ARRAY_SIZE(phi_in), phi_in,
dest_mode);
assert(get_Block_phis(lower_block) == NULL);
set_Block_phis(lower_block, phi);
set_Phi_next(phi, NULL);
collect_new_phi_node(phi);
exchange(node, phi);
}
......@@ -390,6 +388,7 @@ static void rewrite_float_unsigned_Conv(ir_node *node)
ir_node *fp_x = get_Conv_op(node);
ir_mode *src_mode = get_irn_mode(fp_x);
ir_node *fp_const = create_conv_const(irg, src_mode);
collect_new_start_block_node(fp_const);
/* Test if the sign bit is needed */
ir_node *cmp = new_rd_Cmp(dbgi, block, fp_x, fp_const,
......@@ -406,6 +405,7 @@ static void rewrite_float_unsigned_Conv(ir_node *node)
ir_node *sub = new_r_Sub(true_block, fp_const, fp_x, src_mode);
ir_node *sub_conv = new_rd_Conv(dbgi, true_block, sub, mode_Ls);
ir_node *sign_bit = create_sign_bit_const(irg);
collect_new_start_block_node(sign_bit);
ir_node *xor = new_r_Eor(true_block, sub_conv, sign_bit, mode_Ls);
ir_node *true_res = new_rd_Conv(dbgi, true_block, xor, dest_mode);
......@@ -423,11 +423,7 @@ static void rewrite_float_unsigned_Conv(ir_node *node)
set_irn_in(lower_block, ARRAY_SIZE(lower_in), lower_in);
ir_node *phi = new_r_Phi(lower_block, ARRAY_SIZE(phi_in), phi_in,
dest_mode);
assert(get_Block_phis(lower_block) == NULL);
set_Block_phis(lower_block, phi);
set_Phi_next(phi, NULL);
collect_new_phi_node(phi);
exchange(node, phi);
}
......@@ -464,7 +460,7 @@ static void amd64_intrinsics_walker(ir_node *node, void *data)
static void amd64_handle_intrinsics(ir_graph *irg)
{
ir_reserve_resources(irg, IR_RESOURCE_IRN_LINK | IR_RESOURCE_PHI_LIST);
collect_phiprojs(irg);
collect_phiprojs_and_start_block_nodes(irg);
bool changed = false;
irg_walk_graph(irg, amd64_intrinsics_walker, NULL, &changed);
ir_free_resources(irg, IR_RESOURCE_IRN_LINK | IR_RESOURCE_PHI_LIST);
......
......@@ -689,6 +689,7 @@ fConst => {
},
Start => {
irn_flags => [ "schedule_first" ],
state => "pinned",
out_arity => "variable",
ins => [],
......
......@@ -1557,20 +1557,13 @@ static ir_node *gen_Proj_Div(ir_node *node)
static ir_node *gen_Proj_Start(ir_node *node)
{
ir_node *block = get_nodes_block(node);
ir_node *new_block = be_transform_node(block);
unsigned pn = get_Proj_num(node);
unsigned pn = get_Proj_num(node);
switch ((pn_Start)pn) {
case pn_Start_X_initial_exec:
/* we exchange the ProjX with a jump */
return new_bd_arm_Jmp(NULL, new_block);
case pn_Start_M:
return get_start_val(get_irn_irg(node), &start_mem);
case pn_Start_T_args:
return new_r_Bad(get_irn_irg(block), mode_T);
return new_r_Bad(get_irn_irg(node), mode_T);
case pn_Start_P_frame_base:
return get_start_val(get_irn_irg(node), &start_sp);
......
......@@ -1159,34 +1159,6 @@ static ir_node *create_be_return(be_abi_irg_t *const env, ir_node *const irn)
return ret;
}
/**
* The start block has no jump, instead it has an initial exec Proj.
* The backend wants to handle all blocks the same way, so we replace
* the out cfg edge with a real jump.
*/
static void fix_start_block(ir_graph *irg)
{
ir_node *initial_X = get_irg_initial_exec(irg);
ir_node *start_block = get_irg_start_block(irg);
ir_node *jmp = new_r_Jmp(start_block);
assert(is_Proj(initial_X));
exchange(initial_X, jmp);
set_irg_initial_exec(irg, new_r_Bad(irg, mode_X));
/* merge start block with successor if possible */
foreach_out_edge(jmp, edge) {
ir_node *succ = get_edge_src_irn(edge);
if (!is_Block(succ))
continue;
if (get_irn_arity(succ) == 1) {
exchange(succ, start_block);
}
break;
}
}
/**
* Modify the irg itself and the frame type.
*/
......@@ -1273,9 +1245,6 @@ static void modify_irg(ir_graph *const irg, be_abi_irg_t *const env)
= call->flags.try_omit_fp ? arch_env->sp : arch_env->bp;
rbitset_clear(birg->allocatable_regs, fp_reg->global_index);
/* handle start block here (place a jump in the block) */
fix_start_block(irg);
pmap_insert(env->regs, (void *) sp, NULL);
pmap_insert(env->regs, (void *) arch_env->bp, NULL);
ir_node *const start_bl = get_irg_start_block(irg);
......
......@@ -5528,24 +5528,6 @@ static ir_node *gen_Proj_ASM(ir_node *node)
return new_r_Proj(new_pred, mode, pn);
}
static ir_node *gen_Proj_Start(ir_node *node)
{
ir_node *pred = get_Proj_pred(node);
unsigned pn = get_Proj_num(node);
switch (pn) {
case pn_Start_X_initial_exec: {
ir_node *block = get_nodes_block(pred);
ir_node *new_block = be_transform_node(block);
dbg_info *dbgi = get_irn_dbg_info(node);
/* we exchange the ProjX with a jump */
ir_node *jump = new_rd_Jmp(dbgi, new_block);
return jump;
}
}
return be_duplicate_node(node);
}
static ir_node *gen_Proj_default(ir_node *node)
{
ir_node *pred = get_Proj_pred(node);
......@@ -5644,7 +5626,7 @@ static void register_transformers(void)
be_set_transform_proj_function(op_ia32_l_Minus64, gen_Proj_default);
be_set_transform_proj_function(op_Load, gen_Proj_Load);
be_set_transform_proj_function(op_Mod, gen_Proj_Mod);
be_set_transform_proj_function(op_Start, gen_Proj_Start);
be_set_transform_proj_function(op_Start, be_duplicate_node);
be_set_transform_proj_function(op_Store, gen_Proj_Store);
be_set_upper_bits_clean_function(op_Mux, ia32_mux_upper_bits_clean);
......
......@@ -254,6 +254,7 @@ static void rewrite_unsigned_float_Conv(ir_node *node)
ir_node *signed_x = new_rd_Conv(dbgi, block, unsigned_x, mode_s);
ir_node *res = new_rd_Conv(dbgi, block, signed_x, mode_d);
ir_node *zero = new_r_Const_null(irg, mode_s);
collect_new_start_block_node(zero);
ir_node *cmp = new_rd_Cmp(dbgi, block, signed_x, zero,
ir_relation_less);
ir_node *cond = new_rd_Cond(dbgi, block, cmp);
......@@ -267,6 +268,7 @@ static void rewrite_unsigned_float_Conv(ir_node *node)
ir_node *false_jmp = new_r_Jmp(false_block);
ir_tarval *correction = new_tarval_from_double(4294967296., mode_d);
ir_node *c_const = new_r_Const(irg, correction);
collect_new_start_block_node(c_const);
ir_node *fadd = new_rd_Add(dbgi, true_block, res, c_const, mode_d);
ir_node *lower_in[2] = { true_jmp, false_jmp };
......@@ -275,9 +277,7 @@ static void rewrite_unsigned_float_Conv(ir_node *node)
set_irn_in(lower_block, ARRAY_SIZE(lower_in), lower_in);
ir_node *phi = new_r_Phi(lower_block, ARRAY_SIZE(phi_in), phi_in, mode_d);
assert(get_Block_phis(lower_block) == NULL);
set_Block_phis(lower_block, phi);
set_Phi_next(phi, NULL);
collect_new_phi_node(phi);
ir_node *res_conv = new_rd_Conv(dbgi, lower_block, phi, dest_mode);
exchange(node, res_conv);
......@@ -309,6 +309,7 @@ static void rewrite_float_unsigned_Conv(ir_node *node)
ir_mode *mode_f = get_irn_mode(float_x);
ir_tarval *limit = new_tarval_from_double(2147483648., mode_f);
ir_node *limitc = new_r_Const(irg, limit);
collect_new_start_block_node(limitc);
ir_node *cmp = new_rd_Cmp(dbgi, block, float_x, limitc,
ir_relation_greater_equal);
ir_node *cond = new_rd_Cond(dbgi, block, cmp);
......@@ -322,6 +323,7 @@ static void rewrite_float_unsigned_Conv(ir_node *node)
ir_node *false_jmp = new_r_Jmp(false_block);
ir_node *c_const = new_r_Const_long(irg, mode_s, 0x80000000L);
collect_new_start_block_node(c_const);
ir_node *sub = new_rd_Sub(dbgi, true_block, float_x, limitc,
mode_f);
ir_node *sub_conv = new_rd_Conv(dbgi, true_block, sub, mode_s);
......@@ -335,9 +337,7 @@ static void rewrite_float_unsigned_Conv(ir_node *node)
set_irn_in(lower_block, ARRAY_SIZE(lower_in), lower_in);
ir_node *phi = new_r_Phi(lower_block, ARRAY_SIZE(phi_in), phi_in, mode_s);
assert(get_Block_phis(lower_block) == NULL);
set_Block_phis(lower_block, phi);
set_Phi_next(phi, NULL);
collect_new_phi_node(phi);
ir_node *res_conv = new_rd_Conv(dbgi, lower_block, phi, mode_u);
exchange(node, res_conv);
......@@ -410,7 +410,7 @@ static void sparc_handle_intrinsics(ir_graph *irg)
{
sparc_create_runtime_entities();
ir_reserve_resources(irg, IR_RESOURCE_IRN_LINK | IR_RESOURCE_PHI_LIST);
collect_phiprojs(irg);
collect_phiprojs_and_start_block_nodes(irg);
bool changed = false;
irg_walk_graph(irg, handle_intrinsic, NULL, &changed);
ir_free_resources(irg, IR_RESOURCE_IRN_LINK | IR_RESOURCE_PHI_LIST);
......
......@@ -2626,16 +2626,11 @@ static ir_node *get_frame_base(ir_graph *irg)
static ir_node *gen_Proj_Start(ir_node *node)
{
ir_node *block = get_nodes_block(node);
ir_node *new_block = be_transform_node(block);
unsigned pn = get_Proj_num(node);
unsigned pn = get_Proj_num(node);
/* make sure prolog is constructed */
be_transform_node(get_Proj_pred(node));
switch ((pn_Start) pn) {
case pn_Start_X_initial_exec:
/* exchange ProjX with a jump */
return new_bd_sparc_Ba(NULL, new_block);
case pn_Start_M: {
ir_graph *irg = get_irn_irg(node);
ir_node *mem = get_initial_mem(irg);
......@@ -2643,9 +2638,9 @@ static ir_node *gen_Proj_Start(ir_node *node)
return mem;
}
case pn_Start_T_args:
return new_r_Bad(get_irn_irg(block), mode_T);
return new_r_Bad(get_irn_irg(node), mode_T);
case pn_Start_P_frame_base:
return get_frame_base(get_irn_irg(block));
return get_frame_base(get_irn_irg(node));
}
panic("Unexpected start proj: %u\n", pn);
}
......
......@@ -76,9 +76,7 @@ void copy_irn_to_irg(ir_node *n, ir_graph *irg)
case iro_Proj: {
ir_graph *old_irg = get_irn_irg(n);
if (n == get_irg_initial_exec(old_irg))
nn = get_irg_initial_exec(irg);
else if (n == get_irg_frame(old_irg))
if (n == get_irg_frame(old_irg))
nn = get_irg_frame(irg);
else if (n == get_irg_initial_mem(old_irg))
nn = get_irg_initial_mem(irg);
......
......@@ -21,44 +21,11 @@ void instrument_initcall(ir_graph *irg, ir_entity *ent)
{
assure_edges(irg);
/* find the first block */
ir_node *initial_exec = get_irg_initial_exec(irg);
ir_node *first_block = NULL;
foreach_out_edge(initial_exec, edge) {
ir_node *succ = get_edge_src_irn(edge);
if (is_Block(succ)) {
/* found the first block */
first_block = succ;
break;
}
}
if (first_block == NULL) {
panic("Cannot find first block of irg %+F", irg);
}
/* check if this block has only one predecessor */
int idx = -1;
bool need_new_block = false;
for (int i = get_Block_n_cfgpreds(first_block); i-- > 0; ) {
ir_node *p = get_Block_cfgpred(first_block, i);
if (is_Bad(p))
continue;
if (p == initial_exec)
idx = i;
else
need_new_block = true;
}
if (need_new_block) {
ir_node *blk = new_r_Block(irg, 1, &initial_exec);
set_Block_cfgpred(first_block, idx, new_r_Jmp(blk));
first_block = blk;
}
/* place the call */
ir_node *const start_block = get_irg_start_block(irg);
ir_node *const adr = new_r_Address(irg, ent);
ir_node *const initial_mem = get_irg_initial_mem(irg);
ir_node *const call = new_r_Call(first_block, initial_mem, adr, 0,
ir_node *const call = new_r_Call(start_block, initial_mem, adr, 0,
NULL, get_entity_type(ent));
ir_node *const new_mem = new_r_Proj(call, mode_M, pn_Call_M);
......
......@@ -88,33 +88,70 @@ void exchange(ir_node *old, ir_node *nw)
| IR_GRAPH_PROPERTY_CONSISTENT_LOOPINFO);
}
static void collect_new_start_block_node_(ir_node *node)
{
/* misuse link field of End node to collect all start-block nodes */
ir_node *end = get_irg_end(get_irn_irg(node));
set_irn_link(node, get_irn_link(end));
set_irn_link(end, node);
}
void collect_new_start_block_node(ir_node *node)
{
if (is_Start(node))
return;
assert(is_irn_start_block_placed(node));
/* alreayd in list? */
if (get_irn_link(node) != NULL)
return;
collect_new_start_block_node_(node);
}
void collect_new_phi_node(ir_node *node)
{
ir_node *block = get_nodes_block(node);
add_Block_phi(block, node);
}
/**
* Walker: links all Phi nodes to their Blocks lists,
* all Proj nodes to there predecessors.
*/
static void collect_phiprojs_walker(ir_node *n, void *env)
static void collect_nodes(ir_node *node, void *env)
{
(void)env;
if (is_Phi(n)) {
ir_node *block = get_nodes_block(n);
add_Block_phi(block, n);
} else if (is_Proj(n)) {
ir_node *pred = n;
if (is_Phi(node)) {
collect_new_phi_node(node);
} else if (is_Proj(node)) {
ir_node *pred = node;
do {
pred = get_Proj_pred(pred);
} while (is_Proj(pred));
set_irn_link(n, get_irn_link(pred));
set_irn_link(pred, n);
assert(!is_irn_start_block_placed(pred) || is_Start(pred));
set_irn_link(node, get_irn_link(pred));
set_irn_link(pred, node);
} else if (is_irn_start_block_placed(node) && !is_Start(node)) {
collect_new_start_block_node_(node);
}
}
void collect_phiprojs(ir_graph *irg)
static void init_links(ir_node *node, void *data)
{
(void)data;
if (is_End(node))
return;
firm_clear_node_and_phi_links(node, data);
}
void collect_phiprojs_and_start_block_nodes(ir_graph *irg)
{
assert((ir_resources_reserved(irg) & (IR_RESOURCE_IRN_LINK|IR_RESOURCE_PHI_LIST)) ==
(IR_RESOURCE_IRN_LINK|IR_RESOURCE_PHI_LIST));
irg_walk_graph(irg, firm_clear_node_and_phi_links, collect_phiprojs_walker, NULL);
ir_node *end = get_irg_end(irg);
set_irn_link(end, end);
irg_walk_anchors(irg, init_links, collect_nodes, NULL);
}
/**
......@@ -128,11 +165,10 @@ static void move(ir_node *node, ir_node *from_bl, ir_node *to_bl)
/* move its Projs */
if (get_irn_mode(node) == mode_T) {
ir_node *proj = (ir_node*)get_irn_link(node);
while (proj) {
for (ir_node *proj = (ir_node*)get_irn_link(node);
proj != NULL; proj = (ir_node*)get_irn_link(proj)) {
if (get_nodes_block(proj) == from_bl)
set_nodes_block(proj, to_bl);
proj = (ir_node*)get_irn_link(proj);
}
}
......@@ -186,6 +222,18 @@ static void move_edges(ir_node *node, ir_node *from_bl, ir_node *to_bl)
}
}
static void update_startblock(ir_node *old_block, ir_node *new_block)
{
ir_graph *irg = get_irn_irg(old_block);
set_irg_start_block(irg, new_block);
/* move constants around */
ir_node *end = get_irg_end(irg);
for (ir_node *cnst = get_irn_link(end); cnst != end;
cnst = (ir_node*)get_irn_link(cnst)) {
set_nodes_block(cnst, new_block);
}
}
void part_block(ir_node *node)
{
/* Turn off optimizations so that blocks are not merged again. */
......@@ -214,6 +262,9 @@ void part_block(ir_node *node)
phi = get_Phi_next(phi);
}
if (old_block == get_irg_start_block(irg))
update_startblock(old_block, new_block);
set_optimize(rem_opt);
}
......@@ -231,14 +282,17 @@ ir_node *part_block_edges(ir_node *node)
/* move node and its predecessors to new_block */
move_edges(node, old_block, new_block);
/* move Phi nodes to new_block */
/* move Phi nodes and constants to new_block */
foreach_out_edge_safe(old_block, edge) {
ir_node *phi = get_edge_src_irn(edge);
if (!is_Phi(phi))
ir_node *blnode = get_edge_src_irn(edge);
if (!is_Phi(blnode) && !is_irn_start_block_placed(blnode))
continue;
set_nodes_block(phi, new_block);
set_nodes_block(blnode, new_block);
}
if (old_block == get_irg_start_block(irg))
set_irg_start_block(irg, new_block);
return old_block;
}
......
......@@ -133,8 +133,6 @@ static ir_graph *new_r_ir_graph(ir_entity *ent, int n_loc)
set_irg_start(res, start);
/* Proj results of start node */
ir_node *const projX = new_r_Proj(start, mode_X, pn_Start_X_initial_exec);
set_irg_initial_exec(res, projX);
set_irg_frame(res, new_r_Proj(start, mode_P, pn_Start_P_frame_base));
set_irg_args(res, new_r_Proj(start, mode_T, pn_Start_T_args));
ir_node *const initial_mem = new_r_Proj(start, mode_M, pn_Start_M);
......@@ -148,10 +146,6 @@ static ir_graph *new_r_ir_graph(ir_entity *ent, int n_loc)
set_r_cur_block(res, start_block);
set_r_store(res, initial_mem);
/*-- Make a block to start with --*/
ir_node *const first_block = new_r_Block(res, 1, &projX);
set_r_cur_block(res, first_block);
return res;
}
......@@ -346,16 +340,6 @@ void (set_irg_end)(ir_graph *irg, ir_node *node)
set_irg_end_(irg, node);
}
ir_node *(get_irg_initial_exec)(const ir_graph *irg)
{
return get_irg_initial_exec_(irg);
}
void (set_irg_initial_exec)(ir_graph *irg, ir_node *node)
{
set_irg_initial_exec_(irg, node);
}
ir_node *(get_irg_frame)(const ir_graph *irg)
{
return get_irg_frame_(irg);
......
......@@ -167,16 +167,6 @@ static inline void set_irg_end_(ir_graph *irg, ir_node *node)
set_irn_n(irg->anchor, anchor_end, node);
}
static inline ir_node *get_irg_initial_exec_(const ir_graph *irg)
{
return get_irn_n(irg->anchor, anchor_initial_exec);
}
static inline void set_irg_initial_exec_(ir_graph *irg, ir_node *node)
{
set_irn_n(irg->anchor, anchor_initial_exec, node);
}
static inline ir_node *get_irg_frame_(const ir_graph *irg)
{
return get_irn_n(irg->anchor, anchor_frame);
......