case iro_Sync:
case iro_Tuple:
case iro_Bad:
+ case iro_NoMem:
case iro_Break:
case iro_CallBegin:
case iro_EndReg:
if (tp1 == tp2) { tp = tp1; break; }
- VERBOSE_UNKNOWN_TYPE(("Phi %ld with two different types: %s, %s: unknown type.\n", get_irn_node_nr(n),
- get_type_name(tp1), get_type_name(tp2)));
- tp = firm_unknown_type;
+ if (get_firm_verbosity() > 1) {
+ VERBOSE_UNKNOWN_TYPE(("Phi %ld with two different types: %s, %s: unknown type.\n", get_irn_node_nr(n),
+ get_type_name(tp1), get_type_name(tp2)));
+ }
+ tp = firm_unknown_type; /* Test for supertypes? */
} break;
case iro_Load: {
ir_node *a = get_Load_ptr(n);
/* catch special cases with fallthrough to binop/unop cases in default. */
case iro_Sub: {
if (mode_is_int(get_irn_mode(n)) &&
- mode_is_reference(get_irn_mode(a)) &&
- mode_is_reference(get_irn_mode(b)) ) {
+ mode_is_reference(get_irn_mode(a)) &&
+ mode_is_reference(get_irn_mode(b)) ) {
VERBOSE_UNKNOWN_TYPE(("Sub %ld ptr - ptr = int: unknown type\n", get_irn_node_nr(n)));
tp = firm_unknown_type; break;
}
} /* fall through to Add. */
case iro_Add: {
if (mode_is_reference(get_irn_mode(n)) &&
- mode_is_reference(get_irn_mode(a)) &&
- mode_is_int(get_irn_mode(b)) ) {
+ mode_is_reference(get_irn_mode(a)) &&
+ mode_is_int(get_irn_mode(b)) ) {
tp = tp1; break;
}
if (mode_is_reference(get_irn_mode(n)) &&
- mode_is_int(get_irn_mode(a)) &&
- mode_is_reference(get_irn_mode(b)) ) {
+ mode_is_int(get_irn_mode(a)) &&
+ mode_is_reference(get_irn_mode(b)) ) {
tp = tp2; break;
}
goto default_code;
}
goto default_code;
} break;
+ case iro_Mux: {
+ a = get_Mux_true(n);
+ b = get_Mux_false(n);
+ tp1 = compute_irn_type(a);
+ tp2 = compute_irn_type(b);
+ if (tp1 == tp2)
+ tp = tp1;
+ else
+ tp = firm_unknown_type;
+ } break;
default:
default_code: {
tp = phi_cycle_type;
break;
}
- VERBOSE_UNKNOWN_TYPE(("Binop %ld with two different types: %s, %s: unknown type \n", get_irn_node_nr(n),
- get_type_name(tp1), get_type_name(tp2)));
+ if (get_firm_verbosity() > 1) {
+ VERBOSE_UNKNOWN_TYPE(("Binop %ld with two different types: %s, %s: unknown type \n", get_irn_node_nr(n),
+ get_type_name(tp1), get_type_name(tp2)));
+ }
tp = firm_unknown_type;
break;
}
}
static void analyse_irg (ir_graph *irg) {
- set_irg_typeinfo_state(irg, irg_typeinfo_consistent);
+ set_irg_typeinfo_state(irg, ir_typeinfo_consistent);
irg_walk_graph(irg, NULL, compute_type, NULL);
}
current_ir_graph = get_irp_irg(i);
analyse_irg(current_ir_graph);
}
+ set_irp_typeinfo_state(ir_typeinfo_consistent);
}
void free_simple_type_information(void) {
free_type(phi_cycle_type);
phi_cycle_type = NULL;
}
+ set_irp_typeinfo_state(ir_typeinfo_none);
}