if (KjcOptions.unroll<100000) {
if (KjcOptions.unroll>=100000) {
    public void visitFilter(SIRFilter self, SIRFilterIter iter) {	// short-circuit the case where we've already seen this stream	// (for dynamic programming partitioner)	if (streamsToLinearRepresentation.containsKey(self) || nonLinearStreams.contains(self)) {	    return;	}		this.filtersSeen++;	LinearPrinter.println("Visiting " + "(" + self + ")");	// set up the visitor that will actually collect the data	int peekRate = self.getPeekInt();	int pushRate = self.getPushInt();	int popRate  = self.getPopInt();	LinearPrinter.println("  Peek rate: " + peekRate);	LinearPrinter.println("  Push rate: " + pushRate);	LinearPrinter.println("  Pop rate: "  + popRate);	// if we have a peek or push rate of zero, this isn't a linear filter that we care about,	// so only try and visit the filter if both are non-zero	if ((peekRate == 0) || (pushRate == 0)) {	    LinearPrinter.println("  " + self.getIdent() + " is source/sink.");	    nonLinearStreams.add(self);	    return;	}	LinearFilterVisitor theVisitor = new LinearFilterVisitor(self.getIdent(),								 peekRate, pushRate, popRate);		// if we haven't unrolled this node yet, then do it here, by cloning	SIRFilter unrolledSelf;	if (KjcOptions.unroll<100000) {	    unrolledSelf = self;	} else {	    unrolledSelf = (SIRFilter)ObjectDeepCloner.deepCopy(self);	    Unroller.unrollFilter(unrolledSelf);	}	// pump the visitor through the work function	// (we might need to send it thought the init function as well so that	//  we can determine the initial values of fields. However, I think that	//  field prop is supposed to take care of this.)	try {	    unrolledSelf.getWork().accept(theVisitor);	} catch (NonLinearException e) {	    LinearPrinter.println("  caught a non-linear exception -- eg the filter is non linear.");	    theVisitor.setNonLinear(); // throw the flag that says the filter is non linear	}		// print out the results of pumping the visitor	// incidentally, this output is parsed by some perl scripts to verify results,	// so it probably shouldn't be changed.	if (theVisitor.computesLinearFunction()) {	    // since printing the matrices takes so long, if debugging is not on,	    // don't even generate the string.	    if (LinearPrinter.getOutput()) {		LinearPrinter.println("Linear filter found: " + self +				      "\n-->Matrix:\n" + theVisitor.getMatrixRepresentation() +				      "\n-->Constant Vector:\n" + theVisitor.getConstantVector());	    }	    // add a mapping from the filter to its linear form.	    this.streamsToLinearRepresentation.put(self,						   theVisitor.getLinearRepresentation());	} else {	    nonLinearStreams.add(self);	}	// check that we have not violated the rep invariant	checkRep();    }