Layout.setLayout(oldLayout);
    public static int estimateWork(SIRFilter oldFilter)    {	// if we have an identity filter, just return 0 since these	// aren't mapped onto Raw	if (oldFilter instanceof SIRIdentity) {	    return 0;	}	boolean oldDecoupledValue = KjcOptions.decoupled;	boolean oldMagicNetValue = KjcOptions.magic_net;	boolean oldRateMatchValue = KjcOptions.ratematch;	int work = 0;	//clone the Filter and create a dummy pipeline with just this	//new cloned filter	SIRFilter filter = (SIRFilter)ObjectDeepCloner.deepCopy(oldFilter);	SIRPipeline pipe = new SIRPipeline("top");	LinkedList list = new LinkedList();	list.add(filter);	pipe.setChildren(list);	//make a new directory and change the current working dir	String dir = File.separator + "tmp" + File.separator + 	    filter.getName();		File file = new File(dir);	file.mkdir();	// make structures header file in this directory	StructureIncludeFile.doit(RawBackend.structures, dir);	// set decouple execution to true	KjcOptions.decoupled = true;	// set magic net to false	KjcOptions.magic_net = false;	//set rate match to false	KjcOptions.ratematch = false;	//make a new FlatGraph with only this filter...	FlatNode top = new FlatNode(filter);		//VarDecl Raise to move array assignments up	new VarDeclRaiser().raiseVars(filter);		//VarDecl Raise to move peek index up so	//constant prop propagates the peek buffer index	new VarDeclRaiser().raiseVars(filter);	// layout the components (assign filters to tiles)		Layout.simAnnealAssign(top);	//remove print statements in the original app	//if we are running with decoupled	RemovePrintStatements.doIt(top);		//Generate the tile code	RawExecutionCode.doit(top);	if (KjcOptions.removeglobals) {	    RemoveGlobals.doit(top);	}	TileCode.generateCode(top);	MakefileGenerator.createMakefile();	try {	    //copy the files 	    {		String[] cmdArray = new String[5];		cmdArray[0] = "cp";		cmdArray[1] = "tile0.c";		cmdArray[2] = "Makefile.streamit";		cmdArray[3] = "fileio.bc";		cmdArray[4] = dir;    		Process jProcess = Runtime.getRuntime().exec(cmdArray);		jProcess.waitFor();	    }	    	    //run the simulator	    {		String[] cmdArray = new String[6];		cmdArray[0] = "make";		cmdArray[1] = "-C";		cmdArray[2] = dir;		cmdArray[3] = "-f";		cmdArray[4] = "Makefile.streamit";		cmdArray[5] = "run";		Process jProcess = Runtime.getRuntime().exec(cmdArray);		jProcess.waitFor();	    }	    	    //open the results file and return the stats	    work = readCycleCount(dir);	    	    //remove the directory	    {		String[] cmdArray = new String[3];		cmdArray[0] = "rm";		cmdArray[1] = "-rf";		cmdArray[2] = dir;		Process jProcess = Runtime.getRuntime().exec(cmdArray);		jProcess.waitFor();	    }	    	}	catch (Exception e) {	    e.printStackTrace();	    Utils.fail("Error running the raw simulator for work estimation");	}		KjcOptions.decoupled = oldDecoupledValue;	KjcOptions.magic_net = oldMagicNetValue;	KjcOptions.ratematch = oldRateMatchValue;	return work;    }