StreamItDot.printGraph(str, "1.dot");
    private static void doFM16_2(SIRStream str) {	RawFlattener rawFlattener;	System.err.println("Working on FM 16...");	rawFlattener = new RawFlattener(str);	rawFlattener.dumpGraph("before-adjust.dot");	System.err.println("\nBEFORE: " + rawFlattener.getNumTiles() + 			   " tiles");	WorkEstimate.getWorkEstimate(str).printWork();	SJFlatten.doFlatten(str);	// get the inner splitjoin and fuse its pipes	SIRSplitJoin split = (SIRSplitJoin)Namer.getStream("EqualizerSplitJoin_2_3_1");	FuseAll.fuse(split);	// now fizz each side of the split-join by 3	StatelessDuplicate.doit((SIRFilter)split.get(0),3);	StatelessDuplicate.doit((SIRFilter)split.get(1),3);	// constant-prop through new filters	ConstantProp.propagateAndUnroll(split);	FieldProp.doPropagate(split);	// fuse the second two filters	SIRPipeline pipe = (SIRPipeline)((SIRPipeline)str).get(1);	FusePipe.fuse((SIRFilter)pipe.get(0),		      (SIRFilter)pipe.get(1));	// fizzzzz the fused combo 3 ways	StatelessDuplicate.doit((SIRFilter)pipe.get(0), 4);	// constant-prop through new filters	ConstantProp.propagateAndUnroll(pipe);	FieldProp.doPropagate(pipe);	// fuse the last three filters	SIRFilter adder = (SIRFilter)Namer.getStream("FloatSubtract_2_3_2");	SIRFilter printer = (SIRFilter)Namer.getStream("FloatPrinter_2_3_4");	FusePipe.fuse(adder, printer);	Namer.assignNames(str);	rawFlattener = new RawFlattener(str);	rawFlattener.dumpGraph("after-adjust.dot");	System.err.println("\nAFTER: " + rawFlattener.getNumTiles() + 			   " tiles");	WorkEstimate.getWorkEstimate(str).printWork();	System.out.println("Here's the new IR: ");	SIRPrinter printer1 = new SIRPrinter();	str.accept(printer1);	printer1.close();    }