bottomPeek = ((SIRTwoStageFilter)filter).getInitPeek();
bottomPeek = ((SIRTwoStageFilter)filter).getInitPeek() - ((SIRTwoStageFilter)filter).getInitPop();
    private void printCircularWorkHeader( 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;		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)	    initCount--;		//!!!!   initCount will be -1 if this is a two stage and 	//      it does not execute in the init sched	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();	    }	    //System.out.println("previous: " + previous.getName());	    //System.out.println("prev Push: " + prevPush + " prev init: " + prevInitCount);	}	int remainingItemsToReceive = (prevInitCount * prevPush);		//	System.out.println("Items to receive: " +  remainingItemsToReceive);	//if the previous node is a two stage filter then count its initWork	//in the initialItemsTo Receive	if (previous != null && previous.contents instanceof SIRTwoStageFilter) {	    remainingItemsToReceive -= ((SIRTwoStageFilter)previous.contents).getPushInt();	    remainingItemsToReceive += ((SIRTwoStageFilter)previous.contents).getInitPush();	}	       	//System.out.println("recalculated if prev is 2stage: " + remainingItemsToReceive);	//subtract the number of items the initWork took from the previous 	//stream for the initialization code.	if (filter instanceof SIRTwoStageFilter) {	    SIRTwoStageFilter two = (SIRTwoStageFilter)filter;	    remainingItemsToReceive -= two.getInitPeek();	    //System.out.println("our init work: " + remainingItemsToReceive);  	}	else  {//if we are not a twostage we receive peek items on the first execution 	    if (initCount > 0)		remainingItemsToReceive -= (peek -pop);	}	remainingItemsToReceive -= (initCount * pop);	//System.out.println("our work calls in init sch: " + remainingItemsToReceive);	//execute the work function	if (initCount > 0) {	    	    int bottomPeek; 	    //fill the peek buffer 	    if (filter instanceof SIRTwoStageFilter) {		bottomPeek = ((SIRTwoStageFilter)filter).getInitPeek();	    } 	    else {		bottomPeek = 0;	    }	    if (bottomPeek < peek) {		//		remainingItemsToReceive -= (peek - bottomPeek);		print(" for (" + exeIndex + " = " + bottomPeek + "; " + exeIndex + " < " + 		      peek + "; " + exeIndex + "++) {\n");		printReceive();		print(" }\n");	    }	    	    //System.out.println("difference from peek to initpeek: " + remainingItemsToReceive + "\n\n");	    print("for (" + exeIndex + " = 0; " + exeIndex + " < " + initCount + "; " +		  exeIndex + "++)\n");	    print("{\n");	    //do not receive on the first invocation	    if (peek > 0) {		print("if (" + exeIndex + " != 0) {\n");		print(" for (" + exeIndex1 + " = " + 0 + "; " + exeIndex1 + " < " + 		      pop + "; " + exeIndex1 + "++) \n");		printReceive();		print("}\n");	    }	    	    workBlock.accept(this);	    print("}\n");	    	}		if (remainingItemsToReceive < 0)	    Utils.fail("Error in tile code");		//receive the rest of the items	if (remainingItemsToReceive > 0) {	    print("for (" + exeIndex + " = 0; " + exeIndex + " < " + remainingItemsToReceive +		  "; " + exeIndex + "++)\n");	    printReceive();	}   		print(" while (1) {\n");	if (peek > 0) {	    print("for (" + exeIndex + " = 0; " + exeIndex + " < " + pop +		  "; " + exeIndex + "++)\n");	    printReceive();	}	    	//work	if (debug) print("   print_int("+   Layout.getTileNumber(filter) + ");\n");    }