+
+ reg = arch_get_irn_register(arch_env, pred);
+ if (reg == NULL) {
+ ir_fprintf(stderr, "Verify warning: Node %+F in block %+F(%s) should have a register assigned (%+F input constraint)\n",
+ pred, get_nodes_block(pred), get_irg_dump_name(irg), node);
+ problem_found = 1;
+ continue;
+ }
+ else if (! arch_register_type_is(reg, joker) && ! arch_reg_is_allocatable(arch_env, node, i, reg)) {
+ ir_fprintf(stderr, "Verify warning: Register %s as input %d of %+F not allowed (register constraint) in block %+F(%s)\n",
+ reg->name, i, node, get_nodes_block(node), get_irg_dump_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)) {
+ int i, arity;
+
+ reg = arch_get_irn_register(arch_env, node);
+
+ arity = get_irn_arity(node);
+ for (i = 0; i < arity; ++i) {
+ ir_node *pred = get_Phi_pred(node, i);
+ const arch_register_t *pred_reg = arch_get_irn_register(arch_env, pred);
+
+ if (reg != pred_reg && !arch_register_type_is(pred_reg, joker)) {
+ 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_dump_name(irg), pred_reg->name, reg->name);
+ problem_found = 1;
+ }