private static void peephole(final BloatContext context) {

		final Set liveMethods = new TreeSet(new MemberRefComparator());
		final CallGraph cg = context.getCallGraph();
		liveMethods.addAll(cg.liveMethods());

		// Perform peephole optimizations. We do this separately because
		// some peephole optimizations do things to the stack that
		// inlining doesn't like. For instance, a peephole optimizations
		// might make it so that a method has a non-empty stack upon
		// return. Inlining will barf at the sight of this.
		BloatBenchmark.tr("Performing peephole optimizations");

		final Iterator iter = liveMethods.iterator();
		while (BloatBenchmark.PEEPHOLE && iter.hasNext()) {
			try {
				final MethodEditor live = context.editMethod((MemberRef) iter
						.next());
				Peephole.transform(live);
				context.commit(live.methodInfo());
				context.release(live.methodInfo());

			} catch (final NoSuchMethodException ex314) {
				BloatBenchmark.err.println("** Could not find method "
						+ ex314.getMessage());
				ex314.printStackTrace(System.err);
				System.exit(1);
			}
		}
	}