*/
typedef struct lower_env_t {
node_entry_t **entries; /**< entries per node */
+ ir_graph *irg;
struct obstack obst; /**< an obstack holding the temporary data */
ir_type *l_mtp; /**< lowered method type of the current method */
tarval *tv_mode_bytes; /**< a tarval containing the number of bytes in the lowered modes */
*/
static void lower_Const(ir_node *node, ir_mode *mode, lower_env_t *env)
{
+ ir_graph *irg = get_irn_irg(node);
+ dbg_info *dbg = get_irn_dbg_info(node);
+ ir_mode *low_mode = env->low_unsigned;
+ int idx;
tarval *tv, *tv_l, *tv_h;
ir_node *low, *high;
- dbg_info *dbg = get_irn_dbg_info(node);
- int idx;
- ir_graph *irg = current_ir_graph;
- ir_mode *low_mode = env->low_unsigned;
tv = get_Const_tarval(node);
static void lower_Load(ir_node *node, ir_mode *mode, lower_env_t *env)
{
ir_mode *low_mode = env->low_unsigned;
- ir_graph *irg = current_ir_graph;
+ ir_graph *irg = get_irn_irg(node);
ir_node *adr = get_Load_ptr(node);
ir_node *mem = get_Load_mem(node);
ir_node *low, *high, *proj;
return;
} /* if */
- irg = current_ir_graph;
+ irg = get_irn_irg(node);
adr = get_Store_ptr(node);
mem = get_Store_mem(node);
block = get_nodes_block(node);
ent = entry->ent;
} /* if */
sym.entity_p = ent;
- return new_r_SymConst(current_ir_graph, mode_P_code, sym, symconst_addr_ent);
+ return new_r_SymConst(env->irg, mode_P_code, sym, symconst_addr_ent);
} /* get_intrinsic_address */
/**
dbg = get_irn_dbg_info(node);
block = get_nodes_block(node);
- irg = current_ir_graph;
+ irg = get_irn_irg(block);
mtp = mode_is_signed(mode) ? binop_tp_s : binop_tp_u;
irn = get_intrinsic_address(mtp, get_irn_op(node), mode, mode, env);
- irn = new_rd_Call(dbg, block, get_irg_no_mem(current_ir_graph),
- irn, 4, in, mtp);
+ irn = new_rd_Call(dbg, block, get_irg_no_mem(irg), irn, 4, in, mtp);
set_irn_pinned(irn, get_irn_pinned(node));
irn = new_r_Proj(irn, mode_T, pn_Call_T_result);
dbg = get_irn_dbg_info(node);
block = get_nodes_block(node);
- irg = current_ir_graph;
+ irg = get_irn_irg(block);
mtp = mode_is_signed(mode) ? shiftop_tp_s : shiftop_tp_u;
irn = get_intrinsic_address(mtp, get_irn_op(node), mode, mode, env);
- irn = new_rd_Call(dbg, block, get_irg_no_mem(current_ir_graph),
- irn, 3, in, mtp);
+ irn = new_rd_Call(dbg, block, get_irg_no_mem(irg), irn, 3, in, mtp);
set_irn_pinned(irn, get_irn_pinned(node));
irn = new_r_Proj(irn, mode_T, pn_Call_T_result);
*/
static void lower_Shr(ir_node *node, ir_mode *mode, lower_env_t *env)
{
+ ir_graph *irg = get_irn_irg(node);
ir_node *right = get_Shr_right(node);
- ir_graph *irg = current_ir_graph;
if (get_mode_arithmetic(mode) == irma_twos_complement && is_Const(right)) {
tarval *tv = get_Const_tarval(right);
*/
static void lower_Shl(ir_node *node, ir_mode *mode, lower_env_t *env)
{
+ ir_graph *irg = get_irn_irg(node);
ir_node *right = get_Shl_right(node);
- ir_graph *irg = current_ir_graph;
if (get_mode_arithmetic(mode) == irma_twos_complement && is_Const(right)) {
tarval *tv = get_Const_tarval(right);
*/
static void lower_Shrs(ir_node *node, ir_mode *mode, lower_env_t *env)
{
+ ir_graph *irg = get_irn_irg(node);
ir_node *right = get_Shrs_right(node);
- ir_graph *irg = current_ir_graph;
if (get_mode_arithmetic(mode) == irma_twos_complement && is_Const(right)) {
tarval *tv = get_Const_tarval(right);
ir_node *in[2];
dbg_info *dbg;
ir_type *mtp;
+ ir_graph *irg;
int idx;
node_entry_t *entry;
dbg = get_irn_dbg_info(node);
block = get_nodes_block(node);
+ irg = get_irn_irg(block);
mtp = mode_is_signed(mode) ? unop_tp_s : unop_tp_u;
irn = get_intrinsic_address(mtp, get_irn_op(node), mode, mode, env);
- irn = new_rd_Call(dbg, block, get_irg_no_mem(current_ir_graph),
- irn, 2, in, mtp);
+ irn = new_rd_Call(dbg, block, get_irg_no_mem(irg), irn, 2, in, mtp);
set_irn_pinned(irn, get_irn_pinned(node));
irn = new_r_Proj(irn, mode_T, pn_Call_T_result);
idx = get_irn_idx(node);
assert(idx < env->n_entries);
- irg = current_ir_graph;
+ irg = get_irn_irg(node);
env->entries[idx]->low_word = constr_rd(dbg, block, lop_l, rop_l, env->low_unsigned);
env->entries[idx]->high_word = constr_rd(dbg, block, lop_h, rop_h, mode);
} /* lower_Binop_logical */
ir_node *op = get_Conv_op(node);
ir_mode *imode = get_irn_mode(op);
int idx = get_irn_idx(node);
- ir_graph *irg = current_ir_graph;
+ ir_graph *irg = get_irn_irg(node);
ir_node *block = get_nodes_block(node);
dbg_info *dbg = get_irn_dbg_info(node);
node_entry_t *entry = env->entries[idx];
ir_node *block = get_nodes_block(node);
dbg_info *dbg = get_irn_dbg_info(node);
int idx = get_irn_idx(op);
- ir_graph *irg = current_ir_graph;
+ ir_graph *irg = get_irn_irg(node);
node_entry_t *entry = env->entries[idx];
assert(idx < env->n_entries);
*/
static void lower_Return(ir_node *node, ir_mode *mode, lower_env_t *env)
{
- ir_graph *irg = current_ir_graph;
+ ir_graph *irg = get_irn_irg(node);
ir_entity *ent = get_irg_entity(irg);
ir_type *mtp = get_entity_type(ent);
ir_node **in;
{
lower_env_t lenv;
int i;
- ir_graph *rem;
if (! param)
return;
#undef LOWER2
/* transform all graphs */
- rem = current_ir_graph;
for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
ir_graph *irg = get_irp_irg(i);
ir_entity *ent;
lenv.entries = NEW_ARR_F(node_entry_t *, n_idx);
memset(lenv.entries, 0, n_idx * sizeof(lenv.entries[0]));
+ lenv.irg = irg;
lenv.l_mtp = NULL;
lenv.flags = 0;
lenv.proj_2_block = pmap_create();
/* last step: all waiting nodes */
DB((dbg, LEVEL_1, "finishing waiting nodes:\n"));
- current_ir_graph = irg;
while (! pdeq_empty(lenv.waitq)) {
ir_node *node = pdeq_getl(lenv.waitq);
obstack_free(&lenv.obst, NULL);
} /* for */
del_pdeq(lenv.waitq);
- current_ir_graph = rem;
} /* lower_dw_ops */
/* Default implementation. */