Nothing uses phi congruence any more (replaced by register allocator anode
authorDavid Given <dg@cowlark.com>
Mon, 12 Dec 2016 22:49:42 +0000 (23:49 +0100)
committerDavid Given <dg@cowlark.com>
Mon, 12 Dec 2016 22:49:42 +0000 (23:49 +0100)
coalescing), so remove the pass that calculated it.

mach/proto/mcg/pass_phigroups.c [deleted file]
mach/proto/mcg/reg.h

diff --git a/mach/proto/mcg/pass_phigroups.c b/mach/proto/mcg/pass_phigroups.c
deleted file mode 100644 (file)
index 68d8c7d..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-#include "mcg.h"
-
-static PMAPOF(struct vreg, struct vreg) phimap;
-
-static void make_phimap(void)
-{
-       int i, j;
-
-       phimap.count = 0;
-       for (i=0; i<cfg.preorder.count; i++)
-       {
-               struct basicblock* bb = cfg.preorder.item[i];
-               
-               for (j=0; j<bb->phis.count; j++)
-               {
-                       struct vreg* vreg = bb->phis.item[j].left;
-                       struct phi* phi = bb->phis.item[j].right;
-                       struct vreg* prevvreg = phi->ir->result;
-
-                       pmap_add(&phimap, vreg, prevvreg);
-               }
-       }
-}
-
-static void recursively_associate_group(struct phicongruence* c, struct vreg* vreg)
-{
-       int i;
-
-       vreg->congruence = c;
-       array_appendu(&c->vregs, vreg);
-    tracef('V', "V: %%%d is a member of congruence group %d\n",
-        vreg->id, c->id);
-
-    if (vreg->defined)
-    {
-        struct constraint* constraint = pmap_findleft(&vreg->defined->constraints, vreg);
-        if (c->type == 0)
-            c->type = vreg->type;
-            
-        assert(c->type == vreg->type);
-
-        array_appendu(&c->definitions, vreg->defined);
-    }
-
-       for (;;)
-       {
-               struct vreg* child = pmap_findleft(&phimap, vreg);
-        if (!child)
-            break;
-
-        pmap_remove(&phimap, vreg, child);
-        recursively_associate_group(c, child);
-    }
-               
-    for (;;)
-    {
-               struct vreg* child = pmap_findright(&phimap, vreg);
-               if (!child)
-            break;
-
-        pmap_remove(&phimap, child, vreg);
-        recursively_associate_group(c, child);
-       }
-}
-
-static void update_vreg_types(struct phicongruence* c)
-{
-    int i;
-
-    for (i=0; i<c->vregs.count; i++)
-    {
-        struct vreg* vreg = c->vregs.item[i];
-
-        if (vreg->type == 0)
-            vreg->type = c->type;
-        assert(vreg->type == c->type);
-        assert(vreg->type != 0);
-    }
-}
-
-static void associate_groups(void)
-{
-    static int number = 0;
-
-       while (phimap.count > 0)
-       {
-               struct phicongruence* c = heap_alloc(&proc_heap, 1, sizeof(*c));
-        c->id = number++;
-               recursively_associate_group(c, phimap.item[0].left);
-        update_vreg_types(c);
-       }
-}
-
-void pass_find_phi_congruence_groups(void)
-{
-       make_phimap();
-       associate_groups();
-}
-
-/* vim: set sw=4 ts=4 expandtab : */
-
-
-
index d1c4cbc..c0cd47f 100644 (file)
@@ -3,14 +3,6 @@
 
 #define WITH_ATTR(a) (1<<(a))
 
-struct phicongruence
-{
-    int id;
-    ARRAYOF(struct vreg) vregs;
-    ARRAYOF(struct hop) definitions;
-    uint32_t type;
-};
-
 struct hreg
 {
        const char* id;
@@ -25,10 +17,11 @@ struct vreg
 {
        int id;
     uint32_t type;
-    struct phicongruence* congruence;
-    struct hop* defined;
     struct anode* anode;
-    ARRAYOF(struct hop) used;
+    bool is_spillable;
+    struct hop* defined;
+    ARRAYOF(struct hop) usedhops;
+    ARRAYOF(struct basicblock) usedphis;
 };
 
 typedef PMAPOF(struct hreg, struct vreg) register_assignment_t;