System.out.println("Running SJFusion...");
System.out.println("Running FuseAll...");
    public static void run(SIRStream str,			JInterfaceDeclaration[] 			interfaces,			SIRInterfaceTable[]			interfaceTables) {	System.out.println("Entry to RAW Backend");	if (StreamItOptions.ratematch)	    simulator = new RateMatchSim();	else 	    simulator = new FineGrainSimulator();	//this must be run now, FlatIRToC relies on it!!!	Renamer.renameAll(str);		// move field initializations into init function	System.out.print("Moving initializers into init functions... ");	FieldInitMover.moveStreamInitialAssignments(str);	System.out.println("done.");		// propagate constants and unroll loop	System.out.println("Running Constant Prop and Unroll...");	ConstantProp.propagateAndUnroll(str);	System.out.println("Done Constant Prop and Unroll...");	// construct stream hierarchy from SIRInitStatements	ConstructSIRTree.doit(str);	//SIRPrinter printer1 = new SIRPrinter();	//str.accept(printer1);	//printer1.close();	StreamItDot.printGraph(str, "before.dot");		if (StreamItOptions.fusion) {	    System.out.println("Running SJFusion...");	    FuseAll.fuse(str);	    System.out.println("Done SJFusion...");	}	//VarDecl Raise to move array assignments up	new VarDeclRaiser().raiseVars(str);        // do constant propagation on fields        if (StreamItOptions.constprop) {	    System.out.println("Running Constant Propagation of Fields");	    FieldProp.doPropagate(str);	    //System.out.println("Analyzing Branches..");	    //new BlockFlattener().flattenBlocks(str);	    //new BranchAnalyzer().analyzeBranches(str);	}		AdjustGranularity.doit(str, 			       StreamItOptions.rawRows * 			       StreamItOptions.rawColumns);		if (StreamItOptions.partition) {	    Partitioner.doit(str, 			     StreamItOptions.rawRows *			     StreamItOptions.rawColumns);	}	StreamItDot.printGraph(str, "after.dot");	//VarDecl Raise to move array assignments up	new VarDeclRaiser().raiseVars(str);       	System.out.println("Flattener Begin...");	executionCounts = SIRScheduler.getExecutionCounts(str);	RawFlattener rawFlattener = new RawFlattener(str);	rawFlattener.dumpGraph("flatgraph.dot");	System.out.println("Flattener End.");	//create the execution counts for other passes	createExecutionCounts(str, rawFlattener);	//see if we can remove any joiners	JoinerRemoval.run(rawFlattener.top);	// layout the components (assign filters to tiles)		Layout.simAnnealAssign(rawFlattener.top);		//Layout.handAssign(rawFlattener.top);	System.out.println("Assign End.");	//Generate the switch code		if (StreamItOptions.ratematch)	    CalcBufferSize.createBufferSizePow2(rawFlattener.top);	System.out.println("Switch Code Begin...");	SwitchCode.generate(rawFlattener.top);	//	SwitchCode.dumpCode();	System.out.println("Switch Code End.");	//Generate the tile code	System.out.println("Tile Code begin...");	TileCode.generateCode(rawFlattener.top);	System.out.println("Tile Code End.");	//generate the makefiles	System.out.println("Creating Makefile.");	MakefileGenerator.createMakefile();	System.out.println("Exiting");	System.exit(0);    }