Annotation of 3BSD/cmd/struct/2.dom.c, revision 1.1

1.1     ! root        1: #include <stdio.h>
        !             2: #
        !             3: /*
        !             4: set dom[v] to immediate dominator of v, based on arcs as stored in inarcs
        !             5: (i.e. pretending the graph is reducible if it isn't).
        !             6: Algorithm is from Hecht and Ullman, Analysis of a simple algorithm for global
        !             7: flow analysis problems, except bit vector operations replaced by search
        !             8: through DOM to save quadratic blowup in space 
        !             9: */
        !            10: #include "def.h"
        !            11: #include "2.def.h"
        !            12: 
        !            13: 
        !            14: getdom(inarc,dom)
        !            15: struct list **inarc;
        !            16: VERT *dom;
        !            17:        {
        !            18:        VERT v;
        !            19:        int i;
        !            20:        struct list *ls;
        !            21:        for (v = 0; v < nodenum; ++v)
        !            22:                dom[v] = UNDEFINED;
        !            23:        for (i = 1; i < accessnum; ++i)
        !            24:                {
        !            25:                v = after[i];
        !            26:                for (ls = inarc[v]; ls; ls = ls->nxtlist)
        !            27:                        {
        !            28:                        ASSERT(ntoaft[ls->elt] < i,getdom);
        !            29:                        dom[v] = comdom(dom[v],ls->elt,dom);
        !            30:                        }
        !            31: 
        !            32:                }
        !            33:        }
        !            34: 
        !            35: 
        !            36: comdom(u,v,dom)                        /* find closest common dominator of u,v */
        !            37: VERT u,v, *dom;
        !            38:        {
        !            39:        if (u == UNDEFINED) return(v);
        !            40:        if (v == UNDEFINED) return(u);
        !            41:        while(u != v)
        !            42:                {
        !            43:                ASSERT(u != UNDEFINED && v != UNDEFINED, comdom);
        !            44:                if (ntoaft[u] < ntoaft[v])      
        !            45:                        v = dom[v];
        !            46:                else
        !            47:                        u = dom[u];
        !            48:                }
        !            49:        return(u);
        !            50:        }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.