|
|
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.