new_rd_Phi (dbg_info* db, ir_graph *irg, ir_node *block, int arity, ir_node **in, ir_mode *mode)
{
ir_node *res;
+ int i;
+ bool has_unknown = false;
assert( get_Block_matured(block) );
assert( get_irn_arity(block) == arity );
res->attr.phi_backedge = new_backedge_arr(irg->obst, arity);
- res = optimize_node (res);
+ for (i = arity-1; i >= 0; i--) if (get_irn_op(in[i]) == op_Unknown) has_unknown = true;
+ if (!has_unknown) res = optimize_node (res);
irn_vrfy_irg (res, irg);
/* Memory Phis in endless loops must be kept alive.
INLINE ir_node *
new_rd_Id (dbg_info* db, ir_graph *irg, ir_node *block, ir_node *val, ir_mode *mode)
{
- ir_node *in[1] = {val};
+ ir_node *in[1];
ir_node *res;
+ in[0]=val;
res = new_ir_node (db, irg, block, op_Id, mode, 1, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
new_rd_Proj (dbg_info* db, ir_graph *irg, ir_node *block, ir_node *arg, ir_mode *mode,
long proj)
{
- ir_node *in[1] = {arg};
+ ir_node *in[1];
ir_node *res;
+ in[0]=arg;
res = new_ir_node (db, irg, block, op_Proj, mode, 1, in);
res->attr.proj = proj;
INLINE ir_node *
new_rd_Conv (dbg_info* db, ir_graph *irg, ir_node *block, ir_node *op, ir_mode *mode)
{
- ir_node *in[1] = {op};
+ ir_node *in[1];
ir_node *res;
+ in[0]=op;
res = new_ir_node (db, irg, block, op_Conv, mode, 1, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
new_rd_Add (dbg_info* db, ir_graph *irg, ir_node *block,
ir_node *op1, ir_node *op2, ir_mode *mode)
{
- ir_node *in[2] = {op1, op2};
+ ir_node *in[2];
ir_node *res;
+ in[0] = op1;
+ in[1] = op2;
res = new_ir_node (db, irg, block, op_Add, mode, 2, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
new_rd_Sub (dbg_info* db, ir_graph *irg, ir_node *block,
ir_node *op1, ir_node *op2, ir_mode *mode)
{
- ir_node *in[2] = {op1, op2};
+ ir_node *in[2];
ir_node *res;
+ in[0] = op1;
+ in[1] = op2;
res = new_ir_node (db, irg, block, op_Sub, mode, 2, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
new_rd_Minus (dbg_info* db, ir_graph *irg, ir_node *block,
ir_node *op, ir_mode *mode)
{
- ir_node *in[1] = {op};
+ ir_node *in[1];
ir_node *res;
+ in[0]=op;
res = new_ir_node (db, irg, block, op_Minus, mode, 1, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
new_rd_Mul (dbg_info* db, ir_graph *irg, ir_node *block,
ir_node *op1, ir_node *op2, ir_mode *mode)
{
- ir_node *in[2] = {op1, op2};
+ ir_node *in[2];
ir_node *res;
+ in[0] = op1;
+ in[1] = op2;
res = new_ir_node (db, irg, block, op_Mul, mode, 2, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
new_rd_Quot (dbg_info* db, ir_graph *irg, ir_node *block,
ir_node *memop, ir_node *op1, ir_node *op2)
{
- ir_node *in[3] = {memop, op1, op2};
+ ir_node *in[3] ;
ir_node *res;
+ in[0] = memop;
+ in[1] = op1;
+ in[2] = op2;
res = new_ir_node (db, irg, block, op_Quot, mode_T, 3, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
new_rd_DivMod (dbg_info* db, ir_graph *irg, ir_node *block,
ir_node *memop, ir_node *op1, ir_node *op2)
{
- ir_node *in[3] = {memop, op1, op2};
+ ir_node *in[3];
ir_node *res;
+ in[0] = memop;
+ in[1] = op1;
+ in[2] = op2;
res = new_ir_node (db, irg, block, op_DivMod, mode_T, 3, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
new_rd_Div (dbg_info* db, ir_graph *irg, ir_node *block,
ir_node *memop, ir_node *op1, ir_node *op2)
{
- ir_node *in[3] = {memop, op1, op2};
+ ir_node *in[3];
ir_node *res;
+ in[0] = memop;
+ in[1] = op1;
+ in[2] = op2;
res = new_ir_node (db, irg, block, op_Div, mode_T, 3, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
new_rd_Mod (dbg_info* db, ir_graph *irg, ir_node *block,
ir_node *memop, ir_node *op1, ir_node *op2)
{
- ir_node *in[3] = {memop, op1, op2};
+ ir_node *in[3];
ir_node *res;
+ in[0] = memop;
+ in[1] = op1;
+ in[2] = op2;
res = new_ir_node (db, irg, block, op_Mod, mode_T, 3, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
new_rd_And (dbg_info* db, ir_graph *irg, ir_node *block,
ir_node *op1, ir_node *op2, ir_mode *mode)
{
- ir_node *in[2] = {op1, op2};
+ ir_node *in[2];
ir_node *res;
+ in[0] = op1;
+ in[1] = op2;
res = new_ir_node (db, irg, block, op_And, mode, 2, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
new_rd_Or (dbg_info* db, ir_graph *irg, ir_node *block,
ir_node *op1, ir_node *op2, ir_mode *mode)
{
- ir_node *in[2] = {op1, op2};
+ ir_node *in[2];
ir_node *res;
+ in[0] = op1;
+ in[1] = op2;
res = new_ir_node (db, irg, block, op_Or, mode, 2, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
new_rd_Eor (dbg_info* db, ir_graph *irg, ir_node *block,
ir_node *op1, ir_node *op2, ir_mode *mode)
{
- ir_node *in[2] = {op1, op2};
+ ir_node *in[2];
ir_node *res;
+ in[0] = op1;
+ in[1] = op2;
res = new_ir_node (db, irg, block, op_Eor, mode, 2, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
new_rd_Not (dbg_info* db, ir_graph *irg, ir_node *block,
ir_node *op, ir_mode *mode)
{
- ir_node *in[1] = {op};
+ ir_node *in[1];
ir_node *res;
+ in[0] = op;
res = new_ir_node (db, irg, block, op_Not, mode, 1, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
new_rd_Shl (dbg_info* db, ir_graph *irg, ir_node *block,
ir_node *op, ir_node *k, ir_mode *mode)
{
- ir_node *in[2] = {op, k};
+ ir_node *in[2];
ir_node *res;
+ in[0] = op;
+ in[1] = k;
res = new_ir_node (db, irg, block, op_Shl, mode, 2, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
new_rd_Shr (dbg_info* db, ir_graph *irg, ir_node *block,
ir_node *op, ir_node *k, ir_mode *mode)
{
- ir_node *in[2] = {op, k};
+ ir_node *in[2];
ir_node *res;
+ in[0] = op;
+ in[1] = k;
res = new_ir_node (db, irg, block, op_Shr, mode, 2, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
new_rd_Shrs (dbg_info* db, ir_graph *irg, ir_node *block,
ir_node *op, ir_node *k, ir_mode *mode)
{
- ir_node *in[2] = {op, k};
+ ir_node *in[2];
ir_node *res;
+ in[0] = op;
+ in[1] = k;
res = new_ir_node (db, irg, block, op_Shrs, mode, 2, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
new_rd_Rot (dbg_info* db, ir_graph *irg, ir_node *block,
ir_node *op, ir_node *k, ir_mode *mode)
{
- ir_node *in[2] = {op, k};
+ ir_node *in[2];
ir_node *res;
+ in[0] = op;
+ in[1] = k;
res = new_ir_node (db, irg, block, op_Rot, mode, 2, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
new_rd_Abs (dbg_info* db, ir_graph *irg, ir_node *block,
ir_node *op, ir_mode *mode)
{
- ir_node *in[1] = {op};
+ ir_node *in[1];
ir_node *res;
+ in[0] = op;
res = new_ir_node (db, irg, block, op_Abs, mode, 1, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
new_rd_Cmp (dbg_info* db, ir_graph *irg, ir_node *block,
ir_node *op1, ir_node *op2)
{
- ir_node *in[2] = {op1, op2};
+ ir_node *in[2];
ir_node *res;
+ in[0] = op1;
+ in[1] = op2;
res = new_ir_node (db, irg, block, op_Cmp, mode_T, 2, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
INLINE ir_node *
new_rd_Cond (dbg_info* db, ir_graph *irg, ir_node *block, ir_node *c)
{
- ir_node *in[1] = {c};
+ ir_node *in[1];
ir_node *res;
+ in[0] = c;
res = new_ir_node (db, irg, block, op_Cond, mode_T, 1, in);
res->attr.c.kind = dense;
res->attr.c.default_proj = 0;
INLINE ir_node *
new_rd_Raise (dbg_info* db, ir_graph *irg, ir_node *block, ir_node *store, ir_node *obj)
{
- ir_node *in[2] = {store, obj};
+ ir_node *in[2];
ir_node *res;
+ in[0] = store;
+ in[1] = obj;
res = new_ir_node (db, irg, block, op_Raise, mode_T, 2, in);
res = optimize_node (res);
irn_vrfy_irg (res, irg);
new_rd_Load (dbg_info* db, ir_graph *irg, ir_node *block,
ir_node *store, ir_node *adr)
{
- ir_node *in[2] = {store, adr};
+ ir_node *in[2];
ir_node *res;
+ in[0] = store;
+ in[1] = adr;
res = new_ir_node (db, irg, block, op_Load, mode_T, 2, in);
res = optimize_node (res);
new_rd_Store (dbg_info* db, ir_graph *irg, ir_node *block,
ir_node *store, ir_node *adr, ir_node *val)
{
- ir_node *in[3] = {store, adr, val};
+ ir_node *in[3];
ir_node *res;
+ in[0] = store;
+ in[1] = adr;
+ in[2] = val;
res = new_ir_node (db, irg, block, op_Store, mode_T, 3, in);
res = optimize_node (res);
new_rd_Alloc (dbg_info* db, ir_graph *irg, ir_node *block, ir_node *store,
ir_node *size, type *alloc_type, where_alloc where)
{
- ir_node *in[2] = {store, size};
+ ir_node *in[2];
ir_node *res;
+ in[0] = store;
+ in[1] = size;
res = new_ir_node (db, irg, block, op_Alloc, mode_T, 2, in);
res->attr.a.where = where;
new_rd_Free (dbg_info* db, ir_graph *irg, ir_node *block, ir_node *store,
ir_node *ptr, ir_node *size, type *free_type)
{
- ir_node *in[3] = {store, ptr, size};
+ ir_node *in[3];
ir_node *res;
+ in[0] = store;
+ in[1] = ptr;
+ in[2] = size;
res = new_ir_node (db, irg, block, op_Free, mode_T, 3, in);
res->attr.f = free_type;
INLINE ir_node *
new_rd_CallBegin (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *call)
{
- ir_node *in[1] = { get_Call_ptr(call) };
+ ir_node *in[1];
ir_node *res;
+ in[0] = get_Call_ptr(call);
res = new_ir_node (db, irg, block, op_CallBegin, mode_T, 1, in);
res->attr.callbegin.irg = irg;
res->attr.callbegin.call = call;
new_rd_Filter (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *arg, ir_mode *mode,
long proj)
{
- ir_node *in[1] = {arg};
+ ir_node *in[1];
ir_node *res;
+ in[0] = arg;
res = new_ir_node (db, irg, block, op_Filter, mode, 1, in);
res->attr.filter.proj = proj;
res->attr.filter.in_cg = NULL;
new_d_Block (dbg_info* db, int arity, ir_node **in)
{
ir_node *res;
+ int i;
+ bool has_unknown = false;
res = new_rd_Block (db, current_ir_graph, arity, in);
current_ir_graph->n_loc);
memset(res->attr.block.graph_arr, 0, sizeof(ir_node *)*current_ir_graph->n_loc);
- res = optimize_node (res);
+ for (i = arity-1; i >= 0; i--) if (get_irn_op(in[i]) == op_Unknown) has_unknown = true;
+
+ if (!has_unknown) res = optimize_node (res);
current_ir_graph->current_block = res;
irn_vrfy_irg (res, current_ir_graph);
printf("Error: no value set. Use of undefined variable. Initializing to zero.\n");
assert (mode->code >= irm_F && mode->code <= irm_P);
res = new_rd_Const (NULL, current_ir_graph, block, mode,
- tarval_mode_null[mode->code]);
+ get_mode_null(mode));
}
/* The local valid value is available now. */