Integer steady = (Integer)RawBackend.steadyExecutionCounts. get(Layout.getNode(Layout.getTile(filter)));
    private void printRateMatchWorkHeader(int pop, int peek, int push, JBlock workBlock)      {	print("{\n");	Integer init = (Integer)RawBackend.initExecutionCounts.	    get(Layout.getNode(Layout.getTile(filter)));	Integer steady = (Integer)RawBackend.steadyExecutionCounts.	    get(Layout.getNode(Layout.getTile(filter)));		int initCount = 0;	int steadyCount = 0;		if (init != null) 	    initCount = init.intValue();	//if this is a two stage filter, count one of the initial executions 	//as the initWork execution and decrement the number of times the 	//work function is called in the init Schedule	if (filter instanceof SIRTwoStageFilter) {	    SIRTwoStageFilter two = (SIRTwoStageFilter)filter;	    if (!(two.getInitPeek() == 0 && two.getInitPush() == 0 &&		  two.getInitPop() == 0))		initCount--;	}		if (steady != null)	    steadyCount = steady.intValue();		//initialization	//receive what the previous filter produces		int prevInitCount = 0;	int prevPush = 0;		FlatNode node = Layout.getNode(Layout.getTile(filter));	FlatNode previous = null;		if (node.inputs > 0) {	    previous = node.incoming[0];	    prevInitCount = Util.getCountPrev(RawBackend.initExecutionCounts, 					 previous, node);	    if (prevInitCount > 0) {		if (previous.contents instanceof SIRSplitter || 		    previous.contents instanceof SIRJoiner) 		    prevPush = 1;		else		    prevPush = ((SIRFilter)previous.contents).getPushInt();	    }	}		int initialItemsToReceive = (prevInitCount * prevPush);		//if the previous node is a two stage filter then count its initWork	//in the initialItemsTo Receive	if (previous != null && previous.contents instanceof SIRTwoStageFilter) {	    initialItemsToReceive -= ((SIRTwoStageFilter)previous.contents).getPushInt();	    initialItemsToReceive += ((SIRTwoStageFilter)previous.contents).getInitPush();	}		//subtract the number of items the initWork took from the previous 	//stream for the initialization code.	if (filter instanceof SIRTwoStageFilter) {	    SIRTwoStageFilter two = (SIRTwoStageFilter)filter;	    if (!(two.getInitPeek() == 0 && two.getInitPush() == 0 &&		  two.getInitPop() == 0)) {		initialItemsToReceive -= two.getInitPeek();	    }	}		if (initialItemsToReceive > 0) {	    print("for (" + exeIndex + " = 0; " + exeIndex + " < " + initialItemsToReceive +		  "; " + exeIndex + "++)\n");	    printReceive();	}   		//execute the work function	if (initCount > 0) {	    print("for (" + exeIndex + " = 0; " + exeIndex + " < " + initCount + "; " +		  exeIndex + "++)\n");	    workBlock.accept(this);	    //send the data produced	    print("for (" + exeIndex + " = 0; " + exeIndex + " < " + (push * initCount) +		  "; " + exeIndex + "++)\n");	    print("{\n");	    printRateMatchSend();	    //end the send	    print(";\n");	    //end the send loop	    print("}\n");	}		//steady state		print("while(1) {\n");		if (pop > 0) {	    //receive everything	    print("for (" + exeIndex + " = 0; " + exeIndex + " < " + (pop * steadyCount) +		  "; " + exeIndex + "++)\n");	    printReceive();	}		//perform work for the prescibed iterations	print("for (" + exeIndex + " = 0; " + exeIndex + " < " + steadyCount + "; " +	      exeIndex + "++)\n");	print("{");   	    }