+static int loc_compare(const void *a, const void *b)
+{
+ const loc_t *p = ((const loc_t*) a);
+ const loc_t *q = ((const loc_t*) b);
+ const unsigned pt = p->time;
+ const unsigned qt = q->time;
+
+ if (pt < qt)
+ return -1;
+ if (pt > qt)
+ return 1;
+
+ return get_irn_node_nr(p->node) - get_irn_node_nr(q->node);
+}
+
+static void workset_sort(workset_t *workset)
+{
+ qsort(workset->vals, workset->len, sizeof(workset->vals[0]), loc_compare);
+}
+
+static inline unsigned workset_get_time(const workset_t *workset, unsigned idx)
+{
+ return workset->vals[idx].time;
+}
+
+static inline void workset_set_time(workset_t *workset, unsigned idx,
+ unsigned time)
+{
+ workset->vals[idx].time = time;
+}
+
+static inline unsigned workset_get_length(const workset_t *workset)
+{
+ return workset->len;
+}
+
+static inline void workset_set_length(workset_t *workset, unsigned len)
+{
+ workset->len = len;
+}
+
+static inline ir_node *workset_get_val(const workset_t *workset, unsigned idx)
+{
+ return workset->vals[idx].node;
+}
+