cfg.optimize();  cfg.deconstrucSSA(); cfg.fixupAddresses();  BootableHashMap liveVariables = new BootableHashMap();
    private static void generateCode(AbstractX86Stream os, String className) throws MalformedURLException, ClassNotFoundException {				//VmByteCode code = loadByteCode(className, "arithOptIntx");		//VmByteCode code = loadByteCode(className, "simpleWhile");		VmByteCode code = loadByteCode(className, "terniary2");        X86CodeGenerator x86cg = new X86CodeGenerator(os, code.getLength());        IRControlFlowGraph cfg = new IRControlFlowGraph(code);		//BytecodeViewer bv = new BytecodeViewer();		//BytecodeParser.parse(code, bv);		//System.out.println(cfg.toString());		//System.out.println();        System.out.println(cfg);        IRGenerator irg = new IRGenerator(cfg);        BytecodeParser.parse(code, irg);		cfg.constructSSA();                Iterator it = cfg.basicBlockIterator();        while (it.hasNext()) {        	IRBasicBlock b = (IRBasicBlock) it.next();        	System.out.println();        	System.out.println(b + ", stackOffset = " + b.getStackOffset());        	Iterator qi = b.getQuads().iterator();        	while (qi.hasNext()) {        		System.out.println(qi.next());        	}        }		System.out.println();		// TODO constant folding, copy propagation, deconstruct SSA		// reorder addresses, compute liveness, allocate regs, and then...		// generate code ;-)//        BootableArrayList quads = irg.getQuadList();//        int n = quads.size();//        BootableHashMap liveVariables = new BootableHashMap();//        for (int i=0; i<n; i+=1) {//            Quad quad = (Quad) quads.get(i);////            System.out.println(quad);//            quad.doPass2(liveVariables);//            System.out.println(quad);//        }//        Collection lv = liveVariables.values();//        n = lv.size();//        LiveRange[] liveRanges = new LiveRange[n];//        Iterator it = lv.iterator();//        for (int i=0; i<n; i+=1) {//            Variable v = (Variable) it.next();//            liveRanges[i] = new LiveRange(v);//            // System.out.println("Live range: " + liveRanges[i]);//        }//        Arrays.sort(liveRanges);//        System.out.println(Arrays.asList(liveRanges));//        LinearScanAllocator lsa = new LinearScanAllocator(liveRanges);//        lsa.allocate();////        x86cg.setArgumentVariables(irg.getVariables(), irg.getNoArgs());//        x86cg.setSpilledVariables(lsa.getSpilledVariables());//        x86cg.emitHeader();////        n = quads.size();//        for (int i=0; i<n; i+=1) {//            Quad quad = (Quad) quads.get(i);//            if (!quad.isDeadCode()) {//                quad.generateCode(x86cg);//            }//        }    }