}
    public void doit() {        System.out.println("Break large splits / joins into multiple levels...");        //the list of traces including any slices that are        //created by this pass, to be installed in the partitioner at the         //end of this driver        LinkedList<Trace> traces = new LinkedList<Trace>();        int oldNumTraces = partitioner.getTraceGraph().length;                //cycle thru the trace graph and see if there are any         //splits or joins that need to be reduced...        for (int i = 0; i < partitioner.getTraceGraph().length; i++) {            Trace trace = partitioner.getTraceGraph()[i];                        //see if the width of the joiner is too wide and             //keep breaking it up until it is, adding new levels...            while (trace.getHead().getWidth() > maxWidth)                breakUpJoin(trace, traces);                       //add the original trace to the new list of traces            traces.add(trace);                        //see if the width of the splitter is too wide            while (trace.getTail().getWidth() > maxWidth)                 breakUpSplit(trace, traces);                   }        //set the trace graph to the new list of traces that we have        //calculated in this pass        partitioner.setTraceGraphNewIds(traces.toArray(new Trace[0]));        System.out.println("Done Breaking Splits / Joins (was " + oldNumTraces +                 " traces, now " + partitioner.getTraceGraph().length + " traces).");            }