System.out.println("Length: " + ((InputTraceNode)traceNode).getSources().length);
    public static void run(ListIterator traces, RawChip rawChip,			   boolean init)     {	//iterate over the traces in the given order and generate the 	//switch code, the tile code, and the off chip stuff for 	//each TraceNode	Trace trace;		while (traces.hasNext()) {	    trace = (Trace)traces.next();	    //iterate over the TraceNodes	    TraceNode traceNode = trace.getHead();	    while (traceNode != null) {		System.out.println("Rawify: " + traceNode);		//do the appropiate code generation		if (traceNode.isFilterTrace()) {		    FilterTraceNode filterNode = (FilterTraceNode)traceNode;		    if (filterNode.isPredefined()) {			//predefined node, may have to do something			if (KjcOptions.magicdram) 			    magicHandlePredefined(filterNode, rawChip, init);			else 			    Utils.fail("Predefined filters not supported");		    }		    else { //regular filter!			RawTile tile = rawChip.getTile((filterNode).getX(), 						       (filterNode).getY());			//create the filter info class			FilterInfo filterInfo = FilterInfo.getFilterInfo(filterNode);			//switch code for the trace			//generate switchcode based on the presence of buffering		    			int mult = (init) ? filterInfo.initMult : filterInfo.steadyMult;			//add the dram command if this filter trace is an endpoint...			generateFilterDRAMCommand(filterNode, filterInfo, tile, init, false);						if(filterInfo.isLinear())			    createSwitchCodeLinear(filterNode,						   trace,filterInfo,init,false,tile,rawChip,mult);			else if (filterInfo.isDirect())			    createSwitchCode(filterNode, 					     trace, filterInfo, init, false, tile, rawChip, mult);			else			    createSwitchCodeBuffered(filterNode, 						     trace, filterInfo, init, tile, rawChip, mult);			//we must add some switch instructions to account for the fact			//that we must transfer cacheline sized chunks in the streaming dram			//do it for the init and the steady state, primepump is handled below			handleCacheLine(filterNode, init, false);						//do every again for the primepump if it is the init stage and add the			//compute code for the init stage			if (init) {			    //add the dram command if this filter trace is an endpoint...			    generateFilterDRAMCommand(filterNode, filterInfo, tile, false, true);			    //create the prime pump stage switch code 			    //after the initialization switch code			    createPrimePumpSwitchCode(filterNode, 						      trace, filterInfo, false, tile, rawChip);			    handleCacheLine(filterNode, false, true);			    //generate the compute code for the trace and place it in			    //the tile						    tile.getComputeCode().addTraceInit(filterInfo);			}			else {			    //generate the compute code for the trace and place it in			    //the tile			    tile.getComputeCode().addTraceSteady(filterInfo);			}		    }		    		}		else if (traceNode.isInputTrace() && !KjcOptions.magicdram) {		    assert StreamingDram.differentDRAMs((InputTraceNode)traceNode) :			"inputs for a single InputTraceNode coming from same DRAM";		    //create the switch code to perform the joining		    joinInputTrace((InputTraceNode)traceNode, init, false);		    //now create the primepump code		    if (init) {			joinInputTrace((InputTraceNode)traceNode, false, true);		    }		}		else if (traceNode.isOutputTrace() && !KjcOptions.magicdram) {		    assert StreamingDram.differentDRAMs((OutputTraceNode)traceNode) :			"outputs for a single OutputTraceNode going to same DRAM";		    //create the switch code to perform the splitting		    splitOutputTrace((OutputTraceNode)traceNode, init, false);		    //now create the primepump code		    if (init) {			splitOutputTrace((OutputTraceNode)traceNode, false, true);		    }		}		//get the next tracenode		traceNode = traceNode.getNext();	    }	    	}	    }