- reg->name, i, node, get_nodes_block(node), get_irg_dump_name(env->irg));
- env->problem_found = 1;
+ reg->name, i, node, get_nodes_block(node), get_irg_name(irg));
+ problem_found = 1;
+ }
+ }
+
+ /* phis should be NOPs at this point, which means all input regs
+ * must be the same as the output reg */
+ if (is_Phi(node)) {
+ const arch_register_t *reg = arch_get_irn_register(node);
+
+ int arity = get_irn_arity(node);
+ for (int i = 0; i < arity; ++i) {
+ ir_node *pred = get_Phi_pred(node, i);
+ const arch_register_t *pred_reg = arch_get_irn_register(pred);
+
+ if (reg != pred_reg && !(pred_reg->type & arch_register_type_virtual)) {
+ const char *pred_name = pred_reg != NULL ? pred_reg->name : "(null)";
+ const char *reg_name = reg != NULL ? reg->name : "(null)";
+ ir_fprintf(stderr, "Verify warning: Input %d of %+F in block %+F(%s) uses register %s instead of %s\n",
+ i, node, get_nodes_block(node),
+ get_irg_name(irg), pred_name, reg_name);
+ problem_found = true;
+ }