X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Fircons.c;h=bcd8b7bdda94af3b58f0ebeef2b8dcff224c2847;hb=cb91bddc9cacdab7c28e4336847bd3dc248aa549;hp=901fe61cd681c48696e29fb99145a10ba80d7843;hpb=dddcc630819f338c3b45e2bc646233e6872d5bb6;p=libfirm diff --git a/ir/ir/ircons.c b/ir/ir/ircons.c index 901fe61cd..bcd8b7bdd 100644 --- a/ir/ir/ircons.c +++ b/ir/ir/ircons.c @@ -180,7 +180,7 @@ new_rd_Proj (dbg_info* db, ir_graph *irg, ir_node *block, ir_node *arg, ir_mode assert(res); assert(get_Proj_pred(res)); - assert(get_nodes_Block(get_Proj_pred(res))); + assert(get_nodes_block(get_Proj_pred(res))); res = optimize_node(res); @@ -582,7 +582,7 @@ new_rd_Raise (dbg_info* db, ir_graph *irg, ir_node *block, ir_node *store, ir_no INLINE ir_node * new_rd_Load (dbg_info* db, ir_graph *irg, ir_node *block, - ir_node *store, ir_node *adr) + ir_node *store, ir_node *adr, ir_mode *mode) { ir_node *in[2]; ir_node *res; @@ -590,6 +590,8 @@ new_rd_Load (dbg_info* db, ir_graph *irg, ir_node *block, in[0] = store; in[1] = adr; res = new_ir_node(db, irg, block, op_Load, mode_T, 2, in); + res->attr.load.load_mode = mode; + res->attr.load.volatility = volatility_non_volatile; res = optimize_node(res); IRN_VRFY_IRG(res, irg); return res; @@ -606,6 +608,7 @@ new_rd_Store (dbg_info* db, ir_graph *irg, ir_node *block, in[1] = adr; in[2] = val; res = new_ir_node(db, irg, block, op_Store, mode_T, 3, in); + res->attr.store.volatility = volatility_non_volatile; res = optimize_node(res); IRN_VRFY_IRG(res, irg); return res; @@ -836,7 +839,7 @@ new_rd_Filter (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *arg, ir_mod assert(res); assert(get_Proj_pred(res)); - assert(get_nodes_Block(get_Proj_pred(res))); + assert(get_nodes_block(get_Proj_pred(res))); res = optimize_node(res); IRN_VRFY_IRG(res, irg); @@ -997,8 +1000,8 @@ INLINE ir_node *new_r_Phi (ir_graph *irg, ir_node *block, int arity, return new_rd_Phi(NULL, irg, block, arity, in, mode); } INLINE ir_node *new_r_Load (ir_graph *irg, ir_node *block, - ir_node *store, ir_node *adr) { - return new_rd_Load(NULL, irg, block, store, adr); + ir_node *store, ir_node *adr, ir_mode *mode) { + return new_rd_Load(NULL, irg, block, store, adr, mode); } INLINE ir_node *new_r_Store (ir_graph *irg, ir_node *block, ir_node *store, ir_node *adr, ir_node *val) { @@ -1603,14 +1606,22 @@ static INLINE ir_node ** new_frag_arr (ir_node *n) return arr; } +/** + * returns the frag_arr from a node + */ static INLINE ir_node ** get_frag_arr (ir_node *n) { - if (get_irn_op(n) == op_Call) { + switch (get_irn_opcode(n)) { + case iro_Call: return n->attr.call.frag_arr; - } else if (get_irn_op(n) == op_Alloc) { + case iro_Alloc: return n->attr.a.frag_arr; - } else { - return n->attr.frag_arr; + case iro_Load: + return n->attr.load.frag_arr; + case iro_Store: + return n->attr.store.frag_arr; + default: + return n->attr.except.frag_arr; } } @@ -2048,7 +2059,7 @@ new_d_Quot (dbg_info* db, ir_node *memop, ir_node *op1, ir_node *op2) res = new_rd_Quot (db, current_ir_graph, current_ir_graph->current_block, memop, op1, op2); #if PRECISE_EXC_CONTEXT - allocate_frag_arr(res, op_Quot, &res->attr.frag_arr); /* Could be optimized away. */ + allocate_frag_arr(res, op_Quot, &res->attr.except.frag_arr); /* Could be optimized away. */ #endif return res; @@ -2061,7 +2072,7 @@ new_d_DivMod (dbg_info* db, ir_node *memop, ir_node *op1, ir_node *op2) res = new_rd_DivMod (db, current_ir_graph, current_ir_graph->current_block, memop, op1, op2); #if PRECISE_EXC_CONTEXT - allocate_frag_arr(res, op_DivMod, &res->attr.frag_arr); /* Could be optimized away. */ + allocate_frag_arr(res, op_DivMod, &res->attr.except.frag_arr); /* Could be optimized away. */ #endif return res; @@ -2074,7 +2085,7 @@ new_d_Div (dbg_info* db, ir_node *memop, ir_node *op1, ir_node *op2) res = new_rd_Div (db, current_ir_graph, current_ir_graph->current_block, memop, op1, op2); #if PRECISE_EXC_CONTEXT - allocate_frag_arr(res, op_Div, &res->attr.frag_arr); /* Could be optimized away. */ + allocate_frag_arr(res, op_Div, &res->attr.except.frag_arr); /* Could be optimized away. */ #endif return res; @@ -2087,7 +2098,7 @@ new_d_Mod (dbg_info* db, ir_node *memop, ir_node *op1, ir_node *op2) res = new_rd_Mod (db, current_ir_graph, current_ir_graph->current_block, memop, op1, op2); #if PRECISE_EXC_CONTEXT - allocate_frag_arr(res, op_Mod, &res->attr.frag_arr); /* Could be optimized away. */ + allocate_frag_arr(res, op_Mod, &res->attr.except.frag_arr); /* Could be optimized away. */ #endif return res; @@ -2204,13 +2215,13 @@ new_d_Raise (dbg_info* db, ir_node *store, ir_node *obj) } ir_node * -new_d_Load (dbg_info* db, ir_node *store, ir_node *addr) +new_d_Load (dbg_info* db, ir_node *store, ir_node *addr, ir_mode *mode) { ir_node *res; res = new_rd_Load (db, current_ir_graph, current_ir_graph->current_block, - store, addr); + store, addr, mode); #if PRECISE_EXC_CONTEXT - allocate_frag_arr(res, op_Load, &res->attr.frag_arr); /* Could be optimized away. */ + allocate_frag_arr(res, op_Load, &res->attr.load.frag_arr); /* Could be optimized away. */ #endif return res; @@ -2223,7 +2234,7 @@ new_d_Store (dbg_info* db, ir_node *store, ir_node *addr, ir_node *val) res = new_rd_Store (db, current_ir_graph, current_ir_graph->current_block, store, addr, val); #if PRECISE_EXC_CONTEXT - allocate_frag_arr(res, op_Store, &res->attr.frag_arr); /* Could be optimized away. */ + allocate_frag_arr(res, op_Store, &res->attr.store.frag_arr); /* Could be optimized away. */ #endif return res; @@ -2609,8 +2620,8 @@ ir_node *new_Cast (ir_node *op, type *to_tp) { ir_node *new_Phi (int arity, ir_node **in, ir_mode *mode) { return new_d_Phi(NULL, arity, in, mode); } -ir_node *new_Load (ir_node *store, ir_node *addr) { - return new_d_Load(NULL, store, addr); +ir_node *new_Load (ir_node *store, ir_node *addr, ir_mode *mode) { + return new_d_Load(NULL, store, addr, mode); } ir_node *new_Store (ir_node *store, ir_node *addr, ir_node *val) { return new_d_Store(NULL, store, addr, val);