X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firvrfy.c;h=bfd39ae6f08238f163c6297f484a0e06606bd98d;hb=637542932dc27dcdfc7def09b58d9d5d4c34fb77;hp=05775cf20b8028b58e75ec31210b9c90f8383706;hpb=cb918fa03f85fe8aba00dbda4b6494cdd7a5cdf6;p=libfirm diff --git a/ir/ir/irvrfy.c b/ir/ir/irvrfy.c index 05775cf20..bfd39ae6f 100644 --- a/ir/ir/irvrfy.c +++ b/ir/ir/irvrfy.c @@ -333,7 +333,8 @@ static int verify_node_Proj_Cond(ir_node *pred, ir_node *p) { ASSERT_AND_RET_DBG( ( (proj >= 0 && mode == mode_X && get_irn_mode(get_Cond_selector(pred)) == mode_b) || /* compare */ - (mode == mode_X && mode_is_int(get_irn_mode(get_Cond_selector(pred)))) /* switch */ + (mode == mode_X && mode_is_int(get_irn_mode(get_Cond_selector(pred)))) || /* switch */ + is_Bad(get_Cond_selector(pred)) /* rare */ ), "wrong Proj from Cond", 0, show_proj_failure(p); @@ -389,12 +390,12 @@ static int verify_node_Proj_Call(ir_node *n, ir_node *p) { ); if (proj == pn_Call_X_except) ASSERT_AND_RET( - get_irn_pinned(n) == op_pin_state_pinned, - "Exception Proj from unpinned Call", 0); + get_irn_op(get_Call_mem(n)) != op_NoMem, + "Exception Proj from FunctionCall", 0); else if (proj == pn_Call_M_regular || proj == pn_Call_M_except) ASSERT_AND_RET( - get_irn_pinned(n) == op_pin_state_pinned, - "Memory Proj from unpinned Call", 0); + (get_irn_op(get_Call_mem(n)) != op_NoMem || 1), + "Memory Proj from FunctionCall", 0); return 1; } @@ -966,6 +967,12 @@ static int verify_node_Call(ir_node *n, ir_graph *irg) { --> M x datan+1 x ... x data n+m */ ASSERT_AND_RET( op1mode == mode_M && mode_is_reference(op2mode), "Call node", 0 ); /* operand M x ref */ + /* NoMem nodes are only allowed as memory input if the Call is NOT pinned */ + ASSERT_AND_RET( + (get_irn_op(get_Call_mem(n)) == op_NoMem) || + (get_irn_op(get_Call_mem(n)) != op_NoMem && get_irn_pinned(n) == op_pin_state_pinned), + "Call node with wrong memory input", 0 ); + mt = get_Call_type(n); if(get_unknown_type() == mt) { return 1;