filter1 = filter2;
stream1 = stream2;
    private void registerTapes(SIRStream str, 			       JMethodDeclaration init) {	// assume <str> is a pipeline	Utils.assert(str instanceof SIRPipeline, "Can only do pipes now.");	SIRPipeline pipe = (SIRPipeline)str;	// if empty pipeline, return	if (pipe.size()==0) {	    return;	}	// assume components are filters for now . . . 	// go through children of <pipe>, keeping track of filter1 and	// filter2, which have a tape between them	SIRFilter filter1, filter2;	// get filter1	filter1 = (SIRFilter)pipe.get(0);	// for all the pairs of children...	for (int i=1; i<pipe.size(); i++) {	    // get filter2	    filter2 = (SIRFilter)pipe.get(i);	    // declare a tape from filter1 to filter2	    init.addStatement(new LIRSetTape(LoweringConstants.					     getStreamContext(),					     /* stream struct 1 */					     LoweringConstants.					     getChildStruct(i-1),					     /* stream struct 2 */					     LoweringConstants.					     getChildStruct(i), 					     /* type on tape */					     filter1.getOutputType(), 					     /* size of buffer */	   schedule.getBufferSizeBetween(filter1, filter2).intValue()						  ));	    // re-assign filter1 for next step	    filter1 = filter2;	}    }