&& !(traceNode.isFileInput() && OffChipBuffer .unnecessary(traceNode))) {
&& !traceNode.isFileInput()) {
    private static void splitOutputTrace(OutputTraceNode traceNode,                                         boolean init, boolean primepump)    {        FilterTraceNode filter = (FilterTraceNode) traceNode.getPrevious();        // check to see if the splitting is necessary        if (OffChipBuffer.unnecessary(traceNode))            return;        FilterInfo filterInfo = FilterInfo.getFilterInfo(filter);        // calculate the number of items sent        int items = filterInfo.totalItemsSent(init, primepump);        StreamingDram sourcePort = IntraTraceBuffer            .getBuffer(filter, traceNode).getDRAM();        // the numbers of times we should cycle thru this "splitter"        assert items % traceNode.totalWeights() == 0 : "weights on output trace node does not divide evenly with items sent";        int iterations = items / traceNode.totalWeights();        // add some comments to the switch code        sourcePort.getNeighboringTile().getSwitchCode().appendComment(                                                                      init || primepump,                                                                      "Start split: This is the source (" + filter.toString() + ")");        Iterator dests = traceNode.getDestSet().iterator();        while (dests.hasNext()) {            StreamingDram dram = InterTraceBuffer                .getBuffer((Edge) dests.next()).getDRAM();            dram.getNeighboringTile().getSwitchCode().appendComment(                                                                    init || primepump,                                                                    "Start split: This a dest (" + dram.toString() + ")");        }        // SpaceTimeBackend.println("Split Output Trace: " + traceNode + "it: "        // + iterations + " ppSteadyIt: " +        // ppSteadyIt);        // System.out.println(traceNode.debugString());        // see if we want to compress (loop) the switch instructions, we cannot        if (SWITCH_COMP && iterations > SC_THRESHOLD) {            assert iterations > 1;            Iterator tiles = getTilesUsedInSplit(traceNode,                                                 IntraTraceBuffer.getBuffer(filter, traceNode).getDRAM())                .iterator();            HashMap labels = new HashMap();            while (tiles.hasNext()) {                RawTile tile = (RawTile) tiles.next();                // loop me                // send over both constants                Util.sendConstFromTileToSwitch(tile, iterations - 1, init,                                               primepump, FILTER_FIRE_LOOP_REG);                                // label 1                Label label = new Label();                tile.getSwitchCode().appendIns(label, (init || primepump));                labels.put(tile, label);            }            performSplitOutputTrace(traceNode, filter, filterInfo, init,                                    primepump, 1);            // now generate the jump back            tiles = getTilesUsedInSplit(traceNode,                                        IntraTraceBuffer.getBuffer(filter, traceNode).getDRAM())                .iterator();            while (tiles.hasNext()) {                RawTile tile = (RawTile) tiles.next();                Label label = (Label) labels.get(tile);                // add the branch back                BnezdIns branch = new BnezdIns(FILTER_FIRE_LOOP_REG,                                               FILTER_FIRE_LOOP_REG, label.getLabel());                tile.getSwitchCode().appendIns(branch, (init || primepump));            }            // end loop            fillCacheLineSplitOutputTrace(traceNode, filter, filterInfo, init,                                          primepump, iterations);        } else { //no compression            performSplitOutputTrace(traceNode, filter, filterInfo, init,                                    primepump, iterations);            fillCacheLineSplitOutputTrace(traceNode, filter, filterInfo, init,                                          primepump, iterations);        }        // because transfers must be cache line size divisible...        // disregard the dummy values coming out of the dram        // for the primepump we always read out of the init buffer for real        // output tracenodes        int typeSize = Util.getTypeSize(filterInfo.filter.getOutputType());        int mod = (((iterations) * traceNode.totalWeights() * typeSize) % RawChip.cacheLineWords);        // don't cache align file readers        if (mod > 0            && !(traceNode.isFileInput() && OffChipBuffer                 .unnecessary(traceNode))) {            int remainder = RawChip.cacheLineWords - mod;            // System.out.println("Remainder for disregarding input on split            // trace: " + remainder);            SwitchCodeStore.disregardIncoming(sourcePort, remainder, init                                              || primepump);        }        // add some comments to the switch code        sourcePort.getNeighboringTile().getSwitchCode().appendComment(                                                                      init || primepump,                                                                      "End split: This is the source (" + filter.toString() + ")");        dests = traceNode.getDestSet().iterator();        while (dests.hasNext()) {            StreamingDram dram = InterTraceBuffer                .getBuffer((Edge) dests.next()).getDRAM();            dram.getNeighboringTile().getSwitchCode().appendComment(                                                                    init || primepump,                                                                    "End split: This a dest (" + dram.toString() + ")");        }    }