- spilllist = alloca(spillcount * sizeof(spilllist[0]));
-
- DEBUG_ONLY(
- memset(spilllist, 0, spillcount * sizeof(spilllist[0]));
- );
-
- coal = be_java_coal_init("spillslot coalescing", spillcount, spillcount, 1);
-
- for(spill = set_first(env->spills), i = 0; spill != NULL; spill = set_next(env->spills), ++i) {
- assert(spill->spillslot < spillcount);
- DEBUG_ONLY(assert(spilllist[spill->spillslot] == NULL));
- spilllist[spill->spillslot] = spill;
-
- be_java_coal_set_color(coal, spill->spillslot, spill->spillslot);
- }
-
- // construct interferences
- for(i = 0; i < spillcount; ++i) {
- for(i2 = i+1; i2 < spillcount; ++i2) {
- if(values_interfere(env->chordal_env->lv, spilllist[i]->spill, spilllist[i2]->spill)) {
- be_java_coal_add_int_edge(coal, i, i2);
- }
- }
- }
-
- for(i = 0; i < ARR_LEN(env->affinity_edges); ++i) {
- const affinity_edge_t *edge = env->affinity_edges[i];
- int n = edge->slot1;
- int m = edge->slot2;
- int costs = (int) (edge->affinity * 10000);
- be_java_coal_add_aff_edge(coal, n, m, costs);
- }
-
- be_java_coal_coalesce(coal);
-
- // construct spillslots
- for(i = 0; i < spillcount; ++i) {
- spill_t *spill = spilllist[i];
- spill->spillslot = be_java_coal_get_color(coal, i);
- }
- be_java_coal_destroy(coal);
-}
-#endif
-
-/*
- * _ _ _____ _ _ _ _
- * / \ ___ ___(_) __ _ _ __ | ____|_ __ | |_(_) |_(_) ___ ___
- * / _ \ / __/ __| |/ _` | '_ \ | _| | '_ \| __| | __| |/ _ \/ __|
- * / ___ \\__ \__ \ | (_| | | | | | |___| | | | |_| | |_| | __/\__ \
- * /_/ \_\___/___/_|\__, |_| |_| |_____|_| |_|\__|_|\__|_|\___||___/
- * |___/
- */
-
-typedef struct _spill_slot_t {