text: #include	"l.h"
  
  void
  noops(void)
  {
  	Prog *p, *q, *q1;
  
  	if(debug['v'])
  		Bprint(&bso, "%5.2f noops\n", cputime());
  	Bflush(&bso);
  	q = P;
  	for(p = firstp; p != P; p = p->link) {
  		switch(p->as) {
  		case ATEXT:
  			p->mark |= LEAF;
  /*p->mark = 0;/**/
  			curtext = p;
  			break;
  
  		case ABAL:
  			curtext->mark = 0;
  			break;
  
  		case ANOP:
  			q = q;
  			continue;
  			q1 = p->link;
  			q->link = q1;		/* q is non-nop */
  			q1->mark |= p->mark;
  			continue;
  		}
  		q = p;
  	}
  
  	curtext = P;
  	for(p = firstp; p != P; p = p->link) {
  		switch(p->as) {
  		case ATEXT:
  			curtext = p;
  			autosize = p->to.offset + 4;
  			if(autosize <= 4)
  			if(curtext->mark & LEAF) {
  				p->to.offset = -4;
  				autosize = 0;
  			}
  
  			q = p;
  			if(autosize) {
  				q = prg();
  				q->as = ASUBO;
  				q->line = p->line;
  				q->from.type = D_CONST;
  				q->from.offset = autosize;
  				q->to.type = REGSP;
  
  				q->link = p->link;
  				p->link = q;
  			} else
  			if(!(curtext->mark & LEAF)) {
  				if(debug['v'])
  					Bprint(&bso, "save suppressed in: %s\n",
  						curtext->from.sym->name);
  				curtext->mark |= LEAF;
  			}
  
  			if(curtext->mark & LEAF) {
  				if(curtext->from.sym)
  					curtext->from.sym->type = SLEAF;
  				break;
  			}
  
  			q1 = prg();
  			q1->as = AMOV;
  			q1->line = p->line;
  			q1->from.type = REGLINK;
  			q1->to.type = REGSP+D_INDIR;
  
  			q1->link = q->link;
  			q->link = q1;
  			break;
  
  		case ARTS:
  			if(curtext->mark & LEAF) {
  				if(!autosize) {
  					p->as = AB;
  					p->from = zprg.from;
  					p->to.type = REGLINK+D_INDIR;
  					p->to.offset = 0;
  					break;
  				}
  
  				p->as = AADDO;
  				p->from.type = D_CONST;
  				p->from.offset = autosize;
  				p->to.type = REGSP;
  
  				q = prg();
  				q->as = AB;
  				q->line = p->line;
  				q->to.type = REGLINK+D_INDIR;
  				q->to.offset = 0;
  
  				q->link = p->link;
  				p->link = q;
  				break;
  			}
  
  			p->as = AMOV;
  			p->from.type = REGSP+D_INDIR;
  			p->from.offset = 0;
  			p->to.type = REGRET+1;
  
  			q = p;
  			if(autosize) {
  				q = prg();
  				q->as = AADDO;
  				q->line = p->line;
  				q->from.type = D_CONST;
  				q->from.offset = autosize;
  				q->to.type = REGSP;
  
  				q->link = p->link;
  				p->link = q;
  			}
  
  			q1 = prg();
  			q1->as = AB;
  			q1->line = p->line;
  			q1->to.type = REGRET+1+D_INDIR;
  			q1->to.offset = 0;
  
  			q1->link = q->link;
  			q->link = q1;
  			break;
  		}
  	}
  }
  