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