+ ir_fprintf(stderr, "%+F liveness should be empty but current liveness contains:\n", bl);
+ for (i = 0; i < curr[0].head.n_members; ++i) {
+ ir_fprintf(stderr, "\t%+F\n", get_idx_irn(lv->irg, curr[1 + i].node.idx));
+ }
+ }
+
+ else if (curr) {
+ unsigned n_curr = curr[0].head.n_members;
+ unsigned n_fresh = fr[0].head.n_members;
+
+ unsigned i;
+
+ if (n_curr != n_fresh) {
+ ir_fprintf(stderr, "%+F: liveness set sizes differ. curr %d, correct %d\n", bl, n_curr, n_fresh);
+
+ ir_fprintf(stderr, "current:\n");
+ for (i = 0; i < n_curr; ++i) {
+ be_lv_info_node_t *n = &curr[1 + i].node;
+ ir_fprintf(stderr, "%+F %u %+F %s\n", bl, i, get_idx_irn(lv->irg, n->idx), lv_flags_to_str(n->flags));
+ }
+
+ ir_fprintf(stderr, "correct:\n");
+ for (i = 0; i < n_fresh; ++i) {
+ be_lv_info_node_t *n = &fr[1 + i].node;
+ ir_fprintf(stderr, "%+F %u %+F %s\n", bl, i, get_idx_irn(lv->irg, n->idx), lv_flags_to_str(n->flags));
+ }
+ }
+ }
+}
+
+void be_liveness_check(be_lv_t *lv)
+{
+ lv_walker_t w;
+ be_lv_t *fresh = be_liveness_new(lv->irg);
+
+ w.lv = lv;
+ w.data = fresh;
+ irg_block_walk_graph(lv->irg, lv_check_walker, NULL, &w);
+ be_liveness_free(fresh);