- w.data = bitset_malloc(get_irg_last_idx(lv->irg));
- irg_walk_graph(lv->irg, liveness_for_node, NULL, &w);
- bitset_free(w.data);
+ w.data = bitset_obstack_alloc(&obst, get_irg_last_idx(lv->irg));
+
+ for (i = 0; i < n; ++i)
+ liveness_for_node(nodes[i], &w);
+
+ obstack_free(&obst, NULL);
+ register_hook(hook_node_info, &lv->hook_info);
+ stat_ev_tim_pop("be_lv_sets_cons");
+}
+
+void be_liveness_assure_sets(be_lv_t *lv)
+{
+ if (!lv->nodes) {
+ BE_TIMER_PUSH(t_live);
+
+ lv->nodes = bitset_malloc(2 * get_irg_last_idx(lv->irg));
+ phase_init(&lv->ph, "liveness", lv->irg, PHASE_DEFAULT_GROWTH, lv_phase_data_init, NULL);
+ compute_liveness(lv);
+ /* be_live_chk_compare(lv, lv->lvc); */
+
+ BE_TIMER_POP(t_live);
+ }
+}
+
+void be_liveness_assure_chk(be_lv_t *lv)
+{
+#ifndef USE_LIVE_CHK
+ BE_TIMER_PUSH(t_verify);
+ be_liveness_assure_sets(lv);
+ BE_TIMER_POP(t_verify);
+#else
+ (void) lv;
+#endif
+}
+
+void be_liveness_invalidate(be_lv_t *lv)
+{
+ if (lv && lv->nodes) {
+ unregister_hook(hook_node_info, &lv->hook_info);
+ phase_free(&lv->ph);
+ bitset_free(lv->nodes);
+ lv->nodes = NULL;
+ }