|
|
1.1 root 1: /* BuiLD Data Structures */
2:
3: #include "ideal.h"
4: #include "y.tab.h"
5:
6: NOADPTR rbuildnoadtree (corrputnode)
7: PUTPTR corrputnode;
8: {
9: NOADPTR nuroot, putsons, boxsons;
10: dprintf "building noad tree for %s\n", idprint (corrputnode->name));
11: nuroot = noadgen (
12: corrputnode,
13: buildvarlist (corrputnode->parm->stmtlist),
14: buildvarlist ((findbox (corrputnode->parm->name,FALSE))->stmtlist)
15: );
16: putsons = walkputlist (corrputnode->parm->stmtlist, nuroot);
17: boxsons = walkputlist ((findbox (corrputnode->parm->name,FALSE))->stmtlist, nuroot);
18: if (putsons == NULL) {
19: nuroot->son = boxsons;
20: } else {
21: NOADPTR temp;
22: for (temp = putsons;
23: temp->brother != NULL;
24: temp = temp->brother)
25: ;
26: temp->brother = boxsons;
27: nuroot->son = putsons;
28: }
29: return (nuroot);
30: }
31:
32: NOADPTR buildnoadtree (corrputnode)
33: PUTPTR corrputnode;
34: {
35: NOADPTR retval;
36: if (when_bug & 02) bug_on;
37: retval = rbuildnoadtree (corrputnode);
38: bug_off;
39: return (retval);
40: }
41:
42: VARPTR buildvarlist (stmtlist)
43: STMTPTR stmtlist;
44: {
45: VARPTR curlist;
46: NAMEPTR namewalk;
47: curlist = NULL;
48: stmtlist = nextstmt (VAR, stmtlist);
49: while (stmtlist) {
50: /* make room for each local variable, and
51: /* make each independent (x = 1*x) */
52: for (namewalk = ((NAMEPTR) stmtlist->stmt);
53: namewalk;
54: namewalk = namewalk->next) {
55: VARPTR newre, newim;
56: newre = vargen (namewalk->name, TRUE, (DEPPTR) NULL);
57: newre->deplist = depgen (newre, 1.0);
58: newim = vargen (namewalk->name, FALSE, (DEPPTR) NULL);
59: newim->deplist = depgen (newim, 1.0);
60: newre->next = newim;
61: newim->next = curlist;
62: curlist = newre;
63: }
64: stmtlist = nextstmt (VAR, stmtlist->next);
65: }
66: return (curlist);
67: }
68:
69: NOADPTR walkputlist (stmtlist, parent)
70: STMTPTR stmtlist;
71: NOADPTR parent;
72: {
73: NOADPTR headnoad, curnoad, prevnoad;
74: stmtlist = nextstmt (PUT, stmtlist);
75: if (!stmtlist)
76: return (NULL);
77: headnoad = prevnoad = rbuildnoadtree ((PUTPTR) stmtlist->stmt);
78: prevnoad->father = parent;
79: stmtlist = nextstmt (PUT, stmtlist->next);
80: while (stmtlist) {
81: curnoad = rbuildnoadtree ((PUTPTR) stmtlist->stmt);
82: curnoad->father = parent;
83: prevnoad->brother = curnoad;
84: prevnoad = curnoad;
85: stmtlist = nextstmt (PUT, stmtlist->next);
86: }
87: return (headnoad);
88: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.