- /* check for delay branches */
- if (delay_branches == 0) {
- ir_fprintf(stderr, "Verify Warning: Node %+F scheduled after control flow changing node (+delay branches) in block %+F (%s)\n",
- irn, bl, get_irg_dump_name(env->irg));
- env->problem_found = 1;
- } else {
- delay_branches--;
+ // proj and keepany aren't real instructions...
+ if(!is_Proj(node) && !be_is_Keep(node)) {
+ /* check for delay branches */
+ if (delay_branches == 0) {
+ ir_fprintf(stderr, "Verify Warning: Node %+F scheduled after control flow changing node (+delay branches) in block %+F (%s)\n",
+ node, block, get_irg_dump_name(env->irg));
+ env->problem_found = 1;
+ } else {
+ delay_branches--;
+ }
+ }
+ }
+
+ // 3. Check for uses
+ if(pset_find_ptr(uses, node)) {
+ ir_fprintf(stderr, "Verify Warning: Value %+F used before it was defined in block %+F (%s)\n",
+ node, block, get_irg_dump_name(env->irg));
+ env->problem_found = 1;
+ }
+ if(!is_Phi(node)) {
+ for(i = 0, arity = get_irn_arity(node); i < arity; ++i) {
+ pset_insert_ptr(uses, get_irn_n(node, i));