private SIRStream makeEfficientImplementation(SIRContainer parent, SIRStream oldStream, LinearFilterRepresentation linearRep) {
private SIRStream makeEfficientImplementation(SIRStream oldStream, LinearFilterRepresentation linearRep) {
    private SIRStream makeEfficientImplementation(SIRContainer parent,							 SIRStream oldStream,							 LinearFilterRepresentation linearRep) {	// if we have a linear representation of this filter	if (!linearityInformation.hasLinearRepresentation(oldStream)) {	    throw new RuntimeException("no linear info");	}	// create a new work function that calculates the linear representation directly	JMethodDeclaration newWork = makeDirectWork(linearRep,						    oldStream.getInputType(),						    oldStream.getOutputType(),						    linearRep.getPopCount());	JMethodDeclaration newInit = SIRStream.makeEmptyInit();		// create a new filter with the new work and init functions		SIRFilter newFilter = new SIRFilter("Linear" + oldStream.getIdent());	newFilter.setParent(parent);	newFilter.setWork(newWork);	newFilter.setInit(newInit);	newFilter.setPeek(linearRep.getPeekCount());	newFilter.setPop (linearRep.getPopCount());	newFilter.setPush(linearRep.getPushCount());	newFilter.setInputType(oldStream.getInputType());	newFilter.setOutputType(oldStream.getOutputType());	LinearPrinter.println(" created new filter: " + newFilter);	return newFilter;    }