text);
}
+/**
+ * Prints a failure message for an op with 3 operands
+ */
+static void show_triop_failure(ir_node *n, const char *text)
+{
+ ir_node *op0 = get_irn_n(n, 0);
+ ir_node *op1 = get_irn_n(n, 1);
+ ir_node *op2 = get_irn_n(n, 2);
+
+ fprintf(stderr, "\nFIRM: irn_vrfy_irg() of node %ld %s%s(%s%s, %s%s, %s%s) did not match (%s)\n",
+ get_irn_node_nr(n),
+ get_irn_opname(n), get_irn_modename(n),
+ get_irn_opname(op0), get_irn_modename(op0),
+ get_irn_opname(op1), get_irn_modename(op1),
+ get_irn_opname(op2), get_irn_modename(op2),
+ text);
+}
+
/**
* Prints a failure message for a proj
*/
"Number of results for Return doesn't match number of results in type.", 0,
show_return_nres(irg, n, mt););
for (i = 0; i < get_Return_n_ress(n); i++) {
- type *res_type = get_method_res_type(mt, i);
+ type *res_type = get_method_res_type(mt, i);
if (is_atomic_type(res_type)) {
- ASSERT_AND_RET_DBG(
- get_irn_mode(get_Return_res(n, i)) == get_type_mode(res_type),
- "Mode of result for Return doesn't match mode of result type.", 0,
- show_return_modes(irg, n, mt, i);
- );
- }
- else {
- ASSERT_AND_RET_DBG(
- mode_is_reference(get_irn_mode(get_Return_res(n, i))),
- "Mode of result for Return doesn't match mode of result type.", 0,
- show_return_modes(irg, n, mt, i);
- );
- }
+ ASSERT_AND_RET_DBG(
+ get_irn_mode(get_Return_res(n, i)) == get_type_mode(res_type),
+ "Mode of result for Return doesn't match mode of result type.", 0,
+ show_return_modes(irg, n, mt, i);
+ );
+ }
+ else {
+ ASSERT_AND_RET_DBG(
+ mode_is_reference(get_irn_mode(get_Return_res(n, i))),
+ "Mode of result for Return doesn't match mode of result type.", 0,
+ show_return_modes(irg, n, mt, i);
+ );
+ }
}
break;
case iro_SymConst:
if (get_SymConst_kind(n) == symconst_addr_ent) {
entity *ent = get_SymConst_entity(n);
- if (is_method_type(get_entity_type(ent)) &&
+ if (is_Method_type(get_entity_type(ent)) &&
get_irn_irg(n) != get_const_code_irg()) {
#if 1
ASSERT_AND_RET((get_entity_peculiarity(ent) != peculiarity_description),
case iro_Minus:
op1mode = get_irn_mode(in[1]);
ASSERT_AND_RET_DBG(
- /* Minus: BB x float --> float */
- op1mode == mymode && mode_is_float(op1mode), "Minus node", 0,
- show_unop_failure(n , "/* Minus: BB x float --> float */");
+ /* Minus: BB x num --> num */
+ op1mode == mymode && mode_is_num(op1mode), "Minus node", 0,
+ show_unop_failure(n , "/* Minus: BB x num --> num */");
);
op_is_symmetric = 2;
break;
break;
- case iro_Store:
+ case iro_Store: {
+ entity *target;
+
op1mode = get_irn_mode(in[1]);
op2mode = get_irn_mode(in[2]);
op3mode = get_irn_mode(in[3]);
);
ASSERT_AND_RET(mymode == mode_T, "Store node", 0);
- entity *target = get_ptr_entity(in[2]);
+ target = get_ptr_entity(in[2]);
if (vrfy_entities && target && get_irg_phase_state(current_ir_graph) == phase_high) {
/*
* If lowered code, any Sels that add 0 may be removed, causing
}
break;
+ }
case iro_Alloc:
op1mode = get_irn_mode(in[1]);
case iro_Free:
op1mode = get_irn_mode(in[1]);
op2mode = get_irn_mode(in[2]);
+ op3mode = get_irn_mode(in[3]);
ASSERT_AND_RET_DBG(
- /* Free: BB x M x ref --> M */
+ /* Free: BB x M x ref x int_u --> M */
op1mode == mode_M && mode_is_reference(op2mode) &&
+ mode_is_int(op3mode) &&
+ !mode_is_signed(op3mode) &&
mymode == mode_M,
"Free node", 0,
- show_binop_failure(n, "/* Free: BB x M x ref --> M */");
+ show_triop_failure(n, "/* Free: BB x M x ref x int_u --> M */");
);
break;