+static irn_use_head_t *get_use_head(spill_ilp_t *si, const ir_node *irn)
+{
+ irn_use_head_t templ;
+ templ.irn = (ir_node *) irn;
+ return set_find(si->irn_use_heads, &templ, sizeof(templ), HASH_PTR(irn));
+}
+
+static int cmp_first_use(const void *a, const void *b, size_t n)
+{
+ const first_use_t *p = a;
+ const first_use_t *q = b;
+
+ return !(p->irn == q->irn && p->bl == q->bl);
+}
+
+static void add_first_use(spill_ilp_t *si, ir_node *bl, ir_node *irn, live_range_t *lr)
+{
+ first_use_t templ;
+ templ.bl = bl;
+ templ.irn = irn;
+ templ.lr = lr;
+
+ set_insert(si->first_uses, &templ, sizeof(templ),
+ HASH_COMBINE(HASH_PTR(bl), HASH_PTR(irn)));
+}
+
+static live_range_t *get_first_use_lr(spill_ilp_t *si, ir_node *bl, ir_node *irn)
+{
+ first_use_t *res;
+ first_use_t templ;
+ templ.bl = bl;
+ templ.irn = irn;
+
+ res = set_find(si->first_uses, &templ, sizeof(templ),
+ HASH_COMBINE(HASH_PTR(bl), HASH_PTR(irn)));
+
+ return res ? res->lr : NULL;
+}
+