|
|
1.1 ! root 1: /* static char ID[] = "@(#) inter.c: 1.3 10/5/82"; */ ! 2: ! 3: #include "optim.h" ! 4: ! 5: NODE *lastnode; /* reference to node being built by Saveop */ ! 6: ! 7: NODE * ! 8: Saveop(opn, str, len, op) /* save part of inst */ ! 9: register int opn; register char *str; unsigned len; int op; { ! 10: ! 11: register NODE *p = lastnode; ! 12: ! 13: if (opn == 0) { /* make a new node and link it in */ ! 14: p = lastnode = GETSTR(NODE); ! 15: if ((p->op = op) != GHOST) { ! 16: INSNODE(p, &ntail); ! 17: ninst++; ! 18: } ! 19: for (op = 0; op < MAXOPS; ) ! 20: p->ops[++op] = NULL; ! 21: #ifdef LIVEDEAD ! 22: p->nlive = p->ndead = 0; ! 23: #endif ! 24: #ifdef IDVAL ! 25: p->uniqid = IDVAL; ! 26: #endif ! 27: } ! 28: if (opn < 0 || opn > MAXOPS) ! 29: fatal("invalid opn field for %s\n", str); ! 30: p->ops[opn] = COPY(str, len); ! 31: return (p); ! 32: } ! 33: ! 34: void ! 35: addref(str, len) char *str; unsigned len; { /* add text ref to reference list */ ! 36: ! 37: register REF *r = lastref = lastref->nextref = GETSTR(REF); ! 38: ! 39: r->lab = COPY(str, len); ! 40: r->nextref = NULL; ! 41: } ! 42: ! 43: void ! 44: filter() { /* print FILTER nodes and remove from list */ ! 45: ! 46: register NODE *p; ! 47: ! 48: for (ALLN(p)) ! 49: if (p->op == FILTER) { ! 50: (void) puts(p->ops[0]); ! 51: DELNODE(p); ! 52: } ! 53: } ! 54: ! 55: void ! 56: prtext() { /* print text list */ ! 57: ! 58: register NODE *p; ! 59: ! 60: for (ALLN(p)) { ! 61: prinst(p); ! 62: } ! 63: } ! 64: ! 65: boolean ! 66: same(p, q) NODE *p, *q; { /* return true iff nodes are the same */ ! 67: ! 68: register char **pp, **qq; ! 69: register int i; ! 70: ! 71: if (p->op != q->op) ! 72: return (false); ! 73: ! 74: /* first check for equal numbers of active operands */ ! 75: ! 76: for (pp = p->ops, qq = q->ops, i = MAXOPS + 1; ! 77: --i >= 0 && (*pp != NULL || *qq != NULL); pp++, qq++) ! 78: if (*pp == NULL || *qq == NULL) ! 79: return (false); ! 80: ! 81: /* then check for equality of the active operands */ ! 82: ! 83: while (pp > p->ops) ! 84: if (**--pp != **--qq || strcmp(*pp, *qq)) ! 85: return (false); ! 86: return (true); ! 87: } ! 88: ! 89: boolean ! 90: sameaddr(p, q) NODE *p, *q; { /* return true iff ops[1...] are the same */ ! 91: ! 92: register char **pp, **qq; ! 93: register int i; ! 94: ! 95: /* first check for equal numbers of active operands */ ! 96: ! 97: for (pp = p->ops, qq = q->ops, i = MAXOPS + 1; ! 98: --i >= 0 && (*pp != NULL || *qq != NULL); pp++, qq++) ! 99: if (*pp == NULL || *qq == NULL) ! 100: return (false); ! 101: ! 102: /* then check for equality of the active operands */ ! 103: ! 104: while (pp > p->ops + 1) ! 105: if (**--pp != **--qq || strcmp(*pp, *qq)) ! 106: return (false); ! 107: return (true); ! 108: } ! 109: ! 110: char * ! 111: xalloc(n) register unsigned n; { /* allocate space */ ! 112: ! 113: extern char *malloc(); ! 114: register char *p; ! 115: ! 116: if ((p = malloc(n)) == NULL) ! 117: fatal("out of space\n", (char *)NULL); ! 118: return (p); ! 119: } ! 120: ! 121: void ! 122: xfree(p) char *p; { /* free up space allocated by xalloc */ ! 123: ! 124: extern void free(); ! 125: ! 126: free(p); /* return space */ ! 127: } ! 128: ! 129: void ! 130: fatal(fmt, str) char *fmt, *str; { /* report fatal error and quit */ ! 131: ! 132: extern void exit(); ! 133: ! 134: FPRINTF(stderr, "Optimizer: "); ! 135: FPRINTF(stderr, fmt, str); ! 136: exit(2); ! 137: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.